X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=mime-def.el;h=2e4a70276b0e1bffe0de7efb3187af744ca95128;hb=5d8237427ade4951b270147a206d64a9e93a47d7;hp=8e3ef6962a44a1e6b7ca51d6350d883309ecf948;hpb=de68cedb7a8ed206310d7b8b4873ea438e819561;p=elisp%2Fsemi.git diff --git a/mime-def.el b/mime-def.el index 8e3ef69..2e4a702 100644 --- a/mime-def.el +++ b/mime-def.el @@ -3,7 +3,7 @@ ;; Copyright (C) 1995,1996,1997 Free Software Foundation, Inc. ;; Author: MORIOKA Tomohiko -;; Version: $Id: mime-def.el,v 0.14 1997-02-26 02:42:16 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). @@ -25,14 +25,13 @@ ;;; 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)) @@ -53,31 +52,48 @@ (defconst mime/temp-buffer-name " *MIME-temp*") +;;; @ 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) + + ;;; @ button ;;; -(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 mime-button-face 'bold + "Face used for content-button or URL-button of MIME-Preview buffer.") -(defvar tm:mouse-face 'highlight - "Face used for MIME-preview buffer mouse highlighting. [mime-def.el]") +(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 - (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) @@ -85,8 +101,8 @@ (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 @@ -94,8 +110,8 @@ (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) ) )))) @@ -111,9 +127,9 @@ (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. @@ -140,17 +156,22 @@ FUNCTION.") pgp-function-alist) -;;; @ definitions about MIME +;;; @ method selector kernel ;;; -(defconst mime/tspecials "][\000-\040()<>@,\;:\\\"/?.=") -(defconst mime/token-regexp (concat "[^" mime/tspecials "]+")) -(defconst mime-charset-regexp mime/token-regexp) +(require 'atype) -(defconst mime/content-type-subtype-regexp - (concat mime/token-regexp "/" mime/token-regexp)) +;;; @@ field unifier +;;; -(defconst mime/disposition-type-regexp mime/token-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 @@ -211,6 +232,9 @@ ROT47 will be performed for Japanese text in any case." ;;; @ 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 @@ -285,6 +309,29 @@ ROT47 will be performed for Japanese text in any case." )) +;;; @ 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 ;;;