X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=mime-text.el;h=d0860d2eff77796a302c4a324e3377d6f1f88a58;hb=01e5c17f7b94677443c8286583cd8030fbc4ede4;hp=3a7777dd03afec848a28df401e1bfd77a9e545a8;hpb=38ddcd87df6278f033c7fe5d43378e75aa6228b6;p=elisp%2Fsemi.git diff --git a/mime-text.el b/mime-text.el index 3a7777d..d0860d2 100644 --- a/mime-text.el +++ b/mime-text.el @@ -1,13 +1,11 @@ ;;; mime-text.el --- mime-view content filter for text -;; Copyright (C) 1994,1995,1996,1997 Free Software Foundation, Inc. +;; Copyright (C) 1994,1995,1996,1997,1998 Free Software Foundation, Inc. ;; Author: MORIOKA Tomohiko -;; Version: -;; $Id: mime-text.el,v 0.8 1997-02-25 07:40:37 tmorioka Exp $ ;; Keywords: text, MIME, multimedia, mail, news -;; This file is part of SEMI (SEMI is Emacs MIME Interfaces). +;; This file is part of SEMI (Suite of Emacs MIME Interfaces). ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the GNU General Public License as @@ -26,103 +24,66 @@ ;;; Code: -;;; @ code conversion -;;; - -(defvar mime-text-decoder-alist - '((mime/show-message-mode . mime-charset/decode-buffer) - (mime/temporary-message-mode . mime-charset/decode-buffer) - (t . mime-charset/maybe-decode-buffer) - )) +(require 'mime-view) -(defun mime-charset/decode-buffer (charset &optional encoding) - (decode-mime-charset-region (point-min)(point-max) - (or charset default-mime-charset)) - ) -(defun mime-charset/maybe-decode-buffer (charset &optional encoding) - (or (member encoding '(nil "7bit" "8bit" "binary")) - (mime-charset/decode-buffer charset) - )) - -(defun mime-preview/decode-text-buffer (charset encoding) - (mime-decode-region (point-min) (point-max) encoding) - (let* ((mode mime::preview/original-major-mode) - (m (or (save-excursion - (set-buffer mime::preview/article-buffer) - mime::article/code-converter) - (cdr (or (assq mode mime-text-decoder-alist) - (assq t mime-text-decoder-alist))) - )) - ) - (and (functionp m) - (funcall m charset encoding) - ))) - - -;;; @ for URL +;;; @ code conversion ;;; -(require 'browse-url) - -(defvar mime-text-url-regexp - "\\(http\\|ftp\\|file\\|gopher\\|news\\|telnet\\|wais\\|mailto\\):\\(//[-a-zA-Z0-9_.]+:[0-9]*\\)?[-a-zA-Z0-9_=?#$@~`%&*+|\\/.,]*[-a-zA-Z0-9_=#$@~`%&*+|\\/]" - "*Regexp to match URL in text/plain body.") - -(defun mime-text-browse-url (&optional url) - (if (fboundp browse-url-browser-function) - (if url - (funcall browse-url-browser-function url) - (call-interactively browse-url-browser-function)) - (if (fboundp tm:mother-button-dispatcher) - (call-interactively tm:mother-button-dispatcher) - ) - )) +(defun mime-text-insert-decoded-body (entity) + "Insert text body of ENTITY in SITUATION. +It decodes MIME-encoding then code-converts as MIME-charset. +MIME-encoding is value of field 'encoding of SITUATION. It must be +'nil or string. MIME-charset is value of field \"charset\" of +SITUATION. It must be symbol." + (let ((str (mime-entity-content entity))) + (insert + (if (and (mime-entity-cooked-p entity) + (member (mime-entity-encoding entity) + '(nil "7bit" "8bit" "binary"))) + str + (decode-mime-charset-string str + (or (mime-content-type-parameter + (mime-entity-content-type entity) + "charset") + default-mime-charset)) + ))) + (run-hooks 'mime-text-decode-hook) + ) ;;; @ content filters for mime-text ;;; -(defun mime-preview/filter-for-text/plain (ctype params encoding) - (mime-preview/decode-text-buffer (cdr (assoc "charset" params)) encoding) - (goto-char (point-max)) - (if (not (eq (char-after (1- (point))) ?\n)) - (insert "\n") - ) - (if browse-url-browser-function - (progn - (goto-char (point-min)) - (while (re-search-forward mime-text-url-regexp nil t) - (let ((beg (match-beginning 0)) - (end (match-end 0))) - (tm:add-button beg end - (function mime-text-browse-url) - (list (buffer-substring beg end)))) - ))) - (run-hooks 'mime-view-plain-text-preview-hook) - ) - -(defun mime-preview/filter-for-text/richtext (ctype params encoding) - (let* ((mode mime::preview/original-major-mode) - (m (assq mode mime-text-decoder-alist)) - (charset (cdr (assoc "charset" params))) - (beg (point-min)) - ) - (remove-text-properties beg (point-max) '(face nil)) - (mime-preview/decode-text-buffer charset encoding) - (richtext-decode beg (point-max)) +(defun mime-display-text/plain (entity situation) + (save-restriction + (narrow-to-region (point-max)(point-max)) + (mime-text-insert-decoded-body entity) + (goto-char (point-max)) + (if (not (eq (char-after (1- (point))) ?\n)) + (insert "\n") + ) + (mime-add-url-buttons) + (run-hooks 'mime-display-text/plain-hook) )) -(defun mime-preview/filter-for-text/enriched (ctype params encoding) - (let* ((mode mime::preview/original-major-mode) - (m (assq mode mime-text-decoder-alist)) - (charset (cdr (assoc "charset" params))) - (beg (point-min)) - ) - (remove-text-properties beg (point-max) '(face nil)) - (mime-preview/decode-text-buffer charset encoding) - (enriched-decode beg (point-max)) - )) +(defun mime-display-text/richtext (entity situation) + (save-restriction + (narrow-to-region (point-max)(point-max)) + (mime-text-insert-decoded-body entity) + (let ((beg (point-min))) + (remove-text-properties beg (point-max) '(face nil)) + (richtext-decode beg (point-max)) + ))) + +(defun mime-display-text/enriched (entity situation) + (save-restriction + (narrow-to-region (point-max)(point-max)) + (mime-text-insert-decoded-body entity) + (let ((beg (point-min))) + (remove-text-properties beg (point-max) '(face nil)) + (enriched-decode beg (point-max)) + ))) ;;; @ end