anchor.diff:          (let* ((effective-extid
                   (extid-using-catalog (absolute-extid input extid)))
                  (sysid (extid-system effective-extid))
  +               (fresh-dtd-p (null (dtd *ctx*)))
                  (cached-dtd
                   (and fresh-dtd-p
                        (not (standalone-p *ctx*))
  
positive.code:   (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) 
                          ;; xxx error message
                          (return))
                         ((funcall ,predicate ,c)
                          (return))
                         (t
                          (,collect ,c)
                          (consume-rune ,input-var))))))
           (locally
             ,@body)))))
    
  (defun read-name-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)
  