2000-11-06 14:03:10 ShengHuo ZHU <zsh@cs.rochester.edu>
authorShengHuo ZHU <zsh@cs.rochester.edu>
Mon, 6 Nov 2000 18:45:54 +0000 (18:45 +0000)
committerShengHuo ZHU <zsh@cs.rochester.edu>
Mon, 6 Nov 2000 18:45:54 +0000 (18:45 +0000)
* mml.el (mml-insert-mml-markup): Ignore internal stuff.
(mml-insert-mime): Understand gnus-decoded.
(mime-to-mml): New parameter handles.
* gnus-art.el (gnus-mime-save-part-and-strip): Use it.
* gnus-sum.el (gnus-summary-edit-article): Add argument `3'.

lisp/ChangeLog
lisp/gnus-art.el
lisp/gnus-sum.el
lisp/mml.el

index 630d6a2..4c6e7a2 100644 (file)
@@ -1,3 +1,11 @@
+2000-11-06 14:03:10  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-insert-mml-markup): Ignore internal stuff.
+       (mml-insert-mime): Understand gnus-decoded.
+       (mime-to-mml): New parameter handles.
+       * gnus-art.el (gnus-mime-save-part-and-strip): Use it.
+       * gnus-sum.el (gnus-summary-edit-article): Add argument `3'.
+
 2000-11-06 13:51:37  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
        * mm-decode.el (mime-security): New group.
index af5f710..3b910c0 100644 (file)
@@ -3010,21 +3010,9 @@ If ALL-HEADERS is non-nil, no headers are hidden."
                  (or gnus-article-ignored-charsets
                      ',gnus-newsgroup-ignored-charsets))
                 (mbl mml-buffer-list))
-            (insert-buffer gnus-original-article-buffer)
-            (save-restriction
-              (message-narrow-to-head)
-              (message-remove-header "Content-Type")
-              (message-remove-header "MIME-Version")
-              (message-remove-header "Content-Transfer-Encoding")
-              (mail-decode-encoded-word-region (point-min) (point-max))
-              (goto-char (point-max)))
-            (forward-char 1)
-            (delete-region (point) (point-max))
             (setq mml-buffer-list nil)
-            (if (stringp (car gnus-article-mime-handles))
-                (mml-insert-mime gnus-article-mime-handles)
-              (mml-insert-mime gnus-article-mime-handles t))
-            (mm-destroy-parts gnus-article-mime-handles)
+            (insert-buffer gnus-original-article-buffer)
+            (mime-to-mml gnus-article-mime-handles)
             (setq gnus-article-mime-handles nil)
             (make-local-hook 'kill-buffer-hook)
             (let ((mbl1 mml-buffer-list))
index 39b1863..a151171 100644 (file)
@@ -7876,15 +7876,22 @@ This will have permanent effect only in mail groups.
 If ARG is nil, edit the decoded articles.
 If ARG is 1, edit the raw articles. 
 If ARG is 2, edit the raw articles even in read-only groups.
+If ARG is 3, edit the articles with the current handles.
 Otherwise, allow editing of articles even in read-only
 groups."
   (interactive "P")
-  (let (force raw)
+  (let (force raw current-handles)
     (cond 
      ((null arg))
      ((eq arg 1) (setq raw t))
      ((eq arg 2) (setq raw t
                       force t))
+     ((eq arg 3) (setq current-handles 
+                      (and (gnus-buffer-live-p gnus-article-buffer)
+                           (with-current-buffer gnus-article-buffer
+                             (prog1
+                                 gnus-article-mime-handles
+                                 (setq gnus-article-mime-handles nil))))))
      (t (setq force t)))
     (if (and raw (not force) (equal gnus-newsgroup-name "nndraft:drafts"))
        (error "Can't edit the raw article in group nndraft:drafts."))
@@ -7904,15 +7911,15 @@ groups."
            (setq raw t))
        (gnus-article-edit-article
         (if raw 'ignore 
-          #'(lambda () 
-              (let ((mbl mml-buffer-list))
-                (setq mml-buffer-list nil)
-                (mime-to-mml)
-                (make-local-hook 'kill-buffer-hook)
-                (let ((mbl1 mml-buffer-list))
-                  (setq mml-buffer-list mbl)
-                  (set (make-local-variable 'mml-buffer-list) mbl1))
-                (add-hook 'kill-buffer-hook 'mml-destroy-buffers t t))))
+          `(lambda () 
+             (let ((mbl mml-buffer-list))
+               (setq mml-buffer-list nil)
+               (mime-to-mml ,'current-handles)
+               (make-local-hook 'kill-buffer-hook)
+               (let ((mbl1 mml-buffer-list))
+                 (setq mml-buffer-list mbl)
+                 (set (make-local-variable 'mml-buffer-list) mbl1))
+               (add-hook 'kill-buffer-hook 'mml-destroy-buffers t t))))
         `(lambda (no-highlight)
            (let ((mail-parse-charset ',gnus-newsgroup-charset)
                  (message-options message-options)
index 589988c..0d8facf 100644 (file)
@@ -541,20 +541,22 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
 ;;; Transforming MIME to MML
 ;;;
 
-(defun mime-to-mml ()
-  "Translate the current buffer (which should be a message) into MML."
+(defun mime-to-mml (&optional handles)
+  "Translate the current buffer (which should be a message) into MML.
+If HANDLES is non-nil, use it instead reparsing the buffer."
   ;; First decode the head.
   (save-restriction
     (message-narrow-to-head)
     (mail-decode-encoded-word-region (point-min) (point-max)))
-  (let ((handles (mm-dissect-buffer t)))
-    (goto-char (point-min))
-    (search-forward "\n\n" nil t)
-    (delete-region (point) (point-max))
-    (if (stringp (car handles))
-       (mml-insert-mime handles)
-      (mml-insert-mime handles t))
-    (mm-destroy-parts handles))
+  (unless handles
+    (setq handles (mm-dissect-buffer t)))
+  (goto-char (point-min))
+  (search-forward "\n\n" nil t)
+  (delete-region (point) (point-max))
+  (if (stringp (car handles))
+      (mml-insert-mime handles)
+    (mml-insert-mime handles t))
+  (mm-destroy-parts handles)
   (save-restriction
     (message-narrow-to-head)
     ;; Remove them, they are confusing.
@@ -595,10 +597,11 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
       (mapcar 'mml-insert-mime (cdr handle))
       (insert "<#/multipart>\n"))
      (textp
-      (let ((text (mm-get-part handle))
-           (charset (mail-content-type-get
+      (let ((charset (mail-content-type-get
                      (mm-handle-type handle) 'charset)))
-       (insert (mm-decode-string text charset)))
+       (if (eq charset 'gnus-decoded)
+           (mm-insert-part handle)
+         (insert (mm-decode-string (mm-get-part handle) charset))))
       (goto-char (point-max)))
      (t
       (insert "<#/part>\n")))))
@@ -613,7 +616,8 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
       (insert "<#part type=" (mm-handle-media-type handle)))
     (dolist (elem (append (cdr (mm-handle-type handle))
                          (cdr (mm-handle-disposition handle))))
-      (insert " " (symbol-name (car elem)) "=\"" (cdr elem) "\""))
+      (unless (symbolp (cdr elem))
+       (insert " " (symbol-name (car elem)) "=\"" (cdr elem) "\"")))
     (when (mm-handle-disposition handle)
       (insert " disposition=" (car (mm-handle-disposition handle))))
     (when buffer