changeset 87317:e8a485c87523

fix up xml-debug-print
author Mark A. Hershberger <mah@everybody.org>
date Tue, 18 Dec 2007 03:22:05 +0000
parents 3038b17c409e
children 3b14ea2b1d8a
files lisp/ChangeLog lisp/xml.el
diffstat 2 files changed, 22 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Tue Dec 18 02:32:40 2007 +0000
+++ b/lisp/ChangeLog	Tue Dec 18 03:22:05 2007 +0000
@@ -1,3 +1,10 @@
+2007-12-18  Mark A. Hershberger  <mah@everybody.org>
+
+	* xml.el (xml-escape-string): New function.  Escape string using
+	xml-entity-alist.
+	(xml-debug-print-internal): Use xml-escape-string to escape
+	characters in attributes and in text children of elements.
+
 2007-12-18  Glenn Morris  <rgm@gnu.org>
 
 	* progmodes/cc-subword.el (c-subword-mode): Drop support for
--- a/lisp/xml.el	Tue Dec 18 02:32:40 2007 +0000
+++ b/lisp/xml.el	Tue Dec 18 03:22:05 2007 +0000
@@ -844,6 +844,17 @@
 
 (defalias 'xml-print 'xml-debug-print)
 
+(defun xml-escape-string (string)
+  (mapconcat (lambda (byte)
+               (let ((char (char-to-string byte)))
+                 (if (rassoc char xml-entity-alist)
+                     (concat "&" (car (rassoc char xml-entity-alist)) ";")
+                   char)))
+             (if (multibyte-string-p string)
+                 (encode-coding-string string 'utf-8)
+               string)
+             ""))
+
 (defun xml-debug-print-internal (xml indent-string)
   "Outputs the XML tree in the current buffer.
 The first line is indented with INDENT-STRING."
@@ -854,7 +865,8 @@
     ;;  output the attribute list
     (setq attlist (xml-node-attributes tree))
     (while attlist
-      (insert ?\  (symbol-name (caar attlist)) "=\"" (cdar attlist) ?\")
+      (insert ?\  (symbol-name (caar attlist)) "=\""
+              (xml-escape-string (cdar attlist)) ?\")
       (setq attlist (cdr attlist)))
 
     (setq tree (xml-node-children tree))
@@ -869,7 +881,8 @@
 	 ((listp node)
 	  (insert ?\n)
 	  (xml-debug-print-internal node (concat indent-string "  ")))
-	 ((stringp node) (insert node))
+	 ((stringp node)
+          (insert (xml-escape-string node)))
 	 (t
 	  (error "Invalid XML tree"))))