Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature_tlsv12/sys/src/ape/lib/utf/runetype.c – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/*
2
 * The authors of this software are Rob Pike and Ken Thompson.
3
 *              Copyright (c) 2002 by Lucent Technologies.
4
 * Permission to use, copy, modify, and distribute this software for any
5
 * purpose without fee is hereby granted, provided that this entire notice
6
 * is included in all copies of any software which is or includes a copy
7
 * or modification of this software and in all copies of the supporting
8
 * documentation for such software.
9
 * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
10
 * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
11
 * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
12
 * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
13
 */
14
#include <stdarg.h>
15
#include <string.h>
16
#include "utf.h"
17
#include "utfdef.h"
18
 
19
/*
20
 * alpha ranges -
21
 *	only covers ranges not in lower||upper
22
 */
23
static
24
Rune	__alpha2[] =
25
{
26
	0x00d8,	0x00f6,	/* Ø - ö */
27
	0x00f8,	0x01f5,	/* ø - ǵ */
28
	0x0250,	0x02a8,	/* ɐ - ʨ */
29
	0x038e,	0x03a1,	/* Ύ - Ρ */
30
	0x03a3,	0x03ce,	/* Σ - ώ */
31
	0x03d0,	0x03d6,	/* ϐ - ϖ */
32
	0x03e2,	0x03f3,	/* Ϣ - ϳ */
33
	0x0490,	0x04c4,	/* Ґ - ӄ */
34
	0x0561,	0x0587,	/* ա - և */
35
	0x05d0,	0x05ea,	/* א - ת */
36
	0x05f0,	0x05f2,	/* װ - ײ */
37
	0x0621,	0x063a,	/* ء - غ */
38
	0x0640,	0x064a,	/* ـ - ي */
39
	0x0671,	0x06b7,	/* ٱ - ڷ */
40
	0x06ba,	0x06be,	/* ں - ھ */
41
	0x06c0,	0x06ce,	/* ۀ - ێ */
42
	0x06d0,	0x06d3,	/* ې - ۓ */
43
	0x0905,	0x0939,	/* अ - ह */
44
	0x0958,	0x0961,	/* क़ - ॡ */
45
	0x0985,	0x098c,	/* অ - ঌ */
46
	0x098f,	0x0990,	/* এ - ঐ */
47
	0x0993,	0x09a8,	/* ও - ন */
48
	0x09aa,	0x09b0,	/* প - র */
49
	0x09b6,	0x09b9,	/* শ - হ */
50
	0x09dc,	0x09dd,	/* ড় - ঢ় */
51
	0x09df,	0x09e1,	/* য় - ৡ */
52
	0x09f0,	0x09f1,	/* ৰ - ৱ */
53
	0x0a05,	0x0a0a,	/* ਅ - ਊ */
54
	0x0a0f,	0x0a10,	/* ਏ - ਐ */
55
	0x0a13,	0x0a28,	/* ਓ - ਨ */
56
	0x0a2a,	0x0a30,	/* ਪ - ਰ */
57
	0x0a32,	0x0a33,	/* ਲ - ਲ਼ */
58
	0x0a35,	0x0a36,	/* ਵ - ਸ਼ */
59
	0x0a38,	0x0a39,	/* ਸ - ਹ */
60
	0x0a59,	0x0a5c,	/* ਖ਼ - ੜ */
61
	0x0a85,	0x0a8b,	/* અ - ઋ */
62
	0x0a8f,	0x0a91,	/* એ - ઑ */
63
	0x0a93,	0x0aa8,	/* ઓ - ન */
64
	0x0aaa,	0x0ab0,	/* પ - ર */
65
	0x0ab2,	0x0ab3,	/* લ - ળ */
66
	0x0ab5,	0x0ab9,	/* વ - હ */
67
	0x0b05,	0x0b0c,	/* ଅ - ଌ */
68
	0x0b0f,	0x0b10,	/* ଏ - ଐ */
69
	0x0b13,	0x0b28,	/* ଓ - ନ */
70
	0x0b2a,	0x0b30,	/* ପ - ର */
71
	0x0b32,	0x0b33,	/* ଲ - ଳ */
72
	0x0b36,	0x0b39,	/* ଶ - ହ */
73
	0x0b5c,	0x0b5d,	/* ଡ଼ - ଢ଼ */
74
	0x0b5f,	0x0b61,	/* ୟ - ୡ */
75
	0x0b85,	0x0b8a,	/* அ - ஊ */
76
	0x0b8e,	0x0b90,	/* எ - ஐ */
77
	0x0b92,	0x0b95,	/* ஒ - க */
78
	0x0b99,	0x0b9a,	/* ங - ச */
79
	0x0b9e,	0x0b9f,	/* ஞ - ட */
80
	0x0ba3,	0x0ba4,	/* ண - த */
81
	0x0ba8,	0x0baa,	/* ந - ப */
82
	0x0bae,	0x0bb5,	/* ம - வ */
83
	0x0bb7,	0x0bb9,	/* ஷ - ஹ */
84
	0x0c05,	0x0c0c,	/* అ - ఌ */
85
	0x0c0e,	0x0c10,	/* ఎ - ఐ */
86
	0x0c12,	0x0c28,	/* ఒ - న */
87
	0x0c2a,	0x0c33,	/* ప - ళ */
88
	0x0c35,	0x0c39,	/* వ - హ */
89
	0x0c60,	0x0c61,	/* ౠ - ౡ */
90
	0x0c85,	0x0c8c,	/* ಅ - ಌ */
91
	0x0c8e,	0x0c90,	/* ಎ - ಐ */
92
	0x0c92,	0x0ca8,	/* ಒ - ನ */
93
	0x0caa,	0x0cb3,	/* ಪ - ಳ */
94
	0x0cb5,	0x0cb9,	/* ವ - ಹ */
95
	0x0ce0,	0x0ce1,	/* ೠ - ೡ */
96
	0x0d05,	0x0d0c,	/* അ - ഌ */
97
	0x0d0e,	0x0d10,	/* എ - ഐ */
98
	0x0d12,	0x0d28,	/* ഒ - ന */
99
	0x0d2a,	0x0d39,	/* പ - ഹ */
100
	0x0d60,	0x0d61,	/* ൠ - ൡ */
101
	0x0e01,	0x0e30,	/* ก - ะ */
102
	0x0e32,	0x0e33,	/* า - ำ */
103
	0x0e40,	0x0e46,	/* เ - ๆ */
104
	0x0e5a,	0x0e5b,	/* ๚ - ๛ */
105
	0x0e81,	0x0e82,	/* ກ - ຂ */
106
	0x0e87,	0x0e88,	/* ງ - ຈ */
107
	0x0e94,	0x0e97,	/* ດ - ທ */
108
	0x0e99,	0x0e9f,	/* ນ - ຟ */
109
	0x0ea1,	0x0ea3,	/* ມ - ຣ */
110
	0x0eaa,	0x0eab,	/* ສ - ຫ */
111
	0x0ead,	0x0eae,	/* ອ - ຮ */
112
	0x0eb2,	0x0eb3,	/* າ - ຳ */
113
	0x0ec0,	0x0ec4,	/* ເ - ໄ */
114
	0x0edc,	0x0edd,	/* ໜ - ໝ */
115
	0x0f18,	0x0f19,	/* ༘ - ༙ */
116
	0x0f40,	0x0f47,	/* ཀ - ཇ */
117
	0x0f49,	0x0f69,	/* ཉ - ཀྵ */
118
	0x10d0,	0x10f6,	/* ა - ჶ */
119
	0x1100,	0x1159,	/* ᄀ - ᅙ */
120
	0x115f,	0x11a2,	/* ᅟ - ᆢ */
121
	0x11a8,	0x11f9,	/* ᆨ - ᇹ */
122
	0x1e00,	0x1e9b,	/* Ḁ - ẛ */
123
	0x1f50,	0x1f57,	/* ὐ - ὗ */
124
	0x1f80,	0x1fb4,	/* ᾀ - ᾴ */
125
	0x1fb6,	0x1fbc,	/* ᾶ - ᾼ */
126
	0x1fc2,	0x1fc4,	/* ῂ - ῄ */
127
	0x1fc6,	0x1fcc,	/* ῆ - ῌ */
128
	0x1fd0,	0x1fd3,	/* ῐ - ΐ */
129
	0x1fd6,	0x1fdb,	/* ῖ - Ί */
130
	0x1fe0,	0x1fec,	/* ῠ - Ῥ */
131
	0x1ff2,	0x1ff4,	/* ῲ - ῴ */
132
	0x1ff6,	0x1ffc,	/* ῶ - ῼ */
133
	0x210a,	0x2113,	/* ℊ - ℓ */
134
	0x2115,	0x211d,	/* ℕ - ℝ */
135
	0x2120,	0x2122,	/* ℠ - ™ */
136
	0x212a,	0x2131,	/* K - ℱ */
137
	0x2133,	0x2138,	/* ℳ - ℸ */
138
	0x3041,	0x3094,	/* ぁ - ゔ */
139
	0x30a1,	0x30fa,	/* ァ - ヺ */
140
	0x3105,	0x312c,	/* ㄅ - ㄬ */
141
	0x3131,	0x318e,	/* ㄱ - ㆎ */
142
	0x3192,	0x319f,	/* ㆒ - ㆟ */
143
	0x3260,	0x327b,	/* ㉠ - ㉻ */
144
	0x328a,	0x32b0,	/* ㊊ - ㊰ */
145
	0x32d0,	0x32fe,	/* ㋐ - ㋾ */
146
	0x3300,	0x3357,	/* ㌀ - ㍗ */
147
	0x3371,	0x3376,	/* ㍱ - ㍶ */
148
	0x337b,	0x3394,	/* ㍻ - ㎔ */
149
	0x3399,	0x339e,	/* ㎙ - ㎞ */
150
	0x33a9,	0x33ad,	/* ㎩ - ㎭ */
151
	0x33b0,	0x33c1,	/* ㎰ - ㏁ */
152
	0x33c3,	0x33c5,	/* ㏃ - ㏅ */
153
	0x33c7,	0x33d7,	/* ㏇ - ㏗ */
154
	0x33d9,	0x33dd,	/* ㏙ - ㏝ */
155
	0x4e00,	0x9fff,	/* 一 - 鿿 */
156
	0xac00,	0xd7a3,	/* 가 - 힣 */
157
	0xf900,	0xfb06,	/* 豈 - st */
158
	0xfb13,	0xfb17,	/* ﬓ - ﬗ */
159
	0xfb1f,	0xfb28,	/* ײַ - ﬨ */
160
	0xfb2a,	0xfb36,	/* שׁ - זּ */
161
	0xfb38,	0xfb3c,	/* טּ - לּ */
162
	0xfb40,	0xfb41,	/* נּ - סּ */
163
	0xfb43,	0xfb44,	/* ףּ - פּ */
164
	0xfb46,	0xfbb1,	/* צּ - ﮱ */
165
	0xfbd3,	0xfd3d,	/* ﯓ - ﴽ */
166
	0xfd50,	0xfd8f,	/* ﵐ - ﶏ */
167
	0xfd92,	0xfdc7,	/* ﶒ - ﷇ */
168
	0xfdf0,	0xfdf9,	/* ﷰ - ﷹ */
169
	0xfe70,	0xfe72,	/* ﹰ - ﹲ */
170
	0xfe76,	0xfefc,	/* ﹶ - ﻼ */
171
	0xff66,	0xff6f,	/* ヲ - ッ */
172
	0xff71,	0xff9d,	/* ア - ン */
173
	0xffa0,	0xffbe,	/* ᅠ - ᄒ */
174
	0xffc2,	0xffc7,	/* ᅡ - ᅦ */
175
	0xffca,	0xffcf,	/* ᅧ - ᅬ */
176
	0xffd2,	0xffd7,	/* ᅭ - ᅲ */
177
	0xffda,	0xffdc,	/* ᅳ - ᅵ */
178
};
179
 
