X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fchartab.c;h=ba0083dd7cc84351627c1a15730b28384c5291da;hb=faf9d7ae7d5a6fab8837769b1ac9e91247756f83;hp=748cd29e0692208664b11ca9d9702b19e5a2a014;hpb=2d990ccf7d8c308da3eda94784d0f072def544d7;p=chise%2Fxemacs-chise.git- diff --git a/src/chartab.c b/src/chartab.c index 748cd29..ba0083d 100644 --- a/src/chartab.c +++ b/src/chartab.c @@ -5,7 +5,7 @@ Copyright (C) 1995, 1997, 1999 Electrotechnical Laboratory, JAPAN. Licensed to the Free Software Foundation. Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008, - 2010, 2011 MORIOKA Tomohiko + 2010, 2011, 2012 MORIOKA Tomohiko This file is part of XEmacs. @@ -100,7 +100,7 @@ Lisp_Object Vchar_db_stingy_mode; INLINE_HEADER int INT_UINT8_P (Lisp_Object obj); INLINE_HEADER int UINT8_VALUE_P (Lisp_Object obj); INLINE_HEADER unsigned char UINT8_ENCODE (Lisp_Object obj); -INLINE_HEADER Lisp_Object UINT8_DECODE (unsigned char n); +/* INLINE_HEADER */ Lisp_Object UINT8_DECODE (unsigned char n); INLINE_HEADER unsigned short UINT8_TO_UINT16 (unsigned char n); INLINE_HEADER int @@ -138,7 +138,7 @@ UINT8_ENCODE (Lisp_Object obj) return XINT (obj); } -INLINE_HEADER Lisp_Object +/* INLINE_HEADER */ Lisp_Object UINT8_DECODE (unsigned char n) { if (n == BT_UINT8_unloaded) @@ -392,7 +392,7 @@ save_uint8_byte_table (Lisp_Uint8_Byte_Table *ct, Lisp_Char_Table* root, INLINE_HEADER int INT_UINT16_P (Lisp_Object obj); INLINE_HEADER int UINT16_VALUE_P (Lisp_Object obj); INLINE_HEADER unsigned short UINT16_ENCODE (Lisp_Object obj); -INLINE_HEADER Lisp_Object UINT16_DECODE (unsigned short us); +/* INLINE_HEADER */ Lisp_Object UINT16_DECODE (unsigned short us); INLINE_HEADER int INT_UINT16_P (Lisp_Object obj) @@ -429,7 +429,7 @@ UINT16_ENCODE (Lisp_Object obj) return XINT (obj); } -INLINE_HEADER Lisp_Object +/* INLINE_HEADER */ Lisp_Object UINT16_DECODE (unsigned short n) { if (n == BT_UINT16_unloaded) @@ -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. @@ -3531,14 +3568,23 @@ Store CHARACTER's ATTRIBUTE with VALUE. if (!NILP (ccs)) { - value = put_char_ccs_code_point (character, ccs, value); + if ( !NILP (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 +4880,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);