* spam-report.el (spam-report-gmane-ham): Renamed from
[gnus] / lisp / mm-bodies.el
index bc6f4f0..102d5e9 100644 (file)
@@ -1,7 +1,7 @@
 ;;; mm-bodies.el --- Functions for decoding MIME things
 
-;; Copyright (C) 1998, 1999, 2000, 2001, 2003
-;;        Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
 
 ;; 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.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Commentary:
 
 ;;; Code:
 
-(eval-and-compile
-  (or (fboundp  'base64-decode-region)
-      (require 'base64)))
-
 (eval-when-compile
   (defvar mm-uu-decode-function)
   (defvar mm-uu-binhex-decode-function))
 (require 'rfc2047)
 (require 'mm-encode)
 
-;; 8bit treatment gets any char except: 0x32 - 0x7f, CR, LF, TAB, BEL,
+;; 8bit treatment gets any char except: 0x32 - 0x7f, LF, TAB, BEL,
 ;; BS, vertical TAB, form feed, and ^_
-(defvar mm-7bit-chars "\x20-\x7f\r\n\t\x7\x8\xb\xc\x1f")
+;;
+;; Note that CR is *not* included, as that would allow a non-paired CR
+;; in the body contrary to RFC 2822:
+;;
+;;   - CR and LF MUST only occur together as CRLF; they MUST NOT
+;;     appear independently in the body.
+
+(defvar mm-7bit-chars "\x20-\x7f\n\t\x7\x8\xb\xc\x1f")
 
 (defcustom mm-body-charset-encoding-alist
   '((iso-2022-jp . 7bit)
@@ -49,6 +52,8 @@
     ;; known to break servers.
     ;; Note: UTF-16 variants are invalid for text parts [RFC 2781],
     ;; so this can't happen :-/.
+    ;; PPS: Yes, it can happen if the user specifies UTF-16 in the MML
+    ;; markup. - jh.
     (utf-16 . base64)
     (utf-16be . base64)
     (utf-16le . base64))
@@ -88,7 +93,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)
@@ -130,8 +136,10 @@ If no encoding was done, nil is returned."
        (longp (mm-long-lines-p 1000)))
     (require 'message)
     (cond
-     ((and (not mm-use-ultra-safe-encoding)
-          (not longp)
+     ((and (not longp)
+          (not (and mm-use-ultra-safe-encoding
+                    (or (save-excursion (re-search-forward " $" nil t))
+                        (save-excursion (re-search-forward "^From " nil t)))))
           (eq bits '7bit))
       bits)
      ((and (not mm-use-ultra-safe-encoding)
@@ -218,7 +226,7 @@ If TYPE is `text/plain' CRLF->LF translation may occur."
         nil))
     (when (and
           (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)))))
@@ -286,4 +294,5 @@ 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