From: tomo Date: Wed, 16 Mar 2011 12:03:30 +0000 (+0000) Subject: (Fchar_feature_base_name_eq): New function when UTF2000 is enabled. X-Git-Tag: r21-4-22-chise-0_25-6^20~114 X-Git-Url: http://git.chise.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eaeec525cfb6e8d422f408ff2f3bcb8702a8cf29;p=chise%2Fxemacs-chise.git.1 (Fchar_feature_base_name_eq): New function when UTF2000 is enabled. (Fput_char_attribute): Use `Fchar_feature_base_name_eq'. (syms_of_chartab): Add new builtin function `char-feature-base-name=' when UTF2000 is enabled. --- diff --git a/src/chartab.c b/src/chartab.c index 748cd29..b97f39d 100644 --- a/src/chartab.c +++ b/src/chartab.c @@ -3270,6 +3270,43 @@ Return the alist of attributes of CHARACTER. return alist; } +DEFUN ("char-feature-base-name=", Fchar_feature_base_name_eq, 2, 2, 0, /* +Return the alist of attributes of CHARACTER. +*/ + (base_name, feature_name)) +{ + Lisp_String *bn, *fn; + Bytecount len_bn, len_fn, i; + Bufbyte *ptr_bn, *ptr_fn; + + CHECK_SYMBOL (base_name); + CHECK_SYMBOL (feature_name); + + bn = XSYMBOL (base_name)->name; + fn = XSYMBOL (feature_name)->name; + len_bn = string_length (bn); + len_fn = string_length (fn); + + if ( len_bn > len_fn ) + return Qnil; + + ptr_bn = string_data (bn); + ptr_fn = string_data (fn); + for ( i = len_fn - 1; i >= 0; i-- ) + { + if ( ptr_fn[i] == '*' ) + return Qnil; + if ( ptr_fn[i] == '@' ) + break; + } + if ( i < 0 ) + i = len_fn; + if ( (len_bn == i) && (memcmp (ptr_bn, ptr_fn, len_bn) == 0) ) + return Qt; + else + return Qnil; +} + DEFUN ("get-char-attribute", Fget_char_attribute, 2, 3, 0, /* Return the value of CHARACTER's ATTRIBUTE. Return DEFAULT-VALUE if the value is not exist. @@ -3534,11 +3571,19 @@ Store CHARACTER's ATTRIBUTE with VALUE. value = put_char_ccs_code_point (character, ccs, value); attribute = XCHARSET_NAME (ccs); } - else if ( EQ (attribute, Qrep_decomposition) || - EQ (attribute, Q_decomposition) || + else if ( +#if 0 + EQ (attribute, Qrep_decomposition) || +#else + !NILP (Fchar_feature_base_name_eq (Qrep_decomposition, + attribute)) || +#endif + EQ (attribute, Q_decomposition) /* || */ +#if 0 !NILP (Fstring_match (build_string ("^=decomposition@[^*]+$"), Fsymbol_name (attribute), Qnil, Qnil)) +#endif ) { Lisp_Object ret; @@ -4834,6 +4879,7 @@ syms_of_chartab (void) #endif DEFSUBR (Fload_char_attribute_table); #endif + DEFSUBR (Fchar_feature_base_name_eq); DEFSUBR (Fchar_feature); DEFSUBR (Fchar_attribute_alist); DEFSUBR (Fget_char_attribute);