180
/*
181
 * alpha singlets -
182
 *	only covers ranges not in lower||upper
183
 */
184
static
185
Rune	__alpha1[] =
186
{
187
	0x00aa,	/* ª */
188
	0x00b5,	/* µ */
189
	0x00ba,	/* º */
190
	0x03da,	/* Ϛ */
191
	0x03dc,	/* Ϝ */
192
	0x03de,	/* Ϟ */
193
	0x03e0,	/* Ϡ */
194
	0x06d5,	/* ە */
195
	0x09b2,	/* ল */
196
	0x0a5e,	/* ਫ਼ */
197
	0x0a8d,	/* ઍ */
198
	0x0ae0,	/* ૠ */
199
	0x0b9c,	/* ஜ */
200
	0x0cde,	/* ೞ */
201
	0x0e4f,	/* ๏ */
202
	0x0e84,	/* ຄ */
203
	0x0e8a,	/* ຊ */
204
	0x0e8d,	/* ຍ */
205
	0x0ea5,	/* ລ */
206
	0x0ea7,	/* ວ */
207
	0x0eb0,	/* ະ */
208
	0x0ebd,	/* ຽ */
209
	0x1fbe,	/* ι */
210
	0x207f,	/* ⁿ */
211
	0x20a8,	/* ₨ */
212
	0x2102,	/* ℂ */
213
	0x2107,	/* ℇ */
214
	0x2124,	/* ℤ */
215
	0x2126,	/* Ω */
216
	0x2128,	/* ℨ */
217
	0xfb3e,	/* מּ */
218
	0xfe74,	/* ﹴ */
219
};
220
 
221
/*
222
 * space ranges
223
 */
224
static
225
Rune	__space2[] =
226
{
227
	0x0009,	0x000a,	/* tab and newline */
228
	0x0020,	0x0020,	/* space */
229
	0x00a0,	0x00a0,	/*   */
230
	0x2000,	0x200b,	/*   - ​ */
231
	0x2028,	0x2029,	/* 
 - 
 */
232
	0x3000,	0x3000,	/*   */
233
	0xfeff,	0xfeff,	/*  */
234
};
235
 
236
/*
237
 * lower case ranges
238
 *	3rd col is conversion excess 500
239
 */
240
static
241
Rune	__toupper2[] =
242
{
243
	0x0061,	0x007a, 468,	/* a-z A-Z */
244
	0x00e0,	0x00f6, 468,	/* à-ö À-Ö */
245
	0x00f8,	0x00fe, 468,	/* ø-þ Ø-Þ */
246
	0x0256,	0x0257, 295,	/* ɖ-ɗ Ɖ-Ɗ */
247
	0x0258,	0x0259, 298,	/* ɘ-ə Ǝ-Ə */
248
	0x028a,	0x028b, 283,	/* ʊ-ʋ Ʊ-Ʋ */
249
	0x03ad,	0x03af, 463,	/* έ-ί Έ-Ί */
250
	0x03b1,	0x03c1, 468,	/* α-ρ Α-Ρ */
251
	0x03c3,	0x03cb, 468,	/* σ-ϋ Σ-Ϋ */
252
	0x03cd,	0x03ce, 437,	/* ύ-ώ Ύ-Ώ */
253
	0x0430,	0x044f, 468,	/* а-я А-Я */
254
	0x0451,	0x045c, 420,	/* ё-ќ Ё-Ќ */
255
	0x045e,	0x045f, 420,	/* ў-џ Ў-Џ */
256
	0x0561,	0x0586, 452,	/* ա-ֆ Ա-Ֆ */
257
	0x1f00,	0x1f07, 508,	/* ἀ-ἇ Ἀ-Ἇ */
258
	0x1f10,	0x1f15, 508,	/* ἐ-ἕ Ἐ-Ἕ */
259
	0x1f20,	0x1f27, 508,	/* ἠ-ἧ Ἠ-Ἧ */
260
	0x1f30,	0x1f37, 508,	/* ἰ-ἷ Ἰ-Ἷ */
261
	0x1f40,	0x1f45, 508,	/* ὀ-ὅ Ὀ-Ὅ */
262
	0x1f60,	0x1f67, 508,	/* ὠ-ὧ Ὠ-Ὧ */
263
	0x1f70,	0x1f71, 574,	/* ὰ-ά Ὰ-Ά */
264
	0x1f72,	0x1f75, 586,	/* ὲ-ή Ὲ-Ή */
265
	0x1f76,	0x1f77, 600,	/* ὶ-ί Ὶ-Ί */
266
	0x1f78,	0x1f79, 628,	/* ὸ-ό Ὸ-Ό */
267
	0x1f7a,	0x1f7b, 612,	/* ὺ-ύ Ὺ-Ύ */
268
	0x1f7c,	0x1f7d, 626,	/* ὼ-ώ Ὼ-Ώ */
269
	0x1f80,	0x1f87, 508,	/* ᾀ-ᾇ ᾈ-ᾏ */
270
	0x1f90,	0x1f97, 508,	/* ᾐ-ᾗ ᾘ-ᾟ */
271
	0x1fa0,	0x1fa7, 508,	/* ᾠ-ᾧ ᾨ-ᾯ */
272
	0x1fb0,	0x1fb1, 508,	/* ᾰ-ᾱ Ᾰ-Ᾱ */
273
	0x1fd0,	0x1fd1, 508,	/* ῐ-ῑ Ῐ-Ῑ */
274
	0x1fe0,	0x1fe1, 508,	/* ῠ-ῡ Ῠ-Ῡ */
275
	0x2170,	0x217f, 484,	/* ⅰ-ⅿ Ⅰ-Ⅿ */
276
	0x24d0,	0x24e9, 474,	/* ⓐ-ⓩ Ⓐ-Ⓩ */
277
	0xff41,	0xff5a, 468,	/* a-z A-Z */
278
};
279
 
