]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix <li><p> indentation in shr
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Wed, 11 Feb 2015 06:24:42 +0000 (17:24 +1100)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Wed, 11 Feb 2015 06:25:10 +0000 (17:25 +1100)
(shr-ensure-paragraph): Don't insert a new paragraph as the first
item in a <li>.

lisp/ChangeLog
lisp/net/shr.el

index 7ec017c94ec6965009fe7f9d99fdfb00fe94e782..03b465e8030e633bcf31db97b291897afecf0184 100644 (file)
@@ -3,6 +3,8 @@
        * net/shr.el (shr-insert): Make sure the space inserted has the
        right font (for width).
        (shr-fill-line): Preserve background colours when indenting/folding.
+       (shr-ensure-paragraph): Don't insert a new paragraph as the first
+       item in a <li>.
 
 2015-02-10  Lars Ingebrigtsen  <larsi@gnus.org>
 
index 7a93c3a043c0d57d784fe4ef76abc57deaa227e2..cf35a1287d64c1a994342a470ac707f8ca32f093 100644 (file)
@@ -719,23 +719,32 @@ size, and full-buffer size."
 
 (defun shr-ensure-paragraph ()
   (unless (bobp)
-    (if (<= (current-column) shr-indentation)
-       (unless (save-excursion
-                 (forward-line -1)
-                 (looking-at " *$"))
-         (insert "\n"))
-      (if (save-excursion
-           (beginning-of-line)
-           ;; If the current line is totally blank, and doesn't even
-           ;; have any face properties set, then delete the blank
-           ;; space.
-           (and (looking-at " *$")
-                (not (get-text-property (point) 'face))
-                (not (= (next-single-property-change (point) 'face nil
-                                                     (line-end-position))
-                        (line-end-position)))))
-         (delete-region (match-beginning 0) (match-end 0))
-       (insert "\n\n")))))
+    (let ((prefix (get-text-property (line-beginning-position)
+                                    'shr-prefix-length)))
+      (cond
+       ((and (bolp)
+            (save-excursion
+              (forward-line -1)
+              (looking-at " *$")))
+       ;; We're already at a new paragraph; do nothing.
+       )
+       ((and prefix
+            (= prefix (- (point) (line-beginning-position))))
+       ;; Do nothing; we're at the start of a <li>.
+       )
+       ((save-excursion
+         (beginning-of-line)
+         ;; If the current line is totally blank, and doesn't even
+         ;; have any face properties set, then delete the blank
+         ;; space.
+         (and (looking-at " *$")
+              (not (get-text-property (point) 'face))
+              (not (= (next-single-property-change (point) 'face nil
+                                                   (line-end-position))
+                      (line-end-position)))))
+       (delete-region (match-beginning 0) (match-end 0)))
+       (t
+       (insert "\n\n"))))))
 
 (defun shr-indent ()
   (when (> shr-indentation 0)
@@ -1406,6 +1415,7 @@ The preference is a float determined from `shr-prefer-media-type'."
                                (shr-string-pixel-width bullet))))
        (put-text-property start (1+ start)
                           'shr-continuation-indentation shr-indentation)
+       (put-text-property start (1+ start) 'shr-prefix-length (length bullet))
        (shr-generic dom)))))
 
 (defun shr-mark-fill (start)