tm 7.71.
authormorioka <morioka>
Mon, 9 Mar 1998 19:32:41 +0000 (19:32 +0000)
committermorioka <morioka>
Mon, 9 Mar 1998 19:32:41 +0000 (19:32 +0000)
ChangeLog
Makefile
signature.el
tm-def.el
tm-edit.el
tm-ew-e.el

index 5c6f868..778018b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,99 @@
+Thu Jul 11 15:26:54 1996  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * tl: Version 7.36 was released.
+       * tm: Version 7.71 was released.
+
+       * tm-def.el: Function `mime-charset-encode-region' was abolished.
+
+Thu Jul 11 15:25:18 1996  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * tm-def.el: Function `mime-charset-encode-string' was abolished.
+
+Thu Jul 11 15:23:13 1996  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * tm-def.el: Function `mime/find-charset-region' was abolished.
+
+       * tm-edit.el: New implementation; based on SEMI mime-edit 0.36.
+
+       (mime-editor/define-charset): Argument `charset' was changed to
+       symbol.
+
+       (mime-editor/normalize-body): charset was changed to symbol; Use
+       function `encode-mime-charset-region' instead of
+       `mime-charset-encode-region'.
+
+       (mime-editor/make-charset-default-encoding-alist): New function.
+
+       (mime-editor/charset-default-encoding-alist): Use function
+       `mime-editor/make-charset-default-encoding-alist'.
+
+       (mime-editor/toggle-transfer-level): Use function
+       `mime-editor/make-charset-default-encoding-alist'.
+
+       (mime-editor/choose-charset): Use function
+       `detect-mime-charset-region' instead of `mime/find-charset-region';
+       Changed to return symbol.
+
+Wed Jul 10 14:21:58 1996  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * tm-def.el (mime/find-charset-region): fixed.
+
+Wed Jul 10 13:45:06 1996  Shuhei KOBAYASHI  <shuhei-k@jaist.ac.jp>
+
+       * signature.el (insert-signature): Meaning of
+       `signature-delete-blank-lines-at-eof' had been reversed by
+       mistake.
+
+Wed Jul 10 13:04:08 1996  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * tm-def.el: Variable `mime/lc-charset-alist' and
+       `mime/unknown-charset' were abolished.
+
+       Function `mime/find-charset' was abolished.
+       
+       (mime/find-charset-region): Use function
+       `detect-mime-charset-region' instead of `mime/find-charset'.
+
+Wed Jul 10 12:52:46 1996  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * tm-ew-e.el (tm-eword::space-process): Use `eq' to compare
+       charset.
+       (tm-eword::encoded-word-length): Use `string-equal' to compare
+       encoding.
+
+Wed Jul 10 12:50:12 1996  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * tm-ew-e.el (tm-eword::encode-encoded-text): Argument `charset'
+       was changed to symbol.
+       (tm-eword::find-charset-rule): Returned charset was changed to
+       symbol too.
+       (tm-eword::encoded-word-length): Use function
+       `encode-mime-charset-string' instead of
+       `mime-charset-encode-string'; `charset' slot of `rword' was
+       changed to symbol.
+
+Wed Jul 10 12:33:14 1996  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * tm-ew-e.el (mime-eword/charset-encoding-alist): charset is
+       changed to symbol.
+       (tm-eword::find-charset-rule): modified for news
+       `mime-eword/charset-encoding-alist' format.
+
+       * tm-ew-e.el (tm-eword::find-charset-rule): Use function
+       `charsets-to-mime-charset' instead of `mime/find-charset'.
+
+Wed Jul 10 11:28:34 1996  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * tm-def.el: Variable `mime/charset-type-list' was abolished.
+
+       * tm-def.el (mime/make-charset-default-encoding-alist): Use
+       variable `mime-charset-type-list' instead of
+       `mime/charset-type-list'.
+
+       * tm-def.el (mime-charset-type-list): New variable.
+       (mime/charset-type-list): Use `mime-charset-type-list'.
+
+\f
 Tue Jul  9 13:30:32 1996  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
 
        * tl: Version 7.31.1 was released.
index 7f0800c..9856810 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -48,7 +48,7 @@ TL_FILES = tl/README.en tl/Makefile tl/mk-tl tl/tl-els \
 
 FILES  = $(TM_FILES) $(TM_MUA_FILES) $(MEL_FILES) $(TL_FILES)
 
-TARFILE = tm7.70.tar.gz
+TARFILE = tm7.71.tar.gz
 
 elc:
        $(EMACS) $(FLAGS) -l inst-tm -f compile-tm
index 08220bc..a3850a7 100644 (file)
@@ -14,7 +14,7 @@
 ;;; Maintainer: KOBAYASHI Shuhei <shuhei-k@jaist.ac.jp>
 ;;; Created: 1994/7/11
 ;;; Version:
-;;;    $Id: signature.el,v 7.10 1996/05/28 03:04:34 morioka Exp $
+;;;    $Id: signature.el,v 7.11 1996/07/10 13:45:06 shuhei-k Exp $
 ;;; Keywords: mail, news, signature
 ;;;
 ;;; This file is part of tm (Tools for MIME).
