X-Git-Url: https://cgit.sxemacs.org/?p=gnus;a=blobdiff_plain;f=lisp%2Fmm-bodies.el;h=9952f410f0dc2aeee607e6117730ff2464d26933;hp=9847da95643f5eeda10f4d1dc14c0b56ccfd613c;hb=2a000c5fd3c6662f4f1487cac7a965c84502783c;hpb=8b7fbbbeb80d87ab02f24dce6bc97765c62dfda2 diff --git a/lisp/mm-bodies.el b/lisp/mm-bodies.el index 9847da956..9952f410f 100644 --- a/lisp/mm-bodies.el +++ b/lisp/mm-bodies.el @@ -1,39 +1,40 @@ ;;; mm-bodies.el --- Functions for decoding MIME things -;; Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004 -;; Free Software Foundation, Inc. +;; Copyright (C) 1998-2011 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; MORIOKA Tomohiko ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify +;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 2, or (at your option) -;; any later version. +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: ;;; Code: -(eval-when-compile - (defvar mm-uu-decode-function) - (defvar mm-uu-binhex-decode-function)) +;; For Emacs <22.2 and XEmacs. +(eval-and-compile + (unless (fboundp 'declare-function) (defmacro declare-function (&rest r)))) (require 'mm-util) (require 'rfc2047) (require 'mm-encode) +(defvar mm-uu-yenc-decode-function) +(defvar mm-uu-decode-function) +(defvar mm-uu-binhex-decode-function) + ;; 8bit treatment gets any char except: 0x32 - 0x7f, LF, TAB, BEL, ;; BS, vertical TAB, form feed, and ^_ ;; @@ -67,6 +68,9 @@ Valid encodings are `7bit', `8bit', `quoted-printable' and `base64'." (const base64)))) :group 'mime) +(autoload 'message-options-get "message") +(declare-function message-options-set "message" (symbol value)) + (defun mm-encode-body (&optional charset) "Encode a body. Should be called narrowed to the body that is to be encoded. @@ -93,7 +97,8 @@ If no encoding was done, nil is returned." (save-excursion (if charset (progn - (mm-encode-coding-region (point-min) (point-max) charset) + (mm-encode-coding-region (point-min) (point-max) + (mm-charset-to-coding-system charset)) charset) (goto-char (point-min)) (let ((charsets (mm-find-mime-charset-region (point-min) (point-max) @@ -170,8 +175,6 @@ If no encoding was done, nil is returned." ;;; Functions for decoding ;;; -(eval-when-compile (defvar mm-uu-yenc-decode-function)) - (defun mm-decode-content-transfer-encoding (encoding &optional type) "Decodes buffer encoded with ENCODING, returning success status. If TYPE is `text/plain' CRLF->LF translation may occur." @@ -197,10 +200,7 @@ If TYPE is `text/plain' CRLF->LF translation may occur." (when (re-search-backward "^[A-Za-z0-9+/]+=*[\t ]*$" nil t) (forward-line)) (point)))) - ((memq encoding '(7bit 8bit binary)) - ;; Do nothing. - t) - ((null encoding) + ((memq encoding '(nil 7bit 8bit binary)) ;; Do nothing. t) ((memq encoding '(x-uuencode x-uue)) @@ -224,8 +224,9 @@ If TYPE is `text/plain' CRLF->LF translation may occur." (message "Error while decoding: %s" error) nil)) (when (and + type (memq encoding '(base64 x-uuencode x-uue x-binhex x-yenc)) - (equal type "text/plain")) + (string-match "\\`text/" type)) (goto-char (point-min)) (while (search-forward "\r\n" nil t) (replace-match "\n" t t))))) @@ -245,8 +246,12 @@ decoding. If it is nil, default to `mail-parse-charset'." (save-excursion (when encoding (mm-decode-content-transfer-encoding encoding type)) - (when (featurep 'mule) ; Fixme: Wrong test for unibyte session. - (let ((coding-system (mm-charset-to-coding-system charset))) + (when (and (featurep 'mule) ;; Fixme: Wrong test for unibyte session. + (not (eq charset 'gnus-decoded))) + (let ((coding-system (mm-charset-to-coding-system + ;; Allow overwrite using + ;; `mm-charset-override-alist'. + charset nil t))) (if (and (not coding-system) (listp mail-parse-ignored-charsets) (memq 'gnus-unknown mail-parse-ignored-charsets)) @@ -258,8 +263,7 @@ decoding. If it is nil, default to `mail-parse-charset'." ;;in XEmacs (mm-multibyte-p) (or (not (eq coding-system 'ascii)) - (setq coding-system mail-parse-charset)) - (not (eq coding-system 'gnus-decoded))) + (setq coding-system mail-parse-charset))) (mm-decode-coding-region (point-min) (point-max) coding-system)) (setq buffer-file-coding-system @@ -278,7 +282,11 @@ decoding. If it is nil, default to `mail-parse-charset'." (setq charset mail-parse-charset)) (or (when (featurep 'mule) - (let ((coding-system (mm-charset-to-coding-system charset))) + (let ((coding-system (mm-charset-to-coding-system + charset + ;; Allow overwrite using + ;; `mm-charset-override-alist'. + nil t))) (if (and (not coding-system) (listp mail-parse-ignored-charsets) (memq 'gnus-unknown mail-parse-ignored-charsets)) @@ -293,5 +301,4 @@ decoding. If it is nil, default to `mail-parse-charset'." (provide 'mm-bodies) -;;; arch-tag: 41104bb6-4443-4ca9-8d5c-ff87ecf27d8d ;;; mm-bodies.el ends here