anchor.diff:            ((rune= #// d)
              (let ((c (peek-rune input)))
                (cond ((name-start-rune-p c)
  +                    (ensure-dtd)        ;fixme
                       (read-tag-2 zinput input :etag))
                      (t
                       (error "Expecting name start rune after \"</\".")))))
             ((name-start-rune-p d)
              (unread-rune d input)
  +           (ensure-dtd)                ;fixme
              (read-tag-2 zinput input :stag))
             (t
              (error "Expected '!' or '?' after '<' in DTD.")))))
  
positive.code:         (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*))
  
negative.code: (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)
  