* gnus.el: Add autoloads for `gnus-summary-digest-post-forward' and
[elisp/gnus.git-] / lisp / rfc2047.el
index eb385d6..8214e20 100644 (file)
@@ -1,5 +1,5 @@
 ;;; rfc2047.el --- Functions for encoding and decoding rfc2047 messages
-;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
@@ -73,6 +73,8 @@ The values can be:
     (iso-2022-jp . B)
     (iso-2022-kr . B)
     (gb2312 . B)
+    (big5 . B)
+    (cn-big5 . B)
     (cn-gb . B)
     (cn-gb-2312 . B)
     (euc-kr . B)
@@ -88,7 +90,7 @@ Valid encodings are nil, `Q' and `B'.")
   "Alist of RFC2047 encodings to encoding functions.")
 
 (defvar rfc2047-q-encoding-alist
-  '(("\\(Resent-\\)?\\(From\\|Cc\\|To\\|Bcc\\|Reply-To\\|Sender\\):" 
+  '(("\\(Resent-\\)?\\(From\\|Cc\\|To\\|Bcc\\|Reply-To\\|Sender\\):"
      . "-A-Za-z0-9!*+/" )
     ;; = (\075), _ (\137), ? (\077) are used in the encoded word.
     ;; Avoid using 8bit characters. Some versions of Emacs has bug!
@@ -156,11 +158,15 @@ Should be called narrowed to the head of the message."
                  (mm-encode-coding-region (point-min) (point-max)
                                           mail-parse-charset)))
             ((null method)
-             (and (delq 'ascii 
-                        (mm-find-charset-region (point-min) 
+             (and (delq 'ascii
+                        (mm-find-charset-region (point-min)
                                                 (point-max)))
-                  (if (y-or-n-p 
-                       "Some texts are not encoded. Encode them anyway?")
+                  (if (or (message-options-get
+                           'rfc2047-encode-message-header-encode-any)
+                          (message-options-set
+                           'rfc2047-encode-message-header-encode-any
+                           (y-or-n-p
+                            "Some texts are not encoded. Encode anyway?")))
                       (rfc2047-encode-region (point-min) (point-max))
                     (error "Cannot send unencoded text."))))
             ((mm-coding-system-p method)
@@ -192,7 +198,7 @@ The buffer may be narrowed."
     ;; Anything except most CTLs, WSP
     (setq word-chars "\010\012\014\041-\177"))
   (let (mail-parse-mule-charset
-       words point current 
+       words point current
        result word)
     (save-restriction
       (narrow-to-region b e)
@@ -273,6 +279,7 @@ The buffer may be narrowed."
 (defun rfc2047-encode (b e charset)
   "Encode the word in the region B to E with CHARSET."
   (let* ((mime-charset (mm-mime-charset charset))
+        (cs (mm-charset-to-coding-system mime-charset))
         (encoding (or (cdr (assq mime-charset
                                  rfc2047-charset-encoding-alist))
                       'B))
@@ -290,8 +297,8 @@ The buffer may be narrowed."
          (unless (eobp)
            (insert "\n"))))
       (if (and (mm-multibyte-p)
-              (mm-coding-system-p mime-charset))
-         (mm-encode-coding-region (point-min) (point-max) mime-charset))
+              (mm-coding-system-p cs))
+         (mm-encode-coding-region (point-min) (point-max) cs))
       (funcall (cdr (assq encoding rfc2047-encoding-function-alist))
               (point-min) (point-max))
       (goto-char (point-min))
@@ -319,7 +326,9 @@ The buffer may be narrowed."
          (goto-char (or break qword-break))
          (setq break nil
                qword-break nil)
-         (insert "\n ")
+         (if (looking-at " \t")
+             (insert "\n")
+           (insert "\n "))
          (setq bol (1- (point)))
          ;; Don't break before the first non-LWSP characters.
          (skip-chars-forward " \t")
@@ -351,7 +360,9 @@ The buffer may be narrowed."
        (goto-char (or break qword-break))
        (setq break nil
              qword-break nil)
-       (insert "\n ")
+         (if (looking-at " \t")
+             (insert "\n")
+           (insert "\n "))
        (setq bol (1- (point)))
        ;; Don't break before the first non-LWSP characters.
        (skip-chars-forward " \t")
@@ -402,7 +413,9 @@ The buffer may be narrowed."
                   (gnus-point-at-bol))))
        (while alist
          (when (looking-at (caar alist))
-           (quoted-printable-encode-region b e nil (cdar alist))
+           (mm-with-unibyte-current-buffer-mule4
+             (quoted-printable-encode-region 
+              (point-min) (point-max) nil (cdar alist)))
            (subst-char-in-region (point-min) (point-max) ?  ?_)
            (setq alist nil))
          (pop alist))
@@ -523,7 +536,7 @@ If your Emacs implementation can't decode CHARSET, return nil."
        (mm-decode-coding-string
         (cond
          ((equal "B" encoding)
-          (base64-decode-string 
+          (base64-decode-string
            (rfc2047-pad-base64 string)))
          ((equal "Q" encoding)
           (quoted-printable-decode-string