(Qmap_gb12345): Renamed from `Qchinese_gb12345'.
[chise/xemacs-chise.git.1] / src / mule-charset.c
index 038ec5b..85f5505 100644 (file)
@@ -25,6 +25,9 @@ Boston, MA 02111-1307, USA.  */
 /* Rewritten by MORIOKA Tomohiko <tomo@m17n.org> for XEmacs UTF-2000. */
 
 #include <config.h>
+#ifdef CHISE
+#include <chise.h>
+#endif
 #ifdef UTF2000
 #include <limits.h>
 #endif
@@ -274,6 +277,7 @@ Lisp_Object Qdirection;
 Lisp_Object Qreverse_direction_charset;
 Lisp_Object Qleading_byte;
 Lisp_Object Qshort_name, Qlong_name;
+Lisp_Object Qiso_ir;
 #ifdef UTF2000
 Lisp_Object Qmin_code, Qmax_code, Qcode_offset;
 Lisp_Object Qmother, Qconversion, Q94x60, Q94x94x60, Qbig5_1, Qbig5_2;
@@ -293,12 +297,12 @@ Lisp_Object Qascii,
   Qlatin_jisx0201,
   Qcyrillic_iso8859_5,
   Qlatin_iso8859_9,
-  Qjapanese_jisx0208_1978,
-  Qchinese_gb2312,
-  Qchinese_gb12345,
-  Qjapanese_jisx0208,
-  Qkorean_ksc5601,
-  Qjapanese_jisx0212,
+  Qmap_jis_x0208_1978,
+  Qmap_gb2312,
+  Qmap_gb12345,
+  Qmap_jis_x0208_1983,
+  Qmap_ks_x1001,
+  Qmap_jis_x0212,
   Qchinese_cns11643_1,
   Qchinese_cns11643_2,
 #ifdef UTF2000
@@ -314,7 +318,7 @@ Lisp_Object Qascii,
   Qvietnamese_viscii_upper,
   Qmap_jis_x0208,
   Qmap_jis_x0208_1990,
-  Qchinese_big5,
+  Qmap_big5,
   Qethiopic_ucs,
 #endif
   Qchinese_big5_1,
@@ -1486,7 +1490,7 @@ character set.  Recognized properties are:
 */
        (name, doc_string, props))
 {
-  int id, dimension = 1, chars = 94, graphic = 0, final = 0, columns = -1;
+  int id = 0, dimension = 1, chars = 94, graphic = 0, final = 0, columns = -1;
   int direction = CHARSET_LEFT_TO_RIGHT;
   Lisp_Object registry = Qnil;
   Lisp_Object charset;
@@ -1520,6 +1524,14 @@ character set.  Recognized properties are:
            long_name = value;
          }
 
+       else if (EQ (keyword, Qiso_ir))
+         {
+#ifdef UTF2000
+           CHECK_INT (value);
+           id = - XINT (value);
+#endif
+         }
+
        else if (EQ (keyword, Qdimension))
          {
            CHECK_INT (value);
@@ -1661,7 +1673,8 @@ character set.  Recognized properties are:
     error
       ("Character set already defined for this DIMENSION/CHARS/FINAL combo");
 
-  id = get_unallocated_leading_byte (dimension);
+  if (id == 0)
+    id = get_unallocated_leading_byte (dimension);
 
   if (NILP (doc_string))
     doc_string = build_string ("");
@@ -2219,6 +2232,64 @@ Reset mapping-table of CCS with database file.
 Emchar
 load_char_decoding_entry_maybe (Lisp_Object ccs, int code_point)
 {
+#ifdef CHISE
+  Lisp_Object db_dir = Vexec_directory;
+  CHISE_DS ds;
+  CHISE_Decoding_Table *dt_ccs;
+  int modemask;
+  int accessmask = 0;
+  DBTYPE real_subtype;
+  int status;
+  CHISE_Char_ID char_id;
+
+  if (NILP (db_dir))
+    db_dir = build_string ("../lib-src");
+  db_dir = Fexpand_file_name (build_string ("char-db"), db_dir);
+
+  status = chise_open_data_source (&ds, CHISE_DS_Berkeley_DB,
+                                  XSTRING_DATA (db_dir));
+  if (status)
+    {
+      chise_close_data_source (&ds);
+      return -1;
+    }
+
+  modemask = 0755;             /* rwxr-xr-x */
+  real_subtype = DB_HASH;
+  accessmask = DB_RDONLY;
+
+  status
+    = chise_open_decoding_table (&dt_ccs, &ds,
+                                XSTRING_DATA (Fsymbol_name
+                                              (XCHARSET_NAME(ccs))),
+                                real_subtype,
+                                accessmask, modemask);
+  if (status)
+    {
+      printf ("Can't open decoding-table %s\n",
+             XSTRING_DATA (Fsymbol_name (XCHARSET_NAME(ccs))));
+      chise_close_decoding_table (dt_ccs);
+      chise_close_data_source (&ds);
+      return -1;
+    }
+
+  char_id = chise_dt_get_char (dt_ccs, code_point);
+  /*
+  printf ("%s's 0x%X (%d) => 0x%X\n",
+         XSTRING_DATA (Fsymbol_name (XCHARSET_NAME(ccs))),
+         code_point, code_point, char_id);
+  */
+  if (char_id >= 0)
+    decoding_table_put_char (ccs, code_point, make_char (char_id));
+  else
+    decoding_table_put_char (ccs, code_point, Qnil);
+
+  chise_close_decoding_table (dt_ccs);
+
+  chise_close_data_source (&ds);
+
+  return char_id;
+#else
   Lisp_Object db;
   Lisp_Object db_file
     = char_attribute_system_db_file (XCHARSET_NAME(ccs), Qsystem_char_id,
@@ -2244,6 +2315,7 @@ load_char_decoding_entry_maybe (Lisp_Object ccs, int code_point)
       Fclose_database (db);
     }
   return -1;
+#endif
 }
 #endif /* HAVE_CHISE_CLIENT */
 #endif /* UTF2000 */
@@ -2607,6 +2679,7 @@ syms_of_mule_charset (void)
   defsymbol (&Qreverse_direction_charset, "reverse-direction-charset");
   defsymbol (&Qshort_name, "short-name");
   defsymbol (&Qlong_name, "long-name");
+  defsymbol (&Qiso_ir, "iso-ir");
 #ifdef UTF2000
   defsymbol (&Qmother, "mother");
   defsymbol (&Qmin_code, "min-code");
@@ -2638,12 +2711,12 @@ syms_of_mule_charset (void)
   defsymbol (&Qlatin_jisx0201,         "latin-jisx0201");
   defsymbol (&Qcyrillic_iso8859_5,     "cyrillic-iso8859-5");
   defsymbol (&Qlatin_iso8859_9,                "latin-iso8859-9");
-  defsymbol (&Qjapanese_jisx0208_1978, "japanese-jisx0208-1978");
-  defsymbol (&Qchinese_gb2312,         "chinese-gb2312");
-  defsymbol (&Qchinese_gb12345,                "chinese-gb12345");
-  defsymbol (&Qjapanese_jisx0208,      "japanese-jisx0208");
-  defsymbol (&Qkorean_ksc5601,         "korean-ksc5601");
-  defsymbol (&Qjapanese_jisx0212,      "japanese-jisx0212");
+  defsymbol (&Qmap_jis_x0208_1978,     "=jis-x0208-1978");
+  defsymbol (&Qmap_gb2312,             "=gb2312");
+  defsymbol (&Qmap_gb12345,            "=gb12345");
+  defsymbol (&Qmap_jis_x0208_1983,     "=jis-x0208-1983");
+  defsymbol (&Qmap_ks_x1001,           "=ks-x1001");
+  defsymbol (&Qmap_jis_x0212,          "=jis-x0212");
   defsymbol (&Qchinese_cns11643_1,     "chinese-cns11643-1");
   defsymbol (&Qchinese_cns11643_2,     "chinese-cns11643-2");
 #ifdef UTF2000
@@ -2660,7 +2733,7 @@ syms_of_mule_charset (void)
   defsymbol (&Qvietnamese_viscii_upper,        "vietnamese-viscii-upper");
   defsymbol (&Qmap_jis_x0208,          "=jis-x0208");
   defsymbol (&Qmap_jis_x0208_1990,     "=jis-x0208-1990");
-  defsymbol (&Qchinese_big5,           "chinese-big5");
+  defsymbol (&Qmap_big5,               "=big5");
   defsymbol (&Qethiopic_ucs,           "ethiopic-ucs");
 #endif
   defsymbol (&Qchinese_big5_1,         "chinese-big5-1");
@@ -2926,7 +2999,7 @@ complex_vars_of_mule_charset (void)
   staticpro (&Vcharset_japanese_jisx0208_1978);
   Vcharset_japanese_jisx0208_1978 =
     make_charset (LEADING_BYTE_JAPANESE_JISX0208_1978,
-                 Qjapanese_jisx0208_1978, 94, 2,
+                 Qmap_jis_x0208_1978, 94, 2,
                  2, 0, '@', CHARSET_LEFT_TO_RIGHT,
                  build_string ("JIS X0208:1978"),
                  build_string ("JIS X0208:1978 (Japanese)"),
@@ -2942,7 +3015,7 @@ complex_vars_of_mule_charset (void)
                  CONVERSION_IDENTICAL);
   staticpro (&Vcharset_chinese_gb2312);
   Vcharset_chinese_gb2312 =
-    make_charset (LEADING_BYTE_CHINESE_GB2312, Qchinese_gb2312, 94, 2,
+    make_charset (LEADING_BYTE_CHINESE_GB2312, Qmap_gb2312, 94, 2,
                  2, 0, 'A', CHARSET_LEFT_TO_RIGHT,
                  build_string ("GB2312"),
                  build_string ("GB2312)"),
@@ -2951,7 +3024,7 @@ complex_vars_of_mule_charset (void)
                  Qnil, 0, 0, 0, 33, Qnil, CONVERSION_IDENTICAL);
   staticpro (&Vcharset_chinese_gb12345);
   Vcharset_chinese_gb12345 =
-    make_charset (LEADING_BYTE_CHINESE_GB12345, Qchinese_gb12345, 94, 2,
+    make_charset (LEADING_BYTE_CHINESE_GB12345, Qmap_gb12345, 94, 2,
                  2, 0, 0, CHARSET_LEFT_TO_RIGHT,
                  build_string ("G1"),
                  build_string ("GB 12345)"),
@@ -2960,7 +3033,7 @@ complex_vars_of_mule_charset (void)
                  Qnil, 0, 0, 0, 33, Qnil, CONVERSION_IDENTICAL);
   staticpro (&Vcharset_japanese_jisx0208);
   Vcharset_japanese_jisx0208 =
-    make_charset (LEADING_BYTE_JAPANESE_JISX0208, Qjapanese_jisx0208, 94, 2,
+    make_charset (LEADING_BYTE_JAPANESE_JISX0208, Qmap_jis_x0208_1983, 94, 2,
                  2, 0, 'B', CHARSET_LEFT_TO_RIGHT,
                  build_string ("JISX0208"),
                  build_string ("JIS X0208:1983 (Japanese)"),
@@ -2992,7 +3065,7 @@ complex_vars_of_mule_charset (void)
 #endif
   staticpro (&Vcharset_korean_ksc5601);
   Vcharset_korean_ksc5601 =
-    make_charset (LEADING_BYTE_KOREAN_KSC5601, Qkorean_ksc5601, 94, 2,
+    make_charset (LEADING_BYTE_KOREAN_KSC5601, Qmap_ks_x1001, 94, 2,
                  2, 0, 'C', CHARSET_LEFT_TO_RIGHT,
                  build_string ("KSC5601"),
                  build_string ("KSC5601 (Korean"),
@@ -3001,7 +3074,7 @@ complex_vars_of_mule_charset (void)
                  Qnil, 0, 0, 0, 33, Qnil, CONVERSION_IDENTICAL);
   staticpro (&Vcharset_japanese_jisx0212);
   Vcharset_japanese_jisx0212 =
-    make_charset (LEADING_BYTE_JAPANESE_JISX0212, Qjapanese_jisx0212, 94, 2,
+    make_charset (LEADING_BYTE_JAPANESE_JISX0212, Qmap_jis_x0212, 94, 2,
                  2, 0, 'D', CHARSET_LEFT_TO_RIGHT,
                  build_string ("JISX0212"),
                  build_string ("JISX0212 (Japanese)"),
@@ -3069,7 +3142,7 @@ complex_vars_of_mule_charset (void)
                  Qnil, 0, 0, 0, 0, Qnil, CONVERSION_IDENTICAL);
   staticpro (&Vcharset_chinese_big5);
   Vcharset_chinese_big5 =
-    make_charset (LEADING_BYTE_CHINESE_BIG5, Qchinese_big5, 256, 2,
+    make_charset (LEADING_BYTE_CHINESE_BIG5, Qmap_big5, 256, 2,
                  2, 2, 0, CHARSET_LEFT_TO_RIGHT,
                  build_string ("Big5"),
                  build_string ("Big5"),