(defpackage :phaser.unhtml (:use :common-lisp) (:export #:text-excerpt)) (in-package :phaser.unhtml) (defun node-has-text (node) (let ((tag (plump:tag-name node)) (has-text (not (string= (plump:text node) "")))) (and (string= tag "p") has-text))) (defun text-children (dom) (loop for c across (plump:child-elements dom) if (node-has-text c) collect c )) (defun text-excerpt (content length) (let ((text-nodes (text-children (plump:parse content)))) (plump:text (first text-nodes))))