280
/*
281
 * lower case singlets
282
 *	2nd col is conversion excess 500
283
 */
284
static
285
Rune	__toupper1[] =
286
{
287
	0x00ff, 621,	/* ÿ Ÿ */
288
	0x0101, 499,	/* ā Ā */
289
	0x0103, 499,	/* ă Ă */
290
	0x0105, 499,	/* ą Ą */
291
	0x0107, 499,	/* ć Ć */
292
	0x0109, 499,	/* ĉ Ĉ */
293
	0x010b, 499,	/* ċ Ċ */
294
	0x010d, 499,	/* č Č */
295
	0x010f, 499,	/* ď Ď */
296
	0x0111, 499,	/* đ Đ */
297
	0x0113, 499,	/* ē Ē */
298
	0x0115, 499,	/* ĕ Ĕ */
299
	0x0117, 499,	/* ė Ė */
300
	0x0119, 499,	/* ę Ę */
301
	0x011b, 499,	/* ě Ě */
302
	0x011d, 499,	/* ĝ Ĝ */
303
	0x011f, 499,	/* ğ Ğ */
304
	0x0121, 499,	/* ġ Ġ */
305
	0x0123, 499,	/* ģ Ģ */
306
	0x0125, 499,	/* ĥ Ĥ */
307
	0x0127, 499,	/* ħ Ħ */
308
	0x0129, 499,	/* ĩ Ĩ */
309
	0x012b, 499,	/* ī Ī */
310
	0x012d, 499,	/* ĭ Ĭ */
311
	0x012f, 499,	/* į Į */
312
	0x0131, 268,	/* ı I */
313
	0x0133, 499,	/* ij IJ */
314
	0x0135, 499,	/* ĵ Ĵ */
315
	0x0137, 499,	/* ķ Ķ */
316
	0x013a, 499,	/* ĺ Ĺ */
317
	0x013c, 499,	/* ļ Ļ */
318
	0x013e, 499,	/* ľ Ľ */
319
	0x0140, 499,	/* ŀ Ŀ */
320
	0x0142, 499,	/* ł Ł */
321
	0x0144, 499,	/* ń Ń */
322
	0x0146, 499,	/* ņ Ņ */
323
	0x0148, 499,	/* ň Ň */
324
	0x014b, 499,	/* ŋ Ŋ */
325
	0x014d, 499,	/* ō Ō */
326
	0x014f, 499,	/* ŏ Ŏ */
327
	0x0151, 499,	/* ő Ő */
328
	0x0153, 499,	/* œ Œ */
329
	0x0155, 499,	/* ŕ Ŕ */
330
	0x0157, 499,	/* ŗ Ŗ */
331
	0x0159, 499,	/* ř Ř */
332
	0x015b, 499,	/* ś Ś */
333
	0x015d, 499,	/* ŝ Ŝ */
334
	0x015f, 499,	/* ş Ş */
335
	0x0161, 499,	/* š Š */
336
	0x0163, 499,	/* ţ Ţ */
337
	0x0165, 499,	/* ť Ť */
338
	0x0167, 499,	/* ŧ Ŧ */
339
	0x0169, 499,	/* ũ Ũ */
340
	0x016b, 499,	/* ū Ū */
341
	0x016d, 499,	/* ŭ Ŭ */
342
	0x016f, 499,	/* ů Ů */
343
	0x0171, 499,	/* ű Ű */
344
	0x0173, 499,	/* ų Ų */
345
	0x0175, 499,	/* ŵ Ŵ */
346
	0x0177, 499,	/* ŷ Ŷ */
347
	0x017a, 499,	/* ź Ź */
348
	0x017c, 499,	/* ż Ż */
349
	0x017e, 499,	/* ž Ž */
350
	0x017f, 200,	/* ſ S */
351
	0x0183, 499,	/* ƃ Ƃ */
352
	0x0185, 499,	/* ƅ Ƅ */
353
	0x0188, 499,	/* ƈ Ƈ */
354
	0x018c, 499,	/* ƌ Ƌ */
355
	0x0192, 499,	/* ƒ Ƒ */
356
	0x0199, 499,	/* ƙ Ƙ */
357
	0x01a1, 499,	/* ơ Ơ */
358
	0x01a3, 499,	/* ƣ Ƣ */
359
	0x01a5, 499,	/* ƥ Ƥ */
360
	0x01a8, 499,	/* ƨ Ƨ */
361
	0x01ad, 499,	/* ƭ Ƭ */
362
	0x01b0, 499,	/* ư Ư */
363
	0x01b4, 499,	/* ƴ Ƴ */
364
	0x01b6, 499,	/* ƶ Ƶ */
365
	0x01b9, 499,	/* ƹ Ƹ */
366
	0x01bd, 499,	/* ƽ Ƽ */
367
	0x01c5, 499,	/* Dž DŽ */
368
	0x01c6, 498,	/* dž DŽ */
369
	0x01c8, 499,	/* Lj LJ */
370
	0x01c9, 498,	/* lj LJ */
371
	0x01cb, 499,	/* Nj NJ */
372
	0x01cc, 498,	/* nj NJ */
373
	0x01ce, 499,	/* ǎ Ǎ */
374
	0x01d0, 499,	/* ǐ Ǐ */
375
	0x01d2, 499,	/* ǒ Ǒ */
376
	0x01d4, 499,	/* ǔ Ǔ */
377
	0x01d6, 499,	/* ǖ Ǖ */
378
	0x01d8, 499,	/* ǘ Ǘ */
379
	0x01da, 499,	/* ǚ Ǚ */
380
	0x01dc, 499,	/* ǜ Ǜ */
381
	0x01df, 499,	/* ǟ Ǟ */
382
	0x01e1, 499,	/* ǡ Ǡ */
383
	0x01e3, 499,	/* ǣ Ǣ */
384
	0x01e5, 499,	/* ǥ Ǥ */
385
	0x01e7, 499,	/* ǧ Ǧ */
386
	0x01e9, 499,	/* ǩ Ǩ */
387
	0x01eb, 499,	/* ǫ Ǫ */
388
	0x01ed, 499,	/* ǭ Ǭ */
389
	0x01ef, 499,	/* ǯ Ǯ */
390
	0x01f2, 499,	/* Dz DZ */
391
	0x01f3, 498,	/* dz DZ */
392
	0x01f5, 499,	/* ǵ Ǵ */
393
	0x01fb, 499,	/* ǻ Ǻ */
394
	0x01fd, 499,	/* ǽ Ǽ */
395
	0x01ff, 499,	/* ǿ Ǿ */
396
	0x0201, 499,	/* ȁ Ȁ */
397
	0x0203, 499,	/* ȃ Ȃ */
398
	0x0205, 499,	/* ȅ Ȅ */
399
	0x0207, 499,	/* ȇ Ȇ */
400
	0x0209, 499,	/* ȉ Ȉ */
401
	0x020b, 499,	/* ȋ Ȋ */
402
	0x020d, 499,	/* ȍ Ȍ */
403
	0x020f, 499,	/* ȏ Ȏ */
404
	0x0211, 499,	/* ȑ Ȑ */
405
	0x0213, 499,	/* ȓ Ȓ */
406
	0x0215, 499,	/* ȕ Ȕ */
407
	0x0217, 499,	/* ȗ Ȗ */
408
	0x0253, 290,	/* ɓ Ɓ */
409
	0x0254, 294,	/* ɔ Ɔ */
410
	0x025b, 297,	/* ɛ Ɛ */
411
	0x0260, 295,	/* ɠ Ɠ */
412
	0x0263, 293,	/* ɣ Ɣ */
413
	0x0268, 291,	/* ɨ Ɨ */
414
	0x0269, 289,	/* ɩ Ɩ */
415
	0x026f, 289,	/* ɯ Ɯ */
416
	0x0272, 287,	/* ɲ Ɲ */
417
	0x0283, 282,	/* ʃ Ʃ */
418
	0x0288, 282,	/* ʈ Ʈ */
419
	0x0292, 281,	/* ʒ Ʒ */
420
	0x03ac, 462,	/* ά Ά */
421
	0x03cc, 436,	/* ό Ό */
422
	0x03d0, 438,	/* ϐ Β */
423
	0x03d1, 443,	/* ϑ Θ */
424
	0x03d5, 453,	/* ϕ Φ */
425
	0x03d6, 446,	/* ϖ Π */
426
	0x03e3, 499,	/* ϣ Ϣ */
427
	0x03e5, 499,	/* ϥ Ϥ */
428
	0x03e7, 499,	/* ϧ Ϧ */
429
	0x03e9, 499,	/* ϩ Ϩ */
430
	0x03eb, 499,	/* ϫ Ϫ */
431
	0x03ed, 499,	/* ϭ Ϭ */
432
	0x03ef, 499,	/* ϯ Ϯ */
433
	0x03f0, 414,	/* ϰ Κ */
434
	0x03f1, 420,	/* ϱ Ρ */
435
	0x0461, 499,	/* ѡ Ѡ */
436
	0x0463, 499,	/* ѣ Ѣ */
437
	0x0465, 499,	/* ѥ Ѥ */
438
	0x0467, 499,	/* ѧ Ѧ */
439
	0x0469, 499,	/* ѩ Ѩ */
440
	0x046b, 499,	/* ѫ Ѫ */
441
	0x046d, 499,	/* ѭ Ѭ */
442
	0x046f, 499,	/* ѯ Ѯ */
443
	0x0471, 499,	/* ѱ Ѱ */
444
	0x0473, 499,	/* ѳ Ѳ */
445
	0x0475, 499,	/* ѵ Ѵ */
446
	0x0477, 499,	/* ѷ Ѷ */
447
	0x0479, 499,	/* ѹ Ѹ */
448
	0x047b, 499,	/* ѻ Ѻ */
449
	0x047d, 499,	/* ѽ Ѽ */
450
	0x047f, 499,	/* ѿ Ѿ */
451
	0x0481, 499,	/* ҁ Ҁ */
452
	0x0491, 499,	/* ґ Ґ */
453
	0x0493, 499,	/* ғ Ғ */
454
	0x0495, 499,	/* ҕ Ҕ */
455
	0x0497, 499,	/* җ Җ */
456
	0x0499, 499,	/* ҙ Ҙ */
457
	0x049b, 499,	/* қ Қ */
458
	0x049d, 499,	/* ҝ Ҝ */
459
	0x049f, 499,	/* ҟ Ҟ */
460
	0x04a1, 499,	/* ҡ Ҡ */
461
	0x04a3, 499,	/* ң Ң */
462
	0x04a5, 499,	/* ҥ Ҥ */
463
	0x04a7, 499,	/* ҧ Ҧ */
464
	0x04a9, 499,	/* ҩ Ҩ */
465
	0x04ab, 499,	/* ҫ Ҫ */
466
	0x04ad, 499,	/* ҭ Ҭ */
467
	0x04af, 499,	/* ү Ү */
468
	0x04b1, 499,	/* ұ Ұ */
469
	0x04b3, 499,	/* ҳ Ҳ */
470
	0x04b5, 499,	/* ҵ Ҵ */
471
	0x04b7, 499,	/* ҷ Ҷ */
472
	0x04b9, 499,	/* ҹ Ҹ */
473
	0x04bb, 499,	/* һ Һ */
474
	0x04bd, 499,	/* ҽ Ҽ */
475
	0x04bf, 499,	/* ҿ Ҿ */
476
	0x04c2, 499,	/* ӂ Ӂ */
477
	0x04c4, 499,	/* ӄ Ӄ */
478
	0x04c8, 499,	/* ӈ Ӈ */
479
	0x04cc, 499,	/* ӌ Ӌ */
480
	0x04d1, 499,	/* ӑ Ӑ */
481
	0x04d3, 499,	/* ӓ Ӓ */
482
	0x04d5, 499,	/* ӕ Ӕ */
483
	0x04d7, 499,	/* ӗ Ӗ */
484
	0x04d9, 499,	/* ә Ә */
485
	0x04db, 499,	/* ӛ Ӛ */
486
	0x04dd, 499,	/* ӝ Ӝ */
487
	0x04df, 499,	/* ӟ Ӟ */
488
	0x04e1, 499,	/* ӡ Ӡ */
489
	0x04e3, 499,	/* ӣ Ӣ */
490
	0x04e5, 499,	/* ӥ Ӥ */
491
	0x04e7, 499,	/* ӧ Ӧ */
492
	0x04e9, 499,	/* ө Ө */
493
	0x04eb, 499,	/* ӫ Ӫ */
494
	0x04ef, 499,	/* ӯ Ӯ */
495
	0x04f1, 499,	/* ӱ Ӱ */
496
	0x04f3, 499,	/* ӳ Ӳ */
497
	0x04f5, 499,	/* ӵ Ӵ */
498
	0x04f9, 499,	/* ӹ Ӹ */
499
	0x1e01, 499,	/* ḁ Ḁ */
500
	0x1e03, 499,	/* ḃ Ḃ */
501
	0x1e05, 499,	/* ḅ Ḅ */
502
	0x1e07, 499,	/* ḇ Ḇ */
503
	0x1e09, 499,	/* ḉ Ḉ */
504
	0x1e0b, 499,	/* ḋ Ḋ */
505
	0x1e0d, 499,	/* ḍ Ḍ */
506
	0x1e0f, 499,	/* ḏ Ḏ */
507
	0x1e11, 499,	/* ḑ Ḑ */
508
	0x1e13, 499,	/* ḓ Ḓ */
509
	0x1e15, 499,	/* ḕ Ḕ */
510
	0x1e17, 499,	/* ḗ Ḗ */
511
	0x1e19, 499,	/* ḙ Ḙ */
512
	0x1e1b, 499,	/* ḛ Ḛ */
513
	0x1e1d, 499,	/* ḝ Ḝ */
514
	0x1e1f, 499,	/* ḟ Ḟ */
515
	0x1e21, 499,	/* ḡ Ḡ */
516
	0x1e23, 499,	/* ḣ Ḣ */
517
	0x1e25, 499,	/* ḥ Ḥ */
518
	0x1e27, 499,	/* ḧ Ḧ */
519
	0x1e29, 499,	/* ḩ Ḩ */
520
	0x1e2b, 499,	/* ḫ Ḫ */
521
	0x1e2d, 499,	/* ḭ Ḭ */
522
	0x1e2f, 499,	/* ḯ Ḯ */
523
	0x1e31, 499,	/* ḱ Ḱ */
524
	0x1e33, 499,	/* ḳ Ḳ */
525
	0x1e35, 499,	/* ḵ Ḵ */
526
	0x1e37, 499,	/* ḷ Ḷ */
527
	0x1e39, 499,	/* ḹ Ḹ */
528
	0x1e3b, 499,	/* ḻ Ḻ */
529
	0x1e3d, 499,	/* ḽ Ḽ */
530
	0x1e3f, 499,	/* ḿ Ḿ */
531
	0x1e41, 499,	/* ṁ Ṁ */
532
	0x1e43, 499,	/* ṃ Ṃ */
533
	0x1e45, 499,	/* ṅ Ṅ */
534
	0x1e47, 499,	/* ṇ Ṇ */
535
	0x1e49, 499,	/* ṉ Ṉ */
536
	0x1e4b, 499,	/* ṋ Ṋ */
537
	0x1e4d, 499,	/* ṍ Ṍ */
538
	0x1e4f, 499,	/* ṏ Ṏ */
539
	0x1e51, 499,	/* ṑ Ṑ */
540
	0x1e53, 499,	/* ṓ Ṓ */
541
	0x1e55, 499,	/* ṕ Ṕ */
542
	0x1e57, 499,	/* ṗ Ṗ */
543
	0x1e59, 499,	/* ṙ Ṙ */
544
	0x1e5b, 499,	/* ṛ Ṛ */
545
	0x1e5d, 499,	/* ṝ Ṝ */
546
	0x1e5f, 499,	/* ṟ Ṟ */
547
	0x1e61, 499,	/* ṡ Ṡ */
548
	0x1e63, 499,	/* ṣ Ṣ */
549
	0x1e65, 499,	/* ṥ Ṥ */
550
	0x1e67, 499,	/* ṧ Ṧ */
551
	0x1e69, 499,	/* ṩ Ṩ */
552
	0x1e6b, 499,	/* ṫ Ṫ */
553
	0x1e6d, 499,	/* ṭ Ṭ */
554
	0x1e6f, 499,	/* ṯ Ṯ */
555
	0x1e71, 499,	/* ṱ Ṱ */
556
	0x1e73, 499,	/* ṳ Ṳ */
557
	0x1e75, 499,	/* ṵ Ṵ */
558
	0x1e77, 499,	/* ṷ Ṷ */
559
	0x1e79, 499,	/* ṹ Ṹ */
560
	0x1e7b, 499,	/* ṻ Ṻ */
561
	0x1e7d, 499,	/* ṽ Ṽ */
562
	0x1e7f, 499,	/* ṿ Ṿ */
563
	0x1e81, 499,	/* ẁ Ẁ */
564
	0x1e83, 499,	/* ẃ Ẃ */
565
	0x1e85, 499,	/* ẅ Ẅ */
566
	0x1e87, 499,	/* ẇ Ẇ */
567
	0x1e89, 499,	/* ẉ Ẉ */
568
	0x1e8b, 499,	/* ẋ Ẋ */
569
	0x1e8d, 499,	/* ẍ Ẍ */
570
	0x1e8f, 499,	/* ẏ Ẏ */
571
	0x1e91, 499,	/* ẑ Ẑ */
572
	0x1e93, 499,	/* ẓ Ẓ */
573
	0x1e95, 499,	/* ẕ Ẕ */
574
	0x1ea1, 499,	/* ạ Ạ */
575
	0x1ea3, 499,	/* ả Ả */
576
	0x1ea5, 499,	/* ấ Ấ */
577
	0x1ea7, 499,	/* ầ Ầ */
578
	0x1ea9, 499,	/* ẩ Ẩ */
579
	0x1eab, 499,	/* ẫ Ẫ */
580
	0x1ead, 499,	/* ậ Ậ */
581
	0x1eaf, 499,	/* ắ Ắ */
582
	0x1eb1, 499,	/* ằ Ằ */
583
	0x1eb3, 499,	/* ẳ Ẳ */
584
	0x1eb5, 499,	/* ẵ Ẵ */
585
	0x1eb7, 499,	/* ặ Ặ */
586
	0x1eb9, 499,	/* ẹ Ẹ */
587
	0x1ebb, 499,	/* ẻ Ẻ */
588
	0x1ebd, 499,	/* ẽ Ẽ */
589
	0x1ebf, 499,	/* ế Ế */
590
	0x1ec1, 499,	/* ề Ề */
591
	0x1ec3, 499,	/* ể Ể */
592
	0x1ec5, 499,	/* ễ Ễ */
593
	0x1ec7, 499,	/* ệ Ệ */
594
	0x1ec9, 499,	/* ỉ Ỉ */
595
	0x1ecb, 499,	/* ị Ị */
596
	0x1ecd, 499,	/* ọ Ọ */
597
	0x1ecf, 499,	/* ỏ Ỏ */
598
	0x1ed1, 499,	/* ố Ố */
599
	0x1ed3, 499,	/* ồ Ồ */
600
	0x1ed5, 499,	/* ổ Ổ */
601
	0x1ed7, 499,	/* ỗ Ỗ */
602
	0x1ed9, 499,	/* ộ Ộ */
603
	0x1edb, 499,	/* ớ Ớ */
604
	0x1edd, 499,	/* ờ Ờ */
605
	0x1edf, 499,	/* ở Ở */
606
	0x1ee1, 499,	/* ỡ Ỡ */
607
	0x1ee3, 499,	/* ợ Ợ */
608
	0x1ee5, 499,	/* ụ Ụ */
609
	0x1ee7, 499,	/* ủ Ủ */
610
	0x1ee9, 499,	/* ứ Ứ */
611
	0x1eeb, 499,	/* ừ Ừ */
612
	0x1eed, 499,	/* ử Ử */
613
	0x1eef, 499,	/* ữ Ữ */
614
	0x1ef1, 499,	/* ự Ự */
615
	0x1ef3, 499,	/* ỳ Ỳ */
616
	0x1ef5, 499,	/* ỵ Ỵ */
617
	0x1ef7, 499,	/* ỷ Ỷ */
618
	0x1ef9, 499,	/* ỹ Ỹ */
619
	0x1f51, 508,	/* ὑ Ὑ */
620
	0x1f53, 508,	/* ὓ Ὓ */
621
	0x1f55, 508,	/* ὕ Ὕ */
622
	0x1f57, 508,	/* ὗ Ὗ */
623
	0x1fb3, 509,	/* ᾳ ᾼ */
624
	0x1fc3, 509,	/* ῃ ῌ */
625
	0x1fe5, 507,	/* ῥ Ῥ */
626
	0x1ff3, 509,	/* ῳ ῼ */
627
};
628
 
