[bknr-cvs] hans changed trunk/

BKNR Commits bknr at bknr.net
Thu Aug 28 15:54:06 UTC 2008


Revision: 3746
Author: hans
URL: http://bknr.net/trac/changeset/3746

XML output compatibility fixes.

U   trunk/bknr/web/src/web/template-handler.lisp
U   trunk/projects/quickhoney/website/templates/index.xml

Modified: trunk/bknr/web/src/web/template-handler.lisp
===================================================================
--- trunk/bknr/web/src/web/template-handler.lisp	2008-08-28 13:52:36 UTC (rev 3745)
+++ trunk/bknr/web/src/web/template-handler.lisp	2008-08-28 15:54:05 UTC (rev 3746)
@@ -107,15 +107,22 @@
 	       (t (format nil "~A" val))))))
       string))
 
+(defvar *nsuri-alias-map* nil
+  "Maps namespace URI to alias name as declared in the current document.")
+
 (defun xmls-attributes-to-sax (fn attrs)
   (mapcar (lambda (a)
             (destructuring-bind (name value) a
 	      (if (listp name)
-		  (destructuring-bind (qname . namespace-uri) name
-		    (sax:make-attribute :namespace-uri namespace-uri
-					:qname qname
-					:value (funcall fn value)
-					:specified-p t))
+		  (destructuring-bind (local-name . namespace-uri) name
+                    (let ((namespace-alias (gethash namespace-uri *nsuri-lname-map*)))
+                      (unless namespace-alias
+                        (error "cannot map namespace URI ~A to namespace-alias when making attribute ~A" namespace-uri a))
+                      (sax:make-attribute :namespace-uri namespace-uri
+                                          :qname (format nil "~A:~A" namespace-alias local-name)
+                                          :local-name local-name
+                                          :value (funcall fn value)
+                                          :specified-p t)))
 		  (sax:make-attribute :qname name
 				      :value (funcall fn value)
 				      :specified-p t))))
@@ -162,12 +169,22 @@
   ;; In order to generate xmlns attributes, we use the internal
   ;; CXML-XMLS::COMPUTE-ATTRIBUTES/LNAMES function.  This may need to
   ;; be revised with newer cxml releases.
-  (sax:start-element *html-sink* (node-ns toplevel) (node-name toplevel) (node-name toplevel)
-		     (cxml-xmls::compute-attributes/lnames toplevel t))
-  (let ((*template-expander* expander))
+  (let* ((toplevel-attributes (cxml-xmls::compute-attributes/lnames toplevel t))
+         (*template-expander* expander)
+         (*nsuri-lname-map* (let ((map (make-hash-table :test #'equal)))
+                              (dolist (attribute toplevel-attributes)
+                                (when (scan "^xmlns($|:)" (sax:attribute-qname attribute))
+                                  (format t "mapping ~A => ~A~%"
+                                          (sax:attribute-namespace-uri attribute)
+                                          (sax:attribute-local-name attribute))
+                                  (setf (gethash (sax:attribute-value attribute) map)
+                                        (sax:attribute-local-name attribute))))
+                              map)))
+    (sax:start-element *html-sink* (node-ns toplevel) (node-name toplevel) (node-name toplevel)
+                       toplevel-attributes)
     (dolist (node (node-children toplevel))
-      (emit-template-node expander node)))
-  (sax:end-element *html-sink* (node-ns toplevel) (node-name toplevel) (node-name toplevel)))
+      (emit-template-node expander node))
+    (sax:end-element *html-sink* (node-ns toplevel) (node-name toplevel) (node-name toplevel))))
 
 (defun find-template (dir components)
   (if (null components)

Modified: trunk/projects/quickhoney/website/templates/index.xml
===================================================================
--- trunk/projects/quickhoney/website/templates/index.xml	2008-08-28 13:52:36 UTC (rev 3745)
+++ trunk/projects/quickhoney/website/templates/index.xml	2008-08-28 15:54:05 UTC (rev 3746)
@@ -3,6 +3,7 @@
           "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html
    xmlns="http://www.w3.org/1999/xhtml"
+   xmlns:xml="http://www.w3.org/XML/1998/namespace"
    xmlns:bknr="http://bknr.net/"
    xmlns:quickhoney="http://quickhoney.com/"
    >




More information about the Bknr-cvs mailing list