- Add `hanyu-dazidian-vol', `hanyu-dazidian-page' and
[chise/xemacs-chise.git] / src / mule-charset.c
index 3fb4030..e8d4e2e 100644 (file)
@@ -68,6 +68,7 @@ Lisp_Object Vcharset_ucs;
 Lisp_Object Vcharset_ucs_bmp;
 Lisp_Object Vcharset_ucs_cns;
 Lisp_Object Vcharset_ucs_jis;
+Lisp_Object Vcharset_ucs_ks;
 Lisp_Object Vcharset_ucs_big5;
 Lisp_Object Vcharset_latin_viscii;
 Lisp_Object Vcharset_latin_tcvn5712;
@@ -75,7 +76,20 @@ Lisp_Object Vcharset_latin_viscii_lower;
 Lisp_Object Vcharset_latin_viscii_upper;
 Lisp_Object Vcharset_chinese_big5;
 Lisp_Object Vcharset_chinese_big5_cdp;
-Lisp_Object Vcharset_japanese_jef_china3;
+Lisp_Object Vcharset_ideograph_hanziku_1;
+Lisp_Object Vcharset_ideograph_hanziku_2;
+Lisp_Object Vcharset_ideograph_hanziku_3;
+Lisp_Object Vcharset_ideograph_hanziku_4;
+Lisp_Object Vcharset_ideograph_hanziku_5;
+Lisp_Object Vcharset_ideograph_hanziku_6;
+Lisp_Object Vcharset_ideograph_hanziku_7;
+Lisp_Object Vcharset_ideograph_hanziku_8;
+Lisp_Object Vcharset_ideograph_hanziku_9;
+Lisp_Object Vcharset_ideograph_hanziku_10;
+Lisp_Object Vcharset_ideograph_hanziku_11;
+Lisp_Object Vcharset_ideograph_hanziku_12;
+Lisp_Object Vcharset_china3_jef;
+Lisp_Object Vcharset_ideograph_cbeta;
 Lisp_Object Vcharset_ideograph_gt;
 Lisp_Object Vcharset_ideograph_gt_pj_1;
 Lisp_Object Vcharset_ideograph_gt_pj_2;
@@ -426,6 +440,7 @@ Lisp_Object Qascii,
   Qucs_bmp,
   Qucs_cns,
   Qucs_jis,
+  Qucs_ks,
   Qucs_big5,
   Qlatin_viscii,
   Qlatin_tcvn5712,
@@ -435,7 +450,20 @@ Lisp_Object Qascii,
   Qvietnamese_viscii_upper,
   Qchinese_big5,
   Qchinese_big5_cdp,
-  Qjapanese_jef_china3,
+  Qideograph_hanziku_1,
+  Qideograph_hanziku_2,
+  Qideograph_hanziku_3,
+  Qideograph_hanziku_4,
+  Qideograph_hanziku_5,
+  Qideograph_hanziku_6,
+  Qideograph_hanziku_7,
+  Qideograph_hanziku_8,
+  Qideograph_hanziku_9,
+  Qideograph_hanziku_10,
+  Qideograph_hanziku_11,
+  Qideograph_hanziku_12,
+  Qchina3_jef,
+  Qideograph_cbeta,
   Qideograph_daikanwa,
   Qideograph_gt,
   Qideograph_gt_pj_1,
@@ -1236,11 +1264,13 @@ encode_builtin_char_1 (Emchar c, Lisp_Object* charset)
       *charset = Vcharset_ideograph_daikanwa;
       return c - MIN_CHAR_DAIKANWA;
     }
+  /*
   else if (c <= MAX_CHAR_MOJIKYO_0)
     {
       *charset = Vcharset_mojikyo;
       return c - MIN_CHAR_MOJIKYO_0;
     }
+  */
   else if (c < MIN_CHAR_94)
     {
       *charset = Vcharset_ucs;
@@ -1302,6 +1332,7 @@ encode_builtin_char_1 (Emchar c, Lisp_Object* charset)
          return c;
        }
     }
