Function: mm-uu-dissect-text-parts

mm-uu-dissect-text-parts is an autoloaded and byte-compiled function defined in mm-uu.el.gz.

Signature

(mm-uu-dissect-text-parts HANDLE &optional DECODED)

Documentation

Dissect text parts and put uu handles into HANDLE.

Assume text has been decoded if DECODED is non-nil.

Aliases

mh-mm-uu-dissect-text-parts (obsolete since 29.1)

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/mm-uu.el.gz
;;;###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 decoded)))
	  ((bufferp buffer)
	   (let ((type (mm-handle-media-type handle))
		 (case-fold-search t) ;; string-match
		 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)
		    (not (string-match "/x-\\(?:diff\\|patch\\)\\'" type))
                    (equal (car (mm-handle-disposition handle))
                           "inline")
		    (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"
		 (dolist (elem (cdr children))
		   (mm-uu-dissect-text-parts elem decoded))))))
	  (t
	   (dolist (elem handle)
	     (mm-uu-dissect-text-parts elem decoded))))))