summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Magne Ingebrigtsen <larsi@gnus.org>2015-02-11 17:24:42 +1100
committerLars Magne Ingebrigtsen <larsi@gnus.org>2015-02-11 17:25:10 +1100
commit6ebbeafc94a35e49fc3a842b5f5fbd7b069ce936 (patch)
tree34e50df7fbc3c5cfb433c1361026eefcd0845848
parent097e16e26663c1010db6f6dc2db7b5f1b7a4dbc0 (diff)
downloademacs-6ebbeafc94a35e49fc3a842b5f5fbd7b069ce936.tar.gz
Fix <li><p> indentation in shr
(shr-ensure-paragraph): Don't insert a new paragraph as the first item in a <li>.
-rw-r--r--lisp/ChangeLog2
-rw-r--r--lisp/net/shr.el44
2 files changed, 29 insertions, 17 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 7ec017c94ec..03b465e8030 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -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>
diff --git a/lisp/net/shr.el b/lisp/net/shr.el
index 7a93c3a043c..cf35a1287d6 100644
--- a/lisp/net/shr.el
+++ b/lisp/net/shr.el
@@ -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)