1 /*
2 The contents of this file are subject to the Mozilla Public License
3 Version 1.0 (the "License"); you may not use this file except in
4 compliance with the License. You may obtain a copy of the License at
5 http://www.mozilla.org/MPL/
6
7 Software distributed under the License is distributed on an "AS IS"
8 basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
9 License for the specific language governing rights and limitations
10 under the License.
11
12 The Original Code is expat.
13
14 The Initial Developer of the Original Code is James Clark.
15 Portions created by James Clark are Copyright (C) 1998
16 James Clark. All Rights Reserved.
17
18 Contributor(s):
19 $Id: gennmtab.c,v 1.3 2002/10/13 22:03:37 torcs Exp $
20 */
21
22 #include <string.h>
23 #include <stdio.h>
24 #include <stddef.h>
25
26 struct range {
27 int start;
28 int end;
29 };
30
31 struct range nmstrt[] = {
32 { '_' },
33 { ':' },
34 /* BaseChar */
35 { 0x0041, 0x005a },
36 { 0x0061, 0x007a },
37 { 0x00c0, 0x00d6 },
38 { 0x00d8, 0x00f6 },
39 { 0x00f8, 0x00ff },
40 { 0x0100, 0x0131 },
41 { 0x0134, 0x013e },
42 { 0x0141, 0x0148 },
43 { 0x014a, 0x017e },
44 { 0x0180, 0x01c3 },
45 { 0x01cd, 0x01f0 },
46 { 0x01f4, 0x01f5 },
47 { 0x01fa, 0x0217 },
48 { 0x0250, 0x02a8 },
49 { 0x02bb, 0x02c1 },
50 { 0x0386 },
51 { 0x0388, 0x038a },
52 { 0x038c },
53 { 0x038e, 0x03a1 },
54 { 0x03a3, 0x03ce },
55 { 0x03d0, 0x03d6 },
56 { 0x03da },
57 { 0x03dc },
58 { 0x03de },
59 { 0x03e0 },
60 { 0x03e2, 0x03f3 },
61 { 0x0401, 0x040c },
62 { 0x040e, 0x044f },
63 { 0x0451, 0x045c },
64 { 0x045e, 0x0481 },
65 { 0x0490, 0x04c4 },
66 { 0x04c7, 0x04c8 },
67 { 0x04cb, 0x04cc },
68 { 0x04d0, 0x04eb },
69 { 0x04ee, 0x04f5 },
70 { 0x04f8, 0x04f9 },
71 { 0x0531, 0x0556 },
72 { 0x0559 },
73 { 0x0561, 0x0586 },
74 { 0x05d0, 0x05ea },
75 { 0x05f0, 0x05f2 },
76 { 0x0621, 0x063a },
77 { 0x0641, 0x064a },
78 { 0x0671, 0x06b7 },
79 { 0x06ba, 0x06be },
80 { 0x06c0, 0x06ce },
81 { 0x06d0, 0x06d3 },
82 { 0x06d5 },
83 { 0x06e5, 0x06e6 },
84 { 0x0905, 0x0939 },
85 { 0x093d },
86 { 0x0958, 0x0961 },
87 { 0x0985, 0x098c },
88 { 0x098f, 0x0990 },
89 { 0x0993, 0x09a8 },
90 { 0x09aa, 0x09b0 },
91 { 0x09b2 },
92 { 0x09b6, 0x09b9 },
93 { 0x09dc, 0x09dd },
94 { 0x09df, 0x09e1 },
95 { 0x09f0, 0x09f1 },
96 { 0x0a05, 0x0a0a },
97 { 0x0a0f, 0x0a10 },
98 { 0x0a13, 0x0a28 },
99 { 0x0a2a, 0x0a30 },
100 { 0x0a32, 0x0a33 },
101 { 0x0a35, 0x0a36 },
102 { 0x0a38, 0x0a39 },
103 { 0x0a59, 0x0a5c },
104 { 0x0a5e },
105 { 0x0a72, 0x0a74 },
106 { 0x0a85, 0x0a8b },
107 { 0x0a8d },
108 { 0x0a8f, 0x0a91 },
109 { 0x0a93, 0x0aa8 },
110 { 0x0aaa, 0x0ab0 },
111 { 0x0ab2, 0x0ab3 },
112 { 0x0ab5, 0x0ab9 },
113 { 0x0abd },
114 { 0x0ae0 },
115 { 0x0b05, 0x0b0c },
116 { 0x0b0f, 0x0b10 },
117 { 0x0b13, 0x0b28 },
118 { 0x0b2a, 0x0b30 },
119 { 0x0b32, 0x0b33 },
120 { 0x0b36, 0x0b39 },
121 { 0x0b3d },
122 { 0x0b5c, 0x0b5d },
123 { 0x0b5f, 0x0b61 },
124 { 0x0b85, 0x0b8a },
125 { 0x0b8e, 0x0b90 },
126 { 0x0b92, 0x0b95 },
127 { 0x0b99, 0x0b9a },
128 { 0x0b9c },
129 { 0x0b9e, 0x0b9f },
130 { 0x0ba3, 0x0ba4 },
131 { 0x0ba8, 0x0baa },
132 { 0x0bae, 0x0bb5 },
133 { 0x0bb7, 0x0bb9 },
134 { 0x0c05, 0x0c0c },
135 { 0x0c0e, 0x0c10 },
136 { 0x0c12, 0x0c28 },
137 { 0x0c2a, 0x0c33 },
138 { 0x0c35, 0x0c39 },
139 { 0x0c60, 0x0c61 },
140 { 0x0c85, 0x0c8c },
141 { 0x0c8e, 0x0c90 },
142 { 0x0c92, 0x0ca8 },
143 { 0x0caa, 0x0cb3 },
144 { 0x0cb5, 0x0cb9 },
145 { 0x0cde },
146 { 0x0ce0, 0x0ce1 },
147 { 0x0d05, 0x0d0c },
148 { 0x0d0e, 0x0d10 },
149 { 0x0d12, 0x0d28 },
150 { 0x0d2a, 0x0d39 },
151 { 0x0d60, 0x0d61 },
152 { 0x0e01, 0x0e2e },
153 { 0x0e30 },
154 { 0x0e32, 0x0e33 },
155 { 0x0e40, 0x0e45 },
156 { 0x0e81, 0x0e82 },
157 { 0x0e84 },
158 { 0x0e87, 0x0e88 },
159 { 0x0e8a },
160 { 0x0e8d },
161 { 0x0e94, 0x0e97 },
162 { 0x0e99, 0x0e9f },
163 { 0x0ea1, 0x0ea3 },
164 { 0x0ea5 },
165 { 0x0ea7 },
166 { 0x0eaa, 0x0eab },
167 { 0x0ead, 0x0eae },
168 { 0x0eb0 },
169 { 0x0eb2, 0x0eb3 },
170 { 0x0ebd },
171 { 0x0ec0, 0x0ec4 },
172 { 0x0f40, 0x0f47 },
173 { 0x0f49, 0x0f69 },
174 { 0x10a0, 0x10c5 },
175 { 0x10d0, 0x10f6 },
176 { 0x1100 },
177 { 0x1102, 0x1103 },
178 { 0x1105, 0x1107 },
179 { 0x1109 },
180 { 0x110b, 0x110c },
181 { 0x110e, 0x1112 },
182 { 0x113c },
183 { 0x113e },
184 { 0x1140 },
185 { 0x114c },
186 { 0x114e },
187 { 0x1150 },
188 { 0x1154, 0x1155 },
189 { 0x1159 },
190 { 0x115f, 0x1161 },
191 { 0x1163 },
192 { 0x1165 },
193 { 0x1167 },
194 { 0x1169 },
195 { 0x116d, 0x116e },
196 { 0x1172, 0x1173 },
197 { 0x1175 },
198 { 0x119e },
199 { 0x11a8 },
200 { 0x11ab },
201 { 0x11ae, 0x11af },
202 { 0x11b7, 0x11b8 },
203 { 0x11ba },
204 { 0x11bc, 0x11c2 },
205 { 0x11eb },
206 { 0x11f0 },
207 { 0x11f9 },
208 { 0x1e00, 0x1e9b },
209 { 0x1ea0, 0x1ef9 },
210 { 0x1f00, 0x1f15 },
211 { 0x1f18, 0x1f1d },
212 { 0x1f20, 0x1f45 },
213 { 0x1f48, 0x1f4d },
214 { 0x1f50, 0x1f57 },
215 { 0x1f59 },
216 { 0x1f5b },
217 { 0x1f5d },
218 { 0x1f5f, 0x1f7d },
219 { 0x1f80, 0x1fb4 },
220 { 0x1fb6, 0x1fbc },
221 { 0x1fbe },
222 { 0x1fc2, 0x1fc4 },
223 { 0x1fc6, 0x1fcc },
224 { 0x1fd0, 0x1fd3 },
225 { 0x1fd6, 0x1fdb },
226 { 0x1fe0, 0x1fec },
227 { 0x1ff2, 0x1ff4 },
228 { 0x1ff6, 0x1ffc },
229 { 0x2126 },
230 { 0x212a, 0x212b },
231 { 0x212e },
232 { 0x2180, 0x2182 },
233 { 0x3041, 0x3094 },
234 { 0x30a1, 0x30fa },
235 { 0x3105, 0x312c },
236 { 0xac00, 0xd7a3 },
237 /* Ideographic */
238 { 0x4e00, 0x9fa5 },
239 { 0x3007 },
240 { 0x3021, 0x3029 },
241 };
242
243 /* name chars that are not name start chars */
244 struct range name[] = {
245 { '.' },
246 { '-' },
247 /* CombiningChar */
248 { 0x0300, 0x0345 },
249 { 0x0360, 0x0361 },
250 { 0x0483, 0x0486 },
251 { 0x0591, 0x05a1 },
252 { 0x05a3, 0x05b9 },
253 { 0x05bb, 0x05bd },
254 { 0x05bf },
255 { 0x05c1, 0x05c2 },
256 { 0x05c4 },
257 { 0x064b, 0x0652 },
258 { 0x0670 },
259 { 0x06d6, 0x06dc },
260 { 0x06dd, 0x06df },
261 { 0x06e0, 0x06e4 },
262 { 0x06e7, 0x06e8 },
263 { 0x06ea, 0x06ed },
264 { 0x0901, 0x0903 },
265 { 0x093c },
266 { 0x093e, 0x094c },
267 { 0x094d },
268 { 0x0951, 0x0954 },
269 { 0x0962, 0x0963 },
270 { 0x0981, 0x0983 },
271 { 0x09bc },
272 { 0x09be },
273 { 0x09bf },
274 { 0x09c0, 0x09c4 },
275 { 0x09c7, 0x09c8 },
276 { 0x09cb, 0x09cd },
277 { 0x09d7 },
278 { 0x09e2, 0x09e3 },
279 { 0x0a02 },
280 { 0x0a3c },
281 { 0x0a3e },
282 { 0x0a3f },
283 { 0x0a40, 0x0a42 },
284 { 0x0a47, 0x0a48 },
285 { 0x0a4b, 0x0a4d },
286 { 0x0a70, 0x0a71 },
287 { 0x0a81, 0x0a83 },
288 { 0x0abc },
289 { 0x0abe, 0x0ac5 },
290 { 0x0ac7, 0x0ac9 },
291 { 0x0acb, 0x0acd },
292 { 0x0b01, 0x0b03 },
293 { 0x0b3c },
294 { 0x0b3e, 0x0b43 },
295 { 0x0b47, 0x0b48 },
296 { 0x0b4b, 0x0b4d },
297 { 0x0b56, 0x0b57 },
298 { 0x0b82, 0x0b83 },
299 { 0x0bbe, 0x0bc2 },
300 { 0x0bc6, 0x0bc8 },
301 { 0x0bca, 0x0bcd },
302 { 0x0bd7 },
303 { 0x0c01, 0x0c03 },
304 { 0x0c3e, 0x0c44 },
305 { 0x0c46, 0x0c48 },
306 { 0x0c4a, 0x0c4d },
307 { 0x0c55, 0x0c56 },
308 { 0x0c82, 0x0c83 },
309 { 0x0cbe, 0x0cc4 },
310 { 0x0cc6, 0x0cc8 },
311 { 0x0cca, 0x0ccd },
312 { 0x0cd5, 0x0cd6 },
313 { 0x0d02, 0x0d03 },
314 { 0x0d3e, 0x0d43 },
315 { 0x0d46, 0x0d48 },
316 { 0x0d4a, 0x0d4d },
317 { 0x0d57 },
318 { 0x0e31 },
319 { 0x0e34, 0x0e3a },
320 { 0x0e47, 0x0e4e },
321 { 0x0eb1 },
322 { 0x0eb4, 0x0eb9 },
323 { 0x0ebb, 0x0ebc },
324 { 0x0ec8, 0x0ecd },
325 { 0x0f18, 0x0f19 },
326 { 0x0f35 },
327 { 0x0f37 },
328 { 0x0f39 },
329 { 0x0f3e },
330 { 0x0f3f },
331 { 0x0f71, 0x0f84 },
332 { 0x0f86, 0x0f8b },
333 { 0x0f90, 0x0f95 },
334 { 0x0f97 },
335 { 0x0f99, 0x0fad },
336 { 0x0fb1, 0x0fb7 },
337 { 0x0fb9 },
338 { 0x20d0, 0x20dc },
339 { 0x20e1 },
340 { 0x302a, 0x302f },
341 { 0x3099 },
342 { 0x309a },
343 /* Digit */
344 { 0x0030, 0x0039 },
345 { 0x0660, 0x0669 },
346 { 0x06f0, 0x06f9 },
347 { 0x0966, 0x096f },
348 { 0x09e6, 0x09ef },
349 { 0x0a66, 0x0a6f },
350 { 0x0ae6, 0x0aef },
351 { 0x0b66, 0x0b6f },
352 { 0x0be7, 0x0bef },
353 { 0x0c66, 0x0c6f },
354 { 0x0ce6, 0x0cef },
355 { 0x0d66, 0x0d6f },
356 { 0x0e50, 0x0e59 },
357 { 0x0ed0, 0x0ed9 },
358 { 0x0f20, 0x0f29 },
359 /* Extender */
360 { 0xb7 },
361 { 0x02d0 },
362 { 0x02d1 },
363 { 0x0387 },
364 { 0x0640 },
365 { 0x0e46 },
366 { 0x0ec6 },
367 { 0x3005 },
368 { 0x3031, 0x3035 },
369 { 0x309d, 0x309e },
370 { 0x30fc, 0x30fe },
371 };
372
setTab(char * tab,struct range * ranges,size_t nRanges)373 void setTab(char *tab, struct range *ranges, size_t nRanges)
374 {
375 size_t i;
376 int j;
377 for (i = 0; i < nRanges; i++) {
378 if (ranges[i].end) {
379 for (j = ranges[i].start; j <= ranges[i].end; j++)
380 tab[j] = 1;
381 }
382 else
383 tab[ranges[i].start] = 1;
384 }
385 }
386
printTabs(char * tab)387 void printTabs(char *tab)
388 {
389 int nBitmaps = 2;
390 int i, j, k;
391 unsigned char pageIndex[512];
392
393 printf(
394 "static const unsigned namingBitmap[] = {\n\
395 0x00000000, 0x00000000, 0x00000000, 0x00000000,\n\
396 0x00000000, 0x00000000, 0x00000000, 0x00000000,\n\
397 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,\n\
398 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,\n");
399 for (i = 0; i < 512; i++) {
400 int kind = tab[i*256];
401 for (j = 1; j < 256; j++)
402 if (tab[i*256 +j] != kind) {
403 kind = -1;
404 break;
405 }
406 if (i >= 256 && memcmp(tab + (i - 256)*256, tab + i*256, 256) == 0)
407 pageIndex[i] = pageIndex[i - 256];
408 else if (kind == -1) {
409 pageIndex[i] = nBitmaps++;
410 for (j = 0; j < 8; j++) {
411 unsigned val = 0;
412 for (k = 0; k < 32; k++) {
413 if (tab[i*256 + j*32 +k])
414 val |= (1 << k);
415 }
416 printf("0x%08X,", val);
417 putchar((((j + 1) & 3) == 0) ? '\n' : ' ');
418 }
419 }
420 else
421 pageIndex[i] = kind;
422 }
423 printf("};\n");
424 printf("static const unsigned char nmstrtPages[] = {\n");
425 for (i = 0; i < 512; i++) {
426 if (i == 256)
427 printf("};\nstatic const unsigned char namePages[] = {\n");
428 printf("0x%02X,", pageIndex[i]);
429 putchar((((i + 1) & 7) == 0) ? '\n' : ' ');
430 }
431 printf("};\n");
432 }
433
main()434 int main()
435 {
436 char tab[2*65536];
437 memset(tab, 0, 65536);
438 setTab(tab, nmstrt, sizeof(nmstrt)/sizeof(nmstrt[0]));
439 memcpy(tab + 65536, tab, 65536);
440 setTab(tab + 65536, name, sizeof(name)/sizeof(name[0]));
441 printTabs(tab);
442 return 0;
443 }
444