tm 7.99.
[elisp/tm.git] / tm-enriched.el
1 ;;;
2 ;;; $Id: tm-rich.el,v 2.2 1994/10/31 07:44:51 morioka Exp $
3 ;;;
4 ;;;          by MORIOKA Tomohiko  <morioka@jaist.ac.jp>
5 ;;; modified by YAMATE Keiichirou <ics9118@sem1.info.osaka-cu.ac.jp>
6 ;;;
7
8 (provide 'tm-enriched)
9
10 (require 'tm-view)
11
12 (defvar mime/text/enriched-face-list
13   '("bold" "italic" "fixed" "underline"))
14
15 (cond ((and (>= (string-to-int emacs-version) 19) window-system)
16        (require 'hilit19)
17        (defun mime/set-face-region (b e face)
18          (let ((sym (intern face)))
19            (if (eq sym 'italic)
20                (setq sym 'modeline)
21              )
22            (if (member sym (face-list))
23                (progn
24                  (hilit-unhighlight-region b e)
25                  (hilit-region-set-face b e sym)
26                  ))))
27        )
28       ((and (boundp 'NEMACS) NEMACS)
29        (setq mime/text/enriched-face-list
30              '("bold" "italic" "underline"))
31        (setq mime/text/enriched-face-attribute-alist
32              '(("bold"      . inversed-region)
33                ("italic"    . underlined-region)
34                ("underline" . underlined-region)
35                ))
36        (defun mime/set-face-region (beg end sym)
37          (attribute-add-narrow-attribute
38           (cdr (assoc sym mime/text/enriched-face-attribute-alist))
39           beg end))
40        )
41       (t
42        (setq mime/text/enriched-face-list
43              nil)
44        (defun mime/set-face-region (beg end sym)
45          )
46        ))
47
48 (defun mime/decode-text/enriched-region (beg end)
49   (interactive "*r")
50   (save-excursion
51     (save-restriction
52       (narrow-to-region beg end)
53       (while (re-search-forward "[\n]+" nil t)
54         (let ((str (buffer-substring (match-beginning 0)
55                                      (match-end 0))))
56           (if (string= str "\n")
57               (replace-match " ")
58             (replace-match (substring str 1))
59             )))
60       (goto-char beg)
61       (let (cmd str (fb (point)) fe b e)
62         (while (re-search-forward "<\\(<\\|[^<>\n\r \t]+>\\)" nil t)
63           (setq b (match-beginning 0))
64           (setq cmd (buffer-substring b (match-end 0)))
65           (if (string= cmd "<<")
66               (replace-match "<")
67             (replace-match "")
68             (setq cmd (downcase (substring cmd 1 (- (length cmd) 1))))
69             )
70           (cond ((string= cmd "param")
71                  (setq b (point))
72                  (save-excursion
73                    (save-restriction
74                      (if (search-forward "</param>" nil t)
75                          (progn
76                            (replace-match "")
77                            (setq e (point))
78                            )
79                        (setq e end)
80                        )))
81                  (delete-region b e)
82                  )
83                 ((member cmd mime/text/enriched-face-list)
84                  (setq b (point))
85                  (save-excursion
86                    (save-restriction
87                      (if (re-search-forward (concat "</" cmd ">") nil t)
88                          (progn
89                            (replace-match "")
90                            (setq e (point))
91                            )
92                        (setq e end)
93                        )))
94                  (mime/set-face-region b e cmd)
95                  )))
96         (goto-char (point-max))
97         (if (not (eq (preceding-char) ?\n))
98             (insert "\n")
99           )
100         ))))
101
102 (defun mime/decode-text/enriched (&optional ctl)
103   (interactive)
104   (save-excursion
105     (save-restriction
106       (let ((beg (point-min)) (end (point-max)))
107         (goto-char (point-min))
108         (if (search-forward "\n\n" nil t)
109             (setq beg (match-end 0))
110           )
111         (mime/decode-text/enriched-region beg end)
112         ))))
113
114
115 (set-alist 'mime/content-filter-alist
116            "text/enriched" (function mime/decode-text/enriched))
117
118 (set-alist 'mime/content-filter-alist
119            "text/richtext" (function mime/decode-text/enriched))
120