X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fmm-bodies.el;h=1e6ce8299fee9984570e75b2c3e60f0d92aee2d7;hb=2e8ed0ac1c3e5a1454139d04de846f7e4261e12d;hp=298a62dfa893ecc8efc942af3a212d064eddca56;hpb=d856dcb522a9a30707f802b4afd6ceace48f3d6e;p=gnus diff --git a/lisp/mm-bodies.el b/lisp/mm-bodies.el index 298a62dfa..1e6ce8299 100644 --- a/lisp/mm-bodies.el +++ b/lisp/mm-bodies.el @@ -38,25 +38,7 @@ ;; BS, vertical TAB, form feed, and ^_ (defvar mm-8bit-char-regexp "[^\x20-\x7f\r\n\t\x7\x8\xb\xc\x1f]") -(defvar mm-body-charset-encoding-alist - '((us-ascii . 7bit) - (iso-8859-1 . quoted-printable) - (iso-8859-2 . quoted-printable) - (iso-8859-3 . quoted-printable) - (iso-8859-4 . quoted-printable) - (iso-8859-5 . base64) - (koi8-r . 8bit) - (iso-8859-7 . quoted-printable) - (iso-8859-8 . quoted-printable) - (iso-8859-9 . quoted-printable) - (iso-2022-jp . base64) - (iso-2022-kr . base64) - (gb2312 . base64) - (cn-gb . base64) - (cn-gb-2312 . base64) - (euc-kr . 8bit) - (iso-2022-jp-2 . base64) - (iso-2022-int-1 . base64)) +(defvar mm-body-charset-encoding-alist nil "Alist of MIME charsets to encodings. Valid encodings are `7bit', `8bit', `quoted-printable' and `base64'.") @@ -123,7 +105,7 @@ If no encoding was done, nil is returned." bits) (t (let ((encoding (or (cdr (assq charset mm-body-charset-encoding-alist)) - 'quoted-printable))) + (mm-qp-or-base64)))) (mm-encode-content-transfer-encoding encoding "text/plain") encoding))))) @@ -161,12 +143,20 @@ If no encoding was done, nil is returned." ((eq encoding 'quoted-printable) (quoted-printable-decode-region (point-min) (point-max))) ((eq encoding 'base64) - (base64-decode-region (point-min) (point-max))) + (base64-decode-region (point-min) + ;; Some mailers insert whitespace + ;; junk at the end which + ;; base64-decode-region dislikes. + (save-excursion + (goto-char (point-max)) + (skip-chars-backward "\n\t ") + (delete-region (point) (point-max)) + (point)))) ((memq encoding '(7bit 8bit binary)) ) ((null encoding) ) - ((eq encoding 'x-uuencode) + ((memq encoding '(x-uuencode x-uue)) (funcall mm-uu-decode-function (point-min) (point-max))) ((eq encoding 'x-binhex) (funcall mm-uu-binhex-decode-function (point-min) (point-max))) @@ -178,7 +168,7 @@ If no encoding was done, nil is returned." (message "Error while decoding: %s" error) nil)) (when (and - (memq encoding '(base64 x-uuencode x-binhex)) + (memq encoding '(base64 x-uuencode x-uue x-binhex)) (equal type "text/plain")) (goto-char (point-min)) (while (search-forward "\r\n" nil t) @@ -187,7 +177,10 @@ If no encoding was done, nil is returned." (defun mm-decode-body (charset &optional encoding type) "Decode the current article that has been encoded with ENCODING. The characters in CHARSET should then be decoded." - (setq charset (or charset mail-parse-charset)) + (if (stringp charset) + (setq charset (intern (downcase charset)))) + (if (or (not charset) (memq charset mail-parse-ignored-charsets)) + (setq charset mail-parse-charset)) (save-excursion (when encoding (mm-decode-content-transfer-encoding encoding type)) @@ -198,20 +191,23 @@ The characters in CHARSET should then be decoded." ;; buffer-file-coding-system ;;Article buffer is nil coding system ;;in XEmacs - enable-multibyte-characters + (mm-multibyte-p) (or (not (eq mule-charset 'ascii)) (setq mule-charset mail-parse-charset))) (mm-decode-coding-region (point-min) (point-max) mule-charset)))))) (defun mm-decode-string (string charset) "Decode STRING with CHARSET." - (setq charset (or charset mail-parse-charset)) + (if (stringp charset) + (setq charset (intern (downcase charset)))) + (if (or (not charset) (memq charset mail-parse-ignored-charsets)) + (setq charset mail-parse-charset)) (or (when (featurep 'mule) (let (mule-charset) (when (and charset (setq mule-charset (mm-charset-to-coding-system charset)) - enable-multibyte-characters + (mm-multibyte-p) (or (not (eq mule-charset 'ascii)) (setq mule-charset mail-parse-charset))) (mm-decode-coding-string string mule-charset))))