;;; ;;; $Id: tm-rich.el,v 2.2 1994/10/31 07:44:51 morioka Exp $ ;;; ;;; by MORIOKA Tomohiko ;;; modified by YAMATE Keiichirou ;;; (provide 'tm-enriched) (require 'tm-view) (defvar mime/text/enriched-face-list '("bold" "italic" "fixed" "underline")) (cond ((and (>= (string-to-int emacs-version) 19) window-system) (require 'hilit19) (defun mime/set-face-region (b e face) (let ((sym (intern face))) (if (eq sym 'italic) (setq sym 'modeline) ) (if (member sym (face-list)) (progn (hilit-unhighlight-region b e) (hilit-region-set-face b e sym) )))) ) ((and (boundp 'NEMACS) NEMACS) (setq mime/text/enriched-face-list '("bold" "italic" "underline")) (setq mime/text/enriched-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/text/enriched-face-attribute-alist)) beg end)) ) (t (setq mime/text/enriched-face-list nil) (defun mime/set-face-region (beg end sym) ) )) (defun mime/decode-text/enriched-region (beg end) (interactive "*r") (save-excursion (save-restriction (narrow-to-region beg end) (while (re-search-forward "[\n]+" nil t) (let ((str (buffer-substring (match-beginning 0) (match-end 0)))) (if (string= str "\n") (replace-match " ") (replace-match (substring str 1)) ))) (goto-char beg) (let (cmd 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)))) ) (cond ((string= cmd "param") (setq b (point)) (save-excursion (save-restriction (if (search-forward "" nil t) (progn (replace-match "") (setq e (point)) ) (setq e end) ))) (delete-region b e) ) ((member cmd mime/text/enriched-face-list) (setq b (point)) (save-excursion (save-restriction (if (re-search-forward (concat "") nil t) (progn (replace-match "") (setq e (point)) ) (setq e end) ))) (mime/set-face-region b e cmd) ))) (goto-char (point-max)) (if (not (eq (preceding-char) ?\n)) (insert "\n") ) )))) (defun mime/decode-text/enriched (&optional ctl) (interactive) (save-excursion (save-restriction (let ((beg (point-min)) (end (point-max))) (goto-char (point-min)) (if (search-forward "\n\n" nil t) (setq beg (match-end 0)) ) (mime/decode-text/enriched-region beg end) )))) (set-alist 'mime/content-filter-alist "text/enriched" (function mime/decode-text/enriched)) (set-alist 'mime/content-filter-alist "text/richtext" (function mime/decode-text/enriched))