X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=mel.el;h=2ed43a402216a711414a33bbf33b905d634809f4;hb=e3747e8f4ecbf39d106d117fb494506089cc5c2a;hp=41a91c719df787bdb9637f9b45b999d02d6788b4;hpb=abe34b4f5cb2f125b94b4047d288076d02173dbe;p=elisp%2Fflim.git diff --git a/mel.el b/mel.el index 41a91c7..2ed43a4 100644 --- a/mel.el +++ b/mel.el @@ -1,11 +1,10 @@ ;;; mel.el : a MIME encoding/decoding library -;; Copyright (C) 1995,1996,1997 Free Software Foundation, Inc. +;; Copyright (C) 1995,1996,1997,1998 Free Software Foundation, Inc. ;; Author: MORIOKA Tomohiko ;; modified by Shuhei KOBAYASHI ;; Created: 1995/6/25 -;; Version: $Id: mel.el,v 6.11 1997/09/20 15:11:26 shuhei-k Exp $ ;; Keywords: MIME, Base64, Quoted-Printable, uuencode, gzip64 ;; This file is part of MEL (MIME Encoding Library). @@ -27,27 +26,98 @@ ;;; Code: +(require 'emu) + + ;;; @ variable ;;; -(defvar mime-temp-directory (or (getenv "MIME_TMP_DIR") - (getenv "TM_TMP_DIR") - "/tmp/") - "*Directory for temporary files.") +(defvar base64-dl-module + (and (fboundp 'dynamic-link) + (let ((path (expand-file-name "base64.so" exec-directory))) + (and (file-exists-p path) + path)))) -;;; @ region +;;; @ autoload ;;; -(autoload 'base64-encode-region - "mel-b" "Encode current region by base64." t) -(autoload 'quoted-printable-encode-region - "mel-q" "Encode current region by Quoted-Printable." t) -(autoload 'uuencode-encode-region - "mel-u" "Encode current region by unofficial uuencode format." t) -(autoload 'gzip64-encode-region - "mel-g" "Encode current region by unofficial x-gzip64 format." t) +(cond (base64-dl-module + (autoload 'base64-encode-string "mel-dl" + "Encode STRING to base64, and return the result.") + (autoload 'base64-decode-string "mel-dl" + "Decode STRING which is encoded in base64, and return the result.") + (autoload 'base64-encode-region "mel-dl" + "Encode current region by base64." t) + (autoload 'base64-decode-region "mel-dl" + "Decode current region by base64." t) + (autoload 'base64-insert-encoded-file "mel-dl" + "Encode contents of file to base64, and insert the result." t) + (autoload 'base64-write-decoded-region "mel-dl" + "Decode and write current region encoded by base64 into FILENAME." t) + ;; for encoded-word + (autoload 'base64-encoded-length "mel-dl") + ) + (t + (autoload 'base64-encode-string "mel-b" + "Encode STRING to base64, and return the result.") + (autoload 'base64-decode-string "mel-b" + "Decode STRING which is encoded in base64, and return the result.") + (autoload 'base64-encode-region "mel-b" + "Encode current region by base64." t) + (autoload 'base64-decode-region "mel-b" + "Decode current region by base64." t) + (autoload 'base64-insert-encoded-file "mel-b" + "Encode contents of file to base64, and insert the result." t) + (autoload 'base64-write-decoded-region "mel-b" + "Decode and write current region encoded by base64 into FILENAME." t) + ;; for encoded-word + (autoload 'base64-encoded-length "mel-b") + )) + +(autoload 'quoted-printable-encode-string "mel-q" + "Encode STRING to quoted-printable, and return the result.") +(autoload 'quoted-printable-decode-string "mel-q" + "Decode STRING which is encoded in quoted-printable, and return the result.") +(autoload 'quoted-printable-encode-region "mel-q" + "Encode current region by Quoted-Printable." t) +(autoload 'quoted-printable-decode-region "mel-q" + "Decode current region by Quoted-Printable." t) +(autoload 'quoted-printable-insert-encoded-file "mel-q" + "Encode contents of file to quoted-printable, and insert the result." t) +(autoload 'quoted-printable-write-decoded-region "mel-q" + "Decode and write current region encoded by quoted-printable into FILENAME." + t) +;; for encoded-word +(autoload 'q-encoding-encode-string "mel-q" + "Encode STRING to Q-encoding of encoded-word, and return the result.") +(autoload 'q-encoding-decode-string "mel-q" + "Decode STRING which is encoded in Q-encoding and return the result.") +(autoload 'q-encoding-encoded-length "mel-q") + +(autoload 'uuencode-encode-region "mel-u" + "Encode current region by unofficial uuencode format." t) +(autoload 'uuencode-decode-region "mel-u" + "Decode current region by unofficial uuencode format." t) +(autoload 'uuencode-insert-encoded-file "mel-u" + "Insert file encoded by unofficial uuencode format." t) +(autoload 'uuencode-write-decoded-region "mel-u" + "Decode and write current region encoded by uuencode into FILENAME." t) + +(autoload 'gzip64-encode-region "mel-g" + "Encode current region by unofficial x-gzip64 format." t) +(autoload 'gzip64-decode-region "mel-g" + "Decode current region by unofficial x-gzip64 format." t) +(autoload 'gzip64-insert-encoded-file "mel-g" + "Insert file encoded by unofficial gzip64 format." t) +(autoload 'gzip64-write-decoded-region "mel-g" + "Decode and write current region encoded by gzip64 into FILENAME." t) + +;;; @ region +;;; + +;;;###autoload (defvar mime-encoding-method-alist '(("base64" . base64-encode-region) ("quoted-printable" . quoted-printable-encode-region) @@ -63,16 +133,7 @@ Each element looks like (STRING . FUNCTION) or (STRING . nil). STRING is content-transfer-encoding. FUNCTION is region encoder and nil means not to encode.") - -(autoload 'base64-decode-region - "mel-b" "Decode current region by base64." t) -(autoload 'quoted-printable-decode-region - "mel-q" "Decode current region by Quoted-Printable." t) -(autoload 'uuencode-decode-region - "mel-u" "Decode current region by unofficial uuencode format." t) -(autoload 'gzip64-decode-region - "mel-g" "Decode current region by unofficial x-gzip64 format." t) - +;;;###autoload (defvar mime-decoding-method-alist '(("base64" . base64-decode-region) ("quoted-printable" . quoted-printable-decode-region) @@ -85,10 +146,12 @@ Each element looks like (STRING . FUNCTION). STRING is content-transfer-encoding. FUNCTION is region decoder.") - ;;;###autoload (defun mime-encode-region (start end encoding) - "Encode region START to END of current buffer using ENCODING." + "Encode region START to END of current buffer using ENCODING. +ENCODING must be string. If ENCODING is found in +`mime-encoding-method-alist' as its key, this function encodes the +region by its value." (interactive (list (region-beginning) (region-end) (completing-read "encoding: " @@ -102,7 +165,10 @@ FUNCTION is region decoder.") ;;;###autoload (defun mime-decode-region (start end encoding) - "Decode region START to END of current buffer using ENCODING." + "Decode region START to END of current buffer using ENCODING. +ENCODING must be string. If ENCODING is found in +`mime-decoding-method-alist' as its key, this function decodes the +region by its value." (interactive (list (region-beginning) (region-end) (completing-read "encoding: " @@ -115,27 +181,51 @@ FUNCTION is region decoder.") ))) -;;; @ file +;;; @ string ;;; -(autoload 'base64-insert-encoded-file "mel-b" - "Encode contents of file to base64, and insert the result." t) -(autoload 'quoted-printable-insert-encoded-file "mel-q" - "Encode contents of file to quoted-printable, and insert the result." t) -(autoload 'uuencode-insert-encoded-file - "mel-u" "Insert file encoded by unofficial uuencode format." t) -(autoload 'gzip64-insert-encoded-file - "mel-g" "Insert file encoded by unofficial gzip64 format." t) +;;;###autoload +(defvar mime-string-decoding-method-alist + '(("base64" . base64-decode-string) + ("quoted-printable" . quoted-printable-decode-string) + ("7bit" . identity) + ("8bit" . identity) + ("binary" . identity) + ) + "Alist of encoding vs. corresponding method to decode string. +Each element looks like (STRING . FUNCTION). +STRING is content-transfer-encoding. +FUNCTION is string decoder.") +;;;###autoload +(defun mime-decode-string (string encoding) + "Decode STRING using ENCODING. +ENCODING must be string. If ENCODING is found in +`mime-string-decoding-method-alist' as its key, this function decodes +the STRING by its value." + (let ((f (cdr (assoc encoding mime-string-decoding-method-alist)))) + (if f + (funcall f string) + (with-temp-buffer + (insert string) + (mime-decode-region (point-min)(point-max) encoding) + (buffer-string) + )))) + + +;;; @ file +;;; + +;;;###autoload (defvar mime-file-encoding-method-alist '(("base64" . base64-insert-encoded-file) ("quoted-printable" . quoted-printable-insert-encoded-file) ;; Not standard, their use is DISCOURAGED. ;; ("x-uue" . uuencode-insert-encoded-file) ;; ("x-gzip64" . gzip64-insert-encoded-file) - ("7bit" . insert-binary-file-contents-literally) - ("8bit" . insert-binary-file-contents-literally) - ("binary" . insert-binary-file-contents-literally) + ("7bit" . insert-file-contents-as-binary) + ("8bit" . insert-file-contents-as-binary) + ("binary" . insert-file-contents-as-binary) ) "Alist of encoding vs. corresponding method to insert encoded file. Each element looks like (STRING . FUNCTION). @@ -143,6 +233,21 @@ STRING is content-transfer-encoding. FUNCTION is function to insert encoded file.") ;;;###autoload +(defvar mime-file-decoding-method-alist + '(("base64" . base64-write-decoded-region) + ("quoted-printable" . quoted-printable-write-decoded-region) + ("x-uue" . uuencode-write-decoded-region) + ("x-gzip64" . gzip64-write-decoded-region) + ("7bit" . write-region-as-binary) + ("8bit" . write-region-as-binary) + ("binary" . write-region-as-binary) + ) + "Alist of encoding vs. corresponding method to write decoded region to file. +Each element looks like (STRING . FUNCTION). +STRING is content-transfer-encoding. +FUNCTION is function to write decoded region to file.") + +;;;###autoload (defun mime-insert-encoded-file (filename encoding) "Insert file FILENAME encoded by ENCODING format." (interactive @@ -156,26 +261,20 @@ FUNCTION is function to insert encoded file.") (funcall f filename) ))) - -;;; @ string -;;; - -(autoload 'base64-encode-string "mel-b" - "Encode STRING to base64, and return the result.") -(autoload 'base64-decode-string "mel-b" - "Decode STRING which is encoded in base64, and return the result.") -(autoload 'quoted-printable-encode-string "mel-q" - "Encode STRING to quoted-printable, and return the result.") -(autoload 'quoted-printable-decode-string "mel-q" - "Decode STRING which is encoded in quoted-printable, and return the result.") - -(autoload 'q-encoding-encode-string "mel-q" - "Encode STRING to Q-encoding of encoded-word, and return the result.") -(autoload 'q-encoding-decode-string "mel-q" - "Decode STRING which is encoded in Q-encoding and return the result.") - -(autoload 'base64-encoded-length "mel-b") -(autoload 'q-encoding-encoded-length "mel-q") +;;;###autoload +(defun mime-write-decoded-region (start end filename encoding) + "Decode and write current region encoded by ENCODING into FILENAME. +START and END are buffer positions." + (interactive + (list (region-beginning) (region-end) + (read-file-name "Write decoded region to file: ") + (completing-read "encoding: " + mime-file-decoding-method-alist + nil t "base64"))) + (let ((f (cdr (assoc encoding mime-file-decoding-method-alist)))) + (if f + (funcall f start end filename) + ))) ;;; @ end