2 ;;; $Id: tm-mule.el,v 4.5 1994/08/01 05:10:34 morioka Exp $
9 (if (not (fboundp 'member))
16 (defvar mime/lc-charset-and-encoding-alist
19 (cons lc-jp '("ISO-2022-JP" . "B"))
20 (cons lc-cn '("ISO-2022-CN" . "B"))
21 (cons lc-kr '("ISO-2022-KR" . "B"))
22 (cons lc-ltn1 '("ISO-8859-1" . "Q"))
23 (cons lc-ltn2 '("ISO-8859-2" . "Q"))
24 (cons lc-ltn3 '("ISO-8859-3" . "Q"))
25 (cons lc-ltn4 '("ISO-8859-4" . "Q"))
26 (cons lc-crl '("ISO-8859-5" . "B"))
27 (cons lc-arb '("ISO-8859-6" . "B"))
28 (cons lc-grk '("ISO-8859-7" . "B"))
29 (cons lc-hbw '("ISO-8859-8" . "B"))
30 (cons lc-ltn5 '("ISO-8859-9" . "Q"))
33 (defvar mime/latin-lc-list
34 (list lc-ascii lc-ltn1 lc-ltn2 lc-ltn3 lc-ltn4 lc-ltn5))
36 (defvar mime/charset-coding-system-alist
37 '(("ISO-2022-JP" . *iso-2022-ss2-7*)
38 ("ISO-2022-JP-2" . *iso-2022-ss2-7*)
39 ("X-ISO-2022-JP-2" . *iso-2022-ss2-7*)
40 ("ISO-2022-CN" . *iso-2022-ss2-7*)
41 ("ISO-2022-KR" . *iso-2022-kr*)
45 (defvar mime/charset-lc-alist
47 (cons "ISO-8859-1" lc-ltn1) ; Latin-1
48 (cons "ISO-8859-2" lc-ltn2) ; Latin-2
49 (cons "ISO-8859-3" lc-ltn3) ; Latin-3
50 (cons "ISO-8859-4" lc-ltn4) ; Latin-4
51 (cons "ISO-8859-5" lc-crl ) ; Cyrillic
52 (cons "ISO-8859-6" lc-arb ) ; Arabic
53 (cons "ISO-8859-7" lc-grk ) ; Greek
54 (cons "ISO-8859-8" lc-hbw ) ; Hebrew
55 (cons "ISO-8859-9" lc-ltn5) ; Latin-5
59 ;;; @ define charset and encoding
61 (defun mime/set-charset-and-encoding (lc cs charset encoding)
62 (setq mime/lc-charset-and-encoding-alist
63 (put-alist lc (cons charset encoding)
64 mime/lc-charset-and-encoding-alist))
66 (setq mime/charset-coding-system-alist
67 (put-alist charset cs mime/charset-coding-system-alist))
68 (setq mime/charset-lc-alist
69 (put-alist charset lc mime/charset-lc-alist))
73 ;;; (mime/set-charset-and-encoding lc-kr *euc-kr* "EUC-KR" "B")
74 ;;; (mime/set-charset-and-encoding lc-koi8 nil "KOI8" "B")
77 (defun mime/char-leading-char (chr)
82 (defun mime/remove-leading-character (str)
83 (let ((dest "") (i 0) (len (length str)) chr)
85 (setq chr (elt str i))
88 (setq dest (concat dest (char-to-string chr)))
92 (setq dest (concat dest (char-to-string (elt str (+ i 1)))))
98 (defun mime/insert-leading-character (str lc)
99 (let ((lc-str (char-to-string lc))
101 (i 0) (len (length str))
104 (setq chr (elt str i))
105 (setq chr-str (char-to-string chr))
106 (setq dest (concat dest
109 (concat lc-str chr-str)
115 (defun mime/convert-string-to-emacs (charset str)
116 (let ((cs (cdr (assoc charset mime/charset-coding-system-alist))))
118 (code-convert-string str cs *internal*)
121 (let ((lc (cdr (assoc charset mime/charset-lc-alist))))
123 (mime/insert-leading-character str lc)
127 (defun mime/convert-string-from-emacs (str charset)
128 (let ((cs (cdr (assoc charset mime/charset-coding-system-alist))))
130 (code-convert-string str *internal* cs)
133 (if (assoc charset mime/charset-lc-alist)
134 (mime/remove-leading-character str)
138 (defun mime/decode-encoded-text (charset encoding str)
139 (mime/convert-string-to-emacs
141 (cond ((string-match "^B$" encoding) (mime/base64-decode-string str))
142 ((string-match "^Q$" encoding) (mime/Quoted-Printable-decode-string str))
143 (t (message "unknown encoding %s" encoding) str)