Synch with Oort Gnus.
[elisp/gnus.git-] / lisp / gnus-cite.el
index 77176e5..797a81a 100644 (file)
@@ -1,6 +1,6 @@
-;;; gnus-cite.el --- parse citations in articles for Gnus  -*- coding: iso-latin-1 -*-
+;;; gnus-cite.el --- parse citations in articles for Gnus
 
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001
 ;;        Free Software Foundation, Inc.
 
 ;; Author: Per Abhiddenware
@@ -465,63 +465,65 @@ 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)
-             ;; 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)
+           (or (memq 'cite gnus-article-wash-types)
+               (push 'cite gnus-article-wash-types))
+           ;; 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.
@@ -549,14 +551,21 @@ means show, nil means toggle."
              (and (> arg 0) (not hidden))
              (and (< arg 0) hidden))
       (if hidden
-         (gnus-remove-text-properties-when
-          'article-type 'cite beg end 
-          (cons 'article-type (cons 'cite
-                                    gnus-hidden-properties)))
+         (progn
+           ;; Can't remove 'cite from g-a-wash-types here because
+           ;; multiple citations may be hidden -jas
+           (gnus-remove-text-properties-when
+            'article-type 'cite beg end
+            (cons 'article-type (cons 'cite
+                                      gnus-hidden-properties))))
+       (or (memq 'cite gnus-article-wash-types)
+           (push 'cite gnus-article-wash-types))
        (gnus-add-text-properties-when
-        'article-type nil beg end 
+        'article-type nil beg end
         (cons 'article-type (cons 'cite
                                   gnus-hidden-properties))))
+      (let ((gnus-article-mime-handle-alist-1 gnus-article-mime-handle-alist))
+       (gnus-set-mode-line 'article))
       (save-excursion
        (goto-char start)
        (gnus-delete-line)
@@ -959,14 +968,21 @@ See also the documentation for `gnus-article-highlight-citation'."
        (goto-char (point-min))
        (forward-line (1- number))
        (cond ((get-text-property (point) 'invisible)
+              ;; Can't remove 'cite from g-a-wash-types here because
+              ;; multiple citations may be hidden -jas
               (remove-text-properties (point) (progn (forward-line 1) (point))
                                       gnus-hidden-properties))
              ((assq number gnus-cite-attribution-alist))
              (t
+              (or (memq 'cite gnus-article-wash-types)
+                  (push 'cite gnus-article-wash-types))
               (gnus-add-text-properties
                (point) (progn (forward-line 1) (point))
                (nconc (list 'article-type 'cite)
-                      gnus-hidden-properties))))))))
+                      gnus-hidden-properties))))
+       (let ((gnus-article-mime-handle-alist-1
+              gnus-article-mime-handle-alist))
+         (gnus-set-mode-line 'article))))))
 
 (defun gnus-cite-find-prefix (line)
   ;; Return citation prefix for LINE.
@@ -995,6 +1011,7 @@ See also the documentation for `gnus-article-highlight-citation'."
 
 ;; Local Variables:
 ;; coding: iso-8859-1
+;; buffer-file-coding-system: iso-8859-1
 ;; End:
 
 ;;; gnus-cite.el ends here