[cxml-cvs] CVS update: cxml/xml/space-normalizer.lisp cxml/xml/package.lisp cxml/xml/recoder.lisp cxml/xml/sax-handler.lisp cxml/xml/sax-proxy.lisp cxml/xml/xml-parse.lisp

David Lichteblau dlichteblau at common-lisp.net
Thu Dec 29 00:31:38 UTC 2005


Update of /project/cxml/cvsroot/cxml/xml
In directory common-lisp.net:/tmp/cvs-serv7494/xml

Modified Files:
	package.lisp recoder.lisp sax-handler.lisp sax-proxy.lisp 
	xml-parse.lisp 
Added Files:
	space-normalizer.lisp 
Log Message:
whitespace normalizer

Date: Thu Dec 29 01:31:36 2005
Author: dlichteblau



Index: cxml/xml/package.lisp
diff -u cxml/xml/package.lisp:1.10 cxml/xml/package.lisp:1.11
--- cxml/xml/package.lisp:1.10	Thu Dec 29 00:18:05 2005
+++ cxml/xml/package.lisp	Thu Dec 29 01:31:36 2005
@@ -77,5 +77,6 @@
    #:sax-proxy
    #:proxy-chained-handler
    #:make-namespace-normalizer
+   #:make-whitespace-normalizer
    #:rod-to-utf8-string
    #:utf8-string-to-rod))


Index: cxml/xml/recoder.lisp
diff -u cxml/xml/recoder.lisp:1.4 cxml/xml/recoder.lisp:1.5
--- cxml/xml/recoder.lisp:1.4	Tue Dec 27 02:35:20 2005
+++ cxml/xml/recoder.lisp	Thu Dec 29 01:31:36 2005
@@ -118,4 +118,8 @@
 
   (defwrapper sax:entity-resolver
       (resolver)
-    resolver))
+    resolver)
+
+  (defwrapper sax::dtd
+      (dtd)
+    dtd))


Index: cxml/xml/sax-handler.lisp
diff -u cxml/xml/sax-handler.lisp:1.3 cxml/xml/sax-handler.lisp:1.4
--- cxml/xml/sax-handler.lisp:1.3	Sun Dec  4 21:35:18 2005
+++ cxml/xml/sax-handler.lisp	Thu Dec 29 01:31:36 2005
@@ -53,6 +53,8 @@
 	   #:*use-xmlns-namespace*
 
            #:make-attribute
+           #:find-attribute
+           #:find-attribute-ns
            #:attribute-namespace-uri
            #:attribute-local-name
            #:attribute-qname
@@ -137,6 +139,23 @@
   value
   specified-p)
 
+(defun %rod= (x y)
+  ;; allow rods *and* strings *and* null
+  (cond
+    ((zerop (length x)) (zerop (length y)))
+    ((zerop (length y)) nil)
+    ((stringp x) (string= x y))
+    (t (runes:rod= x y))))
+
+(defun find-attribute (qname attrs)
+  (find qname attrs :key #'attribute-qname :test #'%rod=))
+
+(defun find-attribute-ns (uri lname attrs)
+  (find-if (lambda (attr)
+	     (and (%rod= uri (sax:attribute-namespace-uri attr))
+		  (%rod= lname (sax:attribute-local-name attr))))
+	   attrs))
+
 (defgeneric start-document (handler)
   (:documentation "Called at the beginning of the parsing process,
 before any element, processing instruction or comment is reported.
@@ -325,7 +344,11 @@
   (:documentation
    "Called between sax:end-dtd and sax:end-document to register an entity
     resolver, a function of two arguments: An entity name and SAX handler.
-    When called, the resolver function will parse the named entities data.")
+    When called, the resolver function will parse the named entity's data.")
   (:method ((handler t) resolver)
     (declare (ignore resolver))
     nil))
+
+;; internal for now
+(defgeneric dtd (handler dtd)
+  (:method ((handler t) dtd) (declare (ignore dtd)) nil))


Index: cxml/xml/sax-proxy.lisp
diff -u cxml/xml/sax-proxy.lisp:1.3 cxml/xml/sax-proxy.lisp:1.4
--- cxml/xml/sax-proxy.lisp:1.3	Mon Dec 12 00:56:52 2005
+++ cxml/xml/sax-proxy.lisp	Thu Dec 29 01:31:36 2005
@@ -37,4 +37,5 @@
   (define-proxy-method sax:notation-declaration (name public-id system-id))
   (define-proxy-method sax:element-declaration (name model))
   (define-proxy-method sax:attribute-declaration (elt attr type default))
-  (define-proxy-method sax:entity-resolver (resolver)))
+  (define-proxy-method sax:entity-resolver (resolver))
+  (define-proxy-method sax::dtd (dtd)))


Index: cxml/xml/xml-parse.lisp
diff -u cxml/xml/xml-parse.lisp:1.57 cxml/xml/xml-parse.lisp:1.58
--- cxml/xml/xml-parse.lisp:1.57	Thu Dec 29 00:18:05 2005
+++ cxml/xml/xml-parse.lisp	Thu Dec 29 01:31:36 2005
@@ -2513,7 +2513,8 @@
       (let ((dtd (dtd *ctx*)))
         (sax:entity-resolver
          (handler *ctx*)
-         (lambda (name handler) (resolve-entity name handler dtd))))
+         (lambda (name handler) (resolve-entity name handler dtd)))
+        (sax::dtd (handler *ctx*) dtd))
       (list :DOCTYPE name extid))))
 
 (defun report-cached-dtd (dtd)




More information about the Cxml-cvs mailing list