comparison src/util/uni.d @ 806:bcb74c9b895c

Moved out files in the trunk folder to the root.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Sun, 09 Mar 2008 00:12:19 +0100
parents trunk/src/util/uni.d@b091e8b0ef5c
children
comparison
equal deleted inserted replaced
805:a3fab8b74a7d 806:bcb74c9b895c
1
2 // Written in the D programming language.
3
4 /*
5 * Placed into the Public Domain.
6 * Digital Mars, www.digitalmars.com
7 * Written by Walter Bright
8 */
9
10 /**
11 * Simple Unicode character classification functions.
12 * For ASCII classification, see $(LINK2 std_ctype.html, std.ctype).
13 * Macros:
14 * WIKI=Phobos/StdUni
15 * References:
16 * $(LINK2 http://www.digitalmars.com/d/ascii-table.html, ASCII Table),
17 * $(LINK2 http://en.wikipedia.org/wiki/Unicode, Wikipedia),
18 * $(LINK2 http://www.unicode.org, The Unicode Consortium)
19 * Trademarks:
20 * Unicode(tm) is a trademark of Unicode, Inc.
21 * Copyright:
22 * Public Domain.
23 */
24
25
26 module util.uni;
27
28 /**
29 * Returns !=0 if c is a Unicode lower case character.
30 */
31 int isUniLower(dchar c)
32 {
33 if (c <= 0x7F)
34 return (c >= 'a' && c <= 'z');
35
36 return isUniAlpha(c) && c == toUniLower(c);
37 }
38
39 /**
40 * Returns !=0 if c is a Unicode upper case character.
41 */
42 int isUniUpper(dchar c)
43 {
44 if (c <= 0x7F)
45 return (c >= 'A' && c <= 'Z');
46
47 return isUniAlpha(c) && c == toUniUpper(c);
48 }
49
50 /**
51 * If c is a Unicode upper case character, return the lower case
52 * equivalent, otherwise return c.
53 */
54 dchar toUniLower(dchar c)
55 {
56 if (c >= 'A' && c <= 'Z')
57 {
58 c += 32;
59 }
60 else if (c >= 0x00C0)
61 {
62 if ((c >= 0x00C0 && c <= 0x00D6) || (c >= 0x00D8 && c<=0x00DE))
63 {
64 c += 32;
65 }
66 else if ((c >= 0x0100 && c < 0x0138) || (c > 0x0149 && c < 0x0178))
67 {
68 if (c == 0x0130)
69 c = 0x0069;
70 else if ((c & 1) == 0)
71 c += 1;
72 }
73 else if (c == 0x0178)
74 {
75 c = 0x00FF;
76 }
77 else if ((c >= 0x0139 && c < 0x0149) || (c > 0x0178 && c < 0x017F))
78 {
79 if (c & 1)
80 c += 1;
81 }
82 else if (c >= 0x0200 && c <= 0x0217)
83 {
84 if ((c & 1) == 0)
85 c += 1;
86 }
87 else if ((c >= 0x0401 && c <= 0x040C) || (c>= 0x040E && c <= 0x040F))
88 {
89 c += 80;
90 }
91 else if (c >= 0x0410 && c <= 0x042F)
92 {
93 c += 32;
94 }
95 else if (c >= 0x0460 && c <= 0x047F)
96 {
97 if ((c & 1) == 0)
98 c += 1;
99 }
100 else if (c >= 0x0531 && c <= 0x0556)
101 {
102 c += 48;
103 }
104 else if (c >= 0x10A0 && c <= 0x10C5)
105 {
106 c += 48;
107 }
108 else if (c >= 0xFF21 && c <= 0xFF3A)
109 {
110 c += 32;
111 }
112 }
113 return c;
114 }
115
116 /**
117 * If c is a Unicode lower case character, return the upper case
118 * equivalent, otherwise return c.
119 */
120 dchar toUniUpper(dchar c)
121 {
122 if (c >= 'a' && c <= 'z')
123 {
124 c -= 32;
125 }
126 else if (c >= 0x00E0)
127 {
128 if ((c >= 0x00E0 && c <= 0x00F6) || (c >= 0x00F8 && c <= 0x00FE))
129 {
130 c -= 32;
131 }
132 else if (c == 0x00FF)
133 {
134 c = 0x0178;
135 }
136 else if ((c >= 0x0100 && c < 0x0138) || (c > 0x0149 && c < 0x0178))
137 {
138 if (c == 0x0131)
139 c = 0x0049;
140 else if (c & 1)
141 c -= 1;
142 }
143 else if ((c >= 0x0139 && c < 0x0149) || (c > 0x0178 && c < 0x017F))
144 {
145 if ((c & 1) == 0)
146 c = c-1;
147 }
148 else if (c == 0x017F)
149 {
150 c = 0x0053;
151 }
152 else if (c >= 0x0200 && c <= 0x0217)
153 {
154 if (c & 1)
155 c = c-1;
156 }
157 else if (c >= 0x0430 && c<= 0x044F)
158 {
159 c -= 32;
160 }
161 else if ((c >= 0x0451 && c <= 0x045C) || (c >=0x045E && c<= 0x045F))
162 {
163 c -= 80;
164 }
165 else if (c >= 0x0460 && c <= 0x047F)
166 {
167 if (c & 1)
168 c -= 1;
169 }
170 else if (c >= 0x0561 && c < 0x0587)
171 {
172 c -= 48;
173 }
174 else if (c >= 0xFF41 && c <= 0xFF5A)
175 {
176 c -= 32;
177 }
178 }
179 return c;
180 }
181
182
183 /*******************************
184 * Return !=0 if u is a Unicode alpha character.
185 * (general Unicode category: Lu, Ll, Lt, Lm and Lo)
186 *
187 * Standards: Unicode 5.0.0
188 */
189
190 int isUniAlpha(dchar u)
191 {
192 static dchar table[][2] =
193 [
194 [ 'A', 'Z' ],
195 [ 'a', 'z' ],
196 [ 0x00AA, 0x00AA ],
197 [ 0x00B5, 0x00B5 ],
198 [ 0x00BA, 0x00BA ],
199 [ 0x00C0, 0x00D6 ],
200 [ 0x00D8, 0x00F6 ],
201 [ 0x00F8, 0x02C1 ],
202 [ 0x02C6, 0x02D1 ],
203 [ 0x02E0, 0x02E4 ],
204 [ 0x02EE, 0x02EE ],
205 [ 0x037A, 0x037D ],
206 [ 0x0386, 0x0386 ],
207 [ 0x0388, 0x038A ],
208 [ 0x038C, 0x038C ],
209 [ 0x038E, 0x03A1 ],
210 [ 0x03A3, 0x03CE ],
211 [ 0x03D0, 0x03F5 ],
212 [ 0x03F7, 0x0481 ],
213 [ 0x048A, 0x0513 ],
214 [ 0x0531, 0x0556 ],
215 [ 0x0559, 0x0559 ],
216 [ 0x0561, 0x0587 ],
217 [ 0x05D0, 0x05EA ],
218 [ 0x05F0, 0x05F2 ],
219 [ 0x0621, 0x063A ],
220 [ 0x0640, 0x064A ],
221 [ 0x066E, 0x066F ],
222 [ 0x0671, 0x06D3 ],
223 [ 0x06D5, 0x06D5 ],
224 [ 0x06E5, 0x06E6 ],
225 [ 0x06EE, 0x06EF ],
226 [ 0x06FA, 0x06FC ],
227 [ 0x06FF, 0x06FF ],
228 [ 0x0710, 0x0710 ],
229 [ 0x0712, 0x072F ],
230 [ 0x074D, 0x076D ],
231 [ 0x0780, 0x07A5 ],
232 [ 0x07B1, 0x07B1 ],
233 [ 0x07CA, 0x07EA ],
234 [ 0x07F4, 0x07F5 ],
235 [ 0x07FA, 0x07FA ],
236 [ 0x0904, 0x0939 ],
237 [ 0x093D, 0x093D ],
238 [ 0x0950, 0x0950 ],
239 [ 0x0958, 0x0961 ],
240 [ 0x097B, 0x097F ],
241 [ 0x0985, 0x098C ],
242 [ 0x098F, 0x0990 ],
243 [ 0x0993, 0x09A8 ],
244 [ 0x09AA, 0x09B0 ],
245 [ 0x09B2, 0x09B2 ],
246 [ 0x09B6, 0x09B9 ],
247 [ 0x09BD, 0x09BD ],
248 [ 0x09CE, 0x09CE ],
249 [ 0x09DC, 0x09DD ],
250 [ 0x09DF, 0x09E1 ],
251 [ 0x09F0, 0x09F1 ],
252 [ 0x0A05, 0x0A0A ],
253 [ 0x0A0F, 0x0A10 ],
254 [ 0x0A13, 0x0A28 ],
255 [ 0x0A2A, 0x0A30 ],
256 [ 0x0A32, 0x0A33 ],
257 [ 0x0A35, 0x0A36 ],
258 [ 0x0A38, 0x0A39 ],
259 [ 0x0A59, 0x0A5C ],
260 [ 0x0A5E, 0x0A5E ],
261 [ 0x0A72, 0x0A74 ],
262 [ 0x0A85, 0x0A8D ],
263 [ 0x0A8F, 0x0A91 ],
264 [ 0x0A93, 0x0AA8 ],
265 [ 0x0AAA, 0x0AB0 ],
266 [ 0x0AB2, 0x0AB3 ],
267 [ 0x0AB5, 0x0AB9 ],
268 [ 0x0ABD, 0x0ABD ],
269 [ 0x0AD0, 0x0AD0 ],
270 [ 0x0AE0, 0x0AE1 ],
271 [ 0x0B05, 0x0B0C ],
272 [ 0x0B0F, 0x0B10 ],
273 [ 0x0B13, 0x0B28 ],
274 [ 0x0B2A, 0x0B30 ],
275 [ 0x0B32, 0x0B33 ],
276 [ 0x0B35, 0x0B39 ],
277 [ 0x0B3D, 0x0B3D ],
278 [ 0x0B5C, 0x0B5D ],
279 [ 0x0B5F, 0x0B61 ],
280 [ 0x0B71, 0x0B71 ],
281 [ 0x0B83, 0x0B83 ],
282 [ 0x0B85, 0x0B8A ],
283 [ 0x0B8E, 0x0B90 ],
284 [ 0x0B92, 0x0B95 ],
285 [ 0x0B99, 0x0B9A ],
286 [ 0x0B9C, 0x0B9C ],
287 [ 0x0B9E, 0x0B9F ],
288 [ 0x0BA3, 0x0BA4 ],
289 [ 0x0BA8, 0x0BAA ],
290 [ 0x0BAE, 0x0BB9 ],
291 [ 0x0C05, 0x0C0C ],
292 [ 0x0C0E, 0x0C10 ],
293 [ 0x0C12, 0x0C28 ],
294 [ 0x0C2A, 0x0C33 ],
295 [ 0x0C35, 0x0C39 ],
296 [ 0x0C60, 0x0C61 ],
297 [ 0x0C85, 0x0C8C ],
298 [ 0x0C8E, 0x0C90 ],
299 [ 0x0C92, 0x0CA8 ],
300 [ 0x0CAA, 0x0CB3 ],
301 [ 0x0CB5, 0x0CB9 ],
302 [ 0x0CBD, 0x0CBD ],
303 [ 0x0CDE, 0x0CDE ],
304 [ 0x0CE0, 0x0CE1 ],
305 [ 0x0D05, 0x0D0C ],
306 [ 0x0D0E, 0x0D10 ],
307 [ 0x0D12, 0x0D28 ],
308 [ 0x0D2A, 0x0D39 ],
309 [ 0x0D60, 0x0D61 ],
310 [ 0x0D85, 0x0D96 ],
311 [ 0x0D9A, 0x0DB1 ],
312 [ 0x0DB3, 0x0DBB ],
313 [ 0x0DBD, 0x0DBD ],
314 [ 0x0DC0, 0x0DC6 ],
315 [ 0x0E01, 0x0E30 ],
316 [ 0x0E32, 0x0E33 ],
317 [ 0x0E40, 0x0E46 ],
318 [ 0x0E81, 0x0E82 ],
319 [ 0x0E84, 0x0E84 ],
320 [ 0x0E87, 0x0E88 ],
321 [ 0x0E8A, 0x0E8A ],
322 [ 0x0E8D, 0x0E8D ],
323 [ 0x0E94, 0x0E97 ],
324 [ 0x0E99, 0x0E9F ],
325 [ 0x0EA1, 0x0EA3 ],
326 [ 0x0EA5, 0x0EA5 ],
327 [ 0x0EA7, 0x0EA7 ],
328 [ 0x0EAA, 0x0EAB ],
329 [ 0x0EAD, 0x0EB0 ],
330 [ 0x0EB2, 0x0EB3 ],
331 [ 0x0EBD, 0x0EBD ],
332 [ 0x0EC0, 0x0EC4 ],
333 [ 0x0EC6, 0x0EC6 ],
334 [ 0x0EDC, 0x0EDD ],
335 [ 0x0F00, 0x0F00 ],
336 [ 0x0F40, 0x0F47 ],
337 [ 0x0F49, 0x0F6A ],
338 [ 0x0F88, 0x0F8B ],
339 [ 0x1000, 0x1021 ],
340 [ 0x1023, 0x1027 ],
341 [ 0x1029, 0x102A ],
342 [ 0x1050, 0x1055 ],
343 [ 0x10A0, 0x10C5 ],
344 [ 0x10D0, 0x10FA ],
345 [ 0x10FC, 0x10FC ],
346 [ 0x1100, 0x1159 ],
347 [ 0x115F, 0x11A2 ],
348 [ 0x11A8, 0x11F9 ],
349 [ 0x1200, 0x1248 ],
350 [ 0x124A, 0x124D ],
351 [ 0x1250, 0x1256 ],
352 [ 0x1258, 0x1258 ],
353 [ 0x125A, 0x125D ],
354 [ 0x1260, 0x1288 ],
355 [ 0x128A, 0x128D ],
356 [ 0x1290, 0x12B0 ],
357 [ 0x12B2, 0x12B5 ],
358 [ 0x12B8, 0x12BE ],
359 [ 0x12C0, 0x12C0 ],
360 [ 0x12C2, 0x12C5 ],
361 [ 0x12C8, 0x12D6 ],
362 [ 0x12D8, 0x1310 ],
363 [ 0x1312, 0x1315 ],
364 [ 0x1318, 0x135A ],
365 [ 0x1380, 0x138F ],
366 [ 0x13A0, 0x13F4 ],
367 [ 0x1401, 0x166C ],
368 [ 0x166F, 0x1676 ],
369 [ 0x1681, 0x169A ],
370 [ 0x16A0, 0x16EA ],
371 [ 0x1700, 0x170C ],
372 [ 0x170E, 0x1711 ],
373 [ 0x1720, 0x1731 ],
374 [ 0x1740, 0x1751 ],
375 [ 0x1760, 0x176C ],
376 [ 0x176E, 0x1770 ],
377 [ 0x1780, 0x17B3 ],
378 [ 0x17D7, 0x17D7 ],
379 [ 0x17DC, 0x17DC ],
380 [ 0x1820, 0x1877 ],
381 [ 0x1880, 0x18A8 ],
382 [ 0x1900, 0x191C ],
383 [ 0x1950, 0x196D ],
384 [ 0x1970, 0x1974 ],
385 [ 0x1980, 0x19A9 ],
386 [ 0x19C1, 0x19C7 ],
387 [ 0x1A00, 0x1A16 ],
388 [ 0x1B05, 0x1B33 ],
389 [ 0x1B45, 0x1B4B ],
390 [ 0x1D00, 0x1DBF ],
391 [ 0x1E00, 0x1E9B ],
392 [ 0x1EA0, 0x1EF9 ],
393 [ 0x1F00, 0x1F15 ],
394 [ 0x1F18, 0x1F1D ],
395 [ 0x1F20, 0x1F45 ],
396 [ 0x1F48, 0x1F4D ],
397 [ 0x1F50, 0x1F57 ],
398 [ 0x1F59, 0x1F59 ],
399 [ 0x1F5B, 0x1F5B ],
400 [ 0x1F5D, 0x1F5D ],
401 [ 0x1F5F, 0x1F7D ],
402 [ 0x1F80, 0x1FB4 ],
403 [ 0x1FB6, 0x1FBC ],
404 [ 0x1FBE, 0x1FBE ],
405 [ 0x1FC2, 0x1FC4 ],
406 [ 0x1FC6, 0x1FCC ],
407 [ 0x1FD0, 0x1FD3 ],
408 [ 0x1FD6, 0x1FDB ],
409 [ 0x1FE0, 0x1FEC ],
410 [ 0x1FF2, 0x1FF4 ],
411 [ 0x1FF6, 0x1FFC ],
412 [ 0x2071, 0x2071 ],
413 [ 0x207F, 0x207F ],
414 [ 0x2090, 0x2094 ],
415 [ 0x2102, 0x2102 ],
416 [ 0x2107, 0x2107 ],
417 [ 0x210A, 0x2113 ],
418 [ 0x2115, 0x2115 ],
419 [ 0x2119, 0x211D ],
420 [ 0x2124, 0x2124 ],
421 [ 0x2126, 0x2126 ],
422 [ 0x2128, 0x2128 ],
423 [ 0x212A, 0x212D ],
424 [ 0x212F, 0x2139 ],
425 [ 0x213C, 0x213F ],
426 [ 0x2145, 0x2149 ],
427 [ 0x214E, 0x214E ],
428 [ 0x2183, 0x2184 ],
429 [ 0x2C00, 0x2C2E ],
430 [ 0x2C30, 0x2C5E ],
431 [ 0x2C60, 0x2C6C ],
432 [ 0x2C74, 0x2C77 ],
433 [ 0x2C80, 0x2CE4 ],
434 [ 0x2D00, 0x2D25 ],
435 [ 0x2D30, 0x2D65 ],
436 [ 0x2D6F, 0x2D6F ],
437 [ 0x2D80, 0x2D96 ],
438 [ 0x2DA0, 0x2DA6 ],
439 [ 0x2DA8, 0x2DAE ],
440 [ 0x2DB0, 0x2DB6 ],
441 [ 0x2DB8, 0x2DBE ],
442 [ 0x2DC0, 0x2DC6 ],
443 [ 0x2DC8, 0x2DCE ],
444 [ 0x2DD0, 0x2DD6 ],
445 [ 0x2DD8, 0x2DDE ],
446 [ 0x3005, 0x3006 ],
447 [ 0x3031, 0x3035 ],
448 [ 0x303B, 0x303C ],
449 [ 0x3041, 0x3096 ],
450 [ 0x309D, 0x309F ],
451 [ 0x30A1, 0x30FA ],
452 [ 0x30FC, 0x30FF ],
453 [ 0x3105, 0x312C ],
454 [ 0x3131, 0x318E ],
455 [ 0x31A0, 0x31B7 ],
456 [ 0x31F0, 0x31FF ],
457 [ 0x3400, 0x4DB5 ],
458 [ 0x4E00, 0x9FBB ],
459 [ 0xA000, 0xA48C ],
460 [ 0xA717, 0xA71A ],
461 [ 0xA800, 0xA801 ],
462 [ 0xA803, 0xA805 ],
463 [ 0xA807, 0xA80A ],
464 [ 0xA80C, 0xA822 ],
465 [ 0xA840, 0xA873 ],
466 [ 0xAC00, 0xD7A3 ],
467 [ 0xF900, 0xFA2D ],
468 [ 0xFA30, 0xFA6A ],
469 [ 0xFA70, 0xFAD9 ],
470 [ 0xFB00, 0xFB06 ],
471 [ 0xFB13, 0xFB17 ],
472 [ 0xFB1D, 0xFB1D ],
473 [ 0xFB1F, 0xFB28 ],
474 [ 0xFB2A, 0xFB36 ],
475 [ 0xFB38, 0xFB3C ],
476 [ 0xFB3E, 0xFB3E ],
477 [ 0xFB40, 0xFB41 ],
478 [ 0xFB43, 0xFB44 ],
479 [ 0xFB46, 0xFBB1 ],
480 [ 0xFBD3, 0xFD3D ],
481 [ 0xFD50, 0xFD8F ],
482 [ 0xFD92, 0xFDC7 ],
483 [ 0xFDF0, 0xFDFB ],
484 [ 0xFE70, 0xFE74 ],
485 [ 0xFE76, 0xFEFC ],
486 [ 0xFF21, 0xFF3A ],
487 [ 0xFF41, 0xFF5A ],
488 [ 0xFF66, 0xFFBE ],
489 [ 0xFFC2, 0xFFC7 ],
490 [ 0xFFCA, 0xFFCF ],
491 [ 0xFFD2, 0xFFD7 ],
492 [ 0xFFDA, 0xFFDC ],
493 [ 0x10000, 0x1000B ],
494 [ 0x1000D, 0x10026 ],
495 [ 0x10028, 0x1003A ],
496 [ 0x1003C, 0x1003D ],
497 [ 0x1003F, 0x1004D ],
498 [ 0x10050, 0x1005D ],
499 [ 0x10080, 0x100FA ],
500 [ 0x10300, 0x1031E ],
501 [ 0x10330, 0x10340 ],
502 [ 0x10342, 0x10349 ],
503 [ 0x10380, 0x1039D ],
504 [ 0x103A0, 0x103C3 ],
505 [ 0x103C8, 0x103CF ],
506 [ 0x10400, 0x1049D ],
507 [ 0x10800, 0x10805 ],
508 [ 0x10808, 0x10808 ],
509 [ 0x1080A, 0x10835 ],
510 [ 0x10837, 0x10838 ],
511 [ 0x1083C, 0x1083C ],
512 [ 0x1083F, 0x1083F ],
513 [ 0x10900, 0x10915 ],
514 [ 0x10A00, 0x10A00 ],
515 [ 0x10A10, 0x10A13 ],
516 [ 0x10A15, 0x10A17 ],
517 [ 0x10A19, 0x10A33 ],
518 [ 0x12000, 0x1236E ],
519 [ 0x1D400, 0x1D454 ],
520 [ 0x1D456, 0x1D49C ],
521 [ 0x1D49E, 0x1D49F ],
522 [ 0x1D4A2, 0x1D4A2 ],
523 [ 0x1D4A5, 0x1D4A6 ],
524 [ 0x1D4A9, 0x1D4AC ],
525 [ 0x1D4AE, 0x1D4B9 ],
526 [ 0x1D4BB, 0x1D4BB ],
527 [ 0x1D4BD, 0x1D4C3 ],
528 [ 0x1D4C5, 0x1D505 ],
529 [ 0x1D507, 0x1D50A ],
530 [ 0x1D50D, 0x1D514 ],
531 [ 0x1D516, 0x1D51C ],
532 [ 0x1D51E, 0x1D539 ],
533 [ 0x1D53B, 0x1D53E ],
534 [ 0x1D540, 0x1D544 ],
535 [ 0x1D546, 0x1D546 ],
536 [ 0x1D54A, 0x1D550 ],
537 [ 0x1D552, 0x1D6A5 ],
538 [ 0x1D6A8, 0x1D6C0 ],
539 [ 0x1D6C2, 0x1D6DA ],
540 [ 0x1D6DC, 0x1D6FA ],
541 [ 0x1D6FC, 0x1D714 ],
542 [ 0x1D716, 0x1D734 ],
543 [ 0x1D736, 0x1D74E ],
544 [ 0x1D750, 0x1D76E ],
545 [ 0x1D770, 0x1D788 ],
546 [ 0x1D78A, 0x1D7A8 ],
547 [ 0x1D7AA, 0x1D7C2 ],
548 [ 0x1D7C4, 0x1D7CB ],
549 [ 0x20000, 0x2A6D6 ],
550 [ 0x2F800, 0x2FA1D ],
551 ];
552
553 debug
554 {
555 for (int i = 0; i < table.length; i++)
556 {
557 assert(table[i][0] <= table[i][1]);
558 if (i < table.length - 1)
559 {
560 // if (table[i][1] >= table[i + 1][0])
561 // printf("table[%d][1] = x%x, table[%d][0] = x%x\n", i, table[i][1], i + 1, table[i + 1][0]);
562 assert(table[i][1] < table[i + 1][0]);
563 }
564 }
565 }
566
567 if (u < 0xAA)
568 {
569 if (u < 'A')
570 goto Lisnot;
571 if (u <= 'Z')
572 goto Lis;
573 if (u < 'a')
574 goto Lisnot;
575 if (u <= 'z')
576 goto Lis;
577 goto Lisnot;
578 }
579
580 // Binary search
581 uint mid;
582 uint low;
583 uint high;
584
585 low = 0;
586 high = table.length - 1;
587 while (cast(int)low <= cast(int)high)
588 {
589 mid = (low + high) >> 1;
590 if (u < table[mid][0])
591 high = mid - 1;
592 else if (u > table[mid][1])
593 low = mid + 1;
594 else
595 goto Lis;
596 }
597
598 Lisnot:
599 debug
600 {
601 for (int i = 0; i < table.length; i++)
602 {
603 assert(u < table[i][0] || u > table[i][1]);
604 }
605 }
606 return 0;
607
608 Lis:
609 debug
610 {
611 for (int i = 0; i < table.length; i++)
612 {
613 if (u >= table[i][0] && u <= table[i][1])
614 return 1;
615 }
616 assert(0); // should have been in table
617 }
618 return 1;
619 }
620
621 unittest
622 {
623 for (uint i = 0; i < 0x80; i++)
624 {
625 if (i >= 'A' && i <= 'Z')
626 assert(isUniAlpha(i));
627 else if (i >= 'a' && i <= 'z')
628 assert(isUniAlpha(i));
629 else
630 assert(!isUniAlpha(i));
631 }
632 }