/* Functions to handle multilingual characters.
Copyright (C) 1992, 1995 Free Software Foundation, Inc.
Copyright (C) 1995 Sun Microsystems, Inc.
- Copyright (C) 1999,2000,2001,2002 MORIOKA Tomohiko
+ Copyright (C) 1999,2000,2001,2002,2003 MORIOKA Tomohiko
This file is part of XEmacs.
Lisp_Object Vcharset_ucs_bmp;
Lisp_Object Vcharset_ucs_smp;
Lisp_Object Vcharset_ucs_sip;
+Lisp_Object Vcharset_ucs_gb;
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;
Lisp_Object Vcharset_latin_viscii_lower;
Lisp_Object Vcharset_latin_viscii_upper;
Lisp_Object Vcharset_jis_x0208;
Lisp_Object Vcharset_chinese_big5;
-/* Lisp_Object Vcharset_chinese_big5_cdp; */
Lisp_Object Vcharset_ideograph_hanziku_1;
Lisp_Object Vcharset_ideograph_hanziku_2;
Lisp_Object Vcharset_ideograph_hanziku_3;
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;
Lisp_Object Vcharset_ideograph_gt_pj_3;
static const struct lrecord_description charset_lookup_description_1[] = {
{ XD_LISP_OBJECT_ARRAY, offsetof (struct charset_lookup, charset_by_leading_byte),
#ifdef UTF2000
- 128+4*128
+ NUM_LEADING_BYTES+4*128
#else
128+4*128*2
#endif
Qucs_bmp,
Qucs_smp,
Qucs_sip,
+ Qucs_gb,
Qucs_cns,
Qucs_jis,
Qucs_ks,
- Qucs_big5,
Qlatin_viscii,
Qlatin_tcvn5712,
Qlatin_viscii_lower,
Qideograph_hanziku_10,
Qideograph_hanziku_11,
Qideograph_hanziku_12,
- Qchina3_jef,
- Qideograph_cbeta,
Qideograph_daikanwa_2,
Qideograph_daikanwa,
- Qideograph_gt,
Qideograph_gt_pj_1,
Qideograph_gt_pj_2,
Qideograph_gt_pj_3,
Lisp_Object mother = XCHARSET_MOTHER (charset);
int final;
- if ( CHARSETP (mother) && (XCHARSET_MAX_CODE (charset) > 0) )
+ if ( XCHARSET_MAX_CODE (charset) > 0 )
{
- int code = code_point;
-
- if ( XCHARSET_CONVERSION (charset) == CONVERSION_94x60 )
+ if ( CHARSETP (mother) )
{
- int row = code_point >> 8;
- int cell = code_point & 255;
+ int code = code_point;
- if (row < 16 + 32)
- return -1;
- else if (row < 16 + 32 + 30)
- code = (row - (16 + 32)) * 94 + cell - 33;
- else if (row < 18 + 32 + 30)
- return -1;
- else if (row < 18 + 32 + 60)
- code = (row - (18 + 32)) * 94 + cell - 33;
+ if ( XCHARSET_CONVERSION (charset) == CONVERSION_94x60 )
+ {
+ int row = code_point >> 8;
+ int cell = code_point & 255;
+
+ if (row < 16 + 32)
+ return -1;
+ else if (row < 16 + 32 + 30)
+ code = (row - (16 + 32)) * 94 + cell - 33;
+ else if (row < 18 + 32 + 30)
+ return -1;
+ else if (row < 18 + 32 + 60)
+ code = (row - (18 + 32)) * 94 + cell - 33;
+ }
+ else if ( XCHARSET_CONVERSION (charset) == CONVERSION_94x94x60 )
+ {
+ int plane = code_point >> 16;
+ int row = (code_point >> 8) & 255;
+ int cell = code_point & 255;
+
+ if (row < 16 + 32)
+ return -1;
+ else if (row < 16 + 32 + 30)
+ code
+ = (plane - 33) * 94 * 60
+ + (row - (16 + 32)) * 94
+ + cell - 33;
+ else if (row < 18 + 32 + 30)
+ return -1;
+ else if (row < 18 + 32 + 60)
+ code
+ = (plane - 33) * 94 * 60
+ + (row - (18 + 32)) * 94
+ + cell - 33;
+ }
+ return
+ decode_builtin_char (mother, code + XCHARSET_CODE_OFFSET(charset));
}
- else if ( XCHARSET_CONVERSION (charset) == CONVERSION_94x94x60 )
+ else
{
- int plane = code_point >> 16;
- int row = (code_point >> 8) & 255;
- int cell = code_point & 255;
-
- if (row < 16 + 32)
- return -1;
- else if (row < 16 + 32 + 30)
- code
- = (plane - 33) * 94 * 60
- + (row - (16 + 32)) * 94
- + cell - 33;
- else if (row < 18 + 32 + 30)
+ Emchar cid
+ = (XCHARSET_DIMENSION (charset) == 1
+ ?
+ code_point - XCHARSET_BYTE_OFFSET (charset)
+ :
+ ((code_point >> 8) - XCHARSET_BYTE_OFFSET (charset))
+ * XCHARSET_CHARS (charset)
+ + (code_point & 0xFF) - XCHARSET_BYTE_OFFSET (charset))
+ + XCHARSET_CODE_OFFSET (charset);
+ if ((cid < XCHARSET_MIN_CODE (charset))
+ || (XCHARSET_MAX_CODE (charset) < cid))
return -1;
- else if (row < 18 + 32 + 60)
- code
- = (plane - 33) * 94 * 60
- + (row - (18 + 32)) * 94
- + cell - 33;
+ return cid;
}
- return
- decode_builtin_char (mother, code + XCHARSET_CODE_OFFSET(charset));
- }
- if (XCHARSET_MAX_CODE (charset))
- {
- Emchar cid
- = (XCHARSET_DIMENSION (charset) == 1
- ?
- code_point - XCHARSET_BYTE_OFFSET (charset)
- :
- ((code_point >> 8) - XCHARSET_BYTE_OFFSET (charset))
- * XCHARSET_CHARS (charset)
- + (code_point & 0xFF) - XCHARSET_BYTE_OFFSET (charset))
- + XCHARSET_CODE_OFFSET (charset);
- if ((cid < XCHARSET_MIN_CODE (charset))
- || (XCHARSET_MAX_CODE (charset) < cid))
- return -1;
- return cid;
}
else if ((final = XCHARSET_FINAL (charset)) >= '0')
{
Lisp_Object mother = XCHARSET_MOTHER (charset);
int min = XCHARSET_MIN_CODE (charset);
int max = XCHARSET_MAX_CODE (charset);
- int code;
+ int code = -1;
if ( CHARSETP (mother) )
- code = charset_code_point (mother, ch, defined_only);
+ {
+ if (XCHARSET_FINAL (charset) >= '0')
+ code = charset_code_point (mother, ch, 1);
+ else
+ code = charset_code_point (mother, ch, defined_only);
+ }
else if (defined_only)
return -1;
- else
+ else if ( ((max == 0) && CHARSETP (mother)
+ && (XCHARSET_FINAL (charset) == 0))
+ || ((min <= ch) && (ch <= max)) )
code = ch;
- if ( ((max == 0) && CHARSETP (mother)) ||
- ((min <= code) && (code <= max)) )
+ if ( ((max == 0) && CHARSETP (mother) && (code >= 0))
+ || ((min <= code) && (code <= max)) )
{
int d = code - XCHARSET_CODE_OFFSET (charset);
defsymbol (&Qucs_bmp, "ucs-bmp");
defsymbol (&Qucs_smp, "ucs-smp");
defsymbol (&Qucs_sip, "ucs-sip");
+ defsymbol (&Qucs_gb, "ucs-gb");
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");
defsymbol (&Qlatin_viscii_lower, "latin-viscii-lower");
defsymbol (&Qvietnamese_viscii_lower, "vietnamese-viscii-lower");
defsymbol (&Qvietnamese_viscii_upper, "vietnamese-viscii-upper");
defsymbol (&Qjis_x0208, "=jis-x0208");
- defsymbol (&Qideograph_gt, "ideograph-gt");
defsymbol (&Qideograph_gt_pj_1, "ideograph-gt-pj-1");
defsymbol (&Qideograph_gt_pj_2, "ideograph-gt-pj-2");
defsymbol (&Qideograph_gt_pj_3, "ideograph-gt-pj-3");
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 (&Qethiopic_ucs, "ethiopic-ucs");
#endif
defsymbol (&Qchinese_big5_1, "chinese-big5-1");
build_string ("\\(ISO10646.*-2\\|UCS00-2\\)"),
Qnil, MIN_CHAR_SIP, MAX_CHAR_SIP,
MIN_CHAR_SIP, 0, Qnil, CONVERSION_IDENTICAL);
+ staticpro (&Vcharset_ucs_gb);
+ Vcharset_ucs_gb =
+ make_charset (LEADING_BYTE_UCS_GB, Qucs_gb, 256, 3,
+ 2, 2, 0, CHARSET_LEFT_TO_RIGHT,
+ build_string ("UCS for GB"),
+ build_string ("UCS for GB"),
+ build_string ("ISO/IEC 10646 for GB"),
+ build_string (""),
+ Qnil, 0, 0, 0, 0, Vcharset_ucs, CONVERSION_IDENTICAL);
staticpro (&Vcharset_ucs_cns);
Vcharset_ucs_cns =
make_charset (LEADING_BYTE_UCS_CNS, Qucs_cns, 256, 3,
build_string ("ISO/IEC 10646 for Korean Standards"),
build_string (""),
Qnil, 0, 0, 0, 0, Vcharset_ucs, CONVERSION_IDENTICAL);
- staticpro (&Vcharset_ucs_big5);
- Vcharset_ucs_big5 =
- make_charset (LEADING_BYTE_UCS_BIG5, Qucs_big5, 256, 3,
- 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 (""),
- Qnil, 0, 0, 0, 0, Vcharset_ucs, CONVERSION_IDENTICAL);
#else
# define MIN_CHAR_THAI 0
# define MAX_CHAR_THAI 0
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_CHINA3_JEF, MAX_CHAR_CHINA3_JEF,
- MIN_CHAR_CHINA3_JEF, 0, Qnil, CONVERSION_IDENTICAL);
- 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,
- MIN_CHAR_CBETA, 0, Qnil, CONVERSION_IDENTICAL);
- staticpro (&Vcharset_ideograph_gt);
- Vcharset_ideograph_gt =
- make_charset (LEADING_BYTE_GT, Qideograph_gt, 256, 3,
- 2, 2, 0, CHARSET_LEFT_TO_RIGHT,
- build_string ("GT"),
- build_string ("GT"),
- build_string ("GT"),
- build_string (""),
- Qnil, MIN_CHAR_GT, MAX_CHAR_GT,
- MIN_CHAR_GT, 0, Qnil, CONVERSION_IDENTICAL);
#define DEF_GT_PJ(n) \
staticpro (&Vcharset_ideograph_gt_pj_##n); \
Vcharset_ideograph_gt_pj_##n = \