anchor.diff:    (with-gensyms (stream)
       `(with-output-to-string (,stream)
          (generate-html (,stream) ,@statements))))
  +
  +(defmacro xml (&rest statements)
  +  "Like html, except for the void elements have closing tags and content:
  +<meta ...>...</meta> instead of <meta ... />"
  +  ;; by binding void-elements to nil, no element can be found  in
  +  ;; *void-elements* and void-element-p will always return nil ==> there are no
  +  ;; void elements ==> all elements prints closing tags and content
  +  `(let ((*void-elements* nil))
  +     (html ,@statements)))
  
positive.code: 	`(progn
  	   ,@(loop
  		for s in statements
  		if (html-statement-p s)
  		collect `(let* ((,element (first ',s))
  			       (,element-string (string-downcase ,element))
  
negative.code: 				   (string-downcase (string (car ,attr))))
  			       (cadr ,attr)))))))))
  
  (defmacro generate-html ((stream &key (close-void t))
  			 &rest statements)
    "Write html output to the stream. statements should be html statements or
  something that can be passed to format's \"~a\". If close-void is t, end void
  elements with a '\' (ie <meta ... />). Please see html for how the statements
  