anchor.diff:  				   (string-downcase (string (car ,attr))))
   			       (cadr ,attr)))))))))
   
  -(defmacro generate-html ((stream &key (close-void t)) &rest statements)
  +(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
  
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:   (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)))
  