2 ;;; $Id: tm-rich.el,v 6.2 1995/06/24 05:04:05 morioka Exp $
4 ;;; by MORIOKA Tomohiko <morioka@jaist.ac.jp>
5 ;;; modified by YAMATE Keiichirou <ics9118@sem1.info.osaka-cu.ac.jp>
10 (defvar mime/text/richtext-face-list
11 '("bold" "italic" "fixed" "underline"))
13 (defvar mime/text/enriched-face-list
14 '("bold" "italic" "fixed" "underline"))
17 (cond ((and (>= emacs-major-version 19) window-system)
18 (defun mime/set-face-region (b e face)
19 (let ((sym (intern face)))
20 (if (member sym (face-list))
21 (let ((overlay (make-overlay b e)))
22 (overlay-put overlay 'face 'bold)
25 ((and (boundp 'NEMACS) NEMACS)
26 (setq mime/available-face-list
27 '("bold" "italic" "underline"))
28 (setq mime/available-face-attribute-alist
29 '(("bold" . inversed-region)
30 ("italic" . underlined-region)
31 ("underline" . underlined-region)
33 (defun mime/set-face-region (beg end sym)
34 (attribute-add-narrow-attribute
35 (cdr (assoc sym mime/available-face-attribute-alist))
39 (setq mime/text/richtext-face-list nil)
40 (defun mime/set-face-region (beg end sym)
48 (defun mime/decode-text/richtext-region (beg end)
52 (narrow-to-region beg end)
53 (while (search-forward "\n" nil t)
57 (let (cmd str (fb (point)) fe b e)
58 (while (re-search-forward "<[^<>\n\r \t]+>" nil t)
59 (setq b (match-beginning 0))
60 (setq cmd (buffer-substring (+ b 1)
63 (cond ((string= cmd "nl")
70 ((member (downcase cmd) mime/text/richtext-face-list)
74 (if (re-search-forward (concat "</" cmd ">") nil t)
81 (mime/set-face-region b e cmd)
83 (fill-region fb (point-max) t)
84 (goto-char (point-max))
85 (if (not (eq (preceding-char) ?\n))
90 (defun mime-viewer/filter-text/richtext (ctype params encoding)
91 (let* ((mode mime::preview/original-major-mode)
92 (m (assq mode mime-viewer/code-converter-alist))
93 (charset (assoc "charset" params))
96 (if (and m (fboundp (setq m (cdr m))))
97 (funcall m beg (point-max) charset encoding)
98 (mime-viewer/default-code-convert-region beg (point-max)
101 (mime/decode-text/richtext-region beg (point-max))
108 (defun mime/decode-text/enriched-region (beg end)
112 (narrow-to-region beg end)
113 (while (re-search-forward "[\n]+" nil t)
114 (let ((str (buffer-substring (match-beginning 0)
116 (if (string= str "\n")
118 (replace-match (substring str 1))
121 (let (cmd str (fb (point)) fe b e)
122 (while (re-search-forward "<\\(<\\|[^<>\n\r \t]+>\\)" nil t)
123 (setq b (match-beginning 0))
124 (setq cmd (buffer-substring b (match-end 0)))
125 (if (string= cmd "<<")
128 (setq cmd (downcase (substring cmd 1 (- (length cmd) 1))))
130 (cond ((string= cmd "param")
134 (if (search-forward "</param>" nil t)
143 ((member cmd mime/text/enriched-face-list)
147 (if (re-search-forward (concat "</" cmd ">") nil t)
154 (mime/set-face-region b e cmd)
156 (goto-char (point-max))
157 (if (not (eq (preceding-char) ?\n))
162 (defun mime-viewer/filter-text/enriched (ctype params encoding)
163 (let* ((mode mime::preview/original-major-mode)
164 (m (assq mode mime-viewer/code-converter-alist))
165 (charset (assoc "charset" params))
168 (if (and m (fboundp (setq m (cdr m))))
169 (funcall m beg (point-max) charset encoding)
170 (mime/code-convert-region-to-emacs beg (point-max)
173 (mime/decode-text/enriched-region beg (point-max))
180 (set-alist 'mime-viewer/content-filter-alist
181 "text/richtext" (function mime-viewer/filter-text/richtext))
183 (set-alist 'mime-viewer/content-filter-alist
184 "text/enriched" (function mime-viewer/filter-text/enriched))
187 (run-hooks 'tm-rich-load-hook)