~james-page/ubuntu/trusty/gccgo-go/trunk

« back to all changes in this revision

Viewing changes to src/lib9/utf/runetypebody-6.2.0.h

  • Committer: James Page
  • Date: 2014-01-22 11:10:56 UTC
  • Revision ID: james.page@canonical.com-20140122111056-hfyxm1ozm7if9t3f
Tags: upstream-1.2
ImportĀ upstreamĀ versionĀ 1.2

Show diffs side-by-side

added added

removed removed

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