2 ;;; $Id: tinyrich.el,v 3.0 1995/09/08 17:29:38 morioka Exp $
4 ;;; by MORIOKA Tomohiko <morioka@jaist.ac.jp>
5 ;;; modified by YAMATE Keiichirou <ics9118@sem1.info.osaka-cu.ac.jp>
8 (defvar mime/text/enriched-face-list
9 '("bold" "italic" "fixed" "underline"))
11 (cond ((and (>= emacs-major-version 19) window-system)
12 (defun mime/set-face-region (b e face)
13 (let ((sym (intern face)))
14 (if (member sym (face-list))
15 (let ((overlay (make-overlay b e)))
16 (overlay-put overlay 'face sym)
19 ((and (boundp 'NEMACS) NEMACS)
20 (setq mime/available-face-list
21 '("bold" "italic" "underline"))
22 (setq mime/available-face-attribute-alist
23 '(("bold" . inversed-region)
24 ("italic" . underlined-region)
25 ("underline" . underlined-region)
27 (defun mime/set-face-region (beg end sym)
28 (attribute-add-narrow-attribute
29 (cdr (assoc sym mime/available-face-attribute-alist))
33 (setq mime/text/richtext-face-list nil)
34 (defun mime/set-face-region (beg end sym)
38 (defun enriched-decode (beg end)
42 (narrow-to-region beg end)
44 (while (re-search-forward "[ \t]*\\(\n+\\)[ \t]*" nil t)
45 (let ((str (buffer-substring (match-beginning 1)
47 (if (string= str "\n")
49 (replace-match (substring str 1))
52 (let (cmd str (fb (point)) fe b e)
53 (while (re-search-forward "<\\(<\\|[^<>\n\r \t]+>\\)" nil t)
54 (setq b (match-beginning 0))
55 (setq cmd (buffer-substring b (match-end 0)))
56 (if (string= cmd "<<")
59 (setq cmd (downcase (substring cmd 1 (- (length cmd) 1))))
61 (cond ((string= cmd "param")
65 (if (search-forward "</param>" nil t)
74 ((member cmd mime/text/enriched-face-list)
78 (if (re-search-forward (concat "</" cmd ">") nil t)
85 (mime/set-face-region b e cmd)
87 (goto-char (point-max))
88 (if (not (eq (preceding-char) ?\n))
94 ;;; @ text/richtext <-> text/enriched converter
97 (defun richtext-to-enriched-region (beg end)
98 "Convert the region of text/richtext style to text/enriched style."
101 (narrow-to-region beg end)
102 (goto-char (point-min))
104 (while (re-search-forward "[ \t]*<comment>" nil t)
105 (setq b (match-beginning 0))
107 (if (re-search-forward "</comment>[ \t]*" nil t)
112 (goto-char (point-min))
113 (while (re-search-forward "\n\n+" nil t)
116 (goto-char (point-min))
117 (while (re-search-forward "[ \t\n]*<nl>[ \t\n]*" nil t)
118 (setq b (match-beginning 0))
119 (setq e (match-end 0))
121 (while (looking-at "[ \t\n]*<nl>[ \t\n]*")
122 (setq e (match-end 0))
131 (goto-char (point-min))
132 (while (search-forward "<lt>" nil t)
137 (defun enriched-to-richtext-region (beg end)
138 "Convert the region of text/enriched style to text/richtext style."
142 (and (search-forward "text/enriched")
143 (replace-match "text/richtext"))
144 (search-forward "\n\n")
145 (narrow-to-region (match-end 0) end)
147 (goto-char (point-min))
148 (while (re-search-forward "\n\n+" nil t)
149 (setq str (buffer-substring (match-beginning 0)
151 (setq n (1- (length str)))
154 (setq str (concat str "<nl>\n"))
159 (goto-char (point-min))
160 (while (search-forward "<<" nil t)
161 (replace-match "<lt>")
166 ;;; @ encoder and decoder
169 (defun richtext-decode (beg end)
171 (narrow-to-region beg end)
172 (richtext-to-enriched-region beg (point-max))
173 (enriched-decode beg (point-max))
176 ;; (defun richtext-encode (beg end)
178 ;; (narrow-to-region beg end)
179 ;; (enriched-encode beg (point-max))
180 ;; (enriched-to-richtext-region beg (point-max))