--- ChangeLog 1998/11/22 09:41:03 1.1 +++ ChangeLog 1998/11/22 10:21:47 @@ -1,3 +1,9 @@ +Sun Nov 22 04:42:22 1998 Shenghuo ZHU + + * mm-uu.el (mm-uu-test): New function. + (mm-uu-dissect): Inherit charset and cte from head. + * gnus-art.el (article-decode-charset): Use mm-uu-test. + Sat Nov 21 09:57:01 1998 Lars Magne Ingebrigtsen * gnus.el: Pterodactyl Gnus v0.53 is released. --- gnus-art.el 1998/11/22 09:44:18 1.1 +++ gnus-art.el 1998/11/22 10:19:26 @@ -1049,8 +1049,9 @@ (widen) (forward-line 1) (narrow-to-region (point) (point-max)) - (when (or (not ctl) - (equal (car ctl) "text/plain")) + (when (and (or (not ctl) + (equal (car ctl) "text/plain")) + (not (mm-uu-test))) (mm-decode-body charset (and cte (intern (downcase (gnus-strip-whitespace cte)))) --- mm-uu.el 1998/11/22 09:34:53 1.1 +++ mm-uu.el 1998/11/22 10:21:05 @@ -72,13 +72,27 @@ (defun mm-uu-dissect () "Dissect the current buffer and return a list of uu handles." - (save-excursion - (save-restriction - (mail-narrow-to-head) - (goto-char (point-max))) - (forward-line) - (let ((text-start (point)) start-char end-char - type file-name end-line result) + (let (ct ctl cte charset text-start start-char end-char + type file-name end-line result text-plain-type) + (save-excursion + (save-restriction + (mail-narrow-to-head) + (when (and (mail-fetch-field "mime-version") + (setq ct (mail-fetch-field "content-type"))) + (setq cte (message-fetch-field "content-transfer-encoding" t) + ctl (condition-case () (mail-header-parse-content-type ct) + (error nil)) + charset (and ctl (mail-content-type-get ctl 'charset))) + (if (stringp cte) + (setq cte (intern (downcase (mail-header-remove-whitespace + (mail-header-remove-comments + cte))))))) + (goto-char (point-max))) + (forward-line) + (setq text-start (point) + text-plain-type (cons "text/plain" + (if charset + (list (cons 'charset charset))))) (while (re-search-forward mm-uu-begin-line nil t) (beginning-of-line) (setq start-char (point)) @@ -93,7 +107,7 @@ (nnheader-translate-file-chars (match-string 1)))))) (setq end-line (symbol-value (intern (concat "mm-uu-" (symbol-name type) - "-end-line")))) + "-end-line")))) (when (re-search-forward end-line nil t) (forward-line) (setq end-char (point)) @@ -105,7 +119,7 @@ (if (> start-char text-start) (push (list (mm-uu-copy-to-buffer text-start start-char) - '("text/plain") nil nil nil nil) + text-plain-type cte nil nil nil) result)) (push (cond @@ -143,9 +157,29 @@ (if (> (point-max) (1+ text-start)) (push (list (mm-uu-copy-to-buffer text-start (point-max)) - '("text/plain") nil nil nil nil) + text-plain-type cte nil nil nil) result)) (setq result (cons "multipart/mixed" (nreverse result)))) + result))) + +;;;### autoload +(defun mm-uu-test () + "Check whether the current buffer contains uu stuffs." + (save-excursion + (save-restriction + (mail-narrow-to-head) + (goto-char (point-max))) + (forward-line) + (let (type end-line result) + (while (and (not result) (re-search-forward mm-uu-begin-line nil t)) + (forward-line) + (setq type (cdr (assq (aref (match-string 0) 0) + mm-uu-identifier-alist))) + (setq end-line (symbol-value + (intern (concat "mm-uu-" (symbol-name type) + "-end-line")))) + (if (re-search-forward end-line nil t) + (setq result t))) result))) (provide 'mm-uu)