;; Maintainer: MORIOKA Tomohiko <morioka@jaist.ac.jp>
;; Created: 1994/08/21 renamed from mime.el
;; Renamed: 1997/2/21 from tm-edit.el
-;; Version: $Revision: 0.41 $
+;; Version: $Revision: 0.52 $
;; Keywords: MIME, multimedia, multilingual, mail, news
;; This file is part of SEMI (SEMI is Emacs MIME Interfaces).
(require 'sendmail)
(require 'mail-utils)
(require 'mel)
-(require 'tl-list)
(require 'mime-view)
(require 'eword-encode)
(require 'signature)
+(require 'alist)
;;; @ version
;;;
(defconst mime-edit-RCS-ID
- "$Id: mime-edit.el,v 0.41 1997-02-24 02:17:11 tmorioka Exp $")
+ "$Id: mime-edit.el,v 0.52 1997-03-01 03:39:01 tmorioka Exp $")
(defconst mime-edit-version (get-version-string mime-edit-RCS-ID))
;;; @@ about charset, encoding and transfer-level
;;;
-(defvar mime-edit-transfer-level 7
+(defvar mime-charset-type-list
+ '((us-ascii 7 nil)
+ (iso-8859-1 8 "quoted-printable")
+ (iso-8859-2 8 "quoted-printable")
+ (iso-8859-3 8 "quoted-printable")
+ (iso-8859-4 8 "quoted-printable")
+ (iso-8859-5 8 "quoted-printable")
+ (koi8-r 8 "quoted-printable")
+ (iso-8859-7 8 "quoted-printable")
+ (iso-8859-8 8 "quoted-printable")
+ (iso-8859-9 8 "quoted-printable")
+ (iso-2022-jp 7 "base64")
+ (iso-2022-kr 7 "base64")
+ (euc-kr 8 "base64")
+ (gb2312 8 "quoted-printable")
+ (big5 8 "base64")
+ (iso-2022-jp-2 7 "base64")
+ (iso-2022-int-1 7 "base64")
+ ))
+
+(defvar mime-transfer-level 7
"*A number of network transfer level. It should be bigger than 7.")
-(make-variable-buffer-local 'mime-edit-transfer-level)
+(make-variable-buffer-local 'mime-transfer-level)
-(defvar mime-edit-transfer-level-string
- (mime/encoding-name mime-edit-transfer-level 'not-omit)
+(defsubst mime-encoding-name (transfer-level &optional not-omit)
+ (cond ((> transfer-level 8) "binary")
+ ((= transfer-level 8) "8bit")
+ (not-omit "7bit")
+ ))
+
+(defvar mime-transfer-level-string
+ (mime-encoding-name mime-transfer-level 'not-omit)
"*A string formatted version of mime/defaul-transfer-level")
-(make-variable-buffer-local 'mime-edit-transfer-level-string)
+(make-variable-buffer-local 'mime-transfer-level-string)
-(defun mime-edit-make-charset-default-encoding-alist (transfer-level)
+(defun mime-make-charset-default-encoding-alist (transfer-level)
(mapcar (function
(lambda (charset-type)
(let ((charset (car charset-type))
(encoding (nth 2 charset-type))
)
(if (<= type transfer-level)
- (cons charset (mime/encoding-name type))
+ (cons charset (mime-encoding-name type))
(cons charset encoding)
))))
mime-charset-type-list))
(defvar mime-edit-charset-default-encoding-alist
- (mime-edit-make-charset-default-encoding-alist mime-edit-transfer-level))
+ (mime-make-charset-default-encoding-alist mime-transfer-level))
(make-variable-buffer-local 'mime-edit-charset-default-encoding-alist)
;;; @@ about message inserting
(defconst mime-edit-mime-map (make-sparse-keymap)
"Keymap for MIME commands.")
+
;;; @ keymap and menu
;;;
mime-edit-minor-mime-map mime-prefix mime-edit-mime-map)
))
(add-minor-mode 'mime-edit-mode-flag
- '((" MIME-Edit " mime-edit-transfer-level-string))
+ '((" MIME-Edit " mime-transfer-level-string))
mime-edit-minor-mime-map
nil
'mime-edit-toggle-mode)
(t
(set-alist 'minor-mode-alist
'mime-edit-mode-flag
- '((" MIME-Edit " mime-edit-transfer-level-string))))
+ '((" MIME-Edit " mime-transfer-level-string))))
)
(defconst mime-edit-menu-title "MIME-Edit")
)
;;; end
+;;; @@ visible/invisible
+;;;
+
+(defmacro enable-invisible ())
+
+(defmacro end-of-invisible ())
+
+(cond (running-xemacs
+ (defun invisible-region (start end)
+ (if (save-excursion
+ (goto-char start)
+ (eq (following-char) ?\n)
+ )
+ (setq start (1+ start))
+ )
+ (put-text-property start end 'invisible t)
+ )
+ (defun invisible-p (pos)
+ (if (save-excursion
+ (goto-char pos)
+ (eq (following-char) ?\n)
+ )
+ (setq pos (1+ pos))
+ )
+ (get-text-property pos 'invisible)
+ )
+ )
+ (defun next-visible-point (pos)
+ (save-excursion
+ (if (save-excursion
+ (goto-char pos)
+ (eq (following-char) ?\n)
+ )
+ (setq pos (1+ pos))
+ )
+ (or (next-single-property-change pos 'invisible)
+ (point-max))
+ ))
+ (t
+ (defun invisible-region (start end)
+ (if (save-excursion
+ (goto-char (1- end))
+ (eq (following-char) ?\n)
+ )
+ (setq end (1- end))
+ )
+ (put-text-property start end 'invisible t)
+ )
+ (defun invisible-p (pos)
+ (get-text-property pos 'invisible)
+ )
+ (defun next-visible-point (pos)
+ (save-excursion
+ (goto-char (next-single-property-change pos 'invisible))
+ (if (eq (following-char) ?\n)
+ (forward-char)
+ )
+ (point)
+ ))
+ ))
+
+(defun visible-region (start end)
+ (put-text-property start end 'invisible nil)
+ )
+
;;; @ functions
;;;
Hide a non-textual body message encoded in base64 after insertion
if non-nil.
- mime-edit-transfer-level
+ mime-transfer-level
A number of network transfer level. It should be bigger than 7.
If you are in 8bit-through environment, please set 8.
;; Set transfer level into mode line
;;
- (setq mime-edit-transfer-level-string
- (mime/encoding-name mime-edit-transfer-level 'not-omit))
+ (setq mime-transfer-level-string
+ (mime-encoding-name mime-transfer-level 'not-omit))
(force-mode-line-update)
;; Define menu. Menus for other emacs implementations are
(defun mime-edit-translate-header ()
"Encode the message header into network representation."
- (eword-encode-message-header 'code-conversion)
+ (eword-encode-header 'code-conversion)
(run-hooks 'mime-edit-translate-header-hook)
)
))
)))
+(defsubst replace-space-with-underline (str)
+ (mapconcat (function
+ (lambda (arg)
+ (char-to-string
+ (if (eq arg ?\ )
+ ?_
+ arg)))) str "")
+ )
+
+(defun mime-edit-make-boundary ()
+ (concat mime-multipart-boundary "_"
+ (replace-space-with-underline (current-time-string))
+ ))
+
(defun mime-edit-translate-body ()
"Encode the tagged MIME body in current buffer in MIME compliant message."
(interactive)
(save-excursion
- (let ((boundary
- (concat mime-multipart-boundary "_"
- (replace-space-with-underline (current-time-string))
- ))
+ (let ((boundary (mime-edit-make-boundary))
(i 1)
ret)
(while (mime-edit-process-multipart-1
(insert "Content-Type: " contype "\n")
(if encoding
(insert "Content-Transfer-Encoding: " encoding "\n"))
- (eword-encode-message-header)
+ (eword-encode-header)
)
t)))
(defun mime-edit-translate-region (beg end &optional boundary multipart)
- (if (null boundary)
- (setq boundary
- (concat mime-multipart-boundary "_"
- (replace-space-with-underline (current-time-string))))
- )
+ (or boundary
+ (setq boundary (mime-edit-make-boundary))
+ )
(save-excursion
(save-restriction
(narrow-to-region beg end)
(defun mime-edit-insert-message (&optional message)
(interactive)
- (let ((inserter (assoc-value major-mode mime-edit-message-inserter-alist)))
+ (let ((inserter (cdr (assq major-mode mime-edit-message-inserter-alist))))
(if (and inserter (fboundp inserter))
(progn
(mime-edit-insert-tag "message" "rfc822")
(defun mime-edit-insert-mail (&optional message)
(interactive)
- (let ((inserter (assoc-value major-mode mime-edit-mail-inserter-alist)))
+ (let ((inserter (cdr (assq major-mode mime-edit-mail-inserter-alist))))
(if (and inserter (fboundp inserter))
(progn
(mime-edit-insert-tag "message" "rfc822")
Optional TRANSFER-LEVEL is a number of transfer-level, 7 or 8."
(interactive)
(if (numberp transfer-level)
- (setq mime-edit-transfer-level transfer-level)
- (if (< mime-edit-transfer-level 8)
- (setq mime-edit-transfer-level 8)
- (setq mime-edit-transfer-level 7)
+ (setq mime-transfer-level transfer-level)
+ (if (< mime-transfer-level 8)
+ (setq mime-transfer-level 8)
+ (setq mime-transfer-level 7)
))
(setq mime-edit-charset-default-encoding-alist
- (mime-edit-make-charset-default-encoding-alist
- mime-edit-transfer-level))
+ (mime-make-charset-default-encoding-alist mime-transfer-level))
(message (format "Current transfer-level is %d bit"
- mime-edit-transfer-level))
- (setq mime-edit-transfer-level-string
- (mime/encoding-name mime-edit-transfer-level 'not-omit))
+ mime-transfer-level))
+ (setq mime-transfer-level-string
+ (mime-encoding-name mime-transfer-level 'not-omit))
(force-mode-line-update)
)
(delete-region (point-min)(point-max))
)
((string= type "multipart")
- (let* ((boundary (assoc-value "boundary" params))
+ (let* ((boundary (cdr (assoc "boundary" params)))
(boundary-pat
(concat "\n--" (regexp-quote boundary) "[ \t]*\n"))
)