diff options
author | Miles Bader <miles@gnu.org> | 2006-02-01 10:02:36 +0000 |
---|---|---|
committer | Miles Bader <miles@gnu.org> | 2006-02-01 10:02:36 +0000 |
commit | 46e8fe3d6ce114ae3ecd41f7add9ed7f0c13f4b6 (patch) | |
tree | 4ecbbd335f2c98e1b5dc98da479196a563aebb89 /lisp/gnus/mm-uu.el | |
parent | 06e7028b76c83c5fba3b1e581ae5b68cd7bcc177 (diff) | |
download | emacs-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.el | 58 |
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) |