629
/*
630
 * upper case ranges
631
 *	3rd col is conversion excess 500
632
 */
633
static
634
Rune	__tolower2[] =
635
{
636
	0x0041,	0x005a, 532,	/* A-Z a-z */
637
	0x00c0,	0x00d6, 532,	/* À-Ö à-ö */
638
	0x00d8,	0x00de, 532,	/* Ø-Þ ø-þ */
639
	0x0189,	0x018a, 705,	/* Ɖ-Ɗ ɖ-ɗ */
640
	0x018e,	0x018f, 702,	/* Ǝ-Ə ɘ-ə */
641
	0x01b1,	0x01b2, 717,	/* Ʊ-Ʋ ʊ-ʋ */
642
	0x0388,	0x038a, 537,	/* Έ-Ί έ-ί */
643
	0x038e,	0x038f, 563,	/* Ύ-Ώ ύ-ώ */
644
	0x0391,	0x03a1, 532,	/* Α-Ρ α-ρ */
645
	0x03a3,	0x03ab, 532,	/* Σ-Ϋ σ-ϋ */
646
	0x0401,	0x040c, 580,	/* Ё-Ќ ё-ќ */
647
	0x040e,	0x040f, 580,	/* Ў-Џ ў-џ */
648
	0x0410,	0x042f, 532,	/* А-Я а-я */
649
	0x0531,	0x0556, 548,	/* Ա-Ֆ ա-ֆ */
650
	0x10a0,	0x10c5, 548,	/* Ⴀ-Ⴥ ა-ჵ */
651
	0x1f08,	0x1f0f, 492,	/* Ἀ-Ἇ ἀ-ἇ */
652
	0x1f18,	0x1f1d, 492,	/* Ἐ-Ἕ ἐ-ἕ */
653
	0x1f28,	0x1f2f, 492,	/* Ἠ-Ἧ ἠ-ἧ */
654
	0x1f38,	0x1f3f, 492,	/* Ἰ-Ἷ ἰ-ἷ */
655
	0x1f48,	0x1f4d, 492,	/* Ὀ-Ὅ ὀ-ὅ */
656
	0x1f68,	0x1f6f, 492,	/* Ὠ-Ὧ ὠ-ὧ */
657
	0x1f88,	0x1f8f, 492,	/* ᾈ-ᾏ ᾀ-ᾇ */
658
	0x1f98,	0x1f9f, 492,	/* ᾘ-ᾟ ᾐ-ᾗ */
659
	0x1fa8,	0x1faf, 492,	/* ᾨ-ᾯ ᾠ-ᾧ */
660
	0x1fb8,	0x1fb9, 492,	/* Ᾰ-Ᾱ ᾰ-ᾱ */
661
	0x1fba,	0x1fbb, 426,	/* Ὰ-Ά ὰ-ά */
662
	0x1fc8,	0x1fcb, 414,	/* Ὲ-Ή ὲ-ή */
663
	0x1fd8,	0x1fd9, 492,	/* Ῐ-Ῑ ῐ-ῑ */
664
	0x1fda,	0x1fdb, 400,	/* Ὶ-Ί ὶ-ί */
665
	0x1fe8,	0x1fe9, 492,	/* Ῠ-Ῡ ῠ-ῡ */
666
	0x1fea,	0x1feb, 388,	/* Ὺ-Ύ ὺ-ύ */
667
	0x1ff8,	0x1ff9, 372,	/* Ὸ-Ό ὸ-ό */
668
	0x1ffa,	0x1ffb, 374,	/* Ὼ-Ώ ὼ-ώ */
669
	0x2160,	0x216f, 516,	/* Ⅰ-Ⅿ ⅰ-ⅿ */
670
	0x24b6,	0x24cf, 526,	/* Ⓐ-Ⓩ ⓐ-ⓩ */
671
	0xff21,	0xff3a, 532,	/* A-Z a-z */
672
};
673
 
