diff lisp/gnus/flow-fill.el @ 112108:c24551a0cd95

flow-fill.el (fill-flowed-encode): Do encoding citation-aware. gnus-art.el (gnus-treat-fill-long-lines): Add missing version tag. gnus-msg.el (gnus-message-replyencrypt): Fix typo in version string.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Tue, 04 Jan 2011 02:24:15 +0000
parents f2e111723c3a
children 417b1e4d63cd
line wrap: on
line diff
--- a/lisp/gnus/flow-fill.el	Mon Jan 03 15:50:05 2011 -0500
+++ b/lisp/gnus/flow-fill.el	Tue Jan 04 02:24:15 2011 +0000
@@ -1,7 +1,7 @@
 ;;; flow-fill.el --- interpret RFC2646 "flowed" text
 
-;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+;;   2009, 2010, 2011 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <jas@pdc.kth.se>
 ;; Keywords: mail
@@ -82,19 +82,38 @@
 	;; Go through each paragraph, filling it and adding SPC
 	;; as the last character on each line.
 	(while (setq end (text-property-any start (point-max) 'hard 't))
-	  (let ((fill-column (eval fill-flowed-encode-column)))
-	    (fill-region start end t 'nosqueeze 'to-eop))
-	  (goto-char start)
-	  ;; `fill-region' probably distorted end.
-	  (setq end (text-property-any start (point-max) 'hard 't))
-	  (while (and (< (point) end)
-		      (re-search-forward "$" (1- end) t))
-	    (insert " ")
-	    (setq end (1+ end))
-	    (forward-char))
-	  (goto-char (setq start (1+ end)))))
+	  (save-restriction
+	    (narrow-to-region start end)
+	    (let ((fill-column (eval fill-flowed-encode-column)))
+	      (fill-flowed-fill-buffer))
+	    (goto-char (point-min))
+	    (while (re-search-forward "\n" nil t)
+	      (replace-match " \n" t t))
+	    (goto-char (setq start (1+ (point-max)))))))
       t)))
 
+(defun fill-flowed-fill-buffer ()
+  (let ((prefix nil)
+	(prev-prefix nil)
+	(start (point-min)))
+    (goto-char (point-min))
+    (while (not (eobp))
+      (setq prefix (and (looking-at "[> ]+")
+			(match-string 0)))
+      (if (equal prefix prev-prefix)
+	  (forward-line 1)
+	(save-restriction
+	  (narrow-to-region start (point))
+	  (let ((fill-prefix prev-prefix))
+	    (fill-region (point-min) (point-max) t 'nosqueeze 'to-eop))
+	  (goto-char (point-max)))
+	(setq prev-prefix prefix
+	      start (point))))
+    (save-restriction
+      (narrow-to-region start (point))
+      (let ((fill-prefix prev-prefix))
+	(fill-region (point-min) (point-max) t 'nosqueeze 'to-eop)))))
+
 ;;;###autoload
 (defun fill-flowed (&optional buffer delete-space)
   (with-current-buffer (or (current-buffer) buffer)