From d8d8ac12939199251a948289e342cd691f83e7bd Mon Sep 17 00:00:00 2001 From: morioka Date: Mon, 30 Nov 1998 15:12:59 +0000 Subject: [PATCH] Merge semi-1_11_0_9. --- ChangeLog | 69 ++++++++++++ Makefile | 2 +- NEWS | 15 ++- README.en | 2 +- README.ja | 2 +- VERSION | 10 +- mime-bbdb.el | 2 +- mime-edit.el | 339 ++++++++++++++++++++++++++++++--------------------------- mime-view.el | 2 +- semi-def.el | 2 +- semi-setup.el | 2 +- 11 files changed, 275 insertions(+), 172 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5d54eac..8efe4d5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,75 @@ * mime-view.el (mime-view-buffer): Fix DOC-string. +1998-11-25 MORIOKA Tomohiko + + * NEWS (Changes in SEMI 1.11): New section. + +1998-11-18 Katsumi Yamaoka + + * semi-setup.el (mime-setup-decode-message-header): Use + `mime-decode-header-in-buffer' instead of `eword-decode-header'. + + * mime-view.el (mime-preview-follow-current-entity): Likewise. + +1998-11-18 Keiichi Suzuki + + * mime-edit.el (mime-content-transfer-encoding-priority-list): New + variable. + (mime-edit-translate-single-part-tag): Change return value to + `nil' or a cons which include content-type and encoding. + (mime-edit-translate-region): Generate `encodeing' from + return value of `mime-edit-translate-single-part-tag'. + + +1998-11-16 MORIOKA Tomohiko + + * SEMI: Version 1.11.0 (Kanazawa) released. + + * README.ja, README.en (Required environment): Modify for APEL + 9.11 and FLIM 1.12.0. + +1998-11-12 Katsumi Yamaoka + + * mime-edit.el (mime-edit-split-ignored-field-regexp): Add "^". + +1998-11-08 MORIOKA Tomohiko + + * mime-bbdb.el (mime-bbdb/update-record): Use + `mime-decode-field-body' instead of + `eword-decode-structured-field-body'. + +1998-10-31 MORIOKA Tomohiko + + * mime-edit.el (mime-edit-decode-message-in-buffer): Delete fields + match with `mime-edit-again-ignored-field-regexp' then call + `mime-decode-header-in-buffer'. + (mime-edit-again): Delete header filter. + +1998-10-31 MORIOKA Tomohiko + + * mime-edit.el (mime-edit-decode-multipart-in-buffer): Change + interface. + (mime-edit-decode-single-part-in-buffer): New function. + (mime-edit-decode-message-in-buffer): Swap arguments; use function + `mime-edit-decode-single-part-in-buffer'. + (mime-edit-again): Modify for + `mime-edit-decode-message-in-buffer'. + +1998-10-31 MORIOKA Tomohiko + + * mime-edit.el (mime-edit-decode-multipart-in-buffer): New + function. + (mime-edit-decode-message-in-buffer): Add new optional argument + `default-content-type'; use function + `mime-edit-decode-multipart-in-buffer'; add autoload cookie. + (mime-edit-again): Add autoload cookie. + + * mime-edit.el (mime-edit-decode-message-in-buffer): Renamed from + `mime-edit-decode-buffer'; change `not-decode-text' to optional + argument. + + 1998-10-31 MORIOKA Tomohiko * SEMI: Version 1.10.2 (Higashi-Kanazawa) released. diff --git a/Makefile b/Makefile index 32bebc7..2baacbf 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ # PACKAGE = semi -VERSION = 1.10.2 +VERSION = 1.11.0 TAR = tar RM = /bin/rm -f diff --git a/NEWS b/NEWS index 4d10e0a..f4c2d8e 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,17 @@ SEMI NEWS --- history of major-changes. Copyright (C) 1998 Free Software Foundation, Inc. +* Changes in SEMI 1.11 + +** New function `mime-edit-decode-message-in-buffer' + +Add new function `mime-edit-decode-message-in-buffer'. Function +`mime-edit-decode-buffer' was abolished. + + +** Requires FLIM 1.12 API + + * Changes in SEMI 1.10 ** Abolish variable `mime-temp-directory' @@ -18,7 +29,7 @@ instead of `mime-text-insert-decoded-body'. Now `mime-view-caesar' does not run `mime-text-decode-hook'. - + * Changes in SEMI 1.9 ** User option `mime-encoding-list' @@ -48,7 +59,7 @@ data format: Please use them to get elements of the constant `mime-user-interface-product'. - + * Changes in SEMI 1.8 ** Don't use "file" command to detect content of entity diff --git a/README.en b/README.en index a831529..54a01ff 100644 --- a/README.en +++ b/README.en @@ -40,7 +40,7 @@ Required environment 19.14. SEMI also does not support Emacs 19.29 to 19.34, XEmacs 19.15 or XEmacs 20.2 without mule, but SEMI may work with them. - SEMI requires APEL (9.6 or later) and FLIM (1.11.2 or later) + SEMI requires APEL (9.11 or later) and FLIM (1.12.0 or later) package. Please install them before installing it. APEL package is available at: diff --git a/README.ja b/README.ja index da785cf..d313b38 100644 --- a/README.ja +++ b/README.ja @@ -42,7 +42,7 @@ SEMI とは? XEmacs 20.2 まではサポートしませんが、SEMI はそれらで動作するかもし れません。 - SEMI は APEL (9.6 以降) と FLIM (1.11.2 以降) を必要とします。SEMI + SEMI は APEL (9.11 以降) と FLIM (1.12.0 以降) を必要とします。SEMI をインストールする前にまずそれらをインストールしてください。APEL パッ ケージは以下のところで取得可能です: diff --git a/VERSION b/VERSION index 7402b43..1d92e23 100644 --- a/VERSION +++ b/VERSION @@ -70,8 +70,8 @@ 1.10.0 Tsubata 津幡 1.10.1 Morimoto 森本 1.10.2 Higashi-Kanazawa 東金沢 -------- Kanazawa 金沢 ; <=> 北陸鉄道 北鉄金沢 -------- Nishi-Kanazawa 西金沢 ; <=> 北陸鉄道 新西金沢 +1.11.0 Kanazawa 金沢 ; <=> 北陸鉄道 北鉄金沢 +1.11.1 Nishi-Kanazawa 西金沢 ; <=> 北陸鉄道 新西金沢 ------- (JR) Nonoichi 野々市 : : : ------- Tsuruga 敦賀 ; = JR 小浜線 @@ -130,9 +130,9 @@ 1.9.1 Fujikawa 富士川 1.10.0 Shin-Kambara 新蒲原 1.10.1 Kambara 蒲原 ------- Yui 由比 ------- Okitsu 興津 ------- Shimizu 清水 +1.10.2 Yui 由比 +1.11.0 Okitsu 興津 +1.11.1 Shimizu 清水 ------ Kusanagi 草薙 ------ Shizuoka 静岡 ------ Abekawa 安倍川 diff --git a/mime-bbdb.el b/mime-bbdb.el index 381655c..62bc191 100644 --- a/mime-bbdb.el +++ b/mime-bbdb.el @@ -172,7 +172,7 @@ the user confirms the creation." ) (if from (bbdb-annotate-message-sender - (eword-decode-structured-field-body from) t + (mime-decode-field-body from 'From) t (or (bbdb-invoke-hook-for-value mime-bbdb/auto-create-p) offer-to-create) offer-to-create)) diff --git a/mime-edit.el b/mime-edit.el index 3c38997..873c5bf 100644 --- a/mime-edit.el +++ b/mime-edit.el @@ -4,7 +4,6 @@ ;; Author: UMEDA Masanobu ;; MORIOKA Tomohiko -;; Maintainer: MORIOKA Tomohiko ;; Created: 1994/08/21 renamed from mime.el ;; Renamed: 1997/2/21 from tm-edit.el ;; Keywords: MIME, multimedia, multilingual, mail, news @@ -506,6 +505,11 @@ If encoding is nil, it is determined from its contents." (make-variable-buffer-local 'mime-transfer-level-string) +;;; @@ about content transfer encoding + +(defvar mime-content-transfer-encoding-priority-list + '(nil "8bit" "binary")) + ;;; @@ about message inserting ;;; @@ -547,7 +551,7 @@ If it is not specified for a major-mode, :type 'list) (defconst mime-edit-split-ignored-field-regexp - "\\(^Content-\\|^Subject:\\|^Mime-Version:\\|Message-Id:\\)") + "\\(^Content-\\|^Subject:\\|^Mime-Version:\\|^Message-Id:\\)") (defcustom mime-edit-split-blind-field-regexp "\\(^[BDFbdf]cc:\\|^cc:[ \t]*$\\)" @@ -1958,8 +1962,12 @@ Content-Transfer-Encoding: 7bit (if encoding (insert "Content-Transfer-Encoding: " encoding "\n")) (eword-encode-header) - )) - t))) + ) + (cons (and contype + (downcase contype)) + (and encoding + (downcase encoding)))) + ))) (defun mime-edit-translate-region (beg end &optional boundary multipart) (or boundary @@ -1995,22 +2003,26 @@ Content-Transfer-Encoding: 7bit (t ;; It's a multipart message. (goto-char (point-min)) - (and (mime-edit-translate-single-part-tag boundary) - (while (mime-edit-translate-single-part-tag boundary "\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) - )))) + (let ((prio mime-content-transfer-encoding-priority-list) + part-info nprio) + (when (setq part-info + (mime-edit-translate-single-part-tag boundary)) + (and (setq nprio (member (cdr part-info) prio)) + (setq prio nprio)) + (while (setq part-info + (mime-edit-translate-single-part-tag boundary "\n")) + (and (setq nprio (member (cdr part-info) prio)) + (setq prio nprio)))) + ;; Define Content-Type as "multipart/mixed". + (setq contype + (concat "multipart/mixed;\n boundary=\"" boundary "\"")) + (setq encoding (car prio)) + ;; Insert the trailer. + (goto-char (point-max)) + (insert "\n--" boundary "--\n") + ))) + (list contype encoding boundary nparts) + )))) (defun mime-edit-normalize-body () "Normalize the body part by inserting appropriate message tags." @@ -2577,148 +2589,165 @@ Content-Type: message/partial; id=%s; number=%d; total=%d\n%s\n" "\\):") "Regexp for deleted header fields when `mime-edit-again' is called.") -(defun mime-edit-decode-buffer (not-decode-text) +(defun mime-edit-decode-multipart-in-buffer (content-type not-decode-text) + (let* ((subtype (mime-content-type-subtype content-type)) + (boundary (mime-content-type-parameter content-type "boundary")) + (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>>-{\n" subtype)) + (goto-char bb) + (insert tag) + (setq bb (+ bb (length tag))) + (re-search-forward + (concat "\n--" (regexp-quote boundary) "--[ \t]*\n") + nil t) + (setq eb (match-beginning 0)) + (replace-match (format "--}-<<%s>>\n" subtype)) + (save-restriction + (narrow-to-region bb eb) + (goto-char (point-min)) + (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 boundary-pat nil t) + (setq end (match-beginning 0)) + (setq end (point-max)) + ) + (save-restriction + (narrow-to-region beg end) + (mime-edit-decode-message-in-buffer + (if (eq subtype 'digest) + (eval-when-compile + (make-mime-content-type 'message 'rfc822)) + ) + not-decode-text) + (goto-char (point-max)) + )))) + )) + (goto-char (point-min)) + (or (= (point-min) 1) + (delete-region (point-min) + (if (search-forward "\n\n" nil t) + (match-end 0) + (point-min) + ))) + )) + +(defun mime-edit-decode-single-part-in-buffer (content-type not-decode-text) + (let* ((type (mime-content-type-primary-type content-type)) + (subtype (mime-content-type-subtype content-type)) + (ctype (format "%s/%s" type subtype)) + charset + (pstr (let ((bytes (+ 14 (length ctype)))) + (mapconcat (function + (lambda (attr) + (if (string= (car attr) "charset") + (progn + (setq charset (cdr attr)) + "") + (let* ((str (concat (car attr) + "=" (cdr attr))) + (bs (length str))) + (setq bytes (+ bytes bs 2)) + (if (< bytes 76) + (concat "; " str) + (setq bytes (+ bs 1)) + (concat ";\n " str) + ) + )))) + (mime-content-type-parameters content-type) ""))) + encoding + encoded + (limit (save-excursion + (if (search-forward "\n\n" nil t) + (1- (point)))))) + (save-excursion + (if (re-search-forward + "^Content-Transfer-Encoding:" limit t) + (let ((beg (match-beginning 0)) + (hbeg (match-end 0)) + (end (std11-field-end))) + (setq encoding + (downcase + (eliminate-top-spaces + (std11-unfold-string + (buffer-substring hbeg end))))) + (if (or charset (eq type 'text)) + (progn + (delete-region beg (1+ end)) + (goto-char (point-min)) + (if (search-forward "\n\n" nil t) + (progn + (mime-decode-region + (match-end 0)(point-max) encoding) + (setq encoded t + encoding nil) + ))))))) + (if (or encoded (not not-decode-text)) + (decode-mime-charset-region (point-min)(point-max) + (or charset default-mime-charset)) + ) + (let ((he (if (re-search-forward "^$" nil t) + (match-end 0) + (point-min) + ))) + (if (and (eq type 'text) + (eq subtype 'x-rot13-47-48)) + (mule-caesar-region he (point-max)) + ) + (if (= (point-min) 1) + (progn + (goto-char he) + (insert + (concat "\n" + (mime-create-tag + (format "%s/%s%s" type subtype pstr) + encoding))) + ) + (delete-region (point-min) he) + (insert + (mime-create-tag (format "%s/%s%s" type subtype pstr) + encoding)) + )) + )) + +;;;###autoload +(defun mime-edit-decode-message-in-buffer (&optional default-content-type + not-decode-text) (save-excursion (goto-char (point-min)) - (let ((ctl (mime-read-Content-Type))) + (let ((ctl (or (mime-read-Content-Type) + default-content-type))) (if ctl - (let ((type (mime-content-type-primary-type ctl)) - (stype (mime-content-type-subtype ctl)) - (params (mime-content-type-parameters ctl))) + (let ((type (mime-content-type-primary-type ctl))) (cond - ((and (eq type 'application)(eq stype 'pgp-signature)) + ((and (eq type 'application) + (eq (mime-content-type-subtype ctl) 'pgp-signature)) (delete-region (point-min)(point-max)) ) ((eq type 'multipart) - (let* ((boundary (cdr (assoc "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>>-{\n" stype)) - (goto-char bb) - (insert tag) - (setq bb (+ bb (length tag))) - (re-search-forward - (concat "\n--" (regexp-quote boundary) "--[ \t]*\n") - nil t) - (setq eb (match-beginning 0)) - (replace-match (format "--}-<<%s>>\n" stype)) - (save-restriction - (narrow-to-region bb eb) - (goto-char (point-min)) - (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 boundary-pat nil t) - (setq end (match-beginning 0)) - (setq end (point-max)) - ) - (save-restriction - (narrow-to-region beg end) - (mime-edit-decode-buffer not-decode-text) - (goto-char (point-max)) - )))) - )) - (goto-char (point-min)) - (or (= (point-min) 1) - (delete-region (point-min) - (if (search-forward "\n\n" nil t) - (match-end 0) - (point-min) - ))) - )) + (mime-edit-decode-multipart-in-buffer ctl not-decode-text) + ) (t - (let* ((ctype (format "%s/%s" type stype)) - charset - (pstr - (let ((bytes (+ 14 (length ctype)))) - (mapconcat (function - (lambda (attr) - (if (string= (car attr) "charset") - (progn - (setq charset (cdr attr)) - "") - (let* ((str - (concat (car attr) - "=" (cdr attr)) - ) - (bs (length str)) - ) - (setq bytes (+ bytes bs 2)) - (if (< bytes 76) - (concat "; " str) - (setq bytes (+ bs 1)) - (concat ";\n " str) - ) - )))) - params ""))) - encoding - encoded - (limit (save-excursion - (if (search-forward "\n\n" nil t) - (1- (point)))))) - (save-excursion - (if (re-search-forward - "^Content-Transfer-Encoding:" limit t) - (let ((beg (match-beginning 0)) - (hbeg (match-end 0)) - (end (std11-field-end))) - (setq encoding - (downcase - (eliminate-top-spaces - (std11-unfold-string - (buffer-substring hbeg end))))) - (if (or charset (eq type 'text)) - (progn - (delete-region beg (1+ end)) - (goto-char (point-min)) - (if (search-forward "\n\n" nil t) - (progn - (mime-decode-region - (match-end 0)(point-max) encoding) - (setq encoded t - encoding nil) - ))))))) - (if (or encoded (not not-decode-text)) - (decode-mime-charset-region - (point-min)(point-max) - (or charset default-mime-charset)) - ) - (let ((he - (if (re-search-forward "^$" nil t) - (match-end 0) - (point-min) - ))) - (if (and (eq type 'text) - (eq stype 'x-rot13-47-48)) - (mule-caesar-region he (point-max)) - ) - (if (= (point-min) 1) - (progn - (goto-char he) - (insert - (concat "\n" - (mime-create-tag - (format "%s/%s%s" type stype pstr) - encoding))) - ) - (delete-region (point-min) he) - (insert - (mime-create-tag - (format "%s/%s%s" type stype pstr) - encoding)) - )) - )))) + (mime-edit-decode-single-part-in-buffer ctl not-decode-text) + ))) (or not-decode-text (decode-mime-charset-region (point-min) (point-max) - default-mime-charset) - ) - )))) + default-mime-charset)) + ) + (save-restriction + (std11-narrow-to-header) + (goto-char (point-min)) + (while (re-search-forward mime-edit-again-ignored-field-regexp nil t) + (delete-region (match-beginning 0) (1+ (std11-field-end))) + )) + (mime-decode-header-in-buffer (not not-decode-text)) + ))) +;;;###autoload (defun mime-edit-again (&optional not-decode-text no-separator not-turn-on) "Convert current buffer to MIME-Edit buffer and turn on MIME-Edit mode. Content-Type and Content-Transfer-Encoding header fields will be @@ -2730,14 +2759,8 @@ converted to MIME-Edit tags." nil t) (replace-match "\n\n") ) - (mime-edit-decode-buffer not-decode-text) + (mime-edit-decode-message-in-buffer nil not-decode-text) (goto-char (point-min)) - (save-restriction - (std11-narrow-to-header) - (goto-char (point-min)) - (while (re-search-forward mime-edit-again-ignored-field-regexp nil t) - (delete-region (match-beginning 0) (1+ (std11-field-end))) - )) (or no-separator (and (re-search-forward "^$") (replace-match mail-header-separator) diff --git a/mime-view.el b/mime-view.el index 2ef9a0e..c9a29ed 100644 --- a/mime-view.el +++ b/mime-view.el @@ -1148,7 +1148,7 @@ It calls following-method selected from variable )) (setq rest (cdr rest)) )) - (eword-decode-header) + (mime-decode-header-in-buffer) ) (let ((f (cdr (assq mode mime-preview-following-method-alist)))) (if (functionp f) diff --git a/semi-def.el b/semi-def.el index 6cd2769..a443d71 100644 --- a/semi-def.el +++ b/semi-def.el @@ -30,7 +30,7 @@ (require 'custom) -(defconst mime-user-interface-product ["SEMI" (1 10 2) "Higashi-Kanazawa"] +(defconst mime-user-interface-product ["SEMI" (1 11 1) "Nishi-Kanazawa"] "Product name, version number and code name of MIME-kernel package.") (autoload 'mule-caesar-region "mule-caesar" diff --git a/semi-setup.el b/semi-setup.el index 9137f02..9928d1e 100644 --- a/semi-setup.el +++ b/semi-setup.el @@ -142,7 +142,7 @@ it is used as hook to set." (match-beginning 0) (point-max) )) - (eword-decode-header) + (mime-decode-header-in-buffer) (set-buffer-modified-p nil) ))) -- 1.7.10.4