Edinburgh Speech Tools  2.4-release
 All Classes Functions Variables Typedefs Enumerations Enumerator Friends Pages
ctype16.c
1 /*************************************************************************/
2 /* */
3 /* Copyright (c) 1997-98 Richard Tobin, Language Technology Group, HCRC, */
4 /* University of Edinburgh. */
5 /* */
6 /* THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, */
7 /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
8 /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
9 /* IN NO EVENT SHALL THE AUTHOR OR THE UNIVERSITY OF EDINBURGH BE LIABLE */
10 /* FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF */
11 /* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION */
12 /* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
13 /* */
14 /*************************************************************************/
15 #ifdef FOR_LT
16 #include "lt-defs.h"
17 #endif
18 
19 #include "charset.h"
20 #include "ctype16.h"
21 
22 static void init_xml_chartypes(void);
23 
24 unsigned char xml_char_map[1 << CHAR_SIZE];
25 
26 void init_ctype16(void)
27 {
28  static int init_done = 0;
29 
30  if(!init_done)
31  {
32  init_xml_chartypes();
33  init_done = 1;
34  }
35 }
36 
37 /* XXX Tolower and Toupper only work for ISO-Latin-1 */
38 
39 int Tolower(int c)
40 {
41  if(c < 0) /* Sigh, char is probably signed */
42  c &= 0xff;
43 
44  if((c >= 'A' && c <= 'Z') ||
45  (c >= 192 && c <= 214) ||
46  (c >= 216 && c <= 222))
47  return c + 32;
48  else
49  return c;
50 }
51 
52 int Toupper(int c)
53 {
54  if(c < 0) /* Sigh, char is probably signed */
55  c &= 0xff;
56 
57  if((c >= 'a' && c <= 'z') ||
58  (c >= 224 && c <= 246) ||
59  (c >= 248 && c <= 254))
60  return c - 32;
61  else
62  return c;
63 }
64 
65 /*
66  * Notes:
67  * XML spec says 255 is legal even though SGML doesn't.
68  * XML spec says 181 (mu for units) is a letter - is this right?
69  * XML spec says 183 bullet is an extender and thus a namechar.
70  */
71 
72 static void init_xml_chartypes(void)
73 {
74  int i;
75 
76  for(i = 0; i < 1 << CHAR_SIZE; i++)
77  xml_char_map[i] = 0;
78 
79  /* Legal ASCII characters */
80 
81  xml_char_map['\t'] |= xml_legal;
82  xml_char_map['\r'] |= xml_legal;
83  xml_char_map['\n'] |= xml_legal;
84  for(i = ' '; i <= 127; i++)
85  xml_char_map[i] |= xml_legal;
86 
87  /* ASCII Letters */
88 
89  for(i = 'a'; i <= 'z'; i++)
90  xml_char_map[i] |= (xml_namestart | xml_namechar);
91  for(i = 'A'; i <= 'Z'; i++)
92  xml_char_map[i] |= (xml_namestart | xml_namechar);
93 
94  /* ASCII Digits */
95 
96  for(i = '0'; i <= '9'; i++)
97  xml_char_map[i] |= xml_namechar;
98 
99  /* ASCII Whitespace */
100 
101  xml_char_map[' '] |= xml_whitespace;
102  xml_char_map['\t'] |= xml_whitespace;
103  xml_char_map['\r'] |= xml_whitespace;
104  xml_char_map['\n'] |= xml_whitespace;
105 
106  /* ASCII Others */
107 
108  xml_char_map['_'] |= (xml_namestart | xml_namechar);
109  xml_char_map[':'] |= (xml_namestart | xml_namechar);
110 
111  xml_char_map['.'] |= xml_namechar;
112  xml_char_map['-'] |= xml_namechar;
113 
114 #if CHAR_SIZE == 8
115 
116  /* Treat all non-ASCII chars as namestart, so we don't complain
117  about legal documents. */
118 
119  for(i = 0xa0; i <= 0xff; i++)
120  xml_char_map[i] |= (xml_namestart | xml_namechar | xml_legal);
121 
122 #else
123 
124  /* Legal Unicode characters */
125 
126  for(i = 0x80; i <= 0xd7ff; i++)
127  xml_char_map[i] |= xml_legal;
128  for(i = 0xe000; i <= 0xfffd; i++)
129  xml_char_map[i] |= xml_legal;
130 
131  /* Latin-1 Letters */
132 
133  for(i = 0xc0; i <= 0xd6; i++)
134  xml_char_map[i] |= (xml_namestart | xml_namechar);
135  for(i = 0xd8; i <= 0xf6; i++)
136  xml_char_map[i] |= (xml_namestart | xml_namechar);
137  for(i = 0xf8; i <= 0xff; i++)
138  xml_char_map[i] |= (xml_namestart | xml_namechar);
139 
140  /* Latin-1 Others */
141 
142  xml_char_map[0xb7] |= xml_namechar; /* raised dot (an extender) */
143 
144  /* Derived from HTML text of PR-xml-971208 */
145 
146  /* BaseChar */
147 
148 #define X (xml_namestart | xml_namechar)
149 
150  for(i = 0x0100; i < 0x0131; i++) xml_char_map[i] |= X;
151  for(i = 0x0134; i < 0x013e; i++) xml_char_map[i] |= X;
152  for(i = 0x0141; i < 0x0148; i++) xml_char_map[i] |= X;
153  for(i = 0x014a; i < 0x017e; i++) xml_char_map[i] |= X;
154  for(i = 0x0180; i < 0x01c3; i++) xml_char_map[i] |= X;
155  for(i = 0x01cd; i < 0x01f0; i++) xml_char_map[i] |= X;
156  for(i = 0x01f4; i < 0x01f5; i++) xml_char_map[i] |= X;
157  for(i = 0x01fa; i < 0x0217; i++) xml_char_map[i] |= X;
158  for(i = 0x0250; i < 0x02a8; i++) xml_char_map[i] |= X;
159  for(i = 0x02bb; i < 0x02c1; i++) xml_char_map[i] |= X;
160  xml_char_map[0x0386] |= X;
161  for(i = 0x0388; i < 0x038a; i++) xml_char_map[i] |= X;
162  xml_char_map[0x038c] |= X;
163  for(i = 0x038e; i < 0x03a1; i++) xml_char_map[i] |= X;
164  for(i = 0x03a3; i < 0x03ce; i++) xml_char_map[i] |= X;
165  for(i = 0x03d0; i < 0x03d6; i++) xml_char_map[i] |= X;
166  xml_char_map[0x03da] |= X;
167  xml_char_map[0x03dc] |= X;
168  xml_char_map[0x03de] |= X;
169  xml_char_map[0x03e0] |= X;
170  for(i = 0x03e2; i < 0x03f3; i++) xml_char_map[i] |= X;
171  for(i = 0x0401; i < 0x040c; i++) xml_char_map[i] |= X;
172  for(i = 0x040e; i < 0x044f; i++) xml_char_map[i] |= X;
173  for(i = 0x0451; i < 0x045c; i++) xml_char_map[i] |= X;
174  for(i = 0x045e; i < 0x0481; i++) xml_char_map[i] |= X;
175  for(i = 0x0490; i < 0x04c4; i++) xml_char_map[i] |= X;
176  for(i = 0x04c7; i < 0x04c8; i++) xml_char_map[i] |= X;
177  for(i = 0x04cb; i < 0x04cc; i++) xml_char_map[i] |= X;
178  for(i = 0x04d0; i < 0x04eb; i++) xml_char_map[i] |= X;
179  for(i = 0x04ee; i < 0x04f5; i++) xml_char_map[i] |= X;
180  for(i = 0x04f8; i < 0x04f9; i++) xml_char_map[i] |= X;
181  for(i = 0x0531; i < 0x0556; i++) xml_char_map[i] |= X;
182  xml_char_map[0x0559] |= X;
183  for(i = 0x0561; i < 0x0586; i++) xml_char_map[i] |= X;
184  for(i = 0x05d0; i < 0x05ea; i++) xml_char_map[i] |= X;
185  for(i = 0x05f0; i < 0x05f2; i++) xml_char_map[i] |= X;
186  for(i = 0x0621; i < 0x063a; i++) xml_char_map[i] |= X;
187  for(i = 0x0641; i < 0x064a; i++) xml_char_map[i] |= X;
188  for(i = 0x0671; i < 0x06b7; i++) xml_char_map[i] |= X;
189  for(i = 0x06ba; i < 0x06be; i++) xml_char_map[i] |= X;
190  for(i = 0x06c0; i < 0x06ce; i++) xml_char_map[i] |= X;
191  for(i = 0x06d0; i < 0x06d3; i++) xml_char_map[i] |= X;
192  xml_char_map[0x06d5] |= X;
193  for(i = 0x06e5; i < 0x06e6; i++) xml_char_map[i] |= X;
194  for(i = 0x0905; i < 0x0939; i++) xml_char_map[i] |= X;
195  xml_char_map[0x093d] |= X;
196  for(i = 0x0958; i < 0x0961; i++) xml_char_map[i] |= X;
197  for(i = 0x0985; i < 0x098c; i++) xml_char_map[i] |= X;
198  for(i = 0x098f; i < 0x0990; i++) xml_char_map[i] |= X;
199  for(i = 0x0993; i < 0x09a8; i++) xml_char_map[i] |= X;
200  for(i = 0x09aa; i < 0x09b0; i++) xml_char_map[i] |= X;
201  xml_char_map[0x09b2] |= X;
202  for(i = 0x09b6; i < 0x09b9; i++) xml_char_map[i] |= X;
203  for(i = 0x09dc; i < 0x09dd; i++) xml_char_map[i] |= X;
204  for(i = 0x09df; i < 0x09e1; i++) xml_char_map[i] |= X;
205  for(i = 0x09f0; i < 0x09f1; i++) xml_char_map[i] |= X;
206  for(i = 0x0a05; i < 0x0a0a; i++) xml_char_map[i] |= X;
207  for(i = 0x0a0f; i < 0x0a10; i++) xml_char_map[i] |= X;
208  for(i = 0x0a13; i < 0x0a28; i++) xml_char_map[i] |= X;
209  for(i = 0x0a2a; i < 0x0a30; i++) xml_char_map[i] |= X;
210  for(i = 0x0a32; i < 0x0a33; i++) xml_char_map[i] |= X;
211  for(i = 0x0a35; i < 0x0a36; i++) xml_char_map[i] |= X;
212  for(i = 0x0a38; i < 0x0a39; i++) xml_char_map[i] |= X;
213  for(i = 0x0a59; i < 0x0a5c; i++) xml_char_map[i] |= X;
214  xml_char_map[0x0a5e] |= X;
215  for(i = 0x0a72; i < 0x0a74; i++) xml_char_map[i] |= X;
216  for(i = 0x0a85; i < 0x0a8b; i++) xml_char_map[i] |= X;
217  xml_char_map[0x0a8d] |= X;
218  for(i = 0x0a8f; i < 0x0a91; i++) xml_char_map[i] |= X;
219  for(i = 0x0a93; i < 0x0aa8; i++) xml_char_map[i] |= X;
220  for(i = 0x0aaa; i < 0x0ab0; i++) xml_char_map[i] |= X;
221  for(i = 0x0ab2; i < 0x0ab3; i++) xml_char_map[i] |= X;
222  for(i = 0x0ab5; i < 0x0ab9; i++) xml_char_map[i] |= X;
223  xml_char_map[0x0abd] |= X;
224  xml_char_map[0x0ae0] |= X;
225  for(i = 0x0b05; i < 0x0b0c; i++) xml_char_map[i] |= X;
226  for(i = 0x0b0f; i < 0x0b10; i++) xml_char_map[i] |= X;
227  for(i = 0x0b13; i < 0x0b28; i++) xml_char_map[i] |= X;
228  for(i = 0x0b2a; i < 0x0b30; i++) xml_char_map[i] |= X;
229  for(i = 0x0b32; i < 0x0b33; i++) xml_char_map[i] |= X;
230  for(i = 0x0b36; i < 0x0b39; i++) xml_char_map[i] |= X;
231  xml_char_map[0x0b3d] |= X;
232  for(i = 0x0b5c; i < 0x0b5d; i++) xml_char_map[i] |= X;
233  for(i = 0x0b5f; i < 0x0b61; i++) xml_char_map[i] |= X;
234  for(i = 0x0b85; i < 0x0b8a; i++) xml_char_map[i] |= X;
235  for(i = 0x0b8e; i < 0x0b90; i++) xml_char_map[i] |= X;
236  for(i = 0x0b92; i < 0x0b95; i++) xml_char_map[i] |= X;
237  for(i = 0x0b99; i < 0x0b9a; i++) xml_char_map[i] |= X;
238  xml_char_map[0x0b9c] |= X;
239  for(i = 0x0b9e; i < 0x0b9f; i++) xml_char_map[i] |= X;
240  for(i = 0x0ba3; i < 0x0ba4; i++) xml_char_map[i] |= X;
241  for(i = 0x0ba8; i < 0x0baa; i++) xml_char_map[i] |= X;
242  for(i = 0x0bae; i < 0x0bb5; i++) xml_char_map[i] |= X;
243  for(i = 0x0bb7; i < 0x0bb9; i++) xml_char_map[i] |= X;
244  for(i = 0x0c05; i < 0x0c0c; i++) xml_char_map[i] |= X;
245  for(i = 0x0c0e; i < 0x0c10; i++) xml_char_map[i] |= X;
246  for(i = 0x0c12; i < 0x0c28; i++) xml_char_map[i] |= X;
247  for(i = 0x0c2a; i < 0x0c33; i++) xml_char_map[i] |= X;
248  for(i = 0x0c35; i < 0x0c39; i++) xml_char_map[i] |= X;
249  for(i = 0x0c60; i < 0x0c61; i++) xml_char_map[i] |= X;
250  for(i = 0x0c85; i < 0x0c8c; i++) xml_char_map[i] |= X;
251  for(i = 0x0c8e; i < 0x0c90; i++) xml_char_map[i] |= X;
252  for(i = 0x0c92; i < 0x0ca8; i++) xml_char_map[i] |= X;
253  for(i = 0x0caa; i < 0x0cb3; i++) xml_char_map[i] |= X;
254  for(i = 0x0cb5; i < 0x0cb9; i++) xml_char_map[i] |= X;
255  xml_char_map[0x0cde] |= X;
256  for(i = 0x0ce0; i < 0x0ce1; i++) xml_char_map[i] |= X;
257  for(i = 0x0d05; i < 0x0d0c; i++) xml_char_map[i] |= X;
258  for(i = 0x0d0e; i < 0x0d10; i++) xml_char_map[i] |= X;
259  for(i = 0x0d12; i < 0x0d28; i++) xml_char_map[i] |= X;
260  for(i = 0x0d2a; i < 0x0d39; i++) xml_char_map[i] |= X;
261  for(i = 0x0d60; i < 0x0d61; i++) xml_char_map[i] |= X;
262  for(i = 0x0e01; i < 0x0e2e; i++) xml_char_map[i] |= X;
263  xml_char_map[0x0e30] |= X;
264  for(i = 0x0e32; i < 0x0e33; i++) xml_char_map[i] |= X;
265  for(i = 0x0e40; i < 0x0e45; i++) xml_char_map[i] |= X;
266  for(i = 0x0e81; i < 0x0e82; i++) xml_char_map[i] |= X;
267  xml_char_map[0x0e84] |= X;
268  for(i = 0x0e87; i < 0x0e88; i++) xml_char_map[i] |= X;
269  xml_char_map[0x0e8a] |= X;
270  xml_char_map[0x0e8d] |= X;
271  for(i = 0x0e94; i < 0x0e97; i++) xml_char_map[i] |= X;
272  for(i = 0x0e99; i < 0x0e9f; i++) xml_char_map[i] |= X;
273  for(i = 0x0ea1; i < 0x0ea3; i++) xml_char_map[i] |= X;
274  xml_char_map[0x0ea5] |= X;
275  xml_char_map[0x0ea7] |= X;
276  for(i = 0x0eaa; i < 0x0eab; i++) xml_char_map[i] |= X;
277  for(i = 0x0ead; i < 0x0eae; i++) xml_char_map[i] |= X;
278  xml_char_map[0x0eb0] |= X;
279  for(i = 0x0eb2; i < 0x0eb3; i++) xml_char_map[i] |= X;
280  xml_char_map[0x0ebd] |= X;
281  for(i = 0x0ec0; i < 0x0ec4; i++) xml_char_map[i] |= X;
282  for(i = 0x0f40; i < 0x0f47; i++) xml_char_map[i] |= X;
283  for(i = 0x0f49; i < 0x0f69; i++) xml_char_map[i] |= X;
284  for(i = 0x10a0; i < 0x10c5; i++) xml_char_map[i] |= X;
285  for(i = 0x10d0; i < 0x10f6; i++) xml_char_map[i] |= X;
286  xml_char_map[0x1100] |= X;
287  for(i = 0x1102; i < 0x1103; i++) xml_char_map[i] |= X;
288  for(i = 0x1105; i < 0x1107; i++) xml_char_map[i] |= X;
289  xml_char_map[0x1109] |= X;
290  for(i = 0x110b; i < 0x110c; i++) xml_char_map[i] |= X;
291  for(i = 0x110e; i < 0x1112; i++) xml_char_map[i] |= X;
292  xml_char_map[0x113c] |= X;
293  xml_char_map[0x113e] |= X;
294  xml_char_map[0x1140] |= X;
295  xml_char_map[0x114c] |= X;
296  xml_char_map[0x114e] |= X;
297  xml_char_map[0x1150] |= X;
298  for(i = 0x1154; i < 0x1155; i++) xml_char_map[i] |= X;
299  xml_char_map[0x1159] |= X;
300  for(i = 0x115f; i < 0x1161; i++) xml_char_map[i] |= X;
301  xml_char_map[0x1163] |= X;
302  xml_char_map[0x1165] |= X;
303  xml_char_map[0x1167] |= X;
304  xml_char_map[0x1169] |= X;
305  for(i = 0x116d; i < 0x116e; i++) xml_char_map[i] |= X;
306  for(i = 0x1172; i < 0x1173; i++) xml_char_map[i] |= X;
307  xml_char_map[0x1175] |= X;
308  xml_char_map[0x119e] |= X;
309  xml_char_map[0x11a8] |= X;
310  xml_char_map[0x11ab] |= X;
311  for(i = 0x11ae; i < 0x11af; i++) xml_char_map[i] |= X;
312  for(i = 0x11b7; i < 0x11b8; i++) xml_char_map[i] |= X;
313  xml_char_map[0x11ba] |= X;
314  for(i = 0x11bc; i < 0x11c2; i++) xml_char_map[i] |= X;
315  xml_char_map[0x11eb] |= X;
316  xml_char_map[0x11f0] |= X;
317  xml_char_map[0x11f9] |= X;
318  for(i = 0x1e00; i < 0x1e9b; i++) xml_char_map[i] |= X;
319  for(i = 0x1ea0; i < 0x1ef9; i++) xml_char_map[i] |= X;
320  for(i = 0x1f00; i < 0x1f15; i++) xml_char_map[i] |= X;
321  for(i = 0x1f18; i < 0x1f1d; i++) xml_char_map[i] |= X;
322  for(i = 0x1f20; i < 0x1f45; i++) xml_char_map[i] |= X;
323  for(i = 0x1f48; i < 0x1f4d; i++) xml_char_map[i] |= X;
324  for(i = 0x1f50; i < 0x1f57; i++) xml_char_map[i] |= X;
325  xml_char_map[0x1f59] |= X;
326  xml_char_map[0x1f5b] |= X;
327  xml_char_map[0x1f5d] |= X;
328  for(i = 0x1f5f; i < 0x1f7d; i++) xml_char_map[i] |= X;
329  for(i = 0x1f80; i < 0x1fb4; i++) xml_char_map[i] |= X;
330  for(i = 0x1fb6; i < 0x1fbc; i++) xml_char_map[i] |= X;
331  xml_char_map[0x1fbe] |= X;
332  for(i = 0x1fc2; i < 0x1fc4; i++) xml_char_map[i] |= X;
333  for(i = 0x1fc6; i < 0x1fcc; i++) xml_char_map[i] |= X;
334  for(i = 0x1fd0; i < 0x1fd3; i++) xml_char_map[i] |= X;
335  for(i = 0x1fd6; i < 0x1fdb; i++) xml_char_map[i] |= X;
336  for(i = 0x1fe0; i < 0x1fec; i++) xml_char_map[i] |= X;
337  for(i = 0x1ff2; i < 0x1ff4; i++) xml_char_map[i] |= X;
338  for(i = 0x1ff6; i < 0x1ffc; i++) xml_char_map[i] |= X;
339  xml_char_map[0x2126] |= X;
340  for(i = 0x212a; i < 0x212b; i++) xml_char_map[i] |= X;
341  xml_char_map[0x212e] |= X;
342  for(i = 0x2180; i < 0x2182; i++) xml_char_map[i] |= X;
343  for(i = 0x3041; i < 0x3094; i++) xml_char_map[i] |= X;
344  for(i = 0x30a1; i < 0x30fa; i++) xml_char_map[i] |= X;
345  for(i = 0x3105; i < 0x312c; i++) xml_char_map[i] |= X;
346  for(i = 0xac00; i < 0xd7a3; i++) xml_char_map[i] |= X;
347 
348  /* CombiningChar */
349 
350 #undef X
351 #define X xml_namechar
352 
353  for(i = 0x0300; i < 0x0345; i++) xml_char_map[i] |= X;
354  for(i = 0x0360; i < 0x0361; i++) xml_char_map[i] |= X;
355  for(i = 0x0483; i < 0x0486; i++) xml_char_map[i] |= X;
356  for(i = 0x0591; i < 0x05a1; i++) xml_char_map[i] |= X;
357  for(i = 0x05a3; i < 0x05b9; i++) xml_char_map[i] |= X;
358  xml_char_map[0x05bb] |= X;
359  xml_char_map[0x05bd] |= X;
360  xml_char_map[0x05bf] |= X;
361  for(i = 0x05c1; i < 0x05c2; i++) xml_char_map[i] |= X;
362  xml_char_map[0x05c4] |= X;
363  xml_char_map[0x064b] |= X;
364  xml_char_map[0x0652] |= X;
365  xml_char_map[0x0670] |= X;
366  for(i = 0x06d6; i < 0x06dc; i++) xml_char_map[i] |= X;
367  xml_char_map[0x06dd] |= X;
368  xml_char_map[0x06df] |= X;
369  for(i = 0x06e0; i < 0x06e4; i++) xml_char_map[i] |= X;
370  for(i = 0x06e7; i < 0x06e8; i++) xml_char_map[i] |= X;
371  for(i = 0x06ea; i < 0x06ed; i++) xml_char_map[i] |= X;
372  for(i = 0x0901; i < 0x0903; i++) xml_char_map[i] |= X;
373  xml_char_map[0x093c] |= X;
374  for(i = 0x093e; i < 0x094c; i++) xml_char_map[i] |= X;
375  xml_char_map[0x094d] |= X;
376  for(i = 0x0951; i < 0x0954; i++) xml_char_map[i] |= X;
377  for(i = 0x0962; i < 0x0963; i++) xml_char_map[i] |= X;
378  for(i = 0x0981; i < 0x0983; i++) xml_char_map[i] |= X;
379  xml_char_map[0x09bc] |= X;
380  xml_char_map[0x09be] |= X;
381  xml_char_map[0x09bf] |= X;
382  for(i = 0x09c0; i < 0x09c4; i++) xml_char_map[i] |= X;
383  for(i = 0x09c7; i < 0x09c8; i++) xml_char_map[i] |= X;
384  for(i = 0x09cb; i < 0x09cd; i++) xml_char_map[i] |= X;
385  xml_char_map[0x09d7] |= X;
386  for(i = 0x09e2; i < 0x09e3; i++) xml_char_map[i] |= X;
387  xml_char_map[0x0a02] |= X;
388  xml_char_map[0x0a3c] |= X;
389  xml_char_map[0x0a3e] |= X;
390  xml_char_map[0x0a3f] |= X;
391  for(i = 0x0a40; i < 0x0a42; i++) xml_char_map[i] |= X;
392  for(i = 0x0a47; i < 0x0a48; i++) xml_char_map[i] |= X;
393  for(i = 0x0a4b; i < 0x0a4d; i++) xml_char_map[i] |= X;
394  for(i = 0x0a70; i < 0x0a71; i++) xml_char_map[i] |= X;
395  for(i = 0x0a81; i < 0x0a83; i++) xml_char_map[i] |= X;
396  xml_char_map[0x0abc] |= X;
397  for(i = 0x0abe; i < 0x0ac5; i++) xml_char_map[i] |= X;
398  for(i = 0x0ac7; i < 0x0ac9; i++) xml_char_map[i] |= X;
399  for(i = 0x0acb; i < 0x0acd; i++) xml_char_map[i] |= X;
400  for(i = 0x0b01; i < 0x0b03; i++) xml_char_map[i] |= X;
401  xml_char_map[0x0b3c] |= X;
402  for(i = 0x0b3e; i < 0x0b43; i++) xml_char_map[i] |= X;
403  for(i = 0x0b47; i < 0x0b48; i++) xml_char_map[i] |= X;
404  for(i = 0x0b4b; i < 0x0b4d; i++) xml_char_map[i] |= X;
405  for(i = 0x0b56; i < 0x0b57; i++) xml_char_map[i] |= X;
406  for(i = 0x0b82; i < 0x0b83; i++) xml_char_map[i] |= X;
407  for(i = 0x0bbe; i < 0x0bc2; i++) xml_char_map[i] |= X;
408  for(i = 0x0bc6; i < 0x0bc8; i++) xml_char_map[i] |= X;
409  for(i = 0x0bca; i < 0x0bcd; i++) xml_char_map[i] |= X;
410  xml_char_map[0x0bd7] |= X;
411  for(i = 0x0c01; i < 0x0c03; i++) xml_char_map[i] |= X;
412  for(i = 0x0c3e; i < 0x0c44; i++) xml_char_map[i] |= X;
413  for(i = 0x0c46; i < 0x0c48; i++) xml_char_map[i] |= X;
414  for(i = 0x0c4a; i < 0x0c4d; i++) xml_char_map[i] |= X;
415  for(i = 0x0c55; i < 0x0c56; i++) xml_char_map[i] |= X;
416  for(i = 0x0c82; i < 0x0c83; i++) xml_char_map[i] |= X;
417  for(i = 0x0cbe; i < 0x0cc4; i++) xml_char_map[i] |= X;
418  for(i = 0x0cc6; i < 0x0cc8; i++) xml_char_map[i] |= X;
419  for(i = 0x0cca; i < 0x0ccd; i++) xml_char_map[i] |= X;
420  for(i = 0x0cd5; i < 0x0cd6; i++) xml_char_map[i] |= X;
421  for(i = 0x0d02; i < 0x0d03; i++) xml_char_map[i] |= X;
422  for(i = 0x0d3e; i < 0x0d43; i++) xml_char_map[i] |= X;
423  for(i = 0x0d46; i < 0x0d48; i++) xml_char_map[i] |= X;
424  for(i = 0x0d4a; i < 0x0d4d; i++) xml_char_map[i] |= X;
425  xml_char_map[0x0d57] |= X;
426  xml_char_map[0x0e31] |= X;
427  for(i = 0x0e34; i < 0x0e3a; i++) xml_char_map[i] |= X;
428  for(i = 0x0e47; i < 0x0e4e; i++) xml_char_map[i] |= X;
429  xml_char_map[0x0eb1] |= X;
430  for(i = 0x0eb4; i < 0x0eb9; i++) xml_char_map[i] |= X;
431  for(i = 0x0ebb; i < 0x0ebc; i++) xml_char_map[i] |= X;
432  for(i = 0x0ec8; i < 0x0ecd; i++) xml_char_map[i] |= X;
433  for(i = 0x0f18; i < 0x0f19; i++) xml_char_map[i] |= X;
434  xml_char_map[0x0f35] |= X;
435  xml_char_map[0x0f37] |= X;
436  xml_char_map[0x0f39] |= X;
437  xml_char_map[0x0f3e] |= X;
438  xml_char_map[0x0f3f] |= X;
439  for(i = 0x0f71; i < 0x0f84; i++) xml_char_map[i] |= X;
440  for(i = 0x0f86; i < 0x0f8b; i++) xml_char_map[i] |= X;
441  for(i = 0x0f90; i < 0x0f95; i++) xml_char_map[i] |= X;
442  xml_char_map[0x0f97] |= X;
443  for(i = 0x0f99; i < 0x0fad; i++) xml_char_map[i] |= X;
444  for(i = 0x0fb1; i < 0x0fb7; i++) xml_char_map[i] |= X;
445  xml_char_map[0x0fb9] |= X;
446  for(i = 0x20d0; i < 0x20dc; i++) xml_char_map[i] |= X;
447  xml_char_map[0x20e1] |= X;
448  for(i = 0x302a; i < 0x302f; i++) xml_char_map[i] |= X;
449  xml_char_map[0x3099] |= X;
450  xml_char_map[0x309a] |= X;
451 
452 
453  /* Digit */
454 
455 #undef X
456 #define X xml_namechar
457 
458  for(i = 0x0030; i < 0x0039; i++) xml_char_map[i] |= X;
459  for(i = 0x0660; i < 0x0669; i++) xml_char_map[i] |= X;
460  for(i = 0x06f0; i < 0x06f9; i++) xml_char_map[i] |= X;
461  for(i = 0x0966; i < 0x096f; i++) xml_char_map[i] |= X;
462  for(i = 0x09e6; i < 0x09ef; i++) xml_char_map[i] |= X;
463  for(i = 0x0a66; i < 0x0a6f; i++) xml_char_map[i] |= X;
464  for(i = 0x0ae6; i < 0x0aef; i++) xml_char_map[i] |= X;
465  for(i = 0x0b66; i < 0x0b6f; i++) xml_char_map[i] |= X;
466  for(i = 0x0be7; i < 0x0bef; i++) xml_char_map[i] |= X;
467  for(i = 0x0c66; i < 0x0c6f; i++) xml_char_map[i] |= X;
468  for(i = 0x0ce6; i < 0x0cef; i++) xml_char_map[i] |= X;
469  for(i = 0x0d66; i < 0x0d6f; i++) xml_char_map[i] |= X;
470  for(i = 0x0e50; i < 0x0e59; i++) xml_char_map[i] |= X;
471  for(i = 0x0ed0; i < 0x0ed9; i++) xml_char_map[i] |= X;
472  for(i = 0x0f20; i < 0x0f29; i++) xml_char_map[i] |= X;
473 
474 
475  /* Extender */
476 
477 #undef X
478 #define X xml_namechar
479 
480  xml_char_map[0x02d0] |= X;
481  xml_char_map[0x02d1] |= X;
482  xml_char_map[0x0387] |= X;
483  xml_char_map[0x0640] |= X;
484  xml_char_map[0x0e46] |= X;
485  xml_char_map[0x0ec6] |= X;
486  xml_char_map[0x3005] |= X;
487  for(i = 0x3031; i < 0x3035; i++) xml_char_map[i] |= X;
488  for(i = 0x309d; i < 0x309e; i++) xml_char_map[i] |= X;
489  for(i = 0x30fc; i < 0x30fe; i++) xml_char_map[i] |= X;
490 
491  /* Ideographic */
492 
493 #undef X
494 #define X (xml_namestart | xml_namechar)
495 
496  for(i = 0x4e00; i < 0x9fa5; i++) xml_char_map[i] |= X;
497  xml_char_map[0x3007] |= X;
498  for(i = 0x3021; i < 0x3029; i++) xml_char_map[i] |= X;
499 
500 #undef X
501 
502 #endif
503 }