From b5c101682bb576ae78b6fa5f95f6878c16f7a4a6 Mon Sep 17 00:00:00 2001 From: morioka Date: Sat, 21 Mar 1998 21:20:02 +0000 Subject: [PATCH] (mime-preview-condition): New variable. (mime-view-body-visible-p): Use `mime-preview-condition' instead of `mime-view-body-visible-condition'; abolish variable `mime-view-body-visible-condition'. (mime-view-insert-message/partial-button): Add argument `situation'. (mime-view-display-entity): Use `mime-preview-condition' instead of `mime-view-content-filter-alist'; don't hard-coding for `message/partial-button'; abolish variable `mime-view-content-filter-alist'. --- mime-view.el | 157 +++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 101 insertions(+), 56 deletions(-) diff --git a/mime-view.el b/mime-view.el index 2084128..4e05ae2 100644 --- a/mime-view.el +++ b/mime-view.el @@ -339,48 +339,86 @@ Each elements are regexp of field-name.") ;;; @@@ predicate function ;;; -(defvar mime-view-body-visible-condition - '(type - (nil) - (text) - (application subtype - (octet-stream encoding - (nil) - ("7bit") - ("8bit")) - (pgp) - (x-latex) - (x-selection) - (x-comment)) - (message subtype - (delivery-status))) - "Condition-tree to be able to display body of entity.") +(defvar mime-preview-condition nil + "Condition-tree about how to display entity.") + +(ctree-set-calist-strictly + 'mime-preview-condition '((type . application)(subtype . octet-stream) + (encoding . nil) + (body . visible))) +(ctree-set-calist-strictly + 'mime-preview-condition '((type . application)(subtype . octet-stream) + (encoding . "7bit") + (body . visible))) +(ctree-set-calist-strictly + 'mime-preview-condition '((type . application)(subtype . octet-stream) + (encoding . "8bit") + (body . visible))) + +(ctree-set-calist-strictly + 'mime-preview-condition '((type . application)(subtype . pgp) + (body . visible))) + +(ctree-set-calist-strictly + 'mime-preview-condition '((type . application)(subtype . x-latex) + (body . visible))) + +(ctree-set-calist-strictly + 'mime-preview-condition '((type . application)(subtype . x-selection) + (body . visible))) + +(ctree-set-calist-strictly + 'mime-preview-condition '((type . application)(subtype . x-comment) + (body . visible))) + +(ctree-set-calist-strictly + 'mime-preview-condition '((type . message)(subtype . delivery-status) + (body . visible))) + +(ctree-set-calist-strictly + 'mime-preview-condition '((body . visible) + (body-filter . mime-view-filter-for-text/plain))) + +(ctree-set-calist-strictly + 'mime-preview-condition '((type . nil) + (body . visible) + (body-filter . mime-view-filter-for-text/plain))) + +(ctree-set-calist-strictly + 'mime-preview-condition '((type . text)(subtype . enriched) + (body . visible) + (body-filter + . mime-view-filter-for-text/enriched))) + +(ctree-set-calist-strictly + 'mime-preview-condition '((type . text)(subtype . richtext) + (body . visible) + (body-filter + . mime-view-filter-for-text/richtext))) + +(ctree-set-calist-strictly + 'mime-preview-condition '((type . text)(subtype . t) + (body . visible) + (body-filter . mime-view-filter-for-text/plain))) + +(ctree-set-calist-strictly + 'mime-preview-condition '((type . message)(subtype . partial) + (body-presentation-method + . mime-view-insert-message/partial-button))) (defun mime-view-body-visible-p (entity message-info) "Return non-nil if body of ENTITY is visible." - (ctree-match-calist - mime-view-body-visible-condition - (list* (cons 'type (mime-entity-media-type entity)) - (cons 'subtype (mime-entity-media-subtype entity)) - (cons 'encoding (mime-entity-encoding entity)) - (cons 'major-mode major-mode) - (mime-entity-parameters entity)))) + (ctree-match-calist mime-preview-condition + (list* (cons 'type (mime-entity-media-type entity)) + (cons 'subtype (mime-entity-media-subtype entity)) + (cons 'encoding (mime-entity-encoding entity)) + (cons 'major-mode major-mode) + (mime-entity-parameters entity)))) ;;; @@@ entity filter ;;; -(defvar mime-view-content-filter-alist - '(("text/enriched" . mime-view-filter-for-text/enriched) - ("text/richtext" . mime-view-filter-for-text/richtext) - (t . mime-view-filter-for-text/plain) - ) - "Alist of media-types vs. corresponding MIME-preview filter functions. -Each element looks like (TYPE/SUBTYPE . FUNCTION) or (t . FUNCTION). -TYPE/SUBTYPE is a string of media-type and FUNCTION is a filter -function. t means default media-type.") - - (autoload 'mime-view-filter-for-text/plain "mime-text") (autoload 'mime-view-filter-for-text/enriched "mime-text") (autoload 'mime-view-filter-for-text/richtext "mime-text") @@ -412,7 +450,7 @@ if it is not nil.") \[[ Please press `v' key in this buffer. ]]" )) -(defun mime-view-insert-message/partial-button () +(defun mime-view-insert-message/partial-button (&optional situation) (save-restriction (goto-char (point-max)) (if (not (search-backward "\n\n" nil t)) @@ -662,27 +700,34 @@ The compressed face will be piped to this command.") (goto-char (point-max)) (mime-view-insert-entity-button entity message-info subj) )) - (cond ((mime-view-body-visible-p entity message-info) - (save-restriction - (narrow-to-region (point-max)(point-max)) - (insert-buffer-substring mime-raw-buffer end-of-header end) - (let ((f (cdr (or (assoc ctype mime-view-content-filter-alist) - (assq t mime-view-content-filter-alist))))) - (and (functionp f) - (funcall f ctype params encoding)) - ))) - ((and (eq media-type 'message)(eq media-subtype 'partial)) - (mime-view-insert-message/partial-button) - ) - ((and (null entity-node-id) - (null (mime-entity-children message-info)) - ) - (goto-char (point-max)) - (mime-view-insert-entity-button entity message-info subj) - )) - (when (mime-view-entity-separator-visible-p entity message-info) - (goto-char (point-max)) - (insert "\n")) + (let* ((situation + (ctree-match-calist mime-preview-condition + (list* (cons 'type media-type) + (cons 'subtype media-subtype) + (cons 'encoding encoding) + (cons 'major-mode major-mode) + params))) + (body-filter (cdr (assq 'body-filter situation))) + (body-presentation-method + (cdr (assq 'body-presentation-method situation)))) + (cond ((functionp body-filter) + (save-restriction + (narrow-to-region (point-max)(point-max)) + (insert-buffer-substring mime-raw-buffer end-of-header end) + (funcall body-filter ctype params encoding) + )) + ((functionp body-presentation-method) + (funcall body-presentation-method situation) + ) + ((and (null entity-node-id) + (null (mime-entity-children message-info))) + (goto-char (point-max)) + (mime-view-insert-entity-button entity message-info subj) + )) + (when (mime-view-entity-separator-visible-p entity message-info) + (goto-char (point-max)) + (insert "\n")) + ) (setq ne (point-max)) (widen) (put-text-property nb ne 'mime-view-raw-buffer ibuf) -- 1.7.10.4