* 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 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.
(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))
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."))
(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)
;;; 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.
(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")))))
(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