anchor.diff:        (values nil nil)))
   
   (defun uri-to-pathname (uri)
  -  (let ((scheme (puri:uri-scheme uri))
  -        (path (puri:uri-parsed-path uri)))
  -    (unless (member scheme '(nil :file))
  -      (error 'parser-error
  -             :format-control "URI scheme ~S not supported"
  -             :format-arguments (list scheme)))
  -    (if (eq (car path) :relative)
  -        (multiple-value-bind (name type)
  -            (parse-name.type (car (last path)))
  -          (make-pathname :directory (butlast path)
  -                         :name name
  -                         :type type))
  -        (multiple-value-bind (name type)
  -            (parse-name.type (car (last (cdr path))))
  -          (destructuring-bind (host device)
  -              (split-sequence-if (lambda (x) (eql x #\+))
  -                                 (or (puri:uri-host uri) "+"))
  -            (make-pathname :host (string-or host)
  -                           :device (string-or device)
  -                           :directory (cons :absolute (butlast (cdr path)))
  +  (flet ((unescape (str)
  +           (puri::decode-escaped-encoding str t puri::*reserved-characters*)))
  +    (let ((scheme (puri:uri-scheme uri))
  +          (path (puri:uri-parsed-path uri)))
  +      (setf path (cons (car path) (mapcar #'unescape (cdr path))))
  +      (unless (member scheme '(nil :file))
  +        (error 'parser-error
  +               :format-control "URI scheme ~S not supported"
  +               :format-arguments (list scheme)))
  +      (if (eq (car path) :relative)
  +          (multiple-value-bind (name type)
  +              (parse-name.type (car (last path)))
  +            (make-pathname :directory (butlast path)
                              :name name
  -                           :type type))))))
  +                           :type type))
  +          (multiple-value-bind (name type)
  +              (parse-name.type (car (last (cdr path))))
  +            (destructuring-bind (host device)
  +                (split-sequence-if (lambda (x) (eql x #\+))
  +                                   (or (puri:uri-host uri) "+"))
  +              (make-pathname :host (string-or host)
  +                             :device (string-or device)
  +                             :directory (cons :absolute (butlast (cdr path)))
  +                             :name name
  +                             :type type)))))))
   
   (defun parse-xstream (xstream handler &rest args)
     (let ((zstream (make-zstream :input-stack (list xstream))))
  
positive.code: (defun p/doctype-decl (input &optional dtd-extid)
    (let ()
      (let ((*expand-pe-p* nil)
            name extid)
        (expect input :|<!DOCTYPE|)
        (p/S input)
  
negative.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) :\] )))
  