aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorLars Magne Ingebrigtsen2014-11-27 16:57:22 +0100
committerLars Magne Ingebrigtsen2014-11-27 16:57:22 +0100
commit2d431afee4061515a593da1f0a29bcd5fb152f07 (patch)
tree003974df1a3052789ea6f7a7a4f747e9a2973fe6 /lisp
parent2f5134c2766be5dcc3eb32b391183a229ee57e19 (diff)
downloademacs-2d431afee4061515a593da1f0a29bcd5fb152f07.tar.gz
emacs-2d431afee4061515a593da1f0a29bcd5fb152f07.zip
Add a DOM pretty-printing function
* doc/lispref/text.texi (Document Object Model): Mention `dom-pp'. * lisp/dom.el (dom-pp): New function.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog4
-rw-r--r--lisp/dom.el38
2 files changed, 42 insertions, 0 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 92b50d98880..85748e60208 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,7 @@
12014-11-27 Lars Magne Ingebrigtsen <larsi@gnus.org>
2
3 * dom.el (dom-pp): New function.
4
12014-11-17 Eli Zaretskii <eliz@gnu.org> 52014-11-17 Eli Zaretskii <eliz@gnu.org>
2 6
3 * vc/vc-bzr.el (vc-bzr-print-log, vc-bzr-expanded-log-entry): 7 * vc/vc-bzr.el (vc-bzr-print-log, vc-bzr-expanded-log-entry):
diff --git a/lisp/dom.el b/lisp/dom.el
index 04d6c219ec0..6b24e4ffa91 100644
--- a/lisp/dom.el
+++ b/lisp/dom.el
@@ -179,6 +179,44 @@ If BEFORE is nil, make CHILD NODE's first child."
179 (setcdr node (list nil))) 179 (setcdr node (list nil)))
180 node) 180 node)
181 181
182(defun dom-pp (dom &optional remove-empty)
183 "Pretty-print DOM at point.
184If REMOVE-EMPTY, ignore textual nodes that contain just
185white-space."
186 (let ((column (current-column)))
187 (insert (format "(%S " (dom-tag dom)))
188 (let* ((attr (dom-attributes dom))
189 (times (length attr))
190 (column (1+ (current-column))))
191 (if (null attr)
192 (insert "nil")
193 (insert "(")
194 (dolist (elem attr)
195 (insert (format "(%S . %S)" (car elem) (cdr elem)))
196 (if (zerop (cl-decf times))
197 (insert ")")
198 (insert "\n" (make-string column ? ))))))
199 (let* ((children (if remove-empty
200 (cl-remove-if
201 (lambda (child)
202 (and (stringp child)
203 (string-match "\\`[\n\r\t  ]*\\'" child)))
204 (dom-children dom))
205 (dom-children dom)))
206 (times (length children)))
207 (if (null children)
208 (insert ")")
209 (insert "\n" (make-string (1+ column) ? ))
210 (dolist (child children)
211 (if (stringp child)
212 (if (or (not remove-empty)
213 (not (string-match "\\`[\n\r\t  ]*\\'" child)))
214 (insert (format "%S" child)))
215 (dom-pp child remove-empty))
216 (if (zerop (cl-decf times))
217 (insert ")")
218 (insert "\n" (make-string (1+ column) ? ))))))))
219
182(provide 'dom) 220(provide 'dom)
183 221
184;;; dom.el ends here 222;;; dom.el ends here