Header was modified.
[elisp/semi.git] / mime-edit.el
index 04721c4..15c1509 100644 (file)
@@ -7,7 +7,7 @@
 ;; Maintainer: MORIOKA Tomohiko <morioka@jaist.ac.jp>
 ;; Created: 1994/08/21 renamed from mime.el
 ;;     Renamed: 1997/2/21 from tm-edit.el
-;; Version: $Revision: 0.41 $
+;; Version: $Revision: 0.54 $
 ;; Keywords: MIME, multimedia, multilingual, mail, news
 
 ;; This file is part of SEMI (SEMI is Emacs MIME Interfaces).
 
 ;;; Code:
 
+(require 'emu)
 (require 'sendmail)
 (require 'mail-utils)
 (require 'mel)
-(require 'tl-list)
 (require 'mime-view)
 (require 'eword-encode)
 (require 'signature)
+(require 'alist)
 
 
 ;;; @ version
 ;;;
 
 (defconst mime-edit-RCS-ID
-  "$Id: mime-edit.el,v 0.41 1997-02-24 02:17:11 tmorioka Exp $")
+  "$Id: mime-edit.el,v 0.54 1997-03-03 17:31:19 morioka Exp $")
 
 (defconst mime-edit-version (get-version-string mime-edit-RCS-ID))
 
@@ -355,16 +356,42 @@ If encoding is nil, it is determined from its contents.")
 ;;; @@ about charset, encoding and transfer-level
 ;;;
 
-(defvar mime-edit-transfer-level 7
+(defvar mime-charset-type-list
+  '((us-ascii          7 nil)
+    (iso-8859-1                8 "quoted-printable")
+    (iso-8859-2                8 "quoted-printable")
+    (iso-8859-3                8 "quoted-printable")
+    (iso-8859-4                8 "quoted-printable")
+    (iso-8859-5                8 "quoted-printable")
+    (koi8-r            8 "quoted-printable")
+    (iso-8859-7                8 "quoted-printable")
+    (iso-8859-8                8 "quoted-printable")
+    (iso-8859-9                8 "quoted-printable")
+    (iso-2022-jp       7 "base64")
+    (iso-2022-kr       7 "base64")
+    (euc-kr            8 "base64")
+    (gb2312            8 "quoted-printable")
+    (big5              8 "base64")
+    (iso-2022-jp-2     7 "base64")
+    (iso-2022-int-1    7 "base64")
+    ))
+
+(defvar mime-transfer-level 7
   "*A number of network transfer level.  It should be bigger than 7.")
-(make-variable-buffer-local 'mime-edit-transfer-level)
+(make-variable-buffer-local 'mime-transfer-level)
+
+(defsubst mime-encoding-name (transfer-level &optional not-omit)
+  (cond ((> transfer-level 8) "binary")
+       ((= transfer-level 8) "8bit")
+       (not-omit "7bit")
+       ))
 
-(defvar mime-edit-transfer-level-string
-  (mime/encoding-name mime-edit-transfer-level 'not-omit)
+(defvar mime-transfer-level-string
+  (mime-encoding-name mime-transfer-level 'not-omit)
   "*A string formatted version of mime/defaul-transfer-level")
-(make-variable-buffer-local 'mime-edit-transfer-level-string)
+(make-variable-buffer-local 'mime-transfer-level-string)
 
-(defun mime-edit-make-charset-default-encoding-alist (transfer-level)
+(defun mime-make-charset-default-encoding-alist (transfer-level)
   (mapcar (function
           (lambda (charset-type)
             (let ((charset  (car charset-type))
@@ -372,13 +399,13 @@ If encoding is nil, it is determined from its contents.")
                   (encoding (nth 2 charset-type))
                   )
               (if (<= type transfer-level)
-                  (cons charset (mime/encoding-name type))
+                  (cons charset (mime-encoding-name type))
                 (cons charset encoding)
                 ))))
          mime-charset-type-list))
 
 (defvar mime-edit-charset-default-encoding-alist
-  (mime-edit-make-charset-default-encoding-alist mime-edit-transfer-level))
+  (mime-make-charset-default-encoding-alist mime-transfer-level))
 (make-variable-buffer-local 'mime-edit-charset-default-encoding-alist)
 
 ;;; @@ about message inserting
@@ -496,6 +523,7 @@ Tspecials means any character that matches with it in header must be quoted.")
 (defconst mime-edit-mime-map (make-sparse-keymap)
   "Keymap for MIME commands.")
 
+
 ;;; @ keymap and menu
 ;;;
 
@@ -552,7 +580,7 @@ Tspecials means any character that matches with it in header must be quoted.")
               mime-edit-minor-mime-map mime-prefix mime-edit-mime-map)
             ))
        (add-minor-mode 'mime-edit-mode-flag
-                      '((" MIME-Edit "  mime-edit-transfer-level-string))
+                      '((" MIME-Edit "  mime-transfer-level-string))
                       mime-edit-minor-mime-map
                       nil
                       'mime-edit-toggle-mode)
@@ -560,7 +588,7 @@ Tspecials means any character that matches with it in header must be quoted.")
       (t
        (set-alist 'minor-mode-alist
                  'mime-edit-mode-flag
-                 '((" MIME-Edit "  mime-edit-transfer-level-string))))
+                 '((" MIME-Edit "  mime-transfer-level-string))))
       )
 
 (defconst mime-edit-menu-title "MIME-Edit")
@@ -756,7 +784,7 @@ User customizable variables (not documented all of them):
     Hide a non-textual body message encoded in base64 after insertion
     if non-nil.
 
- mime-edit-transfer-level
+ mime-transfer-level
     A number of network transfer level.  It should be bigger than 7.
     If you are in 8bit-through environment, please set 8.
 
@@ -796,8 +824,8 @@ User customizable variables (not documented all of them):
 
     ;; Set transfer level into mode line
     ;;
-    (setq mime-edit-transfer-level-string
-         (mime/encoding-name mime-edit-transfer-level 'not-omit))
+    (setq mime-transfer-level-string
+         (mime-encoding-name mime-transfer-level 'not-omit))
     (force-mode-line-update)
     
     ;; Define menu.  Menus for other emacs implementations are
@@ -1415,7 +1443,7 @@ Parameter must be '(PROMPT CHOICE1 (CHOISE2 ...))."
 
 (defun mime-edit-translate-header ()
   "Encode the message header into network representation."
-  (eword-encode-message-header 'code-conversion)
+  (eword-encode-header 'code-conversion)
   (run-hooks 'mime-edit-translate-header-hook)
   )
 
@@ -1695,14 +1723,25 @@ Content-Transfer-Encoding: 7bit
          ))
       )))
 
+(defsubst replace-space-with-underline (str)
+  (mapconcat (function
+             (lambda (arg)
+               (char-to-string
+                (if (eq arg ?\ )
+                    ?_
+                  arg)))) str "")
+  )
+
+(defun mime-edit-make-boundary ()
+  (concat mime-multipart-boundary "_"
+         (replace-space-with-underline (current-time-string))
+         ))
+
 (defun mime-edit-translate-body ()
   "Encode the tagged MIME body in current buffer in MIME compliant message."
   (interactive)
   (save-excursion
-    (let ((boundary
-          (concat mime-multipart-boundary "_"
-                  (replace-space-with-underline (current-time-string))
-                  ))
+    (let ((boundary (mime-edit-make-boundary))
          (i 1)
          ret)
       (while (mime-edit-process-multipart-1
@@ -1769,16 +1808,14 @@ Content-Transfer-Encoding: 7bit
          (insert "Content-Type: " contype "\n")
          (if encoding
              (insert "Content-Transfer-Encoding: " encoding "\n"))
-         (eword-encode-message-header)
+         (eword-encode-header)
          )
        t)))
 
 (defun mime-edit-translate-region (beg end &optional boundary multipart)
-  (if (null boundary)
-      (setq boundary
-           (concat mime-multipart-boundary "_"
-                   (replace-space-with-underline (current-time-string))))
-    )
+  (or boundary
+      (setq boundary (mime-edit-make-boundary))
+      )
   (save-excursion
     (save-restriction
       (narrow-to-region beg end)
@@ -1959,7 +1996,7 @@ and insert data encoded as ENCODING. [mime-edit.el]"
 
 (defun mime-edit-insert-message (&optional message)
   (interactive)
-  (let ((inserter (assoc-value major-mode mime-edit-message-inserter-alist)))
+  (let ((inserter (cdr (assq major-mode mime-edit-message-inserter-alist))))
     (if (and inserter (fboundp inserter))
        (progn
          (mime-edit-insert-tag "message" "rfc822")
@@ -1970,7 +2007,7 @@ and insert data encoded as ENCODING. [mime-edit.el]"
 
 (defun mime-edit-insert-mail (&optional message)
   (interactive)
-  (let ((inserter (assoc-value major-mode mime-edit-mail-inserter-alist)))
+  (let ((inserter (cdr (assq major-mode mime-edit-mail-inserter-alist))))
     (if (and inserter (fboundp inserter))
        (progn
          (mime-edit-insert-tag "message" "rfc822")
@@ -2089,18 +2126,17 @@ and insert data encoded as ENCODING. [mime-edit.el]"
 Optional TRANSFER-LEVEL is a number of transfer-level, 7 or 8."
   (interactive)
   (if (numberp transfer-level)
-      (setq mime-edit-transfer-level transfer-level)
-    (if (< mime-edit-transfer-level 8)
-       (setq mime-edit-transfer-level 8)
-      (setq mime-edit-transfer-level 7)
+      (setq mime-transfer-level transfer-level)
+    (if (< mime-transfer-level 8)
+       (setq mime-transfer-level 8)
+      (setq mime-transfer-level 7)
       ))
   (setq mime-edit-charset-default-encoding-alist
-       (mime-edit-make-charset-default-encoding-alist
-        mime-edit-transfer-level))
+       (mime-make-charset-default-encoding-alist mime-transfer-level))
   (message (format "Current transfer-level is %d bit"
-                  mime-edit-transfer-level))
-  (setq mime-edit-transfer-level-string
-       (mime/encoding-name mime-edit-transfer-level 'not-omit))
+                  mime-transfer-level))
+  (setq mime-transfer-level-string
+       (mime-encoding-name mime-transfer-level 'not-omit))
   (force-mode-line-update)
   )
 
@@ -2439,7 +2475,7 @@ Content-Type: message/partial; id=%s; number=%d; total=%d\n%s\n"
              (delete-region (point-min)(point-max))
              )
             ((string= type "multipart")
-             (let* ((boundary (assoc-value "boundary" params))
+             (let* ((boundary (cdr (assoc "boundary" params)))
                     (boundary-pat
                      (concat "\n--" (regexp-quote boundary) "[ \t]*\n"))
                     )