Documentation
Define a new YACLML tag macro.
Tag macros, like regular macros, expand into other YACLML tag
forms which are recursivly processed.
Source
(defmacro deftag-macro (name attributes &body body)
"Define a new YACLML tag macro.
Tag macros, like regular macros, expand into other YACLML tag
forms which are recursivly processed."
(let ((contents (gensym))
(doc-string (if (stringp (first body))
(pop body)
nil)))
`(progn
(setf (gethash ',name *expander-macros*)
(lambda (,contents)
(handler-bind ((unrecognized-attribute (lambda (c)
(setf (tag c) ,contents))))
(attribute-bind ,attributes ,contents
,@body))))
(defmacro ,name (&rest ,contents) ,doc-string
(funcall (gethash ',name *expander-macros*) ,contents))
',name)))Source Context