diff options
| author | Lars Magne Ingebrigtsen | 2014-11-27 16:57:22 +0100 |
|---|---|---|
| committer | Lars Magne Ingebrigtsen | 2014-11-27 16:57:22 +0100 |
| commit | 2d431afee4061515a593da1f0a29bcd5fb152f07 (patch) | |
| tree | 003974df1a3052789ea6f7a7a4f747e9a2973fe6 /lisp | |
| parent | 2f5134c2766be5dcc3eb32b391183a229ee57e19 (diff) | |
| download | emacs-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/ChangeLog | 4 | ||||
| -rw-r--r-- | lisp/dom.el | 38 |
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 @@ | |||
| 1 | 2014-11-27 Lars Magne Ingebrigtsen <larsi@gnus.org> | ||
| 2 | |||
| 3 | * dom.el (dom-pp): New function. | ||
| 4 | |||
| 1 | 2014-11-17 Eli Zaretskii <eliz@gnu.org> | 5 | 2014-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. | ||
| 184 | If REMOVE-EMPTY, ignore textual nodes that contain just | ||
| 185 | white-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 |