Ruby  1.9.3p551(2014-11-13revision48407)
unicode.c
Go to the documentation of this file.
1 /**********************************************************************
2  unicode.c - Oniguruma (regular expression library)
3 **********************************************************************/
4 /*-
5  * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  * notice, this list of conditions and the following disclaimer in the
15  * documentation and/or other materials provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  */
29 
30 #include "regint.h"
31 
32 #define ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(code,ctype) \
33  ((EncUNICODE_ISO_8859_1_CtypeTable[code] & CTYPE_TO_BIT(ctype)) != 0)
34 #if 0
35 #define ONIGENC_IS_UNICODE_ISO_8859_1_BIT_CTYPE(code,cbit) \
36  ((EncUNICODE_ISO_8859_1_CtypeTable[code] & (cbit)) != 0)
37 #endif
38 
39 static const unsigned short EncUNICODE_ISO_8859_1_CtypeTable[256] = {
40  0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008,
41  0x4008, 0x428c, 0x4289, 0x4288, 0x4288, 0x4288, 0x4008, 0x4008,
42  0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008,
43  0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008,
44  0x4284, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0,
45  0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0,
46  0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0,
47  0x78b0, 0x78b0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0,
48  0x41a0, 0x7ca2, 0x7ca2, 0x7ca2, 0x7ca2, 0x7ca2, 0x7ca2, 0x74a2,
49  0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2,
50  0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2,
51  0x74a2, 0x74a2, 0x74a2, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x51a0,
52  0x41a0, 0x78e2, 0x78e2, 0x78e2, 0x78e2, 0x78e2, 0x78e2, 0x70e2,
53  0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2,
54  0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2,
55  0x70e2, 0x70e2, 0x70e2, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x4008,
56  0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0288, 0x0008, 0x0008,
57  0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,
58  0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,
59  0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,
60  0x0284, 0x01a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0,
61  0x00a0, 0x00a0, 0x30e2, 0x01a0, 0x00a0, 0x00a8, 0x00a0, 0x00a0,
62  0x00a0, 0x00a0, 0x10a0, 0x10a0, 0x00a0, 0x30e2, 0x00a0, 0x01a0,
63  0x00a0, 0x10a0, 0x30e2, 0x01a0, 0x10a0, 0x10a0, 0x10a0, 0x01a0,
64  0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2,
65  0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2,
66  0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x00a0,
67  0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x30e2,
68  0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2,
69  0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2,
70  0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x00a0,
71  0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2
72 };
73 
74 #include "enc/unicode/name2ctype.h"
75 
76 typedef struct {
77  int n;
80 
81 typedef struct {
85 
86 typedef struct {
90 
91 typedef struct {
92  int n;
95 
96 typedef struct {
97  OnigCodePoint from[2];
100 
101 typedef struct {
102  OnigCodePoint from[3];
105 
106 static const CaseFold_11_Type CaseFold[] = {
107  { 0x0041, {1, {0x0061}}},
108  { 0x0042, {1, {0x0062}}},
109  { 0x0043, {1, {0x0063}}},
110  { 0x0044, {1, {0x0064}}},
111  { 0x0045, {1, {0x0065}}},
112  { 0x0046, {1, {0x0066}}},
113  { 0x0047, {1, {0x0067}}},
114  { 0x0048, {1, {0x0068}}},
115  { 0x004a, {1, {0x006a}}},
116  { 0x004b, {1, {0x006b}}},
117  { 0x004c, {1, {0x006c}}},
118  { 0x004d, {1, {0x006d}}},
119  { 0x004e, {1, {0x006e}}},
120  { 0x004f, {1, {0x006f}}},
121  { 0x0050, {1, {0x0070}}},
122  { 0x0051, {1, {0x0071}}},
123  { 0x0052, {1, {0x0072}}},
124  { 0x0053, {1, {0x0073}}},
125  { 0x0054, {1, {0x0074}}},
126  { 0x0055, {1, {0x0075}}},
127  { 0x0056, {1, {0x0076}}},
128  { 0x0057, {1, {0x0077}}},
129  { 0x0058, {1, {0x0078}}},
130  { 0x0059, {1, {0x0079}}},
131  { 0x005a, {1, {0x007a}}},
132  { 0x00b5, {1, {0x03bc}}},
133  { 0x00c0, {1, {0x00e0}}},
134  { 0x00c1, {1, {0x00e1}}},
135  { 0x00c2, {1, {0x00e2}}},
136  { 0x00c3, {1, {0x00e3}}},
137  { 0x00c4, {1, {0x00e4}}},
138  { 0x00c5, {1, {0x00e5}}},
139  { 0x00c6, {1, {0x00e6}}},
140  { 0x00c7, {1, {0x00e7}}},
141  { 0x00c8, {1, {0x00e8}}},
142  { 0x00c9, {1, {0x00e9}}},
143  { 0x00ca, {1, {0x00ea}}},
144  { 0x00cb, {1, {0x00eb}}},
145  { 0x00cc, {1, {0x00ec}}},
146  { 0x00cd, {1, {0x00ed}}},
147  { 0x00ce, {1, {0x00ee}}},
148  { 0x00cf, {1, {0x00ef}}},
149  { 0x00d0, {1, {0x00f0}}},
150  { 0x00d1, {1, {0x00f1}}},
151  { 0x00d2, {1, {0x00f2}}},
152  { 0x00d3, {1, {0x00f3}}},
153  { 0x00d4, {1, {0x00f4}}},
154  { 0x00d5, {1, {0x00f5}}},
155  { 0x00d6, {1, {0x00f6}}},
156  { 0x00d8, {1, {0x00f8}}},
157  { 0x00d9, {1, {0x00f9}}},
158  { 0x00da, {1, {0x00fa}}},
159  { 0x00db, {1, {0x00fb}}},
160  { 0x00dc, {1, {0x00fc}}},
161  { 0x00dd, {1, {0x00fd}}},
162  { 0x00de, {1, {0x00fe}}},
163  { 0x00df, {2, {0x0073, 0x0073}}},
164  { 0x0100, {1, {0x0101}}},
165  { 0x0102, {1, {0x0103}}},
166  { 0x0104, {1, {0x0105}}},
167  { 0x0106, {1, {0x0107}}},
168  { 0x0108, {1, {0x0109}}},
169  { 0x010a, {1, {0x010b}}},
170  { 0x010c, {1, {0x010d}}},
171  { 0x010e, {1, {0x010f}}},
172  { 0x0110, {1, {0x0111}}},
173  { 0x0112, {1, {0x0113}}},
174  { 0x0114, {1, {0x0115}}},
175  { 0x0116, {1, {0x0117}}},
176  { 0x0118, {1, {0x0119}}},
177  { 0x011a, {1, {0x011b}}},
178  { 0x011c, {1, {0x011d}}},
179  { 0x011e, {1, {0x011f}}},
180  { 0x0120, {1, {0x0121}}},
181  { 0x0122, {1, {0x0123}}},
182  { 0x0124, {1, {0x0125}}},
183  { 0x0126, {1, {0x0127}}},
184  { 0x0128, {1, {0x0129}}},
185  { 0x012a, {1, {0x012b}}},
186  { 0x012c, {1, {0x012d}}},
187  { 0x012e, {1, {0x012f}}},
188  { 0x0132, {1, {0x0133}}},
189  { 0x0134, {1, {0x0135}}},
190  { 0x0136, {1, {0x0137}}},
191  { 0x0139, {1, {0x013a}}},
192  { 0x013b, {1, {0x013c}}},
193  { 0x013d, {1, {0x013e}}},
194  { 0x013f, {1, {0x0140}}},
195  { 0x0141, {1, {0x0142}}},
196  { 0x0143, {1, {0x0144}}},
197  { 0x0145, {1, {0x0146}}},
198  { 0x0147, {1, {0x0148}}},
199  { 0x0149, {2, {0x02bc, 0x006e}}},
200  { 0x014a, {1, {0x014b}}},
201  { 0x014c, {1, {0x014d}}},
202  { 0x014e, {1, {0x014f}}},
203  { 0x0150, {1, {0x0151}}},
204  { 0x0152, {1, {0x0153}}},
205  { 0x0154, {1, {0x0155}}},
206  { 0x0156, {1, {0x0157}}},
207  { 0x0158, {1, {0x0159}}},
208  { 0x015a, {1, {0x015b}}},
209  { 0x015c, {1, {0x015d}}},
210  { 0x015e, {1, {0x015f}}},
211  { 0x0160, {1, {0x0161}}},
212  { 0x0162, {1, {0x0163}}},
213  { 0x0164, {1, {0x0165}}},
214  { 0x0166, {1, {0x0167}}},
215  { 0x0168, {1, {0x0169}}},
216  { 0x016a, {1, {0x016b}}},
217  { 0x016c, {1, {0x016d}}},
218  { 0x016e, {1, {0x016f}}},
219  { 0x0170, {1, {0x0171}}},
220  { 0x0172, {1, {0x0173}}},
221  { 0x0174, {1, {0x0175}}},
222  { 0x0176, {1, {0x0177}}},
223  { 0x0178, {1, {0x00ff}}},
224  { 0x0179, {1, {0x017a}}},
225  { 0x017b, {1, {0x017c}}},
226  { 0x017d, {1, {0x017e}}},
227  { 0x017f, {1, {0x0073}}},
228  { 0x0181, {1, {0x0253}}},
229  { 0x0182, {1, {0x0183}}},
230  { 0x0184, {1, {0x0185}}},
231  { 0x0186, {1, {0x0254}}},
232  { 0x0187, {1, {0x0188}}},
233  { 0x0189, {1, {0x0256}}},
234  { 0x018a, {1, {0x0257}}},
235  { 0x018b, {1, {0x018c}}},
236  { 0x018e, {1, {0x01dd}}},
237  { 0x018f, {1, {0x0259}}},
238  { 0x0190, {1, {0x025b}}},
239  { 0x0191, {1, {0x0192}}},
240  { 0x0193, {1, {0x0260}}},
241  { 0x0194, {1, {0x0263}}},
242  { 0x0196, {1, {0x0269}}},
243  { 0x0197, {1, {0x0268}}},
244  { 0x0198, {1, {0x0199}}},
245  { 0x019c, {1, {0x026f}}},
246  { 0x019d, {1, {0x0272}}},
247  { 0x019f, {1, {0x0275}}},
248  { 0x01a0, {1, {0x01a1}}},
249  { 0x01a2, {1, {0x01a3}}},
250  { 0x01a4, {1, {0x01a5}}},
251  { 0x01a6, {1, {0x0280}}},
252  { 0x01a7, {1, {0x01a8}}},
253  { 0x01a9, {1, {0x0283}}},
254  { 0x01ac, {1, {0x01ad}}},
255  { 0x01ae, {1, {0x0288}}},
256  { 0x01af, {1, {0x01b0}}},
257  { 0x01b1, {1, {0x028a}}},
258  { 0x01b2, {1, {0x028b}}},
259  { 0x01b3, {1, {0x01b4}}},
260  { 0x01b5, {1, {0x01b6}}},
261  { 0x01b7, {1, {0x0292}}},
262  { 0x01b8, {1, {0x01b9}}},
263  { 0x01bc, {1, {0x01bd}}},
264  { 0x01c4, {1, {0x01c6}}},
265  { 0x01c5, {1, {0x01c6}}},
266  { 0x01c7, {1, {0x01c9}}},
267  { 0x01c8, {1, {0x01c9}}},
268  { 0x01ca, {1, {0x01cc}}},
269  { 0x01cb, {1, {0x01cc}}},
270  { 0x01cd, {1, {0x01ce}}},
271  { 0x01cf, {1, {0x01d0}}},
272  { 0x01d1, {1, {0x01d2}}},
273  { 0x01d3, {1, {0x01d4}}},
274  { 0x01d5, {1, {0x01d6}}},
275  { 0x01d7, {1, {0x01d8}}},
276  { 0x01d9, {1, {0x01da}}},
277  { 0x01db, {1, {0x01dc}}},
278  { 0x01de, {1, {0x01df}}},
279  { 0x01e0, {1, {0x01e1}}},
280  { 0x01e2, {1, {0x01e3}}},
281  { 0x01e4, {1, {0x01e5}}},
282  { 0x01e6, {1, {0x01e7}}},
283  { 0x01e8, {1, {0x01e9}}},
284  { 0x01ea, {1, {0x01eb}}},
285  { 0x01ec, {1, {0x01ed}}},
286  { 0x01ee, {1, {0x01ef}}},
287  { 0x01f0, {2, {0x006a, 0x030c}}},
288  { 0x01f1, {1, {0x01f3}}},
289  { 0x01f2, {1, {0x01f3}}},
290  { 0x01f4, {1, {0x01f5}}},
291  { 0x01f6, {1, {0x0195}}},
292  { 0x01f7, {1, {0x01bf}}},
293  { 0x01f8, {1, {0x01f9}}},
294  { 0x01fa, {1, {0x01fb}}},
295  { 0x01fc, {1, {0x01fd}}},
296  { 0x01fe, {1, {0x01ff}}},
297  { 0x0200, {1, {0x0201}}},
298  { 0x0202, {1, {0x0203}}},
299  { 0x0204, {1, {0x0205}}},
300  { 0x0206, {1, {0x0207}}},
301  { 0x0208, {1, {0x0209}}},
302  { 0x020a, {1, {0x020b}}},
303  { 0x020c, {1, {0x020d}}},
304  { 0x020e, {1, {0x020f}}},
305  { 0x0210, {1, {0x0211}}},
306  { 0x0212, {1, {0x0213}}},
307  { 0x0214, {1, {0x0215}}},
308  { 0x0216, {1, {0x0217}}},
309  { 0x0218, {1, {0x0219}}},
310  { 0x021a, {1, {0x021b}}},
311  { 0x021c, {1, {0x021d}}},
312  { 0x021e, {1, {0x021f}}},
313  { 0x0220, {1, {0x019e}}},
314  { 0x0222, {1, {0x0223}}},
315  { 0x0224, {1, {0x0225}}},
316  { 0x0226, {1, {0x0227}}},
317  { 0x0228, {1, {0x0229}}},
318  { 0x022a, {1, {0x022b}}},
319  { 0x022c, {1, {0x022d}}},
320  { 0x022e, {1, {0x022f}}},
321  { 0x0230, {1, {0x0231}}},
322  { 0x0232, {1, {0x0233}}},
323  { 0x023b, {1, {0x023c}}},
324  { 0x023d, {1, {0x019a}}},
325  { 0x0241, {1, {0x0294}}},
326  { 0x0345, {1, {0x03b9}}},
327  { 0x0386, {1, {0x03ac}}},
328  { 0x0388, {1, {0x03ad}}},
329  { 0x0389, {1, {0x03ae}}},
330  { 0x038a, {1, {0x03af}}},
331  { 0x038c, {1, {0x03cc}}},
332  { 0x038e, {1, {0x03cd}}},
333  { 0x038f, {1, {0x03ce}}},
334  { 0x0390, {3, {0x03b9, 0x0308, 0x0301}}},
335  { 0x0391, {1, {0x03b1}}},
336  { 0x0392, {1, {0x03b2}}},
337  { 0x0393, {1, {0x03b3}}},
338  { 0x0394, {1, {0x03b4}}},
339  { 0x0395, {1, {0x03b5}}},
340  { 0x0396, {1, {0x03b6}}},
341  { 0x0397, {1, {0x03b7}}},
342  { 0x0398, {1, {0x03b8}}},
343  { 0x0399, {1, {0x03b9}}},
344  { 0x039a, {1, {0x03ba}}},
345  { 0x039b, {1, {0x03bb}}},
346  { 0x039c, {1, {0x03bc}}},
347  { 0x039d, {1, {0x03bd}}},
348  { 0x039e, {1, {0x03be}}},
349  { 0x039f, {1, {0x03bf}}},
350  { 0x03a0, {1, {0x03c0}}},
351  { 0x03a1, {1, {0x03c1}}},
352  { 0x03a3, {1, {0x03c3}}},
353  { 0x03a4, {1, {0x03c4}}},
354  { 0x03a5, {1, {0x03c5}}},
355  { 0x03a6, {1, {0x03c6}}},
356  { 0x03a7, {1, {0x03c7}}},
357  { 0x03a8, {1, {0x03c8}}},
358  { 0x03a9, {1, {0x03c9}}},
359  { 0x03aa, {1, {0x03ca}}},
360  { 0x03ab, {1, {0x03cb}}},
361  { 0x03b0, {3, {0x03c5, 0x0308, 0x0301}}},
362  { 0x03c2, {1, {0x03c3}}},
363  { 0x03d0, {1, {0x03b2}}},
364  { 0x03d1, {1, {0x03b8}}},
365  { 0x03d5, {1, {0x03c6}}},
366  { 0x03d6, {1, {0x03c0}}},
367  { 0x03d8, {1, {0x03d9}}},
368  { 0x03da, {1, {0x03db}}},
369  { 0x03dc, {1, {0x03dd}}},
370  { 0x03de, {1, {0x03df}}},
371  { 0x03e0, {1, {0x03e1}}},
372  { 0x03e2, {1, {0x03e3}}},
373  { 0x03e4, {1, {0x03e5}}},
374  { 0x03e6, {1, {0x03e7}}},
375  { 0x03e8, {1, {0x03e9}}},
376  { 0x03ea, {1, {0x03eb}}},
377  { 0x03ec, {1, {0x03ed}}},
378  { 0x03ee, {1, {0x03ef}}},
379  { 0x03f0, {1, {0x03ba}}},
380  { 0x03f1, {1, {0x03c1}}},
381  { 0x03f4, {1, {0x03b8}}},
382  { 0x03f5, {1, {0x03b5}}},
383  { 0x03f7, {1, {0x03f8}}},
384  { 0x03f9, {1, {0x03f2}}},
385  { 0x03fa, {1, {0x03fb}}},
386  { 0x0400, {1, {0x0450}}},
387  { 0x0401, {1, {0x0451}}},
388  { 0x0402, {1, {0x0452}}},
389  { 0x0403, {1, {0x0453}}},
390  { 0x0404, {1, {0x0454}}},
391  { 0x0405, {1, {0x0455}}},
392  { 0x0406, {1, {0x0456}}},
393  { 0x0407, {1, {0x0457}}},
394  { 0x0408, {1, {0x0458}}},
395  { 0x0409, {1, {0x0459}}},
396  { 0x040a, {1, {0x045a}}},
397  { 0x040b, {1, {0x045b}}},
398  { 0x040c, {1, {0x045c}}},
399  { 0x040d, {1, {0x045d}}},
400  { 0x040e, {1, {0x045e}}},
401  { 0x040f, {1, {0x045f}}},
402  { 0x0410, {1, {0x0430}}},
403  { 0x0411, {1, {0x0431}}},
404  { 0x0412, {1, {0x0432}}},
405  { 0x0413, {1, {0x0433}}},
406  { 0x0414, {1, {0x0434}}},
407  { 0x0415, {1, {0x0435}}},
408  { 0x0416, {1, {0x0436}}},
409  { 0x0417, {1, {0x0437}}},
410  { 0x0418, {1, {0x0438}}},
411  { 0x0419, {1, {0x0439}}},
412  { 0x041a, {1, {0x043a}}},
413  { 0x041b, {1, {0x043b}}},
414  { 0x041c, {1, {0x043c}}},
415  { 0x041d, {1, {0x043d}}},
416  { 0x041e, {1, {0x043e}}},
417  { 0x041f, {1, {0x043f}}},
418  { 0x0420, {1, {0x0440}}},
419  { 0x0421, {1, {0x0441}}},
420  { 0x0422, {1, {0x0442}}},
421  { 0x0423, {1, {0x0443}}},
422  { 0x0424, {1, {0x0444}}},
423  { 0x0425, {1, {0x0445}}},
424  { 0x0426, {1, {0x0446}}},
425  { 0x0427, {1, {0x0447}}},
426  { 0x0428, {1, {0x0448}}},
427  { 0x0429, {1, {0x0449}}},
428  { 0x042a, {1, {0x044a}}},
429  { 0x042b, {1, {0x044b}}},
430  { 0x042c, {1, {0x044c}}},
431  { 0x042d, {1, {0x044d}}},
432  { 0x042e, {1, {0x044e}}},
433  { 0x042f, {1, {0x044f}}},
434  { 0x0460, {1, {0x0461}}},
435  { 0x0462, {1, {0x0463}}},
436  { 0x0464, {1, {0x0465}}},
437  { 0x0466, {1, {0x0467}}},
438  { 0x0468, {1, {0x0469}}},
439  { 0x046a, {1, {0x046b}}},
440  { 0x046c, {1, {0x046d}}},
441  { 0x046e, {1, {0x046f}}},
442  { 0x0470, {1, {0x0471}}},
443  { 0x0472, {1, {0x0473}}},
444  { 0x0474, {1, {0x0475}}},
445  { 0x0476, {1, {0x0477}}},
446  { 0x0478, {1, {0x0479}}},
447  { 0x047a, {1, {0x047b}}},
448  { 0x047c, {1, {0x047d}}},
449  { 0x047e, {1, {0x047f}}},
450  { 0x0480, {1, {0x0481}}},
451  { 0x048a, {1, {0x048b}}},
452  { 0x048c, {1, {0x048d}}},
453  { 0x048e, {1, {0x048f}}},
454  { 0x0490, {1, {0x0491}}},
455  { 0x0492, {1, {0x0493}}},
456  { 0x0494, {1, {0x0495}}},
457  { 0x0496, {1, {0x0497}}},
458  { 0x0498, {1, {0x0499}}},
459  { 0x049a, {1, {0x049b}}},
460  { 0x049c, {1, {0x049d}}},
461  { 0x049e, {1, {0x049f}}},
462  { 0x04a0, {1, {0x04a1}}},
463  { 0x04a2, {1, {0x04a3}}},
464  { 0x04a4, {1, {0x04a5}}},
465  { 0x04a6, {1, {0x04a7}}},
466  { 0x04a8, {1, {0x04a9}}},
467  { 0x04aa, {1, {0x04ab}}},
468  { 0x04ac, {1, {0x04ad}}},
469  { 0x04ae, {1, {0x04af}}},
470  { 0x04b0, {1, {0x04b1}}},
471  { 0x04b2, {1, {0x04b3}}},
472  { 0x04b4, {1, {0x04b5}}},
473  { 0x04b6, {1, {0x04b7}}},
474  { 0x04b8, {1, {0x04b9}}},
475  { 0x04ba, {1, {0x04bb}}},
476  { 0x04bc, {1, {0x04bd}}},
477  { 0x04be, {1, {0x04bf}}},
478  { 0x04c1, {1, {0x04c2}}},
479  { 0x04c3, {1, {0x04c4}}},
480  { 0x04c5, {1, {0x04c6}}},
481  { 0x04c7, {1, {0x04c8}}},
482  { 0x04c9, {1, {0x04ca}}},
483  { 0x04cb, {1, {0x04cc}}},
484  { 0x04cd, {1, {0x04ce}}},
485  { 0x04d0, {1, {0x04d1}}},
486  { 0x04d2, {1, {0x04d3}}},
487  { 0x04d4, {1, {0x04d5}}},
488  { 0x04d6, {1, {0x04d7}}},
489  { 0x04d8, {1, {0x04d9}}},
490  { 0x04da, {1, {0x04db}}},
491  { 0x04dc, {1, {0x04dd}}},
492  { 0x04de, {1, {0x04df}}},
493  { 0x04e0, {1, {0x04e1}}},
494  { 0x04e2, {1, {0x04e3}}},
495  { 0x04e4, {1, {0x04e5}}},
496  { 0x04e6, {1, {0x04e7}}},
497  { 0x04e8, {1, {0x04e9}}},
498  { 0x04ea, {1, {0x04eb}}},
499  { 0x04ec, {1, {0x04ed}}},
500  { 0x04ee, {1, {0x04ef}}},
501  { 0x04f0, {1, {0x04f1}}},
502  { 0x04f2, {1, {0x04f3}}},
503  { 0x04f4, {1, {0x04f5}}},
504  { 0x04f6, {1, {0x04f7}}},
505  { 0x04f8, {1, {0x04f9}}},
506  { 0x0500, {1, {0x0501}}},
507  { 0x0502, {1, {0x0503}}},
508  { 0x0504, {1, {0x0505}}},
509  { 0x0506, {1, {0x0507}}},
510  { 0x0508, {1, {0x0509}}},
511  { 0x050a, {1, {0x050b}}},
512  { 0x050c, {1, {0x050d}}},
513  { 0x050e, {1, {0x050f}}},
514  { 0x0531, {1, {0x0561}}},
515  { 0x0532, {1, {0x0562}}},
516  { 0x0533, {1, {0x0563}}},
517  { 0x0534, {1, {0x0564}}},
518  { 0x0535, {1, {0x0565}}},
519  { 0x0536, {1, {0x0566}}},
520  { 0x0537, {1, {0x0567}}},
521  { 0x0538, {1, {0x0568}}},
522  { 0x0539, {1, {0x0569}}},
523  { 0x053a, {1, {0x056a}}},
524  { 0x053b, {1, {0x056b}}},
525  { 0x053c, {1, {0x056c}}},
526  { 0x053d, {1, {0x056d}}},
527  { 0x053e, {1, {0x056e}}},
528  { 0x053f, {1, {0x056f}}},
529  { 0x0540, {1, {0x0570}}},
530  { 0x0541, {1, {0x0571}}},
531  { 0x0542, {1, {0x0572}}},
532  { 0x0543, {1, {0x0573}}},
533  { 0x0544, {1, {0x0574}}},
534  { 0x0545, {1, {0x0575}}},
535  { 0x0546, {1, {0x0576}}},
536  { 0x0547, {1, {0x0577}}},
537  { 0x0548, {1, {0x0578}}},
538  { 0x0549, {1, {0x0579}}},
539  { 0x054a, {1, {0x057a}}},
540  { 0x054b, {1, {0x057b}}},
541  { 0x054c, {1, {0x057c}}},
542  { 0x054d, {1, {0x057d}}},
543  { 0x054e, {1, {0x057e}}},
544  { 0x054f, {1, {0x057f}}},
545  { 0x0550, {1, {0x0580}}},
546  { 0x0551, {1, {0x0581}}},
547  { 0x0552, {1, {0x0582}}},
548  { 0x0553, {1, {0x0583}}},
549  { 0x0554, {1, {0x0584}}},
550  { 0x0555, {1, {0x0585}}},
551  { 0x0556, {1, {0x0586}}},
552  { 0x0587, {2, {0x0565, 0x0582}}},
553  { 0x10a0, {1, {0x2d00}}},
554  { 0x10a1, {1, {0x2d01}}},
555  { 0x10a2, {1, {0x2d02}}},
556  { 0x10a3, {1, {0x2d03}}},
557  { 0x10a4, {1, {0x2d04}}},
558  { 0x10a5, {1, {0x2d05}}},
559  { 0x10a6, {1, {0x2d06}}},
560  { 0x10a7, {1, {0x2d07}}},
561  { 0x10a8, {1, {0x2d08}}},
562  { 0x10a9, {1, {0x2d09}}},
563  { 0x10aa, {1, {0x2d0a}}},
564  { 0x10ab, {1, {0x2d0b}}},
565  { 0x10ac, {1, {0x2d0c}}},
566  { 0x10ad, {1, {0x2d0d}}},
567  { 0x10ae, {1, {0x2d0e}}},
568  { 0x10af, {1, {0x2d0f}}},
569  { 0x10b0, {1, {0x2d10}}},
570  { 0x10b1, {1, {0x2d11}}},
571  { 0x10b2, {1, {0x2d12}}},
572  { 0x10b3, {1, {0x2d13}}},
573  { 0x10b4, {1, {0x2d14}}},
574  { 0x10b5, {1, {0x2d15}}},
575  { 0x10b6, {1, {0x2d16}}},
576  { 0x10b7, {1, {0x2d17}}},
577  { 0x10b8, {1, {0x2d18}}},
578  { 0x10b9, {1, {0x2d19}}},
579  { 0x10ba, {1, {0x2d1a}}},
580  { 0x10bb, {1, {0x2d1b}}},
581  { 0x10bc, {1, {0x2d1c}}},
582  { 0x10bd, {1, {0x2d1d}}},
583  { 0x10be, {1, {0x2d1e}}},
584  { 0x10bf, {1, {0x2d1f}}},
585  { 0x10c0, {1, {0x2d20}}},
586  { 0x10c1, {1, {0x2d21}}},
587  { 0x10c2, {1, {0x2d22}}},
588  { 0x10c3, {1, {0x2d23}}},
589  { 0x10c4, {1, {0x2d24}}},
590  { 0x10c5, {1, {0x2d25}}},
591  { 0x1e00, {1, {0x1e01}}},
592  { 0x1e02, {1, {0x1e03}}},
593  { 0x1e04, {1, {0x1e05}}},
594  { 0x1e06, {1, {0x1e07}}},
595  { 0x1e08, {1, {0x1e09}}},
596  { 0x1e0a, {1, {0x1e0b}}},
597  { 0x1e0c, {1, {0x1e0d}}},
598  { 0x1e0e, {1, {0x1e0f}}},
599  { 0x1e10, {1, {0x1e11}}},
600  { 0x1e12, {1, {0x1e13}}},
601  { 0x1e14, {1, {0x1e15}}},
602  { 0x1e16, {1, {0x1e17}}},
603  { 0x1e18, {1, {0x1e19}}},
604  { 0x1e1a, {1, {0x1e1b}}},
605  { 0x1e1c, {1, {0x1e1d}}},
606  { 0x1e1e, {1, {0x1e1f}}},
607  { 0x1e20, {1, {0x1e21}}},
608  { 0x1e22, {1, {0x1e23}}},
609  { 0x1e24, {1, {0x1e25}}},
610  { 0x1e26, {1, {0x1e27}}},
611  { 0x1e28, {1, {0x1e29}}},
612  { 0x1e2a, {1, {0x1e2b}}},
613  { 0x1e2c, {1, {0x1e2d}}},
614  { 0x1e2e, {1, {0x1e2f}}},
615  { 0x1e30, {1, {0x1e31}}},
616  { 0x1e32, {1, {0x1e33}}},
617  { 0x1e34, {1, {0x1e35}}},
618  { 0x1e36, {1, {0x1e37}}},
619  { 0x1e38, {1, {0x1e39}}},
620  { 0x1e3a, {1, {0x1e3b}}},
621  { 0x1e3c, {1, {0x1e3d}}},
622  { 0x1e3e, {1, {0x1e3f}}},
623  { 0x1e40, {1, {0x1e41}}},
624  { 0x1e42, {1, {0x1e43}}},
625  { 0x1e44, {1, {0x1e45}}},
626  { 0x1e46, {1, {0x1e47}}},
627  { 0x1e48, {1, {0x1e49}}},
628  { 0x1e4a, {1, {0x1e4b}}},
629  { 0x1e4c, {1, {0x1e4d}}},
630  { 0x1e4e, {1, {0x1e4f}}},
631  { 0x1e50, {1, {0x1e51}}},
632  { 0x1e52, {1, {0x1e53}}},
633  { 0x1e54, {1, {0x1e55}}},
634  { 0x1e56, {1, {0x1e57}}},
635  { 0x1e58, {1, {0x1e59}}},
636  { 0x1e5a, {1, {0x1e5b}}},
637  { 0x1e5c, {1, {0x1e5d}}},
638  { 0x1e5e, {1, {0x1e5f}}},
639  { 0x1e60, {1, {0x1e61}}},
640  { 0x1e62, {1, {0x1e63}}},
641  { 0x1e64, {1, {0x1e65}}},
642  { 0x1e66, {1, {0x1e67}}},
643  { 0x1e68, {1, {0x1e69}}},
644  { 0x1e6a, {1, {0x1e6b}}},
645  { 0x1e6c, {1, {0x1e6d}}},
646  { 0x1e6e, {1, {0x1e6f}}},
647  { 0x1e70, {1, {0x1e71}}},
648  { 0x1e72, {1, {0x1e73}}},
649  { 0x1e74, {1, {0x1e75}}},
650  { 0x1e76, {1, {0x1e77}}},
651  { 0x1e78, {1, {0x1e79}}},
652  { 0x1e7a, {1, {0x1e7b}}},
653  { 0x1e7c, {1, {0x1e7d}}},
654  { 0x1e7e, {1, {0x1e7f}}},
655  { 0x1e80, {1, {0x1e81}}},
656  { 0x1e82, {1, {0x1e83}}},
657  { 0x1e84, {1, {0x1e85}}},
658  { 0x1e86, {1, {0x1e87}}},
659  { 0x1e88, {1, {0x1e89}}},
660  { 0x1e8a, {1, {0x1e8b}}},
661  { 0x1e8c, {1, {0x1e8d}}},
662  { 0x1e8e, {1, {0x1e8f}}},
663  { 0x1e90, {1, {0x1e91}}},
664  { 0x1e92, {1, {0x1e93}}},
665  { 0x1e94, {1, {0x1e95}}},
666  { 0x1e96, {2, {0x0068, 0x0331}}},
667  { 0x1e97, {2, {0x0074, 0x0308}}},
668  { 0x1e98, {2, {0x0077, 0x030a}}},
669  { 0x1e99, {2, {0x0079, 0x030a}}},
670  { 0x1e9a, {2, {0x0061, 0x02be}}},
671  { 0x1e9b, {1, {0x1e61}}},
672  { 0x1ea0, {1, {0x1ea1}}},
673  { 0x1ea2, {1, {0x1ea3}}},
674  { 0x1ea4, {1, {0x1ea5}}},
675  { 0x1ea6, {1, {0x1ea7}}},
676  { 0x1ea8, {1, {0x1ea9}}},
677  { 0x1eaa, {1, {0x1eab}}},
678  { 0x1eac, {1, {0x1ead}}},
679  { 0x1eae, {1, {0x1eaf}}},
680  { 0x1eb0, {1, {0x1eb1}}},
681  { 0x1eb2, {1, {0x1eb3}}},
682  { 0x1eb4, {1, {0x1eb5}}},
683  { 0x1eb6, {1, {0x1eb7}}},
684  { 0x1eb8, {1, {0x1eb9}}},
685  { 0x1eba, {1, {0x1ebb}}},
686  { 0x1ebc, {1, {0x1ebd}}},
687  { 0x1ebe, {1, {0x1ebf}}},
688  { 0x1ec0, {1, {0x1ec1}}},
689  { 0x1ec2, {1, {0x1ec3}}},
690  { 0x1ec4, {1, {0x1ec5}}},
691  { 0x1ec6, {1, {0x1ec7}}},
692  { 0x1ec8, {1, {0x1ec9}}},
693  { 0x1eca, {1, {0x1ecb}}},
694  { 0x1ecc, {1, {0x1ecd}}},
695  { 0x1ece, {1, {0x1ecf}}},
696  { 0x1ed0, {1, {0x1ed1}}},
697  { 0x1ed2, {1, {0x1ed3}}},
698  { 0x1ed4, {1, {0x1ed5}}},
699  { 0x1ed6, {1, {0x1ed7}}},
700  { 0x1ed8, {1, {0x1ed9}}},
701  { 0x1eda, {1, {0x1edb}}},
702  { 0x1edc, {1, {0x1edd}}},
703  { 0x1ede, {1, {0x1edf}}},
704  { 0x1ee0, {1, {0x1ee1}}},
705  { 0x1ee2, {1, {0x1ee3}}},
706  { 0x1ee4, {1, {0x1ee5}}},
707  { 0x1ee6, {1, {0x1ee7}}},
708  { 0x1ee8, {1, {0x1ee9}}},
709  { 0x1eea, {1, {0x1eeb}}},
710  { 0x1eec, {1, {0x1eed}}},
711  { 0x1eee, {1, {0x1eef}}},
712  { 0x1ef0, {1, {0x1ef1}}},
713  { 0x1ef2, {1, {0x1ef3}}},
714  { 0x1ef4, {1, {0x1ef5}}},
715  { 0x1ef6, {1, {0x1ef7}}},
716  { 0x1ef8, {1, {0x1ef9}}},
717  { 0x1f08, {1, {0x1f00}}},
718  { 0x1f09, {1, {0x1f01}}},
719  { 0x1f0a, {1, {0x1f02}}},
720  { 0x1f0b, {1, {0x1f03}}},
721  { 0x1f0c, {1, {0x1f04}}},
722  { 0x1f0d, {1, {0x1f05}}},
723  { 0x1f0e, {1, {0x1f06}}},
724  { 0x1f0f, {1, {0x1f07}}},
725  { 0x1f18, {1, {0x1f10}}},
726  { 0x1f19, {1, {0x1f11}}},
727  { 0x1f1a, {1, {0x1f12}}},
728  { 0x1f1b, {1, {0x1f13}}},
729  { 0x1f1c, {1, {0x1f14}}},
730  { 0x1f1d, {1, {0x1f15}}},
731  { 0x1f28, {1, {0x1f20}}},
732  { 0x1f29, {1, {0x1f21}}},
733  { 0x1f2a, {1, {0x1f22}}},
734  { 0x1f2b, {1, {0x1f23}}},
735  { 0x1f2c, {1, {0x1f24}}},
736  { 0x1f2d, {1, {0x1f25}}},
737  { 0x1f2e, {1, {0x1f26}}},
738  { 0x1f2f, {1, {0x1f27}}},
739  { 0x1f38, {1, {0x1f30}}},
740  { 0x1f39, {1, {0x1f31}}},
741  { 0x1f3a, {1, {0x1f32}}},
742  { 0x1f3b, {1, {0x1f33}}},
743  { 0x1f3c, {1, {0x1f34}}},
744  { 0x1f3d, {1, {0x1f35}}},
745  { 0x1f3e, {1, {0x1f36}}},
746  { 0x1f3f, {1, {0x1f37}}},
747  { 0x1f48, {1, {0x1f40}}},
748  { 0x1f49, {1, {0x1f41}}},
749  { 0x1f4a, {1, {0x1f42}}},
750  { 0x1f4b, {1, {0x1f43}}},
751  { 0x1f4c, {1, {0x1f44}}},
752  { 0x1f4d, {1, {0x1f45}}},
753  { 0x1f50, {2, {0x03c5, 0x0313}}},
754  { 0x1f52, {3, {0x03c5, 0x0313, 0x0300}}},
755  { 0x1f54, {3, {0x03c5, 0x0313, 0x0301}}},
756  { 0x1f56, {3, {0x03c5, 0x0313, 0x0342}}},
757  { 0x1f59, {1, {0x1f51}}},
758  { 0x1f5b, {1, {0x1f53}}},
759  { 0x1f5d, {1, {0x1f55}}},
760  { 0x1f5f, {1, {0x1f57}}},
761  { 0x1f68, {1, {0x1f60}}},
762  { 0x1f69, {1, {0x1f61}}},
763  { 0x1f6a, {1, {0x1f62}}},
764  { 0x1f6b, {1, {0x1f63}}},
765  { 0x1f6c, {1, {0x1f64}}},
766  { 0x1f6d, {1, {0x1f65}}},
767  { 0x1f6e, {1, {0x1f66}}},
768  { 0x1f6f, {1, {0x1f67}}},
769  { 0x1f80, {2, {0x1f00, 0x03b9}}},
770  { 0x1f81, {2, {0x1f01, 0x03b9}}},
771  { 0x1f82, {2, {0x1f02, 0x03b9}}},
772  { 0x1f83, {2, {0x1f03, 0x03b9}}},
773  { 0x1f84, {2, {0x1f04, 0x03b9}}},
774  { 0x1f85, {2, {0x1f05, 0x03b9}}},
775  { 0x1f86, {2, {0x1f06, 0x03b9}}},
776  { 0x1f87, {2, {0x1f07, 0x03b9}}},
777  { 0x1f88, {2, {0x1f00, 0x03b9}}},
778  { 0x1f89, {2, {0x1f01, 0x03b9}}},
779  { 0x1f8a, {2, {0x1f02, 0x03b9}}},
780  { 0x1f8b, {2, {0x1f03, 0x03b9}}},
781  { 0x1f8c, {2, {0x1f04, 0x03b9}}},
782  { 0x1f8d, {2, {0x1f05, 0x03b9}}},
783  { 0x1f8e, {2, {0x1f06, 0x03b9}}},
784  { 0x1f8f, {2, {0x1f07, 0x03b9}}},
785  { 0x1f90, {2, {0x1f20, 0x03b9}}},
786  { 0x1f91, {2, {0x1f21, 0x03b9}}},
787  { 0x1f92, {2, {0x1f22, 0x03b9}}},
788  { 0x1f93, {2, {0x1f23, 0x03b9}}},
789  { 0x1f94, {2, {0x1f24, 0x03b9}}},
790  { 0x1f95, {2, {0x1f25, 0x03b9}}},
791  { 0x1f96, {2, {0x1f26, 0x03b9}}},
792  { 0x1f97, {2, {0x1f27, 0x03b9}}},
793  { 0x1f98, {2, {0x1f20, 0x03b9}}},
794  { 0x1f99, {2, {0x1f21, 0x03b9}}},
795  { 0x1f9a, {2, {0x1f22, 0x03b9}}},
796  { 0x1f9b, {2, {0x1f23, 0x03b9}}},
797  { 0x1f9c, {2, {0x1f24, 0x03b9}}},
798  { 0x1f9d, {2, {0x1f25, 0x03b9}}},
799  { 0x1f9e, {2, {0x1f26, 0x03b9}}},
800  { 0x1f9f, {2, {0x1f27, 0x03b9}}},
801  { 0x1fa0, {2, {0x1f60, 0x03b9}}},
802  { 0x1fa1, {2, {0x1f61, 0x03b9}}},
803  { 0x1fa2, {2, {0x1f62, 0x03b9}}},
804  { 0x1fa3, {2, {0x1f63, 0x03b9}}},
805  { 0x1fa4, {2, {0x1f64, 0x03b9}}},
806  { 0x1fa5, {2, {0x1f65, 0x03b9}}},
807  { 0x1fa6, {2, {0x1f66, 0x03b9}}},
808  { 0x1fa7, {2, {0x1f67, 0x03b9}}},
809  { 0x1fa8, {2, {0x1f60, 0x03b9}}},
810  { 0x1fa9, {2, {0x1f61, 0x03b9}}},
811  { 0x1faa, {2, {0x1f62, 0x03b9}}},
812  { 0x1fab, {2, {0x1f63, 0x03b9}}},
813  { 0x1fac, {2, {0x1f64, 0x03b9}}},
814  { 0x1fad, {2, {0x1f65, 0x03b9}}},
815  { 0x1fae, {2, {0x1f66, 0x03b9}}},
816  { 0x1faf, {2, {0x1f67, 0x03b9}}},
817  { 0x1fb2, {2, {0x1f70, 0x03b9}}},
818  { 0x1fb3, {2, {0x03b1, 0x03b9}}},
819  { 0x1fb4, {2, {0x03ac, 0x03b9}}},
820  { 0x1fb6, {2, {0x03b1, 0x0342}}},
821  { 0x1fb7, {3, {0x03b1, 0x0342, 0x03b9}}},
822  { 0x1fb8, {1, {0x1fb0}}},
823  { 0x1fb9, {1, {0x1fb1}}},
824  { 0x1fba, {1, {0x1f70}}},
825  { 0x1fbb, {1, {0x1f71}}},
826  { 0x1fbc, {2, {0x03b1, 0x03b9}}},
827  { 0x1fbe, {1, {0x03b9}}},
828  { 0x1fc2, {2, {0x1f74, 0x03b9}}},
829  { 0x1fc3, {2, {0x03b7, 0x03b9}}},
830  { 0x1fc4, {2, {0x03ae, 0x03b9}}},
831  { 0x1fc6, {2, {0x03b7, 0x0342}}},
832  { 0x1fc7, {3, {0x03b7, 0x0342, 0x03b9}}},
833  { 0x1fc8, {1, {0x1f72}}},
834  { 0x1fc9, {1, {0x1f73}}},
835  { 0x1fca, {1, {0x1f74}}},
836  { 0x1fcb, {1, {0x1f75}}},
837  { 0x1fcc, {2, {0x03b7, 0x03b9}}},
838  { 0x1fd2, {3, {0x03b9, 0x0308, 0x0300}}},
839  { 0x1fd3, {3, {0x03b9, 0x0308, 0x0301}}},
840  { 0x1fd6, {2, {0x03b9, 0x0342}}},
841  { 0x1fd7, {3, {0x03b9, 0x0308, 0x0342}}},
842  { 0x1fd8, {1, {0x1fd0}}},
843  { 0x1fd9, {1, {0x1fd1}}},
844  { 0x1fda, {1, {0x1f76}}},
845  { 0x1fdb, {1, {0x1f77}}},
846  { 0x1fe2, {3, {0x03c5, 0x0308, 0x0300}}},
847  { 0x1fe3, {3, {0x03c5, 0x0308, 0x0301}}},
848  { 0x1fe4, {2, {0x03c1, 0x0313}}},
849  { 0x1fe6, {2, {0x03c5, 0x0342}}},
850  { 0x1fe7, {3, {0x03c5, 0x0308, 0x0342}}},
851  { 0x1fe8, {1, {0x1fe0}}},
852  { 0x1fe9, {1, {0x1fe1}}},
853  { 0x1fea, {1, {0x1f7a}}},
854  { 0x1feb, {1, {0x1f7b}}},
855  { 0x1fec, {1, {0x1fe5}}},
856  { 0x1ff2, {2, {0x1f7c, 0x03b9}}},
857  { 0x1ff3, {2, {0x03c9, 0x03b9}}},
858  { 0x1ff4, {2, {0x03ce, 0x03b9}}},
859  { 0x1ff6, {2, {0x03c9, 0x0342}}},
860  { 0x1ff7, {3, {0x03c9, 0x0342, 0x03b9}}},
861  { 0x1ff8, {1, {0x1f78}}},
862  { 0x1ff9, {1, {0x1f79}}},
863  { 0x1ffa, {1, {0x1f7c}}},
864  { 0x1ffb, {1, {0x1f7d}}},
865  { 0x1ffc, {2, {0x03c9, 0x03b9}}},
866  { 0x2126, {1, {0x03c9}}},
867  { 0x212a, {1, {0x006b}}},
868  { 0x212b, {1, {0x00e5}}},
869  { 0x2160, {1, {0x2170}}},
870  { 0x2161, {1, {0x2171}}},
871  { 0x2162, {1, {0x2172}}},
872  { 0x2163, {1, {0x2173}}},
873  { 0x2164, {1, {0x2174}}},
874  { 0x2165, {1, {0x2175}}},
875  { 0x2166, {1, {0x2176}}},
876  { 0x2167, {1, {0x2177}}},
877  { 0x2168, {1, {0x2178}}},
878  { 0x2169, {1, {0x2179}}},
879  { 0x216a, {1, {0x217a}}},
880  { 0x216b, {1, {0x217b}}},
881  { 0x216c, {1, {0x217c}}},
882  { 0x216d, {1, {0x217d}}},
883  { 0x216e, {1, {0x217e}}},
884  { 0x216f, {1, {0x217f}}},
885  { 0x24b6, {1, {0x24d0}}},
886  { 0x24b7, {1, {0x24d1}}},
887  { 0x24b8, {1, {0x24d2}}},
888  { 0x24b9, {1, {0x24d3}}},
889  { 0x24ba, {1, {0x24d4}}},
890  { 0x24bb, {1, {0x24d5}}},
891  { 0x24bc, {1, {0x24d6}}},
892  { 0x24bd, {1, {0x24d7}}},
893  { 0x24be, {1, {0x24d8}}},
894  { 0x24bf, {1, {0x24d9}}},
895  { 0x24c0, {1, {0x24da}}},
896  { 0x24c1, {1, {0x24db}}},
897  { 0x24c2, {1, {0x24dc}}},
898  { 0x24c3, {1, {0x24dd}}},
899  { 0x24c4, {1, {0x24de}}},
900  { 0x24c5, {1, {0x24df}}},
901  { 0x24c6, {1, {0x24e0}}},
902  { 0x24c7, {1, {0x24e1}}},
903  { 0x24c8, {1, {0x24e2}}},
904  { 0x24c9, {1, {0x24e3}}},
905  { 0x24ca, {1, {0x24e4}}},
906  { 0x24cb, {1, {0x24e5}}},
907  { 0x24cc, {1, {0x24e6}}},
908  { 0x24cd, {1, {0x24e7}}},
909  { 0x24ce, {1, {0x24e8}}},
910  { 0x24cf, {1, {0x24e9}}},
911  { 0x2c00, {1, {0x2c30}}},
912  { 0x2c01, {1, {0x2c31}}},
913  { 0x2c02, {1, {0x2c32}}},
914  { 0x2c03, {1, {0x2c33}}},
915  { 0x2c04, {1, {0x2c34}}},
916  { 0x2c05, {1, {0x2c35}}},
917  { 0x2c06, {1, {0x2c36}}},
918  { 0x2c07, {1, {0x2c37}}},
919  { 0x2c08, {1, {0x2c38}}},
920  { 0x2c09, {1, {0x2c39}}},
921  { 0x2c0a, {1, {0x2c3a}}},
922  { 0x2c0b, {1, {0x2c3b}}},
923  { 0x2c0c, {1, {0x2c3c}}},
924  { 0x2c0d, {1, {0x2c3d}}},
925  { 0x2c0e, {1, {0x2c3e}}},
926  { 0x2c0f, {1, {0x2c3f}}},
927  { 0x2c10, {1, {0x2c40}}},
928  { 0x2c11, {1, {0x2c41}}},
929  { 0x2c12, {1, {0x2c42}}},
930  { 0x2c13, {1, {0x2c43}}},
931  { 0x2c14, {1, {0x2c44}}},
932  { 0x2c15, {1, {0x2c45}}},
933  { 0x2c16, {1, {0x2c46}}},
934  { 0x2c17, {1, {0x2c47}}},
935  { 0x2c18, {1, {0x2c48}}},
936  { 0x2c19, {1, {0x2c49}}},
937  { 0x2c1a, {1, {0x2c4a}}},
938  { 0x2c1b, {1, {0x2c4b}}},
939  { 0x2c1c, {1, {0x2c4c}}},
940  { 0x2c1d, {1, {0x2c4d}}},
941  { 0x2c1e, {1, {0x2c4e}}},
942  { 0x2c1f, {1, {0x2c4f}}},
943  { 0x2c20, {1, {0x2c50}}},
944  { 0x2c21, {1, {0x2c51}}},
945  { 0x2c22, {1, {0x2c52}}},
946  { 0x2c23, {1, {0x2c53}}},
947  { 0x2c24, {1, {0x2c54}}},
948  { 0x2c25, {1, {0x2c55}}},
949  { 0x2c26, {1, {0x2c56}}},
950  { 0x2c27, {1, {0x2c57}}},
951  { 0x2c28, {1, {0x2c58}}},
952  { 0x2c29, {1, {0x2c59}}},
953  { 0x2c2a, {1, {0x2c5a}}},
954  { 0x2c2b, {1, {0x2c5b}}},
955  { 0x2c2c, {1, {0x2c5c}}},
956  { 0x2c2d, {1, {0x2c5d}}},
957  { 0x2c2e, {1, {0x2c5e}}},
958  { 0x2c80, {1, {0x2c81}}},
959  { 0x2c82, {1, {0x2c83}}},
960  { 0x2c84, {1, {0x2c85}}},
961  { 0x2c86, {1, {0x2c87}}},
962  { 0x2c88, {1, {0x2c89}}},
963  { 0x2c8a, {1, {0x2c8b}}},
964  { 0x2c8c, {1, {0x2c8d}}},
965  { 0x2c8e, {1, {0x2c8f}}},
966  { 0x2c90, {1, {0x2c91}}},
967  { 0x2c92, {1, {0x2c93}}},
968  { 0x2c94, {1, {0x2c95}}},
969  { 0x2c96, {1, {0x2c97}}},
970  { 0x2c98, {1, {0x2c99}}},
971  { 0x2c9a, {1, {0x2c9b}}},
972  { 0x2c9c, {1, {0x2c9d}}},
973  { 0x2c9e, {1, {0x2c9f}}},
974  { 0x2ca0, {1, {0x2ca1}}},
975  { 0x2ca2, {1, {0x2ca3}}},
976  { 0x2ca4, {1, {0x2ca5}}},
977  { 0x2ca6, {1, {0x2ca7}}},
978  { 0x2ca8, {1, {0x2ca9}}},
979  { 0x2caa, {1, {0x2cab}}},
980  { 0x2cac, {1, {0x2cad}}},
981  { 0x2cae, {1, {0x2caf}}},
982  { 0x2cb0, {1, {0x2cb1}}},
983  { 0x2cb2, {1, {0x2cb3}}},
984  { 0x2cb4, {1, {0x2cb5}}},
985  { 0x2cb6, {1, {0x2cb7}}},
986  { 0x2cb8, {1, {0x2cb9}}},
987  { 0x2cba, {1, {0x2cbb}}},
988  { 0x2cbc, {1, {0x2cbd}}},
989  { 0x2cbe, {1, {0x2cbf}}},
990  { 0x2cc0, {1, {0x2cc1}}},
991  { 0x2cc2, {1, {0x2cc3}}},
992  { 0x2cc4, {1, {0x2cc5}}},
993  { 0x2cc6, {1, {0x2cc7}}},
994  { 0x2cc8, {1, {0x2cc9}}},
995  { 0x2cca, {1, {0x2ccb}}},
996  { 0x2ccc, {1, {0x2ccd}}},
997  { 0x2cce, {1, {0x2ccf}}},
998  { 0x2cd0, {1, {0x2cd1}}},
999  { 0x2cd2, {1, {0x2cd3}}},
1000  { 0x2cd4, {1, {0x2cd5}}},
1001  { 0x2cd6, {1, {0x2cd7}}},
1002  { 0x2cd8, {1, {0x2cd9}}},
1003  { 0x2cda, {1, {0x2cdb}}},
1004  { 0x2cdc, {1, {0x2cdd}}},
1005  { 0x2cde, {1, {0x2cdf}}},
1006  { 0x2ce0, {1, {0x2ce1}}},
1007  { 0x2ce2, {1, {0x2ce3}}},
1008  { 0xfb00, {2, {0x0066, 0x0066}}},
1009  { 0xfb01, {2, {0x0066, 0x0069}}},
1010  { 0xfb02, {2, {0x0066, 0x006c}}},
1011  { 0xfb03, {3, {0x0066, 0x0066, 0x0069}}},
1012  { 0xfb04, {3, {0x0066, 0x0066, 0x006c}}},
1013  { 0xfb05, {2, {0x0073, 0x0074}}},
1014  { 0xfb06, {2, {0x0073, 0x0074}}},
1015  { 0xfb13, {2, {0x0574, 0x0576}}},
1016  { 0xfb14, {2, {0x0574, 0x0565}}},
1017  { 0xfb15, {2, {0x0574, 0x056b}}},
1018  { 0xfb16, {2, {0x057e, 0x0576}}},
1019  { 0xfb17, {2, {0x0574, 0x056d}}},
1020  { 0xff21, {1, {0xff41}}},
1021  { 0xff22, {1, {0xff42}}},
1022  { 0xff23, {1, {0xff43}}},
1023  { 0xff24, {1, {0xff44}}},
1024  { 0xff25, {1, {0xff45}}},
1025  { 0xff26, {1, {0xff46}}},
1026  { 0xff27, {1, {0xff47}}},
1027  { 0xff28, {1, {0xff48}}},
1028  { 0xff29, {1, {0xff49}}},
1029  { 0xff2a, {1, {0xff4a}}},
1030  { 0xff2b, {1, {0xff4b}}},
1031  { 0xff2c, {1, {0xff4c}}},
1032  { 0xff2d, {1, {0xff4d}}},
1033  { 0xff2e, {1, {0xff4e}}},
1034  { 0xff2f, {1, {0xff4f}}},
1035  { 0xff30, {1, {0xff50}}},
1036  { 0xff31, {1, {0xff51}}},
1037  { 0xff32, {1, {0xff52}}},
1038  { 0xff33, {1, {0xff53}}},
1039  { 0xff34, {1, {0xff54}}},
1040  { 0xff35, {1, {0xff55}}},
1041  { 0xff36, {1, {0xff56}}},
1042  { 0xff37, {1, {0xff57}}},
1043  { 0xff38, {1, {0xff58}}},
1044  { 0xff39, {1, {0xff59}}},
1045  { 0xff3a, {1, {0xff5a}}},
1046  { 0x10400, {1, {0x10428}}},
1047  { 0x10401, {1, {0x10429}}},
1048  { 0x10402, {1, {0x1042a}}},
1049  { 0x10403, {1, {0x1042b}}},
1050  { 0x10404, {1, {0x1042c}}},
1051  { 0x10405, {1, {0x1042d}}},
1052  { 0x10406, {1, {0x1042e}}},
1053  { 0x10407, {1, {0x1042f}}},
1054  { 0x10408, {1, {0x10430}}},
1055  { 0x10409, {1, {0x10431}}},
1056  { 0x1040a, {1, {0x10432}}},
1057  { 0x1040b, {1, {0x10433}}},
1058  { 0x1040c, {1, {0x10434}}},
1059  { 0x1040d, {1, {0x10435}}},
1060  { 0x1040e, {1, {0x10436}}},
1061  { 0x1040f, {1, {0x10437}}},
1062  { 0x10410, {1, {0x10438}}},
1063  { 0x10411, {1, {0x10439}}},
1064  { 0x10412, {1, {0x1043a}}},
1065  { 0x10413, {1, {0x1043b}}},
1066  { 0x10414, {1, {0x1043c}}},
1067  { 0x10415, {1, {0x1043d}}},
1068  { 0x10416, {1, {0x1043e}}},
1069  { 0x10417, {1, {0x1043f}}},
1070  { 0x10418, {1, {0x10440}}},
1071  { 0x10419, {1, {0x10441}}},
1072  { 0x1041a, {1, {0x10442}}},
1073  { 0x1041b, {1, {0x10443}}},
1074  { 0x1041c, {1, {0x10444}}},
1075  { 0x1041d, {1, {0x10445}}},
1076  { 0x1041e, {1, {0x10446}}},
1077  { 0x1041f, {1, {0x10447}}},
1078  { 0x10420, {1, {0x10448}}},
1079  { 0x10421, {1, {0x10449}}},
1080  { 0x10422, {1, {0x1044a}}},
1081  { 0x10423, {1, {0x1044b}}},
1082  { 0x10424, {1, {0x1044c}}},
1083  { 0x10425, {1, {0x1044d}}},
1084  { 0x10426, {1, {0x1044e}}},
1085  { 0x10427, {1, {0x1044f}}}
1086 };
1087 
1089  { 0x0049, {1, {0x0069}}},
1090  { 0x0130, {2, {0x0069, 0x0307}}}
1091 };
1092 
1094  { 0x0061, {1, {0x0041 }}},
1095  { 0x0062, {1, {0x0042 }}},
1096  { 0x0063, {1, {0x0043 }}},
1097  { 0x0064, {1, {0x0044 }}},
1098  { 0x0065, {1, {0x0045 }}},
1099  { 0x0066, {1, {0x0046 }}},
1100  { 0x0067, {1, {0x0047 }}},
1101  { 0x0068, {1, {0x0048 }}},
1102  { 0x006a, {1, {0x004a }}},
1103  { 0x006b, {2, {0x212a, 0x004b }}},
1104  { 0x006c, {1, {0x004c }}},
1105  { 0x006d, {1, {0x004d }}},
1106  { 0x006e, {1, {0x004e }}},
1107  { 0x006f, {1, {0x004f }}},
1108  { 0x0070, {1, {0x0050 }}},
1109  { 0x0071, {1, {0x0051 }}},
1110  { 0x0072, {1, {0x0052 }}},
1111  { 0x0073, {2, {0x0053, 0x017f }}},
1112  { 0x0074, {1, {0x0054 }}},
1113  { 0x0075, {1, {0x0055 }}},
1114  { 0x0076, {1, {0x0056 }}},
1115  { 0x0077, {1, {0x0057 }}},
1116  { 0x0078, {1, {0x0058 }}},
1117  { 0x0079, {1, {0x0059 }}},
1118  { 0x007a, {1, {0x005a }}},
1119  { 0x00e0, {1, {0x00c0 }}},
1120  { 0x00e1, {1, {0x00c1 }}},
1121  { 0x00e2, {1, {0x00c2 }}},
1122  { 0x00e3, {1, {0x00c3 }}},
1123  { 0x00e4, {1, {0x00c4 }}},
1124  { 0x00e5, {2, {0x212b, 0x00c5 }}},
1125  { 0x00e6, {1, {0x00c6 }}},
1126  { 0x00e7, {1, {0x00c7 }}},
1127  { 0x00e8, {1, {0x00c8 }}},
1128  { 0x00e9, {1, {0x00c9 }}},
1129  { 0x00ea, {1, {0x00ca }}},
1130  { 0x00eb, {1, {0x00cb }}},
1131  { 0x00ec, {1, {0x00cc }}},
1132  { 0x00ed, {1, {0x00cd }}},
1133  { 0x00ee, {1, {0x00ce }}},
1134  { 0x00ef, {1, {0x00cf }}},
1135  { 0x00f0, {1, {0x00d0 }}},
1136  { 0x00f1, {1, {0x00d1 }}},
1137  { 0x00f2, {1, {0x00d2 }}},
1138  { 0x00f3, {1, {0x00d3 }}},
1139  { 0x00f4, {1, {0x00d4 }}},
1140  { 0x00f5, {1, {0x00d5 }}},
1141  { 0x00f6, {1, {0x00d6 }}},
1142  { 0x00f8, {1, {0x00d8 }}},
1143  { 0x00f9, {1, {0x00d9 }}},
1144  { 0x00fa, {1, {0x00da }}},
1145  { 0x00fb, {1, {0x00db }}},
1146  { 0x00fc, {1, {0x00dc }}},
1147  { 0x00fd, {1, {0x00dd }}},
1148  { 0x00fe, {1, {0x00de }}},
1149  { 0x00ff, {1, {0x0178 }}},
1150  { 0x0101, {1, {0x0100 }}},
1151  { 0x0103, {1, {0x0102 }}},
1152  { 0x0105, {1, {0x0104 }}},
1153  { 0x0107, {1, {0x0106 }}},
1154  { 0x0109, {1, {0x0108 }}},
1155  { 0x010b, {1, {0x010a }}},
1156  { 0x010d, {1, {0x010c }}},
1157  { 0x010f, {1, {0x010e }}},
1158  { 0x0111, {1, {0x0110 }}},
1159  { 0x0113, {1, {0x0112 }}},
1160  { 0x0115, {1, {0x0114 }}},
1161  { 0x0117, {1, {0x0116 }}},
1162  { 0x0119, {1, {0x0118 }}},
1163  { 0x011b, {1, {0x011a }}},
1164  { 0x011d, {1, {0x011c }}},
1165  { 0x011f, {1, {0x011e }}},
1166  { 0x0121, {1, {0x0120 }}},
1167  { 0x0123, {1, {0x0122 }}},
1168  { 0x0125, {1, {0x0124 }}},
1169  { 0x0127, {1, {0x0126 }}},
1170  { 0x0129, {1, {0x0128 }}},
1171  { 0x012b, {1, {0x012a }}},
1172  { 0x012d, {1, {0x012c }}},
1173  { 0x012f, {1, {0x012e }}},
1174  { 0x0133, {1, {0x0132 }}},
1175  { 0x0135, {1, {0x0134 }}},
1176  { 0x0137, {1, {0x0136 }}},
1177  { 0x013a, {1, {0x0139 }}},
1178  { 0x013c, {1, {0x013b }}},
1179  { 0x013e, {1, {0x013d }}},
1180  { 0x0140, {1, {0x013f }}},
1181  { 0x0142, {1, {0x0141 }}},
1182  { 0x0144, {1, {0x0143 }}},
1183  { 0x0146, {1, {0x0145 }}},
1184  { 0x0148, {1, {0x0147 }}},
1185  { 0x014b, {1, {0x014a }}},
1186  { 0x014d, {1, {0x014c }}},
1187  { 0x014f, {1, {0x014e }}},
1188  { 0x0151, {1, {0x0150 }}},
1189  { 0x0153, {1, {0x0152 }}},
1190  { 0x0155, {1, {0x0154 }}},
1191  { 0x0157, {1, {0x0156 }}},
1192  { 0x0159, {1, {0x0158 }}},
1193  { 0x015b, {1, {0x015a }}},
1194  { 0x015d, {1, {0x015c }}},
1195  { 0x015f, {1, {0x015e }}},
1196  { 0x0161, {1, {0x0160 }}},
1197  { 0x0163, {1, {0x0162 }}},
1198  { 0x0165, {1, {0x0164 }}},
1199  { 0x0167, {1, {0x0166 }}},
1200  { 0x0169, {1, {0x0168 }}},
1201  { 0x016b, {1, {0x016a }}},
1202  { 0x016d, {1, {0x016c }}},
1203  { 0x016f, {1, {0x016e }}},
1204  { 0x0171, {1, {0x0170 }}},
1205  { 0x0173, {1, {0x0172 }}},
1206  { 0x0175, {1, {0x0174 }}},
1207  { 0x0177, {1, {0x0176 }}},
1208  { 0x017a, {1, {0x0179 }}},
1209  { 0x017c, {1, {0x017b }}},
1210  { 0x017e, {1, {0x017d }}},
1211  { 0x0183, {1, {0x0182 }}},
1212  { 0x0185, {1, {0x0184 }}},
1213  { 0x0188, {1, {0x0187 }}},
1214  { 0x018c, {1, {0x018b }}},
1215  { 0x0192, {1, {0x0191 }}},
1216  { 0x0195, {1, {0x01f6 }}},
1217  { 0x0199, {1, {0x0198 }}},
1218  { 0x019a, {1, {0x023d }}},
1219  { 0x019e, {1, {0x0220 }}},
1220  { 0x01a1, {1, {0x01a0 }}},
1221  { 0x01a3, {1, {0x01a2 }}},
1222  { 0x01a5, {1, {0x01a4 }}},
1223  { 0x01a8, {1, {0x01a7 }}},
1224  { 0x01ad, {1, {0x01ac }}},
1225  { 0x01b0, {1, {0x01af }}},
1226  { 0x01b4, {1, {0x01b3 }}},
1227  { 0x01b6, {1, {0x01b5 }}},
1228  { 0x01b9, {1, {0x01b8 }}},
1229  { 0x01bd, {1, {0x01bc }}},
1230  { 0x01bf, {1, {0x01f7 }}},
1231  { 0x01c6, {2, {0x01c4, 0x01c5 }}},
1232  { 0x01c9, {2, {0x01c7, 0x01c8 }}},
1233  { 0x01cc, {2, {0x01ca, 0x01cb }}},
1234  { 0x01ce, {1, {0x01cd }}},
1235  { 0x01d0, {1, {0x01cf }}},
1236  { 0x01d2, {1, {0x01d1 }}},
1237  { 0x01d4, {1, {0x01d3 }}},
1238  { 0x01d6, {1, {0x01d5 }}},
1239  { 0x01d8, {1, {0x01d7 }}},
1240  { 0x01da, {1, {0x01d9 }}},
1241  { 0x01dc, {1, {0x01db }}},
1242  { 0x01dd, {1, {0x018e }}},
1243  { 0x01df, {1, {0x01de }}},
1244  { 0x01e1, {1, {0x01e0 }}},
1245  { 0x01e3, {1, {0x01e2 }}},
1246  { 0x01e5, {1, {0x01e4 }}},
1247  { 0x01e7, {1, {0x01e6 }}},
1248  { 0x01e9, {1, {0x01e8 }}},
1249  { 0x01eb, {1, {0x01ea }}},
1250  { 0x01ed, {1, {0x01ec }}},
1251  { 0x01ef, {1, {0x01ee }}},
1252  { 0x01f3, {2, {0x01f1, 0x01f2 }}},
1253  { 0x01f5, {1, {0x01f4 }}},
1254  { 0x01f9, {1, {0x01f8 }}},
1255  { 0x01fb, {1, {0x01fa }}},
1256  { 0x01fd, {1, {0x01fc }}},
1257  { 0x01ff, {1, {0x01fe }}},
1258  { 0x0201, {1, {0x0200 }}},
1259  { 0x0203, {1, {0x0202 }}},
1260  { 0x0205, {1, {0x0204 }}},
1261  { 0x0207, {1, {0x0206 }}},
1262  { 0x0209, {1, {0x0208 }}},
1263  { 0x020b, {1, {0x020a }}},
1264  { 0x020d, {1, {0x020c }}},
1265  { 0x020f, {1, {0x020e }}},
1266  { 0x0211, {1, {0x0210 }}},
1267  { 0x0213, {1, {0x0212 }}},
1268  { 0x0215, {1, {0x0214 }}},
1269  { 0x0217, {1, {0x0216 }}},
1270  { 0x0219, {1, {0x0218 }}},
1271  { 0x021b, {1, {0x021a }}},
1272  { 0x021d, {1, {0x021c }}},
1273  { 0x021f, {1, {0x021e }}},
1274  { 0x0223, {1, {0x0222 }}},
1275  { 0x0225, {1, {0x0224 }}},
1276  { 0x0227, {1, {0x0226 }}},
1277  { 0x0229, {1, {0x0228 }}},
1278  { 0x022b, {1, {0x022a }}},
1279  { 0x022d, {1, {0x022c }}},
1280  { 0x022f, {1, {0x022e }}},
1281  { 0x0231, {1, {0x0230 }}},
1282  { 0x0233, {1, {0x0232 }}},
1283  { 0x023c, {1, {0x023b }}},
1284  { 0x0253, {1, {0x0181 }}},
1285  { 0x0254, {1, {0x0186 }}},
1286  { 0x0256, {1, {0x0189 }}},
1287  { 0x0257, {1, {0x018a }}},
1288  { 0x0259, {1, {0x018f }}},
1289  { 0x025b, {1, {0x0190 }}},
1290  { 0x0260, {1, {0x0193 }}},
1291  { 0x0263, {1, {0x0194 }}},
1292  { 0x0268, {1, {0x0197 }}},
1293  { 0x0269, {1, {0x0196 }}},
1294  { 0x026f, {1, {0x019c }}},
1295  { 0x0272, {1, {0x019d }}},
1296  { 0x0275, {1, {0x019f }}},
1297  { 0x0280, {1, {0x01a6 }}},
1298  { 0x0283, {1, {0x01a9 }}},
1299  { 0x0288, {1, {0x01ae }}},
1300  { 0x028a, {1, {0x01b1 }}},
1301  { 0x028b, {1, {0x01b2 }}},
1302  { 0x0292, {1, {0x01b7 }}},
1303  { 0x0294, {1, {0x0241 }}},
1304  { 0x03ac, {1, {0x0386 }}},
1305  { 0x03ad, {1, {0x0388 }}},
1306  { 0x03ae, {1, {0x0389 }}},
1307  { 0x03af, {1, {0x038a }}},
1308  { 0x03b1, {1, {0x0391 }}},
1309  { 0x03b2, {2, {0x0392, 0x03d0 }}},
1310  { 0x03b3, {1, {0x0393 }}},
1311  { 0x03b4, {1, {0x0394 }}},
1312  { 0x03b5, {2, {0x03f5, 0x0395 }}},
1313  { 0x03b6, {1, {0x0396 }}},
1314  { 0x03b7, {1, {0x0397 }}},
1315  { 0x03b8, {3, {0x03f4, 0x0398, 0x03d1 }}},
1316  { 0x03b9, {3, {0x1fbe, 0x0399, 0x0345 }}},
1317  { 0x03ba, {2, {0x03f0, 0x039a }}},
1318  { 0x03bb, {1, {0x039b }}},
1319  { 0x03bc, {2, {0x00b5, 0x039c }}},
1320  { 0x03bd, {1, {0x039d }}},
1321  { 0x03be, {1, {0x039e }}},
1322  { 0x03bf, {1, {0x039f }}},
1323  { 0x03c0, {2, {0x03a0, 0x03d6 }}},
1324  { 0x03c1, {2, {0x03f1, 0x03a1 }}},
1325  { 0x03c3, {2, {0x03a3, 0x03c2 }}},
1326  { 0x03c4, {1, {0x03a4 }}},
1327  { 0x03c5, {1, {0x03a5 }}},
1328  { 0x03c6, {2, {0x03a6, 0x03d5 }}},
1329  { 0x03c7, {1, {0x03a7 }}},
1330  { 0x03c8, {1, {0x03a8 }}},
1331  { 0x03c9, {2, {0x03a9, 0x2126 }}},
1332  { 0x03ca, {1, {0x03aa }}},
1333  { 0x03cb, {1, {0x03ab }}},
1334  { 0x03cc, {1, {0x038c }}},
1335  { 0x03cd, {1, {0x038e }}},
1336  { 0x03ce, {1, {0x038f }}},
1337  { 0x03d9, {1, {0x03d8 }}},
1338  { 0x03db, {1, {0x03da }}},
1339  { 0x03dd, {1, {0x03dc }}},
1340  { 0x03df, {1, {0x03de }}},
1341  { 0x03e1, {1, {0x03e0 }}},
1342  { 0x03e3, {1, {0x03e2 }}},
1343  { 0x03e5, {1, {0x03e4 }}},
1344  { 0x03e7, {1, {0x03e6 }}},
1345  { 0x03e9, {1, {0x03e8 }}},
1346  { 0x03eb, {1, {0x03ea }}},
1347  { 0x03ed, {1, {0x03ec }}},
1348  { 0x03ef, {1, {0x03ee }}},
1349  { 0x03f2, {1, {0x03f9 }}},
1350  { 0x03f8, {1, {0x03f7 }}},
1351  { 0x03fb, {1, {0x03fa }}},
1352  { 0x0430, {1, {0x0410 }}},
1353  { 0x0431, {1, {0x0411 }}},
1354  { 0x0432, {1, {0x0412 }}},
1355  { 0x0433, {1, {0x0413 }}},
1356  { 0x0434, {1, {0x0414 }}},
1357  { 0x0435, {1, {0x0415 }}},
1358  { 0x0436, {1, {0x0416 }}},
1359  { 0x0437, {1, {0x0417 }}},
1360  { 0x0438, {1, {0x0418 }}},
1361  { 0x0439, {1, {0x0419 }}},
1362  { 0x043a, {1, {0x041a }}},
1363  { 0x043b, {1, {0x041b }}},
1364  { 0x043c, {1, {0x041c }}},
1365  { 0x043d, {1, {0x041d }}},
1366  { 0x043e, {1, {0x041e }}},
1367  { 0x043f, {1, {0x041f }}},
1368  { 0x0440, {1, {0x0420 }}},
1369  { 0x0441, {1, {0x0421 }}},
1370  { 0x0442, {1, {0x0422 }}},
1371  { 0x0443, {1, {0x0423 }}},
1372  { 0x0444, {1, {0x0424 }}},
1373  { 0x0445, {1, {0x0425 }}},
1374  { 0x0446, {1, {0x0426 }}},
1375  { 0x0447, {1, {0x0427 }}},
1376  { 0x0448, {1, {0x0428 }}},
1377  { 0x0449, {1, {0x0429 }}},
1378  { 0x044a, {1, {0x042a }}},
1379  { 0x044b, {1, {0x042b }}},
1380  { 0x044c, {1, {0x042c }}},
1381  { 0x044d, {1, {0x042d }}},
1382  { 0x044e, {1, {0x042e }}},
1383  { 0x044f, {1, {0x042f }}},
1384  { 0x0450, {1, {0x0400 }}},
1385  { 0x0451, {1, {0x0401 }}},
1386  { 0x0452, {1, {0x0402 }}},
1387  { 0x0453, {1, {0x0403 }}},
1388  { 0x0454, {1, {0x0404 }}},
1389  { 0x0455, {1, {0x0405 }}},
1390  { 0x0456, {1, {0x0406 }}},
1391  { 0x0457, {1, {0x0407 }}},
1392  { 0x0458, {1, {0x0408 }}},
1393  { 0x0459, {1, {0x0409 }}},
1394  { 0x045a, {1, {0x040a }}},
1395  { 0x045b, {1, {0x040b }}},
1396  { 0x045c, {1, {0x040c }}},
1397  { 0x045d, {1, {0x040d }}},
1398  { 0x045e, {1, {0x040e }}},
1399  { 0x045f, {1, {0x040f }}},
1400  { 0x0461, {1, {0x0460 }}},
1401  { 0x0463, {1, {0x0462 }}},
1402  { 0x0465, {1, {0x0464 }}},
1403  { 0x0467, {1, {0x0466 }}},
1404  { 0x0469, {1, {0x0468 }}},
1405  { 0x046b, {1, {0x046a }}},
1406  { 0x046d, {1, {0x046c }}},
1407  { 0x046f, {1, {0x046e }}},
1408  { 0x0471, {1, {0x0470 }}},
1409  { 0x0473, {1, {0x0472 }}},
1410  { 0x0475, {1, {0x0474 }}},
1411  { 0x0477, {1, {0x0476 }}},
1412  { 0x0479, {1, {0x0478 }}},
1413  { 0x047b, {1, {0x047a }}},
1414  { 0x047d, {1, {0x047c }}},
1415  { 0x047f, {1, {0x047e }}},
1416  { 0x0481, {1, {0x0480 }}},
1417  { 0x048b, {1, {0x048a }}},
1418  { 0x048d, {1, {0x048c }}},
1419  { 0x048f, {1, {0x048e }}},
1420  { 0x0491, {1, {0x0490 }}},
1421  { 0x0493, {1, {0x0492 }}},
1422  { 0x0495, {1, {0x0494 }}},
1423  { 0x0497, {1, {0x0496 }}},
1424  { 0x0499, {1, {0x0498 }}},
1425  { 0x049b, {1, {0x049a }}},
1426  { 0x049d, {1, {0x049c }}},
1427  { 0x049f, {1, {0x049e }}},
1428  { 0x04a1, {1, {0x04a0 }}},
1429  { 0x04a3, {1, {0x04a2 }}},
1430  { 0x04a5, {1, {0x04a4 }}},
1431  { 0x04a7, {1, {0x04a6 }}},
1432  { 0x04a9, {1, {0x04a8 }}},
1433  { 0x04ab, {1, {0x04aa }}},
1434  { 0x04ad, {1, {0x04ac }}},
1435  { 0x04af, {1, {0x04ae }}},
1436  { 0x04b1, {1, {0x04b0 }}},
1437  { 0x04b3, {1, {0x04b2 }}},
1438  { 0x04b5, {1, {0x04b4 }}},
1439  { 0x04b7, {1, {0x04b6 }}},
1440  { 0x04b9, {1, {0x04b8 }}},
1441  { 0x04bb, {1, {0x04ba }}},
1442  { 0x04bd, {1, {0x04bc }}},
1443  { 0x04bf, {1, {0x04be }}},
1444  { 0x04c2, {1, {0x04c1 }}},
1445  { 0x04c4, {1, {0x04c3 }}},
1446  { 0x04c6, {1, {0x04c5 }}},
1447  { 0x04c8, {1, {0x04c7 }}},
1448  { 0x04ca, {1, {0x04c9 }}},
1449  { 0x04cc, {1, {0x04cb }}},
1450  { 0x04ce, {1, {0x04cd }}},
1451  { 0x04d1, {1, {0x04d0 }}},
1452  { 0x04d3, {1, {0x04d2 }}},
1453  { 0x04d5, {1, {0x04d4 }}},
1454  { 0x04d7, {1, {0x04d6 }}},
1455  { 0x04d9, {1, {0x04d8 }}},
1456  { 0x04db, {1, {0x04da }}},
1457  { 0x04dd, {1, {0x04dc }}},
1458  { 0x04df, {1, {0x04de }}},
1459  { 0x04e1, {1, {0x04e0 }}},
1460  { 0x04e3, {1, {0x04e2 }}},
1461  { 0x04e5, {1, {0x04e4 }}},
1462  { 0x04e7, {1, {0x04e6 }}},
1463  { 0x04e9, {1, {0x04e8 }}},
1464  { 0x04eb, {1, {0x04ea }}},
1465  { 0x04ed, {1, {0x04ec }}},
1466  { 0x04ef, {1, {0x04ee }}},
1467  { 0x04f1, {1, {0x04f0 }}},
1468  { 0x04f3, {1, {0x04f2 }}},
1469  { 0x04f5, {1, {0x04f4 }}},
1470  { 0x04f7, {1, {0x04f6 }}},
1471  { 0x04f9, {1, {0x04f8 }}},
1472  { 0x0501, {1, {0x0500 }}},
1473  { 0x0503, {1, {0x0502 }}},
1474  { 0x0505, {1, {0x0504 }}},
1475  { 0x0507, {1, {0x0506 }}},
1476  { 0x0509, {1, {0x0508 }}},
1477  { 0x050b, {1, {0x050a }}},
1478  { 0x050d, {1, {0x050c }}},
1479  { 0x050f, {1, {0x050e }}},
1480  { 0x0561, {1, {0x0531 }}},
1481  { 0x0562, {1, {0x0532 }}},
1482  { 0x0563, {1, {0x0533 }}},
1483  { 0x0564, {1, {0x0534 }}},
1484  { 0x0565, {1, {0x0535 }}},
1485  { 0x0566, {1, {0x0536 }}},
1486  { 0x0567, {1, {0x0537 }}},
1487  { 0x0568, {1, {0x0538 }}},
1488  { 0x0569, {1, {0x0539 }}},
1489  { 0x056a, {1, {0x053a }}},
1490  { 0x056b, {1, {0x053b }}},
1491  { 0x056c, {1, {0x053c }}},
1492  { 0x056d, {1, {0x053d }}},
1493  { 0x056e, {1, {0x053e }}},
1494  { 0x056f, {1, {0x053f }}},
1495  { 0x0570, {1, {0x0540 }}},
1496  { 0x0571, {1, {0x0541 }}},
1497  { 0x0572, {1, {0x0542 }}},
1498  { 0x0573, {1, {0x0543 }}},
1499  { 0x0574, {1, {0x0544 }}},
1500  { 0x0575, {1, {0x0545 }}},
1501  { 0x0576, {1, {0x0546 }}},
1502  { 0x0577, {1, {0x0547 }}},
1503  { 0x0578, {1, {0x0548 }}},
1504  { 0x0579, {1, {0x0549 }}},
1505  { 0x057a, {1, {0x054a }}},
1506  { 0x057b, {1, {0x054b }}},
1507  { 0x057c, {1, {0x054c }}},
1508  { 0x057d, {1, {0x054d }}},
1509  { 0x057e, {1, {0x054e }}},
1510  { 0x057f, {1, {0x054f }}},
1511  { 0x0580, {1, {0x0550 }}},
1512  { 0x0581, {1, {0x0551 }}},
1513  { 0x0582, {1, {0x0552 }}},
1514  { 0x0583, {1, {0x0553 }}},
1515  { 0x0584, {1, {0x0554 }}},
1516  { 0x0585, {1, {0x0555 }}},
1517  { 0x0586, {1, {0x0556 }}},
1518  { 0x1e01, {1, {0x1e00 }}},
1519  { 0x1e03, {1, {0x1e02 }}},
1520  { 0x1e05, {1, {0x1e04 }}},
1521  { 0x1e07, {1, {0x1e06 }}},
1522  { 0x1e09, {1, {0x1e08 }}},
1523  { 0x1e0b, {1, {0x1e0a }}},
1524  { 0x1e0d, {1, {0x1e0c }}},
1525  { 0x1e0f, {1, {0x1e0e }}},
1526  { 0x1e11, {1, {0x1e10 }}},
1527  { 0x1e13, {1, {0x1e12 }}},
1528  { 0x1e15, {1, {0x1e14 }}},
1529  { 0x1e17, {1, {0x1e16 }}},
1530  { 0x1e19, {1, {0x1e18 }}},
1531  { 0x1e1b, {1, {0x1e1a }}},
1532  { 0x1e1d, {1, {0x1e1c }}},
1533  { 0x1e1f, {1, {0x1e1e }}},
1534  { 0x1e21, {1, {0x1e20 }}},
1535  { 0x1e23, {1, {0x1e22 }}},
1536  { 0x1e25, {1, {0x1e24 }}},
1537  { 0x1e27, {1, {0x1e26 }}},
1538  { 0x1e29, {1, {0x1e28 }}},
1539  { 0x1e2b, {1, {0x1e2a }}},
1540  { 0x1e2d, {1, {0x1e2c }}},
1541  { 0x1e2f, {1, {0x1e2e }}},
1542  { 0x1e31, {1, {0x1e30 }}},
1543  { 0x1e33, {1, {0x1e32 }}},
1544  { 0x1e35, {1, {0x1e34 }}},
1545  { 0x1e37, {1, {0x1e36 }}},
1546  { 0x1e39, {1, {0x1e38 }}},
1547  { 0x1e3b, {1, {0x1e3a }}},
1548  { 0x1e3d, {1, {0x1e3c }}},
1549  { 0x1e3f, {1, {0x1e3e }}},
1550  { 0x1e41, {1, {0x1e40 }}},
1551  { 0x1e43, {1, {0x1e42 }}},
1552  { 0x1e45, {1, {0x1e44 }}},
1553  { 0x1e47, {1, {0x1e46 }}},
1554  { 0x1e49, {1, {0x1e48 }}},
1555  { 0x1e4b, {1, {0x1e4a }}},
1556  { 0x1e4d, {1, {0x1e4c }}},
1557  { 0x1e4f, {1, {0x1e4e }}},
1558  { 0x1e51, {1, {0x1e50 }}},
1559  { 0x1e53, {1, {0x1e52 }}},
1560  { 0x1e55, {1, {0x1e54 }}},
1561  { 0x1e57, {1, {0x1e56 }}},
1562  { 0x1e59, {1, {0x1e58 }}},
1563  { 0x1e5b, {1, {0x1e5a }}},
1564  { 0x1e5d, {1, {0x1e5c }}},
1565  { 0x1e5f, {1, {0x1e5e }}},
1566  { 0x1e61, {2, {0x1e9b, 0x1e60 }}},
1567  { 0x1e63, {1, {0x1e62 }}},
1568  { 0x1e65, {1, {0x1e64 }}},
1569  { 0x1e67, {1, {0x1e66 }}},
1570  { 0x1e69, {1, {0x1e68 }}},
1571  { 0x1e6b, {1, {0x1e6a }}},
1572  { 0x1e6d, {1, {0x1e6c }}},
1573  { 0x1e6f, {1, {0x1e6e }}},
1574  { 0x1e71, {1, {0x1e70 }}},
1575  { 0x1e73, {1, {0x1e72 }}},
1576  { 0x1e75, {1, {0x1e74 }}},
1577  { 0x1e77, {1, {0x1e76 }}},
1578  { 0x1e79, {1, {0x1e78 }}},
1579  { 0x1e7b, {1, {0x1e7a }}},
1580  { 0x1e7d, {1, {0x1e7c }}},
1581  { 0x1e7f, {1, {0x1e7e }}},
1582  { 0x1e81, {1, {0x1e80 }}},
1583  { 0x1e83, {1, {0x1e82 }}},
1584  { 0x1e85, {1, {0x1e84 }}},
1585  { 0x1e87, {1, {0x1e86 }}},
1586  { 0x1e89, {1, {0x1e88 }}},
1587  { 0x1e8b, {1, {0x1e8a }}},
1588  { 0x1e8d, {1, {0x1e8c }}},
1589  { 0x1e8f, {1, {0x1e8e }}},
1590  { 0x1e91, {1, {0x1e90 }}},
1591  { 0x1e93, {1, {0x1e92 }}},
1592  { 0x1e95, {1, {0x1e94 }}},
1593  { 0x1ea1, {1, {0x1ea0 }}},
1594  { 0x1ea3, {1, {0x1ea2 }}},
1595  { 0x1ea5, {1, {0x1ea4 }}},
1596  { 0x1ea7, {1, {0x1ea6 }}},
1597  { 0x1ea9, {1, {0x1ea8 }}},
1598  { 0x1eab, {1, {0x1eaa }}},
1599  { 0x1ead, {1, {0x1eac }}},
1600  { 0x1eaf, {1, {0x1eae }}},
1601  { 0x1eb1, {1, {0x1eb0 }}},
1602  { 0x1eb3, {1, {0x1eb2 }}},
1603  { 0x1eb5, {1, {0x1eb4 }}},
1604  { 0x1eb7, {1, {0x1eb6 }}},
1605  { 0x1eb9, {1, {0x1eb8 }}},
1606  { 0x1ebb, {1, {0x1eba }}},
1607  { 0x1ebd, {1, {0x1ebc }}},
1608  { 0x1ebf, {1, {0x1ebe }}},
1609  { 0x1ec1, {1, {0x1ec0 }}},
1610  { 0x1ec3, {1, {0x1ec2 }}},
1611  { 0x1ec5, {1, {0x1ec4 }}},
1612  { 0x1ec7, {1, {0x1ec6 }}},
1613  { 0x1ec9, {1, {0x1ec8 }}},
1614  { 0x1ecb, {1, {0x1eca }}},
1615  { 0x1ecd, {1, {0x1ecc }}},
1616  { 0x1ecf, {1, {0x1ece }}},
1617  { 0x1ed1, {1, {0x1ed0 }}},
1618  { 0x1ed3, {1, {0x1ed2 }}},
1619  { 0x1ed5, {1, {0x1ed4 }}},
1620  { 0x1ed7, {1, {0x1ed6 }}},
1621  { 0x1ed9, {1, {0x1ed8 }}},
1622  { 0x1edb, {1, {0x1eda }}},
1623  { 0x1edd, {1, {0x1edc }}},
1624  { 0x1edf, {1, {0x1ede }}},
1625  { 0x1ee1, {1, {0x1ee0 }}},
1626  { 0x1ee3, {1, {0x1ee2 }}},
1627  { 0x1ee5, {1, {0x1ee4 }}},
1628  { 0x1ee7, {1, {0x1ee6 }}},
1629  { 0x1ee9, {1, {0x1ee8 }}},
1630  { 0x1eeb, {1, {0x1eea }}},
1631  { 0x1eed, {1, {0x1eec }}},
1632  { 0x1eef, {1, {0x1eee }}},
1633  { 0x1ef1, {1, {0x1ef0 }}},
1634  { 0x1ef3, {1, {0x1ef2 }}},
1635  { 0x1ef5, {1, {0x1ef4 }}},
1636  { 0x1ef7, {1, {0x1ef6 }}},
1637  { 0x1ef9, {1, {0x1ef8 }}},
1638  { 0x1f00, {1, {0x1f08 }}},
1639  { 0x1f01, {1, {0x1f09 }}},
1640  { 0x1f02, {1, {0x1f0a }}},
1641  { 0x1f03, {1, {0x1f0b }}},
1642  { 0x1f04, {1, {0x1f0c }}},
1643  { 0x1f05, {1, {0x1f0d }}},
1644  { 0x1f06, {1, {0x1f0e }}},
1645  { 0x1f07, {1, {0x1f0f }}},
1646  { 0x1f10, {1, {0x1f18 }}},
1647  { 0x1f11, {1, {0x1f19 }}},
1648  { 0x1f12, {1, {0x1f1a }}},
1649  { 0x1f13, {1, {0x1f1b }}},
1650  { 0x1f14, {1, {0x1f1c }}},
1651  { 0x1f15, {1, {0x1f1d }}},
1652  { 0x1f20, {1, {0x1f28 }}},
1653  { 0x1f21, {1, {0x1f29 }}},
1654  { 0x1f22, {1, {0x1f2a }}},
1655  { 0x1f23, {1, {0x1f2b }}},
1656  { 0x1f24, {1, {0x1f2c }}},
1657  { 0x1f25, {1, {0x1f2d }}},
1658  { 0x1f26, {1, {0x1f2e }}},
1659  { 0x1f27, {1, {0x1f2f }}},
1660  { 0x1f30, {1, {0x1f38 }}},
1661  { 0x1f31, {1, {0x1f39 }}},
1662  { 0x1f32, {1, {0x1f3a }}},
1663  { 0x1f33, {1, {0x1f3b }}},
1664  { 0x1f34, {1, {0x1f3c }}},
1665  { 0x1f35, {1, {0x1f3d }}},
1666  { 0x1f36, {1, {0x1f3e }}},
1667  { 0x1f37, {1, {0x1f3f }}},
1668  { 0x1f40, {1, {0x1f48 }}},
1669  { 0x1f41, {1, {0x1f49 }}},
1670  { 0x1f42, {1, {0x1f4a }}},
1671  { 0x1f43, {1, {0x1f4b }}},
1672  { 0x1f44, {1, {0x1f4c }}},
1673  { 0x1f45, {1, {0x1f4d }}},
1674  { 0x1f51, {1, {0x1f59 }}},
1675  { 0x1f53, {1, {0x1f5b }}},
1676  { 0x1f55, {1, {0x1f5d }}},
1677  { 0x1f57, {1, {0x1f5f }}},
1678  { 0x1f60, {1, {0x1f68 }}},
1679  { 0x1f61, {1, {0x1f69 }}},
1680  { 0x1f62, {1, {0x1f6a }}},
1681  { 0x1f63, {1, {0x1f6b }}},
1682  { 0x1f64, {1, {0x1f6c }}},
1683  { 0x1f65, {1, {0x1f6d }}},
1684  { 0x1f66, {1, {0x1f6e }}},
1685  { 0x1f67, {1, {0x1f6f }}},
1686  { 0x1f70, {1, {0x1fba }}},
1687  { 0x1f71, {1, {0x1fbb }}},
1688  { 0x1f72, {1, {0x1fc8 }}},
1689  { 0x1f73, {1, {0x1fc9 }}},
1690  { 0x1f74, {1, {0x1fca }}},
1691  { 0x1f75, {1, {0x1fcb }}},
1692  { 0x1f76, {1, {0x1fda }}},
1693  { 0x1f77, {1, {0x1fdb }}},
1694  { 0x1f78, {1, {0x1ff8 }}},
1695  { 0x1f79, {1, {0x1ff9 }}},
1696  { 0x1f7a, {1, {0x1fea }}},
1697  { 0x1f7b, {1, {0x1feb }}},
1698  { 0x1f7c, {1, {0x1ffa }}},
1699  { 0x1f7d, {1, {0x1ffb }}},
1700  { 0x1fb0, {1, {0x1fb8 }}},
1701  { 0x1fb1, {1, {0x1fb9 }}},
1702  { 0x1fd0, {1, {0x1fd8 }}},
1703  { 0x1fd1, {1, {0x1fd9 }}},
1704  { 0x1fe0, {1, {0x1fe8 }}},
1705  { 0x1fe1, {1, {0x1fe9 }}},
1706  { 0x1fe5, {1, {0x1fec }}},
1707  { 0x2170, {1, {0x2160 }}},
1708  { 0x2171, {1, {0x2161 }}},
1709  { 0x2172, {1, {0x2162 }}},
1710  { 0x2173, {1, {0x2163 }}},
1711  { 0x2174, {1, {0x2164 }}},
1712  { 0x2175, {1, {0x2165 }}},
1713  { 0x2176, {1, {0x2166 }}},
1714  { 0x2177, {1, {0x2167 }}},
1715  { 0x2178, {1, {0x2168 }}},
1716  { 0x2179, {1, {0x2169 }}},
1717  { 0x217a, {1, {0x216a }}},
1718  { 0x217b, {1, {0x216b }}},
1719  { 0x217c, {1, {0x216c }}},
1720  { 0x217d, {1, {0x216d }}},
1721  { 0x217e, {1, {0x216e }}},
1722  { 0x217f, {1, {0x216f }}},
1723  { 0x24d0, {1, {0x24b6 }}},
1724  { 0x24d1, {1, {0x24b7 }}},
1725  { 0x24d2, {1, {0x24b8 }}},
1726  { 0x24d3, {1, {0x24b9 }}},
1727  { 0x24d4, {1, {0x24ba }}},
1728  { 0x24d5, {1, {0x24bb }}},
1729  { 0x24d6, {1, {0x24bc }}},
1730  { 0x24d7, {1, {0x24bd }}},
1731  { 0x24d8, {1, {0x24be }}},
1732  { 0x24d9, {1, {0x24bf }}},
1733  { 0x24da, {1, {0x24c0 }}},
1734  { 0x24db, {1, {0x24c1 }}},
1735  { 0x24dc, {1, {0x24c2 }}},
1736  { 0x24dd, {1, {0x24c3 }}},
1737  { 0x24de, {1, {0x24c4 }}},
1738  { 0x24df, {1, {0x24c5 }}},
1739  { 0x24e0, {1, {0x24c6 }}},
1740  { 0x24e1, {1, {0x24c7 }}},
1741  { 0x24e2, {1, {0x24c8 }}},
1742  { 0x24e3, {1, {0x24c9 }}},
1743  { 0x24e4, {1, {0x24ca }}},
1744  { 0x24e5, {1, {0x24cb }}},
1745  { 0x24e6, {1, {0x24cc }}},
1746  { 0x24e7, {1, {0x24cd }}},
1747  { 0x24e8, {1, {0x24ce }}},
1748  { 0x24e9, {1, {0x24cf }}},
1749  { 0x2c30, {1, {0x2c00 }}},
1750  { 0x2c31, {1, {0x2c01 }}},
1751  { 0x2c32, {1, {0x2c02 }}},
1752  { 0x2c33, {1, {0x2c03 }}},
1753  { 0x2c34, {1, {0x2c04 }}},
1754  { 0x2c35, {1, {0x2c05 }}},
1755  { 0x2c36, {1, {0x2c06 }}},
1756  { 0x2c37, {1, {0x2c07 }}},
1757  { 0x2c38, {1, {0x2c08 }}},
1758  { 0x2c39, {1, {0x2c09 }}},
1759  { 0x2c3a, {1, {0x2c0a }}},
1760  { 0x2c3b, {1, {0x2c0b }}},
1761  { 0x2c3c, {1, {0x2c0c }}},
1762  { 0x2c3d, {1, {0x2c0d }}},
1763  { 0x2c3e, {1, {0x2c0e }}},
1764  { 0x2c3f, {1, {0x2c0f }}},
1765  { 0x2c40, {1, {0x2c10 }}},
1766  { 0x2c41, {1, {0x2c11 }}},
1767  { 0x2c42, {1, {0x2c12 }}},
1768  { 0x2c43, {1, {0x2c13 }}},
1769  { 0x2c44, {1, {0x2c14 }}},
1770  { 0x2c45, {1, {0x2c15 }}},
1771  { 0x2c46, {1, {0x2c16 }}},
1772  { 0x2c47, {1, {0x2c17 }}},
1773  { 0x2c48, {1, {0x2c18 }}},
1774  { 0x2c49, {1, {0x2c19 }}},
1775  { 0x2c4a, {1, {0x2c1a }}},
1776  { 0x2c4b, {1, {0x2c1b }}},
1777  { 0x2c4c, {1, {0x2c1c }}},
1778  { 0x2c4d, {1, {0x2c1d }}},
1779  { 0x2c4e, {1, {0x2c1e }}},
1780  { 0x2c4f, {1, {0x2c1f }}},
1781  { 0x2c50, {1, {0x2c20 }}},
1782  { 0x2c51, {1, {0x2c21 }}},
1783  { 0x2c52, {1, {0x2c22 }}},
1784  { 0x2c53, {1, {0x2c23 }}},
1785  { 0x2c54, {1, {0x2c24 }}},
1786  { 0x2c55, {1, {0x2c25 }}},
1787  { 0x2c56, {1, {0x2c26 }}},
1788  { 0x2c57, {1, {0x2c27 }}},
1789  { 0x2c58, {1, {0x2c28 }}},
1790  { 0x2c59, {1, {0x2c29 }}},
1791  { 0x2c5a, {1, {0x2c2a }}},
1792  { 0x2c5b, {1, {0x2c2b }}},
1793  { 0x2c5c, {1, {0x2c2c }}},
1794  { 0x2c5d, {1, {0x2c2d }}},
1795  { 0x2c5e, {1, {0x2c2e }}},
1796  { 0x2c81, {1, {0x2c80 }}},
1797  { 0x2c83, {1, {0x2c82 }}},
1798  { 0x2c85, {1, {0x2c84 }}},
1799  { 0x2c87, {1, {0x2c86 }}},
1800  { 0x2c89, {1, {0x2c88 }}},
1801  { 0x2c8b, {1, {0x2c8a }}},
1802  { 0x2c8d, {1, {0x2c8c }}},
1803  { 0x2c8f, {1, {0x2c8e }}},
1804  { 0x2c91, {1, {0x2c90 }}},
1805  { 0x2c93, {1, {0x2c92 }}},
1806  { 0x2c95, {1, {0x2c94 }}},
1807  { 0x2c97, {1, {0x2c96 }}},
1808  { 0x2c99, {1, {0x2c98 }}},
1809  { 0x2c9b, {1, {0x2c9a }}},
1810  { 0x2c9d, {1, {0x2c9c }}},
1811  { 0x2c9f, {1, {0x2c9e }}},
1812  { 0x2ca1, {1, {0x2ca0 }}},
1813  { 0x2ca3, {1, {0x2ca2 }}},
1814  { 0x2ca5, {1, {0x2ca4 }}},
1815  { 0x2ca7, {1, {0x2ca6 }}},
1816  { 0x2ca9, {1, {0x2ca8 }}},
1817  { 0x2cab, {1, {0x2caa }}},
1818  { 0x2cad, {1, {0x2cac }}},
1819  { 0x2caf, {1, {0x2cae }}},
1820  { 0x2cb1, {1, {0x2cb0 }}},
1821  { 0x2cb3, {1, {0x2cb2 }}},
1822  { 0x2cb5, {1, {0x2cb4 }}},
1823  { 0x2cb7, {1, {0x2cb6 }}},
1824  { 0x2cb9, {1, {0x2cb8 }}},
1825  { 0x2cbb, {1, {0x2cba }}},
1826  { 0x2cbd, {1, {0x2cbc }}},
1827  { 0x2cbf, {1, {0x2cbe }}},
1828  { 0x2cc1, {1, {0x2cc0 }}},
1829  { 0x2cc3, {1, {0x2cc2 }}},
1830  { 0x2cc5, {1, {0x2cc4 }}},
1831  { 0x2cc7, {1, {0x2cc6 }}},
1832  { 0x2cc9, {1, {0x2cc8 }}},
1833  { 0x2ccb, {1, {0x2cca }}},
1834  { 0x2ccd, {1, {0x2ccc }}},
1835  { 0x2ccf, {1, {0x2cce }}},
1836  { 0x2cd1, {1, {0x2cd0 }}},
1837  { 0x2cd3, {1, {0x2cd2 }}},
1838  { 0x2cd5, {1, {0x2cd4 }}},
1839  { 0x2cd7, {1, {0x2cd6 }}},
1840  { 0x2cd9, {1, {0x2cd8 }}},
1841  { 0x2cdb, {1, {0x2cda }}},
1842  { 0x2cdd, {1, {0x2cdc }}},
1843  { 0x2cdf, {1, {0x2cde }}},
1844  { 0x2ce1, {1, {0x2ce0 }}},
1845  { 0x2ce3, {1, {0x2ce2 }}},
1846  { 0x2d00, {1, {0x10a0 }}},
1847  { 0x2d01, {1, {0x10a1 }}},
1848  { 0x2d02, {1, {0x10a2 }}},
1849  { 0x2d03, {1, {0x10a3 }}},
1850  { 0x2d04, {1, {0x10a4 }}},
1851  { 0x2d05, {1, {0x10a5 }}},
1852  { 0x2d06, {1, {0x10a6 }}},
1853  { 0x2d07, {1, {0x10a7 }}},
1854  { 0x2d08, {1, {0x10a8 }}},
1855  { 0x2d09, {1, {0x10a9 }}},
1856  { 0x2d0a, {1, {0x10aa }}},
1857  { 0x2d0b, {1, {0x10ab }}},
1858  { 0x2d0c, {1, {0x10ac }}},
1859  { 0x2d0d, {1, {0x10ad }}},
1860  { 0x2d0e, {1, {0x10ae }}},
1861  { 0x2d0f, {1, {0x10af }}},
1862  { 0x2d10, {1, {0x10b0 }}},
1863  { 0x2d11, {1, {0x10b1 }}},
1864  { 0x2d12, {1, {0x10b2 }}},
1865  { 0x2d13, {1, {0x10b3 }}},
1866  { 0x2d14, {1, {0x10b4 }}},
1867  { 0x2d15, {1, {0x10b5 }}},
1868  { 0x2d16, {1, {0x10b6 }}},
1869  { 0x2d17, {1, {0x10b7 }}},
1870  { 0x2d18, {1, {0x10b8 }}},
1871  { 0x2d19, {1, {0x10b9 }}},
1872  { 0x2d1a, {1, {0x10ba }}},
1873  { 0x2d1b, {1, {0x10bb }}},
1874  { 0x2d1c, {1, {0x10bc }}},
1875  { 0x2d1d, {1, {0x10bd }}},
1876  { 0x2d1e, {1, {0x10be }}},
1877  { 0x2d1f, {1, {0x10bf }}},
1878  { 0x2d20, {1, {0x10c0 }}},
1879  { 0x2d21, {1, {0x10c1 }}},
1880  { 0x2d22, {1, {0x10c2 }}},
1881  { 0x2d23, {1, {0x10c3 }}},
1882  { 0x2d24, {1, {0x10c4 }}},
1883  { 0x2d25, {1, {0x10c5 }}},
1884  { 0xff41, {1, {0xff21 }}},
1885  { 0xff42, {1, {0xff22 }}},
1886  { 0xff43, {1, {0xff23 }}},
1887  { 0xff44, {1, {0xff24 }}},
1888  { 0xff45, {1, {0xff25 }}},
1889  { 0xff46, {1, {0xff26 }}},
1890  { 0xff47, {1, {0xff27 }}},
1891  { 0xff48, {1, {0xff28 }}},
1892  { 0xff49, {1, {0xff29 }}},
1893  { 0xff4a, {1, {0xff2a }}},
1894  { 0xff4b, {1, {0xff2b }}},
1895  { 0xff4c, {1, {0xff2c }}},
1896  { 0xff4d, {1, {0xff2d }}},
1897  { 0xff4e, {1, {0xff2e }}},
1898  { 0xff4f, {1, {0xff2f }}},
1899  { 0xff50, {1, {0xff30 }}},
1900  { 0xff51, {1, {0xff31 }}},
1901  { 0xff52, {1, {0xff32 }}},
1902  { 0xff53, {1, {0xff33 }}},
1903  { 0xff54, {1, {0xff34 }}},
1904  { 0xff55, {1, {0xff35 }}},
1905  { 0xff56, {1, {0xff36 }}},
1906  { 0xff57, {1, {0xff37 }}},
1907  { 0xff58, {1, {0xff38 }}},
1908  { 0xff59, {1, {0xff39 }}},
1909  { 0xff5a, {1, {0xff3a }}},
1910  { 0x10428, {1, {0x10400 }}},
1911  { 0x10429, {1, {0x10401 }}},
1912  { 0x1042a, {1, {0x10402 }}},
1913  { 0x1042b, {1, {0x10403 }}},
1914  { 0x1042c, {1, {0x10404 }}},
1915  { 0x1042d, {1, {0x10405 }}},
1916  { 0x1042e, {1, {0x10406 }}},
1917  { 0x1042f, {1, {0x10407 }}},
1918  { 0x10430, {1, {0x10408 }}},
1919  { 0x10431, {1, {0x10409 }}},
1920  { 0x10432, {1, {0x1040a }}},
1921  { 0x10433, {1, {0x1040b }}},
1922  { 0x10434, {1, {0x1040c }}},
1923  { 0x10435, {1, {0x1040d }}},
1924  { 0x10436, {1, {0x1040e }}},
1925  { 0x10437, {1, {0x1040f }}},
1926  { 0x10438, {1, {0x10410 }}},
1927  { 0x10439, {1, {0x10411 }}},
1928  { 0x1043a, {1, {0x10412 }}},
1929  { 0x1043b, {1, {0x10413 }}},
1930  { 0x1043c, {1, {0x10414 }}},
1931  { 0x1043d, {1, {0x10415 }}},
1932  { 0x1043e, {1, {0x10416 }}},
1933  { 0x1043f, {1, {0x10417 }}},
1934  { 0x10440, {1, {0x10418 }}},
1935  { 0x10441, {1, {0x10419 }}},
1936  { 0x10442, {1, {0x1041a }}},
1937  { 0x10443, {1, {0x1041b }}},
1938  { 0x10444, {1, {0x1041c }}},
1939  { 0x10445, {1, {0x1041d }}},
1940  { 0x10446, {1, {0x1041e }}},
1941  { 0x10447, {1, {0x1041f }}},
1942  { 0x10448, {1, {0x10420 }}},
1943  { 0x10449, {1, {0x10421 }}},
1944  { 0x1044a, {1, {0x10422 }}},
1945  { 0x1044b, {1, {0x10423 }}},
1946  { 0x1044c, {1, {0x10424 }}},
1947  { 0x1044d, {1, {0x10425 }}},
1948  { 0x1044e, {1, {0x10426 }}},
1949  { 0x1044f, {1, {0x10427 }}}
1950 };
1951 
1953  { 0x0069, {1, {0x0049 }}}
1954 };
1955 
1957  { {0x0061, 0x02be}, {1, {0x1e9a }}},
1958  { {0x0066, 0x0066}, {1, {0xfb00 }}},
1959  { {0x0066, 0x0069}, {1, {0xfb01 }}},
1960  { {0x0066, 0x006c}, {1, {0xfb02 }}},
1961  { {0x0068, 0x0331}, {1, {0x1e96 }}},
1962  { {0x006a, 0x030c}, {1, {0x01f0 }}},
1963  { {0x0073, 0x0073}, {1, {0x00df }}},
1964  { {0x0073, 0x0074}, {2, {0xfb05, 0xfb06 }}},
1965  { {0x0074, 0x0308}, {1, {0x1e97 }}},
1966  { {0x0077, 0x030a}, {1, {0x1e98 }}},
1967  { {0x0079, 0x030a}, {1, {0x1e99 }}},
1968  { {0x02bc, 0x006e}, {1, {0x0149 }}},
1969  { {0x03ac, 0x03b9}, {1, {0x1fb4 }}},
1970  { {0x03ae, 0x03b9}, {1, {0x1fc4 }}},
1971  { {0x03b1, 0x0342}, {1, {0x1fb6 }}},
1972  { {0x03b1, 0x03b9}, {2, {0x1fb3, 0x1fbc }}},
1973  { {0x03b7, 0x0342}, {1, {0x1fc6 }}},
1974  { {0x03b7, 0x03b9}, {2, {0x1fc3, 0x1fcc }}},
1975  { {0x03b9, 0x0342}, {1, {0x1fd6 }}},
1976  { {0x03c1, 0x0313}, {1, {0x1fe4 }}},
1977  { {0x03c5, 0x0313}, {1, {0x1f50 }}},
1978  { {0x03c5, 0x0342}, {1, {0x1fe6 }}},
1979  { {0x03c9, 0x0342}, {1, {0x1ff6 }}},
1980  { {0x03c9, 0x03b9}, {2, {0x1ff3, 0x1ffc }}},
1981  { {0x03ce, 0x03b9}, {1, {0x1ff4 }}},
1982  { {0x0565, 0x0582}, {1, {0x0587 }}},
1983  { {0x0574, 0x0565}, {1, {0xfb14 }}},
1984  { {0x0574, 0x056b}, {1, {0xfb15 }}},
1985  { {0x0574, 0x056d}, {1, {0xfb17 }}},
1986  { {0x0574, 0x0576}, {1, {0xfb13 }}},
1987  { {0x057e, 0x0576}, {1, {0xfb16 }}},
1988  { {0x1f00, 0x03b9}, {2, {0x1f88, 0x1f80 }}},
1989  { {0x1f01, 0x03b9}, {2, {0x1f81, 0x1f89 }}},
1990  { {0x1f02, 0x03b9}, {2, {0x1f82, 0x1f8a }}},
1991  { {0x1f03, 0x03b9}, {2, {0x1f83, 0x1f8b }}},
1992  { {0x1f04, 0x03b9}, {2, {0x1f84, 0x1f8c }}},
1993  { {0x1f05, 0x03b9}, {2, {0x1f85, 0x1f8d }}},
1994  { {0x1f06, 0x03b9}, {2, {0x1f86, 0x1f8e }}},
1995  { {0x1f07, 0x03b9}, {2, {0x1f87, 0x1f8f }}},
1996  { {0x1f20, 0x03b9}, {2, {0x1f90, 0x1f98 }}},
1997  { {0x1f21, 0x03b9}, {2, {0x1f91, 0x1f99 }}},
1998  { {0x1f22, 0x03b9}, {2, {0x1f92, 0x1f9a }}},
1999  { {0x1f23, 0x03b9}, {2, {0x1f93, 0x1f9b }}},
2000  { {0x1f24, 0x03b9}, {2, {0x1f94, 0x1f9c }}},
2001  { {0x1f25, 0x03b9}, {2, {0x1f95, 0x1f9d }}},
2002  { {0x1f26, 0x03b9}, {2, {0x1f96, 0x1f9e }}},
2003  { {0x1f27, 0x03b9}, {2, {0x1f97, 0x1f9f }}},
2004  { {0x1f60, 0x03b9}, {2, {0x1fa0, 0x1fa8 }}},
2005  { {0x1f61, 0x03b9}, {2, {0x1fa1, 0x1fa9 }}},
2006  { {0x1f62, 0x03b9}, {2, {0x1fa2, 0x1faa }}},
2007  { {0x1f63, 0x03b9}, {2, {0x1fa3, 0x1fab }}},
2008  { {0x1f64, 0x03b9}, {2, {0x1fa4, 0x1fac }}},
2009  { {0x1f65, 0x03b9}, {2, {0x1fa5, 0x1fad }}},
2010  { {0x1f66, 0x03b9}, {2, {0x1fa6, 0x1fae }}},
2011  { {0x1f67, 0x03b9}, {2, {0x1fa7, 0x1faf }}},
2012  { {0x1f70, 0x03b9}, {1, {0x1fb2 }}},
2013  { {0x1f74, 0x03b9}, {1, {0x1fc2 }}},
2014  { {0x1f7c, 0x03b9}, {1, {0x1ff2 }}}
2015 };
2016 
2018  { {0x0069, 0x0307}, {1, {0x0130 }}}
2019 };
2020 
2022  { {0x0066, 0x0066, 0x0069}, {1, {0xfb03 }}},
2023  { {0x0066, 0x0066, 0x006c}, {1, {0xfb04 }}},
2024  { {0x03b1, 0x0342, 0x03b9}, {1, {0x1fb7 }}},
2025  { {0x03b7, 0x0342, 0x03b9}, {1, {0x1fc7 }}},
2026  { {0x03b9, 0x0308, 0x0300}, {1, {0x1fd2 }}},
2027  { {0x03b9, 0x0308, 0x0301}, {2, {0x0390, 0x1fd3 }}},
2028  { {0x03b9, 0x0308, 0x0342}, {1, {0x1fd7 }}},
2029  { {0x03c5, 0x0308, 0x0300}, {1, {0x1fe2 }}},
2030  { {0x03c5, 0x0308, 0x0301}, {2, {0x03b0, 0x1fe3 }}},
2031  { {0x03c5, 0x0308, 0x0342}, {1, {0x1fe7 }}},
2032  { {0x03c5, 0x0313, 0x0300}, {1, {0x1f52 }}},
2033  { {0x03c5, 0x0313, 0x0301}, {1, {0x1f54 }}},
2034  { {0x03c5, 0x0313, 0x0342}, {1, {0x1f56 }}},
2035  { {0x03c9, 0x0342, 0x03b9}, {1, {0x1ff7 }}}
2036 };
2037 
2038 #define numberof(array) (int)(sizeof(array) / sizeof((array)[0]))
2039 #define CODE_RANGES_NUM numberof(CodeRanges)
2040 
2041 extern int
2043 {
2044  if (
2046  ctype <= ONIGENC_MAX_STD_CTYPE &&
2047 #endif
2048  code < 256) {
2049  return ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(code, ctype);
2050  }
2051 
2052  if (ctype >= CODE_RANGES_NUM) {
2053  return ONIGERR_TYPE_BUG;
2054  }
2055 
2056  return onig_is_in_code_range((UChar* )CodeRanges[ctype], code);
2057 }
2058 
2059 
2060 extern int
2062 {
2063  if (ctype >= CODE_RANGES_NUM) {
2064  return ONIGERR_TYPE_BUG;
2065  }
2066 
2067  *ranges = CodeRanges[ctype];
2068 
2069  return 0;
2070 }
2071 
2072 extern int
2074  const OnigCodePoint* ranges[],
2076 {
2077  *sb_out = 0x00;
2078  return onigenc_unicode_ctype_code_range(ctype, ranges);
2079 }
2080 
2081 #include "ruby/st.h"
2082 
2083 #define PROPERTY_NAME_MAX_SIZE MAX_WORD_LENGTH
2084 
2085 extern int
2087 {
2088  int len;
2089  int ctype;
2091  UChar *p;
2093 
2094  len = 0;
2095  for (p = name; p < end; p += enclen(enc, p, end)) {
2096  code = ONIGENC_MBC_TO_CODE(enc, p, end);
2097  if (code == ' ' || code == '-' || code == '_')
2098  continue;
2099  if (code >= 0x80)
2101 
2102  buf[len++] = (UChar )TOLOWER((unsigned char)code);
2103  if (len >= PROPERTY_NAME_MAX_SIZE)
2105  }
2106 
2107  buf[len] = 0;
2108 
2109  if ((ctype = uniname2ctype(buf, len)) < 0) {
2111  }
2112 
2113  return ctype;
2114 }
2115 
2116 
2117 static int
2119 {
2120  if (x[0] == y[0] && x[1] == y[1]) return 0;
2121  return 1;
2122 }
2123 
2124 static st_index_t
2126 {
2127  return (st_index_t )(x[0] + x[1]);
2128 }
2129 
2130 static const struct st_hash_type type_code2_hash = {
2131  code2_cmp,
2132  code2_hash,
2133 };
2134 
2135 static int
2137 {
2138  if (x[0] == y[0] && x[1] == y[1] && x[2] == y[2]) return 0;
2139  return 1;
2140 }
2141 
2142 static st_index_t
2144 {
2145  return (st_index_t )(x[0] + x[1] + x[2]);
2146 }
2147 
2148 static const struct st_hash_type type_code3_hash = {
2149  code3_cmp,
2150  code3_hash,
2151 };
2152 
2153 
2154 static st_table* FoldTable; /* fold-1, fold-2, fold-3 */
2158 static int CaseFoldInited = 0;
2159 
2160 static int init_case_fold_table(void)
2161 {
2162  const CaseFold_11_Type *p;
2163  const CaseUnfold_11_Type *p1;
2164  const CaseUnfold_12_Type *p2;
2165  const CaseUnfold_13_Type *p3;
2166  int i;
2167 
2169 
2170  FoldTable = st_init_numtable_with_size(1200);
2171  if (ONIG_IS_NULL(FoldTable)) return ONIGERR_MEMORY;
2172  for (i = 0; i < numberof(CaseFold); i++) {
2173  p = &CaseFold[i];
2174  st_add_direct(FoldTable, (st_data_t )p->from, (st_data_t )&(p->to));
2175  }
2176  for (i = 0; i < numberof(CaseFold_Locale); i++) {
2177  p = &CaseFold_Locale[i];
2178  st_add_direct(FoldTable, (st_data_t )p->from, (st_data_t )&(p->to));
2179  }
2180 
2181  Unfold1Table = st_init_numtable_with_size(1000);
2182  if (ONIG_IS_NULL(Unfold1Table)) return ONIGERR_MEMORY;
2183 
2184  for (i = 0; i < numberof(CaseUnfold_11); i++) {
2185  p1 = &CaseUnfold_11[i];
2186  st_add_direct(Unfold1Table, (st_data_t )p1->from, (st_data_t )&(p1->to));
2187  }
2188  for (i = 0; i < numberof(CaseUnfold_11_Locale); i++) {
2189  p1 = &CaseUnfold_11_Locale[i];
2190  st_add_direct(Unfold1Table, (st_data_t )p1->from, (st_data_t )&(p1->to));
2191  }
2192 
2193  Unfold2Table = st_init_table_with_size(&type_code2_hash, 200);
2194  if (ONIG_IS_NULL(Unfold2Table)) return ONIGERR_MEMORY;
2195 
2196  for (i = 0; i < numberof(CaseUnfold_12); i++) {
2197  p2 = &CaseUnfold_12[i];
2198  st_add_direct(Unfold2Table, (st_data_t )p2->from, (st_data_t )(&p2->to));
2199  }
2200  for (i = 0; i < numberof(CaseUnfold_12_Locale); i++) {
2201  p2 = &CaseUnfold_12_Locale[i];
2202  st_add_direct(Unfold2Table, (st_data_t )p2->from, (st_data_t )(&p2->to));
2203  }
2204 
2205  Unfold3Table = st_init_table_with_size(&type_code3_hash, 30);
2206  if (ONIG_IS_NULL(Unfold3Table)) return ONIGERR_MEMORY;
2207 
2208  for (i = 0; i < numberof(CaseUnfold_13); i++) {
2209  p3 = &CaseUnfold_13[i];
2210  st_add_direct(Unfold3Table, (st_data_t )p3->from, (st_data_t )(&p3->to));
2211  }
2212 
2213  CaseFoldInited = 1;
2215  return 0;
2216 }
2217 
2218 extern int
2220  OnigCaseFoldType flag ARG_UNUSED, const UChar** pp, const UChar* end,
2221  UChar* fold)
2222 {
2223  CodePointList3 *to;
2225  int i, len, rlen;
2226  const UChar *p = *pp;
2227 
2229 
2230  code = ONIGENC_MBC_TO_CODE(enc, p, end);
2231  len = enclen(enc, p, end);
2232  *pp += len;
2233 
2234 #ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
2235  if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {
2236  if (code == 0x0049) {
2237  return ONIGENC_CODE_TO_MBC(enc, 0x0131, fold);
2238  }
2239  else if (code == 0x0130) {
2240  return ONIGENC_CODE_TO_MBC(enc, 0x0069, fold);
2241  }
2242  }
2243 #endif
2244 
2245  if (onig_st_lookup(FoldTable, (st_data_t )code, (void* )&to) != 0) {
2246  if (to->n == 1) {
2247  return ONIGENC_CODE_TO_MBC(enc, to->code[0], fold);
2248  }
2249 #if 0
2250  /* NO NEEDS TO CHECK */
2251  else if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0)
2252 #else
2253  else
2254 #endif
2255  {
2256  rlen = 0;
2257  for (i = 0; i < to->n; i++) {
2258  len = ONIGENC_CODE_TO_MBC(enc, to->code[i], fold);
2259  fold += len;
2260  rlen += len;
2261  }
2262  return rlen;
2263  }
2264  }
2265 
2266  for (i = 0; i < len; i++) {
2267  *fold++ = *p++;
2268  }
2269  return len;
2270 }
2271 
2272 extern int
2274  OnigApplyAllCaseFoldFunc f, void* arg,
2276 {
2277  const CaseUnfold_11_Type* p11;
2279  int i, j, k, r;
2280 
2281  /* if (CaseFoldInited == 0) init_case_fold_table(); */
2282 
2283  for (i = 0; i < numberof(CaseUnfold_11); i++) {
2284  p11 = &CaseUnfold_11[i];
2285  for (j = 0; j < p11->to.n; j++) {
2286  code = p11->from;
2287  r = (*f)(p11->to.code[j], &code, 1, arg);
2288  if (r != 0) return r;
2289 
2290  code = p11->to.code[j];
2291  r = (*f)(p11->from, &code, 1, arg);
2292  if (r != 0) return r;
2293 
2294  for (k = 0; k < j; k++) {
2295  r = (*f)(p11->to.code[j], (OnigCodePoint* )(&p11->to.code[k]), 1, arg);
2296  if (r != 0) return r;
2297 
2298  r = (*f)(p11->to.code[k], (OnigCodePoint* )(&p11->to.code[j]), 1, arg);
2299  if (r != 0) return r;
2300  }
2301  }
2302  }
2303 
2304 #ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
2305  if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {
2306  code = 0x0131;
2307  r = (*f)(0x0049, &code, 1, arg);
2308  if (r != 0) return r;
2309  code = 0x0049;
2310  r = (*f)(0x0131, &code, 1, arg);
2311  if (r != 0) return r;
2312 
2313  code = 0x0130;
2314  r = (*f)(0x0069, &code, 1, arg);
2315  if (r != 0) return r;
2316  code = 0x0069;
2317  r = (*f)(0x0130, &code, 1, arg);
2318  if (r != 0) return r;
2319  }
2320  else {
2321 #endif
2322  for (i = 0; i < numberof(CaseUnfold_11_Locale); i++) {
2323  p11 = &CaseUnfold_11_Locale[i];
2324  for (j = 0; j < p11->to.n; j++) {
2325  code = p11->from;
2326  r = (*f)(p11->to.code[j], &code, 1, arg);
2327  if (r != 0) return r;
2328 
2329  code = p11->to.code[j];
2330  r = (*f)(p11->from, &code, 1, arg);
2331  if (r != 0) return r;
2332 
2333  for (k = 0; k < j; k++) {
2334  r = (*f)(p11->to.code[j], (OnigCodePoint* )(&p11->to.code[k]),
2335  1, arg);
2336  if (r != 0) return r;
2337 
2338  r = (*f)(p11->to.code[k], (OnigCodePoint* )(&p11->to.code[j]),
2339  1, arg);
2340  if (r != 0) return r;
2341  }
2342  }
2343  }
2344 #ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
2345  }
2346 #endif
2347 
2348  if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {
2349  for (i = 0; i < numberof(CaseUnfold_12); i++) {
2350  for (j = 0; j < CaseUnfold_12[i].to.n; j++) {
2351  r = (*f)(CaseUnfold_12[i].to.code[j],
2352  (OnigCodePoint* )CaseUnfold_12[i].from, 2, arg);
2353  if (r != 0) return r;
2354 
2355  for (k = 0; k < CaseUnfold_12[i].to.n; k++) {
2356  if (k == j) continue;
2357 
2358  r = (*f)(CaseUnfold_12[i].to.code[j],
2359  (OnigCodePoint* )(&CaseUnfold_12[i].to.code[k]), 1, arg);
2360  if (r != 0) return r;
2361  }
2362  }
2363  }
2364 
2365 #ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
2366  if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) == 0) {
2367 #endif
2368  for (i = 0; i < numberof(CaseUnfold_12_Locale); i++) {
2369  for (j = 0; j < CaseUnfold_12_Locale[i].to.n; j++) {
2370  r = (*f)(CaseUnfold_12_Locale[i].to.code[j],
2371  (OnigCodePoint* )CaseUnfold_12_Locale[i].from, 2, arg);
2372  if (r != 0) return r;
2373 
2374  for (k = 0; k < CaseUnfold_12_Locale[i].to.n; k++) {
2375  if (k == j) continue;
2376 
2377  r = (*f)(CaseUnfold_12_Locale[i].to.code[j],
2378  (OnigCodePoint* )(&CaseUnfold_12_Locale[i].to.code[k]),
2379  1, arg);
2380  if (r != 0) return r;
2381  }
2382  }
2383  }
2384 #ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
2385  }
2386 #endif
2387 
2388  for (i = 0; i < numberof(CaseUnfold_13); i++) {
2389  for (j = 0; j < CaseUnfold_13[i].to.n; j++) {
2390  r = (*f)(CaseUnfold_13[i].to.code[j],
2391  (OnigCodePoint* )CaseUnfold_13[i].from, 3, arg);
2392  if (r != 0) return r;
2393 
2394  for (k = 0; k < CaseUnfold_13[i].to.n; k++) {
2395  if (k == j) continue;
2396 
2397  r = (*f)(CaseUnfold_13[i].to.code[j],
2398  (OnigCodePoint* )(&CaseUnfold_13[i].to.code[k]), 1, arg);
2399  if (r != 0) return r;
2400  }
2401  }
2402  }
2403  }
2404 
2405  return 0;
2406 }
2407 
2408 extern int
2410  OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end,
2411  OnigCaseFoldCodeItem items[])
2412 {
2413  int n, i, j, k, len;
2414  OnigCodePoint code, codes[3];
2415  CodePointList3 *to, *z3;
2416  CodePointList2 *z2;
2417 
2419 
2420  n = 0;
2421 
2422  code = ONIGENC_MBC_TO_CODE(enc, p, end);
2423  len = enclen(enc, p, end);
2424 
2425 #ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
2426  if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {
2427  if (code == 0x0049) {
2428  items[0].byte_len = len;
2429  items[0].code_len = 1;
2430  items[0].code[0] = 0x0131;
2431  return 1;
2432  }
2433  else if (code == 0x0130) {
2434  items[0].byte_len = len;
2435  items[0].code_len = 1;
2436  items[0].code[0] = 0x0069;
2437  return 1;
2438  }
2439  else if (code == 0x0131) {
2440  items[0].byte_len = len;
2441  items[0].code_len = 1;
2442  items[0].code[0] = 0x0049;
2443  return 1;
2444  }
2445  else if (code == 0x0069) {
2446  items[0].byte_len = len;
2447  items[0].code_len = 1;
2448  items[0].code[0] = 0x0130;
2449  return 1;
2450  }
2451  }
2452 #endif
2453 
2454  if (onig_st_lookup(FoldTable, (st_data_t )code, (void* )&to) != 0) {
2455  if (to->n == 1) {
2456  OnigCodePoint orig_code = code;
2457 
2458  items[0].byte_len = len;
2459  items[0].code_len = 1;
2460  items[0].code[0] = to->code[0];
2461  n++;
2462 
2463  code = to->code[0];
2464  if (onig_st_lookup(Unfold1Table, (st_data_t )code, (void* )&to) != 0) {
2465  for (i = 0; i < to->n; i++) {
2466  if (to->code[i] != orig_code) {
2467  items[n].byte_len = len;
2468  items[n].code_len = 1;
2469  items[n].code[0] = to->code[i];
2470  n++;
2471  }
2472  }
2473  }
2474  }
2475  else if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {
2476  OnigCodePoint cs[3][4];
2477  int fn, ncs[3];
2478 
2479  for (fn = 0; fn < to->n; fn++) {
2480  cs[fn][0] = to->code[fn];
2481  if (onig_st_lookup(Unfold1Table, (st_data_t )cs[fn][0],
2482  (void* )&z3) != 0) {
2483  for (i = 0; i < z3->n; i++) {
2484  cs[fn][i+1] = z3->code[i];
2485  }
2486  ncs[fn] = z3->n + 1;
2487  }
2488  else
2489  ncs[fn] = 1;
2490  }
2491 
2492  if (fn == 2) {
2493  for (i = 0; i < ncs[0]; i++) {
2494  for (j = 0; j < ncs[1]; j++) {
2495  items[n].byte_len = len;
2496  items[n].code_len = 2;
2497  items[n].code[0] = cs[0][i];
2498  items[n].code[1] = cs[1][j];
2499  n++;
2500  }
2501  }
2502 
2503  if (onig_st_lookup(Unfold2Table, (st_data_t )to->code,
2504  (void* )&z2) != 0) {
2505  for (i = 0; i < z2->n; i++) {
2506  if (z2->code[i] == code) continue;
2507 
2508  items[n].byte_len = len;
2509  items[n].code_len = 1;
2510  items[n].code[0] = z2->code[i];
2511  n++;
2512  }
2513  }
2514  }
2515  else {
2516  for (i = 0; i < ncs[0]; i++) {
2517  for (j = 0; j < ncs[1]; j++) {
2518  for (k = 0; k < ncs[2]; k++) {
2519  items[n].byte_len = len;
2520  items[n].code_len = 3;
2521  items[n].code[0] = cs[0][i];
2522  items[n].code[1] = cs[1][j];
2523  items[n].code[2] = cs[2][k];
2524  n++;
2525  }
2526  }
2527  }
2528 
2529  if (onig_st_lookup(Unfold3Table, (st_data_t )to->code,
2530  (void* )&z2) != 0) {
2531  for (i = 0; i < z2->n; i++) {
2532  if (z2->code[i] == code) continue;
2533 
2534  items[n].byte_len = len;
2535  items[n].code_len = 1;
2536  items[n].code[0] = z2->code[i];
2537  n++;
2538  }
2539  }
2540  }
2541 
2542  /* multi char folded code is not head of another folded multi char */
2543  flag = 0; /* DISABLE_CASE_FOLD_MULTI_CHAR(flag); */
2544  }
2545  }
2546  else {
2547  if (onig_st_lookup(Unfold1Table, (st_data_t )code, (void* )&to) != 0) {
2548  for (i = 0; i < to->n; i++) {
2549  items[n].byte_len = len;
2550  items[n].code_len = 1;
2551  items[n].code[0] = to->code[i];
2552  n++;
2553  }
2554  }
2555  }
2556 
2557 
2558  if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {
2559  p += len;
2560  if (p < end) {
2561  int clen;
2562 
2563  codes[0] = code;
2564  code = ONIGENC_MBC_TO_CODE(enc, p, end);
2565  if (onig_st_lookup(FoldTable, (st_data_t )code, (void* )&to) != 0
2566  && to->n == 1) {
2567  codes[1] = to->code[0];
2568  }
2569  else
2570  codes[1] = code;
2571 
2572  clen = enclen(enc, p, end);
2573  len += clen;
2574  if (onig_st_lookup(Unfold2Table, (st_data_t )codes, (void* )&z2) != 0) {
2575  for (i = 0; i < z2->n; i++) {
2576  items[n].byte_len = len;
2577  items[n].code_len = 1;
2578  items[n].code[0] = z2->code[i];
2579  n++;
2580  }
2581  }
2582 
2583  p += clen;
2584  if (p < end) {
2585  code = ONIGENC_MBC_TO_CODE(enc, p, end);
2586  if (onig_st_lookup(FoldTable, (st_data_t )code, (void* )&to) != 0
2587  && to->n == 1) {
2588  codes[2] = to->code[0];
2589  }
2590  else
2591  codes[2] = code;
2592 
2593  clen = enclen(enc, p, end);
2594  len += clen;
2595  if (onig_st_lookup(Unfold3Table, (st_data_t )codes,
2596  (void* )&z2) != 0) {
2597  for (i = 0; i < z2->n; i++) {
2598  items[n].byte_len = len;
2599  items[n].code_len = 1;
2600  items[n].code[0] = z2->code[i];
2601  n++;
2602  }
2603  }
2604  }
2605  }
2606  }
2607 
2608  return n;
2609 }
int onigenc_unicode_is_code_ctype(OnigCodePoint code, unsigned int ctype, OnigEncoding enc ARG_UNUSED)
Definition: unicode.c:2042
OnigCodePoint from[2]
Definition: unicode.c:97
unsigned int OnigCodePoint
Definition: oniguruma.h:111
ssize_t n
Definition: bigdecimal.c:5519
static const CaseUnfold_12_Type CaseUnfold_12[]
Definition: unicode.c:1956
code
Definition: tcltklib.c:3375
Definition: st.h:77
static st_table * Unfold1Table
Definition: unicode.c:2155
OnigCodePoint from[3]
Definition: unicode.c:102
unsigned int OnigCaseFoldType
Definition: oniguruma.h:117
#define ONIG_IS_NULL(p)
#define numberof(array)
Definition: unicode.c:2038
int onig_is_in_code_range(const UChar *p, OnigCodePoint code)
Definition: regcomp.c:5669
SYMID SyckParser * p
Definition: yaml2byte.c:119
VALUE enc
Definition: tcltklib.c:10402
static const CaseUnfold_11_Type CaseUnfold_11_Locale[]
Definition: unicode.c:1952
#define USE_UNICODE_PROPERTIES
static void VALUE * p2
Definition: array.c:1848
static const CaseUnfold_11_Type CaseUnfold_11[]
Definition: unicode.c:1093
static void VALUE * p1
Definition: array.c:1848
#define ARG_UNUSED
static const CaseFold_11_Type CaseFold[]
Definition: unicode.c:106
r
Definition: bigdecimal.c:1154
st_data_t st_index_t
Definition: st.h:63
static const unsigned short EncUNICODE_ISO_8859_1_CtypeTable[256]
Definition: unicode.c:39
#define ONIGERR_TYPE_BUG
Definition: oniguruma.h:502
static const CaseUnfold_12_Type CaseUnfold_12_Locale[]
Definition: unicode.c:2017
#define CODE_RANGES_NUM
Definition: unicode.c:2039
int onigenc_unicode_property_name_to_ctype(OnigEncoding enc, UChar *name, UChar *end)
Definition: unicode.c:2086
CodePointList3 to
Definition: unicode.c:88
flag
Definition: tcltklib.c:2039
#define st_init_numtable_with_size
Definition: regint.h:143
#define ONIGERR_INVALID_CHAR_PROPERTY_NAME
Definition: oniguruma.h:556
static int CaseFoldInited
Definition: unicode.c:2158
unsigned char OnigUChar
Definition: oniguruma.h:110
static st_index_t code2_hash(OnigCodePoint *x)
Definition: unicode.c:2125
CodePointList2 to
Definition: unicode.c:103
int onigenc_unicode_ctype_code_range(int ctype, const OnigCodePoint *ranges[])
Definition: unicode.c:2061
int onigenc_unicode_mbc_case_fold(OnigEncoding enc, OnigCaseFoldType flag ARG_UNUSED, const UChar **pp, const UChar *end, UChar *fold)
Definition: unicode.c:2219
#define enclen(enc, p, e)
#define THREAD_ATOMIC_END
Definition: regint.h:106
static struct st_hash_type type_code2_hash
Definition: unicode.c:2130
static const CaseFold_11_Type CaseFold_Locale[]
Definition: unicode.c:1088
int(* OnigApplyAllCaseFoldFunc)(OnigCodePoint from, OnigCodePoint *to, int to_len, void *arg)
Definition: oniguruma.h:154
OnigCodePoint code[3]
Definition: unicode.c:78
OnigCodePoint code[2]
Definition: unicode.c:93
#define st_init_table_with_size
Definition: regint.h:141
OnigCodePoint from
Definition: unicode.c:82
#define PROPERTY_NAME_MAX_SIZE
Definition: unicode.c:2083
static struct st_hash_type type_code3_hash
Definition: unicode.c:2148
static int uniname2ctype(const UChar *name, unsigned int len)
Definition: name2ctype.h:23861
CodePointList3 to
Definition: unicode.c:83
unsigned char buf[MIME_BUF_SIZE]
Definition: nkf.c:3913
int onigenc_unicode_apply_all_case_fold(OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void *arg, OnigEncoding enc ARG_UNUSED)
Definition: unicode.c:2273
#define ONIGENC_CASE_FOLD_TURKISH_AZERI
Definition: oniguruma.h:123
#define THREAD_ATOMIC_START
Definition: regint.h:105
unsigned int OnigCtype
Definition: oniguruma.h:112
#define ONIGENC_CODE_TO_MBC(enc, code, buf)
Definition: oniguruma.h:266
static const CaseUnfold_13_Type CaseUnfold_13[]
Definition: unicode.c:2021
static int code2_cmp(OnigCodePoint *x, OnigCodePoint *y)
Definition: unicode.c:2118
register unsigned int len
Definition: name2ctype.h:22210
#define ONIGENC_MBC_TO_CODE(enc, p, end)
Definition: oniguruma.h:264
static int code3_cmp(OnigCodePoint *x, OnigCodePoint *y)
Definition: unicode.c:2136
long st_data_t
Definition: syck.h:69
#define UChar
Definition: oniguruma.h:107
gz end
Definition: zlib.c:2033
arg
Definition: ripper.y:1287
OnigCodePoint from
Definition: unicode.c:87
#define ONIGENC_MAX_STD_CTYPE
Definition: oniguruma.h:206
static st_table * Unfold2Table
Definition: unicode.c:2156
static st_table * Unfold3Table
Definition: unicode.c:2157
int onigenc_unicode_get_case_fold_codes_by_str(OnigEncoding enc, OnigCaseFoldType flag, const OnigUChar *p, const OnigUChar *end, OnigCaseFoldCodeItem items[])
Definition: unicode.c:2409
static st_table * FoldTable
Definition: unicode.c:2154
#define ONIGERR_MEMORY
Definition: oniguruma.h:501
#define st_add_direct
Definition: regint.h:151
OnigCodePoint code[ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN]
Definition: oniguruma.h:142
#define TOLOWER(c)
Definition: ruby.h:1462
static st_index_t code3_hash(OnigCodePoint *x)
Definition: unicode.c:2143
#define INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR
Definition: oniguruma.h:124
static const OnigCodePoint *const CodeRanges[]
Definition: name2ctype.h:21959
ssize_t i
Definition: bigdecimal.c:5519
const char * name
Definition: nkf.c:208
static int init_case_fold_table(void)
Definition: unicode.c:2160
CodePointList2 to
Definition: unicode.c:98
int onigenc_utf16_32_get_ctype_code_range(OnigCtype ctype, OnigCodePoint *sb_out, const OnigCodePoint *ranges[], struct OnigEncodingTypeST *enc ARG_UNUSED)
Definition: unicode.c:2073
#define ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(code, ctype)
Definition: unicode.c:32