+ (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)))
+ (message-button
+ (cdr (assq 'message-button situation)))
+ (body-presentation-method
+ (cdr (assq 'body-presentation-method situation))))
+ (when (eq message-button 'visible)
+ (goto-char (point-max))
+ (mime-view-insert-entity-button message-info message-info subj)
+ )
+ (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 mime-raw-buffer end-of-header end)
+ (funcall body-filter situation)
+ )))
+ ((functionp body-presentation-method)
+ (funcall body-presentation-method situation)
+ )
+ ((null (mime-entity-children message-info))
+ (goto-char (point-max))
+ (mime-view-insert-entity-button message-info message-info subj)
+ ))
+ (setq ne (point-max))
+ (widen)
+ (put-text-property nb ne 'mime-view-raw-buffer ibuf)
+ (put-text-property nb ne 'mime-view-entity message-info)
+ (goto-char ne)
+ (let ((children (mime-entity-children message-info))
+ (default-situation
+ (cdr (assq 'childrens-situation situation))))
+ (while children
+ (mime-view-display-entity (car children) message-info ibuf obuf
+ default-situation)
+ (setq children (cdr children))
+ )))))
+
+(defun mime-view-display-entity (entity message-info ibuf obuf
+ default-situation)
+ (let* ((start (mime-entity-point-min entity))
+ (end (mime-entity-point-max entity))
+ (media-type (mime-entity-media-type entity))
+ (media-subtype (mime-entity-media-subtype entity))
+ (params (mime-entity-parameters entity))
+ (encoding (mime-entity-encoding entity))
+ end-of-header e nb ne subj)
+ (set-buffer ibuf)
+ (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 params encoding)))
+ )
+ (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)
+ (append params
+ default-situation))))
+ (button-is-invisible
+ (eq (cdr (assq 'entity-button situation)) 'invisible))
+ (header-is-visible
+ (eq (cdr (assq 'header situation)) 'visible))
+ (body-presentation-method
+ (cdr (assq 'body-presentation-method situation))))
+ (set-buffer obuf)
+ (setq nb (point))
+ (narrow-to-region nb nb)
+ (or button-is-invisible
+ (if (mime-view-entity-button-visible-p entity message-info)
+ (mime-view-insert-entity-button entity message-info subj)
+ ))
+ (if header-is-visible
+ (save-restriction
+ (narrow-to-region (point)(point))
+ (insert-buffer-substring mime-raw-buffer start end-of-header)
+ (let ((f (cdr (assq mime-preview-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)
+ ))
+ (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 mime-raw-buffer end-of-header end)
+ (funcall body-filter situation)
+ )))
+ ((functionp body-presentation-method)
+ (funcall body-presentation-method situation)
+ ))
+ (or header-is-visible
+ body-presentation-method
+ (progn
+ (goto-char (point-max))
+ (insert "\n")
+ ))
+ (setq ne (point-max))
+ (widen)
+ (put-text-property nb ne 'mime-view-raw-buffer ibuf)
+ (put-text-property nb ne 'mime-view-entity entity)
+ (goto-char ne)
+ (let ((children (mime-entity-children entity))
+ (default-situation
+ (cdr (assq 'childrens-situation situation))))
+ (while children
+ (mime-view-display-entity (car children) message-info ibuf obuf
+ default-situation)
+ (setq children (cdr children))
+ )))))
+
+(defun mime-raw-get-uu-filename (param &optional encoding)