Mercurial > emacs
changeset 111021:7aa9d9b402c8
shr.el (shr-insert): Don't insert space behind a wide character categorized as kinsoku-bol, or between characters both categorized as nospace.
author | Katsumi Yamaoka <yamaoka@jpl.org> |
---|---|
date | Mon, 18 Oct 2010 05:21:26 +0000 |
parents | 9d2f59f15c3e |
children | d263303441df |
files | lisp/gnus/ChangeLog lisp/gnus/shr.el |
diffstat | 2 files changed, 46 insertions(+), 39 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/gnus/ChangeLog Sat Oct 16 20:05:20 2010 -0400 +++ b/lisp/gnus/ChangeLog Mon Oct 18 05:21:26 2010 +0000 @@ -1,3 +1,9 @@ +2010-10-18 Katsumi Yamaoka <yamaoka@jpl.org> + + * shr.el (shr-insert): Don't insert space behind a wide character + categorized as kinsoku-bol, or between characters both categorized as + nospace. + 2010-10-16 Andrew Cohen <cohen@andy.bu.edu> * gnus-sum.el (gnus-summary-refer-thread): Bug fix. Add the thread
--- a/lisp/gnus/shr.el Sat Oct 16 20:05:20 2010 -0400 +++ b/lisp/gnus/shr.el Mon Oct 18 05:21:26 2010 +0000 @@ -203,47 +203,48 @@ ((eq shr-folding-mode 'none) (insert text)) (t - (let ((first t) - column) - (when (and (string-match "\\`[ \t\n]" text) - (not (bolp)) - (not (eq (char-after (1- (point))) ? ))) - (insert " ")) - (dolist (elem (split-string text)) - (when (and (bolp) - (> shr-indentation 0)) - (shr-indent)) - ;; The shr-start is a special variable that is used to pass - ;; upwards the first point in the buffer where the text really - ;; starts. - (unless shr-start - (setq shr-start (point))) - ;; No space is needed before or after a breakable character or - ;; at the beginning of a line. + (when (and (string-match "\\`[ \t\n]" text) + (not (bolp)) + (not (eq (char-after (1- (point))) ? ))) + (insert " ")) + (dolist (elem (split-string text)) + (when (and (bolp) + (> shr-indentation 0)) + (shr-indent)) + ;; The shr-start is a special variable that is used to pass + ;; upwards the first point in the buffer where the text really + ;; starts. + (unless shr-start + (setq shr-start (point))) + ;; No space is needed behind a wide character categorized as + ;; kinsoku-bol, or between characters both categorized as nospace. + (let (prev) (when (and (eq (preceding-char) ? ) (or (= (line-beginning-position) (1- (point))) - (aref fill-find-break-point-function-table - (char-after (- (point) 2))) - (aref fill-find-break-point-function-table - (aref elem 0)))) - (delete-char -1)) - (insert elem) - (while (> (current-column) shr-width) - (unless (prog1 - (shr-find-fill-point) - (when (eq (preceding-char) ? ) - (delete-char -1)) - (insert "\n")) - (put-text-property (1- (point)) (point) 'shr-break t) - ;; No space is needed at the beginning of a line. - (if (eq (following-char) ? ) - (delete-char 1))) - (when (> shr-indentation 0) - (shr-indent)) - (end-of-line)) - (insert " ")) - (unless (string-match "[ \t\n]\\'" text) - (delete-char -1)))))) + (and (aref fill-find-break-point-function-table + (setq prev (char-after (- (point) 2)))) + (aref (char-category-set prev) ?>)) + (and (aref fill-nospace-between-words-table prev) + (aref fill-nospace-between-words-table + (aref elem 0))))) + (delete-char -1))) + (insert elem) + (while (> (current-column) shr-width) + (unless (prog1 + (shr-find-fill-point) + (when (eq (preceding-char) ? ) + (delete-char -1)) + (insert "\n")) + (put-text-property (1- (point)) (point) 'shr-break t) + ;; No space is needed at the beginning of a line. + (if (eq (following-char) ? ) + (delete-char 1))) + (when (> shr-indentation 0) + (shr-indent)) + (end-of-line)) + (insert " ")) + (unless (string-match "[ \t\n]\\'" text) + (delete-char -1))))) (eval-and-compile (autoload 'kinsoku-longer "kinsoku"))