summaryrefslogtreecommitdiff
path: root/lisp/gnus/mm-uu.el
diff options
context:
space:
mode:
authorMiles Bader <miles@gnu.org>2006-02-01 10:02:36 +0000
committerMiles Bader <miles@gnu.org>2006-02-01 10:02:36 +0000
commit46e8fe3d6ce114ae3ecd41f7add9ed7f0c13f4b6 (patch)
tree4ecbbd335f2c98e1b5dc98da479196a563aebb89 /lisp/gnus/mm-uu.el
parent06e7028b76c83c5fba3b1e581ae5b68cd7bcc177 (diff)
downloademacs-46e8fe3d6ce114ae3ecd41f7add9ed7f0c13f4b6.tar.gz
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-33
Merge from gnus--rel--5.10 Patches applied: * gnus--rel--5.10 (patch 8-13) - Merge from emacs--devo--0 - Update from CVS
Diffstat (limited to 'lisp/gnus/mm-uu.el')
-rw-r--r--lisp/gnus/mm-uu.el58
1 files changed, 40 insertions, 18 deletions
diff --git a/lisp/gnus/mm-uu.el b/lisp/gnus/mm-uu.el
index fa36582af01..eb5afa794f5 100644
--- a/lisp/gnus/mm-uu.el
+++ b/lisp/gnus/mm-uu.el
@@ -266,7 +266,7 @@ Return that buffer."
(defun mm-uu-emacs-sources-extract ()
(mm-make-handle (mm-uu-copy-to-buffer start-point end-point)
- '("application/emacs-lisp")
+ '("application/emacs-lisp" (charset . gnus-decoded))
nil nil
(list mm-dissect-disposition
(cons 'filename file-name))))
@@ -282,7 +282,7 @@ Return that buffer."
(defun mm-uu-diff-extract ()
(mm-make-handle (mm-uu-copy-to-buffer start-point end-point)
- '("text/x-patch")))
+ '("text/x-patch" (charset . gnus-decoded))))
(defun mm-uu-diff-test ()
(and gnus-newsgroup-name
@@ -509,31 +509,53 @@ value of `mm-uu-text-plain-type'."
(setq result (cons "multipart/mixed" (nreverse result))))
result)))
-(defun mm-uu-dissect-text-parts (handle)
- "Dissect text parts and put uu handles into HANDLE."
+;;;###autoload
+(defun mm-uu-dissect-text-parts (handle &optional decoded)
+ "Dissect text parts and put uu handles into HANDLE.
+Assume text has been decoded if DECODED is non-nil."
(let ((buffer (mm-handle-buffer handle)))
(cond ((stringp buffer)
(dolist (elem (cdr handle))
- (mm-uu-dissect-text-parts elem)))
+ (mm-uu-dissect-text-parts elem decoded)))
((bufferp buffer)
(let ((type (mm-handle-media-type handle))
(case-fold-search t) ;; string-match
- encoding children)
+ children charset encoding)
(when (and
(stringp type)
;; Mutt still uses application/pgp even though
;; it has already been withdrawn.
(string-match "\\`text/\\|\\`application/pgp\\'" type)
- (setq children
- (with-current-buffer buffer
- (if (setq encoding (mm-handle-encoding handle))
- ;; Inherit the multibyteness of the `buffer'.
- (with-temp-buffer
- (insert-buffer-substring buffer)
- (mm-decode-content-transfer-encoding
- encoding type)
- (mm-uu-dissect t (mm-handle-type handle)))
- (mm-uu-dissect t (mm-handle-type handle))))))
+ (setq
+ children
+ (with-current-buffer buffer
+ (cond
+ ((or decoded
+ (eq (setq charset (mail-content-type-get
+ (mm-handle-type handle)
+ 'charset))
+ 'gnus-decoded))
+ (setq decoded t)
+ (mm-uu-dissect
+ t (cons type '((charset . gnus-decoded)))))
+ (charset
+ (setq decoded t)
+ (mm-with-multibyte-buffer
+ (insert (mm-decode-string (mm-get-part handle)
+ charset))
+ (mm-uu-dissect
+ t (cons type '((charset . gnus-decoded))))))
+ ((setq encoding (mm-handle-encoding handle))
+ (setq decoded nil)
+ ;; Inherit the multibyteness of the `buffer'.
+ (with-temp-buffer
+ (insert-buffer-substring buffer)
+ (mm-decode-content-transfer-encoding
+ encoding type)
+ (mm-uu-dissect t (list type))))
+ (t
+ (setq decoded nil)
+ (mm-uu-dissect t (list type)))))))
;; Ignore it if a given part is dissected into a single
;; part of which the type is the same as the given one.
(if (and (<= (length children) 2)
@@ -544,10 +566,10 @@ value of `mm-uu-text-plain-type'."
(setcdr handle (cdr children))
(setcar handle (car children)) ;; "multipart/mixed"
(dolist (elem (cdr children))
- (mm-uu-dissect-text-parts elem))))))
+ (mm-uu-dissect-text-parts elem decoded))))))
(t
(dolist (elem handle)
- (mm-uu-dissect-text-parts elem))))))
+ (mm-uu-dissect-text-parts elem decoded))))))
(provide 'mm-uu)