X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=mime-text.el;h=7b63a9d5e741da3818c17066ec861d3e2192376f;hb=276c4cba23af602cdeedb033e29386ec8ca96a5d;hp=7a338551a7da5a8526a74b0be9868811e62873c1;hpb=7e5a96508e07e446e6ed3ab4d57cee9825730ee7;p=elisp%2Fsemi.git diff --git a/mime-text.el b/mime-text.el index 7a33855..7b63a9d 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.12 1997-03-15 20:19:23 morioka 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,37 +24,79 @@ ;;; Code: +;;; @ buffer local variables in raw-buffer +;;; + +(defvar mime-text-decoder nil + "Function to decode text in current buffer. +Interface of the function is (CHARSET &optional ENCODING). +CHARSET is symbol of MIME charset and ENCODING is value of +Content-Transfer-Encoding. + +Notice that this variable is usually used as buffer local variable in +raw-buffer.") + +(make-variable-buffer-local 'mime-text-decoder) + + ;;; @ code conversion ;;; (defvar mime-text-decoder-alist - '((mime/show-message-mode . mime-charset/decode-buffer) - (mime-temp-message-mode . mime-charset/decode-buffer) - (t . mime-charset/maybe-decode-buffer) - )) + '((mime-show-message-mode . mime-text-decode-buffer) + (mime-temp-message-mode . mime-text-decode-buffer) + (t . mime-text-decode-buffer-maybe) + ) + "Alist of major-mode vs. mime-text-decoder. +Each element looks like (SYMBOL . FUNCTION). SYMBOL is major-mode or +t. t means default. + +Specification of FUNCTION is described in DOC-string of variable +`mime-text-decoder'. + +This value is overridden by buffer local variable `mime-text-decoder' +if it is not nil.") -(defun mime-charset/decode-buffer (charset &optional encoding) +(defun mime-text-decode-buffer (charset &optional encoding) + "Decode text of current buffer as CHARSET. +It code-converts current buffer from network representation specified +by MIME CHARSET to internal code. CHARSET is symbol of MIME charset. +See also variable `mime-charset-coding-system-alist'." (decode-mime-charset-region (point-min)(point-max) (or charset default-mime-charset)) ) -(defun mime-charset/maybe-decode-buffer (charset &optional encoding) +(defun mime-text-decode-buffer-maybe (charset &optional encoding) + "Decode text of current buffer as CHARSET if ENCODING is actual encoding. +It code-converts current buffer from network representation specified +by MIME CHARSET to internal code if ENCODING is not nil, \"7bit\", +\"8bit\" or \"binary\". CHARSET is symbol of MIME charset. +See also variable `mime-charset-coding-system-alist'." (or (member encoding '(nil "7bit" "8bit" "binary")) - (mime-charset/decode-buffer charset) + (mime-text-decode-buffer charset) )) -(defun mime-preview/decode-text-buffer (charset encoding) +(defun mime-decode-text-body (charset encoding) + "Decode current buffer as text body. +It decodes MIME-encoding as ENCODING then code-converts as MIME +CHARSET. CHARSET is SYMBOL and ENCODING is nil or STRING. + +It calls text decoder for MIME charset specified by buffer local +variable `mime-text-decoder' and variable `mime-text-decoder-alist'." (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) + (goto-char (point-min)) + (while (search-forward "\r\n" nil t) + (replace-match "\n") + ) + (let ((text-decoder + (save-excursion + (set-buffer mime-raw-buffer) + (or mime-text-decoder + (cdr (or (assq major-mode mime-text-decoder-alist) + (assq t mime-text-decoder-alist))) + )))) + (and (functionp text-decoder) + (funcall text-decoder charset encoding) ))) @@ -83,8 +123,8 @@ ;;; @ 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) +(defun mime-view-filter-for-text/plain (ctype params encoding) + (mime-decode-text-body (cdr (assoc "charset" params)) encoding) (goto-char (point-max)) (if (not (eq (char-after (1- (point))) ?\n)) (insert "\n") @@ -102,23 +142,21 @@ (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) - (charset (cdr (assoc "charset" params))) +(defun mime-view-filter-for-text/richtext (ctype params encoding) + (let* ((charset (cdr (assoc "charset" params))) (beg (point-min)) ) (remove-text-properties beg (point-max) '(face nil)) - (mime-preview/decode-text-buffer charset encoding) + (mime-decode-text-body charset encoding) (richtext-decode beg (point-max)) )) -(defun mime-preview/filter-for-text/enriched (ctype params encoding) - (let* ((mode mime::preview/original-major-mode) - (charset (cdr (assoc "charset" params))) +(defun mime-view-filter-for-text/enriched (ctype params encoding) + (let* ((charset (cdr (assoc "charset" params))) (beg (point-min)) ) (remove-text-properties beg (point-max) '(face nil)) - (mime-preview/decode-text-buffer charset encoding) + (mime-decode-text-body charset encoding) (enriched-decode beg (point-max)) ))