@@ -41,7 +41,7 @@
 ;;;
 
 (defvar signature-insert-at-eof nil
-  "*Insert signature at the end of file if non-nil.")
+  "*If non-nil, insert signature at the end of file.")
 
 (defvar signature-delete-blank-lines-at-eof nil
   "*If non-nil, signature-insert-at-eof deletes blank lines at the end
@@ -127,7 +127,7 @@ of file.")
 
 (defun insert-signature (&optional arg)
   "Insert the file named by signature-file-name.
-It is inserted at the end of file if signature-insert-at-eof in non-nil,
+It is inserted at the end of file if signature-insert-at-eof is non-nil,
 and otherwise at the current point.  A prefix argument enables user to
 specify a file named <signature-file-name>-DISTRIBUTION interactively."
   (interactive "P")
@@ -145,7 +145,7 @@ specify a file named <signature-file-name>-DISTRIBUTION interactively."
         (progn
           (goto-char (point-max))
           (or (bolp) (insert "\n"))
-          (or signature-delete-blank-lines-at-eof (delete-blank-lines))
+          (if signature-delete-blank-lines-at-eof (delete-blank-lines))
           ))
     (run-hooks 'signature-insert-hook)
     (insert-file-contents signature-file-name)
index d074951..f2c373a 100644 (file)
--- a/tm-def.el
+++ b/tm-def.el
@@ -6,7 +6,7 @@
 ;;;
 ;;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
 ;;; Version:
-;;;    $Id: tm-def.el,v 7.47 1996/07/04 16:57:03 morioka Exp $
+;;;    $Id: tm-def.el,v 7.55 1996/07/11 15:26:54 morioka Exp $
 ;;; Keywords: mail, news, MIME, multimedia, definition
 ;;;
 ;;; This file is part of tm (Tools for MIME).
 (defconst mime/temp-buffer-name " *MIME-temp*")
 
 
-;;; @ leading-character and charset
-;;;
-
-(defvar mime/lc-charset-alist
-  (foldr (function
-         (lambda (a cell)
-           (or (catch 'tag
-                 (cons (cons (foldr (function
-                                     (lambda (a sym)
-                                       (if (boundp sym)
-                                           (cons (symbol-value sym) a)
-                                         (throw 'tag nil)
-                                         )))
-                                    nil
-                                    (car cell))
-                             (cdr cell))
-                       a))
-               a)
-           ))
-        nil
-        '(((charset-ascii)   . "US-ASCII")
-          ((charset-ascii
-            charset-latin-1) . "ISO-8859-1")
-          ((charset-ascii
-            charset-latin-2) . "ISO-8859-2")
-          ((charset-ascii
-            charset-latin-3) . "ISO-8859-3")
-          ((charset-ascii
-            charset-latin-4) . "ISO-8859-4")
-;;;        ((charset-ascii
-;;;         charset-cyrillic) . "ISO-8859-5")
-          ((charset-ascii
-            charset-cyrillic) . "KOI8-R")
-          ((charset-ascii
-            charset-arabic)   . "ISO-8859-6")
-          ((charset-ascii
-            charset-greek)    . "ISO-8859-7")
-          ((charset-ascii
-            charset-hebrew)   . "ISO-8859-8")
-          ((charset-ascii
-            charset-latin-5)  . "ISO-8859-9")
-          ((charset-ascii
-            charset-jisx0208) . "ISO-2022-JP")
-          ((charset-ascii
-            charset-ksc5601)  . "EUC-KR")
-          ((charset-ascii
-            charset-big5-1
-            charset-big5-2)   . "BIG5")
-          ((charset-ascii
-            charset-gb2312
-            charset-jisx0208
-            charset-ksc5601
-            charset-jisx0212
-            charset-latin-1
-            charset-greek)    . "ISO-2022-JP-2")
-          ((charset-ascii
-            charset-gb2312
-            charset-jisx0208
-            charset-ksc5601
-            charset-jisx0212
-            charset-cns11643-1
-            charset-cns11643-2
-            charset-latin-1
-            charset-greek)    . "ISO-2022-INT-1")
-          )))
-
-(defvar mime/unknown-charset "ISO-2022-INT-1")
-
-
 ;;; @ charset and encoding
 ;;;
 
-(defun mime/find-charset (lcl)
-  (if lcl
-      (or (cdr (some-element
-               (function
-                (lambda (elt)
-                  (subsetp lcl (car elt))
-                  ))
-               mime/lc-charset-alist)
-              )
-         mime/unknown-charset)
-    ))
-
-(defun mime/find-charset-region (beg end)
-  (mime/find-charset (cons charset-ascii (find-charset-region beg end)))
-  )
-
-(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")
-    ("BIG5"           8 "base64")
-    ("ISO-2022-JP-2"  7 "base64")
-    ("ISO-2022-INT-1" 7 "base64")
+(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")
+    (big5              8 "base64")
+    (iso-2022-jp-2     7 "base64")
+    (iso-2022-int-1    7 "base64")
     ))
 
 (defun mime/encoding-name (transfer-level &optional not-omit)
 (defun mime/make-charset-default-encoding-alist (transfer-level)
   (mapcar (function
           (lambda (charset-type)
-            (let ((charset  (car charset-type))
+            (let ((charset  (upcase (symbol-name (car charset-type))))
                   (type     (nth 1 charset-type))
                   (encoding (nth 2 charset-type))
                   )
                   (cons charset (mime/encoding-name type))
                 (cons charset encoding)
                 ))))
-         mime/charset-type-list))
+         mime-charset-type-list))
 
 
 ;;; @ coding-system
 
 (defvar mime/default-coding-system *ctext*)
 
-(defun mime-charset-encode-string (str charset)
-  (let ((cs (assoc charset mime/charset-coding-system-alist)))
-    (if cs
-       (character-encode-string str (cdr cs))
-      )))
-
 (defun mime-charset-decode-string (str charset)
   (let ((cs (assoc charset mime/charset-coding-system-alist)))
     (if cs
        (character-decode-string str (cdr cs))
       )))
 
-(defun mime-charset-encode-region (beg end charset &optional encoding)
-  (let ((ct
-        (if (stringp charset)
-            (cdr (assoc (upcase charset) mime/charset-coding-system-alist))
-          mime/default-coding-system)))
-    (if ct
-       (character-encode-region beg end ct)
-      )))
-
 (defun mime-charset-decode-region (beg end charset &optional encoding)
   (let ((ct
         (if (stringp charset)
index 8e7334f..4bd613c 100644 (file)
@@ -8,7 +8,7 @@
 ;;;         MORIOKA Tomohiko <morioka@jaist.ac.jp>
 ;;; Maintainer: MORIOKA Tomohiko <morioka@jaist.ac.jp>
 ;;; Created: 1994/08/21 renamed from mime.el
-;;; Version: $Revision: 7.70 $
+;;; Version: $Revision: 7.71 $
 ;;; Keywords: mail, news, MIME, multimedia, multilingual
 ;;;
 ;;; This file is part of tm (Tools for MIME).
 ;;;
 
 (defconst mime-editor/RCS-ID
-  "$Id: tm-edit.el,v 7.70 1996/07/09 13:30:32 morioka Exp $")
+  "$Id: tm-edit.el,v 7.71 1996/07/11 14:54:06 morioka Exp $")
 
 (defconst mime-editor/version (get-version-string mime-editor/RCS-ID))
 
+(defconst mime-editor/version-name
+  (concat "tm-edit " mime-editor/version))
+
 
 ;;; @ variables
 ;;;
@@ -362,8 +365,21 @@ If encoding is nil, it is determined from its contents.")
   "*A string formatted version of mime/defaul-transfer-level")
 (make-variable-buffer-local 'mime-editor/transfer-level-string)
 
+(defun mime-editor/make-charset-default-encoding-alist (transfer-level)
+  (mapcar (function
+          (lambda (charset-type)
+            (let ((charset  (car charset-type))
+                  (type     (nth 1 charset-type))
+                  (encoding (nth 2 charset-type))
+                  )
+              (if (<= type transfer-level)
+                  (cons charset (mime/encoding-name type))
+                (cons charset encoding)
+                ))))
+         mime-charset-type-list))
+
 (defvar mime-editor/charset-default-encoding-alist
-  (mime/make-charset-default-encoding-alist mime-editor/transfer-level))
+  (mime-editor/make-charset-default-encoding-alist mime-editor/transfer-level))
 (make-variable-buffer-local 'mime-editor/charset-default-encoding-alist)
 
 ;;; @@ about message inserting
@@ -446,12 +462,15 @@ Each elements are regexp of field-name. [tm-edit.el]")
 ;;;
 
 (defconst mime-editor/single-part-tag-regexp
-  "^--[[][[]\\([^]]*\\)]\\([[]\\([^]]*\\)]\\|\\)]"
+  "--[[][[]\\([^]]*\\)]\\([[]\\([^]]*\\)]\\|\\)]"
   "*Regexp of MIME tag in the form of [[CONTENT-TYPE][ENCODING]].")
 
-(defconst mime-editor/multipart-beginning-regexp "^--<<\\([^<>]+\\)>>-{\n")
+(defconst mime-editor/quoted-single-part-tag-regexp
+  (concat "- " (substring mime-editor/single-part-tag-regexp 1)))
+
+(defconst mime-editor/multipart-beginning-regexp "--<<\\([^<>]+\\)>>-{\n")
 
-(defconst mime-editor/multipart-end-regexp "^--}-<<\\([^<>]+\\)>>\n")
+(defconst mime-editor/multipart-end-regexp "--}-<<\\([^<>]+\\)>>\n")
 
 (defconst mime-editor/beginning-tag-regexp
   (regexp-or mime-editor/single-part-tag-regexp
@@ -495,15 +514,12 @@ Each elements are regexp of field-name. [tm-edit.el]")
 Tspecials means any character that matches with it in header must be quoted.")
 
 (defconst mime-editor/mime-version-value
-  (format "1.0 (generated by tm-edit %s)" mime-editor/version)
+  (concat "1.0 (generated by " mime-editor/version-name ")")
   "MIME version number.")
 
 (defconst mime-editor/mime-map (make-sparse-keymap)
   "Keymap for MIME commands.")
 
-(defconst mime-editor/minor-mime-map nil
-  "Keymap for MIME commands.")
-
 ;;; @ keymap and menu
 ;;;
 
@@ -530,6 +546,7 @@ Tspecials means any character that matches with it in header must be quoted.")
     (define-key keymap "d"    'mime-editor/enclose-digest-region)
     (define-key keymap "s"    'mime-editor/enclose-signed-region)
     (define-key keymap "e"    'mime-editor/enclose-encrypted-region)
+    (define-key keymap "q"    'mime-editor/enclose-quote-region)
     (define-key keymap "\C-p" 'mime-editor/preview-message)
     (define-key keymap "\C-z" 'mime-editor/exit)
     (define-key keymap "?"    'mime-editor/help)
@@ -537,12 +554,6 @@ Tspecials means any character that matches with it in header must be quoted.")
 
 (mime-editor/define-keymap mime-editor/mime-map)
 
-(if mime-editor/minor-mime-map
-    ()
-  (setq mime-editor/minor-mime-map 
-       (make-sparse-keymap 'mime-editor/minor-mime-map))
-  (define-key mime-editor/minor-mime-map mime-prefix mime-editor/mime-map))
-
 (defun mime-editor/toggle-mode ()
   (interactive)
   (if mime/editor-mode-flag
@@ -550,15 +561,26 @@ Tspecials means any character that matches with it in header must be quoted.")
     (mime/editor-mode)
     ))
 
-(if running-xemacs
-    (add-minor-mode 'mime/editor-mode-flag
-                   '((" MIME-Edit "  mime-editor/transfer-level-string))
-                   mime-editor/minor-mime-map
-                   nil
-                   'mime-editor/toggle-mode)
-  (set-alist 'minor-mode-alist
-            'mime/editor-mode-flag
-            '((" MIME-Edit "  mime-editor/transfer-level-string))))
+(cond (running-xemacs
+       (defconst mime-editor/minor-mime-map nil "Keymap for MIME commands.")
+       (or mime-editor/minor-mime-map
+          (progn
+            (setq mime-editor/minor-mime-map 
+                  (make-sparse-keymap 'mime-editor/minor-mime-map))
+            (define-key
+              mime-editor/minor-mime-map mime-prefix mime-editor/mime-map)
+            ))
+       (add-minor-mode 'mime/editor-mode-flag
+                      '((" MIME-Edit "  mime-editor/transfer-level-string))
+                      mime-editor/minor-mime-map
+                      nil
+                      'mime-editor/toggle-mode)
+       )
+      (t
+       (set-alist 'minor-mode-alist
+                 'mime/editor-mode-flag
+                 '((" MIME-Edit "  mime-editor/transfer-level-string))))
+      )
 
 (defconst mime-editor/menu-title "MIME-Edit")
 
@@ -579,6 +601,7 @@ Tspecials means any character that matches with it in header must be quoted.")
     (digest    "Enclose as digest"     mime-editor/enclose-digest-region)
     (signed    "Enclose as signed"     mime-editor/enclose-signed-region)
     (encrypted "Enclose as encrypted"  mime-editor/enclose-encrypted-region)
+    (quote     "Verbatim region"       mime-editor/enclose-quote-region)
     (key       "Insert Public Key"     mime-editor/insert-key)
     (split     "About split"           mime-editor/set-split)
     (sign      "About sign"            mime-editor/set-sign)
@@ -963,7 +986,7 @@ If nothing is inserted, return nil."
   (let ((oldtag nil)
        (newtag nil)
        (current (point))
-       exist-prev-tag exist-next-tag)
+       )
     (setq pritype
          (or pritype
              (mime-prompt-for-type)))
@@ -979,13 +1002,7 @@ If nothing is inserted, return nil."
     (setq oldtag
          (save-excursion
            (if (mime-editor/goto-tag)
-               (progn
-                 (if (eq current (match-beginning 0))
-                     (setq exist-next-tag t)
-                   (setq exist-prev-tag t)
-                   )
-                 (buffer-substring (match-beginning 0) (match-end 0))
-                 )
+               (buffer-substring (match-beginning 0) (match-end 0))
              ;; Assume content type is 'text/plan'.
              (mime-make-tag "text" "plain")
              )))
@@ -994,15 +1011,6 @@ If nothing is inserted, return nil."
             (not (mime-test-content-type
                   (mime-editor/get-contype oldtag) "text")))
        (setq oldtag nil))
-    (cond (exist-prev-tag (insert "\n"))
-         (exist-next-tag (save-excursion
-                           (insert "\n")
-                           )))
-    (if (not (bolp))
-       (if exist-prev-tag
-           (forward-line 1)
-         (insert "\n")
-         ))
     ;; Make a new tag.
     (if (or (not oldtag)               ;Not text
            (or mime-ignore-same-text-tag
@@ -1077,8 +1085,9 @@ Optional argument ENCODING specifies an encoding method such as base64."
          ))
       (if hide-p
          (progn
-           (mime-flag-region (point-min) (1- (point-max)) ?\^M)
-           (goto-char (point-max)))
+           (invisible-region (point-min) (point-max))
+           (goto-char (point-max))
+           )
        ))
     ;; Define encoding even if it is 7bit.
     (if (stringp encoding)
@@ -1097,16 +1106,13 @@ Optional argument ENCODING specifies an encoding method such as base64."
        t
       ;; At first, go to the end.
       (cond ((re-search-forward mime-editor/beginning-tag-regexp nil t)
-            (goto-char (match-beginning 0)) ;For multiline tag
-            (forward-line -1)
-            (end-of-line)
+            (goto-char (1- (match-beginning 0))) ;For multiline tag
             )
            (t
             (goto-char (point-max))
             ))
       ;; Then search for the beginning. 
       (re-search-backward mime-editor/end-tag-regexp nil t)
-      (beginning-of-line)
       (or (looking-at mime-editor/beginning-tag-regexp)
          ;; Restore previous point.
          (progn
@@ -1140,20 +1146,17 @@ Optional argument ENCODING specifies an encoding method such as base64."
 (defun mime-editor/content-end ()
   "Return the point of the end of content."
   (save-excursion
-    (let ((beg (save-excursion
-                (beginning-of-line) (point))))
+    (let ((beg (point)))
       (if (mime-editor/goto-tag)
          (let ((top (point)))
            (goto-char (match-end 0))
-           (if (and (= beg top)        ;Must be on the same line.
-                    (= (following-char) ?\^M))
-               (progn
-                 (end-of-line)
-                 (point))
+           (if (invisible-p (point))
+               (next-visible-point (point))
              ;; Move to the end of this text.
              (if (re-search-forward mime-editor/tag-regexp nil 'move)
                  ;; Don't forget a multiline tag.
-                 (goto-char (match-beginning 0)))
+                 (goto-char (match-beginning 0))
+               )
              (point)
              ))
        ;; Assume the message begins with text/plain.
@@ -1171,10 +1174,12 @@ Optional argument ENCODING specifies an encoding method such as base64."
        (let ((tag (buffer-substring (match-beginning 0) (match-end 0))))
          (delete-region (match-beginning 0) (match-end 0))
          (insert
-          (mime-create-tag (mime-set-parameter
-                            (mime-editor/get-contype tag) "charset" charset)
-                           (mime-editor/get-encoding tag))))
-      )))
+          (mime-create-tag
+           (mime-editor/set-parameter
+            (mime-editor/get-contype tag)
+            "charset" (upcase (symbol-name charset)))
+           (mime-editor/get-encoding tag)))
+         ))))
 
 (defun mime-editor/define-encoding (encoding)
   "Set encoding of current tag to ENCODING."
@@ -1187,7 +1192,7 @@ Optional argument ENCODING specifies an encoding method such as base64."
 
 (defun mime-editor/choose-charset ()
   "Choose charset of a text following current point."
-  (mime/find-charset-region (point) (mime-editor/content-end))
+  (detect-mime-charset-region (point) (mime-editor/content-end))
   )
 
 (defun mime-make-text-tag (&optional subtype)
@@ -1245,19 +1250,27 @@ Nil if no such parameter."
     nil                                        ;No such parameter
     ))
 
-(defun mime-set-parameter (contype parameter value)
+(defun mime-editor/set-parameter (contype parameter value)
   "For given CONTYPE set PARAMETER to VALUE."
-  (if (string-match
-       (concat
-       ";[ \t\n]*\\("
-       (regexp-quote parameter)
-       "[ \t\n]*=[ \t\n]*\\([^\" \t\n;]*\\|\"[^\"]*\"\\)\\)[ \t\n]*\\(;\\|$\\)")
-       contype)
-      ;; Change value
-      (concat (substring contype 0 (match-beginning 1))
-             parameter "=" value
-             (substring contype (match-end 1)))
-    (concat contype "; " parameter "=" value)))
+  (let (ctype opt-fields)
+    (if (string-match "\n[^ \t\n\r]+:" contype)
+       (setq ctype (substring contype 0 (match-beginning 0))
+             opt-fields (substring contype (match-beginning 0)))
+      (setq ctype contype)
+      )
+    (if (string-match
+        (concat
+         ";[ \t\n]*\\("
+         (regexp-quote parameter)
+         "[ \t\n]*=[ \t\n]*\\([^\" \t\n;]*\\|\"[^\"]*\"\\)\\)[ \t\n]*\\(;\\|$\\)")
+        ctype)
+       ;; Change value
+       (concat (substring ctype 0 (match-beginning 1))
+               parameter "=" value
+               (substring contype (match-end 1))
+               opt-fields)
+      (concat ctype "; " parameter "=" value opt-fields)
+      )))
 
 (defun mime-strip-parameters (contype)
   "Return primary content-type and subtype without parameters for CONTYPE."
@@ -1420,7 +1433,7 @@ while if FLAG is `\\^M' (control-M) the text is hidden."
            (be (match-end 0))
            (type (buffer-substring (match-beginning 1)(match-end 1)))
            end-exp eb ee)
-       (setq end-exp (format "^--}-<<%s>>\n" type))
+       (setq end-exp (format "--}-<<%s>>\n" type))
        (widen)
        (if (re-search-forward end-exp nil t)
            (progn
@@ -1438,7 +1451,6 @@ while if FLAG is `\\^M' (control-M) the text is hidden."
              (mime-editor/find-inmost)
              )
          (widen)
-         ;;(delete-region eb ee)
          (list type bb be eb)
          ))))
 
@@ -1460,19 +1472,22 @@ while if FLAG is `\\^M' (control-M) the text is hidden."
                    (end (match-end 0))
                    )
                (delete-region beg end)
-               (if (and (not (looking-at mime-editor/single-part-tag-regexp))
-                        (not (eobp)))
+               (or (looking-at mime-editor/beginning-tag-regexp)
+                   (eobp)
                    (insert (concat (mime-make-text-tag) "\n"))
-                 )))
-         (cond ((string= type "signed")
+                   )))
+         (cond ((string-equal type "quote")
+                (mime-editor/enquote-region bb eb)
+                )
+               ((string-equal type "signed")
                 (cond ((eq mime-editor/signing-type 'pgp-elkins)
                        (mime-editor/sign-pgp-elkins bb eb boundary)
                        )
                       ((eq mime-editor/signing-type 'pgp-kazu)
                        (mime-editor/sign-pgp-kazu bb eb boundary)
-                       )
-                      ))
-               ((string= type "encrypted")
+                       ))
+                )
+               ((string-equal type "encrypted")
                 (cond ((eq mime-editor/encrypting-type 'pgp-elkins)
                        (mime-editor/encrypt-pgp-elkins bb eb boundary)
                        )
@@ -1491,6 +1506,26 @@ while if FLAG is `\\^M' (control-M) the text is hidden."
                 ))
          boundary))))
 
+(defun mime-editor/enquote-region (beg end)
+  (save-excursion
+    (save-restriction
+      (narrow-to-region beg end)
+      (goto-char beg)
+      (while (re-search-forward mime-editor/single-part-tag-regexp nil t)
+       (let ((tag (buffer-substring (match-beginning 0)(match-end 0))))
+         (replace-match (concat "- " (substring tag 1)))
+         )))))
+
+(defun mime-editor/dequote-region (beg end)
+  (save-excursion
+    (save-restriction
+      (narrow-to-region beg end)
+      (goto-char beg)
+      (while (re-search-forward
+             mime-editor/quoted-single-part-tag-regexp nil t)
+       (let ((tag (buffer-substring (match-beginning 0)(match-end 0))))
+         (replace-match (concat "-" (substring tag 2)))
+         )))))
 
 (autoload 'mc-pgp-lookup-key "mc-pgp")
 (autoload 'mc-pgp-sign-region "mc-pgp")
@@ -1812,6 +1847,7 @@ Content-Transfer-Encoding: 7bit
                     beg end
                     (format "%s-%d" boundary i)))
          ))
+      (mime-editor/dequote-region (point-min)(point-max))
       (let ((contype (car ret))                ;Content-Type
            (encoding (nth 1 ret))      ;Content-Transfer-Encoding
            )
@@ -1835,6 +1871,25 @@ Content-Transfer-Encoding: 7bit
              (insert encoding)))
        ))))
 
+(defun mime-editor/translate-single-part-tag (&optional prefix)
+  (if (re-search-forward mime-editor/single-part-tag-regexp nil t)
+      (let* ((beg (match-beginning 0))
+            (end (match-end 0))
+            (tag (buffer-substring beg end))
+            )
+       (delete-region beg end)
+       (setq contype (mime-editor/get-contype tag))
+       (setq encoding (mime-editor/get-encoding tag))
+       (insert (concat prefix "--" boundary "\n"))
+       (save-restriction
+         (narrow-to-region (point)(point))
+         (insert "Content-Type: " contype "\n")
+         (if encoding
+             (insert "Content-Transfer-Encoding: " encoding "\n"))
+         (mime/encode-message-header)
+         )
+       t)))
+
 (defun mime-editor/translate-region (beg end &optional boundary multipart)
   (if (null boundary)
       (setq boundary
@@ -1856,46 +1911,36 @@ Content-Transfer-Encoding: 7bit
        (while (re-search-forward mime-editor/single-part-tag-regexp nil t)
          (setq nparts (1+ nparts)))
        ;; Begin translation.
-       (cond ((and (<= nparts 1)(not multipart))
-              ;; It's a singular message.
-              (goto-char (point-min))
-              (while (re-search-forward
-                      mime-editor/single-part-tag-regexp nil t)
-                (setq tag
-                      (buffer-substring (match-beginning 0) (match-end 0)))
-                (delete-region (match-beginning 0) (1+ (match-end 0)))
-                (setq contype (mime-editor/get-contype tag))
-                (setq encoding (mime-editor/get-encoding tag))
-                ))
-             (t
-              ;; It's a multipart message.
-              (goto-char (point-min))
-              (while (re-search-forward
-                      mime-editor/single-part-tag-regexp nil t)
-                (setq tag
-                      (buffer-substring (match-beginning 0) (match-end 0)))
-                (delete-region (match-beginning 0) (match-end 0))
-                (setq contype (mime-editor/get-contype tag))
-                (setq encoding (mime-editor/get-encoding tag))
-                (insert "--" boundary "\n")
-                (insert "Content-Type: " contype "\n")
-                (if encoding
-                    (insert "Content-Transfer-Encoding: " encoding "\n"))
-                )
-              ;; Define Content-Type as "multipart/mixed".
-              (setq contype
-                    (concat "multipart/mixed;\n boundary=\"" boundary "\""))
-              ;; Content-Transfer-Encoding must be "7bit".
-              ;; The following encoding can be `nil', but is
-              ;; specified as is since there is no way that a user
-              ;; specifies it.
-              (setq encoding "7bit")
-              ;; Insert the trailer.
-              (goto-char (point-max))
-              (if multipart
-                  (insert "--" boundary "--\n")
-                (insert "\n--" boundary "--\n")
-                )))
+       (cond
+        ((and (<= nparts 1)(not multipart))
+         ;; It's a singular message.
+         (goto-char (point-min))
+         (while (re-search-forward
+                 mime-editor/single-part-tag-regexp nil t)
+           (setq tag
+                 (buffer-substring (match-beginning 0) (match-end 0)))
+           (delete-region (match-beginning 0) (1+ (match-end 0)))
+           (setq contype (mime-editor/get-contype tag))
+           (setq encoding (mime-editor/get-encoding tag))
+           ))
+        (t
+         ;; It's a multipart message.
+         (goto-char (point-min))
+         (and (mime-editor/translate-single-part-tag)
+              (while (mime-editor/translate-single-part-tag "\n"))
+              )
+         ;; Define Content-Type as "multipart/mixed".
+         (setq contype
+               (concat "multipart/mixed;\n boundary=\"" boundary "\""))
+         ;; Content-Transfer-Encoding must be "7bit".
+         ;; The following encoding can be `nil', but is
+         ;; specified as is since there is no way that a user
+         ;; specifies it.
+         (setq encoding "7bit")
+         ;; Insert the trailer.
+         (goto-char (point-max))
+         (insert "\n--" boundary "--\n")
+         ))
        (list contype encoding boundary nparts)
        ))))
 
@@ -1915,30 +1960,27 @@ Content-Transfer-Encoding: 7bit
       ;; Remove extra whitespaces after the tag.
       (if (looking-at "[ \t]+$")
          (delete-region (match-beginning 0) (match-end 0)))
+      (let ((beg (point))
+           (end (mime-editor/content-end))
+           )
+       (goto-char end)
+       (or (looking-at mime-editor/beginning-tag-regexp)
+           (eobp)
+           (insert (mime-make-text-tag) "\n")
+           )
+       (visible-region beg end)
+       (goto-char beg)
+       )
       (cond
-       ((= (following-char) ?\^M)
-       ;; It must be image, audio or video.
-       (let ((beg (point))
-             (end (mime-editor/content-end)))
-         ;; Insert explicit MIME tags after hidden messages.
-         (forward-line 1)
-         (if (and (not (eobp))
-                  (not (looking-at mime-editor/single-part-tag-regexp)))
-             (progn
-               (insert (mime-make-text-tag) "\n")
-               (forward-line -1)       ;Process it again as text.
-               ))
-         ;; Show a hidden message.  The point is not altered
-         ;; after the conversion.
-         (mime-flag-region beg end ?\n)
-         ))
        ((mime-test-content-type contype "message")
        ;; Content-type "message" should be sent as is.
        (forward-line 1)
        )
        ((mime-test-content-type contype "text")
        ;; Define charset for text if necessary.
-       (setq charset (or charset (mime-editor/choose-charset)))
+       (setq charset (if charset
+                         (intern (downcase charset))
+                       (mime-editor/choose-charset)))
        (mime-editor/define-charset charset)
        (cond ((string-equal contype "text/x-rot13-47")
               (save-excursion
@@ -1965,17 +2007,17 @@ Content-Transfer-Encoding: 7bit
        (or encoding    ;Encoding is not specified.
            (let* ((encoding
                    (cdr
-                    (assoc charset
-                           mime-editor/charset-default-encoding-alist)
+                    (assq charset
+                          mime-editor/charset-default-encoding-alist)
                     ))
                   (beg (mime-editor/content-beginning))
                   )
-             (mime-charset-encode-region beg (mime-editor/content-end)
+             (encode-mime-charset-region beg (mime-editor/content-end)
                                          charset)
              (mime-encode-region beg (mime-editor/content-end) encoding)
              (mime-editor/define-encoding encoding)
              ))
-       (forward-line 1)
+       (goto-char (mime-editor/content-end))
        )
        ((null encoding)                ;Encoding is not specified.
        ;; Application, image, audio, video, and any other
@@ -1989,8 +2031,7 @@ Content-Transfer-Encoding: 7bit
          (mime-encode-region beg end encoding)
          (mime-editor/define-encoding encoding))
        (forward-line 1)
-       )
-       )
+       ))
       )))
 
 (defun mime-delete-field (field)
@@ -2106,30 +2147,25 @@ a recording host instead of local host."
 (defun mime-editor/enclose-region (type beg end)
   (save-excursion
     (goto-char beg)
-    (let ((current (point))
-         exist-prev-tag)
-      (save-excursion
-       (if (mime-editor/goto-tag)
-           (or (eq current (match-beginning 0))
-               (setq exist-prev-tag t)
-               )))
+    (let ((current (point)))
       (save-restriction
        (narrow-to-region beg end)
-       (goto-char beg)
-        (if exist-prev-tag
-           (insert "\n")
-         )
        (insert (format "--<<%s>>-{\n" type))
        (goto-char (point-max))
-       (insert (format "\n--}-<<%s>>\n" type))
+       (insert (format "--}-<<%s>>\n" type))
        (goto-char (point-max))
        )
-      (if (and (not (looking-at mime-editor/single-part-tag-regexp))
-              (not (eobp)))
+      (or (looking-at mime-editor/beginning-tag-regexp)
+         (eobp)
          (insert (mime-make-text-tag) "\n")
-       )
+         )
       )))
 
+(defun mime-editor/enclose-quote-region (beg end)
+  (interactive "*r")
+  (mime-editor/enclose-region "quote" beg end)
+  )
+
 (defun mime-editor/enclose-mixed-region (beg end)
   (interactive "*r")
   (mime-editor/enclose-region "mixed" beg end)
@@ -2199,7 +2235,7 @@ Optional TRANSFER-LEVEL is a number of transfer-level, 7 or 8."
       (setq mime-editor/transfer-level 7)
       ))
   (setq mime-editor/charset-default-encoding-alist
-       (mime/make-charset-default-encoding-alist
+       (mime-editor/make-charset-default-encoding-alist
         mime-editor/transfer-level))
   (message (format "Current transfer-level is %d bit"
                   mime-editor/transfer-level))
@@ -2278,8 +2314,8 @@ Optional TRANSFER-LEVEL is a number of transfer-level, 7 or 8."
   (fields subject id number total separator)
   (insert fields)
   (insert (format "Subject: %s (%d/%d)\n" subject number total))
-  (insert (format "Mime-Version: 1.0 (split by tm-edit %s)\n"
-                 mime-editor/version))
+  (insert (format "Mime-Version: 1.0 (split by %s)\n"
+                 mime-editor/version-name))
   (insert (format "\
 Content-Type: message/partial; id=%s; number=%d; total=%d\n%s\n"
                  id number total separator))
@@ -2525,27 +2561,30 @@ Content-Type: message/partial; id=%s; number=%d; total=%d\n%s\n"
              )
            (cond
             ((string-equal type "multipart")
-             (let ((boundary (assoc-value "boundary" params)))
-               (re-search-forward (concat "\n--" boundary) nil t)
+             (let* ((boundary (assoc-value "boundary" params))
+                    (boundary-pat
+                     (concat "\n--" (regexp-quote boundary) "[ \t]*\n"))
+                    )
+               (re-search-forward boundary-pat nil t)
                (let ((bb (match-beginning 0)) eb tag)
-                 (setq tag (format "\n--<<%s>>-{" stype))
+                 (setq tag (format "\n--<<%s>>-{\n" stype))
                  (goto-char bb)
                  (insert tag)
                  (setq bb (+ bb (length tag)))
-                 (re-search-forward (concat "\n--" boundary "--") nil t)
+                 (re-search-forward
+                  (concat "\n--" (regexp-quote boundary) "--[ \t]*\n")
+                  nil t)
                  (setq eb (match-beginning 0))
-                 (replace-match (format "\n--}-<<%s>>" stype))
+                 (replace-match (format "--}-<<%s>>\n" stype))
                  (save-restriction
                    (narrow-to-region bb eb)
                    (goto-char (point-min))
-                   (while (re-search-forward
-                           (concat "\n--" boundary "\n") nil t)
+                   (while (re-search-forward boundary-pat nil t)
                      (let ((beg (match-beginning 0))
                            end)
                        (delete-region beg (match-end 0))
                        (save-excursion
-                         (if (re-search-forward
-                              (concat "\n--" boundary) nil t)
+                         (if (re-search-forward boundary-pat nil t)
                              (setq end (match-beginning 0))
                            (setq end (point-max))
                            )
@@ -2558,7 +2597,7 @@ Content-Type: message/partial; id=%s; number=%d; total=%d\n%s\n"
                (goto-char (point-min))
                (or (= (point-min) 1)
                    (delete-region (point-min)
-                                  (if (re-search-forward "^$" nil t)
+                                  (if (search-forward "\n\n" nil t)
                                       (match-end 0)
                                     (point-min)
                                     )))
@@ -2617,18 +2656,14 @@ Content-Type: message/partial; id=%s; number=%d; total=%d\n%s\n"
                      (progn
                        (goto-char he)
                        (insert
-                        (concat
-                         "\n"
-                         (mime-create-tag
-                          (concat type "/" stype pstr) encoding)
-                         ))
+                        (concat "\n"
+                                (mime-create-tag
+                                 (concat type "/" stype pstr) encoding)))
                        )
                    (delete-region (point-min) he)
                    (insert
-                    (concat "\n"
-                            (mime-create-tag
-                             (concat type "/" stype pstr) encoding)
-                            ))
+                    (mime-create-tag
+                     (concat type "/" stype pstr) encoding))
                    ))
                ))))
        (if code-conversion
@@ -2642,11 +2677,14 @@ Content-Type: message/partial; id=%s; number=%d; total=%d\n%s\n"
   (mime-editor::edit-again code-conversion)
   (goto-char (point-min))
   (save-restriction
-    (narrow-to-region (point-min)
-                     (if (re-search-forward "^$" nil t)
-                         (match-end 0)
-                       (point-max)
-                       ))
+    (narrow-to-region
+     (point-min)
+     (if (re-search-forward
+         (concat "^\\(" (regexp-quote mail-header-separator) "\\)?$")
+         nil t)
+        (match-end 0)
+       (point-max)
+       ))
     (goto-char (point-min))
     (while (re-search-forward
            "^\\(Content-.*\\|Mime-Version\\):" nil t)
index ec267f2..1461b65 100644 (file)
@@ -6,7 +6,7 @@
 ;;; Copyright (C) 1993 .. 1996 MORIOKA Tomohiko
 ;;;
 ;;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
-;;; Version: $Revision: 7.33 $
+;;; Version: $Revision: 7.37 $
 ;;; Keywords: mail, news, MIME, RFC 1522, multilingual, encoded-word
 ;;;
 ;;; This file is part of tm (Tools for MIME).
@@ -36,7 +36,7 @@
 ;;;
 
 (defconst tm-ew-e/RCS-ID
-  "$Id: tm-ew-e.el,v 7.33 1996/06/11 14:34:28 morioka Exp $")
+  "$Id: tm-ew-e.el,v 7.37 1996/07/10 12:52:46 morioka Exp $")
 (defconst mime-eword/encoder-version (get-version-string tm-ew-e/RCS-ID))
 
 
 (defvar mime/use-X-Nsubject nil)
 
 (defvar mime-eword/charset-encoding-alist
-  '(("US-ASCII"       . nil)
-    ("ISO-8859-1"     . "Q")
-    ("ISO-8859-2"     . "Q")
-    ("ISO-8859-3"     . "Q")
-    ("ISO-8859-4"     . "Q")
-;;; ("ISO-8859-5"     . "Q")
-    ("KOI8-R"         . "Q")
-    ("ISO-8859-7"     . "Q")
-    ("ISO-8859-8"     . "Q")
-    ("ISO-8859-9"     . "Q")
-    ("ISO-2022-JP"    . "B")
-    ("ISO-2022-KR"    . "B")
-    ("EUC-KR"         . "B")
-    ("ISO-2022-JP-2"  . "B")
-    ("ISO-2022-INT-1" . "B")
+  '((us-ascii          . nil)
+    (iso-8859-1                . "Q")
+    (iso-8859-2                . "Q")
+    (iso-8859-3                . "Q")
+    (iso-8859-4                . "Q")
+    (iso-8859-5                . "Q")
+    (koi8-r            . "Q")
+    (iso-8859-7                . "Q")
+    (iso-8859-8                . "Q")
+    (iso-8859-9                . "Q")
+    (iso-2022-jp       . "B")
+    (iso-2022-kr       . "B")
+    (euc-kr            . "B")
+    (iso-2022-jp-2     . "B")
+    (iso-2022-int-1    . "B")
     ))
 
-
 ;;; @ encoded-text encoder
 ;;;
 
@@ -78,7 +77,8 @@
               )
         ))
     (if text
-       (concat "=?" charset "?" encoding "?" text "?=")
+       (concat "=?" (upcase (symbol-name charset)) "?"
+               encoding "?" text "?=")
       )))
 
 
 (defmacro tm-eword::rword-type (rword)
   (` (car (cdr (cdr (cdr (, rword)))))))
 
-(defun tm-eword::find-charset-rule (lcl)
-  (if lcl
-      (let* ((charset (mime/find-charset lcl))
-            (encoding
-             (cdr (assoc charset mime-eword/charset-encoding-alist))
-             ))
+(defun tm-eword::find-charset-rule (charsets)
+  (if charsets
+      (let* ((charset (charsets-to-mime-charset charsets))
+            (encoding (cdr (assq charset mime-eword/charset-encoding-alist)))
+            )
        (list charset encoding)
        )))
 
            (setq ac (tm-eword::rword-charset a))
            (if (and (tm-eword::rword-encoding a)
                     (tm-eword::rword-encoding c))
-               (cond ((equal ac cc)
+               (cond ((eq ac cc)
                       (setq prev (cons
                                   (cons (concat (car a)(car b)(car c))
                                         (cdr a))
        (encoding (tm-eword::rword-encoding rword))
        ret)
     (setq ret
-         (cond ((equal encoding "B")
-                (setq string (mime-charset-encode-string string charset))
+         (cond ((string-equal encoding "B")
+                (setq string (encode-mime-charset-string string charset))
                 (base64-encoded-length string)
                 )
-               ((equal encoding "Q")
-                (setq string (mime-charset-encode-string string charset))
+               ((string-equal encoding "Q")
+                (setq string (encode-mime-charset-string string charset))
                 (q-encoding-encoded-length string
                                            (tm-eword::rword-type rword))
                 )))
     (if ret
-       (cons (+ 7 (length charset) ret) string)
+       (cons (+ 7 (length (symbol-name charset)) ret) string)
       )))