#ifdef UTF2000
Lisp_Object Vcharset_ucs;
Lisp_Object Vcharset_ucs_bmp;
+Lisp_Object Vcharset_ucs_smp;
+Lisp_Object Vcharset_ucs_sip;
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;
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);
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));
}
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
#ifdef UTF2000
Qucs,
Qucs_bmp,
+ Qucs_smp,
+ Qucs_sip,
Qucs_cns,
Qucs_jis,
+ Qucs_ks,
Qucs_big5,
Qlatin_viscii,
Qlatin_tcvn5712,
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;
{ 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 }
};
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;
*charset = Vcharset_ucs_bmp;
return c;
}
+ else if (c <= MAX_CHAR_SMP)
+ {
+ *charset = Vcharset_ucs_smp;
+ return c - MIN_CHAR_SMP;
+ }
+ else if (c <= MAX_CHAR_SIP)
+ {
+ *charset = Vcharset_ucs_sip;
+ return c - MIN_CHAR_SIP;
+ }
else if (c < MIN_CHAR_DAIKANWA)
{
*charset = Vcharset_ucs;
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);
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:
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;
}
#ifdef UTF2000
defsymbol (&Qucs, "ucs");
defsymbol (&Qucs_bmp, "ucs-bmp");
+ defsymbol (&Qucs_smp, "ucs-smp");
+ defsymbol (&Qucs_sip, "ucs-sip");
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");
make_charset (LEADING_BYTE_UCS_BMP, Qucs_bmp, 256, 2,
1, 2, 0, CHARSET_LEFT_TO_RIGHT,
build_string ("BMP"),
- build_string ("BMP"),
+ build_string ("UCS-BMP"),
build_string ("ISO/IEC 10646 Group 0 Plane 0 (BMP)"),
- build_string ("\\(ISO10646.*-1\\|UNICODE[23]?-0\\)"),
+ build_string
+ ("\\(ISO10646.*-[01]\\|UCS00-0\\|UNICODE[23]?-0\\)"),
Qnil, 0, 0xFFFF, 0, 0);
+ staticpro (&Vcharset_ucs_smp);
+ Vcharset_ucs_smp =
+ make_charset (LEADING_BYTE_UCS_SMP, Qucs_smp, 256, 2,
+ 1, 2, 0, CHARSET_LEFT_TO_RIGHT,
+ build_string ("SMP"),
+ build_string ("UCS-SMP"),
+ build_string ("ISO/IEC 10646 Group 0 Plane 1 (SMP)"),
+ build_string ("UCS00-1"),
+ Qnil, MIN_CHAR_SMP, MAX_CHAR_SMP, 0, 0);
+ staticpro (&Vcharset_ucs_sip);
+ Vcharset_ucs_sip =
+ make_charset (LEADING_BYTE_UCS_SIP, Qucs_sip, 256, 2,
+ 2, 2, 0, CHARSET_LEFT_TO_RIGHT,
+ build_string ("SIP"),
+ build_string ("UCS-SIP"),
+ build_string ("ISO/IEC 10646 Group 0 Plane 2 (SIP)"),
+ build_string ("\\(ISO10646.*-2\\|UCS00-2\\)"),
+ Qnil, MIN_CHAR_SIP, MAX_CHAR_SIP, 0, 0);
staticpro (&Vcharset_ucs_cns);
Vcharset_ucs_cns =
make_charset (LEADING_BYTE_UCS_CNS, Qucs_cns, 256, 3,
- 1, 2, 0, CHARSET_LEFT_TO_RIGHT,
+ 2, 2, 0, CHARSET_LEFT_TO_RIGHT,
build_string ("UCS for CNS"),
build_string ("UCS for CNS 11643"),
build_string ("ISO/IEC 10646 for CNS 11643"),
staticpro (&Vcharset_ucs_jis);
Vcharset_ucs_jis =
make_charset (LEADING_BYTE_UCS_JIS, Qucs_jis, 256, 3,
- 1, 2, 0, CHARSET_LEFT_TO_RIGHT,
+ 2, 2, 0, CHARSET_LEFT_TO_RIGHT,
build_string ("UCS for JIS"),
build_string ("UCS for JIS X 0208, 0212 and 0213"),
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,
+ 2, 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,
- 1, 2, 0, CHARSET_LEFT_TO_RIGHT,
+ 2, 2, 0, CHARSET_LEFT_TO_RIGHT,
build_string ("UCS for Big5"),
build_string ("UCS for Big5"),
build_string ("ISO/IEC 10646 for Big5"),
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,