Clean up trailing whitespace after rendering HTML in shr
authorLars Ingebrigtsen <larsi@gnus.org>
Tue, 7 Feb 2012 00:14:40 +0000 (01:14 +0100)
committerLars Ingebrigtsen <larsi@gnus.org>
Tue, 7 Feb 2012 00:14:40 +0000 (01:14 +0100)
(shr-remove-trailing-whitespace): New function.
(shr-insert-document): Use it to clean up trailing whitespace as the
final step (bug#10714).

lisp/ChangeLog
lisp/shr.el

index 7283576..cc5ac49 100644 (file)
@@ -2,6 +2,9 @@
 
        * shr.el (shr-insert-document): Add doc string.
        (shr-visit-file): Ditto.
+       (shr-remove-trailing-whitespace): New function.
+       (shr-insert-document): Use it to clean up trailing whitespace as the
+       final step (bug#10714).
 
 2012-02-06  Lars Ingebrigtsen  <larsi@gnus.org>
 
index 26755f8..deaef1d 100644 (file)
@@ -144,11 +144,25 @@ cid: URL as the argument.")
 DOM should be a parse tree as generated by
 `libxml-parse-html-region' or similar."
   (setq shr-content-cache nil)
-  (let ((shr-state nil)
+  (let ((start (point))
+       (shr-state nil)
        (shr-start nil)
        (shr-base nil)
        (shr-width (or shr-width (window-width))))
-    (shr-descend (shr-transform-dom dom))))
+    (shr-descend (shr-transform-dom dom))
+    (shr-remove-trailing-whitespace start (point))))
+
+(defun shr-remove-trailing-whitespace (start end)
+  (save-restriction
+    (narrow-to-region start end)
+    (delete-trailing-whitespace)
+    (goto-char start)
+    (while (not (eobp))
+      (end-of-line)
+      (dolist (overlay (overlays-at (point)))
+       (when (overlay-get overlay 'before-string)
+         (overlay-put overlay 'before-string nil)))
+      (forward-line 1))))
 
 (defun shr-copy-url ()
   "Copy the URL under point to the kill ring.