fixed the long-standing bug with start tags in :DTD behaviour

This commit is contained in:
dlichteblau
2006-09-16 07:52:59 +00:00
parent 21903f40ae
commit c94305e69c
2 changed files with 12 additions and 1 deletions

View File

@ -115,7 +115,8 @@
<li>Minor changes: clone-node on document as an extension. DOM <li>Minor changes: clone-node on document as an extension. DOM
class hierarchy reworked. New function parse-empty-document. class hierarchy reworked. New function parse-empty-document.
Fixed the DOM serializer to not throw away local names. Fixed the DOM serializer to not throw away local names.
ANSI conformance fixes.</li> Fixed a long-standing bug in the parser for documents without a
doctype. ANSI conformance fixes.</li>
</ul> </ul>
<p class="nomargin"><tt>rel-2006-01-05</tt></p> <p class="nomargin"><tt>rel-2006-01-05</tt></p>
<ul class="nomargin"> <ul class="nomargin">

View File

@ -1278,6 +1278,11 @@
(mu target))) (mu target)))
(t (t
(values :PI (cons target content)))))) (values :PI (cons target content))))))
((eq *data-behaviour* :DTD)
(unread-rune d input)
(unless (or (rune= #// d) (name-start-rune-p d))
(wf-error zinput "Expected '!' or '?' after '<' in DTD."))
(values :seen-< nil))
((rune= #// d) ((rune= #// d)
(let ((c (peek-rune input))) (let ((c (peek-rune input)))
(cond ((name-start-rune-p c) (cond ((name-start-rune-p c)
@ -2605,6 +2610,11 @@
(setf (model-stack *ctx*) (list (make-root-model root)))) (setf (model-stack *ctx*) (list (make-root-model root))))
;; element ;; element
(let ((*data-behaviour* :DOC)) (let ((*data-behaviour* :DOC))
(when (eq (peek-token input) :seen-<)
(multiple-value-bind (c s)
(read-token-after-|<| input (car (zstream-input-stack input)))
(setf (zstream-token-category input) c
(zstream-token-semantic input) s)))
(p/element input)) (p/element input))
;; optional Misc* ;; optional Misc*
(p/misc*-2 input) (p/misc*-2 input)