2 ;;; $Id: tm-rich.el,v 4.0 1995/03/12 14:31:58 morioka Exp $
4 ;;; by MORIOKA Tomohiko <morioka@jaist.ac.jp>
5 ;;; modified by YAMATE Keiichirou <ics9118@sem1.info.osaka-cu.ac.jp>
13 (defvar mime/text/richtext-face-list
14 '("bold" "italic" "fixed" "underline"))
16 (defvar mime/text/enriched-face-list
17 '("bold" "italic" "fixed" "underline"))
20 (cond ((and (>= (string-to-int emacs-version) 19) window-system)
22 (defun mime/set-face-region (b e face)
23 (let ((sym (intern face)))
27 (if (member sym (face-list))
29 (hilit-unhighlight-region b e)
30 (hilit-region-set-face b e sym)
33 ((and (boundp 'NEMACS) NEMACS)
34 (setq mime/available-face-list
35 '("bold" "italic" "underline"))
36 (setq mime/available-face-attribute-alist
37 '(("bold" . inversed-region)
38 ("italic" . underlined-region)
39 ("underline" . underlined-region)
41 (defun mime/set-face-region (beg end sym)
42 (attribute-add-narrow-attribute
43 (cdr (assoc sym mime/available-face-attribute-alist))
47 (setq mime/text/richtext-face-list
49 (defun mime/set-face-region (beg end sym)
57 (defun mime/decode-text/richtext-region (beg end)
61 (narrow-to-region beg end)
62 (while (search-forward "\n" nil t)
66 (let (cmd str (fb (point)) fe b e)
67 (while (re-search-forward "<[^<>\n\r \t]+>" nil t)
68 (setq b (match-beginning 0))
69 (setq cmd (buffer-substring (+ b 1)
72 (cond ((string= cmd "nl")
79 ((member (downcase cmd) mime/text/richtext-face-list)
83 (if (re-search-forward (concat "</" cmd ">") nil t)
90 (mime/set-face-region b e cmd)
92 (fill-region fb (point-max) t)
93 (goto-char (point-max))
94 (if (not (eq (preceding-char) ?\n))
99 (defun mime-viewer/filter-text/richtext (&optional ctype params)
103 (let ((beg (point-min)) (end (point-max)))
104 (goto-char (point-min))
105 (if (search-forward "\n\n" nil t)
106 (setq beg (match-end 0))
108 (mime/decode-text/richtext-region beg end)
115 (defun mime/decode-text/enriched-region (beg end)
119 (narrow-to-region beg end)
120 (while (re-search-forward "[\n]+" nil t)
121 (let ((str (buffer-substring (match-beginning 0)
123 (if (string= str "\n")
125 (replace-match (substring str 1))
128 (let (cmd str (fb (point)) fe b e)
129 (while (re-search-forward "<\\(<\\|[^<>\n\r \t]+>\\)" nil t)
130 (setq b (match-beginning 0))
131 (setq cmd (buffer-substring b (match-end 0)))
132 (if (string= cmd "<<")
135 (setq cmd (downcase (substring cmd 1 (- (length cmd) 1))))
137 (cond ((string= cmd "param")
141 (if (search-forward "</param>" nil t)
150 ((member cmd mime/text/enriched-face-list)
154 (if (re-search-forward (concat "</" cmd ">") nil t)
161 (mime/set-face-region b e cmd)
163 (goto-char (point-max))
164 (if (not (eq (preceding-char) ?\n))
169 (defun mime-viewer/filter-text/enriched (&optional ctype params)
173 (let ((beg (point-min)) (end (point-max)))
174 (goto-char (point-min))
175 (if (search-forward "\n\n" nil t)
176 (setq beg (match-end 0))
178 (mime/decode-text/enriched-region beg end)
185 (set-alist 'mime-viewer/content-filter-alist
186 "text/richtext" (function mime-viewer/filter-text/richtext))
188 (set-alist 'mime-viewer/content-filter-alist
189 "text/enriched" (function mime-viewer/filter-text/enriched))