+  /*
   else if (c < MIN_CHAR_MOJIKYO)
     {
       *charset = Vcharset_ucs;
@@ -1312,16 +1343,22 @@ encode_builtin_char_1 (Emchar c, Lisp_Object* charset)
       *charset = Vcharset_mojikyo;
       return c - MIN_CHAR_MOJIKYO;
     }
-  else if (c < MIN_CHAR_JEF_CHINA3)
+  else if (c < MIN_CHAR_CHINA3_JEF)
     {
       *charset = Vcharset_ucs;
       return c;
     }
-  else if (c <= MAX_CHAR_JEF_CHINA3)
+  else if (c <= MAX_CHAR_CHINA3_JEF)
+    {
+      *charset = Vcharset_china3_jef;
+      return c - MIN_CHAR_CHINA3_JEF;
+    }
+  else if (c <= MAX_CHAR_CBETA)
     {
-      *charset = Vcharset_japanese_jef_china3;
-      return c - MAX_CHAR_JEF_CHINA3;
+      *charset = Vcharset_ideograph_cbeta;
+      return c - MIN_CHAR_CBETA;
     }
+  */
   else
     {
       *charset = Vcharset_ucs;
@@ -1981,10 +2018,12 @@ Set mapping-table of CHARSET to TABLE.
 /************************************************************************/
 
 #ifdef UTF2000
-DEFUN ("decode-char", Fdecode_char, 2, 2, 0, /*
+DEFUN ("decode-char", Fdecode_char, 2, 3, 0, /*
 Make a character from CHARSET and code-point CODE.
+If DEFINED_ONLY is non-nil, builtin character is not returned.
+If corresponding character is not found, nil is returned.
 */
-       (charset, code))
+       (charset, code, defined_only))
 {
   int c;
 
@@ -1993,7 +2032,10 @@ Make a character from CHARSET and code-point CODE.
   c = XINT (code);
   if (XCHARSET_GRAPHIC (charset) == 1)
     c &= 0x7F7F7F7F;
-  c = DECODE_CHAR (charset, c);
+  if (NILP (defined_only))
+    c = DECODE_CHAR (charset, c);
+  else
+    c = DECODE_DEFINED_CHAR (charset, c);
   return c >= 0 ? make_char (c) : Qnil;
 }
 
@@ -2008,7 +2050,7 @@ Make a builtin character from CHARSET and code-point CODE.
   CHECK_INT (code);
   if (EQ (charset, Vcharset_latin_viscii))
     {
-      Lisp_Object chr = Fdecode_char (charset, code);
+      Lisp_Object chr = Fdecode_char (charset, code, Qnil);
       Lisp_Object ret;
 
       if (!NILP (chr))
@@ -2037,7 +2079,7 @@ Make a builtin character from CHARSET and code-point CODE.
     c &= 0x7F7F7F7F;
 #endif
   c = decode_builtin_char (charset, c);
-  return c >= 0 ? make_char (c) : Fdecode_char (charset, code);
+  return c >= 0 ? make_char (c) : Fdecode_char (charset, code, Qnil);
 }
 #endif
 
@@ -2341,6 +2383,7 @@ syms_of_mule_charset (void)
   defsymbol (&Qucs_bmp,                        "ucs-bmp");
   defsymbol (&Qucs_cns,                        "ucs-cns");
   defsymbol (&Qucs_jis,                        "ucs-jis");
+  defsymbol (&Qucs_ks,                 "ucs-ks");
   defsymbol (&Qucs_big5,               "ucs-big5");
   defsymbol (&Qlatin_viscii,           "latin-viscii");
   defsymbol (&Qlatin_tcvn5712,         "latin-tcvn5712");
@@ -2363,7 +2406,20 @@ syms_of_mule_charset (void)
   defsymbol (&Qideograph_daikanwa,     "ideograph-daikanwa");
   defsymbol (&Qchinese_big5,           "chinese-big5");
   defsymbol (&Qchinese_big5_cdp,       "chinese-big5-cdp");
-  defsymbol (&Qjapanese_jef_china3,    "japanese-jef-china3");
+  defsymbol (&Qideograph_hanziku_1,    "ideograph-hanziku-1");
+  defsymbol (&Qideograph_hanziku_2,    "ideograph-hanziku-2");
+  defsymbol (&Qideograph_hanziku_3,    "ideograph-hanziku-3");
+  defsymbol (&Qideograph_hanziku_4,    "ideograph-hanziku-4");
+  defsymbol (&Qideograph_hanziku_5,    "ideograph-hanziku-5");
+  defsymbol (&Qideograph_hanziku_6,    "ideograph-hanziku-6");
+  defsymbol (&Qideograph_hanziku_7,    "ideograph-hanziku-7");
+  defsymbol (&Qideograph_hanziku_8,    "ideograph-hanziku-8");
+  defsymbol (&Qideograph_hanziku_9,    "ideograph-hanziku-9");
+  defsymbol (&Qideograph_hanziku_10,   "ideograph-hanziku-10");
+  defsymbol (&Qideograph_hanziku_11,   "ideograph-hanziku-11");
+  defsymbol (&Qideograph_hanziku_12,   "ideograph-hanziku-12");
+  defsymbol (&Qchina3_jef,             "china3-jef");
+  defsymbol (&Qideograph_cbeta,                "ideograph-cbeta");
   defsymbol (&Qmojikyo,                        "mojikyo");
   defsymbol (&Qmojikyo_2022_1,         "mojikyo-2022-1");
   defsymbol (&Qmojikyo_pj_1,           "mojikyo-pj-1");
@@ -2494,6 +2550,15 @@ complex_vars_of_mule_charset (void)
                  build_string ("ISO/IEC 10646 for JIS X 0208, 0212 and 0213"),
                  build_string (""),
                  Qnil, 0, 0, 0, 0);
