From 119a460feef1c8424bde24ddebea119f36c89d7e Mon Sep 17 00:00:00 2001 From: morioka Date: Wed, 25 Mar 1998 14:57:12 +0000 Subject: [PATCH] (mime-charset-decoder-alist): New variable. (decode-mime-charset-region-default): New function. (mime-iso646-character-unification-alist): New variable. (mime-unified-character-face): New variable. (decode-mime-charset-region-with-iso646-unification): New function. (decode-mime-charset-region): Use 'mime-charset-decoder-alist. --- emu-x20.el | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/emu-x20.el b/emu-x20.el index 32a0618..38d51b5 100644 --- a/emu-x20.el +++ b/emu-x20.el @@ -77,13 +77,73 @@ find-file-hooks, etc. (encode-coding-region start end cs) ))) -(defsubst decode-mime-charset-region (start end charset) - "Decode the text between START and END as MIME CHARSET." +(defcustom mime-charset-decoder-alist + '((iso-2022-jp . decode-mime-charset-region-with-iso646-unification) + (iso-2022-jp-2 . decode-mime-charset-region-with-iso646-unification) + (x-ctext . decode-mime-charset-region-with-iso646-unification) + (t . decode-mime-charset-region-default)) + "Alist MIME-charset vs. decoder function." + :group 'i18n + :type '(repeat (cons mime-charset function))) + +(defsubst decode-mime-charset-region-default (start end charset) (let ((cs (mime-charset-to-coding-system charset))) (if cs (decode-coding-region start end cs) ))) +(defcustom mime-iso646-character-unification-alist + `,(let (dest + (i 33)) + (while (< i 92) + (setq dest + (cons (cons (char-to-string (make-char 'latin-jisx0201 i)) + (format "%c" i)) + dest)) + (setq i (1+ i))) + (setq i 93) + (while (< i 126) + (setq dest + (cons (cons (char-to-string (make-char 'latin-jisx0201 i)) + (format "%c" i)) + dest)) + (setq i (1+ i))) + (nreverse dest)) + "Alist unified string vs. canonical string." + :group 'i18n + :type '(repeat (cons string string))) + +(defcustom mime-unified-character-face nil + "*Face of unified character." + :group 'i18n + :type 'face) + +(defun decode-mime-charset-region-with-iso646-unification (start end charset) + (decode-mime-charset-region-default start end charset) + (save-excursion + (let ((rest mime-iso646-character-unification-alist)) + (while rest + (let ((pair (car rest))) + (goto-char (point-min)) + (while (search-forward (car pair) nil t) + (let ((str (cdr pair))) + (put-text-property 0 (length str) + 'face mime-unified-character-face str) + (replace-match str 'fixed-case 'literal) + ) + )) + (setq rest (cdr rest)))))) + +(defsubst decode-mime-charset-region (start end charset) + "Decode the text between START and END as MIME CHARSET." + (if (stringp charset) + (setq charset (intern (downcase charset))) + ) + (let ((func (cdr (or (assq charset mime-charset-decoder-alist) + (assq t mime-charset-decoder-alist))))) + (funcall func start end charset) + )) + (defsubst encode-mime-charset-string (string charset) "Encode the STRING as MIME CHARSET." (let ((cs (mime-charset-to-coding-system charset))) -- 1.7.10.4