diff --git a/doc/using.html b/doc/using.html
index efc7360..ecbd003 100644
--- a/doc/using.html
+++ b/doc/using.html
@@ -67,6 +67,7 @@
Function CXML:PARSE-FILE (pathname handler &key ...)
Function CXML:PARSE-STREAM (stream handler &key ...)
Function CXML:PARSE-OCTETS (octets handler &key ...)
+ Function CXML:PARSE-ROD (rod handler &key ...)
Parse an XML document.
Return values from this function depend on the SAX handler used.
Arguments:
@@ -123,6 +124,11 @@
otherwise.
+
+ Note: parse-rod assumes that the input has already been
+ decoded into Unicode runes and ignores the encoding
+ specified in the XML declaration, if any.
+
Function CXML:PARSE-DTD-FILE (pathname)
diff --git a/xml/package.lisp b/xml/package.lisp
index 39bd4e6..8fc1255 100644
--- a/xml/package.lisp
+++ b/xml/package.lisp
@@ -34,8 +34,7 @@
#:parse-file
#:parse-stream
- ;; XXX encoding is mis-handled by parse-string, don't export it
- ;; #:parse-string
+ #:parse-rod
#:parse-octets
#:make-octet-vector-sink
diff --git a/xml/sax-tests/tests.lisp b/xml/sax-tests/tests.lisp
index 7d39069..38a33a6 100644
--- a/xml/sax-tests/tests.lisp
+++ b/xml/sax-tests/tests.lisp
@@ -1,7 +1,7 @@
(in-package :sax-tests)
(defun first-start-element-event (string)
- (let ((events (xml:parse-string string (make-instance 'event-collecting-handler))))
+ (let ((events (cxml:parse-rod string (make-instance 'event-collecting-handler))))
(find :start-element events :key #'car)))
@@ -17,7 +17,7 @@
(deftest attribute-uniqueness-1
(handler-case
- (xml:parse-string "")
+ (cxml:parse-rod "")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
@@ -26,7 +26,7 @@
(deftest attribute-uniqueness-2
(handler-case
- (xml:parse-string "")
+ (cxml:parse-rod "")
(error () nil)
(:no-error (&rest junk)
(declare (ignore junk))
@@ -36,7 +36,7 @@
(deftest attribute-uniqueness-3
(let ((sax:*namespace-processing* nil))
(handler-case
- (xml:parse-string "")
+ (cxml:parse-rod "")
(error () nil)
(:no-error (&rest junk)
(declare (ignore junk))
@@ -46,7 +46,7 @@
;;; Namespace undeclaring
(deftest undeclare-default-namespace-1
- (let* ((evts (xml:parse-string ""
+ (let* ((evts (cxml:parse-rod ""
(make-instance 'event-collecting-handler)))
(start-elt-events (remove :start-element evts :test (complement #'eql) :key #'car))
(evt1 (first start-elt-events))
@@ -59,7 +59,7 @@
(deftest undeclare-other-namespace
(handler-case
- (xml:parse-string "")
+ (cxml:parse-rod "")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
@@ -71,7 +71,7 @@
(deftest pi-names-are-ncnames-when-namespace-processing-1
(handler-case
- (xml:parse-string "")
+ (cxml:parse-rod "")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
@@ -81,7 +81,7 @@
(deftest pi-names-are-ncnames-when-namespace-processing-2
(let ((sax:*namespace-processing* nil))
(handler-case
- (xml:parse-string "")
+ (cxml:parse-rod "")
(error () nil)
(:no-error (&rest junk)
(declare (ignore junk))
@@ -90,7 +90,7 @@
(deftest entity-names-are-ncnames-when-namespace-processing-1
(handler-case
- (xml:parse-string " ]>&y:z;")
+ (cxml:parse-rod " ]>&y:z;")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
@@ -99,7 +99,7 @@
(deftest entity-names-are-ncnames-when-namespace-processing-2
(handler-case
- (xml:parse-string " ]>")
+ (cxml:parse-rod " ]>")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
@@ -109,7 +109,7 @@
(deftest entity-names-are-ncnames-when-namespace-processing-3
(let ((sax:*namespace-processing* nil))
(handler-case
- (xml:parse-string " ]>&y:z;")
+ (cxml:parse-rod " ]>&y:z;")
(error () nil)
(:no-error (&rest junk)
(declare (ignore junk))
@@ -119,7 +119,7 @@
(deftest entity-names-are-ncnames-when-namespace-processing-4
(let ((sax:*namespace-processing* nil))
(handler-case
- (xml:parse-string " ]>")
+ (cxml:parse-rod " ]>")
(error () nil)
(:no-error (&rest junk)
(declare (ignore junk))
@@ -259,7 +259,7 @@
(deftest redefine-xml-namespace-1
(handler-case
- (xml:parse-string "")
+ (cxml:parse-rod "")
(error () nil)
(:no-error (&rest junk)
(declare (ignore junk))
@@ -268,7 +268,7 @@
(deftest redefine-xml-namespace-2
(handler-case
- (xml:parse-string "")
+ (cxml:parse-rod "")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
@@ -277,7 +277,7 @@
(deftest redefine-xml-namespace-3
(handler-case
- (xml:parse-string "")
+ (cxml:parse-rod "")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
@@ -286,7 +286,7 @@
(deftest redefine-xml-namespace-4
(handler-case
- (xml:parse-string "")
+ (cxml:parse-rod "")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
@@ -295,7 +295,7 @@
(deftest redefine-xmlns-namespace-1
(handler-case
- (xml:parse-string "")
+ (cxml:parse-rod "")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
@@ -304,7 +304,7 @@
(deftest redefine-xmlns-namespace-2
(handler-case
- (xml:parse-string "")
+ (cxml:parse-rod "")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
@@ -313,7 +313,7 @@
(deftest redefine-xmlns-namespace-3
(handler-case
- (xml:parse-string "")
+ (cxml:parse-rod "")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
@@ -322,11 +322,9 @@
(deftest redefine-xmlns-namespace-4
(handler-case
- (xml:parse-string "")
+ (cxml:parse-rod "")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
nil))
t)
-
-
diff --git a/xml/xml-parse.lisp b/xml/xml-parse.lisp
index d489067..6d60367 100644
--- a/xml/xml-parse.lisp
+++ b/xml/xml-parse.lisp
@@ -3025,12 +3025,10 @@
(p/ext-subset zstream)
(dtd *ctx*)))))
-(defun parse-string (string handler)
- ;; XXX this function mis-handles encoding
+(defun parse-rod (string handler)
(parse-xstream (string->xstream string) handler))
(defun string->xstream (string)
- ;; XXX encoding is mis-handled by this kind of stream
(make-rod-xstream (string-rod string)))
(defclass octet-input-stream