+  staticpro (&Vcharset_ucs_ks);
+  Vcharset_ucs_ks =
+    make_charset (LEADING_BYTE_UCS_KS, Qucs_ks, 256, 3,
+                 1, 2, 0, CHARSET_LEFT_TO_RIGHT,
+                 build_string ("UCS for KS"),
+                 build_string ("UCS for CCS defined by KS"),
+                 build_string ("ISO/IEC 10646 for Korean Standards"),
+                 build_string (""),
+                 Qnil, 0, 0, 0, 0);
   staticpro (&Vcharset_ucs_big5);
   Vcharset_ucs_big5 =
     make_charset (LEADING_BYTE_UCS_BIG5, Qucs_big5, 256, 3,
@@ -2776,7 +2841,9 @@ complex_vars_of_mule_charset (void)
                  build_string ("Big5"),
                  build_string ("Big5 Chinese traditional"),
                  build_string ("big5"),
-                 Qnil, 0, 0, 0, 0);
+                 Qnil,
+                 0 /* MIN_CHAR_BIG5_CDP */,
+                 0 /* MAX_CHAR_BIG5_CDP */, 0, 0);
   staticpro (&Vcharset_chinese_big5_cdp);
   Vcharset_chinese_big5_cdp =
     make_charset (LEADING_BYTE_CHINESE_BIG5_CDP, Qchinese_big5_cdp, 256, 2,
@@ -2785,16 +2852,48 @@ complex_vars_of_mule_charset (void)
                  build_string ("Big5 + CDP extension"),
                  build_string ("Big5 with CDP extension"),
                  build_string ("big5\\.cdp-0"),
-                 Qnil, 0, 0, 0, 0);
-  staticpro (&Vcharset_japanese_jef_china3);
-  Vcharset_japanese_jef_china3 =
-    make_charset (LEADING_BYTE_JEF_CHINA3, Qjapanese_jef_china3, 256, 2,
+                 Qnil, MIN_CHAR_BIG5_CDP, MAX_CHAR_BIG5_CDP, 0, 0);
+#define DEF_HANZIKU(n)                                                 \
+  staticpro (&Vcharset_ideograph_hanziku_##n);                         \
+  Vcharset_ideograph_hanziku_##n =                                     \
+    make_charset (LEADING_BYTE_HANZIKU_##n, Qideograph_hanziku_##n, 256, 2, \
+                 2, 2, 0, CHARSET_LEFT_TO_RIGHT,                       \
+                 build_string ("HZK-"#n),                              \
+                 build_string ("HANZIKU-"#n),  \
+                 build_string ("HANZIKU (pseudo BIG5 encoding) part "#n), \
+                 build_string                                          \
+                 ("hanziku-"#n"$"),                                    \
+                 Qnil, MIN_CHAR_HANZIKU_##n, MAX_CHAR_HANZIKU_##n, 0, 0);
+  DEF_HANZIKU (1);
+  DEF_HANZIKU (2);
+  DEF_HANZIKU (3);
+  DEF_HANZIKU (4);
+  DEF_HANZIKU (5);
+  DEF_HANZIKU (6);
+  DEF_HANZIKU (7);
+  DEF_HANZIKU (8);
+  DEF_HANZIKU (9);
+  DEF_HANZIKU (10);
+  DEF_HANZIKU (11);
+  DEF_HANZIKU (12);
+  staticpro (&Vcharset_china3_jef);
+  Vcharset_china3_jef =
+    make_charset (LEADING_BYTE_CHINA3_JEF, Qchina3_jef, 256, 2,
                  2, 2, 0, CHARSET_LEFT_TO_RIGHT,
                  build_string ("JC3"),
                  build_string ("JEF + CHINA3"),
                  build_string ("JEF + CHINA3 private characters"),
                  build_string ("china3jef-0"),
-                 Qnil, MIN_CHAR_JEF_CHINA3, MAX_CHAR_JEF_CHINA3, 0, 0);
+                 Qnil, MIN_CHAR_CHINA3_JEF, MAX_CHAR_CHINA3_JEF, 0, 0);
+  staticpro (&Vcharset_ideograph_cbeta);
+  Vcharset_ideograph_cbeta =
+    make_charset (LEADING_BYTE_CBETA, Qideograph_cbeta, 256, 2,
+                 2, 2, 0, CHARSET_LEFT_TO_RIGHT,
+                 build_string ("CB"),
+                 build_string ("CBETA"),
+                 build_string ("CBETA private characters"),
+                 build_string ("cbeta-0"),
+                 Qnil, MIN_CHAR_CBETA, MAX_CHAR_CBETA, 0, 0);
   staticpro (&Vcharset_ideograph_gt);
   Vcharset_ideograph_gt =
     make_charset (LEADING_BYTE_GT, Qideograph_gt, 256, 3,