674
/*
675
 * upper case singlets
676
 *	2nd col is conversion excess 500
677
 */
678
static
679
Rune	__tolower1[] =
680
{
681
	0x0100, 501,	/* Ā ā */
682
	0x0102, 501,	/* Ă ă */
683
	0x0104, 501,	/* Ą ą */
684
	0x0106, 501,	/* Ć ć */
685
	0x0108, 501,	/* Ĉ ĉ */
686
	0x010a, 501,	/* Ċ ċ */
687
	0x010c, 501,	/* Č č */
688
	0x010e, 501,	/* Ď ď */
689
	0x0110, 501,	/* Đ đ */
690
	0x0112, 501,	/* Ē ē */
691
	0x0114, 501,	/* Ĕ ĕ */
692
	0x0116, 501,	/* Ė ė */
693
	0x0118, 501,	/* Ę ę */
694
	0x011a, 501,	/* Ě ě */
695
	0x011c, 501,	/* Ĝ ĝ */
696
	0x011e, 501,	/* Ğ ğ */
697
	0x0120, 501,	/* Ġ ġ */
698
	0x0122, 501,	/* Ģ ģ */
699
	0x0124, 501,	/* Ĥ ĥ */
700
	0x0126, 501,	/* Ħ ħ */
701
	0x0128, 501,	/* Ĩ ĩ */
702
	0x012a, 501,	/* Ī ī */
703
	0x012c, 501,	/* Ĭ ĭ */
704
	0x012e, 501,	/* Į į */
705
	0x0130, 301,	/* İ i */
706
	0x0132, 501,	/* IJ ij */
707
	0x0134, 501,	/* Ĵ ĵ */
708
	0x0136, 501,	/* Ķ ķ */
709
	0x0139, 501,	/* Ĺ ĺ */
710
	0x013b, 501,	/* Ļ ļ */
711
	0x013d, 501,	/* Ľ ľ */
712
	0x013f, 501,	/* Ŀ ŀ */
713
	0x0141, 501,	/* Ł ł */
714
	0x0143, 501,	/* Ń ń */
715
	0x0145, 501,	/* Ņ ņ */
716
	0x0147, 501,	/* Ň ň */
717
	0x014a, 501,	/* Ŋ ŋ */
718
	0x014c, 501,	/* Ō ō */
719
	0x014e, 501,	/* Ŏ ŏ */
720
	0x0150, 501,	/* Ő ő */
721
	0x0152, 501,	/* Œ œ */
722
	0x0154, 501,	/* Ŕ ŕ */
723
	0x0156, 501,	/* Ŗ ŗ */
724
	0x0158, 501,	/* Ř ř */
725
	0x015a, 501,	/* Ś ś */
726
	0x015c, 501,	/* Ŝ ŝ */
727
	0x015e, 501,	/* Ş ş */
728
	0x0160, 501,	/* Š š */
729
	0x0162, 501,	/* Ţ ţ */
730
	0x0164, 501,	/* Ť ť */
731
	0x0166, 501,	/* Ŧ ŧ */
732
	0x0168, 501,	/* Ũ ũ */
733
	0x016a, 501,	/* Ū ū */
734
	0x016c, 501,	/* Ŭ ŭ */
735
	0x016e, 501,	/* Ů ů */
736
	0x0170, 501,	/* Ű ű */
737
	0x0172, 501,	/* Ų ų */
738
	0x0174, 501,	/* Ŵ ŵ */
739
	0x0176, 501,	/* Ŷ ŷ */
740
	0x0178, 379,	/* Ÿ ÿ */
741
	0x0179, 501,	/* Ź ź */
742
	0x017b, 501,	/* Ż ż */
743
	0x017d, 501,	/* Ž ž */
744
	0x0181, 710,	/* Ɓ ɓ */
745
	0x0182, 501,	/* Ƃ ƃ */
746
	0x0184, 501,	/* Ƅ ƅ */
747
	0x0186, 706,	/* Ɔ ɔ */
748
	0x0187, 501,	/* Ƈ ƈ */
749
	0x018b, 501,	/* Ƌ ƌ */
750
	0x0190, 703,	/* Ɛ ɛ */
751
	0x0191, 501,	/* Ƒ ƒ */
752
	0x0193, 705,	/* Ɠ ɠ */
753
	0x0194, 707,	/* Ɣ ɣ */
754
	0x0196, 711,	/* Ɩ ɩ */
755
	0x0197, 709,	/* Ɨ ɨ */
756
	0x0198, 501,	/* Ƙ ƙ */
757
	0x019c, 711,	/* Ɯ ɯ */
758
	0x019d, 713,	/* Ɲ ɲ */
759
	0x01a0, 501,	/* Ơ ơ */
760
	0x01a2, 501,	/* Ƣ ƣ */
761
	0x01a4, 501,	/* Ƥ ƥ */
762
	0x01a7, 501,	/* Ƨ ƨ */
763
	0x01a9, 718,	/* Ʃ ʃ */
764
	0x01ac, 501,	/* Ƭ ƭ */
765
	0x01ae, 718,	/* Ʈ ʈ */
766
	0x01af, 501,	/* Ư ư */
767
	0x01b3, 501,	/* Ƴ ƴ */
768
	0x01b5, 501,	/* Ƶ ƶ */
769
	0x01b7, 719,	/* Ʒ ʒ */
770
	0x01b8, 501,	/* Ƹ ƹ */
771
	0x01bc, 501,	/* Ƽ ƽ */
772
	0x01c4, 502,	/* DŽ dž */
773
	0x01c5, 501,	/* Dž dž */
774
	0x01c7, 502,	/* LJ lj */
775
	0x01c8, 501,	/* Lj lj */
776
	0x01ca, 502,	/* NJ nj */
777
	0x01cb, 501,	/* Nj nj */
778
	0x01cd, 501,	/* Ǎ ǎ */
779
	0x01cf, 501,	/* Ǐ ǐ */
780
	0x01d1, 501,	/* Ǒ ǒ */
781
	0x01d3, 501,	/* Ǔ ǔ */
782
	0x01d5, 501,	/* Ǖ ǖ */
783
	0x01d7, 501,	/* Ǘ ǘ */
784
	0x01d9, 501,	/* Ǚ ǚ */
785
	0x01db, 501,	/* Ǜ ǜ */
786
	0x01de, 501,	/* Ǟ ǟ */
787
	0x01e0, 501,	/* Ǡ ǡ */
788
	0x01e2, 501,	/* Ǣ ǣ */
789
	0x01e4, 501,	/* Ǥ ǥ */
790
	0x01e6, 501,	/* Ǧ ǧ */
791
	0x01e8, 501,	/* Ǩ ǩ */
792
	0x01ea, 501,	/* Ǫ ǫ */
793
	0x01ec, 501,	/* Ǭ ǭ */
794
	0x01ee, 501,	/* Ǯ ǯ */
795
	0x01f1, 502,	/* DZ dz */
796
	0x01f2, 501,	/* Dz dz */
797
	0x01f4, 501,	/* Ǵ ǵ */
798
	0x01fa, 501,	/* Ǻ ǻ */
799
	0x01fc, 501,	/* Ǽ ǽ */
800
	0x01fe, 501,	/* Ǿ ǿ */
801
	0x0200, 501,	/* Ȁ ȁ */
802
	0x0202, 501,	/* Ȃ ȃ */
803
	0x0204, 501,	/* Ȅ ȅ */
804
	0x0206, 501,	/* Ȇ ȇ */
805
	0x0208, 501,	/* Ȉ ȉ */
806
	0x020a, 501,	/* Ȋ ȋ */
807
	0x020c, 501,	/* Ȍ ȍ */
808
	0x020e, 501,	/* Ȏ ȏ */
809
	0x0210, 501,	/* Ȑ ȑ */
810
	0x0212, 501,	/* Ȓ ȓ */
811
	0x0214, 501,	/* Ȕ ȕ */
812
	0x0216, 501,	/* Ȗ ȗ */
813
	0x0386, 538,	/* Ά ά */
814
	0x038c, 564,	/* Ό ό */
815
	0x03e2, 501,	/* Ϣ ϣ */
816
	0x03e4, 501,	/* Ϥ ϥ */
817
	0x03e6, 501,	/* Ϧ ϧ */
818
	0x03e8, 501,	/* Ϩ ϩ */
819
	0x03ea, 501,	/* Ϫ ϫ */
820
	0x03ec, 501,	/* Ϭ ϭ */
821
	0x03ee, 501,	/* Ϯ ϯ */
822
	0x0460, 501,	/* Ѡ ѡ */
823
	0x0462, 501,	/* Ѣ ѣ */
824
	0x0464, 501,	/* Ѥ ѥ */
825
	0x0466, 501,	/* Ѧ ѧ */
826
	0x0468, 501,	/* Ѩ ѩ */
827
	0x046a, 501,	/* Ѫ ѫ */
828
	0x046c, 501,	/* Ѭ ѭ */
829
	0x046e, 501,	/* Ѯ ѯ */
830
	0x0470, 501,	/* Ѱ ѱ */
831
	0x0472, 501,	/* Ѳ ѳ */
832
	0x0474, 501,	/* Ѵ ѵ */
833
	0x0476, 501,	/* Ѷ ѷ */
834
	0x0478, 501,	/* Ѹ ѹ */
835
	0x047a, 501,	/* Ѻ ѻ */
836
	0x047c, 501,	/* Ѽ ѽ */
837
	0x047e, 501,	/* Ѿ ѿ */
838
	0x0480, 501,	/* Ҁ ҁ */
839
	0x0490, 501,	/* Ґ ґ */
840
	0x0492, 501,	/* Ғ ғ */
841
	0x0494, 501,	/* Ҕ ҕ */
842
	0x0496, 501,	/* Җ җ */
843
	0x0498, 501,	/* Ҙ ҙ */
844
	0x049a, 501,	/* Қ қ */
845
	0x049c, 501,	/* Ҝ ҝ */
846
	0x049e, 501,	/* Ҟ ҟ */
847
	0x04a0, 501,	/* Ҡ ҡ */
848
	0x04a2, 501,	/* Ң ң */
849
	0x04a4, 501,	/* Ҥ ҥ */
850
	0x04a6, 501,	/* Ҧ ҧ */
851
	0x04a8, 501,	/* Ҩ ҩ */
852
	0x04aa, 501,	/* Ҫ ҫ */
853
	0x04ac, 501,	/* Ҭ ҭ */
854
	0x04ae, 501,	/* Ү ү */
855
	0x04b0, 501,	/* Ұ ұ */
856
	0x04b2, 501,	/* Ҳ ҳ */
857
	0x04b4, 501,	/* Ҵ ҵ */
858
	0x04b6, 501,	/* Ҷ ҷ */
859
	0x04b8, 501,	/* Ҹ ҹ */
860
	0x04ba, 501,	/* Һ һ */
861
	0x04bc, 501,	/* Ҽ ҽ */
862
	0x04be, 501,	/* Ҿ ҿ */
863
	0x04c1, 501,	/* Ӂ ӂ */
864
	0x04c3, 501,	/* Ӄ ӄ */
865
	0x04c7, 501,	/* Ӈ ӈ */
866
	0x04cb, 501,	/* Ӌ ӌ */
867
	0x04d0, 501,	/* Ӑ ӑ */
868
	0x04d2, 501,	/* Ӓ ӓ */
869
	0x04d4, 501,	/* Ӕ ӕ */
870
	0x04d6, 501,	/* Ӗ ӗ */
871
	0x04d8, 501,	/* Ә ә */
872
	0x04da, 501,	/* Ӛ ӛ */
873
	0x04dc, 501,	/* Ӝ ӝ */
874
	0x04de, 501,	/* Ӟ ӟ */
875
	0x04e0, 501,	/* Ӡ ӡ */
876
	0x04e2, 501,	/* Ӣ ӣ */
877
	0x04e4, 501,	/* Ӥ ӥ */
878
	0x04e6, 501,	/* Ӧ ӧ */
879
	0x04e8, 501,	/* Ө ө */
880
	0x04ea, 501,	/* Ӫ ӫ */
881
	0x04ee, 501,	/* Ӯ ӯ */
882
	0x04f0, 501,	/* Ӱ ӱ */
883
	0x04f2, 501,	/* Ӳ ӳ */
884
	0x04f4, 501,	/* Ӵ ӵ */
885
	0x04f8, 501,	/* Ӹ ӹ */
886
	0x1e00, 501,	/* Ḁ ḁ */
887
	0x1e02, 501,	/* Ḃ ḃ */
888
	0x1e04, 501,	/* Ḅ ḅ */
889
	0x1e06, 501,	/* Ḇ ḇ */
890
	0x1e08, 501,	/* Ḉ ḉ */
891
	0x1e0a, 501,	/* Ḋ ḋ */
892
	0x1e0c, 501,	/* Ḍ ḍ */
893
	0x1e0e, 501,	/* Ḏ ḏ */
894
	0x1e10, 501,	/* Ḑ ḑ */
895
	0x1e12, 501,	/* Ḓ ḓ */
896
	0x1e14, 501,	/* Ḕ ḕ */
897
	0x1e16, 501,	/* Ḗ ḗ */
898
	0x1e18, 501,	/* Ḙ ḙ */
899
	0x1e1a, 501,	/* Ḛ ḛ */
900
	0x1e1c, 501,	/* Ḝ ḝ */
901
	0x1e1e, 501,	/* Ḟ ḟ */
902
	0x1e20, 501,	/* Ḡ ḡ */
903
	0x1e22, 501,	/* Ḣ ḣ */
904
	0x1e24, 501,	/* Ḥ ḥ */
905
	0x1e26, 501,	/* Ḧ ḧ */
906
	0x1e28, 501,	/* Ḩ ḩ */
907
	0x1e2a, 501,	/* Ḫ ḫ */
908
	0x1e2c, 501,	/* Ḭ ḭ */
909
	0x1e2e, 501,	/* Ḯ ḯ */
910
	0x1e30, 501,	/* Ḱ ḱ */
911
	0x1e32, 501,	/* Ḳ ḳ */
912
	0x1e34, 501,	/* Ḵ ḵ */
913
	0x1e36, 501,	/* Ḷ ḷ */
914
	0x1e38, 501,	/* Ḹ ḹ */
915
	0x1e3a, 501,	/* Ḻ ḻ */
916
	0x1e3c, 501,	/* Ḽ ḽ */
917
	0x1e3e, 501,	/* Ḿ ḿ */
918
	0x1e40, 501,	/* Ṁ ṁ */
919
	0x1e42, 501,	/* Ṃ ṃ */
920
	0x1e44, 501,	/* Ṅ ṅ */
921
	0x1e46, 501,	/* Ṇ ṇ */
922
	0x1e48, 501,	/* Ṉ ṉ */
923
	0x1e4a, 501,	/* Ṋ ṋ */
924
	0x1e4c, 501,	/* Ṍ ṍ */
925
	0x1e4e, 501,	/* Ṏ ṏ */
926
	0x1e50, 501,	/* Ṑ ṑ */
927
	0x1e52, 501,	/* Ṓ ṓ */
928
	0x1e54, 501,	/* Ṕ ṕ */
929
	0x1e56, 501,	/* Ṗ ṗ */
930
	0x1e58, 501,	/* Ṙ ṙ */
931
	0x1e5a, 501,	/* Ṛ ṛ */
932
	0x1e5c, 501,	/* Ṝ ṝ */
933
	0x1e5e, 501,	/* Ṟ ṟ */
934
	0x1e60, 501,	/* Ṡ ṡ */
935
	0x1e62, 501,	/* Ṣ ṣ */
936
	0x1e64, 501,	/* Ṥ ṥ */
937
	0x1e66, 501,	/* Ṧ ṧ */
938
	0x1e68, 501,	/* Ṩ ṩ */
939
	0x1e6a, 501,	/* Ṫ ṫ */
940
	0x1e6c, 501,	/* Ṭ ṭ */
941
	0x1e6e, 501,	/* Ṯ ṯ */
942
	0x1e70, 501,	/* Ṱ ṱ */
943
	0x1e72, 501,	/* Ṳ ṳ */
944
	0x1e74, 501,	/* Ṵ ṵ */
945
	0x1e76, 501,	/* Ṷ ṷ */
946
	0x1e78, 501,	/* Ṹ ṹ */
947
	0x1e7a, 501,	/* Ṻ ṻ */
948
	0x1e7c, 501,	/* Ṽ ṽ */
949
	0x1e7e, 501,	/* Ṿ ṿ */
950
	0x1e80, 501,	/* Ẁ ẁ */
951
	0x1e82, 501,	/* Ẃ ẃ */
952
	0x1e84, 501,	/* Ẅ ẅ */
953
	0x1e86, 501,	/* Ẇ ẇ */
954
	0x1e88, 501,	/* Ẉ ẉ */
955
	0x1e8a, 501,	/* Ẋ ẋ */
956
	0x1e8c, 501,	/* Ẍ ẍ */
957
	0x1e8e, 501,	/* Ẏ ẏ */
958
	0x1e90, 501,	/* Ẑ ẑ */
959
	0x1e92, 501,	/* Ẓ ẓ */
960
	0x1e94, 501,	/* Ẕ ẕ */
961
	0x1ea0, 501,	/* Ạ ạ */
962
	0x1ea2, 501,	/* Ả ả */
963
	0x1ea4, 501,	/* Ấ ấ */
964
	0x1ea6, 501,	/* Ầ ầ */
965
	0x1ea8, 501,	/* Ẩ ẩ */
966
	0x1eaa, 501,	/* Ẫ ẫ */
967
	0x1eac, 501,	/* Ậ ậ */
968
	0x1eae, 501,	/* Ắ ắ */
969
	0x1eb0, 501,	/* Ằ ằ */
970
	0x1eb2, 501,	/* Ẳ ẳ */
971
	0x1eb4, 501,	/* Ẵ ẵ */
972
	0x1eb6, 501,	/* Ặ ặ */
973
	0x1eb8, 501,	/* Ẹ ẹ */
974
	0x1eba, 501,	/* Ẻ ẻ */
975
	0x1ebc, 501,	/* Ẽ ẽ */
976
	0x1ebe, 501,	/* Ế ế */
977
	0x1ec0, 501,	/* Ề ề */
978
	0x1ec2, 501,	/* Ể ể */
979
	0x1ec4, 501,	/* Ễ ễ */
980
	0x1ec6, 501,	/* Ệ ệ */
981
	0x1ec8, 501,	/* Ỉ ỉ */
982
	0x1eca, 501,	/* Ị ị */
983
	0x1ecc, 501,	/* Ọ ọ */
984
	0x1ece, 501,	/* Ỏ ỏ */
985
	0x1ed0, 501,	/* Ố ố */
986
	0x1ed2, 501,	/* Ồ ồ */
987
	0x1ed4, 501,	/* Ổ ổ */
988
	0x1ed6, 501,	/* Ỗ ỗ */
989
	0x1ed8, 501,	/* Ộ ộ */
990
	0x1eda, 501,	/* Ớ ớ */
991
	0x1edc, 501,	/* Ờ ờ */
992
	0x1ede, 501,	/* Ở ở */
993
	0x1ee0, 501,	/* Ỡ ỡ */
994
	0x1ee2, 501,	/* Ợ ợ */
995
	0x1ee4, 501,	/* Ụ ụ */
996
	0x1ee6, 501,	/* Ủ ủ */
997
	0x1ee8, 501,	/* Ứ ứ */
998
	0x1eea, 501,	/* Ừ ừ */
999
	0x1eec, 501,	/* Ử ử */
1000
	0x1eee, 501,	/* Ữ ữ */
1001
	0x1ef0, 501,	/* Ự ự */
1002
	0x1ef2, 501,	/* Ỳ ỳ */
1003
	0x1ef4, 501,	/* Ỵ ỵ */
1004
	0x1ef6, 501,	/* Ỷ ỷ */
1005
	0x1ef8, 501,	/* Ỹ ỹ */
1006
	0x1f59, 492,	/* Ὑ ὑ */
1007
	0x1f5b, 492,	/* Ὓ ὓ */
1008
	0x1f5d, 492,	/* Ὕ ὕ */
1009
	0x1f5f, 492,	/* Ὗ ὗ */
1010
	0x1fbc, 491,	/* ᾼ ᾳ */
1011
	0x1fcc, 491,	/* ῌ ῃ */
1012
	0x1fec, 493,	/* Ῥ ῥ */
1013
	0x1ffc, 491,	/* ῼ ῳ */
1014
};
1015
 
