annotate src/chartab.c @ 109139:c25c24812fb1

Convert declarations or definitions to standard C. * src/xsmfns.c (smc_save_yourself_CB, smc_error_handler): * src/xrdb.c (get_system_name): * src/window.c (shrink_windows): * src/syntax.c (forw_comment): * src/scroll.c (calculate_scrolling, calculate_direct_scrolling) (ins_del_costs): * src/mem-limits.h (start_of_data): * src/lread.c (readevalloop): * src/gtkutil.c (xg_dialog_response_cb, xg_get_file_with_chooser) (xg_get_file_with_selection, xg_update_menubar, xg_update_submenu): * src/frame.c (x_get_focus_frame): * src/floatfns.c (fmod_float): * src/fileio.c (choose_write_coding_system): * src/emacs.c (fatal_error_signal, init_cmdargs, argmatch) (malloc_initialize_hook, sort_args, synchronize_locale): * src/doprnt.c (doprnt): * src/dired.c (compile_pattern): * src/data.c (fmod_float): * src/chartab.c (map_sub_char_table, map_sub_char_table_for_charset) (map_char_table_for_charset): * src/charset.c (define_charset_internal): * src/alloc.c (Fgarbage_collect): Convert declarations or definitions to standard C.
author Dan Nicolaescu <dann@ics.uci.edu>
date Sun, 04 Jul 2010 21:52:39 -0700
parents aec1143e8d85
children 8cfee7d2955f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1 /* chartab.c -- char-table support
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 105669
diff changeset
2 Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
3 National Institute of Advanced Industrial Science and Technology (AIST)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
4 Registration Number H13PRO009
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
5
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
6 This file is part of GNU Emacs.
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
7
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94589
diff changeset
8 GNU Emacs is free software: you can redistribute it and/or modify
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
9 it under the terms of the GNU General Public License as published by
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94589
diff changeset
10 the Free Software Foundation, either version 3 of the License, or
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94589
diff changeset
11 (at your option) any later version.
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
12
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
13 GNU Emacs is distributed in the hope that it will be useful,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
16 GNU General Public License for more details.
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
17
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94589
diff changeset
19 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
20
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
21 #include <config.h>
105669
68dd71358159 * alloc.c: Do not define struct catchtag.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 103877
diff changeset
22 #include <setjmp.h>
88858
889b48cce7a1 Include "...h", not <...h> in some cases.
Dave Love <fx@gnu.org>
parents: 88822
diff changeset
23 #include "lisp.h"
889b48cce7a1 Include "...h", not <...h> in some cases.
Dave Love <fx@gnu.org>
parents: 88822
diff changeset
24 #include "character.h"
889b48cce7a1 Include "...h", not <...h> in some cases.
Dave Love <fx@gnu.org>
parents: 88822
diff changeset
25 #include "charset.h"
889b48cce7a1 Include "...h", not <...h> in some cases.
Dave Love <fx@gnu.org>
parents: 88822
diff changeset
26 #include "ccl.h"
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
27
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
28 /* 64/16/32/128 */
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
29
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
30 /* Number of elements in Nth level char-table. */
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
31 const int chartab_size[4] =
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
32 { (1 << CHARTAB_SIZE_BITS_0),
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
33 (1 << CHARTAB_SIZE_BITS_1),
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
34 (1 << CHARTAB_SIZE_BITS_2),
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
35 (1 << CHARTAB_SIZE_BITS_3) };
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
36
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
37 /* Number of characters each element of Nth level char-table
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
38 covers. */
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
39 const int chartab_chars[4] =
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
40 { (1 << (CHARTAB_SIZE_BITS_1 + CHARTAB_SIZE_BITS_2 + CHARTAB_SIZE_BITS_3)),
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
41 (1 << (CHARTAB_SIZE_BITS_2 + CHARTAB_SIZE_BITS_3)),
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
42 (1 << CHARTAB_SIZE_BITS_3),
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
43 1 };
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
44
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
45 /* Number of characters (in bits) each element of Nth level char-table
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
46 covers. */
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
47 const int chartab_bits[4] =
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
48 { (CHARTAB_SIZE_BITS_1 + CHARTAB_SIZE_BITS_2 + CHARTAB_SIZE_BITS_3),
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
49 (CHARTAB_SIZE_BITS_2 + CHARTAB_SIZE_BITS_3),
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
50 CHARTAB_SIZE_BITS_3,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
51 0 };
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
52
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
53 #define CHARTAB_IDX(c, depth, min_char) \
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
54 (((c) - (min_char)) >> chartab_bits[(depth)])
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
55
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
56
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
57 DEFUN ("make-char-table", Fmake_char_table, Smake_char_table, 1, 2, 0,
88900
d6c50ac00394 (Fmake_char_table): Doc fixed. If PURPOSE doesn't
Kenichi Handa <handa@m17n.org>
parents: 88858
diff changeset
58 doc: /* Return a newly created char-table, with purpose PURPOSE.
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
59 Each element is initialized to INIT, which defaults to nil.
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
60
88900
d6c50ac00394 (Fmake_char_table): Doc fixed. If PURPOSE doesn't
Kenichi Handa <handa@m17n.org>
parents: 88858
diff changeset
61 PURPOSE should be a symbol. If it has a `char-table-extra-slots'
d6c50ac00394 (Fmake_char_table): Doc fixed. If PURPOSE doesn't
Kenichi Handa <handa@m17n.org>
parents: 88858
diff changeset
62 property, the property's value should be an integer between 0 and 10
d6c50ac00394 (Fmake_char_table): Doc fixed. If PURPOSE doesn't
Kenichi Handa <handa@m17n.org>
parents: 88858
diff changeset
63 that specifies how many extra slots the char-table has. Otherwise,
d6c50ac00394 (Fmake_char_table): Doc fixed. If PURPOSE doesn't
Kenichi Handa <handa@m17n.org>
parents: 88858
diff changeset
64 the char-table has no extra slot. */)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
65 (purpose, init)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
66 register Lisp_Object purpose, init;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
67 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
68 Lisp_Object vector;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
69 Lisp_Object n;
88900
d6c50ac00394 (Fmake_char_table): Doc fixed. If PURPOSE doesn't
Kenichi Handa <handa@m17n.org>
parents: 88858
diff changeset
70 int n_extras;
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
71 int size;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
72
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
73 CHECK_SYMBOL (purpose);
88900
d6c50ac00394 (Fmake_char_table): Doc fixed. If PURPOSE doesn't
Kenichi Handa <handa@m17n.org>
parents: 88858
diff changeset
74 n = Fget (purpose, Qchar_table_extra_slots);
d6c50ac00394 (Fmake_char_table): Doc fixed. If PURPOSE doesn't
Kenichi Handa <handa@m17n.org>
parents: 88858
diff changeset
75 if (NILP (n))
d6c50ac00394 (Fmake_char_table): Doc fixed. If PURPOSE doesn't
Kenichi Handa <handa@m17n.org>
parents: 88858
diff changeset
76 n_extras = 0;
d6c50ac00394 (Fmake_char_table): Doc fixed. If PURPOSE doesn't
Kenichi Handa <handa@m17n.org>
parents: 88858
diff changeset
77 else
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
78 {
88900
d6c50ac00394 (Fmake_char_table): Doc fixed. If PURPOSE doesn't
Kenichi Handa <handa@m17n.org>
parents: 88858
diff changeset
79 CHECK_NATNUM (n);
d6c50ac00394 (Fmake_char_table): Doc fixed. If PURPOSE doesn't
Kenichi Handa <handa@m17n.org>
parents: 88858
diff changeset
80 n_extras = XINT (n);
d6c50ac00394 (Fmake_char_table): Doc fixed. If PURPOSE doesn't
Kenichi Handa <handa@m17n.org>
parents: 88858
diff changeset
81 if (n_extras > 10)
d6c50ac00394 (Fmake_char_table): Doc fixed. If PURPOSE doesn't
Kenichi Handa <handa@m17n.org>
parents: 88858
diff changeset
82 args_out_of_range (n, Qnil);
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
83 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
84
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
85 size = VECSIZE (struct Lisp_Char_Table) - 1 + n_extras;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
86 vector = Fmake_vector (make_number (size), init);
91046
35069180a991 Fix up multi-tty merge
Miles Bader <miles@gnu.org>
parents: 91036
diff changeset
87 XSETPVECTYPE (XVECTOR (vector), PVEC_CHAR_TABLE);
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
88 XCHAR_TABLE (vector)->parent = Qnil;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
89 XCHAR_TABLE (vector)->purpose = purpose;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
90 XSETCHAR_TABLE (vector, XCHAR_TABLE (vector));
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
91 return vector;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
92 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
93
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
94 static Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
95 make_sub_char_table (int depth, int min_char, Lisp_Object defalt)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
96 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
97 Lisp_Object table;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
98 int size = VECSIZE (struct Lisp_Sub_Char_Table) - 1 + chartab_size[depth];
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
99
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
100 table = Fmake_vector (make_number (size), defalt);
91046
35069180a991 Fix up multi-tty merge
Miles Bader <miles@gnu.org>
parents: 91036
diff changeset
101 XSETPVECTYPE (XVECTOR (table), PVEC_SUB_CHAR_TABLE);
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
102 XSUB_CHAR_TABLE (table)->depth = make_number (depth);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
103 XSUB_CHAR_TABLE (table)->min_char = make_number (min_char);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
104
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
105 return table;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
106 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
107
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
108 static Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
109 char_table_ascii (Lisp_Object table)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
110 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
111 Lisp_Object sub;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
112
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
113 sub = XCHAR_TABLE (table)->contents[0];
89334
0b3ed65e4e97 (char_table_ascii): Check if the char table contents
Kenichi Handa <handa@m17n.org>
parents: 88988
diff changeset
114 if (! SUB_CHAR_TABLE_P (sub))
0b3ed65e4e97 (char_table_ascii): Check if the char table contents
Kenichi Handa <handa@m17n.org>
parents: 88988
diff changeset
115 return sub;
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
116 sub = XSUB_CHAR_TABLE (sub)->contents[0];
89334
0b3ed65e4e97 (char_table_ascii): Check if the char table contents
Kenichi Handa <handa@m17n.org>
parents: 88988
diff changeset
117 if (! SUB_CHAR_TABLE_P (sub))
0b3ed65e4e97 (char_table_ascii): Check if the char table contents
Kenichi Handa <handa@m17n.org>
parents: 88988
diff changeset
118 return sub;
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
119 return XSUB_CHAR_TABLE (sub)->contents[0];
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
120 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
121
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
122 Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
123 copy_sub_char_table (Lisp_Object table)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
124 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
125 Lisp_Object copy;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
126 int depth = XINT (XSUB_CHAR_TABLE (table)->depth);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
127 int min_char = XINT (XSUB_CHAR_TABLE (table)->min_char);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
128 Lisp_Object val;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
129 int i;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
130
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
131 copy = make_sub_char_table (depth, min_char, Qnil);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
132 /* Recursively copy any sub char-tables. */
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
133 for (i = 0; i < chartab_size[depth]; i++)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
134 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
135 val = XSUB_CHAR_TABLE (table)->contents[i];
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
136 if (SUB_CHAR_TABLE_P (val))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
137 XSUB_CHAR_TABLE (copy)->contents[i] = copy_sub_char_table (val);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
138 else
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
139 XSUB_CHAR_TABLE (copy)->contents[i] = val;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
140 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
141
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
142 return copy;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
143 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
144
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
145
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
146 Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
147 copy_char_table (Lisp_Object table)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
148 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
149 Lisp_Object copy;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
150 int size = XCHAR_TABLE (table)->size & PSEUDOVECTOR_SIZE_MASK;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
151 int i;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
152
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
153 copy = Fmake_vector (make_number (size), Qnil);
91046
35069180a991 Fix up multi-tty merge
Miles Bader <miles@gnu.org>
parents: 91036
diff changeset
154 XSETPVECTYPE (XVECTOR (copy), PVEC_CHAR_TABLE);
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
155 XCHAR_TABLE (copy)->defalt = XCHAR_TABLE (table)->defalt;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
156 XCHAR_TABLE (copy)->parent = XCHAR_TABLE (table)->parent;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
157 XCHAR_TABLE (copy)->purpose = XCHAR_TABLE (table)->purpose;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
158 for (i = 0; i < chartab_size[0]; i++)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
159 XCHAR_TABLE (copy)->contents[i]
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
160 = (SUB_CHAR_TABLE_P (XCHAR_TABLE (table)->contents[i])
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
161 ? copy_sub_char_table (XCHAR_TABLE (table)->contents[i])
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
162 : XCHAR_TABLE (table)->contents[i]);
95430
04a952ac356f * chartab.c (Foptimize_char_table, optimize_sub_char_table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94963
diff changeset
163 XCHAR_TABLE (copy)->ascii = char_table_ascii (copy);
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
164 size -= VECSIZE (struct Lisp_Char_Table) - 1;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
165 for (i = 0; i < size; i++)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
166 XCHAR_TABLE (copy)->extras[i] = XCHAR_TABLE (table)->extras[i];
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
167
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
168 XSETCHAR_TABLE (copy, XCHAR_TABLE (copy));
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
169 return copy;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
170 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
171
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
172 Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
173 sub_char_table_ref (Lisp_Object table, int c)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
174 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
175 struct Lisp_Sub_Char_Table *tbl = XSUB_CHAR_TABLE (table);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
176 int depth = XINT (tbl->depth);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
177 int min_char = XINT (tbl->min_char);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
178 Lisp_Object val;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
179
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
180 val = tbl->contents[CHARTAB_IDX (c, depth, min_char)];
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
181 if (SUB_CHAR_TABLE_P (val))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
182 val = sub_char_table_ref (val, c);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
183 return val;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
184 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
185
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
186 Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
187 char_table_ref (Lisp_Object table, int c)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
188 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
189 struct Lisp_Char_Table *tbl = XCHAR_TABLE (table);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
190 Lisp_Object val;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
191
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
192 if (ASCII_CHAR_P (c))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
193 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
194 val = tbl->ascii;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
195 if (SUB_CHAR_TABLE_P (val))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
196 val = XSUB_CHAR_TABLE (val)->contents[c];
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
197 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
198 else
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
199 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
200 val = tbl->contents[CHARTAB_IDX (c, 0, 0)];
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
201 if (SUB_CHAR_TABLE_P (val))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
202 val = sub_char_table_ref (val, c);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
203 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
204 if (NILP (val))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
205 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
206 val = tbl->defalt;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
207 if (NILP (val) && CHAR_TABLE_P (tbl->parent))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
208 val = char_table_ref (tbl->parent, c);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
209 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
210 return val;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89425
diff changeset
211 }
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
212
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
213 static Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
214 sub_char_table_ref_and_range (Lisp_Object table, int c, int *from, int *to, Lisp_Object defalt)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
215 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
216 struct Lisp_Sub_Char_Table *tbl = XSUB_CHAR_TABLE (table);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
217 int depth = XINT (tbl->depth);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
218 int min_char = XINT (tbl->min_char);
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
219 int max_char = min_char + chartab_chars[depth - 1] - 1;
99979
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
220 int index = CHARTAB_IDX (c, depth, min_char), idx;
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
221 Lisp_Object val;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89425
diff changeset
222
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
223 val = tbl->contents[index];
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
224 if (SUB_CHAR_TABLE_P (val))
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
225 val = sub_char_table_ref_and_range (val, c, from, to, defalt);
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
226 else if (NILP (val))
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
227 val = defalt;
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
228
99979
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
229 idx = index;
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
230 while (idx > 0 && *from < min_char + idx * chartab_chars[depth])
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
231 {
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
232 Lisp_Object this_val;
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
233
99979
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
234 c = min_char + idx * chartab_chars[depth] - 1;
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
235 idx--;
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
236 this_val = tbl->contents[idx];
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
237 if (SUB_CHAR_TABLE_P (this_val))
99979
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
238 this_val = sub_char_table_ref_and_range (this_val, c, from, to, defalt);
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
239 else if (NILP (this_val))
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
240 this_val = defalt;
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
241
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
242 if (! EQ (this_val, val))
99979
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
243 {
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
244 *from = c + 1;
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
245 break;
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
246 }
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
247 }
103877
65728b0073ee (sub_char_table_ref_and_range): Fix the range check against max_char.
Kenichi Handa <handa@m17n.org>
parents: 100951
diff changeset
248 while ((c = min_char + (index + 1) * chartab_chars[depth]) <= max_char
99979
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
249 && *to >= c)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
250 {
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
251 Lisp_Object this_val;
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
252
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
253 index++;
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
254 this_val = tbl->contents[index];
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
255 if (SUB_CHAR_TABLE_P (this_val))
99979
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
256 this_val = sub_char_table_ref_and_range (this_val, c, from, to, defalt);
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
257 else if (NILP (this_val))
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
258 this_val = defalt;
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
259 if (! EQ (this_val, val))
99979
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
260 {
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
261 *to = c - 1;
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
262 break;
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
263 }
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
264 }
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
265
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
266 return val;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
267 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
268
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
269
99979
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
270 /* Return the value for C in char-table TABLE. Shrink the range *FROM
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
271 and *TO to cover characters (containing C) that have the same value
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
272 as C. It is not assured that the values of (*FROM - 1) and (*TO +
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
273 1) are different from that of C. */
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
274
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
275 Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
276 char_table_ref_and_range (Lisp_Object table, int c, int *from, int *to)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
277 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
278 struct Lisp_Char_Table *tbl = XCHAR_TABLE (table);
99979
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
279 int index = CHARTAB_IDX (c, 0, 0), idx;
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
280 Lisp_Object val;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
281
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
282 val = tbl->contents[index];
99979
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
283 if (*from < 0)
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
284 *from = 0;
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
285 if (*to < 0)
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
286 *to = MAX_CHAR;
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
287 if (SUB_CHAR_TABLE_P (val))
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
288 val = sub_char_table_ref_and_range (val, c, from, to, tbl->defalt);
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
289 else if (NILP (val))
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
290 val = tbl->defalt;
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
291
99979
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
292 idx = index;
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
293 while (*from < idx * chartab_chars[0])
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
294 {
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
295 Lisp_Object this_val;
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
296
99979
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
297 c = idx * chartab_chars[0] - 1;
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
298 idx--;
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
299 this_val = tbl->contents[idx];
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
300 if (SUB_CHAR_TABLE_P (this_val))
99979
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
301 this_val = sub_char_table_ref_and_range (this_val, c, from, to,
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
302 tbl->defalt);
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
303 else if (NILP (this_val))
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
304 this_val = tbl->defalt;
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
305
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
306 if (! EQ (this_val, val))
99979
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
307 {
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
308 *from = c + 1;
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
309 break;
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
310 }
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
311 }
99979
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
312 while (*to >= (index + 1) * chartab_chars[0])
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
313 {
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
314 Lisp_Object this_val;
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
315
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
316 index++;
99979
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
317 c = index * chartab_chars[0];
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
318 this_val = tbl->contents[index];
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
319 if (SUB_CHAR_TABLE_P (this_val))
99979
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
320 this_val = sub_char_table_ref_and_range (this_val, c, from, to,
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
321 tbl->defalt);
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
322 else if (NILP (this_val))
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
323 this_val = tbl->defalt;
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
324 if (! EQ (this_val, val))
99979
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
325 {
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
326 *to = c - 1;
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
327 break;
a33d93f0c185 (sub_char_table_ref_and_range): Adjusted for the
Kenichi Handa <handa@m17n.org>
parents: 99485
diff changeset
328 }
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
329 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
330
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
331 return val;
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
332 }
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
333
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
334
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
335 #define ASET_RANGE(ARRAY, FROM, TO, LIMIT, VAL) \
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
336 do { \
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
337 int limit = (TO) < (LIMIT) ? (TO) : (LIMIT); \
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
338 for (; (FROM) < limit; (FROM)++) (ARRAY)->contents[(FROM)] = (VAL); \
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
339 } while (0)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
340
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
341 #define GET_SUB_CHAR_TABLE(TABLE, SUBTABLE, IDX, DEPTH, MIN_CHAR) \
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
342 do { \
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
343 (SUBTABLE) = (TABLE)->contents[(IDX)]; \
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
344 if (!SUB_CHAR_TABLE_P (SUBTABLE)) \
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
345 (SUBTABLE) = make_sub_char_table ((DEPTH), (MIN_CHAR), (SUBTABLE)); \
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
346 } while (0)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
347
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
348
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
349 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
350 sub_char_table_set (Lisp_Object table, int c, Lisp_Object val)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
351 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
352 struct Lisp_Sub_Char_Table *tbl = XSUB_CHAR_TABLE (table);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
353 int depth = XINT ((tbl)->depth);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
354 int min_char = XINT ((tbl)->min_char);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
355 int i = CHARTAB_IDX (c, depth, min_char);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
356 Lisp_Object sub;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89425
diff changeset
357
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
358 if (depth == 3)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
359 tbl->contents[i] = val;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
360 else
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
361 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
362 sub = tbl->contents[i];
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
363 if (! SUB_CHAR_TABLE_P (sub))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
364 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
365 sub = make_sub_char_table (depth + 1,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
366 min_char + i * chartab_chars[depth], sub);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
367 tbl->contents[i] = sub;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
368 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
369 sub_char_table_set (sub, c, val);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
370 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
371 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
372
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
373 Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
374 char_table_set (Lisp_Object table, int c, Lisp_Object val)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
375 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
376 struct Lisp_Char_Table *tbl = XCHAR_TABLE (table);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
377
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
378 if (ASCII_CHAR_P (c)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
379 && SUB_CHAR_TABLE_P (tbl->ascii))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
380 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
381 XSUB_CHAR_TABLE (tbl->ascii)->contents[c] = val;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
382 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
383 else
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
384 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
385 int i = CHARTAB_IDX (c, 0, 0);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
386 Lisp_Object sub;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
387
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
388 sub = tbl->contents[i];
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
389 if (! SUB_CHAR_TABLE_P (sub))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
390 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
391 sub = make_sub_char_table (1, i * chartab_chars[0], sub);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
392 tbl->contents[i] = sub;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
393 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
394 sub_char_table_set (sub, c, val);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
395 if (ASCII_CHAR_P (c))
89334
0b3ed65e4e97 (char_table_ascii): Check if the char table contents
Kenichi Handa <handa@m17n.org>
parents: 88988
diff changeset
396 tbl->ascii = char_table_ascii (table);
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
397 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
398 return val;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
399 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
400
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
401 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
402 sub_char_table_set_range (Lisp_Object *table, int depth, int min_char, int from, int to, Lisp_Object val)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
403 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
404 int max_char = min_char + chartab_chars[depth] - 1;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
405
88988
cd3317b3e1a9 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88900
diff changeset
406 if (depth == 3 || (from <= min_char && to >= max_char))
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
407 *table = val;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
408 else
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
409 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
410 int i, j;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
411
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
412 depth++;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
413 if (! SUB_CHAR_TABLE_P (*table))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
414 *table = make_sub_char_table (depth, min_char, *table);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
415 if (from < min_char)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
416 from = min_char;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
417 if (to > max_char)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
418 to = max_char;
88429
89eaf88b37b4 (sub_char_table_set_range): Optimized for the case
Kenichi Handa <handa@m17n.org>
parents: 88358
diff changeset
419 i = CHARTAB_IDX (from, depth, min_char);
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
420 j = CHARTAB_IDX (to, depth, min_char);
88429
89eaf88b37b4 (sub_char_table_set_range): Optimized for the case
Kenichi Handa <handa@m17n.org>
parents: 88358
diff changeset
421 min_char += chartab_chars[depth] * i;
89eaf88b37b4 (sub_char_table_set_range): Optimized for the case
Kenichi Handa <handa@m17n.org>
parents: 88358
diff changeset
422 for (; i <= j; i++, min_char += chartab_chars[depth])
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
423 sub_char_table_set_range (XSUB_CHAR_TABLE (*table)->contents + i,
88429
89eaf88b37b4 (sub_char_table_set_range): Optimized for the case
Kenichi Handa <handa@m17n.org>
parents: 88358
diff changeset
424 depth, min_char, from, to, val);
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
425 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
426 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
427
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
428
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
429 Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
430 char_table_set_range (Lisp_Object table, int from, int to, Lisp_Object val)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
431 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
432 struct Lisp_Char_Table *tbl = XCHAR_TABLE (table);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
433 Lisp_Object *contents = tbl->contents;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
434 int i, min_char;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
435
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
436 if (from == to)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
437 char_table_set (table, from, val);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
438 else
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
439 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
440 for (i = CHARTAB_IDX (from, 0, 0), min_char = i * chartab_chars[0];
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
441 min_char <= to;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
442 i++, min_char += chartab_chars[0])
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
443 sub_char_table_set_range (contents + i, 0, min_char, from, to, val);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
444 if (ASCII_CHAR_P (from))
89334
0b3ed65e4e97 (char_table_ascii): Check if the char table contents
Kenichi Handa <handa@m17n.org>
parents: 88988
diff changeset
445 tbl->ascii = char_table_ascii (table);
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
446 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
447 return val;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
448 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
449
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
450
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
451 DEFUN ("char-table-subtype", Fchar_table_subtype, Schar_table_subtype,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
452 1, 1, 0,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
453 doc: /*
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
454 Return the subtype of char-table CHAR-TABLE. The value is a symbol. */)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
455 (char_table)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
456 Lisp_Object char_table;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
457 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
458 CHECK_CHAR_TABLE (char_table);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
459
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
460 return XCHAR_TABLE (char_table)->purpose;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
461 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
462
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
463 DEFUN ("char-table-parent", Fchar_table_parent, Schar_table_parent,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
464 1, 1, 0,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
465 doc: /* Return the parent char-table of CHAR-TABLE.
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
466 The value is either nil or another char-table.
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
467 If CHAR-TABLE holds nil for a given character,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
468 then the actual applicable value is inherited from the parent char-table
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
469 \(or from its parents, if necessary). */)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
470 (char_table)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
471 Lisp_Object char_table;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
472 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
473 CHECK_CHAR_TABLE (char_table);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
474
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
475 return XCHAR_TABLE (char_table)->parent;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
476 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
477
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
478 DEFUN ("set-char-table-parent", Fset_char_table_parent, Sset_char_table_parent,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
479 2, 2, 0,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
480 doc: /* Set the parent char-table of CHAR-TABLE to PARENT.
89909
68c22ea6027c Sync to HEAD
Kenichi Handa <handa@m17n.org>
parents: 89684
diff changeset
481 Return PARENT. PARENT must be either nil or another char-table. */)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
482 (char_table, parent)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
483 Lisp_Object char_table, parent;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
484 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
485 Lisp_Object temp;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
486
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
487 CHECK_CHAR_TABLE (char_table);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
488
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
489 if (!NILP (parent))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
490 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
491 CHECK_CHAR_TABLE (parent);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
492
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
493 for (temp = parent; !NILP (temp); temp = XCHAR_TABLE (temp)->parent)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
494 if (EQ (temp, char_table))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
495 error ("Attempt to make a chartable be its own parent");
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
496 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
497
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
498 XCHAR_TABLE (char_table)->parent = parent;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
499
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
500 return parent;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
501 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
502
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
503 DEFUN ("char-table-extra-slot", Fchar_table_extra_slot, Schar_table_extra_slot,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
504 2, 2, 0,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
505 doc: /* Return the value of CHAR-TABLE's extra-slot number N. */)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
506 (char_table, n)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
507 Lisp_Object char_table, n;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
508 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
509 CHECK_CHAR_TABLE (char_table);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
510 CHECK_NUMBER (n);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
511 if (XINT (n) < 0
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
512 || XINT (n) >= CHAR_TABLE_EXTRA_SLOTS (XCHAR_TABLE (char_table)))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
513 args_out_of_range (char_table, n);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
514
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
515 return XCHAR_TABLE (char_table)->extras[XINT (n)];
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
516 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
517
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
518 DEFUN ("set-char-table-extra-slot", Fset_char_table_extra_slot,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
519 Sset_char_table_extra_slot,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
520 3, 3, 0,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
521 doc: /* Set CHAR-TABLE's extra-slot number N to VALUE. */)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
522 (char_table, n, value)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
523 Lisp_Object char_table, n, value;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
524 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
525 CHECK_CHAR_TABLE (char_table);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
526 CHECK_NUMBER (n);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
527 if (XINT (n) < 0
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
528 || XINT (n) >= CHAR_TABLE_EXTRA_SLOTS (XCHAR_TABLE (char_table)))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
529 args_out_of_range (char_table, n);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
530
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
531 return XCHAR_TABLE (char_table)->extras[XINT (n)] = value;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
532 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
533
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
534 DEFUN ("char-table-range", Fchar_table_range, Schar_table_range,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
535 2, 2, 0,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
536 doc: /* Return the value in CHAR-TABLE for a range of characters RANGE.
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
537 RANGE should be nil (for the default value),
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
538 a cons of character codes (for characters in the range), or a character code. */)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
539 (char_table, range)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
540 Lisp_Object char_table, range;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
541 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
542 Lisp_Object val;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
543 CHECK_CHAR_TABLE (char_table);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
544
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
545 if (EQ (range, Qnil))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
546 val = XCHAR_TABLE (char_table)->defalt;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
547 else if (INTEGERP (range))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
548 val = CHAR_TABLE_REF (char_table, XINT (range));
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
549 else if (CONSP (range))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
550 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
551 int from, to;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
552
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89425
diff changeset
553 CHECK_CHARACTER_CAR (range);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89425
diff changeset
554 CHECK_CHARACTER_CDR (range);
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
555 val = char_table_ref_and_range (char_table, XINT (XCAR (range)),
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
556 &from, &to);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
557 /* Not yet implemented. */
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
558 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
559 else
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
560 error ("Invalid RANGE argument to `char-table-range'");
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
561 return val;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
562 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
563
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
564 DEFUN ("set-char-table-range", Fset_char_table_range, Sset_char_table_range,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
565 3, 3, 0,
89909
68c22ea6027c Sync to HEAD
Kenichi Handa <handa@m17n.org>
parents: 89684
diff changeset
566 doc: /* Set the value in CHAR-TABLE for a range of characters RANGE to VALUE.
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
567 RANGE should be t (for all characters), nil (for the default value),
89909
68c22ea6027c Sync to HEAD
Kenichi Handa <handa@m17n.org>
parents: 89684
diff changeset
568 a cons of character codes (for characters in the range),
68c22ea6027c Sync to HEAD
Kenichi Handa <handa@m17n.org>
parents: 89684
diff changeset
569 or a character code. Return VALUE. */)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
570 (char_table, range, value)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
571 Lisp_Object char_table, range, value;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
572 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
573 CHECK_CHAR_TABLE (char_table);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
574 if (EQ (range, Qt))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
575 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
576 int i;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
577
94589
d97320b13374 (Fset_char_table_range): If range is t, really set all chars to that value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91547
diff changeset
578 XCHAR_TABLE (char_table)->ascii = value;
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
579 for (i = 0; i < chartab_size[0]; i++)
94589
d97320b13374 (Fset_char_table_range): If range is t, really set all chars to that value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91547
diff changeset
580 XCHAR_TABLE (char_table)->contents[i] = value;
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
581 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
582 else if (EQ (range, Qnil))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
583 XCHAR_TABLE (char_table)->defalt = value;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
584 else if (INTEGERP (range))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
585 char_table_set (char_table, XINT (range), value);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
586 else if (CONSP (range))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
587 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89425
diff changeset
588 CHECK_CHARACTER_CAR (range);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89425
diff changeset
589 CHECK_CHARACTER_CDR (range);
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
590 char_table_set_range (char_table,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
591 XINT (XCAR (range)), XINT (XCDR (range)), value);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
592 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
593 else
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
594 error ("Invalid RANGE argument to `set-char-table-range'");
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
595
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
596 return value;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
597 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
598
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
599 DEFUN ("set-char-table-default", Fset_char_table_default,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
600 Sset_char_table_default, 3, 3, 0,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
601 doc: /*
88822
9c92853c0d10 (make_sub_char_table): Remove unused var.
Dave Love <fx@gnu.org>
parents: 88746
diff changeset
602 This function is obsolete and has no effect. */)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
603 (char_table, ch, value)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
604 Lisp_Object char_table, ch, value;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
605 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
606 return Qnil;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
607 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
608
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
609 /* Look up the element in TABLE at index CH, and return it as an
89570
c92884b9ca4a (char_table_translate): Use CHARACTERP, not INETEGERP.
Kenichi Handa <handa@m17n.org>
parents: 89484
diff changeset
610 integer. If the element is not a character, return CH itself. */
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
611
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
612 int
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
613 char_table_translate (Lisp_Object table, int ch)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
614 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
615 Lisp_Object value;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
616 value = Faref (table, make_number (ch));
89570
c92884b9ca4a (char_table_translate): Use CHARACTERP, not INETEGERP.
Kenichi Handa <handa@m17n.org>
parents: 89484
diff changeset
617 if (! CHARACTERP (value))
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
618 return ch;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
619 return XINT (value);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
620 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
621
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
622 static Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
623 optimize_sub_char_table (Lisp_Object table, Lisp_Object test)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
624 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
625 struct Lisp_Sub_Char_Table *tbl = XSUB_CHAR_TABLE (table);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
626 int depth = XINT (tbl->depth);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
627 Lisp_Object elt, this;
97818
a4677d55715f (optimize_sub_char_table): Perform more greedy optimization.
Kenichi Handa <handa@m17n.org>
parents: 95430
diff changeset
628 int i, optimizable;
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
629
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
630 elt = XSUB_CHAR_TABLE (table)->contents[0];
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
631 if (SUB_CHAR_TABLE_P (elt))
95430
04a952ac356f * chartab.c (Foptimize_char_table, optimize_sub_char_table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94963
diff changeset
632 elt = XSUB_CHAR_TABLE (table)->contents[0]
04a952ac356f * chartab.c (Foptimize_char_table, optimize_sub_char_table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94963
diff changeset
633 = optimize_sub_char_table (elt, test);
97818
a4677d55715f (optimize_sub_char_table): Perform more greedy optimization.
Kenichi Handa <handa@m17n.org>
parents: 95430
diff changeset
634 optimizable = SUB_CHAR_TABLE_P (elt) ? 0 : 1;
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
635 for (i = 1; i < chartab_size[depth]; i++)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
636 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
637 this = XSUB_CHAR_TABLE (table)->contents[i];
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
638 if (SUB_CHAR_TABLE_P (this))
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
639 this = XSUB_CHAR_TABLE (table)->contents[i]
95430
04a952ac356f * chartab.c (Foptimize_char_table, optimize_sub_char_table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94963
diff changeset
640 = optimize_sub_char_table (this, test);
97818
a4677d55715f (optimize_sub_char_table): Perform more greedy optimization.
Kenichi Handa <handa@m17n.org>
parents: 95430
diff changeset
641 if (optimizable
a4677d55715f (optimize_sub_char_table): Perform more greedy optimization.
Kenichi Handa <handa@m17n.org>
parents: 95430
diff changeset
642 && (NILP (test) ? NILP (Fequal (this, elt)) /* defaults to `equal'. */
95430
04a952ac356f * chartab.c (Foptimize_char_table, optimize_sub_char_table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94963
diff changeset
643 : EQ (test, Qeq) ? !EQ (this, elt) /* Optimize `eq' case. */
04a952ac356f * chartab.c (Foptimize_char_table, optimize_sub_char_table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94963
diff changeset
644 : NILP (call2 (test, this, elt))))
97818
a4677d55715f (optimize_sub_char_table): Perform more greedy optimization.
Kenichi Handa <handa@m17n.org>
parents: 95430
diff changeset
645 optimizable = 0;
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
646 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
647
97818
a4677d55715f (optimize_sub_char_table): Perform more greedy optimization.
Kenichi Handa <handa@m17n.org>
parents: 95430
diff changeset
648 return (optimizable ? elt : table);
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
649 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
650
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
651 DEFUN ("optimize-char-table", Foptimize_char_table, Soptimize_char_table,
95430
04a952ac356f * chartab.c (Foptimize_char_table, optimize_sub_char_table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94963
diff changeset
652 1, 2, 0,
04a952ac356f * chartab.c (Foptimize_char_table, optimize_sub_char_table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94963
diff changeset
653 doc: /* Optimize CHAR-TABLE.
04a952ac356f * chartab.c (Foptimize_char_table, optimize_sub_char_table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94963
diff changeset
654 TEST is the comparison function used to decide whether two entries are
04a952ac356f * chartab.c (Foptimize_char_table, optimize_sub_char_table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94963
diff changeset
655 equivalent and can be merged. It defaults to `equal'. */)
04a952ac356f * chartab.c (Foptimize_char_table, optimize_sub_char_table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94963
diff changeset
656 (char_table, test)
04a952ac356f * chartab.c (Foptimize_char_table, optimize_sub_char_table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94963
diff changeset
657 Lisp_Object char_table, test;
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
658 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
659 Lisp_Object elt;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
660 int i;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
661
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
662 CHECK_CHAR_TABLE (char_table);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
663
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
664 for (i = 0; i < chartab_size[0]; i++)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
665 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
666 elt = XCHAR_TABLE (char_table)->contents[i];
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
667 if (SUB_CHAR_TABLE_P (elt))
95430
04a952ac356f * chartab.c (Foptimize_char_table, optimize_sub_char_table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94963
diff changeset
668 XCHAR_TABLE (char_table)->contents[i]
04a952ac356f * chartab.c (Foptimize_char_table, optimize_sub_char_table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94963
diff changeset
669 = optimize_sub_char_table (elt, test);
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
670 }
99143
f0ad9e3cb1a4 (Foptimize_char_table): Make sure `ascii' doesn't point to
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 97818
diff changeset
671 /* Reset the `ascii' cache, in case it got optimized away. */
f0ad9e3cb1a4 (Foptimize_char_table): Make sure `ascii' doesn't point to
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 97818
diff changeset
672 XCHAR_TABLE (char_table)->ascii = char_table_ascii (char_table);
f0ad9e3cb1a4 (Foptimize_char_table): Make sure `ascii' doesn't point to
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 97818
diff changeset
673
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
674 return Qnil;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
675 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
676
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
677
90966
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
678 /* Map C_FUNCTION or FUNCTION over TABLE (top or sub char-table),
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
679 calling it for each character or group of characters that share a
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
680 value. RANGE is a cons (FROM . TO) specifying the range of target
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
681 characters, VAL is a value of FROM in TABLE, DEFAULT_VAL is the
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
682 default value of the char-table, PARENT is the parent of the
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
683 char-table.
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
684
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
685 ARG is passed to C_FUNCTION when that is called.
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
686
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
687 It returns the value of last character covered by TABLE (not the
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
688 value inheritted from the parent), and by side-effect, the car part
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
689 of RANGE is updated to the minimum character C where C and all the
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
690 following characters in TABLE have the same value. */
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
691
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
692 static Lisp_Object
109139
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
693 map_sub_char_table (void (*c_function) (Lisp_Object, Lisp_Object, Lisp_Object),
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
694 Lisp_Object function, Lisp_Object table, Lisp_Object arg, Lisp_Object val,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
695 Lisp_Object range, Lisp_Object default_val, Lisp_Object parent)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
696 {
90966
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
697 /* Pointer to the elements of TABLE. */
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
698 Lisp_Object *contents;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
699 /* Depth of TABLE. */
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
700 int depth;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
701 /* Minimum and maxinum characters covered by TABLE. */
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
702 int min_char, max_char;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
703 /* Number of characters covered by one element of TABLE. */
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
704 int chars_in_block;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
705 int from = XINT (XCAR (range)), to = XINT (XCDR (range));
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
706 int i, c;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
707
90966
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
708 if (SUB_CHAR_TABLE_P (table))
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
709 {
90966
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
710 struct Lisp_Sub_Char_Table *tbl = XSUB_CHAR_TABLE (table);
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
711
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
712 depth = XINT (tbl->depth);
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
713 contents = tbl->contents;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
714 min_char = XINT (tbl->min_char);
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
715 max_char = min_char + chartab_chars[depth - 1] - 1;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
716 }
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
717 else
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
718 {
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
719 depth = 0;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
720 contents = XCHAR_TABLE (table)->contents;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
721 min_char = 0;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
722 max_char = MAX_CHAR;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
723 }
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
724 chars_in_block = chartab_chars[depth];
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
725
90966
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
726 if (to < max_char)
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
727 max_char = to;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
728 /* Set I to the index of the first element to check. */
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
729 if (from <= min_char)
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
730 i = 0;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
731 else
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
732 i = (from - min_char) / chars_in_block;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
733 for (c = min_char + chars_in_block * i; c <= max_char;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
734 i++, c += chars_in_block)
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
735 {
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
736 Lisp_Object this = contents[i];
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
737 int nextc = c + chars_in_block;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
738
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
739 if (SUB_CHAR_TABLE_P (this))
90966
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
740 {
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
741 if (to >= nextc)
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
742 XSETCDR (range, make_number (nextc - 1));
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
743 val = map_sub_char_table (c_function, function, this, arg,
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
744 val, range, default_val, parent);
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
745 }
89424
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
746 else
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
747 {
89424
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
748 if (NILP (this))
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
749 this = default_val;
95430
04a952ac356f * chartab.c (Foptimize_char_table, optimize_sub_char_table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94963
diff changeset
750 if (!EQ (val, this))
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
751 {
90966
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
752 int different_value = 1;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
753
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
754 if (NILP (val))
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
755 {
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
756 if (! NILP (parent))
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
757 {
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
758 Lisp_Object temp = XCHAR_TABLE (parent)->parent;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
759
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
760 /* This is to get a value of FROM in PARENT
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
761 without checking the parent of PARENT. */
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
762 XCHAR_TABLE (parent)->parent = Qnil;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
763 val = CHAR_TABLE_REF (parent, from);
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
764 XCHAR_TABLE (parent)->parent = temp;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
765 XSETCDR (range, make_number (c - 1));
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
766 val = map_sub_char_table (c_function, function,
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
767 parent, arg, val, range,
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
768 XCHAR_TABLE (parent)->defalt,
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
769 XCHAR_TABLE (parent)->parent);
95430
04a952ac356f * chartab.c (Foptimize_char_table, optimize_sub_char_table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94963
diff changeset
770 if (EQ (val, this))
90966
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
771 different_value = 0;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
772 }
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
773 }
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
774 if (! NILP (val) && different_value)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
775 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89425
diff changeset
776 XSETCDR (range, make_number (c - 1));
91036
f5e7e4e0fa66 (map_sub_char_table): If the range contains just one
Kenichi Handa <handa@m17n.org>
parents: 90966
diff changeset
777 if (EQ (XCAR (range), XCDR (range)))
89424
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
778 {
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
779 if (c_function)
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
780 (*c_function) (arg, XCAR (range), val);
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
781 else
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
782 call2 (function, XCAR (range), val);
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
783 }
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
784 else
89424
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
785 {
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
786 if (c_function)
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
787 (*c_function) (arg, range, val);
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
788 else
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
789 call2 (function, range, val);
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
790 }
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
791 }
89424
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
792 val = this;
90966
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
793 from = c;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89425
diff changeset
794 XSETCAR (range, make_number (c));
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
795 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
796 }
90966
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
797 XSETCDR (range, make_number (to));
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
798 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
799 return val;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
800 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
801
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
802
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
803 /* Map C_FUNCTION or FUNCTION over TABLE, calling it for each
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
804 character or group of characters that share a value.
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
805
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89425
diff changeset
806 ARG is passed to C_FUNCTION when that is called. */
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
807
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
808 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
809 map_char_table (void (*c_function) (Lisp_Object, Lisp_Object, Lisp_Object), Lisp_Object function, Lisp_Object table, Lisp_Object arg)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
810 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
811 Lisp_Object range, val;
90047
20480108ff4e (map_char_table): GCPRO table and arg.
Andreas Schwab <schwab@suse.de>
parents: 89911
diff changeset
812 struct gcpro gcpro1, gcpro2, gcpro3;
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
813
90966
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
814 range = Fcons (make_number (0), make_number (MAX_CHAR));
90047
20480108ff4e (map_char_table): GCPRO table and arg.
Andreas Schwab <schwab@suse.de>
parents: 89911
diff changeset
815 GCPRO3 (table, arg, range);
89424
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
816 val = XCHAR_TABLE (table)->ascii;
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
817 if (SUB_CHAR_TABLE_P (val))
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
818 val = XSUB_CHAR_TABLE (val)->contents[0];
90966
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
819 val = map_sub_char_table (c_function, function, table, arg, val, range,
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
820 XCHAR_TABLE (table)->defalt,
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
821 XCHAR_TABLE (table)->parent);
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
822 /* If VAL is nil and TABLE has a parent, we must consult the parent
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
823 recursively. */
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
824 while (NILP (val) && ! NILP (XCHAR_TABLE (table)->parent))
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
825 {
90966
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
826 Lisp_Object parent = XCHAR_TABLE (table)->parent;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
827 Lisp_Object temp = XCHAR_TABLE (parent)->parent;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
828 int from = XINT (XCAR (range));
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
829
90966
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
830 /* This is to get a value of FROM in PARENT without checking the
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
831 parent of PARENT. */
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
832 XCHAR_TABLE (parent)->parent = Qnil;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
833 val = CHAR_TABLE_REF (parent, from);
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
834 XCHAR_TABLE (parent)->parent = temp;
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
835 val = map_sub_char_table (c_function, function, parent, arg, val, range,
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
836 XCHAR_TABLE (parent)->defalt,
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
837 XCHAR_TABLE (parent)->parent);
d563fa5ce200 (map_sub_char_table): Make it work for the top-level
Kenichi Handa <handa@m17n.org>
parents: 90047
diff changeset
838 table = parent;
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
839 }
89424
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
840
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
841 if (! NILP (val))
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
842 {
91036
f5e7e4e0fa66 (map_sub_char_table): If the range contains just one
Kenichi Handa <handa@m17n.org>
parents: 90966
diff changeset
843 if (EQ (XCAR (range), XCDR (range)))
f5e7e4e0fa66 (map_sub_char_table): If the range contains just one
Kenichi Handa <handa@m17n.org>
parents: 90966
diff changeset
844 {
f5e7e4e0fa66 (map_sub_char_table): If the range contains just one
Kenichi Handa <handa@m17n.org>
parents: 90966
diff changeset
845 if (c_function)
f5e7e4e0fa66 (map_sub_char_table): If the range contains just one
Kenichi Handa <handa@m17n.org>
parents: 90966
diff changeset
846 (*c_function) (arg, XCAR (range), val);
f5e7e4e0fa66 (map_sub_char_table): If the range contains just one
Kenichi Handa <handa@m17n.org>
parents: 90966
diff changeset
847 else
f5e7e4e0fa66 (map_sub_char_table): If the range contains just one
Kenichi Handa <handa@m17n.org>
parents: 90966
diff changeset
848 call2 (function, XCAR (range), val);
f5e7e4e0fa66 (map_sub_char_table): If the range contains just one
Kenichi Handa <handa@m17n.org>
parents: 90966
diff changeset
849 }
89424
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
850 else
91036
f5e7e4e0fa66 (map_sub_char_table): If the range contains just one
Kenichi Handa <handa@m17n.org>
parents: 90966
diff changeset
851 {
f5e7e4e0fa66 (map_sub_char_table): If the range contains just one
Kenichi Handa <handa@m17n.org>
parents: 90966
diff changeset
852 if (c_function)
f5e7e4e0fa66 (map_sub_char_table): If the range contains just one
Kenichi Handa <handa@m17n.org>
parents: 90966
diff changeset
853 (*c_function) (arg, range, val);
f5e7e4e0fa66 (map_sub_char_table): If the range contains just one
Kenichi Handa <handa@m17n.org>
parents: 90966
diff changeset
854 else
f5e7e4e0fa66 (map_sub_char_table): If the range contains just one
Kenichi Handa <handa@m17n.org>
parents: 90966
diff changeset
855 call2 (function, range, val);
f5e7e4e0fa66 (map_sub_char_table): If the range contains just one
Kenichi Handa <handa@m17n.org>
parents: 90966
diff changeset
856 }
89424
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
857 }
89484
5c41371d228b (map_char_table): Protect `range' from GC.
Andreas Schwab <schwab@suse.de>
parents: 89483
diff changeset
858
5c41371d228b (map_char_table): Protect `range' from GC.
Andreas Schwab <schwab@suse.de>
parents: 89483
diff changeset
859 UNGCPRO;
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
860 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
861
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
862 DEFUN ("map-char-table", Fmap_char_table, Smap_char_table,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
863 2, 2, 0,
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
864 doc: /*
89425
32e34aaffbe3 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89424
diff changeset
865 Call FUNCTION for each character in CHAR-TABLE that has non-nil value.
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
866 FUNCTION is called with two arguments--a key and a value.
89424
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
867 The key is a character code or a cons of character codes specifying a
7020f4f73751 (map_sub_char_table): New argument DEFAULT_VAL.
Kenichi Handa <handa@m17n.org>
parents: 89334
diff changeset
868 range of characters that have the same value. */)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
869 (function, char_table)
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
870 Lisp_Object function, char_table;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
871 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
872 CHECK_CHAR_TABLE (char_table);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
873
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89425
diff changeset
874 map_char_table (NULL, function, char_table, char_table);
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
875 return Qnil;
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
876 }
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
877
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
878
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
879 static void
109139
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
880 map_sub_char_table_for_charset (void (*c_function) (Lisp_Object, Lisp_Object),
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
881 Lisp_Object function, Lisp_Object table, Lisp_Object arg,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
882 Lisp_Object range, struct charset *charset,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
883 unsigned from, unsigned to)
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
884 {
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
885 struct Lisp_Sub_Char_Table *tbl = XSUB_CHAR_TABLE (table);
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
886 int depth = XINT (tbl->depth);
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
887 int c, i;
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
888
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
889 if (depth < 3)
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
890 for (i = 0, c = XINT (tbl->min_char); i < chartab_size[depth];
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
891 i++, c += chartab_chars[depth])
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
892 {
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
893 Lisp_Object this;
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
894
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
895 this = tbl->contents[i];
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
896 if (SUB_CHAR_TABLE_P (this))
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
897 map_sub_char_table_for_charset (c_function, function, this, arg,
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
898 range, charset, from, to);
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
899 else
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
900 {
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
901 if (! NILP (XCAR (range)))
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
902 {
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
903 XSETCDR (range, make_number (c - 1));
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
904 if (c_function)
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
905 (*c_function) (arg, range);
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
906 else
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
907 call2 (function, range, arg);
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
908 }
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
909 XSETCAR (range, Qnil);
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
910 }
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
911 }
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
912 else
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
913 for (i = 0, c = XINT (tbl->min_char); i < chartab_size[depth]; i++, c ++)
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
914 {
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
915 Lisp_Object this;
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
916 unsigned code;
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
917
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
918 this = tbl->contents[i];
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
919 if (NILP (this)
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
920 || (charset
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
921 && (code = ENCODE_CHAR (charset, c),
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
922 (code < from || code > to))))
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
923 {
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
924 if (! NILP (XCAR (range)))
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
925 {
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
926 XSETCDR (range, make_number (c - 1));
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
927 if (c_function)
89684
d81f2ea4fc8d (map_sub_char_table_for_charset): Fix args to c_function with.
Kenichi Handa <handa@m17n.org>
parents: 89570
diff changeset
928 (*c_function) (arg, range);
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
929 else
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
930 call2 (function, range, arg);
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
931 XSETCAR (range, Qnil);
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
932 }
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
933 }
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
934 else
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
935 {
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
936 if (NILP (XCAR (range)))
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
937 XSETCAR (range, make_number (c));
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
938 }
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
939 }
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
940 }
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
941
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
942
99483
203b7f0b2698 (map_char_table_for_charset): Add comment.
Kenichi Handa <handa@m17n.org>
parents: 99143
diff changeset
943 /* Support function for `map-charset-chars'. Map C_FUNCTION or
99485
0fda80cdeb4b Fix typos.
Juanma Barranquero <lekktu@gmail.com>
parents: 99483
diff changeset
944 FUNCTION over TABLE, calling it for each character or a group of
99483
203b7f0b2698 (map_char_table_for_charset): Add comment.
Kenichi Handa <handa@m17n.org>
parents: 99143
diff changeset
945 succeeding characters that have non-nil value in TABLE. TABLE is a
203b7f0b2698 (map_char_table_for_charset): Add comment.
Kenichi Handa <handa@m17n.org>
parents: 99143
diff changeset
946 "mapping table" or a "deunifier table" of a certain charset.
203b7f0b2698 (map_char_table_for_charset): Add comment.
Kenichi Handa <handa@m17n.org>
parents: 99143
diff changeset
947
203b7f0b2698 (map_char_table_for_charset): Add comment.
Kenichi Handa <handa@m17n.org>
parents: 99143
diff changeset
948 If CHARSET is not NULL (this is the case that `map-charset-chars'
203b7f0b2698 (map_char_table_for_charset): Add comment.
Kenichi Handa <handa@m17n.org>
parents: 99143
diff changeset
949 is called with non-nil FROM-CODE and TO-CODE), it is a charset who
203b7f0b2698 (map_char_table_for_charset): Add comment.
Kenichi Handa <handa@m17n.org>
parents: 99143
diff changeset
950 owns TABLE, and the function is called only on a character in the
203b7f0b2698 (map_char_table_for_charset): Add comment.
Kenichi Handa <handa@m17n.org>
parents: 99143
diff changeset
951 range FROM and TO. FROM and TO are not character codes, but code
203b7f0b2698 (map_char_table_for_charset): Add comment.
Kenichi Handa <handa@m17n.org>
parents: 99143
diff changeset
952 points of a character in CHARSET.
203b7f0b2698 (map_char_table_for_charset): Add comment.
Kenichi Handa <handa@m17n.org>
parents: 99143
diff changeset
953
203b7f0b2698 (map_char_table_for_charset): Add comment.
Kenichi Handa <handa@m17n.org>
parents: 99143
diff changeset
954 This function is called in these two cases:
203b7f0b2698 (map_char_table_for_charset): Add comment.
Kenichi Handa <handa@m17n.org>
parents: 99143
diff changeset
955
203b7f0b2698 (map_char_table_for_charset): Add comment.
Kenichi Handa <handa@m17n.org>
parents: 99143
diff changeset
956 (1) A charset has a mapping file name in :map property.
203b7f0b2698 (map_char_table_for_charset): Add comment.
Kenichi Handa <handa@m17n.org>
parents: 99143
diff changeset
957
203b7f0b2698 (map_char_table_for_charset): Add comment.
Kenichi Handa <handa@m17n.org>
parents: 99143
diff changeset
958 (2) A charset has an upper code space in :offset property and a
203b7f0b2698 (map_char_table_for_charset): Add comment.
Kenichi Handa <handa@m17n.org>
parents: 99143
diff changeset
959 mapping file name in :unify-map property. In this case, this
203b7f0b2698 (map_char_table_for_charset): Add comment.
Kenichi Handa <handa@m17n.org>
parents: 99143
diff changeset
960 function is called only for characters in the Unicode code space.
203b7f0b2698 (map_char_table_for_charset): Add comment.
Kenichi Handa <handa@m17n.org>
parents: 99143
diff changeset
961 Characters in upper code space are handled directly in
203b7f0b2698 (map_char_table_for_charset): Add comment.
Kenichi Handa <handa@m17n.org>
parents: 99143
diff changeset
962 map_charset_chars. */
203b7f0b2698 (map_char_table_for_charset): Add comment.
Kenichi Handa <handa@m17n.org>
parents: 99143
diff changeset
963
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
964 void
109139
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
965 map_char_table_for_charset (void (*c_function) (Lisp_Object, Lisp_Object),
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
966 Lisp_Object function, Lisp_Object table, Lisp_Object arg,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
967 struct charset *charset,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
968 unsigned from, unsigned to)
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
969 {
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
970 Lisp_Object range;
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
971 int c, i;
89484
5c41371d228b (map_char_table): Protect `range' from GC.
Andreas Schwab <schwab@suse.de>
parents: 89483
diff changeset
972 struct gcpro gcpro1;
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
973
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89425
diff changeset
974 range = Fcons (Qnil, Qnil);
89484
5c41371d228b (map_char_table): Protect `range' from GC.
Andreas Schwab <schwab@suse.de>
parents: 89483
diff changeset
975 GCPRO1 (range);
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
976
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
977 for (i = 0, c = 0; i < chartab_size[0]; i++, c += chartab_chars[0])
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
978 {
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
979 Lisp_Object this;
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
980
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
981 this = XCHAR_TABLE (table)->contents[i];
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
982 if (SUB_CHAR_TABLE_P (this))
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
983 map_sub_char_table_for_charset (c_function, function, this, arg,
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
984 range, charset, from, to);
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
985 else
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
986 {
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
987 if (! NILP (XCAR (range)))
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
988 {
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
989 XSETCDR (range, make_number (c - 1));
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
990 if (c_function)
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
991 (*c_function) (arg, range);
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
992 else
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
993 call2 (function, range, arg);
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
994 }
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
995 XSETCAR (range, Qnil);
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
996 }
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
997 }
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
998 if (! NILP (XCAR (range)))
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
999 {
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
1000 XSETCDR (range, make_number (c - 1));
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
1001 if (c_function)
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
1002 (*c_function) (arg, range);
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
1003 else
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
1004 call2 (function, range, arg);
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
1005 }
89484
5c41371d228b (map_char_table): Protect `range' from GC.
Andreas Schwab <schwab@suse.de>
parents: 89483
diff changeset
1006
5c41371d228b (map_char_table): Protect `range' from GC.
Andreas Schwab <schwab@suse.de>
parents: 89483
diff changeset
1007 UNGCPRO;
88746
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
1008 }
388c82972bb9 (sub_char_table_ref_and_range): New arg defalt. Fix
Kenichi Handa <handa@m17n.org>
parents: 88429
diff changeset
1009
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1010
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1011 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1012 syms_of_chartab (void)
88358
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1013 {
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1014 defsubr (&Smake_char_table);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1015 defsubr (&Schar_table_parent);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1016 defsubr (&Schar_table_subtype);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1017 defsubr (&Sset_char_table_parent);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1018 defsubr (&Schar_table_extra_slot);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1019 defsubr (&Sset_char_table_extra_slot);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1020 defsubr (&Schar_table_range);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1021 defsubr (&Sset_char_table_range);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1022 defsubr (&Sset_char_table_default);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1023 defsubr (&Soptimize_char_table);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1024 defsubr (&Smap_char_table);
5f98d0806407 New file that implements char table.
Kenichi Handa <handa@m17n.org>
parents:
diff changeset
1025 }
89911
cce857c68ba2 Add arch taglines
Miles Bader <miles@gnu.org>
parents: 89909
diff changeset
1026
cce857c68ba2 Add arch taglines
Miles Bader <miles@gnu.org>
parents: 89909
diff changeset
1027 /* arch-tag: 18b5b560-7ab5-4108-b09e-d5dd65dc6fda
cce857c68ba2 Add arch taglines
Miles Bader <miles@gnu.org>
parents: 89909
diff changeset
1028 (do not change this comment) */