This commit was generated by cvs2svn to compensate for changes in r377,
[elisp/tm.git] / tm-view.el
index e70b578..319ff98 100644 (file)
@@ -8,7 +8,7 @@
 ;;; modified by Steven L. Baur <steve@miranova.com>
 ;;; Maintainer: MORIOKA Tomohiko <morioka@jaist.ac.jp>
 ;;; Created: 1994/7/13 (1994/8/31 obsolete tm-body.el)
-;;; Version: $Revision: 7.54 $
+;;; Version: $Revision: 7.61 $
 ;;; Keywords: mail, news, MIME, multimedia
 ;;;
 ;;; This file is part of tm (Tools for MIME).
 (require 'tm-ew-d)
 (require 'tm-def)
 (require 'tm-parse)
+(require 'tm-text)
 
 
 ;;; @ version
 ;;;
 
 (defconst mime-viewer/RCS-ID
-  "$Id: tm-view.el,v 7.54 1996/04/25 22:43:33 morioka Exp $")
+  "$Id: tm-view.el,v 7.61 1996/05/15 16:52:21 morioka Exp $")
 
 (defconst mime-viewer/version (get-version-string mime-viewer/RCS-ID))
 (defconst mime/viewer-version mime-viewer/version)
@@ -195,12 +196,13 @@ Each elements are regexp of field-name. [tm-view.el]")
 ;;; @@ content subject
 ;;;
 
-(defun mime-viewer/insert-content-subject
-  (rcnum cinfo ctype params subj)
+(defun mime-preview/insert-content-subject
+  (rcnum cinfo ctype params subj encoding)
   (save-restriction
     (narrow-to-region (point)(point))
     (insert
      (let ((access-type (assoc "access-type" params))
+          (charset (assoc "charset" params))
           (num (or (assoc-value "x-part-number" params)
                    (if (consp rcnum)
                        (mapconcat (function
@@ -210,36 +212,46 @@ Each elements are regexp of field-name. [tm-view.el]")
                                   (reverse rcnum) ".")
                      "0"))
                ))
-       (if access-type
-          (let ((server (assoc "server" params)))
-            (setq access-type (cdr access-type))
-            (if server
-                (format "[%s %s ([%s] %s)]\n" num subj
-                        access-type (cdr server))
-              (let ((site (assoc-value "site" params))
-                    (dir (assoc-value "directory" params))
-                    )
-                (format "[%s %s ([%s] %s:%s)]\n" num subj
-                        access-type site dir)
-                )))
-        (format "[%s %s (%s)]\n" num subj ctype)
-        )))
+       (cond (access-type
+             (let ((server (assoc "server" params)))
+               (setq access-type (cdr access-type))
+               (if server
+                   (format "[%s %s ([%s] %s)]\n" num subj
+                           access-type (cdr server))
+                 (let ((site (assoc-value "site" params))
+                       (dir (assoc-value "directory" params))
+                       )
+                   (format "[%s %s ([%s] %s:%s)]\n" num subj
+                           access-type site dir)
+                   )))
+             )
+            ((setq charset (cdr charset))
+             (if encoding
+                 (format "[%s %s (%s; %s <%s>)]\n"
+                         num subj ctype charset encoding)
+               (format "[%s %s (%s; %s)]\n" num subj ctype charset)
+               )
+             )
+            (t
+             (format "[%s %s (%s)]\n" num subj ctype)
+             )
+            )))
     (tm:add-button (point-min)(1- (point-max))
                   (function mime-viewer/play-content))
     ))
 
-(defun mime-viewer/default-content-subject-function
-  (rcnum cinfo ctype params subj)
+(defun mime-preview/default-content-subject-function
+  (rcnum cinfo ctype params subj encoding)
   (if (and (consp rcnum)
           (not (member
                 ctype
                 mime-viewer/content-subject-omitting-Content-Type-list)))
-      (mime-viewer/insert-content-subject
-       rcnum cinfo ctype params subj)
+      (mime-preview/insert-content-subject
+       rcnum cinfo ctype params subj encoding)
     ))
 
-(defvar mime-viewer/content-subject-function
-  (function mime-viewer/default-content-subject-function))
+(defvar mime-preview/content-subject-function
+  (function mime-preview/default-content-subject-function))
 
 
 ;;; @@ content header filter
@@ -276,11 +288,11 @@ Each elements are regexp of field-name. [tm-view.el]")
 ;;; @@ content filter
 ;;;
 
-(defvar mime-viewer/content-filter-alist nil)
-
-(defun mime-viewer/default-content-filter (rcnum cinfo ctype params subj)
-  (mime-viewer/filter-text/plain ctype params encoding)
-  )
+(defvar mime-viewer/content-filter-alist
+  '(("text/enriched" . mime-preview/filter-for-text/enriched)
+    ("text/richtext" . mime-preview/filter-for-text/richtext)
+    (t . mime-preview/filter-for-text/plain)
+    ))
 
 
 ;;; @@ content separator
@@ -405,41 +417,36 @@ The compressed face will be piped to this command.")
     ret))
 
 (defun mime-viewer/make-preview-buffer (&optional obuf)
-  (let ((cinfo mime::article/content-info)
-       (the-buf (current-buffer))
-       (mode major-mode)
-       pcl dest)
+  (let* ((cinfo mime::article/content-info)
+        (pcl (mime/flatten-content-info cinfo))
+        (dest (make-list (length pcl) nil))
+        (the-buf (current-buffer))
+        (mode major-mode)
+        )
     (or obuf
-       (setq obuf (concat "*Preview-" (buffer-name the-buf) "*"))
-       )
-    (setq pcl (mime/flatten-content-info cinfo))
-    (let ((bf (get-buffer obuf)))
-      (if bf
-         (progn
-           (set-buffer obuf)
-           (setq buffer-read-only nil)
-           (erase-buffer)
-           )
-       (setq bf (get-buffer-create obuf))
-       (set-buffer obuf)
-       ))
+       (setq obuf (concat "*Preview-" (buffer-name the-buf) "*")))
+    (set-buffer (get-buffer-create obuf))
+    (setq buffer-read-only nil)
+    (widen)
+    (erase-buffer)
     (setq mime::preview/article-buffer the-buf)
     (setq mime::preview/original-major-mode mode)
     (setq major-mode 'mime/viewer-mode)
     (setq mode-name "MIME-View")
-    (while pcl
-      (setq dest
-           (cons (mime-viewer/display-content (car pcl) cinfo the-buf obuf)
-                 dest)
-           pcl (cdr pcl))
-      )
+    (let ((drest dest))
+      (while pcl
+       (setcar drest
+               (mime-preview/display-content (car pcl) cinfo the-buf obuf))
+       (setq pcl (cdr pcl)
+             drest (cdr drest))
+       ))
     (set-buffer-modified-p nil)
     (setq buffer-read-only t)
     (set-buffer the-buf)
-    (list obuf (nreverse dest))
+    (list obuf dest)
     ))
 
-(defun mime-viewer/display-content (content cinfo ibuf obuf)
+(defun mime-preview/display-content (content cinfo ibuf obuf)
   (let* ((beg (mime::content-info/point-min content))
         (end (mime::content-info/point-max content))
         (ctype (mime::content-info/type content))
@@ -464,36 +471,33 @@ The compressed face will be piped to this command.")
     (set-buffer obuf)
     (setq nb (point))
     (narrow-to-region nb nb)
-    (funcall mime-viewer/content-subject-function
-            rcnum cinfo ctype params subj)
-    (set-buffer ibuf)
+    (funcall mime-preview/content-subject-function
+            rcnum cinfo ctype params subj encoding)
     (if (mime-viewer/header-visible-p rcnum cinfo ctype)
-       (mime-viewer/display-header beg he obuf)
+       (mime-preview/display-header beg he)
       )
     (if (and (null rcnum)
             (member
              ctype mime-viewer/content-subject-showing-Content-Type-list))
        (save-excursion
-         (set-buffer obuf)
          (goto-char (point-max))
-         (mime-viewer/insert-content-subject rcnum cinfo ctype params subj)
+         (mime-preview/insert-content-subject
+          rcnum cinfo ctype params subj encoding)
          ))
     (cond ((mime-viewer/body-visible-p rcnum cinfo ctype)
-          (mime-viewer/display-body he end obuf
-                                    rcnum cinfo ctype params subj encoding)
+          (mime-preview/display-body he end
+                                     rcnum cinfo ctype params subj encoding)
           )
          ((equal ctype "message/partial")
-          (mime-viewer/display-message/partial obuf)
+          (mime-preview/display-message/partial)
           )
          ((and (null rcnum)
                (null (mime::content-info/children cinfo))
                )
-          (set-buffer obuf)
           (goto-char (point-max))
-          (mime-viewer/insert-content-subject rcnum cinfo ctype params subj)
-          )
-         (t (set-buffer obuf))
-         )
+          (mime-preview/insert-content-subject
+           rcnum cinfo ctype params subj encoding)
+          ))
     (mime-viewer/default-content-separator rcnum cinfo ctype params subj)
     (prog1
        (progn
@@ -504,40 +508,32 @@ The compressed face will be piped to this command.")
       (goto-char ne)
       )))
 
-(defun mime-viewer/display-header (beg end obuf)
-  (let ((str (buffer-substring beg end))
-       (f (assq major-mode mime-viewer/content-header-filter-alist))
-       )
-    (save-excursion
-      (set-buffer obuf)
-      (save-restriction
-       (narrow-to-region (point)(point))
-       (insert str)
-       (if (and f (setq f (cdr f)))
-           (funcall f)
-         (mime-viewer/default-content-header-filter)
-         )
-       (run-hooks 'mime-viewer/content-header-filter-hook)
-       ))))
+(defun mime-preview/display-header (beg end)
+  (save-restriction
+    (narrow-to-region (point)(point))
+    (insert-buffer-substring mime::preview/article-buffer beg end)
+    (let ((f (cdr (assq mime::preview/original-major-mode
+                       mime-viewer/content-header-filter-alist))))
+      (if (functionp f)
+         (funcall f)
+       (mime-viewer/default-content-header-filter)
+       ))
+    (run-hooks 'mime-viewer/content-header-filter-hook)
+    ))
 
-(defun mime-viewer/display-body (beg end obuf
-                                    rcnum cinfo ctype params subj encoding)
-  (let ((str (buffer-substring beg end))
-       be)
-    (set-buffer obuf)
-    (save-restriction
-      (setq be (point-max))
-      (narrow-to-region be be)
-      (insert str)
-      (let ((f (assoc-value ctype mime-viewer/content-filter-alist)))
-       (if (and f (fboundp f))
-           (funcall f ctype params encoding)
-         (mime-viewer/default-content-filter rcnum cinfo ctype params subj)
-         ))
+(defun mime-preview/display-body (beg end
+                                     rcnum cinfo ctype params subj encoding)
+  (save-restriction
+    (narrow-to-region (point-max)(point-max))
+    (insert-buffer-substring mime::preview/article-buffer beg end)
+    (let ((f (cdr (or (assoc ctype mime-viewer/content-filter-alist)
+                     (assq t mime-viewer/content-filter-alist)))))
+      (and (functionp f)
+          (funcall f ctype params encoding)
+          )
       )))
 
-(defun mime-viewer/display-message/partial (obuf)
-  (set-buffer obuf)
+(defun mime-preview/display-message/partial ()
   (save-restriction
     (goto-char (point-max))
     (if (not (search-backward "\n\n" nil t))
@@ -663,59 +659,6 @@ The compressed face will be piped to this command.")
     ))
 
 
-;;; @ content filter
-;;;
-
-(defvar mime-viewer/code-converter-alist
-  '((mime/show-message-mode      . mime/code-convert-region-to-emacs)
-    (mime/temporary-message-mode . mime/code-convert-region-to-emacs)
-    ))
-
-(defun mime-viewer/default-code-convert-region
-  (beg end charset &optional encoding)
-  (if (member encoding '("quoted-printable" "base64"))
-      (mime/code-convert-region-to-emacs beg (point-max) charset)
-    ))
-
-(defun mime-preview/decode-text-region (beg end charset encoding)
-  (mime/decode-region encoding beg end)
-  (let* ((mode mime::preview/original-major-mode)
-        (m (or (save-excursion
-                 (set-buffer mime::preview/article-buffer)
-                 mime::article/code-converter)
-               (cdr (assq mode mime-viewer/code-converter-alist))
-               ))
-        )
-    (if (and m (fboundp m))
-       (funcall m beg (point-max) charset encoding)
-      (mime-viewer/default-code-convert-region
-       beg (point-max) charset encoding)
-      )))
-
-(defun mime-viewer/filter-text/plain (ctype params encoding)
-  (let ((charset (cdr (assoc "charset" params)))
-       (beg (point-min)) (end (point-max))
-       )
-    (mime-preview/decode-text-region beg end charset encoding)
-    )
-  (goto-char (point-max))
-  (if (not (eq (char-after (1- (point))) ?\n))
-      (insert "\n")
-    )
-  (if browse-url-browser-function
-      (progn
-       (goto-char (point-min))
-       (while (re-search-forward tm:URL-regexp nil t)
-         (let ((beg (match-beginning 0))
-               (end (match-end 0)))
-           (tm:add-button beg end
-                          (function tm:browse-url)
-                          (list (buffer-substring beg end))))
-         )))
-  (run-hooks 'mime-viewer/plain-text-preview-hook)
-  )
-
-
 ;;; @ MIME viewer mode
 ;;;