anchor.diff:    "With a list (foo \"bar\" monkey \"banana\"), return the string
   ' foo=\"bar\" monkey=\"banana\"'. If attrs is null or #\-, return \"\"."
     (with-gensyms (grouped-attrs attr stream)
  -    (if (or (null attrs) (eql #\- attrs)) ""
  +    (if (null attrs) ""
   	(if (not (listp attrs))
   	    (error "Not a list: ~s" attrs)
   	    `(with-output-to-string (,stream)
  
positive.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
  
negative.code: 	`(progn
  	   ,@(loop
  		for s in statements
  		if (not (null s))
  		if (html-statement-p s)
  		collect `(let* ((,element (first ',s))
  			       (,element-string (string-downcase ,element))
  