Variable `mime-preview/content-button-function' was abolished.
[elisp/semi.git] / mime-def.el
index 7f94bfc..bcb3be2 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.30 1997-02-28 04:50:13 tmorioka Exp $
+;; Version: $Id: mime-def.el,v 0.44 1997-03-17 13:25:53 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/disposition-type-regexp mime/token-regexp)
 
 
-;;; @ MIME charset
-;;;
-
-(defvar charsets-mime-charset-alist
-  '(((ascii)                                           . us-ascii)
-    ((ascii latin-iso8859-1)                           . iso-8859-1)
-    ((ascii latin-iso8859-2)                           . iso-8859-2)
-    ((ascii latin-iso8859-3)                           . iso-8859-3)
-    ((ascii latin-iso8859-4)                           . iso-8859-4)
-;;; ((ascii cyrillic-iso8859-5)                                . iso-8859-5)
-    ((ascii cyrillic-iso8859-5)                                . koi8-r)
-    ((ascii arabic-iso8859-6)                          . iso-8859-6)
-    ((ascii greek-iso8859-7)                           . iso-8859-7)
-    ((ascii hebrew-iso8859-8)                          . iso-8859-8)
-    ((ascii latin-iso8859-9)                           . iso-8859-9)
-    ((ascii latin-jisx0201
-           japanese-jisx0208-1978 japanese-jisx0208)   . iso-2022-jp)
-    ((ascii korean-ksc5601)                            . euc-kr)
-    ((ascii chinese-gb2312)                            . cn-gb-2312)
-    ((ascii chinese-big5-1 chinese-big5-2)             . cn-big5)
-    ((ascii latin-iso8859-1 greek-iso8859-7
-           latin-jisx0201 japanese-jisx0208-1978
-           chinese-gb2312 japanese-jisx0208
-           korean-ksc5601 japanese-jisx0212)           . iso-2022-jp-2)
-    ((ascii latin-iso8859-1 greek-iso8859-7
-           latin-jisx0201 japanese-jisx0208-1978
-           chinese-gb2312 japanese-jisx0208
-           korean-ksc5601 japanese-jisx0212
-           chinese-cns11643-1 chinese-cns11643-2)      . iso-2022-int-1)
-    ((ascii latin-iso8859-1 latin-iso8859-2
-           cyrillic-iso8859-5 greek-iso8859-7
-           latin-jisx0201 japanese-jisx0208-1978
-           chinese-gb2312 japanese-jisx0208
-           korean-ksc5601 japanese-jisx0212
-           chinese-cns11643-1 chinese-cns11643-2
-           chinese-cns11643-3 chinese-cns11643-4
-           chinese-cns11643-5 chinese-cns11643-6
-           chinese-cns11643-7)                         . iso-2022-cjk)
-    ))
-
-(defvar default-mime-charset 'x-ctext)
-
-(defvar mime-charset-coding-system-alist
-  '((x-ctext           . ctext)
-    (gb2312            . cn-gb-2312)
-    (iso-2022-jp-2     . iso-2022-ss2-7)
-    ))
-
-(defun mime-charset-to-coding-system (charset &optional lbt)
-  (if (stringp charset)
-      (setq charset (intern (downcase charset)))
-    )
-  (let ((cs
-        (or (cdr (assq charset mime-charset-coding-system-alist))
-            (and (coding-system-p charset) charset)
-            )))
-    (if lbt
-       (intern (concat (symbol-name cs) "-" (symbol-name lbt)))
-      cs)))
-
-(defun detect-mime-charset-region (start end)
-  "Return MIME charset for region between START and END."
-  (charsets-to-mime-charset
-   (find-charset-string (buffer-substring start end))
-   ))
-
-(defun encode-mime-charset-region (start end charset)
-  "Encode the text between START and END as MIME CHARSET."
-  (let ((cs (mime-charset-to-coding-system charset)))
-    (if cs
-       (encode-coding-region start end cs)
-      )))
-
-(defun decode-mime-charset-region (start end charset)
-  "Decode the text between START and END as MIME CHARSET."
-  (let ((cs (mime-charset-to-coding-system charset)))
-    (if cs
-       (decode-coding-region start end cs)
-      )))
-
-(defun encode-mime-charset-string (string charset)
-  "Encode the STRING as MIME CHARSET."
-  (let ((cs (mime-charset-to-coding-system charset)))
-    (if cs
-       (encode-coding-string string cs)
-      string)))
-
-(defun decode-mime-charset-string (string charset)
-  "Decode the STRING as MIME CHARSET."
-  (let ((cs (mime-charset-to-coding-system charset)))
-    (if cs
-       (decode-coding-string string cs)
-      string)))
-
-
 ;;; @ button
 ;;;
 
-(defvar running-xemacs (string-match "XEmacs" emacs-version))
-
 (if running-xemacs
     (require 'overlay)
   )
 (defvar mime-button-mouse-face 'highlight
   "Face used for MIME-preview buffer mouse highlighting.")
 
-(defun mime-add-button (from to func &optional data)
+(defsubst mime-add-button (from to func &optional data)
   "Create a button between FROM and TO with callback FUNC and 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))
-                       ))
-  )
+  (let ((props (cons 'mime-button-callback
+                    (cons func
+                          (if data
+                              (list 'mime-button-data data)
+                            )))))
+    (if mime-button-mouse-face
+       (setq props (cons 'mouse-face (cons mime-button-mouse-face props)))
+      )
+    (add-text-properties from to props)
+    ))
 
 (defvar mime-button-mother-dispatcher nil)
 
     (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-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-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.
@@ -251,6 +158,24 @@ FUNCTION.")
        pgp-function-alist)
 
 
+;;; @ method selector kernel
+;;;
+
+(require 'atype)
+
+;;; @@ field unifier
+;;;
+
+(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
 ;;;
 ;; caesar-region written by phr@prep.ai.mit.edu  Nov 86
@@ -389,6 +314,12 @@ 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.