(lambda () (mm-uu-verbatim-marks-extract 0 0 1 -1))
nil)
(LaTeX
- "^\\(\\\\[^\n]+\n\\)*\\\\documentclass"
+ "^\\([\\\\%][^\n]+\n\\)*\\\\documentclass.*[[{%]"
"^\\\\end{document}"
mm-uu-latex-extract
nil
(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))))
(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
(setq result (cons "multipart/mixed" (nreverse result))))
result)))
-(defcustom mm-uu-buttonize-original-text-parts nil
- "Non-nil means that the originals of dissected parts get buttons.
-This variable is overridden by `gnus-inhibit-mime-unbuttonizing'."
- :type 'boolean
- :version "23.0"
- :group 'gnus-article-mime)
-
-(defun mm-uu-dissect-text-parts (handle)
+;;;###autoload
+(defun mm-uu-dissect-text-parts (handle &optional decoded)
"Dissect text parts and put uu handles into HANDLE.
-If `mm-uu-buttonize-original-text-parts' is non-nil, the part that HANDLE
-points will always get a button."
+Assume text has been decoded if DECODED is non-nil."
(let ((buffer (mm-handle-buffer handle)))
(cond ((stringp buffer)
- (mapc 'mm-uu-dissect-text-parts (cdr handle)))
+ (dolist (elem (cdr handle))
+ (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))))))
- (if (or mm-uu-buttonize-original-text-parts
- (and (boundp 'gnus-inhibit-mime-unbuttonizing)
- (symbol-value 'gnus-inhibit-mime-unbuttonizing)))
- (let ((parent (copy-sequence handle)))
- (mm-handle-set-disposition parent '("attachment"))
- (mm-handle-set-description parent "The original part of")
- (setcdr handle (cons parent (cdr children))))
+ (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)
+ (string-equal (mm-handle-media-type (cadr children))
+ type))
+ (kill-buffer (mm-handle-buffer (cadr children)))
(kill-buffer buffer)
- (setcdr handle (cdr children)))
- (setcar handle (car children)) ;; "multipart/mixed"
- (mapc 'mm-uu-dissect-text-parts (cdr children)))))
+ (setcdr handle (cdr children))
+ (setcar handle (car children)) ;; "multipart/mixed"
+ (dolist (elem (cdr children))
+ (mm-uu-dissect-text-parts elem decoded))))))
(t
- (mapc 'mm-uu-dissect-text-parts handle)))))
+ (dolist (elem handle)
+ (mm-uu-dissect-text-parts elem decoded))))))
(provide 'mm-uu)