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"))