emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/gnus/mm-uu.el


From: Miles Bader
Subject: [Emacs-diffs] Changes to emacs/lisp/gnus/mm-uu.el
Date: Wed, 01 Feb 2006 10:02:37 +0000

Index: emacs/lisp/gnus/mm-uu.el
diff -u emacs/lisp/gnus/mm-uu.el:1.22 emacs/lisp/gnus/mm-uu.el:1.23
--- emacs/lisp/gnus/mm-uu.el:1.22       Wed Jan 25 06:47:24 2006
+++ emacs/lisp/gnus/mm-uu.el    Wed Feb  1 10:02:35 2006
@@ -266,7 +266,7 @@
 
 (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 @@
 
 (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 @@
        (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 @@
                 (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)
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]