diff --git a/test/test-web.lisp b/test/test-web.lisp index 3e75f8c..5079da1 100644 --- a/test/test-web.lisp +++ b/test/test-web.lisp @@ -43,14 +43,13 @@ ;;;; the tests (deftest test-dom-parse () - (let (inp parsed rendered) + (let (inp parsed) (setf inp "Link") - (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 diff --git a/web/dom.lisp b/web/dom.lisp index b579494..c8f5c08 100644 --- a/web/dom.lisp +++ b/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)))))))) +