#define BIG5_SAME_ROW (0xFF - 0xA1 + 0x7F - 0x40)
Emchar
-decode_defined_char (Lisp_Object ccs, int code_point)
+decode_defined_char (Lisp_Object ccs, int code_point, int without_inheritance)
{
int dim = XCHARSET_DIMENSION (ccs);
Lisp_Object decoding_table = XCHARSET_DECODING_TABLE (ccs);
#endif /* HAVE_CHISE */
if (char_id >= 0)
return char_id;
- else if ( CHARSETP (mother = XCHARSET_MOTHER (ccs)) )
+ else if ( !without_inheritance
+ && CHARSETP (mother = XCHARSET_MOTHER (ccs)) )
{
if ( XCHARSET_CONVERSION (ccs) == CONVERSION_IDENTICAL )
{
if ( EQ (mother, Vcharset_ucs) )
- return DECODE_CHAR (mother, code_point);
+ return DECODE_CHAR (mother, code_point, without_inheritance);
else
- return decode_defined_char (mother, code_point);
+ return decode_defined_char (mother, code_point,
+ without_inheritance);
}
else if ( XCHARSET_CONVERSION (ccs) == CONVERSION_BIG5_1 )
{
unsigned char b2 = I % (0xFF - 0xA1 + 0x7F - 0x40);
b2 += b2 < 0x3F ? 0x40 : 0x62;
- return decode_defined_char (mother, (b1 << 8) | b2);
+ return decode_defined_char (mother, (b1 << 8) | b2,
+ without_inheritance);
}
else if ( XCHARSET_CONVERSION (ccs) == CONVERSION_BIG5_2 )
{
unsigned char b2 = I % (0xFF - 0xA1 + 0x7F - 0x40);
b2 += b2 < 0x3F ? 0x40 : 0x62;
- return decode_defined_char (mother, (b1 << 8) | b2);
+ return decode_defined_char (mother, (b1 << 8) | b2,
+ without_inheritance);
}
}
return -1;
code = (b1 << 8) | b2;
}
return
- decode_builtin_char (mother, code + XCHARSET_CODE_OFFSET(charset));
+ decode_builtin_char (mother,
+ code + XCHARSET_CODE_OFFSET(charset));
}
else
{
/************************************************************************/
#ifdef UTF2000
-DEFUN ("decode-char", Fdecode_char, 2, 3, 0, /*
+DEFUN ("decode-char", Fdecode_char, 2, 4, 0, /*
Make a character from CHARSET and code-point CODE.
If DEFINED_ONLY is non-nil, builtin character is not returned.
+If WITHOUT_INHERITANCE is non-nil, inherited character is not returned.
If corresponding character is not found, nil is returned.
*/
- (charset, code, defined_only))
+ (charset, code, defined_only, without_inheritance))
{
int c;
if (XCHARSET_GRAPHIC (charset) == 1)
c &= 0x7F7F7F7F;
if (NILP (defined_only))
- c = DECODE_CHAR (charset, c);
+ c = DECODE_CHAR (charset, c, !NILP (without_inheritance));
else
- c = decode_defined_char (charset, c);
+ c = decode_defined_char (charset, c, !NILP (without_inheritance));
return c >= 0 ? make_char (c) : Qnil;
}
CHECK_INT (code);
if (EQ (charset, Vcharset_latin_viscii))
{
- Lisp_Object chr = Fdecode_char (charset, code, Qnil);
+ Lisp_Object chr = Fdecode_char (charset, code, Qnil, Qnil);
Lisp_Object ret;
if (!NILP (chr))
c &= 0x7F7F7F7F;
#endif
c = decode_builtin_char (charset, c);
- return c >= 0 ? make_char (c) : Fdecode_char (charset, code, Qnil);
+ return
+ c >= 0 ? make_char (c) : Fdecode_char (charset, code, Qnil, Qnil);
}
#endif