Sync up with remi-1_6_9.
authormorioka <morioka>
Thu, 18 Jun 1998 12:22:01 +0000 (12:22 +0000)
committermorioka <morioka>
Thu, 18 Jun 1998 12:22:01 +0000 (12:22 +0000)
13 files changed:
Makefile
NEWS
README.en
SEMI-ELS
mime-edit.el
mime-image.el
mime-partial.el
mime-pgp.el
mime-play.el
mime-text.el
mime-view.el
semi-def.el
semi-setup.el

index 4f48a5e..b651abb 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@
 #
 
 PACKAGE = semi
-VERSION = 1.6.0
+VERSION = 1.7.0
 
 SHELL  = /bin/sh
 MAKE   = make
diff --git a/NEWS b/NEWS
index 20be678..0352c0c 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,41 @@
 SEMI NEWS --- history of major-changes.
 Copyright (C) 1998 Free Software Foundation, Inc.
 
+* Changes in SEMI 1.7
+
+** Header-presentation-method
+
+  Now MIME-View uses header-presentation-method instead of
+header-filter.
+
+  - abolish variable `mime-view-content-header-filter-alist'
+
+  - abolish function `mime-view-cut-header'
+
+  - Rename `mime-view-content-header-filter-hook' to
+    `mime-display-header-hook'
+
+
+** Abolish `mime-view-ignored-field-regexp'
+
+  Now mime-view uses `mime-view-ignored-field-list' directly in
+default header-presentation-method.
+
+
+** Abolish body filter support
+
+  Please use body-presentation-method.
+
+
+** Methods for MUAs
+
+  - Rename `mime-view-following-method-alist' to
+    `mime-preview-following-method-alist'
+
+  - Rename `mime-method-to-combine-message/partial-pieces' to
+    `mime-combine-message/partial-pieces-automatically'
+
+\f
 * Changes in SEMI 1.6
 
 ** Abolish tm-compatible external method support
@@ -17,6 +52,20 @@ method instead of it.
 encryption.
 
 
+** New method to detect content of entity
+
+  Now MIME-View can detect content of entity for
+application/octet-stream in default setting.
+
+  It uses "file" command to detect.  User can customize
+`mime-file-content-type-alist' to specify media-type for output of
+"file" command.  It is an alist of "file" output patterns
+vs. corresponding media-types.  Each element looks like (REGEXP TYPE
+SUBTYPE).  REGEXP is pattern for "file" command output.  TYPE is
+symbol to indicate primary type of media-type.  SUBTYPE is symbol to
+indicate subtype of media-type.
+
+
 ** New interface to display message
 
 - Function `mime-view-buffer'
index 0140795..d5fc2ec 100644 (file)
--- a/README.en
+++ b/README.en
@@ -44,7 +44,7 @@ Required environment
   nil. (Maybe non mule setting requires to modify emu.  In addition,
   it is better to use terminal-coding-system feature)
 
-  SEMI requires APEL (8.7 or later) and FLIM (1.3.0 or later) package.
+  SEMI requires APEL (8.7 or later) and FLIM (1.4.0 or later) package.
   Please install them before installing it.  APEL package is available
   at:
 
index c12fb0a..ff195ea 100644 (file)
--- a/SEMI-ELS
+++ b/SEMI-ELS
@@ -6,9 +6,7 @@
 
 (setq semi-modules-to-compile
       '(signature
-       semi-def
-       mime-parse mime-view mime-text mime-play mime-partial
-       mime-edit
+       semi-def mime-view mime-text mime-play mime-partial mime-edit
        semi-setup mail-mime-setup))
 
 (setq semi-modules-not-to-compile nil)
index 4924c8d..30dee69 100644 (file)
 ;;;
 
 (defconst mime-edit-version-string
-  `,(concat (car mime-module-version) " "
-           (mapconcat #'number-to-string (cddr mime-module-version) ".")
-           " - \"" (cadr mime-module-version) "\""))
+  `,(concat (car mime-user-interface-version) " "
+           (mapconcat #'number-to-string
+                      (cddr mime-user-interface-version) ".")
+           " - \"" (cadr mime-user-interface-version) "\""))
 
 
 ;;; @ variables
index a405a4a..f28a08c 100644 (file)
@@ -69,7 +69,7 @@
         (highlight-headers (point-min) (re-search-forward "^$" nil t) t)
         )
        
-       (add-hook 'mime-view-content-header-filter-hook
+       (add-hook 'mime-display-header-hook
                 'mime-preview-x-face-function-use-highlight-headers)
        
        )
@@ -92,7 +92,7 @@
        ;; X-Face
        ;;
        (if (exec-installed-p uncompface-program exec-path)
-          (add-hook 'mime-view-content-header-filter-hook
+          (add-hook 'mime-display-header-hook
                     'x-face-decode-message-header)
         )
        ))
                  'mime-preview-condition
                  (list (cons 'type type)(cons 'subtype subtype)
                        '(body . visible)
-                       '(body-presentation-method . with-filter)
-                       (cons 'body-filter #'mime-preview-filter-for-image)
+                       (cons 'body-presentation-method #'mime-display-image)
                        (cons 'image-format format))
                  )))))
        '((image jpeg           jpeg)
 ;;;
 ;;    (for XEmacs 19.12 or later)
 
