# HG changeset patch # User Mark A. Hershberger # Date 1197948125 0 # Node ID e8a485c87523a5b5f880a6b53aa1e8a0b1074714 # Parent 3038b17c409e195adf066d5f8f0d30a520ae86d2 fix up xml-debug-print diff -r 3038b17c409e -r e8a485c87523 lisp/ChangeLog --- 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 + + * 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 * progmodes/cc-subword.el (c-subword-mode): Drop support for diff -r 3038b17c409e -r e8a485c87523 lisp/xml.el --- 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"))))