Sync up with SEMI 1.7.1.
[elisp/semi.git] / mime-view.el
index 5077e46..1a0dd3e 100644 (file)
@@ -27,9 +27,7 @@
 
 ;;; Code:
 
-(require 'std11)
-(require 'mime-lib)
-(require 'mime-parse)
+(require 'mime)
 (require 'semi-def)
 (require 'calist)
 (require 'alist)
 ;;; @ in raw-buffer (representation space)
 ;;;
 
-(defvar mime-raw-message-info nil
-  "Information about structure of message.
-Please use reference function `mime-entity-SLOT' to get value of SLOT.
-
-Following is a list of slots of the structure:
-
-buffer                 buffer includes this entity (buffer).
-node-id                        node-id (list of integers)
-header-start           minimum point of header in raw-buffer
-header-end             maximum point of header in raw-buffer
-body-start             minimum point of body in raw-buffer
-body-end               maximum point of body in raw-buffer
-content-type           content-type (content-type)
-content-disposition    content-disposition (content-disposition)
-encoding               Content-Transfer-Encoding (string or nil)
-children               entities included in this entity (list of entity)
-
-If an entity includes other entities in its body, such as multipart or
-message/rfc822, `mime-entity' structures of them are included in
-`children', so the `mime-entity' structure become a tree.")
-(make-variable-buffer-local 'mime-raw-message-info)
-
-
 (defvar mime-preview-buffer nil
   "MIME-preview buffer corresponding with the (raw) buffer.")
 (make-variable-buffer-local 'mime-preview-buffer)
@@ -122,15 +97,15 @@ This value is overridden by buffer local variable
                                             &optional message-info)
   "Return entity from ENTITY-NODE-ID in mime-raw-buffer.
 If optional argument MESSAGE-INFO is not specified,
-`mime-raw-message-info' is used."
+`mime-message-structure' is used."
   (mime-raw-find-entity-from-number (reverse entity-node-id) message-info))
 
 (defun mime-raw-find-entity-from-number (entity-number &optional message-info)
   "Return entity from ENTITY-NUMBER in mime-raw-buffer.
 If optional argument MESSAGE-INFO is not specified,
-`mime-raw-message-info' is used."
+`mime-message-structure' is used."
   (or message-info
-      (setq message-info mime-raw-message-info))
+      (setq message-info mime-message-structure))
   (if (eq entity-number t)
       message-info
     (let ((sn (car entity-number)))
@@ -145,9 +120,9 @@ If optional argument MESSAGE-INFO is not specified,
 (defun mime-raw-find-entity-from-point (point &optional message-info)
   "Return entity from POINT in mime-raw-buffer.
 If optional argument MESSAGE-INFO is not specified,
-`mime-raw-message-info' is used."
+`mime-message-structure' is used."
   (or message-info
-      (setq message-info mime-raw-message-info))
+      (setq message-info mime-message-structure))
   (if (and (<= (mime-entity-point-min message-info) point)
           (<= point (mime-entity-point-max message-info)))
       (let ((children (mime-entity-children message-info)))
@@ -199,16 +174,25 @@ mother-buffer."
 ;;; @ entity information
 ;;;
 
+(defsubst mime-entity-representation-type (entity)
+  (with-current-buffer (mime-entity-buffer entity)
+    (or mime-raw-representation-type
+       (cdr (or (assq major-mode mime-raw-representation-type-alist)
+                (assq t mime-raw-representation-type-alist))))))
+
+(defsubst mime-entity-cooked-p (entity)
+  (eq (mime-entity-representation-type entity) 'cooked))
+
 (defsubst mime-entity-parent (entity &optional message-info)
   "Return mother entity of ENTITY.
 If optional argument MESSAGE-INFO is not specified,
-`mime-raw-message-info' in buffer of ENTITY is used."
+`mime-message-structure' in buffer of ENTITY is used."
   (mime-raw-find-entity-from-node-id
    (cdr (mime-entity-node-id entity))
    (or message-info
        (save-excursion
         (set-buffer (mime-entity-buffer entity))
-        mime-raw-message-info))))
+        mime-message-structure))))
 
 (defun mime-entity-situation (entity)
   "Return situation of ENTITY."
@@ -258,22 +242,13 @@ If optional argument MESSAGE-INFO is not specified,
 
 (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))
-            (std11-strip-quoted-string ret)
-            ))
-      (let ((ret (mime-entity-content-type entity)))
-       (and ret
-            (setq ret
-                  (cdr
-                   (let ((param (mime-content-type-parameters ret)))
-                     (or (assoc "name" param)
-                         (assoc "x-name" param))
-                     )))
-            (std11-strip-quoted-string ret)
-            ))
-      ))
+      (mime-content-disposition-filename
+       (mime-entity-content-disposition entity))
+      (cdr (let ((param (mime-content-type-parameters
+                        (mime-entity-content-type entity))))
+            (or (assoc "name" param)
+                (assoc "x-name" param))
+            ))))
 
 (defun mime-view-entity-title (entity)
   (or (mime-entity-read-field entity 'Content-Description)
@@ -285,21 +260,21 @@ If optional argument MESSAGE-INFO is not specified,
 (defsubst mime-raw-point-to-entity-node-id (point &optional message-info)
   "Return entity-node-id from POINT in mime-raw-buffer.
 If optional argument MESSAGE-INFO is not specified,
-`mime-raw-message-info' is used."
+`mime-message-structure' is used."
   (mime-entity-node-id (mime-raw-find-entity-from-point point message-info)))
 
 (defsubst mime-raw-point-to-entity-number (point &optional message-info)
   "Return entity-number from POINT in mime-raw-buffer.
 If optional argument MESSAGE-INFO is not specified,
-`mime-raw-message-info' is used."
+`mime-message-structure' is used."
   (mime-entity-number (mime-raw-find-entity-from-point point message-info)))
 
 (defun mime-raw-flatten-message-info (&optional message-info)
   "Return list of entity in mime-raw-buffer.
 If optional argument MESSAGE-INFO is not specified,
-`mime-raw-message-info' is used."
+`mime-message-structure' is used."
   (or message-info
-      (setq message-info mime-raw-message-info))
+      (setq message-info mime-message-structure))
   (let ((dest (list message-info))
        (rcl (mime-entity-children message-info)))
     (while rcl
@@ -810,15 +785,13 @@ The compressed face will be piped to this command.")
       (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)
-            )))
+         (mime-insert-decoded-header entity
+                                     mime-view-ignored-field-list
+                                     mime-view-visible-field-list
+                                     (if (mime-entity-cooked-p entity)
+                                         nil
+                                       default-mime-charset))
+         )
        (goto-char (point-max))
        (insert "\n")
        (run-hooks 'mime-display-header-hook)
@@ -995,7 +968,7 @@ The compressed face will be piped to this command.")
        (setq preview-buffer
              (concat "*Preview-" (buffer-name raw-buffer) "*")))
     (set-buffer raw-buffer)
-    (setq mime-raw-message-info (mime-parse-message))
+    (mime-parse-buffer)
     (setq mime-preview-buffer preview-buffer)
     (let ((inhibit-read-only t))
       (switch-to-buffer preview-buffer)