-(defun mime-preview-filter-for-image (situation)
-  (let ((beg (point-min))
-       (end (point-max)))
-    (remove-text-properties beg end '(face nil))
-    (message "Decoding image...")
-    (mime-decode-region beg end (cdr (assq 'encoding situation)))
-    (let ((gl (image-normalize (cdr (assq 'image-format situation))
-                              (buffer-string))))
-      (delete-region (point-min)(point-max))
-      (cond ((image-invalid-glyph-p gl)
-            (setq gl nil)
-            (message "Invalid glyph!")
-            )
-           ((eq (aref gl 0) 'xbm)
-            (let ((xbm-file
-                   (make-temp-name
-                    (expand-file-name "tm" mime-temp-directory))))
+(defun mime-display-image (entity situation)
+  (message "Decoding image...")
+  (let ((gl (image-normalize (cdr (assq 'image-format situation))
+                            (with-temp-buffer
+                              (insert-buffer-substring
+                               (mime-entity-buffer entity)
+                               (mime-entity-body-start entity)
+                               (mime-entity-body-end entity))
+                              (mime-decode-region
+                               (point-min)(point-max)
+                               (mime-entity-encoding entity))
+                              (buffer-string)))))
+    (cond ((image-invalid-glyph-p gl)
+          (setq gl nil)
+          (message "Invalid glyph!")
+          )
+         ((eq (aref gl 0) 'xbm)
+          (let ((xbm-file
+                 (make-temp-name
+                  (expand-file-name "tm" mime-temp-directory))))
+            (with-temp-buffer
               (insert (aref gl 2))
               (write-region (point-min)(point-max) xbm-file)
-              (message "Decoding image...")
-              (delete-region (point-min)(point-max))
-              (bitmap-insert-xbm-file xbm-file)
-              (delete-file xbm-file)
               )
-            (message "Decoding image... done")
+            (message "Decoding image...")
+            (bitmap-insert-xbm-file xbm-file)
+            (delete-file xbm-file)
             )
-           (t
-            (setq gl (make-glyph gl))
-            (let ((e (make-extent (point) (point))))
-              (set-extent-end-glyph e gl)
-              )
-            (message "Decoding image... done")
-            ))
-      )
-    (insert "\n")
-    ))
-
-
-;;; @ content filter for Postscript
-;;;
-;;    (for XEmacs 19.14 or later)
-
-;; (defvar mime-view-ps-to-gif-command "pstogif")
-
-;; (defun mime-preview-filter-for-application/postscript (ctype params encoding)
-;;   (let* ((beg (point-min)) (end (point-max))
-;;          (file-base
-;;           (make-temp-name (expand-file-name "tm" mime-temp-directory)))
-;;          (ps-file (concat file-base ".ps"))
-;;          (gif-file (concat file-base ".gif"))
-;;          )
-;;     (remove-text-properties beg end '(face nil))
-;;     (message "Decoding Postscript...")
-;;     (mime-decode-region beg end encoding)
-;;     (write-region (point-min)(point-max) ps-file) 
-;;     (message "Decoding Postscript...")
-;;     (delete-region (point-min)(point-max))
-;;     (call-process mime-view-ps-to-gif-command nil nil nil ps-file)
-;;     (set-extent-end-glyph (make-extent (point) (point))
-;;                           (make-glyph (vector 'gif :file gif-file)))
-;;     (message "Decoding Postscript... done")
-;;     (delete-file ps-file)
-;;     (delete-file gif-file)
-;;     ))
-
-;; If you would like to display inline Postscript image, please
-;; activate following:
-
-;; (set-alist 'mime-view-content-filter-alist
-;;            "application/postscript"
-;;            (function mime-preview-filter-for-application/postscript))
-
-;; (if (featurep 'gif)
-;;     (add-to-list
-;;      'mime-view-visible-media-type-list "application/postscript")
-;;   )
+          (message "Decoding image... done")
+          )
+         (t
+          (setq gl (make-glyph gl))
+          (let ((e (make-extent (point) (point))))
+            (set-extent-end-glyph e gl)
+            )
+          (message "Decoding image... done")
+          ))
+    )
+  (insert "\n")
+  )
 
 
 ;;; @ end
index c8ef3ed..9401a89 100644 (file)
@@ -40,7 +40,7 @@
        (error "Fatal. Unsupported mode")
        ))))
 
-(defun mime-method-to-combine-message/partial-pieces (entity cal)
+(defun mime-combine-message/partial-pieces-automatically (entity cal)
   "Internal method for mime-view to combine message/partial messages
 automatically.  This function refers variable
 `mime-view-partial-message-method-alist' to select function to display
@@ -65,7 +65,7 @@ partial messages using mime-view."
     (if (or (file-exists-p full-file)
            (not (y-or-n-p "Merge partials?"))
            )
-       (mime-method-to-store-message/partial entity cal)
+       (mime-store-message/partial-piece entity cal)
       (let (the-id parameters)
        (setq subject-id (std11-field-body "Subject"))
        (if (string-match "[0-9\n]+" subject-id)
@@ -78,17 +78,13 @@ partial messages using mime-view."
            (while t
              (mime-view-partial-message target)
              (set-buffer article-buffer)
-             (setq parameters
-                   (mime-entity-parameters mime-raw-message-info))
+             (setq parameters (mime-entity-parameters entity))
              (setq the-id (cdr (assoc "id" parameters)))
-             (if (string= the-id id)
-                 (progn
-                   (mime-method-to-store-message/partial
-                    mime-raw-message-info parameters)
-                   (if (file-exists-p full-file)
-                       (throw 'tag nil)
-                     )
-                   ))
+             (when (string= the-id id)
+               (mime-store-message/partial-piece entity parameters)
+               (if (file-exists-p full-file)
+                   (throw 'tag nil)
+                 ))
              (if (not (progn
                         (set-buffer subject-buf)
                         (end-of-line)
index b27c314..a37b790 100644 (file)
 ;;         by Kazuhiko Yamamoto <kazu@is.aist-nara.ac.jp> (1995/10;
 ;;         expired)
 
-;;  PGP/MIME and PGP-kazu may be contrary to each other.  You should
-;;  decide which you support (Maybe you should not use PGP-kazu).
-
 ;;; Code:
 
 (require 'mime-play)
 
 
+;;; @ Internal method for multipart/signed
+;;;
+;;; It is based on RFC 1847 (security-multipart).
+
+(defun mime-verify-multipart/signed (entity situation)
+  "Internal method to verify multipart/signed."
+  (mime-raw-play-entity
+   (nth 1 (mime-entity-children entity)) ; entity-info of signature
+   (cdr (assq 'mode situation)) ; play-mode
+   ))
+
+
 ;;; @ internal method for application/pgp
 ;;;
 ;;; It is based on draft-kazu-pgp-mime-00.txt (PGP-kazu).
 
-(defun mime-method-for-application/pgp (entity cal)
+(defun mime-view-application/pgp (entity situation)
   (let* ((start (mime-entity-point-min entity))
         (end (mime-entity-point-max entity))
         (entity-number (mime-raw-point-to-entity-number start))
     ))
 
 
-;;; @ Internal method for multipart/signed
-;;;
-;;; It is based on RFC 1847 (security-multipart).
-
-(defun mime-method-to-verify-multipart/signed (entity cal)
-  "Internal method to verify multipart/signed."
-  (mime-raw-play-entity
-   (nth 1 (mime-entity-children entity)) ; entity-info of signature
-   (cdr (assq 'mode cal)) ; play-mode
-   ))
-
-
 ;;; @ Internal method for application/pgp-signature
 ;;;
 ;;; It is based on RFC 2015 (PGP/MIME).
@@ -160,11 +157,11 @@ It should be ISO 639 2 letter language code such as en, ja, ...")
                 (t "Bad signature")))
          ))))
 
-(defun mime-method-to-verify-application/pgp-signature (entity cal)
+(defun mime-verify-application/pgp-signature (entity situation)
   "Internal method to check PGP/MIME signature."
   (let* ((start (mime-entity-point-min entity))
         (end (mime-entity-point-max entity))
-        (encoding (cdr (assq 'encoding cal)))
+        (encoding (cdr (assq 'encoding situation)))
         (entity-node-id (mime-raw-point-to-entity-node-id start))
         (mother-node-id (cdr entity-node-id))
         (knum (car entity-node-id))
@@ -224,7 +221,7 @@ It should be ISO 639 2 letter language code such as en, ja, ...")
 ;;;
 ;;; It is based on RFC 2015 (PGP/MIME).
 
-(defun mime-method-to-decrypt-application/pgp-encrypted (entity cal)
+(defun mime-decrypt-application/pgp-encrypted (entity situation)
   (let* ((entity-node-id (mime-entity-node-id entity))
         (mother-node-id (cdr entity-node-id))
         (knum (car entity-node-id))
@@ -233,7 +230,7 @@ It should be ISO 639 2 letter language code such as en, ja, ...")
                 (1+ knum)))
         (oinfo (mime-raw-find-entity-from-node-id
                 (cons onum mother-node-id) mime-raw-message-info)))
-    (mime-method-for-application/pgp oinfo cal)
+    (mime-view-application/pgp oinfo situation)
     ))
 
 
@@ -241,12 +238,12 @@ It should be ISO 639 2 letter language code such as en, ja, ...")
 ;;;
 ;;; It is based on RFC 2015 (PGP/MIME).
 
-(defun mime-method-to-add-application/pgp-keys (entity cal)
+(defun mime-add-application/pgp-keys (entity situation)
   (let* ((start (mime-entity-point-min entity))
         (end (mime-entity-point-max entity))
         (entity-number (mime-raw-point-to-entity-number start))
         (new-name (format "%s-%s" (buffer-name) entity-number))
-        (encoding (cdr (assq 'encoding cal)))
+        (encoding (cdr (assq 'encoding situation)))
         str)
     (setq str (buffer-substring start end))
     (switch-to-buffer new-name)
index 45ff40d..8c94c23 100644 (file)
@@ -206,8 +206,13 @@ specified, play as it.  Default MODE is \"play\"."
        (narrow-to-region start end)
        (goto-char start)
        (let ((method (cdr (assoc 'method situation)))
-             (name (expand-file-name (mime-raw-get-filename situation)
-                                     mime-temp-directory)))
+             (name (mime-entity-safe-filename entity)))
+         (setq name
+               (if name
+                   (expand-file-name name mime-temp-directory)
+                 (make-temp-name
+                  (expand-file-name "EMI" mime-temp-directory))
+                 ))
          (mime-write-decoded-region (mime-entity-body-start entity) end
                                     name (cdr (assq 'encoding situation)))
          (message "External method is starting...")
@@ -232,53 +237,6 @@ specified, play as it.  Default MODE is \"play\"."
   (remove-alist 'mime-mailcap-method-filename-alist process)
   (message (format "%s %s" process event)))
 
-;; (defun mime-activate-external-method (entity cal)
-;;   (save-excursion
-;;     (save-restriction
-;;       (let ((beg (mime-entity-point-min entity))
-;;             (end (mime-entity-point-max entity)))
-;;         (narrow-to-region beg end)
-;;         (goto-char beg)
-;;         (let ((method (cdr (assoc 'method cal)))
-;;               (name (mime-raw-get-filename cal)))
-;;           (if method
-;;               (let ((file (make-temp-name
-;;                            (expand-file-name "TM" mime-temp-directory)))
-;;                     b args)
-;;                 (if (nth 1 method)
-;;                     (setq b beg)
-;;                   (setq b (mime-entity-body-start entity)))
-;;                 (goto-char b)
-;;                 (write-region b end file)
-;;                 (message "External method is starting...")
-;;                 (setq cal (put-alist
-;;                            'name (replace-as-filename name) cal))
-;;                 (setq cal (put-alist 'file file cal))
-;;                 (setq args (nconc
-;;                             (list (car method)
-;;                                   mime-echo-buffer-name (car method))
-;;                             (mime-make-external-method-args
-;;                              cal (cdr (cdr method)))
-;;                             ))
-;;                 (apply (function start-process) args)
-;;                 (mime-show-echo-buffer)
-;;                 ))
-;;           )))))
-
-;; (defun mime-make-external-method-args (cal format)
-;;   (mapcar (function
-;;            (lambda (arg)
-;;              (if (stringp arg)
-;;                  arg
-;;                (let* ((item (eval arg))
-;;                       (ret (cdr (assoc item cal))))
-;;                  (or ret
-;;                      (if (eq item 'encoding)
-;;                          "7bit"
-;;                        ""))
-;;                  ))))
-;;           format))
-
 (defvar mime-echo-window-is-shared-with-bbdb t
   "*If non-nil, mime-echo window is shared with BBDB window.")
 
@@ -336,47 +294,27 @@ window.")
   (concat (regexp-* mime-view-file-name-char-regexp)
          "\\(\\." mime-view-file-name-char-regexp "+\\)*"))
 
-(defun mime-raw-get-original-filename (param)
-  (or (if (member (cdr (assq 'encoding param))
-                 mime-view-uuencode-encoding-name-list)
-         (mime-raw-get-uu-filename))
-      (let (ret)
-       (or (if (or (and (setq ret (mime-read-Content-Disposition))
-                        (setq ret
-                              (assoc
-                               "filename"
-                               (mime-content-disposition-parameters ret)))
-                        )
-                   (setq ret (assoc "name" param))
-                   (setq ret (assoc "x-name" param))
-                   )
-               (std11-strip-quoted-string (cdr ret))
-             )
-           (if (setq ret
-                     (std11-find-field-body '("Content-Description"
-                                              "Subject")))
-               (if (or (string-match mime-view-file-name-regexp-1 ret)
-                       (string-match mime-view-file-name-regexp-2 ret))
-                   (substring ret (match-beginning 0)(match-end 0))
-                 ))
-           ))
-      ))
-
-(defun mime-raw-get-filename (param)
-  (replace-as-filename (mime-raw-get-original-filename param))
-  )
+(defun mime-entity-safe-filename (entity)
+  (replace-as-filename
+   (or (mime-entity-filename entity)
+       (let ((ret (or (mime-entity-read-field entity 'Content-Description)
+                     (mime-entity-read-field entity 'Subject))))
+        (if (or (string-match mime-view-file-name-regexp-1 ret)
+                (string-match mime-view-file-name-regexp-2 ret))
+            (substring ret (match-beginning 0)(match-end 0))
+          )))))
 
 
 ;;; @ file extraction
 ;;;
 
-(defun mime-method-to-save (entity cal)
+(defun mime-save-content (entity cal)
   (let ((beg (mime-entity-point-min entity))
        (end (mime-entity-point-max entity)))
     (goto-char beg)
     (let* ((name (save-restriction
                   (narrow-to-region beg end)
-                  (mime-raw-get-filename cal)
+                  (mime-entity-safe-filename entity)
                   ))
           (encoding (or (cdr (assq 'encoding cal)) "7bit"))
           (filename (if (and name (not (string-equal name "")))
@@ -415,13 +353,13 @@ REGEXP is pattern for \"file\" command output.
 TYPE is symbol to indicate primary type of media-type.
 SUBTYPE is symbol to indicate subtype of media-type.")
 
-(defun mime-method-to-detect (entity situation)
+(defun mime-detect-content (entity situation)
   (let ((beg (mime-entity-point-min entity))
        (end (mime-entity-point-max entity)))
     (goto-char beg)
     (let* ((name (save-restriction
                   (narrow-to-region beg end)
-                  (mime-raw-get-filename situation)
+                  (mime-entity-safe-filename entity)
                   ))
           (encoding (or (cdr (assq 'encoding situation)) "7bit"))
           (filename (if (and name (not (string-equal name "")))
@@ -467,7 +405,7 @@ It is registered to variable `mime-preview-quitting-method-alist'."
     (pop-to-buffer mother)
     ))
 
-(defun mime-method-to-display-message/rfc822 (entity cal)
+(defun mime-view-message/rfc822 (entity cal)
   (let* ((beg (mime-entity-point-min entity))
         (end (mime-entity-point-max entity))
         (cnum (mime-raw-point-to-entity-number beg))
@@ -510,7 +448,7 @@ saved as binary.  Otherwise the region is saved by `write-region'."
       (write-region start end filename)
       )))
 
-(defun mime-method-to-store-message/partial (entity cal)
+(defun mime-store-message/partial-piece (entity cal)
   (goto-char (mime-entity-point-min entity))
   (let* ((root-dir
          (expand-file-name
@@ -642,7 +580,7 @@ saved as binary.  Otherwise the region is saved by `write-region'."
     (dired dir)
     ))
 
-(defun mime-method-to-display-message/external-ftp (entity cal)
+(defun mime-view-message/external-ftp (entity cal)
   (let* ((site (cdr (assoc "site" cal)))
         (directory (cdr (assoc "directory" cal)))
         (name (cdr (assoc "name" cal)))
@@ -657,7 +595,7 @@ saved as binary.  Otherwise the region is saved by `write-region'."
 ;;; @ rot13-47
 ;;;
 
-(defun mime-method-to-display-caesar (entity situation)
+(defun mime-view-caesar (entity situation)
   "Internal method for mime-view to display ROT13-47-48 message."
   (let* ((new-name (format "%s-%s" (buffer-name)
                           (mime-entity-number entity)))
index 8483630..c18b296 100644 (file)
@@ -101,7 +101,7 @@ SITUATION.  It must be symbol."
 ;;; @ content filters for mime-text
 ;;;
 
-(defun mime-preview-text/plain (entity situation)
+(defun mime-display-text/plain (entity situation)
   (save-restriction
     (narrow-to-region (point-max)(point-max))
     (mime-text-insert-decoded-body entity)
@@ -110,10 +110,10 @@ SITUATION.  It must be symbol."
        (insert "\n")
       )
     (mime-text-add-url-buttons)
-    (run-hooks 'mime-preview-text/plain-hook)
+    (run-hooks 'mime-display-text/plain-hook)
     ))
 
-(defun mime-preview-text/richtext (entity situation)
+(defun mime-display-text/richtext (entity situation)
   (save-restriction
     (narrow-to-region (point-max)(point-max))
     (mime-text-insert-decoded-body entity)
@@ -122,7 +122,7 @@ SITUATION.  It must be symbol."
       (richtext-decode beg (point-max))
       )))
 
-(defun mime-preview-text/enriched (entity situation)
+(defun mime-display-text/enriched (entity situation)
   (save-restriction
     (narrow-to-region (point-max)(point-max))
     (mime-text-insert-decoded-body entity)
index 852e15d..4808903 100644 (file)
@@ -28,8 +28,7 @@
 ;;; Code:
 
 (require 'std11)
-(require 'mel)
-(require 'eword-decode)
+(require 'mime-lib)
 (require 'mime-parse)
 (require 'semi-def)
 (require 'calist)
 ;;;
 
 (defconst mime-view-version-string
-  `,(concat (car mime-module-version) " MIME-View "
-           (mapconcat #'number-to-string (cddr mime-module-version) ".")
-           " (" (cadr mime-module-version) ")"))
+  `,(concat (car mime-user-interface-version) " MIME-View "
+           (mapconcat #'number-to-string
+                      (cddr mime-user-interface-version) ".")
+           " (" (cadr mime-user-interface-version) ")"))
 
 
 ;;; @ variables
@@ -244,15 +244,20 @@ If optional argument MESSAGE-INFO is not specified,
 
 (defvar mime-view-uuencode-encoding-name-list '("x-uue" "x-uuencode"))
 
-(defun mime-raw-get-uu-filename ()
-  (save-excursion
-    (if (re-search-forward "^begin [0-9]+ " nil t)
-       (if (looking-at ".+$")
-           (buffer-substring (match-beginning 0)(match-end 0))
-         ))))
-
-(defun mime-raw-get-subject (entity)
-  (or (std11-find-field-body '("Content-Description" "Subject"))
+(defun mime-entity-uu-filename (entity)
+  (if (member (mime-entity-encoding entity)
+             mime-view-uuencode-encoding-name-list)
+      (save-excursion
+       (set-buffer (mime-entity-buffer entity))
+       (goto-char (mime-entity-body-start entity))
+       (if (re-search-forward "^begin [0-9]+ "
+                              (mime-entity-body-end entity) t)
+           (if (looking-at ".+$")
+               (buffer-substring (match-beginning 0)(match-end 0))
+             )))))
+
+(defun mime-entity-filename (entity)
+  (or (mime-entity-uu-filename entity)
       (let ((ret (mime-entity-content-disposition entity)))
        (and ret
             (setq ret (mime-content-disposition-filename ret))
@@ -268,9 +273,12 @@ If optional argument MESSAGE-INFO is not specified,
                      )))
             (std11-strip-quoted-string ret)
             ))
-      (if (member (mime-entity-encoding entity)
-                 mime-view-uuencode-encoding-name-list)
-         (mime-raw-get-uu-filename))
+      ))
+
+(defun mime-view-entity-title (entity)
+  (or (mime-entity-read-field entity 'Content-Description)
+      (mime-entity-read-field entity 'Subject)
+      (mime-entity-filename entity)
       ""))
 
 
@@ -328,10 +336,11 @@ Please redefine this function if you want to change default setting."
 ;;; @@@ entity button generator
 ;;;
 
-(defun mime-view-insert-entity-button (entity subject)
+(defun mime-view-insert-entity-button (entity)
   "Insert entity-button of ENTITY."
   (let ((entity-node-id (mime-entity-node-id entity))
-       (params (mime-entity-parameters entity)))
+       (params (mime-entity-parameters entity))
+       (subject (mime-view-entity-title entity)))
     (mime-insert-button
      (let ((access-type (assoc "access-type" params))
           (num (or (cdr (assoc "x-part-number" params))
@@ -383,18 +392,11 @@ Please redefine this function if you want to change default setting."
 ;;; @@ entity-header
 ;;;
 
-;;; @@@ entity header filter
-;;;
-
-(defvar mime-view-content-header-filter-alist nil)
-
-(defun mime-view-default-content-header-filter ()
-  (mime-view-cut-header)
-  (eword-decode-header)
-  )
-
-;;; @@@ entity field cutter
-;;;
+(defvar mime-header-presentation-method-alist nil
+  "Alist of major mode vs. corresponding header-presentation-method functions.
+Each element looks like (SYMBOL . FUNCTION).
+SYMBOL must be major mode in raw-buffer or t.  t means default.
+Interface of FUNCTION must be (ENTITY SITUATION).")
 
 (defvar mime-view-ignored-field-list
   '(".*Received" ".*Path" ".*Id" "References"
@@ -405,36 +407,10 @@ Please redefine this function if you want to change default setting."
   "All fields that match this list will be hidden in MIME preview buffer.
 Each elements are regexp of field-name.")
 
-(defvar mime-view-ignored-field-regexp
-  (concat "^"
-         (apply (function regexp-or) mime-view-ignored-field-list)
-         ":"))
-
 (defvar mime-view-visible-field-list '("Dnas.*" "Message-Id")
   "All fields that match this list will be displayed in MIME preview buffer.
 Each elements are regexp of field-name.")
 
-(defun mime-view-cut-header ()
-  (goto-char (point-min))
-  (while (re-search-forward mime-view-ignored-field-regexp nil t)
-    (let* ((beg (match-beginning 0))
-          (end (match-end 0))
-          (name (buffer-substring beg end))
-          )
-      (catch 'visible
-       (let ((rest mime-view-visible-field-list))
-         (while rest
-           (if (string-match (car rest) name)
-               (throw 'visible nil)
-             )
-           (setq rest (cdr rest))))
-       (delete-region beg
-                      (save-excursion
-                        (if (re-search-forward "^\\([^ \t]\\|$\\)" nil t)
-                            (match-beginning 0)
-                          (point-max))))
-       ))))
-
 
 ;;; @@ entity-body
 ;;;
@@ -496,42 +472,42 @@ Each elements are regexp of field-name.")
 (ctree-set-calist-strictly
  'mime-preview-condition
  '((body . visible)
-   (body-presentation-method . mime-preview-text/plain)))
+   (body-presentation-method . mime-display-text/plain)))
 
 (ctree-set-calist-strictly
  'mime-preview-condition
  '((type . nil)
    (body . visible)
-   (body-presentation-method . mime-preview-text/plain)))
+   (body-presentation-method . mime-display-text/plain)))
 
 (ctree-set-calist-strictly
  'mime-preview-condition
  '((type . text)(subtype . enriched)
    (body . visible)
-   (body-presentation-method . mime-preview-text/enriched)))
+   (body-presentation-method . mime-display-text/enriched)))
 
 (ctree-set-calist-strictly
  'mime-preview-condition
  '((type . text)(subtype . richtext)
    (body . visible)
-   (body-presentation-method . mime-preview-text/richtext)))
+   (body-presentation-method . mime-display-text/richtext)))
 
 (ctree-set-calist-strictly
  'mime-preview-condition
  '((type . text)(subtype . t)
    (body . visible)
-   (body-presentation-method . mime-preview-text/plain)))
+   (body-presentation-method . mime-display-text/plain)))
 
 (ctree-set-calist-strictly
  'mime-preview-condition
  '((type . multipart)(subtype . alternative)
    (body . visible)
-   (body-presentation-method . mime-preview-multipart/alternative)))
+   (body-presentation-method . mime-display-multipart/alternative)))
 
 (ctree-set-calist-strictly
  'mime-preview-condition '((type . message)(subtype . partial)
                           (body-presentation-method
-                           . mime-preview-message/partial-button)))
+                           . mime-display-message/partial-button)))
 
 (ctree-set-calist-strictly
  'mime-preview-condition '((type . message)(subtype . rfc822)
@@ -549,9 +525,9 @@ Each elements are regexp of field-name.")
 ;;; @@@ entity presentation
 ;;;
 
-(autoload 'mime-preview-text/plain "mime-text")
-(autoload 'mime-preview-text/enriched "mime-text")
-(autoload 'mime-preview-text/richtext "mime-text")
+(autoload 'mime-display-text/plain "mime-text")
+(autoload 'mime-display-text/enriched "mime-text")
+(autoload 'mime-display-text/richtext "mime-text")
 
 (defvar mime-view-announcement-for-message/partial
   (if (and (>= emacs-major-version 19) window-system)
@@ -564,7 +540,7 @@ Each elements are regexp of field-name.")
 \[[ Please press `v' key in this buffer.         ]]"
     ))
 
-(defun mime-preview-message/partial-button (&optional entity situation)
+(defun mime-display-message/partial-button (&optional entity situation)
   (save-restriction
     (goto-char (point-max))
     (if (not (search-backward "\n\n" nil t))
@@ -577,17 +553,12 @@ Each elements are regexp of field-name.")
                     #'mime-preview-play-current-entity)
     ))
 
-(defun mime-preview-multipart/mixed (entity situation)
+(defun mime-display-multipart/mixed (entity situation)
   (let ((children (mime-entity-children entity))
        (default-situation
          (cdr (assq 'childrens-situation situation))))
     (while children
-      (mime-view-display-entity (car children)
-                               (save-excursion
-                                 (set-buffer (mime-entity-buffer entity))
-                                 mime-raw-message-info)
-                               (current-buffer)
-                               default-situation)
+      (mime-display-entity (car children) nil default-situation)
       (setq children (cdr children))
       )))
 
@@ -606,7 +577,7 @@ MEDIA-TYPE must be (TYPE . SUBTYPE), TYPE or t.  t means default."
                               (item :tag "Default" t))
                       integer)))
 
-(defun mime-preview-multipart/alternative (entity situation)
+(defun mime-display-multipart/alternative (entity situation)
   (let* ((children (mime-entity-children entity))
         (default-situation
           (cdr (assq 'childrens-situation situation)))
@@ -649,16 +620,10 @@ MEDIA-TYPE must be (TYPE . SUBTYPE), TYPE or t.  t means default."
     (while children
       (let ((child (car children))
            (situation (car situations)))
-       (mime-view-display-entity child
-                                 (save-excursion
-                                   (set-buffer (mime-entity-buffer child))
-                                   mime-raw-message-info)
-                                 (current-buffer)
-                                 default-situation
-                                 (if (= i p)
-                                     situation
-                                   (del-alist 'body-presentation-method
-                                              (copy-alist situation))))
+       (mime-display-entity child (if (= i p)
+                                      situation
+                                    (del-alist 'body-presentation-method
+                                               (copy-alist situation))))
        )
       (setq children (cdr children)
            situations (cdr situations)
@@ -705,47 +670,47 @@ MEDIA-TYPE must be (TYPE . SUBTYPE), TYPE or t.  t means default."
  'mime-acting-condition
  '((type . application)(subtype . octet-stream)
    (mode . "play")
-   (method . mime-method-to-detect)
+   (method . mime-detect-content)
    ))
 
 (ctree-set-calist-with-default
  'mime-acting-condition
  '((mode . "extract")
-   (method . mime-method-to-save)))
+   (method . mime-save-content)))
 
 (ctree-set-calist-strictly
  'mime-acting-condition
  '((type . text)(subtype . x-rot13-47)(mode . "play")
-   (method . mime-method-to-display-caesar)
+   (method . mime-view-caesar)
    ))
 (ctree-set-calist-strictly
  'mime-acting-condition
  '((type . text)(subtype . x-rot13-47-48)(mode . "play")
-   (method . mime-method-to-display-caesar)
+   (method . mime-view-caesar)
    ))
 
 (ctree-set-calist-strictly
  'mime-acting-condition
  '((type . message)(subtype . rfc822)(mode . "play")
-   (method . mime-method-to-display-message/rfc822)
+   (method . mime-view-message/rfc822)
    ))
 (ctree-set-calist-strictly
  'mime-acting-condition
  '((type . message)(subtype . partial)(mode . "play")
-   (method . mime-method-to-store-message/partial)
+   (method . mime-store-message/partial-piece)
    ))
 
 (ctree-set-calist-strictly
  'mime-acting-condition
  '((type . message)(subtype . external-body)
    ("access-type" . "anon-ftp")
-   (method . mime-method-to-display-message/external-ftp)
+   (method . mime-view-message/external-ftp)
    ))
 
 (ctree-set-calist-strictly
  'mime-acting-condition
  '((type . application)(subtype . octet-stream)
-   (method . mime-method-to-save)
+   (method . mime-save-content)
    ))
 
 
@@ -767,7 +732,7 @@ MEDIA-TYPE must be (TYPE . SUBTYPE), TYPE or t.  t means default."
 ;;; @ following method
 ;;;
 
-(defvar mime-view-following-method-alist nil
+(defvar mime-preview-following-method-alist nil
   "Alist of major-mode vs. following-method of mime-view.")
 
 (defvar mime-view-following-required-fields-list
@@ -809,26 +774,15 @@ The compressed face will be piped to this command.")
 ;;; @ buffer setup
 ;;;
 
-(defun mime-view-display-entity (entity message-info obuf
-                                       default-situation
-                                       &optional situation)
+(defun mime-display-entity (entity &optional situation
+                                  default-situation preview-buffer)
+  (or preview-buffer
+      (setq preview-buffer (current-buffer)))
   (let* ((raw-buffer (mime-entity-buffer entity))
         (start (mime-entity-point-min entity))
-        (end (mime-entity-point-max entity))
-        original-major-mode end-of-header e nb ne subj)
+        e nb ne)
     (set-buffer raw-buffer)
-    (setq original-major-mode major-mode)
     (goto-char start)
-    (setq end-of-header (if (re-search-forward "^$" nil t)
-                           (1+ (match-end 0))
-                         end))
-    (if (> end-of-header end)
-       (setq end-of-header end)
-      )
-    (save-restriction
-      (narrow-to-region start end)
-      (setq subj (eword-decode-string (mime-raw-get-subject entity)))
-      )
     (or situation
        (setq situation
              (or (ctree-match-calist mime-preview-condition
@@ -839,43 +793,43 @@ The compressed face will be piped to this command.")
           (eq (cdr (assq 'entity-button situation)) 'invisible))
          (header-is-visible
           (eq (cdr (assq 'header situation)) 'visible))
+         (header-presentation-method
+          (or (cdr (assq 'header-presentation-method situation))
+              (cdr (assq major-mode mime-header-presentation-method-alist))))
          (body-presentation-method
           (cdr (assq 'body-presentation-method situation)))
          (children (mime-entity-children entity)))
-      (set-buffer obuf)
+      (set-buffer preview-buffer)
       (setq nb (point))
       (narrow-to-region nb nb)
       (or button-is-invisible
          (if (mime-view-entity-button-visible-p entity)
-             (mime-view-insert-entity-button entity subj)
-           ))
-      (if header-is-visible
-         (save-restriction
-           (narrow-to-region (point)(point))
-           (insert-buffer-substring raw-buffer start end-of-header)
-           (let ((f (cdr (assq original-major-mode
-                               mime-view-content-header-filter-alist))))
-             (if (functionp f)
-                 (funcall f)
-               (mime-view-default-content-header-filter)
-               ))
-           (run-hooks 'mime-view-content-header-filter-hook)
+             (mime-view-insert-entity-button entity)
            ))
-      (cond ((eq body-presentation-method 'with-filter)
-            (let ((body-filter (cdr (assq 'body-filter situation))))
-              (save-restriction
-                (narrow-to-region (point-max)(point-max))
-                (insert-buffer-substring raw-buffer end-of-header end)
-                (funcall body-filter situation)
-                )))
-           (children)
-           ((functionp body-presentation-method)
+      (when header-is-visible
+       (if header-presentation-method
+           (funcall header-presentation-method entity situation)
+         (mime-insert-decoded-header
+          entity
+          mime-view-ignored-field-list mime-view-visible-field-list
+          (save-excursion
+            (set-buffer raw-buffer)
+            (if (eq (cdr (assq major-mode mime-raw-representation-type-alist))
+                    'binary)
+                default-mime-charset)
+            )))
+       (goto-char (point-max))
+       (insert "\n")
+       (run-hooks 'mime-display-header-hook)
+       )
+      (cond (children)
+            ((functionp body-presentation-method)
             (funcall body-presentation-method entity situation)
             )
            (t
             (when button-is-invisible
               (goto-char (point-max))
-              (mime-view-insert-entity-button entity subj)
+              (mime-view-insert-entity-button entity)
               )
             (or header-is-visible
                 (progn
@@ -890,7 +844,7 @@ The compressed face will be piped to this command.")
       (if children
          (if (functionp body-presentation-method)
              (funcall body-presentation-method entity situation)
-           (mime-preview-multipart/mixed entity situation)
+           (mime-display-multipart/mixed entity situation)
            ))
       )))
 
@@ -1031,8 +985,8 @@ The compressed face will be piped to this command.")
 
 (defvar mime-view-redisplay nil)
 
-(defun mime-view-display-message (message &optional preview-buffer
-                                         mother default-keymap-or-function)
+(defun mime-display-message (message &optional preview-buffer
+                                    mother default-keymap-or-function)
   (mime-maybe-hide-echo-buffer)
   (let ((win-conf (current-window-configuration))
        (raw-buffer (mime-entity-buffer message)))
@@ -1053,11 +1007,10 @@ The compressed face will be piped to this command.")
       (setq mime-preview-original-window-configuration win-conf)
       (setq major-mode 'mime-view-mode)
       (setq mode-name "MIME-View")
-      (mime-view-display-entity message message
-                               preview-buffer
-                               '((entity-button . invisible)
-                                 (header . visible)
-                                 ))
+      (mime-display-entity message nil
+                          '((entity-button . invisible)
+                            (header . visible))
+                          preview-buffer)
       (mime-view-define-keymap default-keymap-or-function)
       (let ((point
             (next-single-property-change (point-min) 'mime-view-entity)))
@@ -1075,7 +1028,7 @@ The compressed face will be piped to this command.")
 (defun mime-view-buffer (&optional raw-buffer preview-buffer mother
                                   default-keymap-or-function)
   (interactive)
-  (mime-view-display-message
+  (mime-display-message
    (save-excursion
      (if raw-buffer (set-buffer raw-buffer))
      (mime-parse-message)
@@ -1108,7 +1061,7 @@ button-2  Move to point under the mouse cursor
                and decode current content as `play mode'
 "
   (interactive)
-  (mime-view-display-message
+  (mime-display-message
    (save-excursion
      (if raw-buffer (set-buffer raw-buffer))
      (or mime-view-redisplay
@@ -1148,7 +1101,7 @@ It decodes current entity to call internal or external method as
 (defun mime-preview-follow-current-entity ()
   "Write follow message to current entity.
 It calls following-method selected from variable
-`mime-view-following-method-alist'."
+`mime-preview-following-method-alist'."
   (interactive)
   (let (entity)
     (while (null (setq entity
@@ -1263,7 +1216,7 @@ It calls following-method selected from variable
              ))
          (eword-decode-header)
          )
-       (let ((f (cdr (assq mode mime-view-following-method-alist))))
+       (let ((f (cdr (assq mode mime-preview-following-method-alist))))
          (if (functionp f)
              (funcall f new-buf)
            (message
index 8373643..fe010b2 100644 (file)
@@ -29,7 +29,7 @@
 (eval-when-compile (require 'cl))
 
 
-(defconst mime-module-version '("SEMI" "Namerikawa" 1 6 0)
+(defconst mime-user-interface-version '("SEMI" "Mizuhashi" 1 7 0)
   "Implementation name, version name and numbers of MIME-kernel package.")
 
 (autoload 'mule-caesar-region "mule-caesar"
@@ -248,20 +248,6 @@ FUNCTION.")
 ;;; @ Other Utility
 ;;;
 
-(defun call-after-loaded (module func &optional hook-name)
-  "If MODULE is provided, then FUNC is called.
-Otherwise func is set to MODULE-load-hook.
-If optional argument HOOK-NAME is specified,
-it is used as hook to set."
-  (if (featurep module)
-      (funcall func)
-    (or hook-name
-       (setq hook-name (intern (concat (symbol-name module) "-load-hook")))
-       )
-    (add-hook hook-name func)
-    ))
-
-
 (defvar mime-condition-type-alist
   '((preview . mime-preview-condition)
     (action . mime-acting-condition)))
index 10bc81a..e7decc8 100644 (file)
 (require 'semi-def)
 (require 'path-util)
 
+(defun call-after-loaded (module func &optional hook-name)
+  "If MODULE is provided, then FUNC is called.
+Otherwise func is set to MODULE-load-hook.
+If optional argument HOOK-NAME is specified,
+it is used as hook to set."
+  (if (featurep module)
+      (funcall func)
+    (or hook-name
+       (setq hook-name (intern (concat (symbol-name module) "-load-hook")))
+       )
+    (add-hook hook-name func)
+    ))
+
 
 ;; for image/* and X-Face
 (defvar mime-setup-enable-inline-image
                     (message-button . visible)))
         (mime-add-condition
          'action '((type . application)(subtype . pgp)
-                   (method . mime-method-for-application/pgp))
+                   (method . mime-view-application/pgp))
          'strict "mime-pgp")
         (mime-add-condition
          'action '((type . text)(subtype . x-pgp)
-                   (method . mime-method-for-application/pgp)))
+                   (method . mime-view-application/pgp)))
         
         (mime-add-condition
          'action '((type . multipart)(subtype . signed)
-                   (method . mime-method-to-verify-multipart/signed))
+                   (method . mime-verify-multipart/signed))
          'strict "mime-pgp")
         
         (mime-add-condition
          'action
          '((type . application)(subtype . pgp-signature)
-           (method . mime-method-to-verify-application/pgp-signature))
+           (method . mime-verify-application/pgp-signature))
          'strict "mime-pgp")
         
         (mime-add-condition
          'action
          '((type . application)(subtype . pgp-encrypted)
-           (method . mime-method-to-decrypt-application/pgp-encrypted))
+           (method . mime-decrypt-application/pgp-encrypted))
          'strict "mime-pgp")
         
         (mime-add-condition
          'action
          '((type . application)(subtype . pgp-keys)
-           (method . mime-method-to-add-application/pgp-keys))
+           (method . mime-add-application/pgp-keys))
          'strict "mime-pgp")
         ))
   )