diff --git a/README.html b/README.html
index 939873e..ac3588a 100644
--- a/README.html
+++ b/README.html
@@ -114,6 +114,8 @@ $ cvs co cxml
to parse-dtd-stream; SAX proxy class
Minor bugfixes: Workaround for CMUCL problem
with fd-streams (can read from cmucl sockets now)
+ Port to OpenMCL (thanks to Rudi Schlatte).
+ Port to LispWorks (thanks to Edi Weitz).
patch-357 (2004-10-10)
@@ -191,6 +193,9 @@ $ cvs co cxml
CLISP needs to be run with an option like -E iso-8869-1
teaching it to accept cxml's non-ASCII source files.
+ -
+ LispWorks
+
Incomplete port:
diff --git a/cxml.asd b/cxml.asd
index 11a585f..8f3cadc 100644
--- a/cxml.asd
+++ b/cxml.asd
@@ -53,7 +53,9 @@
#+(and allegro-version>= (version>= 5.0)) "dep-acl5"
#+(and allegro-version>= (not (version>= 5.0))) "dep-acl"
#+openmcl "dep-openmcl"
- #-(or sbcl CLISP CMU allegro openmcl) #.(error "Configure!")
+ #+lispworks "dep-lw"
+ #-(or sbcl CLISP CMU allegro openmcl lispworks)
+ #.(error "unsupported lisp implementation!")
:depends-on ("package"))
(:file runes
:pathname
diff --git a/runes/characters.lisp b/runes/characters.lisp
index 828a40c..58674f5 100644
--- a/runes/characters.lisp
+++ b/runes/characters.lisp
@@ -24,9 +24,9 @@
(in-package :runes)
-(deftype rune () 'character)
-(deftype rod () '(vector character))
-(deftype simple-rod () '(simple-array character))
+(deftype rune () #-lispworks 'character #+lispworks 'lw:simple-char)
+(deftype rod () '(vector rune))
+(deftype simple-rod () '(simple-array rune))
(definline rune (rod index)
(char rod index))
@@ -101,7 +101,7 @@
(string-equal x y))
(definline make-rod (size)
- (make-string size))
+ (make-string size :element-type 'rune))
(defun char-rune (char)
char)
diff --git a/runes/dep-lw.lisp b/runes/dep-lw.lisp
new file mode 100644
index 0000000..b6bfbbd
--- /dev/null
+++ b/runes/dep-lw.lisp
@@ -0,0 +1,30 @@
+;;; -*- Mode: Lisp; Syntax: Common-Lisp; Package: CL-USER; -*-
+;;; ---------------------------------------------------------------------------
+;;; Title: LispWorks dependent stuff + fixups
+;;; Created: 2005-01-28 09:43
+;;; Author: Edi Weitz (Copied from dep-cmucl.lisp)
+;;; License: LLGPL (See file COPYING for details).
+;;; ---------------------------------------------------------------------------
+;;; (c) copyright 1999 by Gilbert Baumann
+
+;;; This code is free software; you can redistribute it and/or modify it
+;;; under the terms of the version 2.1 of the GNU Lesser General Public
+;;; License as published by the Free Software Foundation, as clarified
+;;; by the "Preamble to the Gnu Lesser General Public License" found in
+;;; the file COPYING.
+;;;
+;;; This code is distributed in the hope that it will be useful,
+;;; but without any warranty; without even the implied warranty of
+;;; merchantability or fitness for a particular purpose. See the GNU
+;;; Lesser General Public License for more details.
+;;;
+;;; Version 2.1 of the GNU Lesser General Public License is in the file
+;;; COPYING that was distributed with this file. If it is not present,
+;;; you can access it from http://www.gnu.org/copyleft/lesser.txt (until
+;;; superseded by a newer version) or write to the Free Software
+;;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+(defmacro runes::definline (name args &body body)
+ `(progn
+ (declaim (inline ,name))
+ (defun ,name ,args .,body)))
diff --git a/test/xmlconf.lisp b/test/xmlconf.lisp
index 7f7c752..d4b53ea 100644
--- a/test/xmlconf.lisp
+++ b/test/xmlconf.lisp
@@ -6,25 +6,37 @@
(defun get-attribute (element name)
(rod-string (dom:get-attribute element name)))
-(defun relevant-test-p (test)
- (and (equal (get-attribute test "TYPE") "valid")
- (let ((version (get-attribute test "RECOMMENDATION")))
- (cond
- ((or (equal version "") ;XXX
- (equal version "XML1.0"))
- (cond
- ((equal (get-attribute test "NAMESPACE") "no")
- (format t "~A: test applies to parsers without namespace support, skipping~%"
- (get-attribute test "URI"))
- nil)
- (t
- t)))
- ((equal version "XML1.1")
- ;; not supported
- nil)
- (t
- (warn "unrecognized RECOMMENDATION value: ~S" version)
- nil)))))
+(defparameter *bad-tests*
+ '(;; TS14
+ ;; http://lists.w3.org/Archives/Public/public-xml-testsuite/2002Mar/0001.html
+ "ibm-valid-P28-ibm28v02.xml"
+ "ibm-valid-P29-ibm29v01.xml"
+ "ibm-valid-P29-ibm29v02.xml"))
+
+(defun test-class (test)
+ (cond
+ ((not (and (let ((version (get-attribute test "RECOMMENDATION")))
+ (cond
+ ((or (equal version "") ;XXX
+ (equal version "XML1.0"))
+ (cond
+ ((equal (get-attribute test "NAMESPACE") "no")
+ (format t "~A: test applies to parsers without namespace support, skipping~%"
+ (get-attribute test "URI"))
+ nil)
+ (t
+ t)))
+ ((equal version "XML1.1")
+ ;; not supported
+ nil)
+ (t
+ (warn "unrecognized RECOMMENDATION value: ~S" version)
+ nil)))
+ (not (member (get-attribute test "ID") *bad-tests* :test 'equal))))
+ nil)
+ ((equal (get-attribute test "TYPE") "valid") :valid)
+ ((equal (get-attribute test "TYPE") "invalid") :invalid)
+ (t nil)))
(defun test-pathnames (directory test)
(let* ((sub-directory
@@ -42,10 +54,10 @@
(defun serialize-document (document)
(map 'vector #'char-code
(with-output-to-string (s)
- (xml:unparse-document document s))))
+ (cxml:unparse-document document s :canonical 2))))
(defun file-contents (pathname)
- (with-open-file (s pathname)
+ (with-open-file (s pathname :element-type '(unsigned-byte 8))
(let ((result
(make-array (file-length s) :element-type '(unsigned-byte 8))))
(read-sequence result s )
@@ -54,51 +66,94 @@
(defun run-all-tests (directory)
(let* ((pathname (merge-pathnames "xmlconf.xml" directory))
(builder (dom:make-dom-builder))
- (xmlconf (xml:parse-file pathname builder))
+ (xmlconf (cxml:parse-file pathname builder))
(ntried 0)
(nfailed 0)
- (nskipped 0))
+ (nskipped 0)
+ ;; XXX someone found it funny to include invalid URIs in the
+ ;; test suite. And no, in "invalid" not "not-wf".
+ (puri:*strict-parse* nil))
(dom:do-node-list (test (dom:get-elements-by-tag-name xmlconf "TEST"))
- (cond
- ((relevant-test-p test)
- (incf ntried)
- (multiple-value-bind (pathname output)
- (test-pathnames directory test)
- (princ pathname)
- (unless (probe-file pathname)
- (error "file not found: ~A" pathname))
- (with-simple-restart (skip-test "Skip this test")
- (handler-case
- (progn
- (mp:with-timeout (60)
- (let ((document
- (xml:parse-file pathname (dom:make-dom-builder))))
- (cond
- ((null output)
- (format t " ok (output not checked)~%"))
- ((equalp (file-contents output)
- (serialize-document document))
- (format t " ok~%"))
- (t
- (let ((error-output
- (make-pathname :type "error" :defaults output)))
- (with-open-file (s error-output
- :direction :output
- :if-exists :supersede)
- (write-sequence (serialize-document document) s))
- (error "well-formed, but output ~S not the expected ~S~%"
- error-output output)))))))
- ((and serious-condition (not excl:interrupt-signal)) (c)
- (incf nfailed)
- (format t " FAILED:~% ~A~%[~A]~%"
- c
- (rod-string
- (dom:data
- (dom:item (dom:child-nodes test) 0)))))))))
- (t
- (incf nskipped))))
+ (let ((description
+ (rod-string (dom:data (dom:item (dom:child-nodes test) 0))))
+ (class (test-class test)))
+ (cond
+ (class
+ (incf ntried)
+ (multiple-value-bind (pathname output)
+ (test-pathnames directory test)
+ (princ pathname)
+ (unless (probe-file pathname)
+ (error "file not found: ~A" pathname))
+ (with-simple-restart (skip-test "Skip this test")
+ (unless (run-test class pathname output description)
+ (incf nfailed))
+ (fresh-line))))
+ (t
+ (incf nskipped)))))
(format t "~&~D/~D tests failed; ~D test~:P were skipped"
nfailed ntried nskipped)))
+(defmethod run-test :around (class pathname output description &rest args)
+ (declare (ignore class pathname output args))
+ (handler-case
+ (call-next-method)
+ (serious-condition (c)
+ (format t " FAILED:~% ~A~%[~A]~%" c description)
+ nil)))
+
+(defmethod run-test ((class null) pathname output description &rest args)
+ (declare (ignore description))
+ (let ((document (apply #'cxml:parse-file
+ pathname
+ (dom:make-dom-builder)
+ args)))
+ (cond
+ ((null output)
+ (format t " input"))
+ ((equalp (file-contents output) (serialize-document document))
+ (format t " input/output"))
+ (t
+ (let ((error-output (make-pathname :type "error" :defaults output)))
+ (with-open-file (s error-output
+ :element-type '(unsigned-byte 8)
+ :direction :output
+ :if-exists :supersede)
+ (write-sequence (serialize-document document) s))
+ (error "well-formed, but output ~S not the expected ~S~%"
+ error-output output))))
+ t))
+
+(defmethod run-test
+ ((class (eql :valid)) pathname output description &rest args)
+ (assert (null args))
+ (and (progn
+ (format t " [not validating:]")
+ (run-test nil pathname output description :validate nil))
+ (progn
+ (format t " [validating:]")
+ (run-test nil pathname output description :validate t))))
+
+(defmethod run-test
+ ((class (eql :invalid)) pathname output description &rest args)
+ (assert (null args))
+ (and (progn
+ (format t " [not validating:]")
+ (run-test nil pathname output description :validate nil))
+ (handler-case
+ (progn
+ (format t " [validating:]")
+ (cxml:parse-file pathname (dom:make-dom-builder) :validate t)
+ (error "validity error not detected")
+ nil)
+ (cxml:validity-error ()
+ (format t " invalid")
+ t))))
+
#+(or)
(xmlconf::run-all-tests "/mnt/debian/space/xmlconf/")
+
+#+(or)
+(progn
+ (#+allegro mp:with-timeout #+allegro (60) #-allegro progn
+ ))
diff --git a/xml/package.lisp b/xml/package.lisp
index 6722810..db5f744 100644
--- a/xml/package.lisp
+++ b/xml/package.lisp
@@ -1,17 +1,23 @@
+;;;; package.lisp -- Paketdefinition
+;;;;
+;;;; This file is part of the CXML parser, released under (L)LGPL.
+;;;; See file COPYING for details.
+
(in-package :cl-user)
-(defpackage :Encoding
- (:use :glisp)
+(defpackage :cxml
+ (:use :cl :runes :encoding)
+ (:import-from #+sbcl :sb-gray
+ #+allegro :excl
+ #+cmu :ext
+ #+clisp :gray
+ #+openmcl :ccl
+ #+lispworks :stream
+ #-(or sbcl allegro cmu clisp openmcl lispworks) ...
+ #:fundamental-binary-input-stream
+ #-(or clisp openmcl) #:stream-read-sequence
+ stream-read-byte)
(:export
- #:find-encoding
- #:decode-sequence))
-
-(defpackage :XML
- (:use
- :glisp
- :encoding)
-
- (:Export
;; xstreams
#:make-xstream
#:make-rod-xstream
@@ -38,4 +44,41 @@
#:parse-file
#:parse-stream
- #:parse-string) )
+ ;; XXX encoding is mis-handled by parse-string, don't export it
+ ;; #:parse-string
+ #:parse-octets
+
+ #:make-character-stream-sink
+ #:make-octet-vector-sink
+ #:make-octet-stream-sink
+ #:unparse-document
+ #:unparse-document-to-octets
+
+ #:with-xml-output
+ #:with-element
+ #:attribute
+ #:cdata
+ #:text
+
+ #:parse-dtd-file
+ #:parse-dtd-stream
+ #:validity-error
+ #:make-validator
+
+ #:*cache-all-dtds*
+ #:*dtd-cache*
+ #:getdtd
+ #:remdtd
+ #:make-dtd-cache
+ #:clear-dtd-cache
+ #:make-extid
+
+ #:*catalog*
+ #:*prefer*
+ #:make-catalog
+ #:resolve-uri
+ #:resolve-extid
+
+ #:make-recoder
+ #:sax-proxy
+ #:proxy-chained-handler))
diff --git a/xml/xml-name-rune-p.lisp b/xml/xml-name-rune-p.lisp
index 2f5a8a0..26dc699 100644
--- a/xml/xml-name-rune-p.lisp
+++ b/xml/xml-name-rune-p.lisp
@@ -162,43 +162,45 @@
(<= 12540 rune 12542)))
(base-rune-p (rune)
- (or
- (<= 65 rune 90) (<= 97 rune 122) (<= 192 rune 214) (<= 216 rune 246) (<= 248 rune 255) (<= 256 rune 305)
- (<= 308 rune 318) (<= 321 rune 328) (<= 330 rune 382) (<= 384 rune 451) (<= 461 rune 496) (<= 500 rune 501)
- (<= 506 rune 535) (<= 592 rune 680) (<= 699 rune 705) (= 902 rune) (<= 904 rune 906) (= 908 rune)
- (<= 910 rune 929) (<= 931 rune 974) (<= 976 rune 982) (= 986 rune) (= 988 rune) (= 990 rune) (= 992 rune)
- (<= 994 rune 1011) (<= 1025 rune 1036) (<= 1038 rune 1103) (<= 1105 rune 1116) (<= 1118 rune 1153)
- (<= 1168 rune 1220) (<= 1223 rune 1224) (<= 1227 rune 1228) (<= 1232 rune 1259) (<= 1262 rune 1269)
- (<= 1272 rune 1273) (<= 1329 rune 1366) (= 1369 rune) (<= 1377 rune 1414) (<= 1488 rune 1514)
- (<= 1520 rune 1522) (<= 1569 rune 1594) (<= 1601 rune 1610) (<= 1649 rune 1719) (<= 1722 rune 1726)
- (<= 1728 rune 1742) (<= 1744 rune 1747) (= 1749 rune) (<= 1765 rune 1766) (<= 2309 rune 2361) (= 2365 rune)
- (<= 2392 rune 2401) (<= 2437 rune 2444) (<= 2447 rune 2448) (<= 2451 rune 2472) (<= 2474 rune 2480)
- (= 2482 rune) (<= 2486 rune 2489) (<= 2524 rune 2525) (<= 2527 rune 2529) (<= 2544 rune 2545)
- (<= 2565 rune 2570) (<= 2575 rune 2576) (<= 2579 rune 2600) (<= 2602 rune 2608) (<= 2610 rune 2611)
- (<= 2613 rune 2614) (<= 2616 rune 2617) (<= 2649 rune 2652) (= 2654 rune) (<= 2674 rune 2676)
- (<= 2693 rune 2699) (= 2701 rune) (<= 2703 rune 2705) (<= 2707 rune 2728) (<= 2730 rune 2736)
- (<= 2738 rune 2739) (<= 2741 rune 2745) (= 2749 rune) (= 2784 rune) (<= 2821 rune 2828) (<= 2831 rune 2832)
- (<= 2835 rune 2856) (<= 2858 rune 2864) (<= 2866 rune 2867) (<= 2870 rune 2873) (= 2877 rune)
- (<= 2908 rune 2909) (<= 2911 rune 2913) (<= 2949 rune 2954) (<= 2958 rune 2960) (<= 2962 rune 2965)
- (<= 2969 rune 2970) (= 2972 rune) (<= 2974 rune 2975) (<= 2979 rune 2980) (<= 2984 rune 2986)
- (<= 2990 rune 2997) (<= 2999 rune 3001) (<= 3077 rune 3084) (<= 3086 rune 3088) (<= 3090 rune 3112)
- (<= 3114 rune 3123) (<= 3125 rune 3129) (<= 3168 rune 3169) (<= 3205 rune 3212) (<= 3214 rune 3216)
- (<= 3218 rune 3240) (<= 3242 rune 3251) (<= 3253 rune 3257) (= 3294 rune) (<= 3296 rune 3297)
- (<= 3333 rune 3340) (<= 3342 rune 3344) (<= 3346 rune 3368) (<= 3370 rune 3385) (<= 3424 rune 3425)
- (<= 3585 rune 3630) (= 3632 rune) (<= 3634 rune 3635) (<= 3648 rune 3653) (<= 3713 rune 3714) (= 3716 rune)
- (<= 3719 rune 3720) (= 3722 rune) (= 3725 rune) (<= 3732 rune 3735) (<= 3737 rune 3743) (<= 3745 rune 3747)
- (= 3749 rune) (= 3751 rune) (<= 3754 rune 3755) (<= 3757 rune 3758) (= 3760 rune) (<= 3762 rune 3763) (= 3773 rune)
- (<= 3776 rune 3780) (<= 3904 rune 3911) (<= 3913 rune 3945) (<= 4256 rune 4293) (<= 4304 rune 4342)
- (= 4352 rune) (<= 4354 rune 4355) (<= 4357 rune 4359) (= 4361 rune) (<= 4363 rune 4364) (<= 4366 rune 4370)
- (= 4412 rune) (= 4414 rune) (= 4416 rune) (= 4428 rune) (= 4430 rune) (= 4432 rune) (<= 4436 rune 4437) (= 4441 rune)
- (<= 4447 rune 4449) (= 4451 rune) (= 4453 rune) (= 4455 rune) (= 4457 rune) (<= 4461 rune 4462) (<= 4466 rune 4467)
- (= 4469 rune) (= 4510 rune) (= 4520 rune) (= 4523 rune) (<= 4526 rune 4527) (<= 4535 rune 4536) (= 4538 rune)
- (<= 4540 rune 4546) (= 4587 rune) (= 4592 rune) (= 4601 rune) (<= 7680 rune 7835) (<= 7840 rune 7929)
- (<= 7936 rune 7957) (<= 7960 rune 7965) (<= 7968 rune 8005) (<= 8008 rune 8013) (<= 8016 rune 8023)
- (= 8025 rune) (= 8027 rune) (= 8029 rune) (<= 8031 rune 8061) (<= 8064 rune 8116) (<= 8118 rune 8124) (= 8126 rune)
- (<= 8130 rune 8132) (<= 8134 rune 8140) (<= 8144 rune 8147) (<= 8150 rune 8155) (<= 8160 rune 8172)
- (<= 8178 rune 8180) (<= 8182 rune 8188) (= 8486 rune) (<= 8490 rune 8491) (= 8494 rune) (<= 8576 rune 8578)
- (<= 12353 rune 12436) (<= 12449 rune 12538) (<= 12549 rune 12588) (<= 44032 rune 55203)))
+ ;; split into two ORs for LispWorks...
+ (or
+ (or (<= 65 rune 90) (<= 97 rune 122) (<= 192 rune 214) (<= 216 rune 246) (<= 248 rune 255) (<= 256 rune 305)
+ (<= 308 rune 318) (<= 321 rune 328) (<= 330 rune 382) (<= 384 rune 451) (<= 461 rune 496) (<= 500 rune 501)
+ (<= 506 rune 535) (<= 592 rune 680) (<= 699 rune 705) (= 902 rune) (<= 904 rune 906) (= 908 rune)
+ (<= 910 rune 929) (<= 931 rune 974) (<= 976 rune 982) (= 986 rune) (= 988 rune) (= 990 rune) (= 992 rune)
+ (<= 994 rune 1011) (<= 1025 rune 1036) (<= 1038 rune 1103) (<= 1105 rune 1116) (<= 1118 rune 1153)
+ (<= 1168 rune 1220) (<= 1223 rune 1224) (<= 1227 rune 1228) (<= 1232 rune 1259) (<= 1262 rune 1269)
+ (<= 1272 rune 1273) (<= 1329 rune 1366) (= 1369 rune) (<= 1377 rune 1414) (<= 1488 rune 1514)
+ (<= 1520 rune 1522) (<= 1569 rune 1594) (<= 1601 rune 1610) (<= 1649 rune 1719) (<= 1722 rune 1726)
+ (<= 1728 rune 1742) (<= 1744 rune 1747) (= 1749 rune) (<= 1765 rune 1766) (<= 2309 rune 2361) (= 2365 rune)
+ (<= 2392 rune 2401) (<= 2437 rune 2444) (<= 2447 rune 2448) (<= 2451 rune 2472) (<= 2474 rune 2480)
+ (= 2482 rune) (<= 2486 rune 2489) (<= 2524 rune 2525) (<= 2527 rune 2529) (<= 2544 rune 2545)
+ (<= 2565 rune 2570) (<= 2575 rune 2576) (<= 2579 rune 2600) (<= 2602 rune 2608) (<= 2610 rune 2611)
+ (<= 2613 rune 2614) (<= 2616 rune 2617) (<= 2649 rune 2652) (= 2654 rune) (<= 2674 rune 2676)
+ (<= 2693 rune 2699) (= 2701 rune) (<= 2703 rune 2705) (<= 2707 rune 2728) (<= 2730 rune 2736)
+ (<= 2738 rune 2739) (<= 2741 rune 2745) (= 2749 rune) (= 2784 rune) (<= 2821 rune 2828) (<= 2831 rune 2832)
+ (<= 2835 rune 2856) (<= 2858 rune 2864) (<= 2866 rune 2867) (<= 2870 rune 2873) (= 2877 rune)
+ (<= 2908 rune 2909) (<= 2911 rune 2913) (<= 2949 rune 2954) (<= 2958 rune 2960) (<= 2962 rune 2965)
+ (<= 2969 rune 2970) (= 2972 rune))
+ (or (<= 2974 rune 2975) (<= 2979 rune 2980) (<= 2984 rune 2986)
+ (<= 2990 rune 2997) (<= 2999 rune 3001) (<= 3077 rune 3084) (<= 3086 rune 3088) (<= 3090 rune 3112)
+ (<= 3114 rune 3123) (<= 3125 rune 3129) (<= 3168 rune 3169) (<= 3205 rune 3212) (<= 3214 rune 3216)
+ (<= 3218 rune 3240) (<= 3242 rune 3251) (<= 3253 rune 3257) (= 3294 rune) (<= 3296 rune 3297)
+ (<= 3333 rune 3340) (<= 3342 rune 3344) (<= 3346 rune 3368) (<= 3370 rune 3385) (<= 3424 rune 3425)
+ (<= 3585 rune 3630) (= 3632 rune) (<= 3634 rune 3635) (<= 3648 rune 3653) (<= 3713 rune 3714) (= 3716 rune)
+ (<= 3719 rune 3720) (= 3722 rune) (= 3725 rune) (<= 3732 rune 3735) (<= 3737 rune 3743) (<= 3745 rune 3747)
+ (= 3749 rune) (= 3751 rune) (<= 3754 rune 3755) (<= 3757 rune 3758) (= 3760 rune) (<= 3762 rune 3763) (= 3773 rune)
+ (<= 3776 rune 3780) (<= 3904 rune 3911) (<= 3913 rune 3945) (<= 4256 rune 4293) (<= 4304 rune 4342)
+ (= 4352 rune) (<= 4354 rune 4355) (<= 4357 rune 4359) (= 4361 rune) (<= 4363 rune 4364) (<= 4366 rune 4370)
+ (= 4412 rune) (= 4414 rune) (= 4416 rune) (= 4428 rune) (= 4430 rune) (= 4432 rune) (<= 4436 rune 4437) (= 4441 rune)
+ (<= 4447 rune 4449) (= 4451 rune) (= 4453 rune) (= 4455 rune) (= 4457 rune) (<= 4461 rune 4462) (<= 4466 rune 4467)
+ (= 4469 rune) (= 4510 rune) (= 4520 rune) (= 4523 rune) (<= 4526 rune 4527) (<= 4535 rune 4536) (= 4538 rune)
+ (<= 4540 rune 4546) (= 4587 rune) (= 4592 rune) (= 4601 rune) (<= 7680 rune 7835) (<= 7840 rune 7929)
+ (<= 7936 rune 7957) (<= 7960 rune 7965) (<= 7968 rune 8005) (<= 8008 rune 8013) (<= 8016 rune 8023)
+ (= 8025 rune) (= 8027 rune) (= 8029 rune) (<= 8031 rune 8061) (<= 8064 rune 8116) (<= 8118 rune 8124) (= 8126 rune)
+ (<= 8130 rune 8132) (<= 8134 rune 8140) (<= 8144 rune 8147) (<= 8150 rune 8155) (<= 8160 rune 8172)
+ (<= 8178 rune 8180) (<= 8182 rune 8188) (= 8486 rune) (<= 8490 rune 8491) (= 8494 rune) (<= 8576 rune 8578)
+ (<= 12353 rune 12436) (<= 12449 rune 12538) (<= 12549 rune 12588) (<= 44032 rune 55203))))
(ideographic-rune-p (rune)
(or (<= 19968 rune 40869) (= 12295 rune) (<= 12321 rune 12329)))
diff --git a/xml/xml-parse.lisp b/xml/xml-parse.lisp
index da5579f..655a90f 100644
--- a/xml/xml-parse.lisp
+++ b/xml/xml-parse.lisp
@@ -3004,8 +3004,10 @@
(elt octets pos)
(incf pos)))))
-(defmethod stream-read-sequence ((stream octet-input-stream) sequence
- &optional (start 0) (end (length sequence)))
+(defmethod stream-read-sequence
+ #-lispworks ((stream octet-input-stream) sequence
+ &optional (start 0) (end (length sequence)))
+ #+lispworks ((stream octet-input-stream) sequence start end)
(with-slots (octets pos) stream
(let* ((length (min (- end start) (- (length octets) pos)))
(end1 (+ start length))