From: tomo Date: Wed, 12 Nov 2003 14:44:49 +0000 (+0000) Subject: (decode_defined_char): Add new argument `without_inheritance'. X-Git-Tag: r21-4-14-chise-0_21-4^2~10 X-Git-Url: http://git.chise.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=44f4095af638e59ec6534d3019fbde320220e210;p=chise%2Fxemacs-chise.git.1 (decode_defined_char): Add new argument `without_inheritance'. (Fdecode_char): Add new optional argument `without_inheritance'. (Fdecode_builtin_char): Modify for `Fdecode_char'. --- diff --git a/src/mule-charset.c b/src/mule-charset.c index 79ddc26..14efd20 100644 --- a/src/mule-charset.c +++ b/src/mule-charset.c @@ -846,7 +846,7 @@ get_unallocated_leading_byte (int dimension) #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); @@ -870,14 +870,16 @@ decode_defined_char (Lisp_Object ccs, int code_point) #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 ) { @@ -888,7 +890,8 @@ decode_defined_char (Lisp_Object ccs, int code_point) 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 ) { @@ -900,7 +903,8 @@ decode_defined_char (Lisp_Object ccs, int code_point) 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; @@ -977,7 +981,8 @@ decode_builtin_char (Lisp_Object charset, int code_point) code = (b1 << 8) | b2; } return - decode_builtin_char (mother, code + XCHARSET_CODE_OFFSET(charset)); + decode_builtin_char (mother, + code + XCHARSET_CODE_OFFSET(charset)); } else { @@ -2370,12 +2375,13 @@ load_char_decoding_entry_maybe (Lisp_Object ccs, int code_point) /************************************************************************/ #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; @@ -2385,9 +2391,9 @@ If corresponding character is not found, nil is returned. 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; } @@ -2402,7 +2408,7 @@ Make a builtin character from CHARSET and code-point CODE. 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)) @@ -2431,7 +2437,8 @@ Make a builtin character from CHARSET and code-point CODE. 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