Synch with Oort Gnus.
[elisp/gnus.git-] / lisp / gnus-cite.el
index 6a09a47..65ce313 100644 (file)
@@ -27,6 +27,7 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+(eval-when-compile (require 'static))
 
 (require 'gnus)
 (require 'gnus-art)
@@ -441,7 +442,8 @@ If WIDTH (the numerical prefix), use that text width when filling."
                 (concat "^" (regexp-quote (cdar marks)) " *"))
                (fill-prefix
                 (if (string= (cdar marks) "") ""
-                  (concat (cdar marks) " "))))
+                  (concat (cdar marks) " ")))
+               use-hard-newlines)
            (fill-region (point-min) (point-max)))
          (set-marker (caar marks) nil)
          (setq marks (cdr marks)))
@@ -464,64 +466,64 @@ always hide."
   (gnus-set-format 'cited-closed-text-button t)
   (save-excursion
     (set-buffer gnus-article-buffer)
-      (let ((buffer-read-only nil)
-           marks
-           (inhibit-point-motion-hooks t)
-           (props (nconc (list 'article-type 'cite)
-                         gnus-hidden-properties))
-           (point (point-min))
-           found beg end start)
-       (while (setq point
-                    (text-property-any point (point-max)
-                                       'gnus-callback
-                                       'gnus-article-toggle-cited-text))
-         (setq found t)
-         (goto-char point)
-         (gnus-article-toggle-cited-text
-          (get-text-property point 'gnus-data) arg)
-         (forward-line 1)
-         (setq point (point)))
-       (unless found
-         (setq marks (gnus-dissect-cited-text))
-         (while marks
-           (setq beg nil
-                 end nil)
-           (while (and marks (string= (cdar marks) ""))
-             (setq marks (cdr marks)))
-           (when marks
-             (setq beg (caar marks)))
-           (while (and marks (not (string= (cdar marks) "")))
-             (setq marks (cdr marks)))
-           (when marks
+    (let ((buffer-read-only nil)
+         marks
+         (inhibit-point-motion-hooks t)
+         (props (nconc (list 'article-type 'cite)
+                       gnus-hidden-properties))
+         (point (point-min))
+         found beg end start)
+      (while (setq point
+                  (text-property-any point (point-max)
+                                     'gnus-callback
+                                     'gnus-article-toggle-cited-text))
+       (setq found t)
+       (goto-char point)
+       (gnus-article-toggle-cited-text
+        (get-text-property point 'gnus-data) arg)
+       (forward-line 1)
+       (setq point (point)))
+      (unless found
+       (setq marks (gnus-dissect-cited-text))
+       (while marks
+         (setq beg nil
+               end nil)
+         (while (and marks (string= (cdar marks) ""))
+           (setq marks (cdr marks)))
+         (when marks
+           (setq beg (caar marks)))
+         (while (and marks (not (string= (cdar marks) "")))
+           (setq marks (cdr marks)))
+         (when marks
            (setq end (caar marks)))
-           ;; Skip past lines we want to leave visible.
-           (when (and beg end gnus-cited-lines-visible)
-             (goto-char beg)
-             (forward-line (if (consp gnus-cited-lines-visible)
-                               (car gnus-cited-lines-visible)
-                             gnus-cited-lines-visible))
-             (if (>= (point) end)
-                 (setq beg nil)
-               (setq beg (point-marker))
-               (when (consp gnus-cited-lines-visible)
-                 (goto-char end)
-                 (forward-line (- (cdr gnus-cited-lines-visible)))
-                 (if (<= (point) beg)
-                     (setq beg nil)
+         ;; Skip past lines we want to leave visible.
+         (when (and beg end gnus-cited-lines-visible)
+           (goto-char beg)
+           (forward-line (if (consp gnus-cited-lines-visible)
+                             (car gnus-cited-lines-visible)
+                           gnus-cited-lines-visible))
+           (if (>= (point) end)
+               (setq beg nil)
+             (setq beg (point-marker))
+             (when (consp gnus-cited-lines-visible)
+               (goto-char end)
+               (forward-line (- (cdr gnus-cited-lines-visible)))
+               (if (<= (point) beg)
+                   (setq beg nil)
                  (setq end (point-marker))))))
-           (when (and beg end)
-             (gnus-add-wash-type 'cite)
-             ;; We use markers for the end-points to facilitate later
-             ;; wrapping and mangling of text.
-             (setq beg (set-marker (make-marker) beg)
-                   end (set-marker (make-marker) end))
-             (gnus-add-text-properties-when 'article-type nil beg end props)
-             (goto-char beg)
-             (unless (save-excursion (search-backward "\n\n" nil t))
-               (insert "\n"))
-             (put-text-property
-              (setq start (point-marker))
-              (progn
+         (when (and beg end)
+           (gnus-add-wash-type 'cite)
+           ;; We use markers for the end-points to facilitate later
+           ;; wrapping and mangling of text.
+           (setq beg (set-marker (make-marker) beg)
+                 end (set-marker (make-marker) end))
+           (gnus-add-text-properties-when 'article-type nil beg end props)
+           (goto-char beg)
+           (unless (save-excursion (search-backward "\n\n" nil t))
+             (insert "\n"))
+           (put-text-property
+            (setq start (point-marker))
+            (progn
               (gnus-article-add-button
                (point)
                (progn (eval gnus-cited-closed-text-button-line-format-spec)
@@ -529,8 +531,8 @@ always hide."
                `gnus-article-toggle-cited-text
                (list (cons beg end) start))
               (point))
-              'article-type 'annotation)
-             (set-marker beg (point))))))))
+            'article-type 'annotation)
+           (set-marker beg (point))))))))
 
 (defun gnus-article-toggle-cited-text (args &optional arg)
   "Toggle hiding the text in REGION.
@@ -688,7 +690,7 @@ See also the documentation for `gnus-article-highlight-citation'."
               (gnus-article-search-signature)
               (point)))
        (prefix-regexp (concat "^\\(" message-cite-prefix-regexp "\\)"))
-       alist entry start begin end numbers prefix guess-limit)
+       alist entry start begin end numbers prefix guess-limit mc-flag)
     ;; Get all potential prefixes in `alist'.
     (while (< (point) max)
       ;; Each line.
@@ -935,7 +937,12 @@ See also the documentation for `gnus-article-highlight-citation'."
          from to overlay)
       (goto-char (point-min))
       (when (zerop (forward-line (1- number)))
-       (forward-char (length prefix))
+       (static-if (or (featurep 'xemacs)
+                      (and (eq emacs-major-version 20)
+                           (>= emacs-minor-version 3))
+                      (>= emacs-major-version 21))
+           (forward-char (length prefix))
+         (move-to-column (string-width prefix)))
        (skip-chars-forward " \t")
        (setq from (point))
        (end-of-line 1)