(mime-charset-decoder-alist): New variable.
authormorioka <morioka>
Wed, 25 Mar 1998 14:57:12 +0000 (14:57 +0000)
committermorioka <morioka>
Wed, 25 Mar 1998 14:57:12 +0000 (14:57 +0000)
(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

index 32a0618..38d51b5 100644 (file)
@@ -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)))