1016
/*
1017
 * title characters are those between
1018
 * upper and lower case. ie DZ Dz dz
1019
 */
1020
static
1021
Rune	__totitle1[] =
1022
{
1023
	0x01c4, 501,	/* DŽ Dž */
1024
	0x01c6, 499,	/* dž Dž */
1025
	0x01c7, 501,	/* LJ Lj */
1026
	0x01c9, 499,	/* lj Lj */
1027
	0x01ca, 501,	/* NJ Nj */
1028
	0x01cc, 499,	/* nj Nj */
1029
	0x01f1, 501,	/* DZ Dz */
1030
	0x01f3, 499,	/* dz Dz */
1031
};
1032
 
1033
static
1034
Rune*
1035
bsearch(Rune c, Rune *t, int n, int ne)
1036
{
1037
	Rune *p;
1038
	int m;
1039
 
1040
	while(n > 1) {
1041
		m = n/2;
1042
		p = t + m*ne;
1043
		if(c >= p[0]) {
1044
			t = p;
1045
			n = n-m;
1046
		} else
1047
			n = m;
1048
	}
1049
	if(n && c >= t[0])
1050
		return t;
1051
	return 0;
1052
}
1053
 
1054
Rune
1055
tolowerrune(Rune c)
1056
{
1057
	Rune *p;
1058
 
1059
	p = bsearch(c, __tolower2, nelem(__tolower2)/3, 3);
1060
	if(p && c >= p[0] && c <= p[1])
1061
		return c + p[2] - 500;
1062
	p = bsearch(c, __tolower1, nelem(__tolower1)/2, 2);
1063
	if(p && c == p[0])
1064
		return c + p[1] - 500;
1065
	return c;
1066
}
1067
 
