;; Copyright (C) 1995,1996,1997 Free Software Foundation, Inc.
;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
-;; Version: $Id: mime-def.el,v 0.5 1997-02-24 08:54:44 tmorioka Exp $
+;; Version: $Id: mime-def.el,v 0.43 1997-03-10 15:16:26 morioka Exp $
;; Keywords: definition, MIME, multimedia, mail, news
;; This file is part of SEMI (SEMI is Emacs MIME Interfaces).
;;; Code:
+(require 'cl)
(require 'emu)
;;; @ variables
;;;
-(defvar mime/tmp-dir (or (getenv "TM_TMP_DIR") "/tmp/"))
-
(defvar mime/use-multi-frame
(and (>= emacs-major-version 19) window-system))
(defconst mime/temp-buffer-name " *MIME-temp*")
-;;; @ charset and encoding
+;;; @ definitions about MIME
;;;
-(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")
- ))
+(defconst mime/tspecials "][\000-\040()<>@,\;:\\\"/?.=")
+(defconst mime/token-regexp (concat "[^" mime/tspecials "]+"))
+(defconst mime-charset-regexp mime/token-regexp)
-(defun mime/encoding-name (transfer-level &optional not-omit)
- (cond ((> transfer-level 8) "binary")
- ((= transfer-level 8) "8bit")
- (not-omit "7bit")
- ))
-
-(defun mime/make-charset-default-encoding-alist (transfer-level)
- (mapcar (function
- (lambda (charset-type)
- (let ((charset (upcase (symbol-name (car charset-type))))
- (type (nth 1 charset-type))
- (encoding (nth 2 charset-type))
- )
- (if (<= type transfer-level)
- (cons charset (mime/encoding-name type))
- (cons charset encoding)
- ))))
- mime-charset-type-list))
+(defconst mime/content-type-subtype-regexp
+ (concat mime/token-regexp "/" mime/token-regexp))
+
+(defconst mime/disposition-type-regexp mime/token-regexp)
;;; @ button
;;;
-(defun tm:set-face-region (b e face)
- (let ((overlay (tl:make-overlay b e)))
- (tl:overlay-put overlay 'face face)
- ))
-
-(defvar tm:button-face 'bold
- "Face used for content-button or URL-button of MIME-Preview buffer.
-\[mime-def.el]")
+(if running-xemacs
+ (require 'overlay)
+ )
-(defvar tm:mouse-face 'highlight
- "Face used for MIME-preview buffer mouse highlighting. [mime-def.el]")
+(defvar mime-button-face 'bold
+ "Face used for content-button or URL-button of MIME-Preview buffer.")
-(defvar tm:warning-face nil
- "Face used for invalid encoded-word.")
+(defvar mime-button-mouse-face 'highlight
+ "Face used for MIME-preview buffer mouse highlighting.")
-(defun tm:add-button (from to func &optional data)
+(defun mime-add-button (from to func &optional data)
"Create a button between FROM and TO with callback FUNC and data DATA."
- (and tm:button-face
- (tl:overlay-put (tl:make-overlay from to) 'face tm:button-face))
- (tl:add-text-properties from to
- (append (and tm:mouse-face
- (list 'mouse-face tm:mouse-face))
- (list 'mime-callback func)
- (and data (list 'mime-data data))
- ))
+ (and mime-button-face
+ (overlay-put (make-overlay from to) 'face mime-button-face))
+ (add-text-properties from to
+ (nconc
+ (and mime-button-mouse-face
+ (list 'mouse-face mime-button-mouse-face))
+ (list 'mime-button-callback func)
+ (and data (list 'mime-button-data data))
+ ))
)
-(defvar tm:mother-button-dispatcher nil)
+(defvar mime-button-mother-dispatcher nil)
-(defun tm:button-dispatcher (event)
+(defun mime-button-dispatcher (event)
"Select the button under point."
(interactive "e")
(let (buf point func data)
(mouse-set-point event)
(setq buf (current-buffer)
point (point)
- func (get-text-property (point) 'mime-callback)
- data (get-text-property (point) 'mime-data)
+ func (get-text-property (point) 'mime-button-callback)
+ data (get-text-property (point) 'mime-button-data)
)
)
(save-excursion
(goto-char point)
(if func
(apply func data)
- (if (fboundp tm:mother-button-dispatcher)
- (funcall tm:mother-button-dispatcher event)
+ (if (fboundp mime-button-mother-dispatcher)
+ (funcall mime-button-mother-dispatcher event)
)
))))
-;;; @ for URL
-;;;
-
-(defvar tm:URL-regexp
- "\\(http\\|ftp\\|file\\|gopher\\|news\\|telnet\\|wais\\|mailto\\):\\(//[-a-zA-Z0-9_.]+:[0-9]*\\)?[-a-zA-Z0-9_=?#$@~`%&*+|\\/.,]*[-a-zA-Z0-9_=#$@~`%&*+|\\/]")
-
-(defvar browse-url-browser-function nil)
-
-(defun tm: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)
- )
- ))
-
-
;;; @ PGP
;;;
(fetch-key mc-pgp-fetch-key "mc-pgp")
(snarf-keys mc-snarf-keys "mc-toplev")
;; for mime-edit
- (mime-sign tm:mc-pgp-sign-region "mime-edit-mc")
+ (mime-sign mime-mc-pgp-sign-region "mime-mc")
(traditional-sign mc-pgp-sign-region "mc-pgp")
- (encrypt tm:mc-pgp-encrypt-region "mime-edit-mc")
+ (encrypt mime-mc-pgp-encrypt-region "mime-mc")
(insert-key mc-insert-public-key "mc-toplev")
)
"Alist of service names vs. corresponding functions and its filenames.
pgp-function-alist)
-;;; @ definitions about MIME
-;;;
-
-(defconst mime/tspecials "][\000-\040()<>@,\;:\\\"/?.=")
-(defconst mime/token-regexp (concat "[^" mime/tspecials "]+"))
-(defconst mime-charset-regexp mime/token-regexp)
-
-(defconst mime/content-type-subtype-regexp
- (concat mime/token-regexp "/" mime/token-regexp))
-
-(defconst mime/disposition-type-regexp mime/token-regexp)
-
-
-;;; @@ Base64
+;;; @ method selector kernel
;;;
-(defconst base64-token-regexp "[A-Za-z0-9+/]")
-(defconst base64-token-padding-regexp "[A-Za-z0-9+/=]")
+(require 'atype)
-(defconst eword-B-encoded-text-regexp
- (concat "\\(\\("
- base64-token-regexp
- base64-token-regexp
- base64-token-regexp
- base64-token-regexp
- "\\)*"
- base64-token-regexp
- base64-token-regexp
- base64-token-padding-regexp
- base64-token-padding-regexp
- "\\)"))
-
-;; (defconst eword-B-encoding-and-encoded-text-regexp
-;; (concat "\\(B\\)\\?" eword-B-encoded-text-regexp))
-
-
-;;; @@ Quoted-Printable
+;;; @@ field unifier
;;;
-(defconst quoted-printable-hex-chars "0123456789ABCDEF")
-(defconst quoted-printable-octet-regexp
- (concat "=[" quoted-printable-hex-chars
- "][" quoted-printable-hex-chars "]"))
-
-(defconst eword-Q-encoded-text-regexp
- (concat "\\([^=?]\\|" quoted-printable-octet-regexp "\\)+"))
-(defconst eword-Q-encoding-and-encoded-text-regexp
- (concat "\\(Q\\)\\?" eword-Q-encoded-text-regexp))
+(defun field-unifier-for-mode (a b)
+ (let ((va (cdr a)))
+ (if (if (consp va)
+ (member (cdr b) va)
+ (equal va (cdr b))
+ )
+ (list nil b nil)
+ )))
;;; @ rot13-47
;;; @ field
;;;
+(defsubst regexp-or (&rest args)
+ (concat "\\(" (mapconcat (function identity) args "\\|") "\\)"))
+
(defun tm:set-fields (sym field-list &optional regexp-sym)
(or regexp-sym
(setq regexp-sym
))
+;;; @ Other Utility
+;;;
+
+(defsubst eliminate-top-spaces (string)
+ "Eliminate top sequence of space or tab in STRING."
+ (if (string-match "^[ \t]+" string)
+ (substring string (match-end 0))
+ string))
+
+(defun call-after-loaded (module func &optional hook-name)
+ "If MODULE is provided, then FUNC is called.
+Otherwise func is set to MODULE-load-hook.
+If optional argument HOOK-NAME is specified,
+it is used as hook to set."
+ (if (featurep module)
+ (funcall func)
+ (or hook-name
+ (setq hook-name (intern (concat (symbol-name module) "-load-hook")))
+ )
+ (add-hook hook-name func)
+ ))
+
+
;;; @ end
;;;