(MAKEIT.BAT): Modify for apel-ja@lists.chise.org.
[elisp/apel.git] / mcs-xm.el
index cd16617..cfb8320 100644 (file)
--- a/mcs-xm.el
+++ b/mcs-xm.el
@@ -1,9 +1,9 @@
 ;;; mcs-xm.el --- MIME charset implementation for XEmacs-mule
 
-;; Copyright (C) 1997,1998 Free Software Foundation, Inc.
+;; Copyright (C) 1997,1998,1999,2000,2002,2010 Free Software Foundation, Inc.
 
-;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
-;; Keywords: emulation, compatibility, Mule
+;; Author: MORIOKA Tomohiko <tomo@m17n.org>
+;; Keywords: MIME-charset, coding-system, emulation, compatibility, Mule
 
 ;; This file is part of APEL (A Portable Emacs Library).
 
@@ -19,8 +19,8 @@
 
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Commentary:
 
 
 ;;; Code:
 
-(require 'mcs-20)
+(require 'poem)
 
 
-(defun encode-mime-charset-region (start end charset)
+(defun encode-mime-charset-region (start end charset &optional lbt)
   "Encode the text between START and END as MIME CHARSET."
-  (let ((cs (mime-charset-to-coding-system charset)))
+  (let ((cs (mime-charset-to-coding-system charset lbt)))
     (if cs
        (encode-coding-region start end cs)
       )))
 
 
 (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)
-    (hz-gb-2312 . decode-mime-charset-region-for-hz)
-    (t . decode-mime-charset-region-default))
+  (let ((alist
+        '((hz-gb-2312 . decode-mime-charset-region-for-hz)
+          (t . decode-mime-charset-region-default))))
+    (if (featurep 'utf-2000)
+       alist
+      (list*
+       '(iso-2022-jp . decode-mime-charset-region-with-iso646-unification)
+       '(iso-2022-jp-2 . decode-mime-charset-region-with-iso646-unification)
+       alist)))
   "Alist MIME-charset vs. decoder function."
   :group 'i18n
   :type '(repeat (cons mime-charset function)))
        (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)
-
-(defcustom mime-character-unification-limit-size 2048
-  "*Limit size to unify characters."
-  :group 'i18n
-  :type 'integer)
-
-(defun decode-mime-charset-region-with-iso646-unification (start end charset
-                                                                lbt)
-  (decode-mime-charset-region-default start end charset lbt)
-  (if (<= (- end start) mime-character-unification-limit-size)
-      (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)))))
-    ))
+(unless (featurep 'utf-2000)
+  (require 'mcs-xmu))
 
 (defun decode-mime-charset-region-for-hz (start end charset lbt)
   (if lbt
                       (assq t mime-charset-decoder-alist)))))
     (funcall func start end charset lbt)))
 
-(defsubst encode-mime-charset-string (string charset)
+(defun encode-mime-charset-string (string charset &optional lbt)
   "Encode the STRING as MIME CHARSET."
-  (let ((cs (mime-charset-to-coding-system charset)))
+  (let ((cs (mime-charset-to-coding-system charset lbt)))
     (if cs
        (encode-coding-string string cs)
       string)))
 
 
 (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 latin-jisx0201
-           katakana-jisx0201 japanese-jisx0208)        . shift_jis)
-    ((ascii korean-ksc5601)                            . euc-kr)
-    ((ascii chinese-gb2312)                            . cn-gb)
-    ((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)
-    ))
+  (delq
+   nil
+   `(((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)
+     ,(if (find-coding-system 'iso-8859-14)
+         '((ascii latin-iso8859-14)                    . iso-8859-14))
+     ,(if (find-coding-system 'iso-8859-15)
+         '((ascii latin-iso8859-15)                    . iso-8859-15))
+     ;; ,(if (featurep 'utf-2000)
+     ;;      '((ascii latin-jisx0201
+     ;;               japanese-jisx0208-1978
+     ;;               japanese-jisx0208
+     ;;               japanese-jisx0208-1990)              . iso-2022-jp)
+     ;;    '((ascii latin-jisx0201
+     ;;             japanese-jisx0208-1978 japanese-jisx0208)
+     ;;      . iso-2022-jp))
+     ((ascii latin-jisx0201
+            japanese-jisx0208-1978 japanese-jisx0208)  . iso-2022-jp)
+     ;; ,(if (featurep 'utf-2000)
+     ;;      '((ascii latin-jisx0201
+     ;;               japanese-jisx0208-1978
+     ;;               japanese-jisx0208
+     ;;               japanese-jisx0208-1990
+     ;;               japanese-jisx0213-1
+     ;;               japanese-jisx0213-2)                 . iso-2022-jp-3)
+     ;;    '((ascii latin-jisx0201
+     ;;             japanese-jisx0208-1978 japanese-jisx0208
+     ;;             japanese-jisx0213-1
+     ;;             japanese-jisx0213-2)                   . iso-2022-jp-3))
+     ,(if (featurep 'utf-2000)
+         '((ascii latin-jisx0201 katakana-jisx0201
+                  japanese-jisx0208-1990)              . utf-8)
+       '((ascii latin-jisx0201
+                katakana-jisx0201 japanese-jisx0208)   . shift_jis))
+     ((ascii korean-ksc5601)                           . euc-kr)
+     ((ascii chinese-gb2312)                           . gb2312)
+     ((ascii chinese-big5-1 chinese-big5-2)            . big5)
+     ((ascii thai-xtis)                                        . tis-620)
+     ;; ,(if (featurep 'utf-2000)
+     ;;      '((ascii latin-jisx0201 latin-iso8859-1
+     ;;               greek-iso8859-7
+     ;;               japanese-jisx0208-1978 japanese-jisx0208
+     ;;               japanese-jisx0208-1990
+     ;;               japanese-jisx0212
+     ;;               chinese-gb2312
+     ;;               korean-ksc5601)              . iso-2022-jp-2)
+     ;;    '((ascii latin-jisx0201 latin-iso8859-1
+     ;;             greek-iso8859-7
+     ;;             japanese-jisx0208-1978 japanese-jisx0208
+     ;;             japanese-jisx0212
+     ;;             chinese-gb2312
+     ;;             korean-ksc5601)                        . 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)
+     )))
+
+
+(defun coding-system-to-mime-charset (coding-system)
+  "Convert CODING-SYSTEM to a MIME-charset.
+Return nil if corresponding MIME-charset is not found."
+  (setq coding-system
+       (coding-system-name (coding-system-base coding-system)))
+  (or (car (rassq coding-system mime-charset-coding-system-alist))
+      coding-system))
+
+(defun mime-charset-list ()
+  "Return a list of all existing MIME-charset."
+  (let ((dest (mapcar (function car) mime-charset-coding-system-alist))
+       (rest (coding-system-list))
+       cs)
+    (while rest
+      (setq cs (coding-system-name (coding-system-base (car rest))))
+      (or (rassq cs mime-charset-coding-system-alist)
+         (memq cs dest)
+         (setq dest (cons cs dest)))
+      (setq rest (cdr rest)))
+    dest))
 
 
 ;;; @ end
 ;;;
 
-(provide 'mcs-xm)
+(require 'product)
+(product-provide (provide 'mcs-xm) (require 'apel-ver))
 
 ;;; mcs-xm.el ends here