1068
Rune
1069
toupperrune(Rune c)
1070
{
1071
	Rune *p;
1072
 
1073
	p = bsearch(c, __toupper2, nelem(__toupper2)/3, 3);
1074
	if(p && c >= p[0] && c <= p[1])
1075
		return c + p[2] - 500;
1076
	p = bsearch(c, __toupper1, nelem(__toupper1)/2, 2);
1077
	if(p && c == p[0])
1078
		return c + p[1] - 500;
1079
	return c;
1080
}
1081
 
1082
Rune
1083
totitlerune(Rune c)
1084
{
1085
	Rune *p;
1086
 
1087
	p = bsearch(c, __totitle1, nelem(__totitle1)/2, 2);
1088
	if(p && c == p[0])
1089
		return c + p[1] - 500;
1090
	return c;
1091
}
1092
 
1093
int
1094
islowerrune(Rune c)
1095
{
1096
	Rune *p;
1097
 
1098
	p = bsearch(c, __toupper2, nelem(__toupper2)/3, 3);
1099
	if(p && c >= p[0] && c <= p[1])
1100
		return 1;
1101
	p = bsearch(c, __toupper1, nelem(__toupper1)/2, 2);
1102
	if(p && c == p[0])
1103
		return 1;
1104
	return 0;
1105
}
1106
 
