* assistant.el (assistant-authinfo-data): New function.
[gnus] / lisp / mm-partial.el
index 8f32aa9..693e8e9 100644 (file)
@@ -1,5 +1,5 @@
 ;;; mm-partial.el --- showing message/partial
-;; Copyright (C) 2000 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 ;; Keywords: message partial
@@ -25,8 +25,7 @@
 
 ;;; Code:
 
-(eval-when-compile 
-  (require 'cl))
+(eval-when-compile (require 'cl))
 
 (require 'gnus-sum)
 (require 'mm-util)
   (let ((headers (save-excursion
                   (set-buffer gnus-summary-buffer)
                   gnus-newsgroup-headers))
-       phandles handles  header)
+       phandles header)
     (while (setq header (pop headers))
       (unless (eq (aref header 0) art)
        (mm-with-unibyte-buffer
-         (gnus-request-article-this-buffer (aref header 0) 
+         (gnus-request-article-this-buffer (aref header 0)
                                            gnus-newsgroup-name)
          (when (search-forward id nil t)
-           (let ((nhandles (mm-dissect-buffer)) nid)
-             (setq handles gnus-article-mime-handles)
+           (let ((nhandles (mm-dissect-buffer
+                            nil gnus-article-loose-mime)) nid)
              (if (consp (car nhandles))
                  (mm-destroy-parts nhandles)
-               (setq nid (cdr (assq 'id 
+               (setq nid (cdr (assq 'id
                                     (cdr (mm-handle-type nhandles)))))
                (if (not (equal id nid))
                    (mm-destroy-parts nhandles)
     phandles))
 
 ;;;###autoload
-(defun mm-inline-partial (handle)
-  (let ((id (cdr (assq 'id (cdr (mm-handle-type handle))))) 
+(defun mm-inline-partial (handle &optional no-display)
+  "Show the partial part of HANDLE.
+This function replaces the buffer of HANDLE with a buffer contains
+the entire message.
+If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing."
+  (let ((id (cdr (assq 'id (cdr (mm-handle-type handle)))))
        phandles
        (b (point)) (n 1) total
        phandle nn ntotal
        gnus-displaying-mime handles buffer)
     (unless (mm-handle-cache handle)
       (unless id
-       (error "Can not find message/partial id."))
+       (error "Can not find message/partial id"))
       (setq phandles
-           (sort (cons handle 
+           (sort (cons handle
                        (mm-partial-find-parts
-                        id 
+                        id
                         (save-excursion
                           (set-buffer gnus-summary-buffer)
                           (gnus-summary-article-number))))
                  #'(lambda (a b)
-                     (let ((anumber (string-to-number 
-                                     (cdr (assq 'number 
+                     (let ((anumber (string-to-number
+                                     (cdr (assq 'number
                                                 (cdr (mm-handle-type a))))))
-                           (bnumber (string-to-number 
-                                     (cdr (assq 'number 
+                           (bnumber (string-to-number
+                                     (cdr (assq 'number
                                                 (cdr (mm-handle-type b)))))))
                        (< anumber bnumber)))))
       (setq gnus-article-mime-handles
-           (append (if (listp (car gnus-article-mime-handles))
-                       gnus-article-mime-handles
-                     (list gnus-article-mime-handles))
-                   phandles))
+           (mm-merge-handles gnus-article-mime-handles phandles))
       (save-excursion
-       (set-buffer (generate-new-buffer "*mm*"))
+       (set-buffer (generate-new-buffer " *mm*"))
        (while (setq phandle (pop phandles))
-         (setq nn (string-to-number 
-                   (cdr (assq 'number 
+         (setq nn (string-to-number
+                   (cdr (assq 'number
                               (cdr (mm-handle-type phandle))))))
-         (setq ntotal (string-to-number 
-                       (cdr (assq 'total 
+         (setq ntotal (string-to-number
+                       (cdr (assq 'total
                                   (cdr (mm-handle-type phandle))))))
          (if ntotal
              (if total
-                 (unless (eq total ntotal) 
-                 (error "The numbers of total are different."))
+                 (unless (eq total ntotal)
+                 (error "The numbers of total are different"))
                (setq total ntotal)))
          (unless (< nn n)
            (unless (eq nn n)
              (error "Missing part %d" n))
            (mm-insert-part phandle)
            (goto-char (point-max))
+           (when (not (eq 0 (skip-chars-backward "\r\n")))
+             ;; remove tail blank spaces except one
+             (if (looking-at "\r?\n")
+                 (goto-char (match-end 0)))
+             (delete-region (point) (point-max)))
            (setq n (+ n 1))))
        (unless total
          (error "Don't known the total number of"))
        (if (<= n total)
            (error "Missing part %d" n))
        (kill-buffer (mm-handle-buffer handle))
+       (goto-char (point-min))
+       (let ((point (if (search-forward "\n\n" nil t)
+                        (1- (point))
+                      (point-max))))
+         (goto-char (point-min))
+         (unless (re-search-forward "^mime-version:" point t)
+           (insert "MIME-Version: 1.0\n")))
        (setcar handle (current-buffer))
        (mm-handle-set-cache handle t)))
-    (save-excursion
-      (save-restriction
-       (narrow-to-region b b)
-       (mm-insert-part handle)
-       (let (gnus-article-mime-handles)
-         (run-hooks 'gnus-article-decode-hook)
-         (gnus-article-prepare-display)
-         (setq handles gnus-article-mime-handles))
-       (when handles
-         ;; It is in article buffer.
-         (setq gnus-article-mime-handles
-               (nconc (if (listp (car gnus-article-mime-handles))
-                          gnus-article-mime-handles
-                        (list gnus-article-mime-handles))
-                      (if (listp (car handles)) 
-                          handles (list handles)))))
-       (mm-handle-set-undisplayer
-        handle
-        `(lambda ()
-           (let (buffer-read-only)
-             (condition-case nil
-                 ;; This is only valid on XEmacs.
-                 (mapcar (lambda (prop)
+    (unless no-display
+      (save-excursion
+       (save-restriction
+         (narrow-to-region b b)
+         (mm-insert-part handle)
+         (let (gnus-article-mime-handles)
+           (run-hooks 'gnus-article-decode-hook)
+           (gnus-article-prepare-display)
+           (setq handles gnus-article-mime-handles))
+         (when handles
+           ;; It is in article buffer.
+           (setq gnus-article-mime-handles
+                 (mm-merge-handles gnus-article-mime-handles handles)))
+         (mm-handle-set-undisplayer
+          handle
+          `(lambda ()
+             (let (buffer-read-only)
+               (condition-case nil
+                   ;; This is only valid on XEmacs.
+                   (mapcar (lambda (prop)
                            (remove-specifier
                             (face-property 'default prop) (current-buffer)))
-                         '(background background-pixmap foreground))
-               (error nil))
-             (delete-region ,(point-min-marker) ,(point-max-marker)))))))))
+                           '(background background-pixmap foreground))
+                 (error nil))
+               (delete-region ,(point-min-marker) ,(point-max-marker))))))))))
+
+(provide 'mm-partial)
 
-;; mm-partial.el ends here
+;;; arch-tag: 460e7424-05f2-4a1d-a0f2-70ec081eff7d
+;;; mm-partial.el ends here