shr didn't fill Japanese text correctly any more

* net/shr.el (shr-find-fill-point): Don't try to fill if the
indentation level is larger than the width, because that will
infloop.
(shr-insert): Fill repeatedly long texts, so that Japanese is
formatted correctly.

Fixes: debbugs:16263
This commit is contained in:
Lars Ingebrigtsen 2013-12-27 03:21:42 +01:00
parent d96b72a59d
commit ac5758d162
2 changed files with 17 additions and 8 deletions

View file

@ -1,3 +1,11 @@
2013-12-27 Lars Ingebrigtsen <larsi@gnus.org>
* net/shr.el (shr-find-fill-point): Don't try to fill if the
indentation level is larger than the width, because that will
infloop.
(shr-insert): Fill repeatedly long texts, so that Japanese is
formatted correctly (bug#16263).
2013-12-26 João Távora <joaotavora@gmail.com>
* electric.el (electric-pair-mode): More flexible engine for skip-

View file

@ -455,10 +455,10 @@ size, and full-buffer size."
(insert elem)
(setq shr-state nil)
(let (found)
(when (and (> (current-column) shr-width)
(progn
(setq found (shr-find-fill-point))
(not (eolp))))
(while (and (> (current-column) shr-width)
(progn
(setq found (shr-find-fill-point))
(not (eolp))))
(when (eq (preceding-char) ? )
(delete-char -1))
(insert "\n")
@ -478,7 +478,7 @@ size, and full-buffer size."
(backward-char 1))
(let ((bp (point))
failed)
(while (not (or (setq failed (= (current-column) shr-indentation))
(while (not (or (setq failed (< (current-column) shr-indentation))
(eq (preceding-char) ? )
(eq (following-char) ? )
(shr-char-breakable-p (preceding-char))
@ -496,7 +496,8 @@ size, and full-buffer size."
(while (setq found (re-search-forward
"\\(\\c>\\)\\| \\|\\c<\\|\\c|"
(line-end-position) 'move)))
(if (and found (not (match-beginning 1)))
(if (and found
(not (match-beginning 1)))
(goto-char (match-beginning 0)))))
(or
(eolp)
@ -507,7 +508,7 @@ size, and full-buffer size."
(while (and (not (memq (preceding-char) (list ?\C-@ ?\n ? )))
(shr-char-kinsoku-eol-p (preceding-char)))
(backward-char 1))
(when (setq failed (= (current-column) shr-indentation))
(when (setq failed (< (current-column) shr-indentation))
;; There's no breakable point that doesn't violate kinsoku,
;; so we look for the second best position.
(while (and (progn
@ -527,7 +528,7 @@ size, and full-buffer size."
(not (memq (preceding-char) (list ?\C-@ ?\n ? )))
(or (shr-char-kinsoku-eol-p (preceding-char))
(shr-char-kinsoku-bol-p (following-char)))))))
(when (setq failed (= (current-column) shr-indentation))
(when (setq failed (< (current-column) shr-indentation))
;; There's no breakable point that doesn't violate kinsoku,
;; so we go to the second best position.
(if (looking-at "\\(\\c<+\\)\\c<")