X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fchartab.h;h=8fa102bc46852a69e5640b548e27383cc224a3df;hb=f2342f455de795f5f3bff879991ba0b6d93ef042;hp=7d62ac2100cbabeae466145ae3b1c4a7bdf4d5d2;hpb=1a457ecfa8bbb121c48cccd70779a0a23cf95e46;p=chise%2Fxemacs-chise.git- diff --git a/src/chartab.h b/src/chartab.h index 7d62ac2..8fa102b 100644 --- a/src/chartab.h +++ b/src/chartab.h @@ -1,7 +1,7 @@ /* Declarations having to do with Mule char tables. Copyright (C) 1992 Free Software Foundation, Inc. Copyright (C) 1995 Sun Microsystems, Inc. - Copyright (C) 1999,2000,2001 MORIOKA Tomohiko + Copyright (C) 1999,2000,2001,2002 MORIOKA Tomohiko This file is part of XEmacs. @@ -31,11 +31,19 @@ Boston, MA 02111-1307, USA. */ #ifdef UTF2000 +#ifdef HAVE_CHISE_CLIENT +#include "database.h" +#endif + EXFUN (Fmake_char, 3); EXFUN (Fdecode_char, 3); EXFUN (Fput_char_attribute, 3); +EXFUN (Ffind_char, 1); + +extern Lisp_Object Qdowncase, Qflippedcase, Q_lowercase, Q_uppercase; + /************************************************************************/ /* Char-ID Tables */ @@ -161,6 +169,9 @@ struct Lisp_Char_Table #ifdef UTF2000 Lisp_Object table; Lisp_Object default_value; + Lisp_Object name; + Lisp_Object db; + unsigned char unloaded; #else Lisp_Object ascii[NUM_ASCII_CHARS]; @@ -217,6 +228,12 @@ DECLARE_LRECORD (char_table, Lisp_Char_Table); #ifdef UTF2000 +#define CHAR_TABLE_NAME(ct) ((ct)->name) +#define XCHAR_TABLE_NAME(ct) CHAR_TABLE_NAME (XCHAR_TABLE (ct)) + +#define CHAR_TABLE_UNLOADED(ct) ((ct)->unloaded) +#define XCHAR_TABLE_UNLOADED(ct) CHAR_TABLE_UNLOADED (XCHAR_TABLE (ct)) + INLINE_HEADER Lisp_Object CHAR_TABLE_VALUE_UNSAFE (Lisp_Char_Table *ct, Emchar ch); INLINE_HEADER Lisp_Object @@ -314,24 +331,6 @@ extern Lisp_Object Vall_syntax_tables; #ifdef UTF2000 -INLINE_HEADER Lisp_Object get_char_id_table (Lisp_Char_Table* cit, Emchar ch); -INLINE_HEADER Lisp_Object -get_char_id_table (Lisp_Char_Table* cit, Emchar ch) -{ - Lisp_Object val = get_byte_table (get_byte_table - (get_byte_table - (get_byte_table - (cit->table, - (unsigned char)(ch >> 24)), - (unsigned char) (ch >> 16)), - (unsigned char) (ch >> 8)), - (unsigned char) ch); - if (UNBOUNDP (val)) - return cit->default_value; - else - return val; -} - INLINE_HEADER void put_char_id_table_0 (Lisp_Char_Table* cit, Emchar code, Lisp_Object value); INLINE_HEADER void @@ -350,6 +349,51 @@ put_char_id_table_0 (Lisp_Char_Table* cit, Emchar code, Lisp_Object value) cit->table = put_byte_table (table1, (unsigned char)(code >> 24), table2); } +#ifdef HAVE_CHISE_CLIENT +extern Lisp_Object Qsystem_char_id; + +Lisp_Object +char_attribute_system_db_file (Lisp_Object key_type, Lisp_Object attribute, + int writing_mode); + +Lisp_Object load_char_attribute_maybe (Lisp_Char_Table* cit, Emchar ch); +#endif + +INLINE_HEADER Lisp_Object +get_char_id_table_0 (Lisp_Char_Table* cit, Emchar ch); +INLINE_HEADER Lisp_Object +get_char_id_table_0 (Lisp_Char_Table* cit, Emchar ch) +{ + return get_byte_table (get_byte_table + (get_byte_table + (get_byte_table + (cit->table, + (unsigned char)(ch >> 24)), + (unsigned char) (ch >> 16)), + (unsigned char) (ch >> 8)), + (unsigned char) ch); +} + +INLINE_HEADER Lisp_Object +get_char_id_table (Lisp_Char_Table* cit, Emchar ch); +INLINE_HEADER Lisp_Object +get_char_id_table (Lisp_Char_Table* cit, Emchar ch) +{ + Lisp_Object val = get_char_id_table_0 (cit, ch); + +#ifdef HAVE_CHISE_CLIENT + if (EQ (val, Qunloaded)) + { + val = load_char_attribute_maybe (cit, ch); + put_char_id_table_0 (cit, ch, val); + } +#endif + if (UNBOUNDP (val)) + return cit->default_value; + else + return val; +} + void decode_char_table_range (Lisp_Object range, struct chartab_range *outrange); @@ -374,7 +418,7 @@ EXFUN (Fget_char_attribute, 3); #ifdef MULE int check_category_char(Emchar ch, Lisp_Object ctbl, - unsigned int designator, unsigned int not); + unsigned int designator, unsigned int not_p); extern Lisp_Object Vstandard_category_table;