1 /* generated automatically by mkrunetype.c in Go from UnicodeData-6.2.0.txt
2 * with s/rbsearch/_runebsearch/g
3 */
4
5 static Rune __isspacer[] = {
6 0x0009, 0x000d,
7 0x0020, 0x0020,
8 0x0085, 0x0085,
9 0x00a0, 0x00a0,
10 0x1680, 0x1680,
11 0x180e, 0x180e,
12 0x2000, 0x200a,
13 0x2028, 0x2029,
14 0x202f, 0x202f,
15 0x205f, 0x205f,
16 0x3000, 0x3000,
17 0xfeff, 0xfeff,
18 };
19
20 int
isspacerune(Rune c)21 isspacerune(Rune c)
22 {
23 Rune *p;
24
25 p = _runebsearch(c, __isspacer, nelem(__isspacer)/2, 2);
26 if(p && c >= p[0] && c <= p[1])
27 return 1;
28 return 0;
29 }
30
31 static Rune __isdigitr[] = {
32 0x0030, 0x0039,
33 0x0660, 0x0669,
34 0x06f0, 0x06f9,
35 0x07c0, 0x07c9,
36 0x0966, 0x096f,
37 0x09e6, 0x09ef,
38 0x0a66, 0x0a6f,
39 0x0ae6, 0x0aef,
40 0x0b66, 0x0b6f,
41 0x0be6, 0x0bef,
42 0x0c66, 0x0c6f,
43 0x0ce6, 0x0cef,
44 0x0d66, 0x0d6f,
45 0x0e50, 0x0e59,
46 0x0ed0, 0x0ed9,
47 0x0f20, 0x0f29,
48 0x1040, 0x1049,
49 0x1090, 0x1099,
50 0x17e0, 0x17e9,
51 0x1810, 0x1819,
52 0x1946, 0x194f,
53 0x19d0, 0x19d9,
54 0x1a80, 0x1a89,
55 0x1a90, 0x1a99,
56 0x1b50, 0x1b59,
57 0x1bb0, 0x1bb9,
58 0x1c40, 0x1c49,
59 0x1c50, 0x1c59,
60 0xa620, 0xa629,
61 0xa8d0, 0xa8d9,
62 0xa900, 0xa909,
63 0xa9d0, 0xa9d9,
64 0xaa50, 0xaa59,
65 0xabf0, 0xabf9,
66 0xff10, 0xff19,
67 0x104a0, 0x104a9,
68 0x11066, 0x1106f,
69 0x110f0, 0x110f9,
70 0x11136, 0x1113f,
71 0x111d0, 0x111d9,
72 0x116c0, 0x116c9,
73 0x1d7ce, 0x1d7ff,
74 };
75
76 int
isdigitrune(Rune c)77 isdigitrune(Rune c)
78 {
79 Rune *p;
80
81 p = _runebsearch(c, __isdigitr, nelem(__isdigitr)/2, 2);
82 if(p && c >= p[0] && c <= p[1])
83 return 1;
84 return 0;
85 }
86
87 static Rune __isalphar[] = {
88 0x0041, 0x005a,
89 0x0061, 0x007a,
90 0x00c0, 0x00d6,
91 0x00d8, 0x00f6,
92 0x00f8, 0x02c1,
93 0x02c6, 0x02d1,
94 0x02e0, 0x02e4,
95 0x0370, 0x0374,
96 0x0376, 0x0377,
97 0x037a, 0x037d,
98 0x0388, 0x038a,
99 0x038e, 0x03a1,
100 0x03a3, 0x03f5,
101 0x03f7, 0x0481,
102 0x048a, 0x0527,
103 0x0531, 0x0556,
104 0x0561, 0x0587,
105 0x05d0, 0x05ea,
106 0x05f0, 0x05f2,
107 0x0620, 0x064a,
108 0x066e, 0x066f,
109 0x0671, 0x06d3,
110 0x06e5, 0x06e6,
111 0x06ee, 0x06ef,
112 0x06fa, 0x06fc,
113 0x0712, 0x072f,
114 0x074d, 0x07a5,
115 0x07ca, 0x07ea,
116 0x07f4, 0x07f5,
117 0x0800, 0x0815,
118 0x0840, 0x0858,
119 0x08a2, 0x08ac,
120 0x0904, 0x0939,
121 0x0958, 0x0961,
122 0x0971, 0x0977,
123 0x0979, 0x097f,
124 0x0985, 0x098c,
125 0x098f, 0x0990,
126 0x0993, 0x09a8,
127 0x09aa, 0x09b0,
128 0x09b6, 0x09b9,
129 0x09dc, 0x09dd,
130 0x09df, 0x09e1,
131 0x09f0, 0x09f1,
132 0x0a05, 0x0a0a,
133 0x0a0f, 0x0a10,
134 0x0a13, 0x0a28,
135 0x0a2a, 0x0a30,
136 0x0a32, 0x0a33,
137 0x0a35, 0x0a36,
138 0x0a38, 0x0a39,
139 0x0a59, 0x0a5c,
140 0x0a72, 0x0a74,
141 0x0a85, 0x0a8d,
142 0x0a8f, 0x0a91,
143 0x0a93, 0x0aa8,
144 0x0aaa, 0x0ab0,
145 0x0ab2, 0x0ab3,
146 0x0ab5, 0x0ab9,
147 0x0ae0, 0x0ae1,
148 0x0b05, 0x0b0c,
149 0x0b0f, 0x0b10,
150 0x0b13, 0x0b28,
151 0x0b2a, 0x0b30,
152 0x0b32, 0x0b33,
153 0x0b35, 0x0b39,
154 0x0b5c, 0x0b5d,
155 0x0b5f, 0x0b61,
156 0x0b85, 0x0b8a,
157 0x0b8e, 0x0b90,
158 0x0b92, 0x0b95,
159 0x0b99, 0x0b9a,
160 0x0b9e, 0x0b9f,
161 0x0ba3, 0x0ba4,
162 0x0ba8, 0x0baa,
163 0x0bae, 0x0bb9,
164 0x0c05, 0x0c0c,
165 0x0c0e, 0x0c10,
166 0x0c12, 0x0c28,
167 0x0c2a, 0x0c33,
168 0x0c35, 0x0c39,
169 0x0c58, 0x0c59,
170 0x0c60, 0x0c61,
171 0x0c85, 0x0c8c,
172 0x0c8e, 0x0c90,
173 0x0c92, 0x0ca8,
174 0x0caa, 0x0cb3,
175 0x0cb5, 0x0cb9,
176 0x0ce0, 0x0ce1,
177 0x0cf1, 0x0cf2,
178 0x0d05, 0x0d0c,
179 0x0d0e, 0x0d10,
180 0x0d12, 0x0d3a,
181 0x0d60, 0x0d61,
182 0x0d7a, 0x0d7f,
183 0x0d85, 0x0d96,
184 0x0d9a, 0x0db1,
185 0x0db3, 0x0dbb,
186 0x0dc0, 0x0dc6,
187 0x0e01, 0x0e30,
188 0x0e32, 0x0e33,
189 0x0e40, 0x0e46,
190 0x0e81, 0x0e82,
191 0x0e87, 0x0e88,
192 0x0e94, 0x0e97,
193 0x0e99, 0x0e9f,
194 0x0ea1, 0x0ea3,
195 0x0eaa, 0x0eab,
196 0x0ead, 0x0eb0,
197 0x0eb2, 0x0eb3,
198 0x0ec0, 0x0ec4,
199 0x0edc, 0x0edf,
200 0x0f40, 0x0f47,
201 0x0f49, 0x0f6c,
202 0x0f88, 0x0f8c,
203 0x1000, 0x102a,
204 0x1050, 0x1055,
205 0x105a, 0x105d,
206 0x1065, 0x1066,
207 0x106e, 0x1070,
208 0x1075, 0x1081,
209 0x10a0, 0x10c5,
210 0x10d0, 0x10fa,
211 0x10fc, 0x1248,
212 0x124a, 0x124d,
213 0x1250, 0x1256,
214 0x125a, 0x125d,
215 0x1260, 0x1288,
216 0x128a, 0x128d,
217 0x1290, 0x12b0,
218 0x12b2, 0x12b5,
219 0x12b8, 0x12be,
220 0x12c2, 0x12c5,
221 0x12c8, 0x12d6,
222 0x12d8, 0x1310,
223 0x1312, 0x1315,
224 0x1318, 0x135a,
225 0x1380, 0x138f,
226 0x13a0, 0x13f4,
227 0x1401, 0x166c,
228 0x166f, 0x167f,
229 0x1681, 0x169a,
230 0x16a0, 0x16ea,
231 0x1700, 0x170c,
232 0x170e, 0x1711,
233 0x1720, 0x1731,
234 0x1740, 0x1751,
235 0x1760, 0x176c,
236 0x176e, 0x1770,
237 0x1780, 0x17b3,
238 0x1820, 0x1877,
239 0x1880, 0x18a8,
240 0x18b0, 0x18f5,
241 0x1900, 0x191c,
242 0x1950, 0x196d,
243 0x1970, 0x1974,
244 0x1980, 0x19ab,
245 0x19c1, 0x19c7,
246 0x1a00, 0x1a16,
247 0x1a20, 0x1a54,
248 0x1b05, 0x1b33,
249 0x1b45, 0x1b4b,
250 0x1b83, 0x1ba0,
251 0x1bae, 0x1baf,
252 0x1bba, 0x1be5,
253 0x1c00, 0x1c23,
254 0x1c4d, 0x1c4f,
255 0x1c5a, 0x1c7d,
256 0x1ce9, 0x1cec,
257 0x1cee, 0x1cf1,
258 0x1cf5, 0x1cf6,
259 0x1d00, 0x1dbf,
260 0x1e00, 0x1f15,
261 0x1f18, 0x1f1d,
262 0x1f20, 0x1f45,
263 0x1f48, 0x1f4d,
264 0x1f50, 0x1f57,
265 0x1f5f, 0x1f7d,
266 0x1f80, 0x1fb4,
267 0x1fb6, 0x1fbc,
268 0x1fc2, 0x1fc4,
269 0x1fc6, 0x1fcc,
270 0x1fd0, 0x1fd3,
271 0x1fd6, 0x1fdb,
272 0x1fe0, 0x1fec,
273 0x1ff2, 0x1ff4,
274 0x1ff6, 0x1ffc,
275 0x2090, 0x209c,
276 0x210a, 0x2113,
277 0x2119, 0x211d,
278 0x212a, 0x212d,
279 0x212f, 0x2139,
280 0x213c, 0x213f,
281 0x2145, 0x2149,
282 0x2183, 0x2184,
283 0x2c00, 0x2c2e,
284 0x2c30, 0x2c5e,
285 0x2c60, 0x2ce4,
286 0x2ceb, 0x2cee,
287 0x2cf2, 0x2cf3,
288 0x2d00, 0x2d25,
289 0x2d30, 0x2d67,
290 0x2d80, 0x2d96,
291 0x2da0, 0x2da6,
292 0x2da8, 0x2dae,
293 0x2db0, 0x2db6,
294 0x2db8, 0x2dbe,
295 0x2dc0, 0x2dc6,
296 0x2dc8, 0x2dce,
297 0x2dd0, 0x2dd6,
298 0x2dd8, 0x2dde,
299 0x3005, 0x3006,
300 0x3031, 0x3035,
301 0x303b, 0x303c,
302 0x3041, 0x3096,
303 0x309d, 0x309f,
304 0x30a1, 0x30fa,
305 0x30fc, 0x30ff,
306 0x3105, 0x312d,
307 0x3131, 0x318e,
308 0x31a0, 0x31ba,
309 0x31f0, 0x31ff,
310 0x3400, 0x4db5,
311 0x4e00, 0x9fcc,
312 0xa000, 0xa48c,
313 0xa4d0, 0xa4fd,
314 0xa500, 0xa60c,
315 0xa610, 0xa61f,
316 0xa62a, 0xa62b,
317 0xa640, 0xa66e,
318 0xa67f, 0xa697,
319 0xa6a0, 0xa6e5,
320 0xa717, 0xa71f,
321 0xa722, 0xa788,
322 0xa78b, 0xa78e,
323 0xa790, 0xa793,
324 0xa7a0, 0xa7aa,
325 0xa7f8, 0xa801,
326 0xa803, 0xa805,
327 0xa807, 0xa80a,
328 0xa80c, 0xa822,
329 0xa840, 0xa873,
330 0xa882, 0xa8b3,
331 0xa8f2, 0xa8f7,
332 0xa90a, 0xa925,
333 0xa930, 0xa946,
334 0xa960, 0xa97c,
335 0xa984, 0xa9b2,
336 0xaa00, 0xaa28,
337 0xaa40, 0xaa42,
338 0xaa44, 0xaa4b,
339 0xaa60, 0xaa76,
340 0xaa80, 0xaaaf,
341 0xaab5, 0xaab6,
342 0xaab9, 0xaabd,
343 0xaadb, 0xaadd,
344 0xaae0, 0xaaea,
345 0xaaf2, 0xaaf4,
346 0xab01, 0xab06,
347 0xab09, 0xab0e,
348 0xab11, 0xab16,
349 0xab20, 0xab26,
350 0xab28, 0xab2e,
351 0xabc0, 0xabe2,
352 0xac00, 0xd7a3,
353 0xd7b0, 0xd7c6,
354 0xd7cb, 0xd7fb,
355 0xf900, 0xfa6d,
356 0xfa70, 0xfad9,
357 0xfb00, 0xfb06,
358 0xfb13, 0xfb17,
359 0xfb1f, 0xfb28,
360 0xfb2a, 0xfb36,
361 0xfb38, 0xfb3c,
362 0xfb40, 0xfb41,
363 0xfb43, 0xfb44,
364 0xfb46, 0xfbb1,
365 0xfbd3, 0xfd3d,
366 0xfd50, 0xfd8f,
367 0xfd92, 0xfdc7,
368 0xfdf0, 0xfdfb,
369 0xfe70, 0xfe74,
370 0xfe76, 0xfefc,
371 0xff21, 0xff3a,
372 0xff41, 0xff5a,
373 0xff66, 0xffbe,
374 0xffc2, 0xffc7,
375 0xffca, 0xffcf,
376 0xffd2, 0xffd7,
377 0xffda, 0xffdc,
378 0x10000, 0x1000b,
379 0x1000d, 0x10026,
380 0x10028, 0x1003a,
381 0x1003c, 0x1003d,
382 0x1003f, 0x1004d,
383 0x10050, 0x1005d,
384 0x10080, 0x100fa,
385 0x10280, 0x1029c,
386 0x102a0, 0x102d0,
387 0x10300, 0x1031e,
388 0x10330, 0x10340,
389 0x10342, 0x10349,
390 0x10380, 0x1039d,
391 0x103a0, 0x103c3,
392 0x103c8, 0x103cf,
393 0x10400, 0x1049d,
394 0x10800, 0x10805,
395 0x1080a, 0x10835,
396 0x10837, 0x10838,
397 0x1083f, 0x10855,
398 0x10900, 0x10915,
399 0x10920, 0x10939,
400 0x10980, 0x109b7,
401 0x109be, 0x109bf,
402 0x10a10, 0x10a13,
403 0x10a15, 0x10a17,
404 0x10a19, 0x10a33,
405 0x10a60, 0x10a7c,
406 0x10b00, 0x10b35,
407 0x10b40, 0x10b55,
408 0x10b60, 0x10b72,
409 0x10c00, 0x10c48,
410 0x11003, 0x11037,
411 0x11083, 0x110af,
412 0x110d0, 0x110e8,
413 0x11103, 0x11126,
414 0x11183, 0x111b2,
415 0x111c1, 0x111c4,
416 0x11680, 0x116aa,
417 0x12000, 0x1236e,
418 0x13000, 0x1342e,
419 0x16800, 0x16a38,
420 0x16f00, 0x16f44,
421 0x16f93, 0x16f9f,
422 0x1b000, 0x1b001,
423 0x1d400, 0x1d454,
424 0x1d456, 0x1d49c,
425 0x1d49e, 0x1d49f,
426 0x1d4a5, 0x1d4a6,
427 0x1d4a9, 0x1d4ac,
428 0x1d4ae, 0x1d4b9,
429 0x1d4bd, 0x1d4c3,
430 0x1d4c5, 0x1d505,
431 0x1d507, 0x1d50a,
432 0x1d50d, 0x1d514,
433 0x1d516, 0x1d51c,
434 0x1d51e, 0x1d539,
435 0x1d53b, 0x1d53e,
436 0x1d540, 0x1d544,
437 0x1d54a, 0x1d550,
438 0x1d552, 0x1d6a5,
439 0x1d6a8, 0x1d6c0,
440 0x1d6c2, 0x1d6da,
441 0x1d6dc, 0x1d6fa,
442 0x1d6fc, 0x1d714,
443 0x1d716, 0x1d734,
444 0x1d736, 0x1d74e,
445 0x1d750, 0x1d76e,
446 0x1d770, 0x1d788,
447 0x1d78a, 0x1d7a8,
448 0x1d7aa, 0x1d7c2,
449 0x1d7c4, 0x1d7cb,
450 0x1ee00, 0x1ee03,
451 0x1ee05, 0x1ee1f,
452 0x1ee21, 0x1ee22,
453 0x1ee29, 0x1ee32,
454 0x1ee34, 0x1ee37,
455 0x1ee4d, 0x1ee4f,
456 0x1ee51, 0x1ee52,
457 0x1ee61, 0x1ee62,
458 0x1ee67, 0x1ee6a,
459 0x1ee6c, 0x1ee72,
460 0x1ee74, 0x1ee77,
461 0x1ee79, 0x1ee7c,
462 0x1ee80, 0x1ee89,
463 0x1ee8b, 0x1ee9b,
464 0x1eea1, 0x1eea3,
465 0x1eea5, 0x1eea9,
466 0x1eeab, 0x1eebb,
467 0x20000, 0x2a6d6,
468 0x2a700, 0x2b734,
469 0x2b740, 0x2b81d,
470 0x2f800, 0x2fa1d,
471 };
472
473 static Rune __isalphas[] = {
474 0x00aa,
475 0x00b5,
476 0x00ba,
477 0x02ec,
478 0x02ee,
479 0x0386,
480 0x038c,
481 0x0559,
482 0x06d5,
483 0x06ff,
484 0x0710,
485 0x07b1,
486 0x07fa,
487 0x081a,
488 0x0824,
489 0x0828,
490 0x08a0,
491 0x093d,
492 0x0950,
493 0x09b2,
494 0x09bd,
495 0x09ce,
496 0x0a5e,
497 0x0abd,
498 0x0ad0,
499 0x0b3d,
500 0x0b71,
501 0x0b83,
502 0x0b9c,
503 0x0bd0,
504 0x0c3d,
505 0x0cbd,
506 0x0cde,
507 0x0d3d,
508 0x0d4e,
509 0x0dbd,
510 0x0e84,
511 0x0e8a,
512 0x0e8d,
513 0x0ea5,
514 0x0ea7,
515 0x0ebd,
516 0x0ec6,
517 0x0f00,
518 0x103f,
519 0x1061,
520 0x108e,
521 0x10c7,
522 0x10cd,
523 0x1258,
524 0x12c0,
525 0x17d7,
526 0x17dc,
527 0x18aa,
528 0x1aa7,
529 0x1f59,
530 0x1f5b,
531 0x1f5d,
532 0x1fbe,
533 0x2071,
534 0x207f,
535 0x2102,
536 0x2107,
537 0x2115,
538 0x2124,
539 0x2126,
540 0x2128,
541 0x214e,
542 0x2d27,
543 0x2d2d,
544 0x2d6f,
545 0x2e2f,
546 0xa8fb,
547 0xa9cf,
548 0xaa7a,
549 0xaab1,
550 0xaac0,
551 0xaac2,
552 0xfb1d,
553 0xfb3e,
554 0x10808,
555 0x1083c,
556 0x10a00,
557 0x16f50,
558 0x1d4a2,
559 0x1d4bb,
560 0x1d546,
561 0x1ee24,
562 0x1ee27,
563 0x1ee39,
564 0x1ee3b,
565 0x1ee42,
566 0x1ee47,
567 0x1ee49,
568 0x1ee4b,
569 0x1ee54,
570 0x1ee57,
571 0x1ee59,
572 0x1ee5b,
573 0x1ee5d,
574 0x1ee5f,
575 0x1ee64,
576 0x1ee7e,
577 };
578
579 int
isalpharune(Rune c)580 isalpharune(Rune c)
581 {
582 Rune *p;
583
584 p = _runebsearch(c, __isalphar, nelem(__isalphar)/2, 2);
585 if(p && c >= p[0] && c <= p[1])
586 return 1;
587 p = _runebsearch(c, __isalphas, nelem(__isalphas), 1);
588 if(p && c == p[0])
589 return 1;
590 return 0;
591 }
592
593 static Rune __isupperr[] = {
594 0x0041, 0x005a,
595 0x00c0, 0x00d6,
596 0x00d8, 0x00de,
597 0x0178, 0x0179,
598 0x0181, 0x0182,
599 0x0186, 0x0187,
600 0x0189, 0x018b,
601 0x018e, 0x0191,
602 0x0193, 0x0194,
603 0x0196, 0x0198,
604 0x019c, 0x019d,
605 0x019f, 0x01a0,
606 0x01a6, 0x01a7,
607 0x01ae, 0x01af,
608 0x01b1, 0x01b3,
609 0x01b7, 0x01b8,
610 0x01f6, 0x01f8,
611 0x023a, 0x023b,
612 0x023d, 0x023e,
613 0x0243, 0x0246,
614 0x0388, 0x038a,
615 0x038e, 0x038f,
616 0x0391, 0x03a1,
617 0x03a3, 0x03ab,
618 0x03d2, 0x03d4,
619 0x03f9, 0x03fa,
620 0x03fd, 0x042f,
621 0x04c0, 0x04c1,
622 0x0531, 0x0556,
623 0x10a0, 0x10c5,
624 0x1f08, 0x1f0f,
625 0x1f18, 0x1f1d,
626 0x1f28, 0x1f2f,
627 0x1f38, 0x1f3f,
628 0x1f48, 0x1f4d,
629 0x1f68, 0x1f6f,
630 0x1f88, 0x1f8f,
631 0x1f98, 0x1f9f,
632 0x1fa8, 0x1faf,
633 0x1fb8, 0x1fbc,
634 0x1fc8, 0x1fcc,
635 0x1fd8, 0x1fdb,
636 0x1fe8, 0x1fec,
637 0x1ff8, 0x1ffc,
638 0x210b, 0x210d,
639 0x2110, 0x2112,
640 0x2119, 0x211d,
641 0x212a, 0x212d,
642 0x2130, 0x2133,
643 0x213e, 0x213f,
644 0x2160, 0x216f,
645 0x24b6, 0x24cf,
646 0x2c00, 0x2c2e,
647 0x2c62, 0x2c64,
648 0x2c6d, 0x2c70,
649 0x2c7e, 0x2c80,
650 0xa77d, 0xa77e,
651 0xff21, 0xff3a,
652 0x10400, 0x10427,
653 0x1d400, 0x1d419,
654 0x1d434, 0x1d44d,
655 0x1d468, 0x1d481,
656 0x1d49e, 0x1d49f,
657 0x1d4a5, 0x1d4a6,
658 0x1d4a9, 0x1d4ac,
659 0x1d4ae, 0x1d4b5,
660 0x1d4d0, 0x1d4e9,
661 0x1d504, 0x1d505,
662 0x1d507, 0x1d50a,
663 0x1d50d, 0x1d514,
664 0x1d516, 0x1d51c,
665 0x1d538, 0x1d539,
666 0x1d53b, 0x1d53e,
667 0x1d540, 0x1d544,
668 0x1d54a, 0x1d550,
669 0x1d56c, 0x1d585,
670 0x1d5a0, 0x1d5b9,
671 0x1d5d4, 0x1d5ed,
672 0x1d608, 0x1d621,
673 0x1d63c, 0x1d655,
674 0x1d670, 0x1d689,
675 0x1d6a8, 0x1d6c0,
676 0x1d6e2, 0x1d6fa,
677 0x1d71c, 0x1d734,
678 0x1d756, 0x1d76e,
679 0x1d790, 0x1d7a8,
680 };
681
682 static Rune __isupperp[] = {
683 0x0100, 0x0136,
684 0x0139, 0x0147,
685 0x014a, 0x0176,
686 0x017b, 0x017d,
687 0x01a2, 0x01a4,
688 0x01cd, 0x01db,
689 0x01de, 0x01ee,
690 0x01fa, 0x0232,
691 0x0248, 0x024e,
692 0x0370, 0x0372,
693 0x03d8, 0x03ee,
694 0x0460, 0x0480,
695 0x048a, 0x04be,
696 0x04c3, 0x04cd,
697 0x04d0, 0x0526,
698 0x1e00, 0x1e94,
699 0x1e9e, 0x1efe,
700 0x1f59, 0x1f5f,
701 0x2124, 0x2128,
702 0x2c67, 0x2c6b,
703 0x2c82, 0x2ce2,
704 0x2ceb, 0x2ced,
705 0xa640, 0xa66c,
706 0xa680, 0xa696,
707 0xa722, 0xa72e,
708 0xa732, 0xa76e,
709 0xa779, 0xa77b,
710 0xa780, 0xa786,
711 0xa78b, 0xa78d,
712 0xa790, 0xa792,
713 0xa7a0, 0xa7aa,
714 };
715
716 static Rune __isuppers[] = {
717 0x0184,
718 0x01a9,
719 0x01ac,
720 0x01b5,
721 0x01bc,
722 0x01c4,
723 0x01c7,
724 0x01ca,
725 0x01f1,
726 0x01f4,
727 0x0241,
728 0x0376,
729 0x0386,
730 0x038c,
731 0x03cf,
732 0x03f4,
733 0x03f7,
734 0x10c7,
735 0x10cd,
736 0x2102,
737 0x2107,
738 0x2115,
739 0x2145,
740 0x2183,
741 0x2c60,
742 0x2c72,
743 0x2c75,
744 0x2cf2,
745 0x1d49c,
746 0x1d4a2,
747 0x1d546,
748 0x1d7ca,
749 };
750
751 int
isupperrune(Rune c)752 isupperrune(Rune c)
753 {
754 Rune *p;
755
756 p = _runebsearch(c, __isupperr, nelem(__isupperr)/2, 2);
757 if(p && c >= p[0] && c <= p[1])
758 return 1;
759 p = _runebsearch(c, __isupperp, nelem(__isupperp)/2, 2);
760 if(p && c >= p[0] && c <= p[1] && !((c - p[0]) & 1))
761 return 1;
762 p = _runebsearch(c, __isuppers, nelem(__isuppers), 1);
763 if(p && c == p[0])
764 return 1;
765 return 0;
766 }
767
768 static Rune __islowerr[] = {
769 0x0061, 0x007a,
770 0x00df, 0x00f6,
771 0x00f8, 0x00ff,
772 0x0137, 0x0138,
773 0x0148, 0x0149,
774 0x017e, 0x0180,
775 0x018c, 0x018d,
776 0x0199, 0x019b,
777 0x01aa, 0x01ab,
778 0x01b9, 0x01ba,
779 0x01bd, 0x01bf,
780 0x01dc, 0x01dd,
781 0x01ef, 0x01f0,
782 0x0233, 0x0239,
783 0x023f, 0x0240,
784 0x024f, 0x0293,
785 0x0295, 0x02af,
786 0x037b, 0x037d,
787 0x03ac, 0x03ce,
788 0x03d0, 0x03d1,
789 0x03d5, 0x03d7,
790 0x03ef, 0x03f3,
791 0x03fb, 0x03fc,
792 0x0430, 0x045f,
793 0x04ce, 0x04cf,
794 0x0561, 0x0587,
795 0x1d00, 0x1d2b,
796 0x1d6b, 0x1d77,
797 0x1d79, 0x1d9a,
798 0x1e95, 0x1e9d,
799 0x1eff, 0x1f07,
800 0x1f10, 0x1f15,
801 0x1f20, 0x1f27,
802 0x1f30, 0x1f37,
803 0x1f40, 0x1f45,
804 0x1f50, 0x1f57,
805 0x1f60, 0x1f67,
806 0x1f70, 0x1f7d,
807 0x1f80, 0x1f87,
808 0x1f90, 0x1f97,
809 0x1fa0, 0x1fa7,
810 0x1fb0, 0x1fb4,
811 0x1fb6, 0x1fb7,
812 0x1fc2, 0x1fc4,
813 0x1fc6, 0x1fc7,
814 0x1fd0, 0x1fd3,
815 0x1fd6, 0x1fd7,
816 0x1fe0, 0x1fe7,
817 0x1ff2, 0x1ff4,
818 0x1ff6, 0x1ff7,
819 0x210e, 0x210f,
820 0x213c, 0x213d,
821 0x2146, 0x2149,
822 0x2170, 0x217f,
823 0x24d0, 0x24e9,
824 0x2c30, 0x2c5e,
825 0x2c65, 0x2c66,
826 0x2c73, 0x2c74,
827 0x2c76, 0x2c7b,
828 0x2ce3, 0x2ce4,
829 0x2d00, 0x2d25,
830 0xa72f, 0xa731,
831 0xa771, 0xa778,
832 0xfb00, 0xfb06,
833 0xfb13, 0xfb17,
834 0xff41, 0xff5a,
835 0x10428, 0x1044f,
836 0x1d41a, 0x1d433,
837 0x1d44e, 0x1d454,
838 0x1d456, 0x1d467,
839 0x1d482, 0x1d49b,
840 0x1d4b6, 0x1d4b9,
841 0x1d4bd, 0x1d4c3,
842 0x1d4c5, 0x1d4cf,
843 0x1d4ea, 0x1d503,
844 0x1d51e, 0x1d537,
845 0x1d552, 0x1d56b,
846 0x1d586, 0x1d59f,
847 0x1d5ba, 0x1d5d3,
848 0x1d5ee, 0x1d607,
849 0x1d622, 0x1d63b,
850 0x1d656, 0x1d66f,
851 0x1d68a, 0x1d6a5,
852 0x1d6c2, 0x1d6da,
853 0x1d6dc, 0x1d6e1,
854 0x1d6fc, 0x1d714,
855 0x1d716, 0x1d71b,
856 0x1d736, 0x1d74e,
857 0x1d750, 0x1d755,
858 0x1d770, 0x1d788,
859 0x1d78a, 0x1d78f,
860 0x1d7aa, 0x1d7c2,
861 0x1d7c4, 0x1d7c9,
862 };
863
864 static Rune __islowerp[] = {
865 0x0101, 0x0135,
866 0x013a, 0x0146,
867 0x014b, 0x0177,
868 0x017a, 0x017c,
869 0x0183, 0x0185,
870 0x01a1, 0x01a5,
871 0x01b4, 0x01b6,
872 0x01cc, 0x01da,
873 0x01df, 0x01ed,
874 0x01f3, 0x01f5,
875 0x01f9, 0x0231,
876 0x0247, 0x024d,
877 0x0371, 0x0373,
878 0x03d9, 0x03ed,
879 0x0461, 0x0481,
880 0x048b, 0x04bf,
881 0x04c2, 0x04cc,
882 0x04d1, 0x0527,
883 0x1e01, 0x1e93,
884 0x1e9f, 0x1efd,
885 0x2c68, 0x2c6c,
886 0x2c81, 0x2ce1,
887 0x2cec, 0x2cee,
888 0xa641, 0xa66d,
889 0xa681, 0xa697,
890 0xa723, 0xa72d,
891 0xa733, 0xa76f,
892 0xa77a, 0xa77c,
893 0xa77f, 0xa787,
894 0xa78c, 0xa78e,
895 0xa791, 0xa793,
896 0xa7a1, 0xa7a9,
897 };
898
899 static Rune __islowers[] = {
900 0x00b5,
901 0x0188,
902 0x0192,
903 0x0195,
904 0x019e,
905 0x01a8,
906 0x01ad,
907 0x01b0,
908 0x01c6,
909 0x01c9,
910 0x023c,
911 0x0242,
912 0x0377,
913 0x0390,
914 0x03f5,
915 0x03f8,
916 0x1fbe,
917 0x210a,
918 0x2113,
919 0x212f,
920 0x2134,
921 0x2139,
922 0x214e,
923 0x2184,
924 0x2c61,
925 0x2c71,
926 0x2cf3,
927 0x2d27,
928 0x2d2d,
929 0xa7fa,
930 0x1d4bb,
931 0x1d7cb,
932 };
933
934 int
islowerrune(Rune c)935 islowerrune(Rune c)
936 {
937 Rune *p;
938
939 p = _runebsearch(c, __islowerr, nelem(__islowerr)/2, 2);
940 if(p && c >= p[0] && c <= p[1])
941 return 1;
942 p = _runebsearch(c, __islowerp, nelem(__islowerp)/2, 2);
943 if(p && c >= p[0] && c <= p[1] && !((c - p[0]) & 1))
944 return 1;
945 p = _runebsearch(c, __islowers, nelem(__islowers), 1);
946 if(p && c == p[0])
947 return 1;
948 return 0;
949 }
950
951 static Rune __istitler[] = {
952 0x0041, 0x005a,
953 0x00c0, 0x00d6,
954 0x00d8, 0x00de,
955 0x0178, 0x0179,
956 0x0181, 0x0182,
957 0x0186, 0x0187,
958 0x0189, 0x018b,
959 0x018e, 0x0191,
960 0x0193, 0x0194,
961 0x0196, 0x0198,
962 0x019c, 0x019d,
963 0x019f, 0x01a0,
964 0x01a6, 0x01a7,
965 0x01ae, 0x01af,
966 0x01b1, 0x01b3,
967 0x01b7, 0x01b8,
968 0x01f6, 0x01f8,
969 0x023a, 0x023b,
970 0x023d, 0x023e,
971 0x0243, 0x0246,
972 0x0388, 0x038a,
973 0x038e, 0x038f,
974 0x0391, 0x03a1,
975 0x03a3, 0x03ab,
976 0x03f9, 0x03fa,
977 0x03fd, 0x042f,
978 0x04c0, 0x04c1,
979 0x0531, 0x0556,
980 0x10a0, 0x10c5,
981 0x1f08, 0x1f0f,
982 0x1f18, 0x1f1d,
983 0x1f28, 0x1f2f,
984 0x1f38, 0x1f3f,
985 0x1f48, 0x1f4d,
986 0x1f68, 0x1f6f,
987 0x1f88, 0x1f8f,
988 0x1f98, 0x1f9f,
989 0x1fa8, 0x1faf,
990 0x1fb8, 0x1fbc,
991 0x1fc8, 0x1fcc,
992 0x1fd8, 0x1fdb,
993 0x1fe8, 0x1fec,
994 0x1ff8, 0x1ffc,
995 0x2160, 0x216f,
996 0x24b6, 0x24cf,
997 0x2c00, 0x2c2e,
998 0x2c62, 0x2c64,
999 0x2c6d, 0x2c70,
1000 0x2c7e, 0x2c80,
1001 0xa77d, 0xa77e,
1002 0xff21, 0xff3a,
1003 0x10400, 0x10427,
1004 };
1005
1006 static Rune __istitlep[] = {
1007 0x0100, 0x012e,
1008 0x0132, 0x0136,
1009 0x0139, 0x0147,
1010 0x014a, 0x0176,
1011 0x017b, 0x017d,
1012 0x01a2, 0x01a4,
1013 0x01cb, 0x01db,
1014 0x01de, 0x01ee,
1015 0x01f2, 0x01f4,
1016 0x01fa, 0x0232,
1017 0x0248, 0x024e,
1018 0x0370, 0x0372,
1019 0x03d8, 0x03ee,
1020 0x0460, 0x0480,
1021 0x048a, 0x04be,
1022 0x04c3, 0x04cd,
1023 0x04d0, 0x0526,
1024 0x1e00, 0x1e94,
1025 0x1ea0, 0x1efe,
1026 0x1f59, 0x1f5f,
1027 0x2c67, 0x2c6b,
1028 0x2c82, 0x2ce2,
1029 0x2ceb, 0x2ced,
1030 0xa640, 0xa66c,
1031 0xa680, 0xa696,
1032 0xa722, 0xa72e,
1033 0xa732, 0xa76e,
1034 0xa779, 0xa77b,
1035 0xa780, 0xa786,
1036 0xa78b, 0xa78d,
1037 0xa790, 0xa792,
1038 0xa7a0, 0xa7aa,
1039 };
1040
1041 static Rune __istitles[] = {
1042 0x0184,
1043 0x01a9,
1044 0x01ac,
1045 0x01b5,
1046 0x01bc,
1047 0x01c5,
1048 0x01c8,
1049 0x0241,
1050 0x0376,
1051 0x0386,
1052 0x038c,
1053 0x03cf,
1054 0x03f7,
1055 0x10c7,
1056 0x10cd,
1057 0x2132,
1058 0x2183,
1059 0x2c60,
1060 0x2c72,
1061 0x2c75,
1062 0x2cf2,
1063 };
1064
1065 int
istitlerune(Rune c)1066 istitlerune(Rune c)
1067 {
1068 Rune *p;
1069
1070 p = _runebsearch(c, __istitler, nelem(__istitler)/2, 2);
1071 if(p && c >= p[0] && c <= p[1])
1072 return 1;
1073 p = _runebsearch(c, __istitlep, nelem(__istitlep)/2, 2);
1074 if(p && c >= p[0] && c <= p[1] && !((c - p[0]) & 1))
1075 return 1;
1076 p = _runebsearch(c, __istitles, nelem(__istitles), 1);
1077 if(p && c == p[0])
1078 return 1;
1079 return 0;
1080 }
1081
1082 static Rune __toupperr[] = {
1083 0x0061, 0x007a, 1048544,
1084 0x00e0, 0x00f6, 1048544,
1085 0x00f8, 0x00fe, 1048544,
1086 0x023f, 0x0240, 1059391,
1087 0x0256, 0x0257, 1048371,
1088 0x028a, 0x028b, 1048359,
1089 0x037b, 0x037d, 1048706,
1090 0x03ad, 0x03af, 1048539,
1091 0x03b1, 0x03c1, 1048544,
1092 0x03c3, 0x03cb, 1048544,
1093 0x03cd, 0x03ce, 1048513,
1094 0x0430, 0x044f, 1048544,
1095 0x0450, 0x045f, 1048496,
1096 0x0561, 0x0586, 1048528,
1097 0x1f00, 0x1f07, 1048584,
1098 0x1f10, 0x1f15, 1048584,
1099 0x1f20, 0x1f27, 1048584,
1100 0x1f30, 0x1f37, 1048584,
1101 0x1f40, 0x1f45, 1048584,
1102 0x1f60, 0x1f67, 1048584,
1103 0x1f70, 0x1f71, 1048650,
1104 0x1f72, 0x1f75, 1048662,
1105 0x1f76, 0x1f77, 1048676,
1106 0x1f78, 0x1f79, 1048704,
1107 0x1f7a, 0x1f7b, 1048688,
1108 0x1f7c, 0x1f7d, 1048702,
1109 0x1f80, 0x1f87, 1048584,
1110 0x1f90, 0x1f97, 1048584,
1111 0x1fa0, 0x1fa7, 1048584,
1112 0x1fb0, 0x1fb1, 1048584,
1113 0x1fd0, 0x1fd1, 1048584,
1114 0x1fe0, 0x1fe1, 1048584,
1115 0x2170, 0x217f, 1048560,
1116 0x24d0, 0x24e9, 1048550,
1117 0x2c30, 0x2c5e, 1048528,
1118 0x2d00, 0x2d25, 1041312,
1119 0xff41, 0xff5a, 1048544,
1120 0x10428, 0x1044f, 1048536,
1121 };
1122
1123 static Rune __toupperp[] = {
1124 0x0101, 0x012f, 1048575,
1125 0x0133, 0x0137, 1048575,
1126 0x013a, 0x0148, 1048575,
1127 0x014b, 0x0177, 1048575,
1128 0x017a, 0x017e, 1048575,
1129 0x0183, 0x0185, 1048575,
1130 0x01a1, 0x01a5, 1048575,
1131 0x01b4, 0x01b6, 1048575,
1132 0x01ce, 0x01dc, 1048575,
1133 0x01df, 0x01ef, 1048575,
1134 0x01f9, 0x021f, 1048575,
1135 0x0223, 0x0233, 1048575,
1136 0x0247, 0x024f, 1048575,
1137 0x0371, 0x0373, 1048575,
1138 0x03d9, 0x03ef, 1048575,
1139 0x0461, 0x0481, 1048575,
1140 0x048b, 0x04bf, 1048575,
1141 0x04c2, 0x04ce, 1048575,
1142 0x04d1, 0x0527, 1048575,
1143 0x1e01, 0x1e95, 1048575,
1144 0x1ea1, 0x1eff, 1048575,
1145 0x1f51, 0x1f57, 1048584,
1146 0x2c68, 0x2c6c, 1048575,
1147 0x2c81, 0x2ce3, 1048575,
1148 0x2cec, 0x2cee, 1048575,
1149 0xa641, 0xa66d, 1048575,
1150 0xa681, 0xa697, 1048575,
1151 0xa723, 0xa72f, 1048575,
1152 0xa733, 0xa76f, 1048575,
1153 0xa77a, 0xa77c, 1048575,
1154 0xa77f, 0xa787, 1048575,
1155 0xa791, 0xa793, 1048575,
1156 0xa7a1, 0xa7a9, 1048575,
1157 };
1158
1159 static Rune __touppers[] = {
1160 0x00b5, 1049319,
1161 0x00ff, 1048697,
1162 0x0131, 1048344,
1163 0x017f, 1048276,
1164 0x0180, 1048771,
1165 0x0188, 1048575,
1166 0x018c, 1048575,
1167 0x0192, 1048575,
1168 0x0195, 1048673,
1169 0x0199, 1048575,
1170 0x019a, 1048739,
1171 0x019e, 1048706,
1172 0x01a8, 1048575,
1173 0x01ad, 1048575,
1174 0x01b0, 1048575,
1175 0x01b9, 1048575,
1176 0x01bd, 1048575,
1177 0x01bf, 1048632,
1178 0x01c5, 1048575,
1179 0x01c6, 1048574,
1180 0x01c8, 1048575,
1181 0x01c9, 1048574,
1182 0x01cb, 1048575,
1183 0x01cc, 1048574,
1184 0x01dd, 1048497,
1185 0x01f2, 1048575,
1186 0x01f3, 1048574,
1187 0x01f5, 1048575,
1188 0x023c, 1048575,
1189 0x0242, 1048575,
1190 0x0250, 1059359,
1191 0x0251, 1059356,
1192 0x0252, 1059358,
1193 0x0253, 1048366,
1194 0x0254, 1048370,
1195 0x0259, 1048374,
1196 0x025b, 1048373,
1197 0x0260, 1048371,
1198 0x0263, 1048369,
1199 0x0265, 1090856,
1200 0x0266, 1090884,
1201 0x0268, 1048367,
1202 0x0269, 1048365,
1203 0x026b, 1059319,
1204 0x026f, 1048365,
1205 0x0271, 1059325,
1206 0x0272, 1048363,
1207 0x0275, 1048362,
1208 0x027d, 1059303,
1209 0x0280, 1048358,
1210 0x0283, 1048358,
1211 0x0288, 1048358,
1212 0x0289, 1048507,
1213 0x028c, 1048505,
1214 0x0292, 1048357,
1215 0x0345, 1048660,
1216 0x0377, 1048575,
1217 0x03ac, 1048538,
1218 0x03c2, 1048545,
1219 0x03cc, 1048512,
1220 0x03d0, 1048514,
1221 0x03d1, 1048519,
1222 0x03d5, 1048529,
1223 0x03d6, 1048522,
1224 0x03d7, 1048568,
1225 0x03f0, 1048490,
1226 0x03f1, 1048496,
1227 0x03f2, 1048583,
1228 0x03f5, 1048480,
1229 0x03f8, 1048575,
1230 0x03fb, 1048575,
1231 0x04cf, 1048561,
1232 0x1d79, 1083908,
1233 0x1d7d, 1052390,
1234 0x1e9b, 1048517,
1235 0x1fb3, 1048585,
1236 0x1fbe, 1041371,
1237 0x1fc3, 1048585,
1238 0x1fe5, 1048583,
1239 0x1ff3, 1048585,
1240 0x214e, 1048548,
1241 0x2184, 1048575,
1242 0x2c61, 1048575,
1243 0x2c65, 1037781,
1244 0x2c66, 1037784,
1245 0x2c73, 1048575,
1246 0x2c76, 1048575,
1247 0x2cf3, 1048575,
1248 0x2d27, 1041312,
1249 0x2d2d, 1041312,
1250 0xa78c, 1048575,
1251 };
1252
1253 Rune
toupperrune(Rune c)1254 toupperrune(Rune c)
1255 {
1256 Rune *p;
1257
1258 p = _runebsearch(c, __toupperr, nelem(__toupperr)/3, 3);
1259 if(p && c >= p[0] && c <= p[1])
1260 return c + p[2] - 1048576;
1261 p = _runebsearch(c, __toupperp, nelem(__toupperp)/3, 3);
1262 if(p && c >= p[0] && c <= p[1] && !((c - p[0]) & 1))
1263 return c + p[2] - 1048576;
1264 p = _runebsearch(c, __touppers, nelem(__touppers)/2, 2);
1265 if(p && c == p[0])
1266 return c + p[1] - 1048576;
1267 return c;
1268 }
1269
1270 static Rune __tolowerr[] = {
1271 0x0041, 0x005a, 1048608,
1272 0x00c0, 0x00d6, 1048608,
1273 0x00d8, 0x00de, 1048608,
1274 0x0189, 0x018a, 1048781,
1275 0x01b1, 0x01b2, 1048793,
1276 0x0388, 0x038a, 1048613,
1277 0x038e, 0x038f, 1048639,
1278 0x0391, 0x03a1, 1048608,
1279 0x03a3, 0x03ab, 1048608,
1280 0x03fd, 0x03ff, 1048446,
1281 0x0400, 0x040f, 1048656,
1282 0x0410, 0x042f, 1048608,
1283 0x0531, 0x0556, 1048624,
1284 0x10a0, 0x10c5, 1055840,
1285 0x1f08, 0x1f0f, 1048568,
1286 0x1f18, 0x1f1d, 1048568,
1287 0x1f28, 0x1f2f, 1048568,
1288 0x1f38, 0x1f3f, 1048568,
1289 0x1f48, 0x1f4d, 1048568,
1290 0x1f68, 0x1f6f, 1048568,
1291 0x1f88, 0x1f8f, 1048568,
1292 0x1f98, 0x1f9f, 1048568,
1293 0x1fa8, 0x1faf, 1048568,
1294 0x1fb8, 0x1fb9, 1048568,
1295 0x1fba, 0x1fbb, 1048502,
1296 0x1fc8, 0x1fcb, 1048490,
1297 0x1fd8, 0x1fd9, 1048568,
1298 0x1fda, 0x1fdb, 1048476,
1299 0x1fe8, 0x1fe9, 1048568,
1300 0x1fea, 0x1feb, 1048464,
1301 0x1ff8, 0x1ff9, 1048448,
1302 0x1ffa, 0x1ffb, 1048450,
1303 0x2160, 0x216f, 1048592,
1304 0x24b6, 0x24cf, 1048602,
1305 0x2c00, 0x2c2e, 1048624,
1306 0x2c7e, 0x2c7f, 1037761,
1307 0xff21, 0xff3a, 1048608,
1308 0x10400, 0x10427, 1048616,
1309 };
1310
1311 static Rune __tolowerp[] = {
1312 0x0100, 0x012e, 1048577,
1313 0x0132, 0x0136, 1048577,
1314 0x0139, 0x0147, 1048577,
1315 0x014a, 0x0176, 1048577,
1316 0x017b, 0x017d, 1048577,
1317 0x01a2, 0x01a4, 1048577,
1318 0x01b3, 0x01b5, 1048577,
1319 0x01cd, 0x01db, 1048577,
1320 0x01de, 0x01ee, 1048577,
1321 0x01f8, 0x021e, 1048577,
1322 0x0222, 0x0232, 1048577,
1323 0x0248, 0x024e, 1048577,
1324 0x0370, 0x0372, 1048577,
1325 0x03d8, 0x03ee, 1048577,
1326 0x0460, 0x0480, 1048577,
1327 0x048a, 0x04be, 1048577,
1328 0x04c3, 0x04cd, 1048577,
1329 0x04d0, 0x0526, 1048577,
1330 0x1e00, 0x1e94, 1048577,
1331 0x1ea0, 0x1efe, 1048577,
1332 0x1f59, 0x1f5f, 1048568,
1333 0x2c67, 0x2c6b, 1048577,
1334 0x2c80, 0x2ce2, 1048577,
1335 0x2ceb, 0x2ced, 1048577,
1336 0xa640, 0xa66c, 1048577,
1337 0xa680, 0xa696, 1048577,
1338 0xa722, 0xa72e, 1048577,
1339 0xa732, 0xa76e, 1048577,
1340 0xa779, 0xa77b, 1048577,
1341 0xa780, 0xa786, 1048577,
1342 0xa790, 0xa792, 1048577,
1343 0xa7a0, 0xa7a8, 1048577,
1344 };
1345
1346 static Rune __tolowers[] = {
1347 0x0130, 1048377,
1348 0x0178, 1048455,
1349 0x0179, 1048577,
1350 0x0181, 1048786,
1351 0x0182, 1048577,
1352 0x0184, 1048577,
1353 0x0186, 1048782,
1354 0x0187, 1048577,
1355 0x018b, 1048577,
1356 0x018e, 1048655,
1357 0x018f, 1048778,
1358 0x0190, 1048779,
1359 0x0191, 1048577,
1360 0x0193, 1048781,
1361 0x0194, 1048783,
1362 0x0196, 1048787,
1363 0x0197, 1048785,
1364 0x0198, 1048577,
1365 0x019c, 1048787,
1366 0x019d, 1048789,
1367 0x019f, 1048790,
1368 0x01a0, 1048577,
1369 0x01a6, 1048794,
1370 0x01a7, 1048577,
1371 0x01a9, 1048794,
1372 0x01ac, 1048577,
1373 0x01ae, 1048794,
1374 0x01af, 1048577,
1375 0x01b7, 1048795,
1376 0x01b8, 1048577,
1377 0x01bc, 1048577,
1378 0x01c4, 1048578,
1379 0x01c5, 1048577,
1380 0x01c7, 1048578,
1381 0x01c8, 1048577,
1382 0x01ca, 1048578,
1383 0x01cb, 1048577,
1384 0x01f1, 1048578,
1385 0x01f2, 1048577,
1386 0x01f4, 1048577,
1387 0x01f6, 1048479,
1388 0x01f7, 1048520,
1389 0x0220, 1048446,
1390 0x023a, 1059371,
1391 0x023b, 1048577,
1392 0x023d, 1048413,
1393 0x023e, 1059368,
1394 0x0241, 1048577,
1395 0x0243, 1048381,
1396 0x0244, 1048645,
1397 0x0245, 1048647,
1398 0x0246, 1048577,
1399 0x0376, 1048577,
1400 0x0386, 1048614,
1401 0x038c, 1048640,
1402 0x03cf, 1048584,
1403 0x03f4, 1048516,
1404 0x03f7, 1048577,
1405 0x03f9, 1048569,
1406 0x03fa, 1048577,
1407 0x04c0, 1048591,
1408 0x04c1, 1048577,
1409 0x10c7, 1055840,
1410 0x10cd, 1055840,
1411 0x1e9e, 1040961,
1412 0x1fbc, 1048567,
1413 0x1fcc, 1048567,
1414 0x1fec, 1048569,
1415 0x1ffc, 1048567,
1416 0x2126, 1041059,
1417 0x212a, 1040193,
1418 0x212b, 1040314,
1419 0x2132, 1048604,
1420 0x2183, 1048577,
1421 0x2c60, 1048577,
1422 0x2c62, 1037833,
1423 0x2c63, 1044762,
1424 0x2c64, 1037849,
1425 0x2c6d, 1037796,
1426 0x2c6e, 1037827,
1427 0x2c6f, 1037793,
1428 0x2c70, 1037794,
1429 0x2c72, 1048577,
1430 0x2c75, 1048577,
1431 0x2cf2, 1048577,
1432 0xa77d, 1013244,
1433 0xa77e, 1048577,
1434 0xa78b, 1048577,
1435 0xa78d, 1006296,
1436 0xa7aa, 1006268,
1437 };
1438
1439 Rune
tolowerrune(Rune c)1440 tolowerrune(Rune c)
1441 {
1442 Rune *p;
1443
1444 p = _runebsearch(c, __tolowerr, nelem(__tolowerr)/3, 3);
1445 if(p && c >= p[0] && c <= p[1])
1446 return c + p[2] - 1048576;
1447 p = _runebsearch(c, __tolowerp, nelem(__tolowerp)/3, 3);
1448 if(p && c >= p[0] && c <= p[1] && !((c - p[0]) & 1))
1449 return c + p[2] - 1048576;
1450 p = _runebsearch(c, __tolowers, nelem(__tolowers)/2, 2);
1451 if(p && c == p[0])
1452 return c + p[1] - 1048576;
1453 return c;
1454 }
1455
1456 static Rune __totitler[] = {
1457 0x0061, 0x007a, 1048544,
1458 0x00e0, 0x00f6, 1048544,
1459 0x00f8, 0x00fe, 1048544,
1460 0x023f, 0x0240, 1059391,
1461 0x0256, 0x0257, 1048371,
1462 0x028a, 0x028b, 1048359,
1463 0x037b, 0x037d, 1048706,
1464 0x03ad, 0x03af, 1048539,
1465 0x03b1, 0x03c1, 1048544,
1466 0x03c3, 0x03cb, 1048544,
1467 0x03cd, 0x03ce, 1048513,
1468 0x0430, 0x044f, 1048544,
1469 0x0450, 0x045f, 1048496,
1470 0x0561, 0x0586, 1048528,
1471 0x1f00, 0x1f07, 1048584,
1472 0x1f10, 0x1f15, 1048584,
1473 0x1f20, 0x1f27, 1048584,
1474 0x1f30, 0x1f37, 1048584,
1475 0x1f40, 0x1f45, 1048584,
1476 0x1f60, 0x1f67, 1048584,
1477 0x1f70, 0x1f71, 1048650,
1478 0x1f72, 0x1f75, 1048662,
1479 0x1f76, 0x1f77, 1048676,
1480 0x1f78, 0x1f79, 1048704,
1481 0x1f7a, 0x1f7b, 1048688,
1482 0x1f7c, 0x1f7d, 1048702,
1483 0x1f80, 0x1f87, 1048584,
1484 0x1f90, 0x1f97, 1048584,
1485 0x1fa0, 0x1fa7, 1048584,
1486 0x1fb0, 0x1fb1, 1048584,
1487 0x1fd0, 0x1fd1, 1048584,
1488 0x1fe0, 0x1fe1, 1048584,
1489 0x2170, 0x217f, 1048560,
1490 0x24d0, 0x24e9, 1048550,
1491 0x2c30, 0x2c5e, 1048528,
1492 0x2d00, 0x2d25, 1041312,
1493 0xff41, 0xff5a, 1048544,
1494 0x10428, 0x1044f, 1048536,
1495 };
1496
1497 static Rune __totitlep[] = {
1498 0x0101, 0x012f, 1048575,
1499 0x0133, 0x0137, 1048575,
1500 0x013a, 0x0148, 1048575,
1501 0x014b, 0x0177, 1048575,
1502 0x017a, 0x017e, 1048575,
1503 0x0183, 0x0185, 1048575,
1504 0x01a1, 0x01a5, 1048575,
1505 0x01b4, 0x01b6, 1048575,
1506 0x01cc, 0x01dc, 1048575,
1507 0x01df, 0x01ef, 1048575,
1508 0x01f3, 0x01f5, 1048575,
1509 0x01f9, 0x021f, 1048575,
1510 0x0223, 0x0233, 1048575,
1511 0x0247, 0x024f, 1048575,
1512 0x0371, 0x0373, 1048575,
1513 0x03d9, 0x03ef, 1048575,
1514 0x0461, 0x0481, 1048575,
1515 0x048b, 0x04bf, 1048575,
1516 0x04c2, 0x04ce, 1048575,
1517 0x04d1, 0x0527, 1048575,
1518 0x1e01, 0x1e95, 1048575,
1519 0x1ea1, 0x1eff, 1048575,
1520 0x1f51, 0x1f57, 1048584,
1521 0x2c68, 0x2c6c, 1048575,
1522 0x2c81, 0x2ce3, 1048575,
1523 0x2cec, 0x2cee, 1048575,
1524 0xa641, 0xa66d, 1048575,
1525 0xa681, 0xa697, 1048575,
1526 0xa723, 0xa72f, 1048575,
1527 0xa733, 0xa76f, 1048575,
1528 0xa77a, 0xa77c, 1048575,
1529 0xa77f, 0xa787, 1048575,
1530 0xa791, 0xa793, 1048575,
1531 0xa7a1, 0xa7a9, 1048575,
1532 };
1533
1534 static Rune __totitles[] = {
1535 0x00b5, 1049319,
1536 0x00ff, 1048697,
1537 0x0131, 1048344,
1538 0x017f, 1048276,
1539 0x0180, 1048771,
1540 0x0188, 1048575,
1541 0x018c, 1048575,
1542 0x0192, 1048575,
1543 0x0195, 1048673,
1544 0x0199, 1048575,
1545 0x019a, 1048739,
1546 0x019e, 1048706,
1547 0x01a8, 1048575,
1548 0x01ad, 1048575,
1549 0x01b0, 1048575,
1550 0x01b9, 1048575,
1551 0x01bd, 1048575,
1552 0x01bf, 1048632,
1553 0x01c4, 1048577,
1554 0x01c6, 1048575,
1555 0x01c7, 1048577,
1556 0x01c9, 1048575,
1557 0x01ca, 1048577,
1558 0x01dd, 1048497,
1559 0x01f1, 1048577,
1560 0x023c, 1048575,
1561 0x0242, 1048575,
1562 0x0250, 1059359,
1563 0x0251, 1059356,
1564 0x0252, 1059358,
1565 0x0253, 1048366,
1566 0x0254, 1048370,
1567 0x0259, 1048374,
1568 0x025b, 1048373,
1569 0x0260, 1048371,
1570 0x0263, 1048369,
1571 0x0265, 1090856,
1572 0x0266, 1090884,
1573 0x0268, 1048367,
1574 0x0269, 1048365,
1575 0x026b, 1059319,
1576 0x026f, 1048365,
1577 0x0271, 1059325,
1578 0x0272, 1048363,
1579 0x0275, 1048362,
1580 0x027d, 1059303,
1581 0x0280, 1048358,
1582 0x0283, 1048358,
1583 0x0288, 1048358,
1584 0x0289, 1048507,
1585 0x028c, 1048505,
1586 0x0292, 1048357,
1587 0x0345, 1048660,
1588 0x0377, 1048575,
1589 0x03ac, 1048538,
1590 0x03c2, 1048545,
1591 0x03cc, 1048512,
1592 0x03d0, 1048514,
1593 0x03d1, 1048519,
1594 0x03d5, 1048529,
1595 0x03d6, 1048522,
1596 0x03d7, 1048568,
1597 0x03f0, 1048490,
1598 0x03f1, 1048496,
1599 0x03f2, 1048583,
1600 0x03f5, 1048480,
1601 0x03f8, 1048575,
1602 0x03fb, 1048575,
1603 0x04cf, 1048561,
1604 0x1d79, 1083908,
1605 0x1d7d, 1052390,
1606 0x1e9b, 1048517,
1607 0x1fb3, 1048585,
1608 0x1fbe, 1041371,
1609 0x1fc3, 1048585,
1610 0x1fe5, 1048583,
1611 0x1ff3, 1048585,
1612 0x214e, 1048548,
1613 0x2184, 1048575,
1614 0x2c61, 1048575,
1615 0x2c65, 1037781,
1616 0x2c66, 1037784,
1617 0x2c73, 1048575,
1618 0x2c76, 1048575,
1619 0x2cf3, 1048575,
1620 0x2d27, 1041312,
1621 0x2d2d, 1041312,
1622 0xa78c, 1048575,
1623 };
1624
1625 Rune
totitlerune(Rune c)1626 totitlerune(Rune c)
1627 {
1628 Rune *p;
1629
1630 p = _runebsearch(c, __totitler, nelem(__totitler)/3, 3);
1631 if(p && c >= p[0] && c <= p[1])
1632 return c + p[2] - 1048576;
1633 p = _runebsearch(c, __totitlep, nelem(__totitlep)/3, 3);
1634 if(p && c >= p[0] && c <= p[1] && !((c - p[0]) & 1))
1635 return c + p[2] - 1048576;
1636 p = _runebsearch(c, __totitles, nelem(__totitles)/2, 2);
1637 if(p && c == p[0])
1638 return c + p[1] - 1048576;
1639 return c;
1640 }
1641
1642