X-Git-Url: http://git.chise.org/gitweb/?p=chise%2Fxemacs-chise.git.1;a=blobdiff_plain;f=src%2Fmule-charset.c;h=0007daaf9e1a6fa7793022eb49f0541bb82b61e7;hp=9ccd480cb97bf1e0b0b7d3c9a4df6778a73347a3;hb=57bf633187a745973c8f0e0220e3aad79a83462f;hpb=f6fe7c1d2dd1c89f0c1b9d094ef7d85140bac94b diff --git a/src/mule-charset.c b/src/mule-charset.c index 9ccd480..0007daa 100644 --- a/src/mule-charset.c +++ b/src/mule-charset.c @@ -1,7 +1,7 @@ /* 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, 2003, 2004, 2008, 2009, 2011 + Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2008, 2009, 2011, 2013, 2016 MORIOKA Tomohiko This file is part of XEmacs. @@ -1140,35 +1140,50 @@ decode_builtin_char (Lisp_Object charset, int code_point) } int -charset_code_point (Lisp_Object charset, Emchar ch, int defined_only) +charset_code_point (Lisp_Object charset, Emchar ch, int accepted_mode) { - Lisp_Object encoding_table = XCHARSET_ENCODING_TABLE (charset); Lisp_Object ret; - if ( CHAR_TABLEP (encoding_table) - && INTP (ret = get_char_id_table (XCHAR_TABLE(encoding_table), - ch)) ) - return XINT (ret); - else + if ( accepted_mode >= 0 ) + { + Lisp_Object encoding_table = XCHARSET_ENCODING_TABLE (charset); + + if ( CHAR_TABLEP (encoding_table) +#ifdef USE_CONCORD_OBJECT_SYSTEM + && !UNBOUNDP (ret = get_char_id_table_ce (XCHAR_TABLE + (encoding_table), + ch)) +#else + && !UNBOUNDP (ret = get_char_id_table (XCHAR_TABLE(encoding_table), + ch)) +#endif + ) + if ( INTP (ret) ) + return XINT (ret); + else + return -1; + } { Lisp_Object mother = XCHARSET_MOTHER (charset); int min = XCHARSET_MIN_CODE (charset); int max = XCHARSET_MAX_CODE (charset); int code = -1; - if ( CHARSETP (mother) ) - { - 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) + if ( CHARSETP (mother) && ( accepted_mode >= 0) + && ( XCHARSET_FINAL (charset) >= '0' ) + ) + code = charset_code_point (mother, ch, CHAR_DEFINED_ONLY); + else if ( CHARSETP (mother) + && ( XCHARSET_FINAL (charset) < '0' ) + ) + code = charset_code_point (mother, ch, accepted_mode); + else if ( accepted_mode == CHAR_DEFINED_ONLY ) return -1; else if ( ((max == 0) && CHARSETP (mother) && (XCHARSET_FINAL (charset) == 0)) || ((min <= ch) && (ch <= max)) ) code = ch; + if ( ((max == 0) && CHARSETP (mother) && (code >= 0)) || ((min <= code) && (code <= max)) ) { @@ -1261,7 +1276,7 @@ charset_code_point (Lisp_Object charset, Emchar ch, int defined_only) exit (-1); } } - else if (defined_only) + else if ( accepted_mode == CHAR_DEFINED_ONLY ) return -1; else if ( ( XCHARSET_FINAL (charset) >= '0' ) && ( XCHARSET_MIN_CODE (charset) == 0 ) @@ -2548,10 +2563,12 @@ load_char_decoding_entry_maybe (Lisp_Object ccs, int code_point) = chise_ds_decode_char (default_chise_data_source, XSTRING_DATA(Fsymbol_name (XCHARSET_NAME(ccs))), code_point); +#if 0 if (char_id >= 0) decoding_table_put_char (ccs, code_point, make_char (char_id)); else decoding_table_put_char (ccs, code_point, Qnil); +#endif /* chise_ccst_close (dt_ccs); */ return char_id; @@ -3488,7 +3505,7 @@ complex_vars_of_mule_charset (void) build_string ("JIS X0208"), build_string ("JIS X0208 Common"), build_string ("JIS X0208 Common part"), - build_string ("jisx0208\\.1990"), + build_string ("jisx0208"), - LEADING_BYTE_JAPANESE_JISX0208_1978, Qnil, MIN_CHAR_JIS_X0208_1990,