(mime-preview/decode-text-buffer): New implementation.
[elisp/semi.git] / mime-def.el
index 01ca824..2e4a702 100644 (file)
@@ -3,7 +3,7 @@
 ;; Copyright (C) 1995,1996,1997 Free Software Foundation, Inc.
 
 ;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
-;; Version: $Id: mime-def.el,v 0.15 1997-02-26 03:54:17 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*")
 
 
+;;; @ 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 (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)
          )
        ))))
 
     (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
 ;;;