annotate src/chartab.h @ 510:5bdbc721d46a

[xemacs-hg @ 2001-05-06 08:33:35 by ben] implement printing the selection when it's selected. force redisplay when set-charset-ccl-program called. if bytecomp or byte-optimize need recompiling, then load the .el version of them first, recompile them, and reload the .elc versions to recompile everything else (so we won't be waiting until the cows come home).
author ben
date Sun, 06 May 2001 08:33:41 +0000
parents c33ae14dd6d0
children af57a77cbc92
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* Declarations having to do with Mule char tables.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1992 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 Copyright (C) 1995 Sun Microsystems, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 Boston, MA 02111-1307, USA. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 /* Synched up with: Mule 2.3. Not synched with FSF.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 This file was written independently of the FSF implementation,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 and is not compatible. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
27 #ifndef INCLUDED_chartab_h_
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
28 #define INCLUDED_chartab_h_
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 /* Char Tables */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 /* Under Mule, we use a complex representation (see below).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 When not under Mule, there are only 256 possible characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 so we just represent them directly. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 #ifdef MULE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 struct Lisp_Char_Table_Entry
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 struct lcrecord_header header;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 /* In the interests of simplicity, we just use a fixed 96-entry
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 table. If we felt like being smarter, we could make this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 variable-size and add an offset value into this structure. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 Lisp_Object level2[96];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 };
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
49 typedef struct Lisp_Char_Table_Entry Lisp_Char_Table_Entry;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
50
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
51 DECLARE_LRECORD (char_table_entry, Lisp_Char_Table_Entry);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
52 #define XCHAR_TABLE_ENTRY(x) \
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
53 XRECORD (x, char_table_entry, Lisp_Char_Table_Entry)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
54 #define XSETCHAR_TABLE_ENTRY(x, p) XSETRECORD (x, p, char_table_entry)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
55 #define CHAR_TABLE_ENTRYP(x) RECORDP (x, char_table_entry)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
56 /* #define CHECK_CHAR_TABLE_ENTRY(x) CHECK_RECORD (x, char_table_entry)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
57 char table entries should never escape to Lisp */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 #endif /* MULE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 enum char_table_type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 CHAR_TABLE_TYPE_GENERIC,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 #ifdef MULE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 CHAR_TABLE_TYPE_CATEGORY,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 CHAR_TABLE_TYPE_SYNTAX,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 CHAR_TABLE_TYPE_DISPLAY,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 CHAR_TABLE_TYPE_CHAR
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 #ifdef MULE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 #define NUM_ASCII_CHARS 160
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 #define NUM_ASCII_CHARS 256
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 struct Lisp_Char_Table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 struct lcrecord_header header;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 Lisp_Object ascii[NUM_ASCII_CHARS];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 #ifdef MULE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 /* We basically duplicate the Mule vectors-of-vectors implementation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 We can do this because we know a great deal about the sorts of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 things we are going to be indexing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 The current implementation is as follows:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 ascii[0-159] is used for ASCII and Control-1 characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 level1[0 .. (NUM_LEADING_BYTES-1)] indexes charsets by leading
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 byte (subtract MIN_LEADING_BYTE from the leading byte). If the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 value of this is not an opaque, then it specifies a value for all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 characters in the charset. Otherwise, it will be a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 96-Lisp-Object opaque that we created, specifying a value for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 each row. If the value of this is not an opaque, then it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 specifies a value for all characters in the row. Otherwise, it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 will be a 96-Lisp-Object opaque that we created, specifying a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 value for each character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 NOTE: 1) This will fail if some C routine passes an opaque to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 Fput_char_table(). Currently this is not a problem
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 since all char tables that are created are Lisp-visible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 and thus no one should ever be putting an opaque in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 a char table. Another possibility is to consider
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 adding a type to */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 Lisp_Object level1[NUM_LEADING_BYTES];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 #endif /* MULE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 enum char_table_type type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 /* stuff used for syntax tables */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 Lisp_Object mirror_table;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 Lisp_Object next_table; /* DO NOT mark through this. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 };
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
120 typedef struct Lisp_Char_Table Lisp_Char_Table;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
121
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
122 DECLARE_LRECORD (char_table, Lisp_Char_Table);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
123 #define XCHAR_TABLE(x) XRECORD (x, char_table, Lisp_Char_Table)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
124 #define XSETCHAR_TABLE(x, p) XSETRECORD (x, p, char_table)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
125 #define CHAR_TABLEP(x) RECORDP (x, char_table)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
126 #define CHECK_CHAR_TABLE(x) CHECK_RECORD (x, char_table)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
127 #define CONCHECK_CHAR_TABLE(x) CONCHECK_RECORD (x, char_table)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
128
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
129 #define CHAR_TABLE_TYPE(ct) ((ct)->type)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
130 #define XCHAR_TABLE_TYPE(ct) CHAR_TABLE_TYPE (XCHAR_TABLE (ct))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 #ifdef MULE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
134 Lisp_Object get_non_ascii_char_table_value (Lisp_Char_Table *ct,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
135 int leading_byte,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
136 Emchar c);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
138 INLINE_HEADER Lisp_Object
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
139 CHAR_TABLE_NON_ASCII_VALUE_UNSAFE (Lisp_Char_Table *ct, Emchar ch);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
140 INLINE_HEADER Lisp_Object
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
141 CHAR_TABLE_NON_ASCII_VALUE_UNSAFE (Lisp_Char_Table *ct, Emchar ch)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 unsigned char lb = CHAR_LEADING_BYTE (ch);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 if (!CHAR_TABLE_ENTRYP ((ct)->level1[lb - MIN_LEADING_BYTE]))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 return (ct)->level1[lb - MIN_LEADING_BYTE];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 return get_non_ascii_char_table_value (ct, lb, ch);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 #define CHAR_TABLE_VALUE_UNSAFE(ct, ch) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 ((ch) < NUM_ASCII_CHARS \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 ? (ct)->ascii[ch] \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 : CHAR_TABLE_NON_ASCII_VALUE_UNSAFE (ct, ch))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 #else /* not MULE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 #define CHAR_TABLE_VALUE_UNSAFE(ct, ch) ((ct)->ascii[(unsigned char) (ch)])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 #endif /* not MULE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
161 #define XCHAR_TABLE_VALUE_UNSAFE(ct, ch) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
162 CHAR_TABLE_VALUE_UNSAFE (XCHAR_TABLE (ct), ch)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
163
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 enum chartab_range_type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 CHARTAB_RANGE_ALL,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 #ifdef MULE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 CHARTAB_RANGE_CHARSET,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 CHARTAB_RANGE_ROW,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 CHARTAB_RANGE_CHAR
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 struct chartab_range
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 enum chartab_range_type type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 Emchar ch;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 Lisp_Object charset;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 int row;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
182 void fill_char_table (Lisp_Char_Table *ct, Lisp_Object value);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
183 void put_char_table (Lisp_Char_Table *ct, struct chartab_range *range,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 Lisp_Object val);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
185 Lisp_Object get_char_table (Emchar, Lisp_Char_Table *);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
186 int map_char_table (Lisp_Char_Table *ct,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 struct chartab_range *range,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 int (*fn) (struct chartab_range *range,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 Lisp_Object val, void *arg),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 void *arg);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 void prune_syntax_tables (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 EXFUN (Fcopy_char_table, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 EXFUN (Fmake_char_table, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 EXFUN (Fput_char_table, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 EXFUN (Fget_char_table, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 extern Lisp_Object Vall_syntax_tables;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 #ifdef MULE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 int check_category_char(Emchar ch, Lisp_Object ctbl,
458
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 442
diff changeset
204 unsigned int designator, unsigned int not_p);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 extern Lisp_Object Vstandard_category_table;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 #define CATEGORY_DESIGNATORP(x) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 (CHARP (x) && XCHAR (x) >= 32 && XCHAR (x) <= 126)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 #define CHECK_CATEGORY_DESIGNATOR(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 if (!CATEGORY_DESIGNATORP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 dead_wrong_type_argument (Qcategory_designator_p, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 #define CONCHECK_CATEGORY_DESIGNATOR(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 if (!CATEGORY_DESIGNATORP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 x = wrong_type_argument (Qcategory_designator_p, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 #define CATEGORY_TABLE_VALUEP(x) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 (NILP (x) || (BIT_VECTORP (x) && (bit_vector_length (XBIT_VECTOR (x)) == 95)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 #define CHECK_CATEGORY_TABLE_VALUE(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 if (!CATEGORY_TABLE_VALUEP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 dead_wrong_type_argument (Qcategory_table_value_p, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 #define CONCHECK_CATEGORY_TABLE_VALUE(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 if (!CATEGORY_TABLE_VALUEP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 x = wrong_type_argument (Qcategory_table_value_p, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 #endif /* MULE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
236 #endif /* INCLUDED_chartab_h_ */