Update of /project/cxml/cvsroot/cxml/xml
In directory common-lisp.net:/tmp/cvs-serv9524/xml
Modified Files:
package.lisp xml-parse.lisp
Log Message:
-ibm/not-wf/P32/ibm32n09.xml [not validating:] FAILED:
- well-formedness violation not detected
-[
- This is test violates WFC: Entity Declared in P68.
- The standalone document declaration has the value yes, BUT there is an
- external markup declaration of an entity (other than amp, lt, gt, apos,
- quot), and references to this entity appear in the document.
- ]
Date: Sun Nov 27 19:41:07 2005
Author: dlichteblau
Index: cxml/xml/package.lisp
diff -u cxml/xml/package.lisp:1.4 cxml/xml/package.lisp:1.5
--- cxml/xml/package.lisp:1.4 Sun Nov 27 01:51:36 2005
+++ cxml/xml/package.lisp Sun Nov 27 19:41:07 2005
@@ -6,7 +6,7 @@
(in-package :cl-user)
(defpackage :cxml
- (:use :cl :runes :encoding :trivial-gray-streams)
+ (:use :cl :runes :runes-encoding :trivial-gray-streams)
(:export
;; xstreams
#:make-xstream
Index: cxml/xml/xml-parse.lisp
diff -u cxml/xml/xml-parse.lisp:1.36 cxml/xml/xml-parse.lisp:1.37
--- cxml/xml/xml-parse.lisp:1.36 Sun Nov 27 19:20:11 2005
+++ cxml/xml/xml-parse.lisp Sun Nov 27 19:41:07 2005
@@ -62,7 +62,7 @@
;; slot of zstreams instead).
;; Common
-;; :xml-pi (<target> . <content>) ;processing-instruction starting with "<?xml"
+;; :xml-decl (<target> . <content>) ;processing-instruction starting with "<?xml"
;; :pi (<target> . <content>) ;processing-instruction
;; :stag (<name> . <atts>) ;start tag
;; :etag (<name> . <atts>) ;end tag
@@ -665,7 +665,7 @@
:format-arguments (list stream x args)))
(defvar *validate* t)
-(defvar *markup-declaration-external-p* nil)
+(defvar *external-subset-p* nil)
(defun validate-start-element (ctx name)
(when *validate*
@@ -816,7 +816,8 @@
(:constructor make-internal-entdef (value))
(:conc-name #:entdef-))
(value (error "missing argument") :type rod)
- (expansion nil))
+ (expansion nil)
+ (external-subset-p *external-subset-p*))
(defstruct (external-entdef
(:include entdef)
@@ -889,7 +890,7 @@
(setf (entdef-extid def)
(absolute-extid source-stream (entdef-extid def))))
(setf (gethash name table)
- (cons *markup-declaration-external-p* def)))))
+ (cons *external-subset-p* def)))))
(defun get-entity-definition (entity-name kind dtd)
(unless dtd
@@ -913,6 +914,10 @@
(let (r)
(etypecase def
(internal-entdef
+ (when (and (standalone-p *ctx*)
+ (entdef-external-subset-p def))
+ (wf-error
+ "entity declared in external subset, but document is standalone"))
(setf r (make-rod-xstream (entdef-value def)))
(setf (xstream-name r)
(make-stream-name :entity-name entity-name
@@ -977,7 +982,7 @@
; (:ENUMERATION <name>*)
default ;default value of attribute:
; :REQUIRED, :IMPLIED, (:FIXED content) or (:DEFAULT content)
- (external-p *markup-declaration-external-p*)
+ (external-p *external-subset-p*)
)
(defstruct elmdef
@@ -986,7 +991,7 @@
content ;content model [*]
attributes ;list of defined attributes
compiled-cspec ;cons of validation function for contentspec
- (external-p *markup-declaration-external-p*)
+ (external-p *external-subset-p*)
)
;; [*] in XML it is possible to define attributes before the element
@@ -1060,7 +1065,7 @@
(rod-string element-name)))))))
(sax:element-declaration (handler *ctx*) element-name content-model)
(setf (elmdef-content e) content-model)
- (setf (elmdef-external-p e) *markup-declaration-external-p*)
+ (setf (elmdef-external-p e) *external-subset-p*)
e))))
(defvar *redefinition-warning* nil)
@@ -1257,7 +1262,7 @@
((rune= #/? d)
(multiple-value-bind (target content) (read-pi input)
(cond ((rod= target '#.(string-rod "xml"))
- (values :xml-pi (cons target content)))
+ (values :xml-decl (cons target content)))
((rod-equal target '#.(string-rod "XML"))
(wf-error "You lost -- no XML processing instructions."))
((and sax:*namespace-processing* (position #/: target))
@@ -2348,7 +2353,7 @@
(:eof (return))
((:|<!ELEMENT| :|<!ATTLIST| :|<!ENTITY| :|<!NOTATION| :PI :COMMENT)
(let ((*expand-pe-p* t)
- (*markup-declaration-external-p* t))
+ (*external-subset-p* t))
(p/markup-decl input)))
((:PE-REFERENCE)
(let ((name (nth-value 1 (read-token input))))
@@ -2377,7 +2382,7 @@
;; | EntityDecl | NotationDecl
;; | PI | Comment /* WFC: PEs in Internal Subset */
(let ((token (peek-token input))
- (*expand-pe-p* (and *expand-pe-p* *markup-declaration-external-p*)))
+ (*expand-pe-p* (and *expand-pe-p* *external-subset-p*)))
(case token
(:|<!ELEMENT| (p/element-decl input))
(:|<!ATTLIST| (p/attlist-decl input))
@@ -2405,7 +2410,7 @@
(set-to-full-speed xstream))))
(defun p/ext-subset (input)
- (cond ((eq (peek-token input) :xml-pi)
+ (cond ((eq (peek-token input) :xml-decl)
(let ((hd (parse-text-decl (cdr (nth-value 1 (peek-token input))))))
(setup-encoding input hd))
(consume-token input)))
@@ -2554,7 +2559,7 @@
;; we will use the attribute-value parser for the xml decl.
(let ((*data-behaviour* :DTD))
;; optional XMLDecl?
- (cond ((eq (peek-token input) :xml-pi)
+ (cond ((eq (peek-token input) :xml-decl)
(let ((hd (parse-xml-decl (cdr (nth-value 1 (peek-token input))))))
(setf (standalone-p *ctx*) (eq (xml-header-standalone-p hd) :yes))
(setup-encoding input hd))
@@ -2737,7 +2742,7 @@
(defun p/ext-parsed-ent (input)
;; [78] extParsedEnt ::= '<?xml' VersionInfo? EncodingDecl S? '?>' content
- (when (eq (peek-token input) :xml-pi)
+ (when (eq (peek-token input) :xml-decl)
(let ((hd (parse-text-decl (cdr (nth-value 1 (peek-token input))))))
(setup-encoding input hd))
(consume-token input))