- Add some missing `ideographic-structure' properties.
[chise/xemacs-chise.git] / src / mule-charset.c
index 6137cad..e937b18 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;
@@ -293,9 +294,8 @@ Lisp_Object
 put_char_ccs_code_point (Lisp_Object character,
                         Lisp_Object ccs, Lisp_Object value)
 {
-  Lisp_Object encoding_table;
-
   if (!EQ (XCHARSET_NAME (ccs), Qucs)
+      || !INTP (value)
       || (XCHAR (character) != XINT (value)))
     {
       Lisp_Object v = XCHARSET_DECODING_TABLE (ccs);
@@ -349,7 +349,7 @@ put_char_ccs_code_point (Lisp_Object character,
       if (VECTORP (v))
        {
          Lisp_Object cpos = Fget_char_attribute (character, ccs, Qnil);
-         if (!NILP (cpos))
+         if (INTP (cpos))
            {
              decoding_table_remove_char (v, dim, byte_offset, XINT (cpos));
            }
@@ -362,13 +362,7 @@ put_char_ccs_code_point (Lisp_Object character,
 
       decoding_table_put_char (v, dim, byte_offset, code_point, character);
     }
-  if (NILP (encoding_table = XCHARSET_ENCODING_TABLE (ccs)))
-    {
-      XCHARSET_ENCODING_TABLE (ccs)
-       = encoding_table = make_char_id_table (Qnil);
-    }
-  put_char_id_table (XCHAR_TABLE(encoding_table), character, value);
-  return Qt;
+  return value;
 }
 
 Lisp_Object
@@ -439,6 +433,7 @@ Lisp_Object Qascii,
   Qucs_bmp,
   Qucs_cns,
   Qucs_jis,
+  Qucs_ks,
   Qucs_big5,
   Qlatin_viscii,
   Qlatin_tcvn5712,
@@ -842,7 +837,6 @@ mark_charset (Lisp_Object obj)
   mark_object (cs->registry);
   mark_object (cs->ccl_program);
 #ifdef UTF2000
-  mark_object (cs->encoding_table);
   /* mark_object (cs->decoding_table); */
 #endif
   return cs->name;
@@ -890,7 +884,6 @@ static const struct lrecord_description charset_description[] = {
   { XD_LISP_OBJECT, offsetof (Lisp_Charset, ccl_program) },
 #ifdef UTF2000
   { XD_LISP_OBJECT, offsetof (Lisp_Charset, decoding_table) },
-  { XD_LISP_OBJECT, offsetof (Lisp_Charset, encoding_table) },
 #endif
   { XD_END }
 };
@@ -936,7 +929,6 @@ make_charset (Charset_ID id, Lisp_Object name,
   CHARSET_REVERSE_DIRECTION_CHARSET (cs) = Qnil;
 #ifdef UTF2000
   CHARSET_DECODING_TABLE(cs) = Qnil;
-  CHARSET_ENCODING_TABLE(cs) = Qnil;
   CHARSET_UCS_MIN(cs) = ucs_min;
   CHARSET_UCS_MAX(cs) = ucs_max;
   CHARSET_CODE_OFFSET(cs) = code_offset;
@@ -1848,7 +1840,8 @@ Recognized properties are those listed in `make-charset', as well as
   if (EQ (prop, Qdimension))   return make_int (CHARSET_DIMENSION (cs));
   if (EQ (prop, Qcolumns))     return make_int (CHARSET_COLUMNS (cs));
   if (EQ (prop, Qgraphic))     return make_int (CHARSET_GRAPHIC (cs));
-  if (EQ (prop, Qfinal))       return make_char (CHARSET_FINAL (cs));
+  if (EQ (prop, Qfinal))       return CHARSET_FINAL (cs) == 0 ?
+                                Qnil : make_char (CHARSET_FINAL (cs));
   if (EQ (prop, Qchars))       return make_int (CHARSET_CHARS (cs));
   if (EQ (prop, Qregistry))    return CHARSET_REGISTRY (cs);
   if (EQ (prop, Qccl_program)) return CHARSET_CCL_PROGRAM (cs);
@@ -1975,8 +1968,8 @@ Set mapping-table of CHARSET to TABLE.
          Lisp_Object c = XVECTOR_DATA(table)[i];
 
          if (CHARP (c))
-           put_char_ccs_code_point (c, charset,
-                                    make_int (i + byte_offset));
+           Fput_char_attribute (c, XCHARSET_NAME (charset),
+                                make_int (i + byte_offset));
        }
       break;
     case 2:
@@ -1993,16 +1986,16 @@ Set mapping-table of CHARSET to TABLE.
                  Lisp_Object c = XVECTOR_DATA(v)[j];
 
                  if (CHARP (c))
-                   put_char_ccs_code_point
-                     (c, charset,
+                   Fput_char_attribute
+                     (c, XCHARSET_NAME (charset),
                       make_int ( ( (i + byte_offset) << 8 )
                                  | (j + byte_offset)
                                  ) );
                }
            }
          else if (CHARP (v))
-           put_char_ccs_code_point (v, charset,
-                                    make_int (i + byte_offset));
+           Fput_char_attribute (v, XCHARSET_NAME (charset),
+                                make_int (i + byte_offset));
        }
       break;
     }
@@ -2381,6 +2374,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");
@@ -2547,6 +2541,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,
@@ -2830,8 +2833,8 @@ complex_vars_of_mule_charset (void)
                  build_string ("Big5 Chinese traditional"),
                  build_string ("big5"),
                  Qnil,
-                 /* 0 */ MIN_CHAR_BIG5_CDP,
-                 /* 0 */ MAX_CHAR_BIG5_CDP, 0, 0);
+                 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,