diff lisp/apel/tinyrich.el @ 177:6075d714658b r20-3b15

Import from CVS: tag r20-3b15
author cvs
date Mon, 13 Aug 2007 09:51:16 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/apel/tinyrich.el	Mon Aug 13 09:51:16 2007 +0200
@@ -0,0 +1,166 @@
+;;;
+;;; $Id: tinyrich.el,v 1.2 1997/07/26 22:09:38 steve Exp $
+;;;
+;;;          by MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+;;; modified by YAMATE Keiichirou <ics9118@sem1.info.osaka-cu.ac.jp>
+;;;
+
+(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")
+  (save-excursion
+    (save-restriction
+      (narrow-to-region beg end)
+      (goto-char beg)
+      (while (re-search-forward "[ \t]*\\(\n+\\)[ \t]*" nil t)
+	(let ((str (buffer-substring (match-beginning 1)
+				     (match-end 1))))
+	  (if (string= str "\n")
+	      (replace-match " ")
+	    (replace-match (substring str 1))
+	    )))
+      (goto-char beg)
+      (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)))
+	  (if (string= cmd "<<")
+	      (replace-match "<")
+	    (replace-match "")
+	    (setq cmd (downcase (substring cmd 1 (- (length cmd) 1))))
+	    )
+	  (setq sym (intern cmd))
+	  (cond ((eq sym 'param)
+		 (setq b (point))
+		 (save-excursion
+		   (save-restriction
+		     (if (search-forward "</param>" nil t)
+			 (progn
+			   (replace-match "")
+			   (setq e (point))
+			   )
+		       (setq e end)
+		       )))
+		 (delete-region b e)
+		 )
+		((memq sym mime-viewer/face-list-for-text/enriched)
+		 (setq b (point))
+		 (save-excursion
+		   (save-restriction
+		     (if (re-search-forward (concat "</" cmd ">") nil t)
+			 (progn
+			   (replace-match "")
+			   (setq e (point))
+			   )
+		       (setq e end)
+		       )))
+		 (tm:set-face-region b e sym)
+		 )))
+	(goto-char (point-max))
+	(if (not (eq (preceding-char) ?\n))
+	    (insert "\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)