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_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;
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,
Qideograph_hanziku_10,
Qideograph_hanziku_11,
Qideograph_hanziku_12,
- Qchina3_jef,
- Qideograph_cbeta,
Qideograph_daikanwa_2,
Qideograph_daikanwa,
Qideograph_gt,
}
if (CHARP (decoding_table))
return XCHAR (decoding_table);
-#ifdef HAVE_DATABASE
+#ifdef HAVE_CHISE_CLIENT
if (EQ (decoding_table, Qunloaded))
{
char_id = load_char_decoding_entry_maybe (ccs, code_point);
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;
- }
- else if ( XCHARSET_CONVERSION (charset) == CONVERSION_94x94x60 )
- {
- int plane = code_point >> 16;
- int row = (code_point >> 8) & 255;
- int cell = code_point & 255;
+ 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
- = (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;
- }
- else if ( XCHARSET_CONVERSION (charset) == CONVERSION_BIG5_1 )
- {
- unsigned int I
- = (((code_point >> 8) & 0x7F) - 33) * 94
- + (( code_point & 0x7F) - 33);
- unsigned char b1 = I / (0xFF - 0xA1 + 0x7F - 0x40) + 0xA1;
- unsigned char b2 = I % (0xFF - 0xA1 + 0x7F - 0x40);
+ 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;
- b2 += b2 < 0x3F ? 0x40 : 0x62;
- code = (b1 << 8) | b2;
+ 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;
+ }
+ else if ( XCHARSET_CONVERSION (charset) == CONVERSION_BIG5_1 )
+ {
+ unsigned int I
+ = (((code_point >> 8) & 0x7F) - 33) * 94
+ + (( code_point & 0x7F) - 33);
+ unsigned char b1 = I / (0xFF - 0xA1 + 0x7F - 0x40) + 0xA1;
+ unsigned char b2 = I % (0xFF - 0xA1 + 0x7F - 0x40);
+
+ b2 += b2 < 0x3F ? 0x40 : 0x62;
+ code = (b1 << 8) | b2;
+ }
+ else if ( XCHARSET_CONVERSION (charset) == CONVERSION_BIG5_2 )
+ {
+ unsigned int I
+ = (((code_point >> 8) & 0x7F) - 33) * 94
+ + (( code_point & 0x7F) - 33)
+ + BIG5_SAME_ROW * (0xC9 - 0xA1);
+ unsigned char b1 = I / (0xFF - 0xA1 + 0x7F - 0x40) + 0xA1;
+ unsigned char b2 = I % (0xFF - 0xA1 + 0x7F - 0x40);
+
+ b2 += b2 < 0x3F ? 0x40 : 0x62;
+ code = (b1 << 8) | b2;
+ }
+ return
+ decode_builtin_char (mother, code + XCHARSET_CODE_OFFSET(charset));
}
- else if ( XCHARSET_CONVERSION (charset) == CONVERSION_BIG5_2 )
+ else
{
- unsigned int I
- = (((code_point >> 8) & 0x7F) - 33) * 94
- + (( code_point & 0x7F) - 33)
- + BIG5_SAME_ROW * (0xC9 - 0xA1);
- unsigned char b1 = I / (0xFF - 0xA1 + 0x7F - 0x40) + 0xA1;
- unsigned char b2 = I % (0xFF - 0xA1 + 0x7F - 0x40);
-
- b2 += b2 < 0x3F ? 0x40 : 0x62;
- code = (b1 << 8) | b2;
+ 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;
}
- 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 (&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,
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,