From a5356f7f8f0bea186cbeb941cbd9cd62c25373c9 Mon Sep 17 00:00:00 2001 From: tomo Date: Wed, 8 Jan 2003 10:08:30 +0000 Subject: [PATCH] (save_uint8_byte_table): Add new argument `filter'. (save_uint16_byte_table): Likewise. (save_byte_table): Likewise; convert values by it. (Fput_char_attribute): Don't use `char-refs-simplify-char-specs' for `ideographic-structure'. (Fsave_char_attribute_table): Use `char-refs-simplify-char-specs' as the filter for `ideographic-structure'. --- src/chartab.c | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/src/chartab.c b/src/chartab.c index 9fbd7c7..ba6db90 100644 --- a/src/chartab.c +++ b/src/chartab.c @@ -4,7 +4,7 @@ Copyright (C) 1995, 1996 Ben Wing. Copyright (C) 1995, 1997, 1999 Electrotechnical Laboratory, JAPAN. Licensed to the Free Software Foundation. - Copyright (C) 1999,2000,2001,2002 MORIOKA Tomohiko + Copyright (C) 1999,2000,2001,2002,2003 MORIOKA Tomohiko This file is part of XEmacs. @@ -322,7 +322,8 @@ map_over_uint8_byte_table (Lisp_Uint8_Byte_Table *ct, Lisp_Char_Table* root, static void save_uint8_byte_table (Lisp_Uint8_Byte_Table *ct, Lisp_Char_Table* root, Lisp_Object db, - Emchar ofs, int place) + Emchar ofs, int place, + Lisp_Object (*filter)(Lisp_Object value)) { struct chartab_range rainj; int i, retval; @@ -633,7 +634,8 @@ map_over_uint16_byte_table (Lisp_Uint16_Byte_Table *ct, Lisp_Char_Table* root, static void save_uint16_byte_table (Lisp_Uint16_Byte_Table *ct, Lisp_Char_Table* root, Lisp_Object db, - Emchar ofs, int place) + Emchar ofs, int place, + Lisp_Object (*filter)(Lisp_Object value)) { struct chartab_range rainj; int i, retval; @@ -893,7 +895,8 @@ map_over_byte_table (Lisp_Byte_Table *ct, Lisp_Char_Table* root, static void save_byte_table (Lisp_Byte_Table *ct, Lisp_Char_Table* root, Lisp_Object db, - Emchar ofs, int place) + Emchar ofs, int place, + Lisp_Object (*filter)(Lisp_Object value)) { int i, retval; Lisp_Object v; @@ -906,19 +909,19 @@ save_byte_table (Lisp_Byte_Table *ct, Lisp_Char_Table* root, if (UINT8_BYTE_TABLE_P (v)) { save_uint8_byte_table (XUINT8_BYTE_TABLE(v), root, db, - c, place - 1); + c, place - 1, filter); c += unit; } else if (UINT16_BYTE_TABLE_P (v)) { save_uint16_byte_table (XUINT16_BYTE_TABLE(v), root, db, - c, place - 1); + c, place - 1, filter); c += unit; } else if (BYTE_TABLE_P (v)) { save_byte_table (XBYTE_TABLE(v), root, db, - c, place - 1); + c, place - 1, filter); c += unit; } else if (EQ (v, Qunloaded)) @@ -930,6 +933,9 @@ save_byte_table (Lisp_Byte_Table *ct, Lisp_Char_Table* root, struct chartab_range rainj; Emchar c1 = c + unit; + if (filter != NULL) + v = (*filter)(v); + rainj.type = CHARTAB_RANGE_CHAR; for (; c < c1 && retval == 0; c++) @@ -3259,8 +3265,10 @@ Store CHARACTER's ATTRIBUTE with VALUE. attribute = Qto_ucs; #endif } +#if 0 else if (EQ (attribute, Qideographic_structure)) value = Fcopy_sequence (Fchar_refs_simplify_char_specs (value)); +#endif { Lisp_Object table = Fgethash (attribute, Vchar_attribute_hash_table, @@ -3380,12 +3388,21 @@ Save values of ATTRIBUTE into database file. db = Fopen_database (db_file, Qnil, Qnil, build_string ("w+"), Qnil); if (!NILP (db)) { + Lisp_Object (*filter)(Lisp_Object value); + + if (EQ (attribute, Qideographic_structure)) + filter = &Fchar_refs_simplify_char_specs; + else + filter = NULL; + if (UINT8_BYTE_TABLE_P (ct->table)) - save_uint8_byte_table (XUINT8_BYTE_TABLE(ct->table), ct, db, 0, 3); + save_uint8_byte_table (XUINT8_BYTE_TABLE(ct->table), ct, db, + 0, 3, filter); else if (UINT16_BYTE_TABLE_P (ct->table)) - save_uint16_byte_table (XUINT16_BYTE_TABLE(ct->table), ct, db, 0, 3); + save_uint16_byte_table (XUINT16_BYTE_TABLE(ct->table), ct, db, + 0, 3, filter); else if (BYTE_TABLE_P (ct->table)) - save_byte_table (XBYTE_TABLE(ct->table), ct, db, 0, 3); + save_byte_table (XBYTE_TABLE(ct->table), ct, db, 0, 3, filter); Fclose_database (db); return Qt; } -- 1.7.10.4