anchor.diff:           (prog2 (advance)
                (consume-until (make-matcher (any #\" #\')))
              (advance))
  -         (consume-until (make-matcher (or (is #\Space)
  -                                          (is #\Tab)
  -                                          (is #\Newline)
  -                                          (is #\Linefeed)
  -                                          (is #\Page)
  -                                          (is #\Return)
  -                                          :tag-end)))))))
  +         (consume-until (make-matcher (or :whitespace :tag-end)))))))
   
   (defun read-attribute-name ()
     "Reads an attribute name."
  -  (consume-until (make-matcher (or (is #\=)
  -                                   (is #\Space)
  -                                   (is #\Tab)
  -                                   (is #\Newline)
  -                                   (is #\Linefeed)
  -                                   (is #\Page)
  -                                   (is #\Return)
  -                                   :tag-end))))
  +  (consume-until (make-matcher (or (is #\=) :whitespace :tag-end))))
   
   (defun read-attribute ()
     "Reads an attribute and returns it as a key value cons."
  
positive.code:            (setf (nth ,posgens *tag-dispatchers*) ,valgens)
             (push ,valgens *tag-dispatchers*)))))
  
  (define-matcher name (or (in #\a #\z) (in #\? #\Z) (in #\- #\:) (is #\\) (is #\_) (is #\!) (is #\#)))
  (define-matcher tag-end (or (and (is #\/) (next (is #\>))) (is #\>)))
  
  
negative.code:   "Attempts to read a tag and dispatches or defaults to READ-STANDARD-TAG.
  Returns the completed node if one can be read."
    (if (and (char= #\< (consume))
             (funcall (make-matcher :name)))   
        (let ((name (read-name)))
          (loop for (d test func) in *tag-dispatchers*
                when (funcall (the function test) name)
  