tm 7.80.
[elisp/tm.git] / tinyrich.el
index 2253d64..3929205 100644 (file)
@@ -1,39 +1,17 @@
 ;;;
-;;; $Id: tinyrich.el,v 1.1 1995/07/05 16:21:36 morioka Exp $
+;;; $Id: tinyrich.el,v 5.0 1995/09/20 14:45:56 morioka Exp $
 ;;;
 ;;;          by MORIOKA Tomohiko  <morioka@jaist.ac.jp>
 ;;; modified by YAMATE Keiichirou <ics9118@sem1.info.osaka-cu.ac.jp>
 ;;;
 
-(defvar mime/text/enriched-face-list
-  '("bold" "italic" "fixed" "underline"))
-
-(cond ((and (>= emacs-major-version 19) window-system)
-       (defun mime/set-face-region (b e face)
-        (let ((sym (intern face)))
-          (if (member sym (face-list))
-              (let ((overlay (make-overlay b e)))
-                (overlay-put overlay 'face 'bold)
-                ))))
-       )
-      ((and (boundp 'NEMACS) NEMACS)
-       (setq mime/available-face-list
-            '("bold" "italic" "underline"))
-       (setq mime/available-face-attribute-alist
-            '(("bold"      . inversed-region)
-              ("italic"    . underlined-region)
-              ("underline" . underlined-region)
-              ))
-       (defun mime/set-face-region (beg end sym)
-        (attribute-add-narrow-attribute
-         (cdr (assoc sym mime/available-face-attribute-alist))
-         beg end))
-       )
-      (t
-       (setq mime/text/richtext-face-list nil)
-       (defun mime/set-face-region (beg end sym)
+(defvar mime-viewer/face-list-for-text/enriched
+  (cond ((and (>= emacs-major-version 19) window-system)
+        '(bold italic fixed underline)
         )
-       ))
+       ((and (boundp 'NEMACS) NEMACS)
+        '("bold" "italic" "underline")
+        )))
 
 (defun enriched-decode (beg end)
   (interactive "*r")
@@ -49,7 +27,7 @@
            (replace-match (substring str 1))
            )))
       (goto-char beg)
-      (let (cmd str (fb (point)) fe b e)
+      (let (cmd sym str (fb (point)) fe b e)
        (while (re-search-forward "<\\(<\\|[^<>\n\r \t]+>\\)" nil t)
          (setq b (match-beginning 0))
          (setq cmd (buffer-substring b (match-end 0)))
@@ -58,7 +36,8 @@
            (replace-match "")
            (setq cmd (downcase (substring cmd 1 (- (length cmd) 1))))
            )
-         (cond ((string= cmd "param")
+         (setq sym (intern cmd))
+         (cond ((eq sym 'param)
                 (setq b (point))
                 (save-excursion
                   (save-restriction
@@ -71,7 +50,7 @@
                       )))
                 (delete-region b e)
                 )
-               ((member cmd mime/text/enriched-face-list)
+               ((memq sym mime-viewer/face-list-for-text/enriched)
                 (setq b (point))
                 (save-excursion
                   (save-restriction
@@ -82,7 +61,7 @@
                           )
                       (setq e end)
                       )))
-                (mime/set-face-region b e cmd)
+                (tm:set-face-region b e sym)
                 )))
        (goto-char (point-max))
        (if (not (eq (preceding-char) ?\n))
          )
        ))))
 
+
+;;; @ text/richtext <-> text/enriched converter
+;;;
+
+(defun richtext-to-enriched-region (beg end)
+  "Convert the region of text/richtext style to text/enriched style."
+  (save-excursion
+    (save-restriction
+      (narrow-to-region beg end)
+      (goto-char (point-min))
+      (let (b e i)
+       (while (re-search-forward "[ \t]*<comment>" nil t)
+         (setq b (match-beginning 0))
+         (delete-region b
+                        (if (re-search-forward "</comment>[ \t]*" nil t)
+                            (match-end 0)
+                          (point-max)
+                          ))
+         )
+       (goto-char (point-min))
+       (while (re-search-forward "\n\n+" nil t)
+         (replace-match "\n")
+         )
+       (goto-char (point-min))
+       (while (re-search-forward "[ \t\n]*<nl>[ \t\n]*" nil t)
+         (setq b (match-beginning 0))
+         (setq e (match-end 0))
+         (setq i 1)
+         (while (looking-at "[ \t\n]*<nl>[ \t\n]*")
+           (setq e (match-end 0))
+           (setq i (1+ i))
+           (goto-char e)
+           )
+         (delete-region b e)
+         (while (>= i 0)
+           (insert "\n")
+           (setq i (1- i))
+           ))
+       (goto-char (point-min))
+       (while (search-forward "<lt>" nil t)
+         (replace-match "<<")
+         )
+       ))))
+
+(defun enriched-to-richtext-region (beg end)
+  "Convert the region of text/enriched style to text/richtext style."
+  (save-excursion
+    (save-restriction
+      (goto-char beg)
+      (and (search-forward "text/enriched")
+          (replace-match "text/richtext"))
+      (search-forward "\n\n")
+      (narrow-to-region (match-end 0) end)
+      (let (str n)
+       (goto-char (point-min))
+       (while (re-search-forward "\n\n+" nil t)
+         (setq str (buffer-substring (match-beginning 0)
+                                     (match-end 0)))
+         (setq n (1- (length str)))
+         (setq str "")
+         (while (> n 0)
+           (setq str (concat str "<nl>\n"))
+           (setq n (1- n))
+           )
+         (replace-match str)
+         )
+       (goto-char (point-min))
+       (while (search-forward "<<" nil t)
+         (replace-match "<lt>")
+         )
+       ))))
+
+
+;;; @ encoder and decoder
+;;;
+
+(defun richtext-decode (beg end)
+  (save-restriction
+    (narrow-to-region beg end)
+    (richtext-to-enriched-region beg (point-max))
+    (enriched-decode beg (point-max))
+    ))
+
+;; (defun richtext-encode (beg end)
+;;   (save-restriction
+;;     (narrow-to-region beg end)
+;;     (enriched-encode beg (point-max))
+;;     (enriched-to-richtext-region beg (point-max))
+;;     ))
+
+
+;;; @ end
+;;;
+
 (provide 'tinyrich)