From 79aebb76e3a8f57deb7559a3d15ab760de33d75b Mon Sep 17 00:00:00 2001 From: morioka Date: Mon, 9 Mar 1998 19:32:41 +0000 Subject: [PATCH] tm 7.71. --- ChangeLog | 96 ++++++++++++++ Makefile | 2 +- signature.el | 8 +- tm-def.el | 140 +++----------------- tm-edit.el | 412 ++++++++++++++++++++++++++++++++-------------------------- tm-ew-e.el | 61 +++++---- 6 files changed, 376 insertions(+), 343 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5c6f868..778018b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,99 @@ +Thu Jul 11 15:26:54 1996 MORIOKA Tomohiko + + * 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 + + * tm-def.el: Function `mime-charset-encode-string' was abolished. + +Thu Jul 11 15:23:13 1996 MORIOKA Tomohiko + + * 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 + + * tm-def.el (mime/find-charset-region): fixed. + +Wed Jul 10 13:45:06 1996 Shuhei KOBAYASHI + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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'. + + Tue Jul 9 13:30:32 1996 MORIOKA Tomohiko * tl: Version 7.31.1 was released. diff --git a/Makefile b/Makefile index 7f0800c..9856810 100644 --- 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 diff --git a/signature.el b/signature.el index 08220bc..a3850a7 100644 --- a/signature.el +++ b/signature.el @@ -14,7 +14,7 @@ ;;; Maintainer: KOBAYASHI Shuhei ;;; 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 -DISTRIBUTION interactively." (interactive "P") @@ -145,7 +145,7 @@ specify a file named -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) diff --git a/tm-def.el b/tm-def.el index d074951..f2c373a 100644 --- a/tm-def.el +++ b/tm-def.el @@ -6,7 +6,7 @@ ;;; ;;; Author: MORIOKA Tomohiko ;;; 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). @@ -53,111 +53,26 @@ (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) @@ -169,7 +84,7 @@ (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)) ) @@ -177,7 +92,7 @@ (cons charset (mime/encoding-name type)) (cons charset encoding) )))) - mime/charset-type-list)) + mime-charset-type-list)) ;;; @ coding-system @@ -224,27 +139,12 @@ (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) diff --git a/tm-edit.el b/tm-edit.el index 8e7334f..4bd613c 100644 --- a/tm-edit.el +++ b/tm-edit.el @@ -8,7 +8,7 @@ ;;; MORIOKA Tomohiko ;;; Maintainer: MORIOKA Tomohiko ;;; 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). @@ -122,10 +122,13 @@ ;;; (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) diff --git a/tm-ew-e.el b/tm-ew-e.el index ec267f2..1461b65 100644 --- a/tm-ew-e.el +++ b/tm-ew-e.el @@ -6,7 +6,7 @@ ;;; Copyright (C) 1993 .. 1996 MORIOKA Tomohiko ;;; ;;; Author: MORIOKA Tomohiko -;;; 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)) @@ -48,24 +48,23 @@ (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 "?=") ))) @@ -169,12 +169,11 @@ (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) ))) @@ -199,7 +198,7 @@ (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)) @@ -237,17 +236,17 @@ (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) ))) -- 1.7.10.4