2 ;;; $Id: tinyrich.el,v 4.0 1995/09/10 13:35:41 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 ((string-match "XEmacs\\|Lucid" emacs-version)
12 (defun mime/set-face-region (b e face)
13 (let ((sym (intern face)))
14 (if (member sym (face-list))
15 (let ((overlay (make-extent b e)))
16 (set-extent-property overlay 'face sym)
19 ((and (>= emacs-major-version 19) window-system)
20 (defun mime/set-face-region (b e face)
21 (let ((sym (intern face)))
22 (if (member sym (face-list))
23 (let ((overlay (make-overlay b e)))
24 (overlay-put overlay 'face sym)
27 ((and (boundp 'NEMACS) NEMACS)
28 (setq mime/available-face-list
29 '("bold" "italic" "underline"))
30 (setq mime/available-face-attribute-alist
31 '(("bold" . inversed-region)
32 ("italic" . underlined-region)
33 ("underline" . underlined-region)
35 (defun mime/set-face-region (beg end sym)
36 (attribute-add-narrow-attribute
37 (cdr (assoc sym mime/available-face-attribute-alist))
41 (setq mime/text/richtext-face-list nil)
42 (defun mime/set-face-region (beg end sym)
46 (defun enriched-decode (beg end)
50 (narrow-to-region beg end)
52 (while (re-search-forward "[ \t]*\\(\n+\\)[ \t]*" nil t)
53 (let ((str (buffer-substring (match-beginning 1)
55 (if (string= str "\n")
57 (replace-match (substring str 1))
60 (let (cmd str (fb (point)) fe b e)
61 (while (re-search-forward "<\\(<\\|[^<>\n\r \t]+>\\)" nil t)
62 (setq b (match-beginning 0))
63 (setq cmd (buffer-substring b (match-end 0)))
64 (if (string= cmd "<<")
67 (setq cmd (downcase (substring cmd 1 (- (length cmd) 1))))
69 (cond ((string= cmd "param")
73 (if (search-forward "</param>" nil t)
82 ((member cmd mime/text/enriched-face-list)
86 (if (re-search-forward (concat "</" cmd ">") nil t)
93 (mime/set-face-region b e cmd)
95 (goto-char (point-max))
96 (if (not (eq (preceding-char) ?\n))
102 ;;; @ text/richtext <-> text/enriched converter
105 (defun richtext-to-enriched-region (beg end)
106 "Convert the region of text/richtext style to text/enriched style."
109 (narrow-to-region beg end)
110 (goto-char (point-min))
112 (while (re-search-forward "[ \t]*<comment>" nil t)
113 (setq b (match-beginning 0))
115 (if (re-search-forward "</comment>[ \t]*" nil t)
120 (goto-char (point-min))
121 (while (re-search-forward "\n\n+" nil t)
124 (goto-char (point-min))
125 (while (re-search-forward "[ \t\n]*<nl>[ \t\n]*" nil t)
126 (setq b (match-beginning 0))
127 (setq e (match-end 0))
129 (while (looking-at "[ \t\n]*<nl>[ \t\n]*")
130 (setq e (match-end 0))
139 (goto-char (point-min))
140 (while (search-forward "<lt>" nil t)
145 (defun enriched-to-richtext-region (beg end)
146 "Convert the region of text/enriched style to text/richtext style."
150 (and (search-forward "text/enriched")
151 (replace-match "text/richtext"))
152 (search-forward "\n\n")
153 (narrow-to-region (match-end 0) end)
155 (goto-char (point-min))
156 (while (re-search-forward "\n\n+" nil t)
157 (setq str (buffer-substring (match-beginning 0)
159 (setq n (1- (length str)))
162 (setq str (concat str "<nl>\n"))
167 (goto-char (point-min))
168 (while (search-forward "<<" nil t)
169 (replace-match "<lt>")
174 ;;; @ encoder and decoder
177 (defun richtext-decode (beg end)
179 (narrow-to-region beg end)
180 (richtext-to-enriched-region beg (point-max))
181 (enriched-decode beg (point-max))
184 ;; (defun richtext-encode (beg end)
186 ;; (narrow-to-region beg end)
187 ;; (enriched-encode beg (point-max))
188 ;; (enriched-to-richtext-region beg (point-max))