dom:from-list (after HTML parsing): improvements
This commit is contained in:
parent
104fceba8b
commit
e507bf0c1f
2 changed files with 23 additions and 21 deletions
|
@ -43,14 +43,13 @@
|
|||
;;;; the tests
|
||||
|
||||
(deftest test-dom-parse ()
|
||||
(let (inp parsed rendered)
|
||||
(let (inp parsed)
|
||||
(setf inp "<a href=\"https://example.com\">Link</a>")
|
||||
(setf parsed '(((:a :href "https://example.com") "Link")))
|
||||
(== (dom:parse inp) parsed)
|
||||
;(setf wanted (dom:a '(:href "https://example.com") "Link"))
|
||||
(setf parsed (dom:parse inp))
|
||||
(== parsed '(((:a :href "https://example.com") "Link")))
|
||||
;(== (dom:from-list parsed) ((dom:a '(:href "https://example.com") "Link")))
|
||||
(== (dom:render (dom:from-list parsed)) inp)
|
||||
)
|
||||
)
|
||||
))
|
||||
|
||||
(deftest test-dom ()
|
||||
(== (dom:render
|
||||
|
|
33
web/dom.lisp
33
web/dom.lisp
|
@ -145,22 +145,25 @@
|
|||
(defun newline ()
|
||||
(put-char #\Newline))
|
||||
|
||||
;;;; create elements from list of symbols
|
||||
;;;; conversions (for testing or manipulation of HTML using dom)
|
||||
|
||||
(defun from-list (lst)
|
||||
(mapcar #'(lambda (part)
|
||||
(etypecase part
|
||||
(string part)
|
||||
(symbol (funcall (find-symbol (string part) *this*)))
|
||||
(list
|
||||
(etypecase (car part)
|
||||
(symbol (apply (find-symbol (string (car part)) *this*)
|
||||
nil (from-list (cdr part))))
|
||||
(list (apply (find-symbol (string (caar part)) *this*)
|
||||
(cdar part) (from-list (cdr part))))
|
||||
)))) lst))
|
||||
|
||||
;;;; parsing (for testing or manipulation of HTML using dom)
|
||||
(defun to-list (&rest elems))
|
||||
|
||||
(defun parse (html)
|
||||
(hp:parse-html html))
|
||||
|
||||
(defun from-list (lst)
|
||||
"Create elements from a list of symbols as produced by parse-html."
|
||||
(mapcar #'from-list-part lst))
|
||||
|
||||
(defun from-list-part (part)
|
||||
(flet ((sym (k) (find-symbol (string k) *this*)))
|
||||
(etypecase part
|
||||
(string part)
|
||||
(symbol (funcall (sym part)))
|
||||
(list
|
||||
(let ((tag (car part)) attr)
|
||||
(when (consp tag)
|
||||
(setf attr (cdr tag) tag (car tag)))
|
||||
(apply (sym tag) attr (from-list (cdr part))))))))
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue