Update of /project/cxml/cvsroot/cxml/xml In directory common-lisp.net:/tmp/cvs-serv25928/xml
Modified Files: xml-parse.lisp Log Message: fast durchweg s/:name/:nmtoken/, denn meist ist letzteres gemeint
-oasis/p71fail2.xml [not-wf?] FAILED: - well-formedness violation not detected -[ - Entity name is a Name, not an NMToken - ] -oasis/p72fail4.xml [not-wf?] FAILED: - well-formedness violation not detected -[ - Entity name is a name, not an NMToken - ]
Date: Sun Nov 27 01:27:00 2005 Author: dlichteblau
Index: cxml/xml/xml-parse.lisp diff -u cxml/xml/xml-parse.lisp:1.13 cxml/xml/xml-parse.lisp:1.14 --- cxml/xml/xml-parse.lisp:1.13 Sun Nov 27 01:07:29 2005 +++ cxml/xml/xml-parse.lisp Sun Nov 27 01:27:00 2005 @@ -77,7 +77,7 @@
;; *data-behaviour* = :DTD ;; -;; :name <interned-rod> +;; :nmtoken <interned-rod> ;; :#required ;; :#implied ;; :#fixed @@ -652,7 +652,7 @@
(defun wf-error (x &rest args) (error 'well-formedness-violation - :format-control "Validity constraint violated: ~@?" + :format-control "Well-formedness violated: ~@?" :format-arguments (list x args)))
(defvar *validate* t) @@ -1178,7 +1178,7 @@ ((rune= #/+ c) :+) ((name-rune-p c) (unread-rune c input) - (values :name (read-name-token input))) + (values :nmtoken (read-name-token input))) ((rune= #/# c) (let ((q (read-name-token input))) (cond ((equalp q '#.(string-rod "REQUIRED")) :|#REQUIRED|) @@ -1728,15 +1728,21 @@ (while (eq (peek-token input) :S) (consume-token input)))
+(defun p/nmtoken (input) + (nth-value 1 (expect input :nmtoken))) + (defun p/name (input) - (nth-value 1 (expect input :name))) + (let ((result (p/nmtoken input))) + (unless (name-start-rune-p (elt result 0)) + (wf-error "Expected name.")) + result))
(defun p/attlist-decl (input) ;; [52] AttlistDecl ::= '<!ATTLIST' S Name (S AttDef)* S? '>' (let (elm-name) (expect input :|<!ATTLIST|) (p/S input) - (setf elm-name (p/name input)) + (setf elm-name (p/nmtoken input)) (loop (let ((tok (read-token input))) (case tok @@ -1757,7 +1763,7 @@ (defun p/attdef (input) ;; [53] AttDef ::= Name S AttType S DefaultDecl (let (name type default) - (setf name (p/name input)) + (setf name (p/nmtoken input)) (p/S input) (setf type (p/att-type input)) (p/S input) @@ -1799,7 +1805,7 @@ ;; /* VC: Notation Attributes */ ;; [59] Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')' /* VC: Enumeration */ (multiple-value-bind (cat sem) (read-token input) - (cond ((eq cat :name) + (cond ((eq cat :nmtoken) (cond ((equalp sem '#.(string-rod "CDATA")) :CDATA) ((equalp sem '#.(string-rod "ID")) :ID) ((equalp sem '#.(string-rod "IDREF")) :IDREFS) @@ -1812,7 +1818,7 @@ (let (names) (p/S input) (expect input :() - (setf names (p/list input #'p/name :| )) + (setf names (p/list input #'p/nmtoken :| )) (expect input :)) (when *validate* (setf (referenced-notations *ctx*) @@ -1824,7 +1830,7 @@ ;; XXX Die Nmtoken-Syntax pruefen wir derzeit nur beim Validieren. (let (names) ;;(expect input :() - (setf names (p/list input #'p/name :| )) + (setf names (p/list input #'p/nmtoken :| )) (expect input :)) (cons :ENUMERATION names))) (t @@ -1901,7 +1907,7 @@ (multiple-value-bind (cat sem) (peek-token input) (cond ((member cat '(:" :')) (make-internal-entdef (p/entity-value input))) - ((and (eq cat :name) + ((and (eq cat :nmtoken) (or (equalp sem '#.(string-rod "SYSTEM")) (equalp sem '#.(string-rod "PUBLIC")))) (let (extid ndata) @@ -1909,12 +1915,12 @@ (when (eq kind :general) ;NDATA allowed at all? (cond ((eq (peek-token input) :S) (p/S? input) - (when (and (eq (peek-token input) :name) + (when (and (eq (peek-token input) :nmtoken) (equalp (nth-value 1 (peek-token input)) '#.(string-rod "NDATA"))) (consume-token input) (p/S input) - (setf ndata (p/name input)) + (setf ndata (p/nmtoken input)) (when *validate* (push ndata (referenced-notations *ctx*))))))) (make-external-entdef extid ndata))) @@ -1940,10 +1946,10 @@ (defun p/external-id (input &optional (public-only-ok-p nil)) ;; xxx public-only-ok-p (multiple-value-bind (cat sem) (read-token input) - (cond ((and (eq cat :name) (equalp sem '#.(string-rod "SYSTEM"))) + (cond ((and (eq cat :nmtoken) (equalp sem '#.(string-rod "SYSTEM"))) (p/S input) (make-extid nil (p/system-literal input))) - ((and (eq cat :name) (equalp sem '#.(string-rod "PUBLIC"))) + ((and (eq cat :nmtoken) (equalp sem '#.(string-rod "PUBLIC"))) (let (pub sys) (p/S input) (setf pub (p/pubid-literal input)) @@ -2015,7 +2021,7 @@ (let (name content) (expect input :|<!ELEMENT|) (p/S input) - (setf name (p/name input)) + (setf name (p/nmtoken input)) (p/S input) (setf content (normalize-mixed-cspec (p/cspec input))) (unless (legal-content-model-p content *validate*) @@ -2171,7 +2177,7 @@ (let ((term (let ((names nil) op-cat op res stream) (multiple-value-bind (cat sem) (peek-token input) - (cond ((eq cat :name) + (cond ((eq cat :nmtoken) (consume-token input) (cond ((rod= sem '#.(string-rod "EMPTY")) :EMPTY) @@ -2245,7 +2251,7 @@ (let (name id) (expect input :|<!NOTATION|) (p/S input) - (setf name (p/name input)) + (setf name (p/nmtoken input)) (p/S input) (setf id (p/external-id input t)) (p/S? input) @@ -2286,10 +2292,10 @@ (let ((stream (car (zstream-input-stack input)))) (p/S? input) (multiple-value-bind (cat sem) (read-token input) - (cond ((and (eq cat :name) + (cond ((and (eq cat :nmtoken) (rod= sem '#.(string-rod "INCLUDE"))) (p/include-sect input stream)) - ((and (eq cat :name) + ((and (eq cat :nmtoken) (rod= sem '#.(string-rod "IGNORE"))) (p/ignore-sect input stream)) (t @@ -2425,7 +2431,7 @@ name extid) (expect input :|<!DOCTYPE|) (p/S input) - (setq name (p/name input)) + (setq name (p/nmtoken input)) (when *validate* (setf (model-stack *ctx*) (list (make-root-model name)))) (when (eq (peek-token input) :S)