anchor.diff:  (defun p/doctype-decl (input &optional dtd-extid)
     (let ()
       (let ((*expand-pe-p* nil)
  -          (fresh-dtd-p t)
             name extid)
         (expect input :|<!DOCTYPE|)
         (p/S 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:   (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)
  