]> git.eshelyaron.com Git - emacs.git/commitdiff
shr.el (shr-insert): Don't insert space behind a wide character categorized as kinsok...
authorKatsumi Yamaoka <yamaoka@jpl.org>
Mon, 18 Oct 2010 05:21:26 +0000 (05:21 +0000)
committerKatsumi Yamaoka <yamaoka@jpl.org>
Mon, 18 Oct 2010 05:21:26 +0000 (05:21 +0000)
lisp/gnus/ChangeLog
lisp/gnus/shr.el

index fcb79363736d6c7ba82f8ecbb0c2881707eb9c18..c5bad44a98557a1af8116ad375263c5bd5996b2a 100644 (file)
@@ -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
index 998ad30aed2ddc0502ebffea71795666b68f6853..db609286c119cde3435bc77b7250e4a1c556c6b1 100644 (file)
@@ -203,47 +203,48 @@ redirects somewhere else."
    ((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"))