1107
int
1108
isupperrune(Rune c)
1109
{
1110
	Rune *p;
1111
 
1112
	p = bsearch(c, __tolower2, nelem(__tolower2)/3, 3);
1113
	if(p && c >= p[0] && c <= p[1])
1114
		return 1;
1115
	p = bsearch(c, __tolower1, nelem(__tolower1)/2, 2);
1116
	if(p && c == p[0])
1117
		return 1;
1118
	return 0;
1119
}
1120
 
1121
int
1122
isalpharune(Rune c)
1123
{
1124
	Rune *p;
1125
 
1126
	if(isupperrune(c) || islowerrune(c))
1127
		return 1;
1128
	p = bsearch(c, __alpha2, nelem(__alpha2)/2, 2);
1129
	if(p && c >= p[0] && c <= p[1])
1130
		return 1;
1131
	p = bsearch(c, __alpha1, nelem(__alpha1), 1);
1132
	if(p && c == p[0])
1133
		return 1;
1134
	return 0;
1135
}
1136
 
1137
int
1138
istitlerune(Rune c)
1139
{
1140
	return isupperrune(c) && islowerrune(c);
1141
}
1142
 
1143
int
1144
isspacerune(Rune c)
1145
{
1146
	Rune *p;
1147
 
1148
	p = bsearch(c, __space2, nelem(__space2)/2, 2);
1149
	if(p && c >= p[0] && c <= p[1])
1150
		return 1;
1151
	return 0;
1152
}