tm 5.16
[elisp/tm.git] / tm-rich.el
1 ;;;
2 ;;; $Id: tm-rich.el,v 2.1 1994/10/31 05:05: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-rich)
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 (search-forward "\n" nil t)
54         (replace-match "")
55         )
56       (goto-char beg)
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)
61                                       (- (match-end 0) 1)))
62           (replace-match "")
63           (cond ((string= cmd "nl")
64                  (if (= fb b)
65                      (insert "\n")
66                    (fill-region fb b t)
67                    )
68                  (setq fb (point))
69                  )
70                 ((member (downcase cmd) mime/text/enriched-face-list)
71                  (setq b (point))
72                  (save-excursion
73                    (save-restriction
74                      (if (re-search-forward (concat "</" cmd ">") nil t)
75                          (progn
76                            (replace-match "")
77                            (setq e (point))
78                            )
79                        (setq e end)
80                        )))
81                  (mime/set-face-region b e cmd)
82                  )))
83         (fill-region fb (point-max) t)
84         (goto-char (point-max))
85         (if (not (eq (char-before (point)) ?\n))
86             (insert "\n")
87           )
88         ))))
89
90 (defun mime/decode-text/enriched (&optional ctl)
91   (interactive)
92   (save-excursion
93     (save-restriction
94       (let ((beg (point-min)) (end (point-max)))
95         (goto-char (point-min))
96         (if (search-forward "\n\n" nil t)
97             (setq beg (match-end 0))
98           )
99         (mime/decode-text/enriched-region beg end)
100         ))))
101
102
103 (set-alist 'mime/content-filter-alist
104            "text/enriched" (function mime/decode-text/enriched))
105
106 (set-alist 'mime/content-filter-alist
107            "text/richtext" (function mime/decode-text/enriched))
108