;;; mm-bodies.el --- Functions for decoding MIME things
-;; Copyright (C) 1998 Free Software Foundation, Inc.
+;; Copyright (C) 1998,99 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
(save-excursion
(goto-char (point-min))
(if (re-search-forward "[^\x0-\x7f]" nil t)
- mm-default-charset
+ (or mail-parse-charset
+ (mm-read-charset "Charset used in the article: "))
;; The logic in `mml-generate-mime-1' confirms that it's OK
;; to return nil here.
nil))
charsets)
;; We encode.
(t
- (let ((mime-charset
- (mm-mime-charset (car charsets) (point-min) (point-max)))
+ (let ((mime-charset (mm-mime-charset (car charsets)))
start)
(when (or t
;; We always decode.
'7bit))
(t
;; Mule version
- (if (and (null (delq 'ascii (find-charset-region (point-min) (point-max))))
+ (if (and (null (delq 'ascii
+ (mm-find-charset-region (point-min) (point-max))))
;;!!!The following is necessary because the function
;;!!!above seems to return the wrong result under
;;!!!Emacs 20.3. Sometimes.
;;;
(defun mm-decode-content-transfer-encoding (encoding &optional type)
- (cond
- ((eq encoding 'quoted-printable)
- (quoted-printable-decode-region (point-min) (point-max)))
- ((eq encoding 'base64)
- (prog1
- (condition-case ()
- (base64-decode-region (point-min) (point-max))
- (error nil))
- (when (equal type "text/plain")
- (goto-char (point-min))
- (while (search-forward "\r\n" nil t)
- (replace-match "\n" t t)))))
- ((memq encoding '(7bit 8bit binary))
- )
- ((null encoding)
- )
- ((eq encoding 'x-uuencode)
- (condition-case ()
- (uudecode-decode-region (point-min) (point-max))
- (error nil)))
- ((eq encoding 'x-binhex)
- (condition-case ()
- (binhex-decode-region (point-min) (point-max))
- (error nil)))
- ((functionp encoding)
- (condition-case ()
- (funcall encoding (point-min) (point-max))
- (error nil)))
- (t
- (message "Unknown encoding %s; defaulting to 8bit" encoding))))
+ (prog1
+ (condition-case error
+ (cond
+ ((eq encoding 'quoted-printable)
+ (quoted-printable-decode-region (point-min) (point-max)))
+ ((eq encoding 'base64)
+ (base64-decode-region (point-min) (point-max)))
+ ((memq encoding '(7bit 8bit binary))
+ )
+ ((null encoding)
+ )
+ ((eq encoding 'x-uuencode)
+ (funcall mm-uu-decode-function (point-min) (point-max)))
+ ((eq encoding 'x-binhex)
+ (funcall mm-uu-binhex-decode-function (point-min) (point-max)))
+ ((functionp encoding)
+ (funcall encoding (point-min) (point-max)))
+ (t
+ (message "Unknown encoding %s; defaulting to 8bit" encoding)))
+ (error
+ (message "Error while decoding: %s" error)
+ nil))
+ (when (and
+ (memq encoding '(base64 x-uuencode x-binhex))
+ (equal type "text/plain"))
+ (goto-char (point-min))
+ (while (search-forward "\r\n" nil t)
+ (replace-match "\n" t t)))))
(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 rfc2047-default-charset))
+ (setq charset (or charset mail-parse-charset))
(save-excursion
(when encoding
(mm-decode-content-transfer-encoding encoding type))
(let (mule-charset)
(when (and charset
(setq mule-charset (mm-charset-to-coding-system charset))
- ;; buffer-file-coding-system
+ ;; buffer-file-coding-system
;Article buffer is nil coding system
;in XEmacs
enable-multibyte-characters
(or (not (eq mule-charset 'ascii))
- (setq mule-charset rfc2047-default-charset)))
+ (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 rfc2047-default-charset))
- (when (featurep 'mule)
- (let (mule-charset)
- (when (and charset
- (setq mule-charset (mm-charset-to-coding-system charset))
- enable-multibyte-characters
- (or (not (eq mule-charset 'ascii))
- (setq mule-charset rfc2047-default-charset)))
- (mm-decode-coding-string string mule-charset)))))
+ (setq charset (or 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
+ (or (not (eq mule-charset 'ascii))
+ (setq mule-charset mail-parse-charset)))
+ (mm-decode-coding-string string mule-charset))))
+ string))
(provide 'mm-bodies)