o Add support for the Scieneer CL.

? runes/stream-scl.lisp
Index: cxml.asd
===================================================================
RCS file: /project/cxml/cvsroot/cxml/cxml.asd,v
retrieving revision 1.18
diff -u -r1.18 cxml.asd
--- cxml.asd	26 May 2007 21:55:57 -0000	1.18
+++ cxml.asd	13 Jun 2007 08:15:02 -0000
@@ -30,7 +30,7 @@
      (:file "space-normalizer" :depends-on ("xml-parse"))
      (:file "catalog"         :depends-on ("xml-parse"))
      (:file "sax-proxy"       :depends-on ("xml-parse")))
-    :depends-on (:runes :puri :trivial-gray-streams))
+    :depends-on (:runes :puri #-scl :trivial-gray-streams))
 
 (defclass utf8dom-file (closure-source-file) ((of)))
 
Index: runes.asd
===================================================================
RCS file: /project/cxml/cvsroot/cxml/runes.asd,v
retrieving revision 1.1
diff -u -r1.1 runes.asd
--- runes.asd	26 May 2007 22:05:13 -0000	1.1
+++ runes.asd	13 Jun 2007 08:15:03 -0000
@@ -52,7 +52,9 @@
              #+rune-is-character "characters")
      #+rune-is-integer (:file "utf8")
      (:file "syntax")
-     (:file "encodings")
-     (:file "encodings-data")
-     (:file "xstream")
-     (:file "ystream")))
+     #-x&y-streams-are-stream (:file "encodings")
+     #-x&y-streams-are-stream (:file "encodings-data")
+     #-x&y-streams-are-stream (:file "xstream")
+     #-x&y-streams-are-stream (:file "ystream")
+     #+x&y-streams-are-stream (:file #+scl "stream-scl")
+     ))
Index: xml/package.lisp
===================================================================
RCS file: /project/cxml/cvsroot/cxml/xml/package.lisp,v
retrieving revision 1.16
diff -u -r1.16 package.lisp
--- xml/package.lisp	1 May 2007 20:07:00 -0000	1.16
+++ xml/package.lisp	13 Jun 2007 08:15:04 -0000
@@ -6,7 +6,7 @@
 (in-package :cl-user)
 
 (defpackage :cxml
-  (:use :cl :runes :runes-encoding :trivial-gray-streams)
+  (:use :cl :runes :runes-encoding #-scl :trivial-gray-streams)
   (:export
    ;; xstreams
    #:make-xstream
Index: xml/unparse.lisp
===================================================================
RCS file: /project/cxml/cvsroot/cxml/xml/unparse.lisp,v
retrieving revision 1.13
diff -u -r1.13 unparse.lisp
--- xml/unparse.lisp	1 May 2007 20:07:00 -0000	1.13
+++ xml/unparse.lisp	13 Jun 2007 08:15:04 -0000
@@ -621,14 +621,22 @@
   data)
 
 (defun rod-to-utf8-string (rod)
+  #-scl
   (let ((out (make-buffer :element-type 'character)))
     (runes-to-utf8/adjustable-string out rod (length rod))
-    out))
+    out)
+  #+scl
+  (ext:make-string-from-bytes (ext:make-bytes-from-string rod :utf8)
+			      :iso-8859-1))
 
 (defun utf8-string-to-rod (str)
+  #-scl
   (let* ((bytes (map '(vector (unsigned-byte 8)) #'char-code str))
          (buffer (make-array (length bytes) :element-type '(unsigned-byte 16)))
          (n (decode-sequence :utf-8 bytes 0 (length bytes) buffer 0 0 nil))
          (result (make-array n :element-type 'rune)))
     (map-into result #'code-rune buffer)
-    result))
+    result)
+  #+scl
+  (let ((bytes (map '(vector (unsigned-byte 8)) #'char-code str)))
+    (ext:make-string-from-bytes bytes :utf-8)))
Index: xml/xml-parse.lisp
===================================================================
RCS file: /project/cxml/cvsroot/cxml/xml/xml-parse.lisp,v
retrieving revision 1.67
diff -u -r1.67 xml-parse.lisp
--- xml/xml-parse.lisp	4 Mar 2007 21:04:13 -0000	1.67
+++ xml/xml-parse.lisp	13 Jun 2007 08:15:07 -0000
@@ -2957,6 +2973,7 @@
 ;;;; ---------------------------------------------------------------------------
 ;;;; User interface ;;;;
 
+#-scl
 (defun specific-or (component &optional (alternative nil))
   (if (eq component :unspecific)
       alternative
@@ -2967,6 +2984,7 @@
       alternative
       str))
 
+#-scl
 (defun make-uri (&rest initargs &key path query &allow-other-keys)
   (apply #'make-instance
          'puri:uri
@@ -2974,9 +2992,11 @@
          :query (and query (escape-query query))
          initargs))
 
+#-scl
 (defun escape-path (list)
   (puri::render-parsed-path list t))
 
+#-scl
 (defun escape-query (pairs)
   (flet ((escape (str)
            (puri::encode-escaped-encoding str puri::*reserved-characters* t)))
@@ -2990,6 +3010,7 @@
           (write-char #\= s)
           (write-string (escape (cdr pair)) s))))))
 
+#-scl
 (defun uri-parsed-query (uri)
   (flet ((unescape (str)
            (puri::decode-escaped-encoding str t puri::*reserved-characters*)))
@@ -3005,9 +3026,11 @@
         (t
           nil)))))
 
+#-scl
 (defun query-value (name alist)
   (cdr (assoc name alist :test #'equal)))
 
+#-scl
 (defun pathname-to-uri (pathname)
   (let ((path
          (append (pathname-directory pathname)
@@ -3027,6 +3050,11 @@
                           (specific-or (pathname-device pathname)))
                   :path path))))
 
+#+scl
+(defun pathname-to-uri (pathname)
+  (puri:parse-uri (namestring pathname)))
+
+#-scl
 (defun parse-name.type (str)
   (if str
       (let ((i (position #\. str :from-end t)))
@@ -3035,6 +3063,7 @@
             (values str nil)))
       (values nil nil)))
 
+#-scl
 (defun uri-to-pathname (uri)
   (let ((scheme (puri:uri-scheme uri))
         (path (puri:uri-parsed-path uri)))
@@ -3058,11 +3087,17 @@
                            :directory (cons :absolute (butlast (cdr path)))
                            :name name
                            :type type))))))
+#+scl
+(defun uri-to-pathname (uri)
+  (let ((pathname (puri:render-uri uri nil)))
+    (when (equalp (pathname-host pathname) "+")
+      (setf (slot-value pathname 'lisp::host) "localhost"))
+    pathname))
 
 (defun parse-xstream (xstream handler &rest args)
   (let ((*ctx* nil))
     (handler-case
-	(let ((zstream (make-zstream :input-stack (list xstream))))
+	(with-zstream (zstream :input-stack (list xstream))
 	  (peek-rune xstream)
 	  (with-scratch-pads ()
 	    (apply #'p/document zstream handler args)))
@@ -3129,10 +3164,10 @@
       (unless (dtd *ctx*)
 	(with-scratch-pads ()
 	  (let ((*data-behaviour* :DTD))
-	    (let* ((xi2 (xstream-open-extid extid))
-		   (zi2 (make-zstream :input-stack (list xi2))))
-	      (ensure-dtd)
-	      (p/ext-subset zi2)))))
+	    (let ((xi2 (xstream-open-extid extid)))
+	      (with-zstream (zi2 :input-stack (list xi2))
+		(ensure-dtd)
+		(p/ext-subset zi2))))))
       (sax:end-dtd handler)
       (let ((dtd (dtd *ctx*)))
         (sax:entity-resolver handler (lambda (n h) (resolve-entity n h dtd)))
@@ -3193,15 +3228,18 @@
 (defun string->xstream (string)
   (make-rod-xstream (string-rod string)))
 
+#-scl
 (defclass octet-input-stream
     (trivial-gray-stream-mixin fundamental-binary-input-stream)
     ((octets :initarg :octets)
      (pos :initform 0)))
 
+#-scl
 (defmethod close ((stream octet-input-stream) &key abort)
   (declare (ignore abort))
   (open-stream-p stream))
 
+#-scl
 (defmethod stream-read-byte ((stream octet-input-stream))
   (with-slots (octets pos) stream
     (if (>= pos (length octets))
@@ -3210,6 +3248,7 @@
             (elt octets pos)
           (incf pos)))))
 
+#-scl
 (defmethod stream-read-sequence
     ((stream octet-input-stream) sequence start end &key &allow-other-keys)
   (with-slots (octets pos) stream
@@ -3221,7 +3260,10 @@
       end1)))
 
 (defun make-octet-input-stream (octets)
-  (make-instance 'octet-input-stream :octets octets))
+  #-scl
+  (make-instance 'octet-input-stream :octets octets)
+  #+scl
+  (ext:make-byte-input-stream octets))
 
 (defun parse-octets (octets handler &rest args)
   (apply #'parse-stream (make-octet-input-stream octets) handler args))

