anchor.diff:    (let ((input-var (gensym))
           (collect (gensym))
           (c (gensym)))
  -    `(let ((,input-var ,input))
  -       (multiple-value-bind (,res ,res-start ,res-end) 
  -           (with-rune-collector/raw (,collect)
  -             (loop
  -               (let ((,c (peek-rune ,input-var)))
  -                 (cond ((eq ,c :eof) 
  +    `(LET ((,input-var ,input))
  +       (MULTIPLE-VALUE-BIND (,res ,res-start ,res-end) 
  +           (WITH-RUNE-COLLECTOR/RAW (,collect)
  +             (LOOP
  +               (LET ((,c (PEEK-RUNE ,input-var)))
  +                 (COND ((EQ ,c :EOF) 
                           ;; xxx error message
  -                        (return))
  -                       ((funcall ,predicate ,c)
  -                        (return))
  +                        (RETURN))
  +                       ((FUNCALL ,predicate ,c)
  +                        (RETURN))
                          (t
                           (,collect ,c)
  -                        (consume-rune ,input-var))))))
  -         (locally
  +                        (CONSUME-RUNE ,input-var))))))
  +         (LOCALLY
              ,@body)))))
     
   (defun read-name-token (input)
  
positive.code:         (when (disallow-internal-subset *ctx*)
            (error "document includes an internal subset"))
          (ensure-dtd)
          (setf fresh-dtd-p nil)
          (consume-token input)
          (while (progn (p/S? input)
                        (not (eq (peek-token input) :\] )))
  
negative.code: (defun p/doctype-decl (input &optional dtd-extid)
    (let ()
      (let ((*expand-pe-p* nil)
            name extid)
        (expect input :|<!DOCTYPE|)
        (p/S input)
  