xref: /PHP-5.3/ext/mbstring/oniguruma/enc/unicode.c (revision e95f9a0e)
1 /**********************************************************************
2   unicode.c -  Oniguruma (regular expression library)
3 **********************************************************************/
4 /*-
5  * Copyright (c) 2002-2004  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 "regenc.h"
31 
32 
33 const unsigned short OnigEnc_Unicode_ISO_8859_1_CtypeTable[256] = {
34   0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008,
35   0x2008, 0x228c, 0x2289, 0x2288, 0x2288, 0x2288, 0x2008, 0x2008,
36   0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008,
37   0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008,
38   0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0,
39   0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0,
40   0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0,
41   0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0,
42   0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2,
43   0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2,
44   0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2,
45   0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0,
46   0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2,
47   0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2,
48   0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2,
49   0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008,
50   0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0288, 0x0008, 0x0008,
51   0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,
52   0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,
53   0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,
54   0x0284, 0x01a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0,
55   0x00a0, 0x00a0, 0x10e2, 0x01a0, 0x00a0, 0x00a8, 0x00a0, 0x00a0,
56   0x00a0, 0x00a0, 0x10a0, 0x10a0, 0x00a0, 0x10e2, 0x00a0, 0x01a0,
57   0x00a0, 0x10a0, 0x10e2, 0x01a0, 0x10a0, 0x10a0, 0x10a0, 0x01a0,
58   0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2,
59   0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2,
60   0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x00a0,
61   0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x10e2,
62   0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2,
63   0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2,
64   0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x00a0,
65   0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2
66 };
67 
68 static const OnigCodePoint CRAlnum[] = {
69 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
70   414,
71 #else
72   9,
73 #endif
74   0x0030, 0x0039,
75   0x0041, 0x005a,
76   0x0061, 0x007a,
77   0x00aa, 0x00aa,
78   0x00b5, 0x00b5,
79   0x00ba, 0x00ba,
80   0x00c0, 0x00d6,
81   0x00d8, 0x00f6,
82   0x00f8, 0x0236
83 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
84   ,
85   0x0250, 0x02c1,
86   0x02c6, 0x02d1,
87   0x02e0, 0x02e4,
88   0x02ee, 0x02ee,
89   0x0300, 0x0357,
90   0x035d, 0x036f,
91   0x037a, 0x037a,
92   0x0386, 0x0386,
93   0x0388, 0x038a,
94   0x038c, 0x038c,
95   0x038e, 0x03a1,
96   0x03a3, 0x03ce,
97   0x03d0, 0x03f5,
98   0x03f7, 0x03fb,
99   0x0400, 0x0481,
100   0x0483, 0x0486,
101   0x0488, 0x04ce,
102   0x04d0, 0x04f5,
103   0x04f8, 0x04f9,
104   0x0500, 0x050f,
105   0x0531, 0x0556,
106   0x0559, 0x0559,
107   0x0561, 0x0587,
108   0x0591, 0x05a1,
109   0x05a3, 0x05b9,
110   0x05bb, 0x05bd,
111   0x05bf, 0x05bf,
112   0x05c1, 0x05c2,
113   0x05c4, 0x05c4,
114   0x05d0, 0x05ea,
115   0x05f0, 0x05f2,
116   0x0610, 0x0615,
117   0x0621, 0x063a,
118   0x0640, 0x0658,
119   0x0660, 0x0669,
120   0x066e, 0x06d3,
121   0x06d5, 0x06dc,
122   0x06de, 0x06e8,
123   0x06ea, 0x06fc,
124   0x06ff, 0x06ff,
125   0x0710, 0x074a,
126   0x074d, 0x074f,
127   0x0780, 0x07b1,
128   0x0901, 0x0939,
129   0x093c, 0x094d,
130   0x0950, 0x0954,
131   0x0958, 0x0963,
132   0x0966, 0x096f,
133   0x0981, 0x0983,
134   0x0985, 0x098c,
135   0x098f, 0x0990,
136   0x0993, 0x09a8,
137   0x09aa, 0x09b0,
138   0x09b2, 0x09b2,
139   0x09b6, 0x09b9,
140   0x09bc, 0x09c4,
141   0x09c7, 0x09c8,
142   0x09cb, 0x09cd,
143   0x09d7, 0x09d7,
144   0x09dc, 0x09dd,
145   0x09df, 0x09e3,
146   0x09e6, 0x09f1,
147   0x0a01, 0x0a03,
148   0x0a05, 0x0a0a,
149   0x0a0f, 0x0a10,
150   0x0a13, 0x0a28,
151   0x0a2a, 0x0a30,
152   0x0a32, 0x0a33,
153   0x0a35, 0x0a36,
154   0x0a38, 0x0a39,
155   0x0a3c, 0x0a3c,
156   0x0a3e, 0x0a42,
157   0x0a47, 0x0a48,
158   0x0a4b, 0x0a4d,
159   0x0a59, 0x0a5c,
160   0x0a5e, 0x0a5e,
161   0x0a66, 0x0a74,
162   0x0a81, 0x0a83,
163   0x0a85, 0x0a8d,
164   0x0a8f, 0x0a91,
165   0x0a93, 0x0aa8,
166   0x0aaa, 0x0ab0,
167   0x0ab2, 0x0ab3,
168   0x0ab5, 0x0ab9,
169   0x0abc, 0x0ac5,
170   0x0ac7, 0x0ac9,
171   0x0acb, 0x0acd,
172   0x0ad0, 0x0ad0,
173   0x0ae0, 0x0ae3,
174   0x0ae6, 0x0aef,
175   0x0b01, 0x0b03,
176   0x0b05, 0x0b0c,
177   0x0b0f, 0x0b10,
178   0x0b13, 0x0b28,
179   0x0b2a, 0x0b30,
180   0x0b32, 0x0b33,
181   0x0b35, 0x0b39,
182   0x0b3c, 0x0b43,
183   0x0b47, 0x0b48,
184   0x0b4b, 0x0b4d,
185   0x0b56, 0x0b57,
186   0x0b5c, 0x0b5d,
187   0x0b5f, 0x0b61,
188   0x0b66, 0x0b6f,
189   0x0b71, 0x0b71,
190   0x0b82, 0x0b83,
191   0x0b85, 0x0b8a,
192   0x0b8e, 0x0b90,
193   0x0b92, 0x0b95,
194   0x0b99, 0x0b9a,
195   0x0b9c, 0x0b9c,
196   0x0b9e, 0x0b9f,
197   0x0ba3, 0x0ba4,
198   0x0ba8, 0x0baa,
199   0x0bae, 0x0bb5,
200   0x0bb7, 0x0bb9,
201   0x0bbe, 0x0bc2,
202   0x0bc6, 0x0bc8,
203   0x0bca, 0x0bcd,
204   0x0bd7, 0x0bd7,
205   0x0be7, 0x0bef,
206   0x0c01, 0x0c03,
207   0x0c05, 0x0c0c,
208   0x0c0e, 0x0c10,
209   0x0c12, 0x0c28,
210   0x0c2a, 0x0c33,
211   0x0c35, 0x0c39,
212   0x0c3e, 0x0c44,
213   0x0c46, 0x0c48,
214   0x0c4a, 0x0c4d,
215   0x0c55, 0x0c56,
216   0x0c60, 0x0c61,
217   0x0c66, 0x0c6f,
218   0x0c82, 0x0c83,
219   0x0c85, 0x0c8c,
220   0x0c8e, 0x0c90,
221   0x0c92, 0x0ca8,
222   0x0caa, 0x0cb3,
223   0x0cb5, 0x0cb9,
224   0x0cbc, 0x0cc4,
225   0x0cc6, 0x0cc8,
226   0x0cca, 0x0ccd,
227   0x0cd5, 0x0cd6,
228   0x0cde, 0x0cde,
229   0x0ce0, 0x0ce1,
230   0x0ce6, 0x0cef,
231   0x0d02, 0x0d03,
232   0x0d05, 0x0d0c,
233   0x0d0e, 0x0d10,
234   0x0d12, 0x0d28,
235   0x0d2a, 0x0d39,
236   0x0d3e, 0x0d43,
237   0x0d46, 0x0d48,
238   0x0d4a, 0x0d4d,
239   0x0d57, 0x0d57,
240   0x0d60, 0x0d61,
241   0x0d66, 0x0d6f,
242   0x0d82, 0x0d83,
243   0x0d85, 0x0d96,
244   0x0d9a, 0x0db1,
245   0x0db3, 0x0dbb,
246   0x0dbd, 0x0dbd,
247   0x0dc0, 0x0dc6,
248   0x0dca, 0x0dca,
249   0x0dcf, 0x0dd4,
250   0x0dd6, 0x0dd6,
251   0x0dd8, 0x0ddf,
252   0x0df2, 0x0df3,
253   0x0e01, 0x0e3a,
254   0x0e40, 0x0e4e,
255   0x0e50, 0x0e59,
256   0x0e81, 0x0e82,
257   0x0e84, 0x0e84,
258   0x0e87, 0x0e88,
259   0x0e8a, 0x0e8a,
260   0x0e8d, 0x0e8d,
261   0x0e94, 0x0e97,
262   0x0e99, 0x0e9f,
263   0x0ea1, 0x0ea3,
264   0x0ea5, 0x0ea5,
265   0x0ea7, 0x0ea7,
266   0x0eaa, 0x0eab,
267   0x0ead, 0x0eb9,
268   0x0ebb, 0x0ebd,
269   0x0ec0, 0x0ec4,
270   0x0ec6, 0x0ec6,
271   0x0ec8, 0x0ecd,
272   0x0ed0, 0x0ed9,
273   0x0edc, 0x0edd,
274   0x0f00, 0x0f00,
275   0x0f18, 0x0f19,
276   0x0f20, 0x0f29,
277   0x0f35, 0x0f35,
278   0x0f37, 0x0f37,
279   0x0f39, 0x0f39,
280   0x0f3e, 0x0f47,
281   0x0f49, 0x0f6a,
282   0x0f71, 0x0f84,
283   0x0f86, 0x0f8b,
284   0x0f90, 0x0f97,
285   0x0f99, 0x0fbc,
286   0x0fc6, 0x0fc6,
287   0x1000, 0x1021,
288   0x1023, 0x1027,
289   0x1029, 0x102a,
290   0x102c, 0x1032,
291   0x1036, 0x1039,
292   0x1040, 0x1049,
293   0x1050, 0x1059,
294   0x10a0, 0x10c5,
295   0x10d0, 0x10f8,
296   0x1100, 0x1159,
297   0x115f, 0x11a2,
298   0x11a8, 0x11f9,
299   0x1200, 0x1206,
300   0x1208, 0x1246,
301   0x1248, 0x1248,
302   0x124a, 0x124d,
303   0x1250, 0x1256,
304   0x1258, 0x1258,
305   0x125a, 0x125d,
306   0x1260, 0x1286,
307   0x1288, 0x1288,
308   0x128a, 0x128d,
309   0x1290, 0x12ae,
310   0x12b0, 0x12b0,
311   0x12b2, 0x12b5,
312   0x12b8, 0x12be,
313   0x12c0, 0x12c0,
314   0x12c2, 0x12c5,
315   0x12c8, 0x12ce,
316   0x12d0, 0x12d6,
317   0x12d8, 0x12ee,
318   0x12f0, 0x130e,
319   0x1310, 0x1310,
320   0x1312, 0x1315,
321   0x1318, 0x131e,
322   0x1320, 0x1346,
323   0x1348, 0x135a,
324   0x1369, 0x1371,
325   0x13a0, 0x13f4,
326   0x1401, 0x166c,
327   0x166f, 0x1676,
328   0x1681, 0x169a,
329   0x16a0, 0x16ea,
330   0x1700, 0x170c,
331   0x170e, 0x1714,
332   0x1720, 0x1734,
333   0x1740, 0x1753,
334   0x1760, 0x176c,
335   0x176e, 0x1770,
336   0x1772, 0x1773,
337   0x1780, 0x17b3,
338   0x17b6, 0x17d3,
339   0x17d7, 0x17d7,
340   0x17dc, 0x17dd,
341   0x17e0, 0x17e9,
342   0x180b, 0x180d,
343   0x1810, 0x1819,
344   0x1820, 0x1877,
345   0x1880, 0x18a9,
346   0x1900, 0x191c,
347   0x1920, 0x192b,
348   0x1930, 0x193b,
349   0x1946, 0x196d,
350   0x1970, 0x1974,
351   0x1d00, 0x1d6b,
352   0x1e00, 0x1e9b,
353   0x1ea0, 0x1ef9,
354   0x1f00, 0x1f15,
355   0x1f18, 0x1f1d,
356   0x1f20, 0x1f45,
357   0x1f48, 0x1f4d,
358   0x1f50, 0x1f57,
359   0x1f59, 0x1f59,
360   0x1f5b, 0x1f5b,
361   0x1f5d, 0x1f5d,
362   0x1f5f, 0x1f7d,
363   0x1f80, 0x1fb4,
364   0x1fb6, 0x1fbc,
365   0x1fbe, 0x1fbe,
366   0x1fc2, 0x1fc4,
367   0x1fc6, 0x1fcc,
368   0x1fd0, 0x1fd3,
369   0x1fd6, 0x1fdb,
370   0x1fe0, 0x1fec,
371   0x1ff2, 0x1ff4,
372   0x1ff6, 0x1ffc,
373   0x2071, 0x2071,
374   0x207f, 0x207f,
375   0x20d0, 0x20ea,
376   0x2102, 0x2102,
377   0x2107, 0x2107,
378   0x210a, 0x2113,
379   0x2115, 0x2115,
380   0x2119, 0x211d,
381   0x2124, 0x2124,
382   0x2126, 0x2126,
383   0x2128, 0x2128,
384   0x212a, 0x212d,
385   0x212f, 0x2131,
386   0x2133, 0x2139,
387   0x213d, 0x213f,
388   0x2145, 0x2149,
389   0x3005, 0x3006,
390   0x302a, 0x302f,
391   0x3031, 0x3035,
392   0x303b, 0x303c,
393   0x3041, 0x3096,
394   0x3099, 0x309a,
395   0x309d, 0x309f,
396   0x30a1, 0x30fa,
397   0x30fc, 0x30ff,
398   0x3105, 0x312c,
399   0x3131, 0x318e,
400   0x31a0, 0x31b7,
401   0x31f0, 0x31ff,
402   0x3400, 0x4db5,
403   0x4e00, 0x9fa5,
404   0xa000, 0xa48c,
405   0xac00, 0xd7a3,
406   0xf900, 0xfa2d,
407   0xfa30, 0xfa6a,
408   0xfb00, 0xfb06,
409   0xfb13, 0xfb17,
410   0xfb1d, 0xfb28,
411   0xfb2a, 0xfb36,
412   0xfb38, 0xfb3c,
413   0xfb3e, 0xfb3e,
414   0xfb40, 0xfb41,
415   0xfb43, 0xfb44,
416   0xfb46, 0xfbb1,
417   0xfbd3, 0xfd3d,
418   0xfd50, 0xfd8f,
419   0xfd92, 0xfdc7,
420   0xfdf0, 0xfdfb,
421   0xfe00, 0xfe0f,
422   0xfe20, 0xfe23,
423   0xfe70, 0xfe74,
424   0xfe76, 0xfefc,
425   0xff10, 0xff19,
426   0xff21, 0xff3a,
427   0xff41, 0xff5a,
428   0xff66, 0xffbe,
429   0xffc2, 0xffc7,
430   0xffca, 0xffcf,
431   0xffd2, 0xffd7,
432   0xffda, 0xffdc,
433   0x10000, 0x1000b,
434   0x1000d, 0x10026,
435   0x10028, 0x1003a,
436   0x1003c, 0x1003d,
437   0x1003f, 0x1004d,
438   0x10050, 0x1005d,
439   0x10080, 0x100fa,
440   0x10300, 0x1031e,
441   0x10330, 0x10349,
442   0x10380, 0x1039d,
443   0x10400, 0x1049d,
444   0x104a0, 0x104a9,
445   0x10800, 0x10805,
446   0x10808, 0x10808,
447   0x1080a, 0x10835,
448   0x10837, 0x10838,
449   0x1083c, 0x1083c,
450   0x1083f, 0x1083f,
451   0x1d165, 0x1d169,
452   0x1d16d, 0x1d172,
453   0x1d17b, 0x1d182,
454   0x1d185, 0x1d18b,
455   0x1d1aa, 0x1d1ad,
456   0x1d400, 0x1d454,
457   0x1d456, 0x1d49c,
458   0x1d49e, 0x1d49f,
459   0x1d4a2, 0x1d4a2,
460   0x1d4a5, 0x1d4a6,
461   0x1d4a9, 0x1d4ac,
462   0x1d4ae, 0x1d4b9,
463   0x1d4bb, 0x1d4bb,
464   0x1d4bd, 0x1d4c3,
465   0x1d4c5, 0x1d505,
466   0x1d507, 0x1d50a,
467   0x1d50d, 0x1d514,
468   0x1d516, 0x1d51c,
469   0x1d51e, 0x1d539,
470   0x1d53b, 0x1d53e,
471   0x1d540, 0x1d544,
472   0x1d546, 0x1d546,
473   0x1d54a, 0x1d550,
474   0x1d552, 0x1d6a3,
475   0x1d6a8, 0x1d6c0,
476   0x1d6c2, 0x1d6da,
477   0x1d6dc, 0x1d6fa,
478   0x1d6fc, 0x1d714,
479   0x1d716, 0x1d734,
480   0x1d736, 0x1d74e,
481   0x1d750, 0x1d76e,
482   0x1d770, 0x1d788,
483   0x1d78a, 0x1d7a8,
484   0x1d7aa, 0x1d7c2,
485   0x1d7c4, 0x1d7c9,
486   0x1d7ce, 0x1d7ff,
487   0x20000, 0x2a6d6,
488   0x2f800, 0x2fa1d,
489   0xe0100, 0xe01ef
490 #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
491 }; /* end of CRAlnum */
492 
493 static const OnigCodePoint CRAlpha[] = {
494 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
495   396,
496 #else
497   8,
498 #endif
499   0x0041, 0x005a,
500   0x0061, 0x007a,
501   0x00aa, 0x00aa,
502   0x00b5, 0x00b5,
503   0x00ba, 0x00ba,
504   0x00c0, 0x00d6,
505   0x00d8, 0x00f6,
506   0x00f8, 0x0236
507 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
508   ,
509   0x0250, 0x02c1,
510   0x02c6, 0x02d1,
511   0x02e0, 0x02e4,
512   0x02ee, 0x02ee,
513   0x0300, 0x0357,
514   0x035d, 0x036f,
515   0x037a, 0x037a,
516   0x0386, 0x0386,
517   0x0388, 0x038a,
518   0x038c, 0x038c,
519   0x038e, 0x03a1,
520   0x03a3, 0x03ce,
521   0x03d0, 0x03f5,
522   0x03f7, 0x03fb,
523   0x0400, 0x0481,
524   0x0483, 0x0486,
525   0x0488, 0x04ce,
526   0x04d0, 0x04f5,
527   0x04f8, 0x04f9,
528   0x0500, 0x050f,
529   0x0531, 0x0556,
530   0x0559, 0x0559,
531   0x0561, 0x0587,
532   0x0591, 0x05a1,
533   0x05a3, 0x05b9,
534   0x05bb, 0x05bd,
535   0x05bf, 0x05bf,
536   0x05c1, 0x05c2,
537   0x05c4, 0x05c4,
538   0x05d0, 0x05ea,
539   0x05f0, 0x05f2,
540   0x0610, 0x0615,
541   0x0621, 0x063a,
542   0x0640, 0x0658,
543   0x066e, 0x06d3,
544   0x06d5, 0x06dc,
545   0x06de, 0x06e8,
546   0x06ea, 0x06ef,
547   0x06fa, 0x06fc,
548   0x06ff, 0x06ff,
549   0x0710, 0x074a,
550   0x074d, 0x074f,
551   0x0780, 0x07b1,
552   0x0901, 0x0939,
553   0x093c, 0x094d,
554   0x0950, 0x0954,
555   0x0958, 0x0963,
556   0x0981, 0x0983,
557   0x0985, 0x098c,
558   0x098f, 0x0990,
559   0x0993, 0x09a8,
560   0x09aa, 0x09b0,
561   0x09b2, 0x09b2,
562   0x09b6, 0x09b9,
563   0x09bc, 0x09c4,
564   0x09c7, 0x09c8,
565   0x09cb, 0x09cd,
566   0x09d7, 0x09d7,
567   0x09dc, 0x09dd,
568   0x09df, 0x09e3,
569   0x09f0, 0x09f1,
570   0x0a01, 0x0a03,
571   0x0a05, 0x0a0a,
572   0x0a0f, 0x0a10,
573   0x0a13, 0x0a28,
574   0x0a2a, 0x0a30,
575   0x0a32, 0x0a33,
576   0x0a35, 0x0a36,
577   0x0a38, 0x0a39,
578   0x0a3c, 0x0a3c,
579   0x0a3e, 0x0a42,
580   0x0a47, 0x0a48,
581   0x0a4b, 0x0a4d,
582   0x0a59, 0x0a5c,
583   0x0a5e, 0x0a5e,
584   0x0a70, 0x0a74,
585   0x0a81, 0x0a83,
586   0x0a85, 0x0a8d,
587   0x0a8f, 0x0a91,
588   0x0a93, 0x0aa8,
589   0x0aaa, 0x0ab0,
590   0x0ab2, 0x0ab3,
591   0x0ab5, 0x0ab9,
592   0x0abc, 0x0ac5,
593   0x0ac7, 0x0ac9,
594   0x0acb, 0x0acd,
595   0x0ad0, 0x0ad0,
596   0x0ae0, 0x0ae3,
597   0x0b01, 0x0b03,
598   0x0b05, 0x0b0c,
599   0x0b0f, 0x0b10,
600   0x0b13, 0x0b28,
601   0x0b2a, 0x0b30,
602   0x0b32, 0x0b33,
603   0x0b35, 0x0b39,
604   0x0b3c, 0x0b43,
605   0x0b47, 0x0b48,
606   0x0b4b, 0x0b4d,
607   0x0b56, 0x0b57,
608   0x0b5c, 0x0b5d,
609   0x0b5f, 0x0b61,
610   0x0b71, 0x0b71,
611   0x0b82, 0x0b83,
612   0x0b85, 0x0b8a,
613   0x0b8e, 0x0b90,
614   0x0b92, 0x0b95,
615   0x0b99, 0x0b9a,
616   0x0b9c, 0x0b9c,
617   0x0b9e, 0x0b9f,
618   0x0ba3, 0x0ba4,
619   0x0ba8, 0x0baa,
620   0x0bae, 0x0bb5,
621   0x0bb7, 0x0bb9,
622   0x0bbe, 0x0bc2,
623   0x0bc6, 0x0bc8,
624   0x0bca, 0x0bcd,
625   0x0bd7, 0x0bd7,
626   0x0c01, 0x0c03,
627   0x0c05, 0x0c0c,
628   0x0c0e, 0x0c10,
629   0x0c12, 0x0c28,
630   0x0c2a, 0x0c33,
631   0x0c35, 0x0c39,
632   0x0c3e, 0x0c44,
633   0x0c46, 0x0c48,
634   0x0c4a, 0x0c4d,
635   0x0c55, 0x0c56,
636   0x0c60, 0x0c61,
637   0x0c82, 0x0c83,
638   0x0c85, 0x0c8c,
639   0x0c8e, 0x0c90,
640   0x0c92, 0x0ca8,
641   0x0caa, 0x0cb3,
642   0x0cb5, 0x0cb9,
643   0x0cbc, 0x0cc4,
644   0x0cc6, 0x0cc8,
645   0x0cca, 0x0ccd,
646   0x0cd5, 0x0cd6,
647   0x0cde, 0x0cde,
648   0x0ce0, 0x0ce1,
649   0x0d02, 0x0d03,
650   0x0d05, 0x0d0c,
651   0x0d0e, 0x0d10,
652   0x0d12, 0x0d28,
653   0x0d2a, 0x0d39,
654   0x0d3e, 0x0d43,
655   0x0d46, 0x0d48,
656   0x0d4a, 0x0d4d,
657   0x0d57, 0x0d57,
658   0x0d60, 0x0d61,
659   0x0d82, 0x0d83,
660   0x0d85, 0x0d96,
661   0x0d9a, 0x0db1,
662   0x0db3, 0x0dbb,
663   0x0dbd, 0x0dbd,
664   0x0dc0, 0x0dc6,
665   0x0dca, 0x0dca,
666   0x0dcf, 0x0dd4,
667   0x0dd6, 0x0dd6,
668   0x0dd8, 0x0ddf,
669   0x0df2, 0x0df3,
670   0x0e01, 0x0e3a,
671   0x0e40, 0x0e4e,
672   0x0e81, 0x0e82,
673   0x0e84, 0x0e84,
674   0x0e87, 0x0e88,
675   0x0e8a, 0x0e8a,
676   0x0e8d, 0x0e8d,
677   0x0e94, 0x0e97,
678   0x0e99, 0x0e9f,
679   0x0ea1, 0x0ea3,
680   0x0ea5, 0x0ea5,
681   0x0ea7, 0x0ea7,
682   0x0eaa, 0x0eab,
683   0x0ead, 0x0eb9,
684   0x0ebb, 0x0ebd,
685   0x0ec0, 0x0ec4,
686   0x0ec6, 0x0ec6,
687   0x0ec8, 0x0ecd,
688   0x0edc, 0x0edd,
689   0x0f00, 0x0f00,
690   0x0f18, 0x0f19,
691   0x0f35, 0x0f35,
692   0x0f37, 0x0f37,
693   0x0f39, 0x0f39,
694   0x0f3e, 0x0f47,
695   0x0f49, 0x0f6a,
696   0x0f71, 0x0f84,
697   0x0f86, 0x0f8b,
698   0x0f90, 0x0f97,
699   0x0f99, 0x0fbc,
700   0x0fc6, 0x0fc6,
701   0x1000, 0x1021,
702   0x1023, 0x1027,
703   0x1029, 0x102a,
704   0x102c, 0x1032,
705   0x1036, 0x1039,
706   0x1050, 0x1059,
707   0x10a0, 0x10c5,
708   0x10d0, 0x10f8,
709   0x1100, 0x1159,
710   0x115f, 0x11a2,
711   0x11a8, 0x11f9,
712   0x1200, 0x1206,
713   0x1208, 0x1246,
714   0x1248, 0x1248,
715   0x124a, 0x124d,
716   0x1250, 0x1256,
717   0x1258, 0x1258,
718   0x125a, 0x125d,
719   0x1260, 0x1286,
720   0x1288, 0x1288,
721   0x128a, 0x128d,
722   0x1290, 0x12ae,
723   0x12b0, 0x12b0,
724   0x12b2, 0x12b5,
725   0x12b8, 0x12be,
726   0x12c0, 0x12c0,
727   0x12c2, 0x12c5,
728   0x12c8, 0x12ce,
729   0x12d0, 0x12d6,
730   0x12d8, 0x12ee,
731   0x12f0, 0x130e,
732   0x1310, 0x1310,
733   0x1312, 0x1315,
734   0x1318, 0x131e,
735   0x1320, 0x1346,
736   0x1348, 0x135a,
737   0x13a0, 0x13f4,
738   0x1401, 0x166c,
739   0x166f, 0x1676,
740   0x1681, 0x169a,
741   0x16a0, 0x16ea,
742   0x1700, 0x170c,
743   0x170e, 0x1714,
744   0x1720, 0x1734,
745   0x1740, 0x1753,
746   0x1760, 0x176c,
747   0x176e, 0x1770,
748   0x1772, 0x1773,
749   0x1780, 0x17b3,
750   0x17b6, 0x17d3,
751   0x17d7, 0x17d7,
752   0x17dc, 0x17dd,
753   0x180b, 0x180d,
754   0x1820, 0x1877,
755   0x1880, 0x18a9,
756   0x1900, 0x191c,
757   0x1920, 0x192b,
758   0x1930, 0x193b,
759   0x1950, 0x196d,
760   0x1970, 0x1974,
761   0x1d00, 0x1d6b,
762   0x1e00, 0x1e9b,
763   0x1ea0, 0x1ef9,
764   0x1f00, 0x1f15,
765   0x1f18, 0x1f1d,
766   0x1f20, 0x1f45,
767   0x1f48, 0x1f4d,
768   0x1f50, 0x1f57,
769   0x1f59, 0x1f59,
770   0x1f5b, 0x1f5b,
771   0x1f5d, 0x1f5d,
772   0x1f5f, 0x1f7d,
773   0x1f80, 0x1fb4,
774   0x1fb6, 0x1fbc,
775   0x1fbe, 0x1fbe,
776   0x1fc2, 0x1fc4,
777   0x1fc6, 0x1fcc,
778   0x1fd0, 0x1fd3,
779   0x1fd6, 0x1fdb,
780   0x1fe0, 0x1fec,
781   0x1ff2, 0x1ff4,
782   0x1ff6, 0x1ffc,
783   0x2071, 0x2071,
784   0x207f, 0x207f,
785   0x20d0, 0x20ea,
786   0x2102, 0x2102,
787   0x2107, 0x2107,
788   0x210a, 0x2113,
789   0x2115, 0x2115,
790   0x2119, 0x211d,
791   0x2124, 0x2124,
792   0x2126, 0x2126,
793   0x2128, 0x2128,
794   0x212a, 0x212d,
795   0x212f, 0x2131,
796   0x2133, 0x2139,
797   0x213d, 0x213f,
798   0x2145, 0x2149,
799   0x3005, 0x3006,
800   0x302a, 0x302f,
801   0x3031, 0x3035,
802   0x303b, 0x303c,
803   0x3041, 0x3096,
804   0x3099, 0x309a,
805   0x309d, 0x309f,
806   0x30a1, 0x30fa,
807   0x30fc, 0x30ff,
808   0x3105, 0x312c,
809   0x3131, 0x318e,
810   0x31a0, 0x31b7,
811   0x31f0, 0x31ff,
812   0x3400, 0x4db5,
813   0x4e00, 0x9fa5,
814   0xa000, 0xa48c,
815   0xac00, 0xd7a3,
816   0xf900, 0xfa2d,
817   0xfa30, 0xfa6a,
818   0xfb00, 0xfb06,
819   0xfb13, 0xfb17,
820   0xfb1d, 0xfb28,
821   0xfb2a, 0xfb36,
822   0xfb38, 0xfb3c,
823   0xfb3e, 0xfb3e,
824   0xfb40, 0xfb41,
825   0xfb43, 0xfb44,
826   0xfb46, 0xfbb1,
827   0xfbd3, 0xfd3d,
828   0xfd50, 0xfd8f,
829   0xfd92, 0xfdc7,
830   0xfdf0, 0xfdfb,
831   0xfe00, 0xfe0f,
832   0xfe20, 0xfe23,
833   0xfe70, 0xfe74,
834   0xfe76, 0xfefc,
835   0xff21, 0xff3a,
836   0xff41, 0xff5a,
837   0xff66, 0xffbe,
838   0xffc2, 0xffc7,
839   0xffca, 0xffcf,
840   0xffd2, 0xffd7,
841   0xffda, 0xffdc,
842   0x10000, 0x1000b,
843   0x1000d, 0x10026,
844   0x10028, 0x1003a,
845   0x1003c, 0x1003d,
846   0x1003f, 0x1004d,
847   0x10050, 0x1005d,
848   0x10080, 0x100fa,
849   0x10300, 0x1031e,
850   0x10330, 0x10349,
851   0x10380, 0x1039d,
852   0x10400, 0x1049d,
853   0x10800, 0x10805,
854   0x10808, 0x10808,
855   0x1080a, 0x10835,
856   0x10837, 0x10838,
857   0x1083c, 0x1083c,
858   0x1083f, 0x1083f,
859   0x1d165, 0x1d169,
860   0x1d16d, 0x1d172,
861   0x1d17b, 0x1d182,
862   0x1d185, 0x1d18b,
863   0x1d1aa, 0x1d1ad,
864   0x1d400, 0x1d454,
865   0x1d456, 0x1d49c,
866   0x1d49e, 0x1d49f,
867   0x1d4a2, 0x1d4a2,
868   0x1d4a5, 0x1d4a6,
869   0x1d4a9, 0x1d4ac,
870   0x1d4ae, 0x1d4b9,
871   0x1d4bb, 0x1d4bb,
872   0x1d4bd, 0x1d4c3,
873   0x1d4c5, 0x1d505,
874   0x1d507, 0x1d50a,
875   0x1d50d, 0x1d514,
876   0x1d516, 0x1d51c,
877   0x1d51e, 0x1d539,
878   0x1d53b, 0x1d53e,
879   0x1d540, 0x1d544,
880   0x1d546, 0x1d546,
881   0x1d54a, 0x1d550,
882   0x1d552, 0x1d6a3,
883   0x1d6a8, 0x1d6c0,
884   0x1d6c2, 0x1d6da,
885   0x1d6dc, 0x1d6fa,
886   0x1d6fc, 0x1d714,
887   0x1d716, 0x1d734,
888   0x1d736, 0x1d74e,
889   0x1d750, 0x1d76e,
890   0x1d770, 0x1d788,
891   0x1d78a, 0x1d7a8,
892   0x1d7aa, 0x1d7c2,
893   0x1d7c4, 0x1d7c9,
894   0x20000, 0x2a6d6,
895   0x2f800, 0x2fa1d,
896   0xe0100, 0xe01ef
897 #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
898 }; /* end of CRAlpha */
899 
900 static const OnigCodePoint CRBlank[] = {
901 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
902   9,
903 #else
904   3,
905 #endif
906   0x0009, 0x0009,
907   0x0020, 0x0020,
908   0x00a0, 0x00a0
909 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
910   ,
911   0x1680, 0x1680,
912   0x180e, 0x180e,
913   0x2000, 0x200a,
914   0x202f, 0x202f,
915   0x205f, 0x205f,
916   0x3000, 0x3000
917 #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
918 }; /* end of CRBlank */
919 
920 static const OnigCodePoint CRCntrl[] = {
921 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
922   19,
923 #else
924   3,
925 #endif
926   0x0000, 0x001f,
927   0x007f, 0x009f,
928   0x00ad, 0x00ad
929 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
930   ,
931   0x0600, 0x0603,
932   0x06dd, 0x06dd,
933   0x070f, 0x070f,
934   0x17b4, 0x17b5,
935   0x200b, 0x200f,
936   0x202a, 0x202e,
937   0x2060, 0x2063,
938   0x206a, 0x206f,
939   0xd800, 0xf8ff,
940   0xfeff, 0xfeff,
941   0xfff9, 0xfffb,
942   0x1d173, 0x1d17a,
943   0xe0001, 0xe0001,
944   0xe0020, 0xe007f,
945   0xf0000, 0xffffd,
946   0x100000, 0x10fffd
947 #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
948 }; /* end of CRCntrl */
949 
950 static const OnigCodePoint CRDigit[] = {
951 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
952   23,
953 #else
954   1,
955 #endif
956   0x0030, 0x0039
957 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
958   ,
959   0x0660, 0x0669,
960   0x06f0, 0x06f9,
961   0x0966, 0x096f,
962   0x09e6, 0x09ef,
963   0x0a66, 0x0a6f,
964   0x0ae6, 0x0aef,
965   0x0b66, 0x0b6f,
966   0x0be7, 0x0bef,
967   0x0c66, 0x0c6f,
968   0x0ce6, 0x0cef,
969   0x0d66, 0x0d6f,
970   0x0e50, 0x0e59,
971   0x0ed0, 0x0ed9,
972   0x0f20, 0x0f29,
973   0x1040, 0x1049,
974   0x1369, 0x1371,
975   0x17e0, 0x17e9,
976   0x1810, 0x1819,
977   0x1946, 0x194f,
978   0xff10, 0xff19,
979   0x104a0, 0x104a9,
980   0x1d7ce, 0x1d7ff
981 #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
982 }; /* end of CRDigit */
983 
984 static const OnigCodePoint CRGraph[] = {
985 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
986   405,
987 #else
988   2,
989 #endif
990   0x0021, 0x007e,
991   0x00a1, 0x0236
992 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
993   ,
994   0x0250, 0x0357,
995   0x035d, 0x036f,
996   0x0374, 0x0375,
997   0x037a, 0x037a,
998   0x037e, 0x037e,
999   0x0384, 0x038a,
1000   0x038c, 0x038c,
1001   0x038e, 0x03a1,
1002   0x03a3, 0x03ce,
1003   0x03d0, 0x03fb,
1004   0x0400, 0x0486,
1005   0x0488, 0x04ce,
1006   0x04d0, 0x04f5,
1007   0x04f8, 0x04f9,
1008   0x0500, 0x050f,
1009   0x0531, 0x0556,
1010   0x0559, 0x055f,
1011   0x0561, 0x0587,
1012   0x0589, 0x058a,
1013   0x0591, 0x05a1,
1014   0x05a3, 0x05b9,
1015   0x05bb, 0x05c4,
1016   0x05d0, 0x05ea,
1017   0x05f0, 0x05f4,
1018   0x0600, 0x0603,
1019   0x060c, 0x0615,
1020   0x061b, 0x061b,
1021   0x061f, 0x061f,
1022   0x0621, 0x063a,
1023   0x0640, 0x0658,
1024   0x0660, 0x070d,
1025   0x070f, 0x074a,
1026   0x074d, 0x074f,
1027   0x0780, 0x07b1,
1028   0x0901, 0x0939,
1029   0x093c, 0x094d,
1030   0x0950, 0x0954,
1031   0x0958, 0x0970,
1032   0x0981, 0x0983,
1033   0x0985, 0x098c,
1034   0x098f, 0x0990,
1035   0x0993, 0x09a8,
1036   0x09aa, 0x09b0,
1037   0x09b2, 0x09b2,
1038   0x09b6, 0x09b9,
1039   0x09bc, 0x09c4,
1040   0x09c7, 0x09c8,
1041   0x09cb, 0x09cd,
1042   0x09d7, 0x09d7,
1043   0x09dc, 0x09dd,
1044   0x09df, 0x09e3,
1045   0x09e6, 0x09fa,
1046   0x0a01, 0x0a03,
1047   0x0a05, 0x0a0a,
1048   0x0a0f, 0x0a10,
1049   0x0a13, 0x0a28,
1050   0x0a2a, 0x0a30,
1051   0x0a32, 0x0a33,
1052   0x0a35, 0x0a36,
1053   0x0a38, 0x0a39,
1054   0x0a3c, 0x0a3c,
1055   0x0a3e, 0x0a42,
1056   0x0a47, 0x0a48,
1057   0x0a4b, 0x0a4d,
1058   0x0a59, 0x0a5c,
1059   0x0a5e, 0x0a5e,
1060   0x0a66, 0x0a74,
1061   0x0a81, 0x0a83,
1062   0x0a85, 0x0a8d,
1063   0x0a8f, 0x0a91,
1064   0x0a93, 0x0aa8,
1065   0x0aaa, 0x0ab0,
1066   0x0ab2, 0x0ab3,
1067   0x0ab5, 0x0ab9,
1068   0x0abc, 0x0ac5,
1069   0x0ac7, 0x0ac9,
1070   0x0acb, 0x0acd,
1071   0x0ad0, 0x0ad0,
1072   0x0ae0, 0x0ae3,
1073   0x0ae6, 0x0aef,
1074   0x0af1, 0x0af1,
1075   0x0b01, 0x0b03,
1076   0x0b05, 0x0b0c,
1077   0x0b0f, 0x0b10,
1078   0x0b13, 0x0b28,
1079   0x0b2a, 0x0b30,
1080   0x0b32, 0x0b33,
1081   0x0b35, 0x0b39,
1082   0x0b3c, 0x0b43,
1083   0x0b47, 0x0b48,
1084   0x0b4b, 0x0b4d,
1085   0x0b56, 0x0b57,
1086   0x0b5c, 0x0b5d,
1087   0x0b5f, 0x0b61,
1088   0x0b66, 0x0b71,
1089   0x0b82, 0x0b83,
1090   0x0b85, 0x0b8a,
1091   0x0b8e, 0x0b90,
1092   0x0b92, 0x0b95,
1093   0x0b99, 0x0b9a,
1094   0x0b9c, 0x0b9c,
1095   0x0b9e, 0x0b9f,
1096   0x0ba3, 0x0ba4,
1097   0x0ba8, 0x0baa,
1098   0x0bae, 0x0bb5,
1099   0x0bb7, 0x0bb9,
1100   0x0bbe, 0x0bc2,
1101   0x0bc6, 0x0bc8,
1102   0x0bca, 0x0bcd,
1103   0x0bd7, 0x0bd7,
1104   0x0be7, 0x0bfa,
1105   0x0c01, 0x0c03,
1106   0x0c05, 0x0c0c,
1107   0x0c0e, 0x0c10,
1108   0x0c12, 0x0c28,
1109   0x0c2a, 0x0c33,
1110   0x0c35, 0x0c39,
1111   0x0c3e, 0x0c44,
1112   0x0c46, 0x0c48,
1113   0x0c4a, 0x0c4d,
1114   0x0c55, 0x0c56,
1115   0x0c60, 0x0c61,
1116   0x0c66, 0x0c6f,
1117   0x0c82, 0x0c83,
1118   0x0c85, 0x0c8c,
1119   0x0c8e, 0x0c90,
1120   0x0c92, 0x0ca8,
1121   0x0caa, 0x0cb3,
1122   0x0cb5, 0x0cb9,
1123   0x0cbc, 0x0cc4,
1124   0x0cc6, 0x0cc8,
1125   0x0cca, 0x0ccd,
1126   0x0cd5, 0x0cd6,
1127   0x0cde, 0x0cde,
1128   0x0ce0, 0x0ce1,
1129   0x0ce6, 0x0cef,
1130   0x0d02, 0x0d03,
1131   0x0d05, 0x0d0c,
1132   0x0d0e, 0x0d10,
1133   0x0d12, 0x0d28,
1134   0x0d2a, 0x0d39,
1135   0x0d3e, 0x0d43,
1136   0x0d46, 0x0d48,
1137   0x0d4a, 0x0d4d,
1138   0x0d57, 0x0d57,
1139   0x0d60, 0x0d61,
1140   0x0d66, 0x0d6f,
1141   0x0d82, 0x0d83,
1142   0x0d85, 0x0d96,
1143   0x0d9a, 0x0db1,
1144   0x0db3, 0x0dbb,
1145   0x0dbd, 0x0dbd,
1146   0x0dc0, 0x0dc6,
1147   0x0dca, 0x0dca,
1148   0x0dcf, 0x0dd4,
1149   0x0dd6, 0x0dd6,
1150   0x0dd8, 0x0ddf,
1151   0x0df2, 0x0df4,
1152   0x0e01, 0x0e3a,
1153   0x0e3f, 0x0e5b,
1154   0x0e81, 0x0e82,
1155   0x0e84, 0x0e84,
1156   0x0e87, 0x0e88,
1157   0x0e8a, 0x0e8a,
1158   0x0e8d, 0x0e8d,
1159   0x0e94, 0x0e97,
1160   0x0e99, 0x0e9f,
1161   0x0ea1, 0x0ea3,
1162   0x0ea5, 0x0ea5,
1163   0x0ea7, 0x0ea7,
1164   0x0eaa, 0x0eab,
1165   0x0ead, 0x0eb9,
1166   0x0ebb, 0x0ebd,
1167   0x0ec0, 0x0ec4,
1168   0x0ec6, 0x0ec6,
1169   0x0ec8, 0x0ecd,
1170   0x0ed0, 0x0ed9,
1171   0x0edc, 0x0edd,
1172   0x0f00, 0x0f47,
1173   0x0f49, 0x0f6a,
1174   0x0f71, 0x0f8b,
1175   0x0f90, 0x0f97,
1176   0x0f99, 0x0fbc,
1177   0x0fbe, 0x0fcc,
1178   0x0fcf, 0x0fcf,
1179   0x1000, 0x1021,
1180   0x1023, 0x1027,
1181   0x1029, 0x102a,
1182   0x102c, 0x1032,
1183   0x1036, 0x1039,
1184   0x1040, 0x1059,
1185   0x10a0, 0x10c5,
1186   0x10d0, 0x10f8,
1187   0x10fb, 0x10fb,
1188   0x1100, 0x1159,
1189   0x115f, 0x11a2,
1190   0x11a8, 0x11f9,
1191   0x1200, 0x1206,
1192   0x1208, 0x1246,
1193   0x1248, 0x1248,
1194   0x124a, 0x124d,
1195   0x1250, 0x1256,
1196   0x1258, 0x1258,
1197   0x125a, 0x125d,
1198   0x1260, 0x1286,
1199   0x1288, 0x1288,
1200   0x128a, 0x128d,
1201   0x1290, 0x12ae,
1202   0x12b0, 0x12b0,
1203   0x12b2, 0x12b5,
1204   0x12b8, 0x12be,
1205   0x12c0, 0x12c0,
1206   0x12c2, 0x12c5,
1207   0x12c8, 0x12ce,
1208   0x12d0, 0x12d6,
1209   0x12d8, 0x12ee,
1210   0x12f0, 0x130e,
1211   0x1310, 0x1310,
1212   0x1312, 0x1315,
1213   0x1318, 0x131e,
1214   0x1320, 0x1346,
1215   0x1348, 0x135a,
1216   0x1361, 0x137c,
1217   0x13a0, 0x13f4,
1218   0x1401, 0x1676,
1219   0x1681, 0x169c,
1220   0x16a0, 0x16f0,
1221   0x1700, 0x170c,
1222   0x170e, 0x1714,
1223   0x1720, 0x1736,
1224   0x1740, 0x1753,
1225   0x1760, 0x176c,
1226   0x176e, 0x1770,
1227   0x1772, 0x1773,
1228   0x1780, 0x17dd,
1229   0x17e0, 0x17e9,
1230   0x17f0, 0x17f9,
1231   0x1800, 0x180d,
1232   0x1810, 0x1819,
1233   0x1820, 0x1877,
1234   0x1880, 0x18a9,
1235   0x1900, 0x191c,
1236   0x1920, 0x192b,
1237   0x1930, 0x193b,
1238   0x1940, 0x1940,
1239   0x1944, 0x196d,
1240   0x1970, 0x1974,
1241   0x19e0, 0x19ff,
1242   0x1d00, 0x1d6b,
1243   0x1e00, 0x1e9b,
1244   0x1ea0, 0x1ef9,
1245   0x1f00, 0x1f15,
1246   0x1f18, 0x1f1d,
1247   0x1f20, 0x1f45,
1248   0x1f48, 0x1f4d,
1249   0x1f50, 0x1f57,
1250   0x1f59, 0x1f59,
1251   0x1f5b, 0x1f5b,
1252   0x1f5d, 0x1f5d,
1253   0x1f5f, 0x1f7d,
1254   0x1f80, 0x1fb4,
1255   0x1fb6, 0x1fc4,
1256   0x1fc6, 0x1fd3,
1257   0x1fd6, 0x1fdb,
1258   0x1fdd, 0x1fef,
1259   0x1ff2, 0x1ff4,
1260   0x1ff6, 0x1ffe,
1261   0x200b, 0x2027,
1262   0x202a, 0x202e,
1263   0x2030, 0x2054,
1264   0x2057, 0x2057,
1265   0x2060, 0x2063,
1266   0x206a, 0x2071,
1267   0x2074, 0x208e,
1268   0x20a0, 0x20b1,
1269   0x20d0, 0x20ea,
1270   0x2100, 0x213b,
1271   0x213d, 0x214b,
1272   0x2153, 0x2183,
1273   0x2190, 0x23d0,
1274   0x2400, 0x2426,
1275   0x2440, 0x244a,
1276   0x2460, 0x2617,
1277   0x2619, 0x267d,
1278   0x2680, 0x2691,
1279   0x26a0, 0x26a1,
1280   0x2701, 0x2704,
1281   0x2706, 0x2709,
1282   0x270c, 0x2727,
1283   0x2729, 0x274b,
1284   0x274d, 0x274d,
1285   0x274f, 0x2752,
1286   0x2756, 0x2756,
1287   0x2758, 0x275e,
1288   0x2761, 0x2794,
1289   0x2798, 0x27af,
1290   0x27b1, 0x27be,
1291   0x27d0, 0x27eb,
1292   0x27f0, 0x2b0d,
1293   0x2e80, 0x2e99,
1294   0x2e9b, 0x2ef3,
1295   0x2f00, 0x2fd5,
1296   0x2ff0, 0x2ffb,
1297   0x3001, 0x303f,
1298   0x3041, 0x3096,
1299   0x3099, 0x30ff,
1300   0x3105, 0x312c,
1301   0x3131, 0x318e,
1302   0x3190, 0x31b7,
1303   0x31f0, 0x321e,
1304   0x3220, 0x3243,
1305   0x3250, 0x327d,
1306   0x327f, 0x32fe,
1307   0x3300, 0x4db5,
1308   0x4dc0, 0x9fa5,
1309   0xa000, 0xa48c,
1310   0xa490, 0xa4c6,
1311   0xac00, 0xd7a3,
1312   0xe000, 0xfa2d,
1313   0xfa30, 0xfa6a,
1314   0xfb00, 0xfb06,
1315   0xfb13, 0xfb17,
1316   0xfb1d, 0xfb36,
1317   0xfb38, 0xfb3c,
1318   0xfb3e, 0xfb3e,
1319   0xfb40, 0xfb41,
1320   0xfb43, 0xfb44,
1321   0xfb46, 0xfbb1,
1322   0xfbd3, 0xfd3f,
1323   0xfd50, 0xfd8f,
1324   0xfd92, 0xfdc7,
1325   0xfdf0, 0xfdfd,
1326   0xfe00, 0xfe0f,
1327   0xfe20, 0xfe23,
1328   0xfe30, 0xfe52,
1329   0xfe54, 0xfe66,
1330   0xfe68, 0xfe6b,
1331   0xfe70, 0xfe74,
1332   0xfe76, 0xfefc,
1333   0xfeff, 0xfeff,
1334   0xff01, 0xffbe,
1335   0xffc2, 0xffc7,
1336   0xffca, 0xffcf,
1337   0xffd2, 0xffd7,
1338   0xffda, 0xffdc,
1339   0xffe0, 0xffe6,
1340   0xffe8, 0xffee,
1341   0xfff9, 0xfffd,
1342   0x10000, 0x1000b,
1343   0x1000d, 0x10026,
1344   0x10028, 0x1003a,
1345   0x1003c, 0x1003d,
1346   0x1003f, 0x1004d,
1347   0x10050, 0x1005d,
1348   0x10080, 0x100fa,
1349   0x10100, 0x10102,
1350   0x10107, 0x10133,
1351   0x10137, 0x1013f,
1352   0x10300, 0x1031e,
1353   0x10320, 0x10323,
1354   0x10330, 0x1034a,
1355   0x10380, 0x1039d,
1356   0x1039f, 0x1039f,
1357   0x10400, 0x1049d,
1358   0x104a0, 0x104a9,
1359   0x10800, 0x10805,
1360   0x10808, 0x10808,
1361   0x1080a, 0x10835,
1362   0x10837, 0x10838,
1363   0x1083c, 0x1083c,
1364   0x1083f, 0x1083f,
1365   0x1d000, 0x1d0f5,
1366   0x1d100, 0x1d126,
1367   0x1d12a, 0x1d1dd,
1368   0x1d300, 0x1d356,
1369   0x1d400, 0x1d454,
1370   0x1d456, 0x1d49c,
1371   0x1d49e, 0x1d49f,
1372   0x1d4a2, 0x1d4a2,
1373   0x1d4a5, 0x1d4a6,
1374   0x1d4a9, 0x1d4ac,
1375   0x1d4ae, 0x1d4b9,
1376   0x1d4bb, 0x1d4bb,
1377   0x1d4bd, 0x1d4c3,
1378   0x1d4c5, 0x1d505,
1379   0x1d507, 0x1d50a,
1380   0x1d50d, 0x1d514,
1381   0x1d516, 0x1d51c,
1382   0x1d51e, 0x1d539,
1383   0x1d53b, 0x1d53e,
1384   0x1d540, 0x1d544,
1385   0x1d546, 0x1d546,
1386   0x1d54a, 0x1d550,
1387   0x1d552, 0x1d6a3,
1388   0x1d6a8, 0x1d7c9,
1389   0x1d7ce, 0x1d7ff,
1390   0x20000, 0x2a6d6,
1391   0x2f800, 0x2fa1d,
1392   0xe0001, 0xe0001,
1393   0xe0020, 0xe007f,
1394   0xe0100, 0xe01ef,
1395   0xf0000, 0xffffd,
1396   0x100000, 0x10fffd
1397 #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
1398 }; /* end of CRGraph */
1399 
1400 static const OnigCodePoint CRLower[] = {
1401 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
1402   424,
1403 #else
1404   6,
1405 #endif
1406   0x0061, 0x007a,
1407   0x00aa, 0x00aa,
1408   0x00b5, 0x00b5,
1409   0x00ba, 0x00ba,
1410   0x00df, 0x00f6,
1411   0x00f8, 0x00ff
1412 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
1413   ,
1414   0x0101, 0x0101,
1415   0x0103, 0x0103,
1416   0x0105, 0x0105,
1417   0x0107, 0x0107,
1418   0x0109, 0x0109,
1419   0x010b, 0x010b,
1420   0x010d, 0x010d,
1421   0x010f, 0x010f,
1422   0x0111, 0x0111,
1423   0x0113, 0x0113,
1424   0x0115, 0x0115,
1425   0x0117, 0x0117,
1426   0x0119, 0x0119,
1427   0x011b, 0x011b,
1428   0x011d, 0x011d,
1429   0x011f, 0x011f,
1430   0x0121, 0x0121,
1431   0x0123, 0x0123,
1432   0x0125, 0x0125,
1433   0x0127, 0x0127,
1434   0x0129, 0x0129,
1435   0x012b, 0x012b,
1436   0x012d, 0x012d,
1437   0x012f, 0x012f,
1438   0x0131, 0x0131,
1439   0x0133, 0x0133,
1440   0x0135, 0x0135,
1441   0x0137, 0x0138,
1442   0x013a, 0x013a,
1443   0x013c, 0x013c,
1444   0x013e, 0x013e,
1445   0x0140, 0x0140,
1446   0x0142, 0x0142,
1447   0x0144, 0x0144,
1448   0x0146, 0x0146,
1449   0x0148, 0x0149,
1450   0x014b, 0x014b,
1451   0x014d, 0x014d,
1452   0x014f, 0x014f,
1453   0x0151, 0x0151,
1454   0x0153, 0x0153,
1455   0x0155, 0x0155,
1456   0x0157, 0x0157,
1457   0x0159, 0x0159,
1458   0x015b, 0x015b,
1459   0x015d, 0x015d,
1460   0x015f, 0x015f,
1461   0x0161, 0x0161,
1462   0x0163, 0x0163,
1463   0x0165, 0x0165,
1464   0x0167, 0x0167,
1465   0x0169, 0x0169,
1466   0x016b, 0x016b,
1467   0x016d, 0x016d,
1468   0x016f, 0x016f,
1469   0x0171, 0x0171,
1470   0x0173, 0x0173,
1471   0x0175, 0x0175,
1472   0x0177, 0x0177,
1473   0x017a, 0x017a,
1474   0x017c, 0x017c,
1475   0x017e, 0x0180,
1476   0x0183, 0x0183,
1477   0x0185, 0x0185,
1478   0x0188, 0x0188,
1479   0x018c, 0x018d,
1480   0x0192, 0x0192,
1481   0x0195, 0x0195,
1482   0x0199, 0x019b,
1483   0x019e, 0x019e,
1484   0x01a1, 0x01a1,
1485   0x01a3, 0x01a3,
1486   0x01a5, 0x01a5,
1487   0x01a8, 0x01a8,
1488   0x01aa, 0x01ab,
1489   0x01ad, 0x01ad,
1490   0x01b0, 0x01b0,
1491   0x01b4, 0x01b4,
1492   0x01b6, 0x01b6,
1493   0x01b9, 0x01ba,
1494   0x01bd, 0x01bf,
1495   0x01c6, 0x01c6,
1496   0x01c9, 0x01c9,
1497   0x01cc, 0x01cc,
1498   0x01ce, 0x01ce,
1499   0x01d0, 0x01d0,
1500   0x01d2, 0x01d2,
1501   0x01d4, 0x01d4,
1502   0x01d6, 0x01d6,
1503   0x01d8, 0x01d8,
1504   0x01da, 0x01da,
1505   0x01dc, 0x01dd,
1506   0x01df, 0x01df,
1507   0x01e1, 0x01e1,
1508   0x01e3, 0x01e3,
1509   0x01e5, 0x01e5,
1510   0x01e7, 0x01e7,
1511   0x01e9, 0x01e9,
1512   0x01eb, 0x01eb,
1513   0x01ed, 0x01ed,
1514   0x01ef, 0x01f0,
1515   0x01f3, 0x01f3,
1516   0x01f5, 0x01f5,
1517   0x01f9, 0x01f9,
1518   0x01fb, 0x01fb,
1519   0x01fd, 0x01fd,
1520   0x01ff, 0x01ff,
1521   0x0201, 0x0201,
1522   0x0203, 0x0203,
1523   0x0205, 0x0205,
1524   0x0207, 0x0207,
1525   0x0209, 0x0209,
1526   0x020b, 0x020b,
1527   0x020d, 0x020d,
1528   0x020f, 0x020f,
1529   0x0211, 0x0211,
1530   0x0213, 0x0213,
1531   0x0215, 0x0215,
1532   0x0217, 0x0217,
1533   0x0219, 0x0219,
1534   0x021b, 0x021b,
1535   0x021d, 0x021d,
1536   0x021f, 0x021f,
1537   0x0221, 0x0221,
1538   0x0223, 0x0223,
1539   0x0225, 0x0225,
1540   0x0227, 0x0227,
1541   0x0229, 0x0229,
1542   0x022b, 0x022b,
1543   0x022d, 0x022d,
1544   0x022f, 0x022f,
1545   0x0231, 0x0231,
1546   0x0233, 0x0236,
1547   0x0250, 0x02af,
1548   0x0390, 0x0390,
1549   0x03ac, 0x03ce,
1550   0x03d0, 0x03d1,
1551   0x03d5, 0x03d7,
1552   0x03d9, 0x03d9,
1553   0x03db, 0x03db,
1554   0x03dd, 0x03dd,
1555   0x03df, 0x03df,
1556   0x03e1, 0x03e1,
1557   0x03e3, 0x03e3,
1558   0x03e5, 0x03e5,
1559   0x03e7, 0x03e7,
1560   0x03e9, 0x03e9,
1561   0x03eb, 0x03eb,
1562   0x03ed, 0x03ed,
1563   0x03ef, 0x03f3,
1564   0x03f5, 0x03f5,
1565   0x03f8, 0x03f8,
1566   0x03fb, 0x03fb,
1567   0x0430, 0x045f,
1568   0x0461, 0x0461,
1569   0x0463, 0x0463,
1570   0x0465, 0x0465,
1571   0x0467, 0x0467,
1572   0x0469, 0x0469,
1573   0x046b, 0x046b,
1574   0x046d, 0x046d,
1575   0x046f, 0x046f,
1576   0x0471, 0x0471,
1577   0x0473, 0x0473,
1578   0x0475, 0x0475,
1579   0x0477, 0x0477,
1580   0x0479, 0x0479,
1581   0x047b, 0x047b,
1582   0x047d, 0x047d,
1583   0x047f, 0x047f,
1584   0x0481, 0x0481,
1585   0x048b, 0x048b,
1586   0x048d, 0x048d,
1587   0x048f, 0x048f,
1588   0x0491, 0x0491,
1589   0x0493, 0x0493,
1590   0x0495, 0x0495,
1591   0x0497, 0x0497,
1592   0x0499, 0x0499,
1593   0x049b, 0x049b,
1594   0x049d, 0x049d,
1595   0x049f, 0x049f,
1596   0x04a1, 0x04a1,
1597   0x04a3, 0x04a3,
1598   0x04a5, 0x04a5,
1599   0x04a7, 0x04a7,
1600   0x04a9, 0x04a9,
1601   0x04ab, 0x04ab,
1602   0x04ad, 0x04ad,
1603   0x04af, 0x04af,
1604   0x04b1, 0x04b1,
1605   0x04b3, 0x04b3,
1606   0x04b5, 0x04b5,
1607   0x04b7, 0x04b7,
1608   0x04b9, 0x04b9,
1609   0x04bb, 0x04bb,
1610   0x04bd, 0x04bd,
1611   0x04bf, 0x04bf,
1612   0x04c2, 0x04c2,
1613   0x04c4, 0x04c4,
1614   0x04c6, 0x04c6,
1615   0x04c8, 0x04c8,
1616   0x04ca, 0x04ca,
1617   0x04cc, 0x04cc,
1618   0x04ce, 0x04ce,
1619   0x04d1, 0x04d1,
1620   0x04d3, 0x04d3,
1621   0x04d5, 0x04d5,
1622   0x04d7, 0x04d7,
1623   0x04d9, 0x04d9,
1624   0x04db, 0x04db,
1625   0x04dd, 0x04dd,
1626   0x04df, 0x04df,
1627   0x04e1, 0x04e1,
1628   0x04e3, 0x04e3,
1629   0x04e5, 0x04e5,
1630   0x04e7, 0x04e7,
1631   0x04e9, 0x04e9,
1632   0x04eb, 0x04eb,
1633   0x04ed, 0x04ed,
1634   0x04ef, 0x04ef,
1635   0x04f1, 0x04f1,
1636   0x04f3, 0x04f3,
1637   0x04f5, 0x04f5,
1638   0x04f9, 0x04f9,
1639   0x0501, 0x0501,
1640   0x0503, 0x0503,
1641   0x0505, 0x0505,
1642   0x0507, 0x0507,
1643   0x0509, 0x0509,
1644   0x050b, 0x050b,
1645   0x050d, 0x050d,
1646   0x050f, 0x050f,
1647   0x0561, 0x0587,
1648   0x1d00, 0x1d2b,
1649   0x1d62, 0x1d6b,
1650   0x1e01, 0x1e01,
1651   0x1e03, 0x1e03,
1652   0x1e05, 0x1e05,
1653   0x1e07, 0x1e07,
1654   0x1e09, 0x1e09,
1655   0x1e0b, 0x1e0b,
1656   0x1e0d, 0x1e0d,
1657   0x1e0f, 0x1e0f,
1658   0x1e11, 0x1e11,
1659   0x1e13, 0x1e13,
1660   0x1e15, 0x1e15,
1661   0x1e17, 0x1e17,
1662   0x1e19, 0x1e19,
1663   0x1e1b, 0x1e1b,
1664   0x1e1d, 0x1e1d,
1665   0x1e1f, 0x1e1f,
1666   0x1e21, 0x1e21,
1667   0x1e23, 0x1e23,
1668   0x1e25, 0x1e25,
1669   0x1e27, 0x1e27,
1670   0x1e29, 0x1e29,
1671   0x1e2b, 0x1e2b,
1672   0x1e2d, 0x1e2d,
1673   0x1e2f, 0x1e2f,
1674   0x1e31, 0x1e31,
1675   0x1e33, 0x1e33,
1676   0x1e35, 0x1e35,
1677   0x1e37, 0x1e37,
1678   0x1e39, 0x1e39,
1679   0x1e3b, 0x1e3b,
1680   0x1e3d, 0x1e3d,
1681   0x1e3f, 0x1e3f,
1682   0x1e41, 0x1e41,
1683   0x1e43, 0x1e43,
1684   0x1e45, 0x1e45,
1685   0x1e47, 0x1e47,
1686   0x1e49, 0x1e49,
1687   0x1e4b, 0x1e4b,
1688   0x1e4d, 0x1e4d,
1689   0x1e4f, 0x1e4f,
1690   0x1e51, 0x1e51,
1691   0x1e53, 0x1e53,
1692   0x1e55, 0x1e55,
1693   0x1e57, 0x1e57,
1694   0x1e59, 0x1e59,
1695   0x1e5b, 0x1e5b,
1696   0x1e5d, 0x1e5d,
1697   0x1e5f, 0x1e5f,
1698   0x1e61, 0x1e61,
1699   0x1e63, 0x1e63,
1700   0x1e65, 0x1e65,
1701   0x1e67, 0x1e67,
1702   0x1e69, 0x1e69,
1703   0x1e6b, 0x1e6b,
1704   0x1e6d, 0x1e6d,
1705   0x1e6f, 0x1e6f,
1706   0x1e71, 0x1e71,
1707   0x1e73, 0x1e73,
1708   0x1e75, 0x1e75,
1709   0x1e77, 0x1e77,
1710   0x1e79, 0x1e79,
1711   0x1e7b, 0x1e7b,
1712   0x1e7d, 0x1e7d,
1713   0x1e7f, 0x1e7f,
1714   0x1e81, 0x1e81,
1715   0x1e83, 0x1e83,
1716   0x1e85, 0x1e85,
1717   0x1e87, 0x1e87,
1718   0x1e89, 0x1e89,
1719   0x1e8b, 0x1e8b,
1720   0x1e8d, 0x1e8d,
1721   0x1e8f, 0x1e8f,
1722   0x1e91, 0x1e91,
1723   0x1e93, 0x1e93,
1724   0x1e95, 0x1e9b,
1725   0x1ea1, 0x1ea1,
1726   0x1ea3, 0x1ea3,
1727   0x1ea5, 0x1ea5,
1728   0x1ea7, 0x1ea7,
1729   0x1ea9, 0x1ea9,
1730   0x1eab, 0x1eab,
1731   0x1ead, 0x1ead,
1732   0x1eaf, 0x1eaf,
1733   0x1eb1, 0x1eb1,
1734   0x1eb3, 0x1eb3,
1735   0x1eb5, 0x1eb5,
1736   0x1eb7, 0x1eb7,
1737   0x1eb9, 0x1eb9,
1738   0x1ebb, 0x1ebb,
1739   0x1ebd, 0x1ebd,
1740   0x1ebf, 0x1ebf,
1741   0x1ec1, 0x1ec1,
1742   0x1ec3, 0x1ec3,
1743   0x1ec5, 0x1ec5,
1744   0x1ec7, 0x1ec7,
1745   0x1ec9, 0x1ec9,
1746   0x1ecb, 0x1ecb,
1747   0x1ecd, 0x1ecd,
1748   0x1ecf, 0x1ecf,
1749   0x1ed1, 0x1ed1,
1750   0x1ed3, 0x1ed3,
1751   0x1ed5, 0x1ed5,
1752   0x1ed7, 0x1ed7,
1753   0x1ed9, 0x1ed9,
1754   0x1edb, 0x1edb,
1755   0x1edd, 0x1edd,
1756   0x1edf, 0x1edf,
1757   0x1ee1, 0x1ee1,
1758   0x1ee3, 0x1ee3,
1759   0x1ee5, 0x1ee5,
1760   0x1ee7, 0x1ee7,
1761   0x1ee9, 0x1ee9,
1762   0x1eeb, 0x1eeb,
1763   0x1eed, 0x1eed,
1764   0x1eef, 0x1eef,
1765   0x1ef1, 0x1ef1,
1766   0x1ef3, 0x1ef3,
1767   0x1ef5, 0x1ef5,
1768   0x1ef7, 0x1ef7,
1769   0x1ef9, 0x1ef9,
1770   0x1f00, 0x1f07,
1771   0x1f10, 0x1f15,
1772   0x1f20, 0x1f27,
1773   0x1f30, 0x1f37,
1774   0x1f40, 0x1f45,
1775   0x1f50, 0x1f57,
1776   0x1f60, 0x1f67,
1777   0x1f70, 0x1f7d,
1778   0x1f80, 0x1f87,
1779   0x1f90, 0x1f97,
1780   0x1fa0, 0x1fa7,
1781   0x1fb0, 0x1fb4,
1782   0x1fb6, 0x1fb7,
1783   0x1fbe, 0x1fbe,
1784   0x1fc2, 0x1fc4,
1785   0x1fc6, 0x1fc7,
1786   0x1fd0, 0x1fd3,
1787   0x1fd6, 0x1fd7,
1788   0x1fe0, 0x1fe7,
1789   0x1ff2, 0x1ff4,
1790   0x1ff6, 0x1ff7,
1791   0x2071, 0x2071,
1792   0x207f, 0x207f,
1793   0x210a, 0x210a,
1794   0x210e, 0x210f,
1795   0x2113, 0x2113,
1796   0x212f, 0x212f,
1797   0x2134, 0x2134,
1798   0x2139, 0x2139,
1799   0x213d, 0x213d,
1800   0x2146, 0x2149,
1801   0xfb00, 0xfb06,
1802   0xfb13, 0xfb17,
1803   0xff41, 0xff5a,
1804   0x10428, 0x1044f,
1805   0x1d41a, 0x1d433,
1806   0x1d44e, 0x1d454,
1807   0x1d456, 0x1d467,
1808   0x1d482, 0x1d49b,
1809   0x1d4b6, 0x1d4b9,
1810   0x1d4bb, 0x1d4bb,
1811   0x1d4bd, 0x1d4c3,
1812   0x1d4c5, 0x1d4cf,
1813   0x1d4ea, 0x1d503,
1814   0x1d51e, 0x1d537,
1815   0x1d552, 0x1d56b,
1816   0x1d586, 0x1d59f,
1817   0x1d5ba, 0x1d5d3,
1818   0x1d5ee, 0x1d607,
1819   0x1d622, 0x1d63b,
1820   0x1d656, 0x1d66f,
1821   0x1d68a, 0x1d6a3,
1822   0x1d6c2, 0x1d6da,
1823   0x1d6dc, 0x1d6e1,
1824   0x1d6fc, 0x1d714,
1825   0x1d716, 0x1d71b,
1826   0x1d736, 0x1d74e,
1827   0x1d750, 0x1d755,
1828   0x1d770, 0x1d788,
1829   0x1d78a, 0x1d78f,
1830   0x1d7aa, 0x1d7c2,
1831   0x1d7c4, 0x1d7c9
1832 #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
1833 }; /* end of CRLower */
1834 
1835 static const OnigCodePoint CRPrint[] = {
1836 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
1837   405,
1838 #else
1839   4,
1840 #endif
1841   0x0009, 0x000d,
1842   0x0020, 0x007e,
1843   0x0085, 0x0085,
1844   0x00a0, 0x0236
1845 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
1846   ,
1847   0x0250, 0x0357,
1848   0x035d, 0x036f,
1849   0x0374, 0x0375,
1850   0x037a, 0x037a,
1851   0x037e, 0x037e,
1852   0x0384, 0x038a,
1853   0x038c, 0x038c,
1854   0x038e, 0x03a1,
1855   0x03a3, 0x03ce,
1856   0x03d0, 0x03fb,
1857   0x0400, 0x0486,
1858   0x0488, 0x04ce,
1859   0x04d0, 0x04f5,
1860   0x04f8, 0x04f9,
1861   0x0500, 0x050f,
1862   0x0531, 0x0556,
1863   0x0559, 0x055f,
1864   0x0561, 0x0587,
1865   0x0589, 0x058a,
1866   0x0591, 0x05a1,
1867   0x05a3, 0x05b9,
1868   0x05bb, 0x05c4,
1869   0x05d0, 0x05ea,
1870   0x05f0, 0x05f4,
1871   0x0600, 0x0603,
1872   0x060c, 0x0615,
1873   0x061b, 0x061b,
1874   0x061f, 0x061f,
1875   0x0621, 0x063a,
1876   0x0640, 0x0658,
1877   0x0660, 0x070d,
1878   0x070f, 0x074a,
1879   0x074d, 0x074f,
1880   0x0780, 0x07b1,
1881   0x0901, 0x0939,
1882   0x093c, 0x094d,
1883   0x0950, 0x0954,
1884   0x0958, 0x0970,
1885   0x0981, 0x0983,
1886   0x0985, 0x098c,
1887   0x098f, 0x0990,
1888   0x0993, 0x09a8,
1889   0x09aa, 0x09b0,
1890   0x09b2, 0x09b2,
1891   0x09b6, 0x09b9,
1892   0x09bc, 0x09c4,
1893   0x09c7, 0x09c8,
1894   0x09cb, 0x09cd,
1895   0x09d7, 0x09d7,
1896   0x09dc, 0x09dd,
1897   0x09df, 0x09e3,
1898   0x09e6, 0x09fa,
1899   0x0a01, 0x0a03,
1900   0x0a05, 0x0a0a,
1901   0x0a0f, 0x0a10,
1902   0x0a13, 0x0a28,
1903   0x0a2a, 0x0a30,
1904   0x0a32, 0x0a33,
1905   0x0a35, 0x0a36,
1906   0x0a38, 0x0a39,
1907   0x0a3c, 0x0a3c,
1908   0x0a3e, 0x0a42,
1909   0x0a47, 0x0a48,
1910   0x0a4b, 0x0a4d,
1911   0x0a59, 0x0a5c,
1912   0x0a5e, 0x0a5e,
1913   0x0a66, 0x0a74,
1914   0x0a81, 0x0a83,
1915   0x0a85, 0x0a8d,
1916   0x0a8f, 0x0a91,
1917   0x0a93, 0x0aa8,
1918   0x0aaa, 0x0ab0,
1919   0x0ab2, 0x0ab3,
1920   0x0ab5, 0x0ab9,
1921   0x0abc, 0x0ac5,
1922   0x0ac7, 0x0ac9,
1923   0x0acb, 0x0acd,
1924   0x0ad0, 0x0ad0,
1925   0x0ae0, 0x0ae3,
1926   0x0ae6, 0x0aef,
1927   0x0af1, 0x0af1,
1928   0x0b01, 0x0b03,
1929   0x0b05, 0x0b0c,
1930   0x0b0f, 0x0b10,
1931   0x0b13, 0x0b28,
1932   0x0b2a, 0x0b30,
1933   0x0b32, 0x0b33,
1934   0x0b35, 0x0b39,
1935   0x0b3c, 0x0b43,
1936   0x0b47, 0x0b48,
1937   0x0b4b, 0x0b4d,
1938   0x0b56, 0x0b57,
1939   0x0b5c, 0x0b5d,
1940   0x0b5f, 0x0b61,
1941   0x0b66, 0x0b71,
1942   0x0b82, 0x0b83,
1943   0x0b85, 0x0b8a,
1944   0x0b8e, 0x0b90,
1945   0x0b92, 0x0b95,
1946   0x0b99, 0x0b9a,
1947   0x0b9c, 0x0b9c,
1948   0x0b9e, 0x0b9f,
1949   0x0ba3, 0x0ba4,
1950   0x0ba8, 0x0baa,
1951   0x0bae, 0x0bb5,
1952   0x0bb7, 0x0bb9,
1953   0x0bbe, 0x0bc2,
1954   0x0bc6, 0x0bc8,
1955   0x0bca, 0x0bcd,
1956   0x0bd7, 0x0bd7,
1957   0x0be7, 0x0bfa,
1958   0x0c01, 0x0c03,
1959   0x0c05, 0x0c0c,
1960   0x0c0e, 0x0c10,
1961   0x0c12, 0x0c28,
1962   0x0c2a, 0x0c33,
1963   0x0c35, 0x0c39,
1964   0x0c3e, 0x0c44,
1965   0x0c46, 0x0c48,
1966   0x0c4a, 0x0c4d,
1967   0x0c55, 0x0c56,
1968   0x0c60, 0x0c61,
1969   0x0c66, 0x0c6f,
1970   0x0c82, 0x0c83,
1971   0x0c85, 0x0c8c,
1972   0x0c8e, 0x0c90,
1973   0x0c92, 0x0ca8,
1974   0x0caa, 0x0cb3,
1975   0x0cb5, 0x0cb9,
1976   0x0cbc, 0x0cc4,
1977   0x0cc6, 0x0cc8,
1978   0x0cca, 0x0ccd,
1979   0x0cd5, 0x0cd6,
1980   0x0cde, 0x0cde,
1981   0x0ce0, 0x0ce1,
1982   0x0ce6, 0x0cef,
1983   0x0d02, 0x0d03,
1984   0x0d05, 0x0d0c,
1985   0x0d0e, 0x0d10,
1986   0x0d12, 0x0d28,
1987   0x0d2a, 0x0d39,
1988   0x0d3e, 0x0d43,
1989   0x0d46, 0x0d48,
1990   0x0d4a, 0x0d4d,
1991   0x0d57, 0x0d57,
1992   0x0d60, 0x0d61,
1993   0x0d66, 0x0d6f,
1994   0x0d82, 0x0d83,
1995   0x0d85, 0x0d96,
1996   0x0d9a, 0x0db1,
1997   0x0db3, 0x0dbb,
1998   0x0dbd, 0x0dbd,
1999   0x0dc0, 0x0dc6,
2000   0x0dca, 0x0dca,
2001   0x0dcf, 0x0dd4,
2002   0x0dd6, 0x0dd6,
2003   0x0dd8, 0x0ddf,
2004   0x0df2, 0x0df4,
2005   0x0e01, 0x0e3a,
2006   0x0e3f, 0x0e5b,
2007   0x0e81, 0x0e82,
2008   0x0e84, 0x0e84,
2009   0x0e87, 0x0e88,
2010   0x0e8a, 0x0e8a,
2011   0x0e8d, 0x0e8d,
2012   0x0e94, 0x0e97,
2013   0x0e99, 0x0e9f,
2014   0x0ea1, 0x0ea3,
2015   0x0ea5, 0x0ea5,
2016   0x0ea7, 0x0ea7,
2017   0x0eaa, 0x0eab,
2018   0x0ead, 0x0eb9,
2019   0x0ebb, 0x0ebd,
2020   0x0ec0, 0x0ec4,
2021   0x0ec6, 0x0ec6,
2022   0x0ec8, 0x0ecd,
2023   0x0ed0, 0x0ed9,
2024   0x0edc, 0x0edd,
2025   0x0f00, 0x0f47,
2026   0x0f49, 0x0f6a,
2027   0x0f71, 0x0f8b,
2028   0x0f90, 0x0f97,
2029   0x0f99, 0x0fbc,
2030   0x0fbe, 0x0fcc,
2031   0x0fcf, 0x0fcf,
2032   0x1000, 0x1021,
2033   0x1023, 0x1027,
2034   0x1029, 0x102a,
2035   0x102c, 0x1032,
2036   0x1036, 0x1039,
2037   0x1040, 0x1059,
2038   0x10a0, 0x10c5,
2039   0x10d0, 0x10f8,
2040   0x10fb, 0x10fb,
2041   0x1100, 0x1159,
2042   0x115f, 0x11a2,
2043   0x11a8, 0x11f9,
2044   0x1200, 0x1206,
2045   0x1208, 0x1246,
2046   0x1248, 0x1248,
2047   0x124a, 0x124d,
2048   0x1250, 0x1256,
2049   0x1258, 0x1258,
2050   0x125a, 0x125d,
2051   0x1260, 0x1286,
2052   0x1288, 0x1288,
2053   0x128a, 0x128d,
2054   0x1290, 0x12ae,
2055   0x12b0, 0x12b0,
2056   0x12b2, 0x12b5,
2057   0x12b8, 0x12be,
2058   0x12c0, 0x12c0,
2059   0x12c2, 0x12c5,
2060   0x12c8, 0x12ce,
2061   0x12d0, 0x12d6,
2062   0x12d8, 0x12ee,
2063   0x12f0, 0x130e,
2064   0x1310, 0x1310,
2065   0x1312, 0x1315,
2066   0x1318, 0x131e,
2067   0x1320, 0x1346,
2068   0x1348, 0x135a,
2069   0x1361, 0x137c,
2070   0x13a0, 0x13f4,
2071   0x1401, 0x1676,
2072   0x1680, 0x169c,
2073   0x16a0, 0x16f0,
2074   0x1700, 0x170c,
2075   0x170e, 0x1714,
2076   0x1720, 0x1736,
2077   0x1740, 0x1753,
2078   0x1760, 0x176c,
2079   0x176e, 0x1770,
2080   0x1772, 0x1773,
2081   0x1780, 0x17dd,
2082   0x17e0, 0x17e9,
2083   0x17f0, 0x17f9,
2084   0x1800, 0x180e,
2085   0x1810, 0x1819,
2086   0x1820, 0x1877,
2087   0x1880, 0x18a9,
2088   0x1900, 0x191c,
2089   0x1920, 0x192b,
2090   0x1930, 0x193b,
2091   0x1940, 0x1940,
2092   0x1944, 0x196d,
2093   0x1970, 0x1974,
2094   0x19e0, 0x19ff,
2095   0x1d00, 0x1d6b,
2096   0x1e00, 0x1e9b,
2097   0x1ea0, 0x1ef9,
2098   0x1f00, 0x1f15,
2099   0x1f18, 0x1f1d,
2100   0x1f20, 0x1f45,
2101   0x1f48, 0x1f4d,
2102   0x1f50, 0x1f57,
2103   0x1f59, 0x1f59,
2104   0x1f5b, 0x1f5b,
2105   0x1f5d, 0x1f5d,
2106   0x1f5f, 0x1f7d,
2107   0x1f80, 0x1fb4,
2108   0x1fb6, 0x1fc4,
2109   0x1fc6, 0x1fd3,
2110   0x1fd6, 0x1fdb,
2111   0x1fdd, 0x1fef,
2112   0x1ff2, 0x1ff4,
2113   0x1ff6, 0x1ffe,
2114   0x2000, 0x2054,
2115   0x2057, 0x2057,
2116   0x205f, 0x2063,
2117   0x206a, 0x2071,
2118   0x2074, 0x208e,
2119   0x20a0, 0x20b1,
2120   0x20d0, 0x20ea,
2121   0x2100, 0x213b,
2122   0x213d, 0x214b,
2123   0x2153, 0x2183,
2124   0x2190, 0x23d0,
2125   0x2400, 0x2426,
2126   0x2440, 0x244a,
2127   0x2460, 0x2617,
2128   0x2619, 0x267d,
2129   0x2680, 0x2691,
2130   0x26a0, 0x26a1,
2131   0x2701, 0x2704,
2132   0x2706, 0x2709,
2133   0x270c, 0x2727,
2134   0x2729, 0x274b,
2135   0x274d, 0x274d,
2136   0x274f, 0x2752,
2137   0x2756, 0x2756,
2138   0x2758, 0x275e,
2139   0x2761, 0x2794,
2140   0x2798, 0x27af,
2141   0x27b1, 0x27be,
2142   0x27d0, 0x27eb,
2143   0x27f0, 0x2b0d,
2144   0x2e80, 0x2e99,
2145   0x2e9b, 0x2ef3,
2146   0x2f00, 0x2fd5,
2147   0x2ff0, 0x2ffb,
2148   0x3000, 0x303f,
2149   0x3041, 0x3096,
2150   0x3099, 0x30ff,
2151   0x3105, 0x312c,
2152   0x3131, 0x318e,
2153   0x3190, 0x31b7,
2154   0x31f0, 0x321e,
2155   0x3220, 0x3243,
2156   0x3250, 0x327d,
2157   0x327f, 0x32fe,
2158   0x3300, 0x4db5,
2159   0x4dc0, 0x9fa5,
2160   0xa000, 0xa48c,
2161   0xa490, 0xa4c6,
2162   0xac00, 0xd7a3,
2163   0xe000, 0xfa2d,
2164   0xfa30, 0xfa6a,
2165   0xfb00, 0xfb06,
2166   0xfb13, 0xfb17,
2167   0xfb1d, 0xfb36,
2168   0xfb38, 0xfb3c,
2169   0xfb3e, 0xfb3e,
2170   0xfb40, 0xfb41,
2171   0xfb43, 0xfb44,
2172   0xfb46, 0xfbb1,
2173   0xfbd3, 0xfd3f,
2174   0xfd50, 0xfd8f,
2175   0xfd92, 0xfdc7,
2176   0xfdf0, 0xfdfd,
2177   0xfe00, 0xfe0f,
2178   0xfe20, 0xfe23,
2179   0xfe30, 0xfe52,
2180   0xfe54, 0xfe66,
2181   0xfe68, 0xfe6b,
2182   0xfe70, 0xfe74,
2183   0xfe76, 0xfefc,
2184   0xfeff, 0xfeff,
2185   0xff01, 0xffbe,
2186   0xffc2, 0xffc7,
2187   0xffca, 0xffcf,
2188   0xffd2, 0xffd7,
2189   0xffda, 0xffdc,
2190   0xffe0, 0xffe6,
2191   0xffe8, 0xffee,
2192   0xfff9, 0xfffd,
2193   0x10000, 0x1000b,
2194   0x1000d, 0x10026,
2195   0x10028, 0x1003a,
2196   0x1003c, 0x1003d,
2197   0x1003f, 0x1004d,
2198   0x10050, 0x1005d,
2199   0x10080, 0x100fa,
2200   0x10100, 0x10102,
2201   0x10107, 0x10133,
2202   0x10137, 0x1013f,
2203   0x10300, 0x1031e,
2204   0x10320, 0x10323,
2205   0x10330, 0x1034a,
2206   0x10380, 0x1039d,
2207   0x1039f, 0x1039f,
2208   0x10400, 0x1049d,
2209   0x104a0, 0x104a9,
2210   0x10800, 0x10805,
2211   0x10808, 0x10808,
2212   0x1080a, 0x10835,
2213   0x10837, 0x10838,
2214   0x1083c, 0x1083c,
2215   0x1083f, 0x1083f,
2216   0x1d000, 0x1d0f5,
2217   0x1d100, 0x1d126,
2218   0x1d12a, 0x1d1dd,
2219   0x1d300, 0x1d356,
2220   0x1d400, 0x1d454,
2221   0x1d456, 0x1d49c,
2222   0x1d49e, 0x1d49f,
2223   0x1d4a2, 0x1d4a2,
2224   0x1d4a5, 0x1d4a6,
2225   0x1d4a9, 0x1d4ac,
2226   0x1d4ae, 0x1d4b9,
2227   0x1d4bb, 0x1d4bb,
2228   0x1d4bd, 0x1d4c3,
2229   0x1d4c5, 0x1d505,
2230   0x1d507, 0x1d50a,
2231   0x1d50d, 0x1d514,
2232   0x1d516, 0x1d51c,
2233   0x1d51e, 0x1d539,
2234   0x1d53b, 0x1d53e,
2235   0x1d540, 0x1d544,
2236   0x1d546, 0x1d546,
2237   0x1d54a, 0x1d550,
2238   0x1d552, 0x1d6a3,
2239   0x1d6a8, 0x1d7c9,
2240   0x1d7ce, 0x1d7ff,
2241   0x20000, 0x2a6d6,
2242   0x2f800, 0x2fa1d,
2243   0xe0001, 0xe0001,
2244   0xe0020, 0xe007f,
2245   0xe0100, 0xe01ef,
2246   0xf0000, 0xffffd,
2247   0x100000, 0x10fffd
2248 #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
2249 }; /* end of CRPrint */
2250 
2251 static const OnigCodePoint CRPunct[] = {
2252 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
2253   86,
2254 #else
2255   14,
2256 #endif
2257   0x0021, 0x0023,
2258   0x0025, 0x002a,
2259   0x002c, 0x002f,
2260   0x003a, 0x003b,
2261   0x003f, 0x0040,
2262   0x005b, 0x005d,
2263   0x005f, 0x005f,
2264   0x007b, 0x007b,
2265   0x007d, 0x007d,
2266   0x00a1, 0x00a1,
2267   0x00ab, 0x00ab,
2268   0x00b7, 0x00b7,
2269   0x00bb, 0x00bb,
2270   0x00bf, 0x00bf
2271 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
2272   ,
2273   0x037e, 0x037e,
2274   0x0387, 0x0387,
2275   0x055a, 0x055f,
2276   0x0589, 0x058a,
2277   0x05be, 0x05be,
2278   0x05c0, 0x05c0,
2279   0x05c3, 0x05c3,
2280   0x05f3, 0x05f4,
2281   0x060c, 0x060d,
2282   0x061b, 0x061b,
2283   0x061f, 0x061f,
2284   0x066a, 0x066d,
2285   0x06d4, 0x06d4,
2286   0x0700, 0x070d,
2287   0x0964, 0x0965,
2288   0x0970, 0x0970,
2289   0x0df4, 0x0df4,
2290   0x0e4f, 0x0e4f,
2291   0x0e5a, 0x0e5b,
2292   0x0f04, 0x0f12,
2293   0x0f3a, 0x0f3d,
2294   0x0f85, 0x0f85,
2295   0x104a, 0x104f,
2296   0x10fb, 0x10fb,
2297   0x1361, 0x1368,
2298   0x166d, 0x166e,
2299   0x169b, 0x169c,
2300   0x16eb, 0x16ed,
2301   0x1735, 0x1736,
2302   0x17d4, 0x17d6,
2303   0x17d8, 0x17da,
2304   0x1800, 0x180a,
2305   0x1944, 0x1945,
2306   0x2010, 0x2027,
2307   0x2030, 0x2043,
2308   0x2045, 0x2051,
2309   0x2053, 0x2054,
2310   0x2057, 0x2057,
2311   0x207d, 0x207e,
2312   0x208d, 0x208e,
2313   0x2329, 0x232a,
2314   0x23b4, 0x23b6,
2315   0x2768, 0x2775,
2316   0x27e6, 0x27eb,
2317   0x2983, 0x2998,
2318   0x29d8, 0x29db,
2319   0x29fc, 0x29fd,
2320   0x3001, 0x3003,
2321   0x3008, 0x3011,
2322   0x3014, 0x301f,
2323   0x3030, 0x3030,
2324   0x303d, 0x303d,
2325   0x30a0, 0x30a0,
2326   0x30fb, 0x30fb,
2327   0xfd3e, 0xfd3f,
2328   0xfe30, 0xfe52,
2329   0xfe54, 0xfe61,
2330   0xfe63, 0xfe63,
2331   0xfe68, 0xfe68,
2332   0xfe6a, 0xfe6b,
2333   0xff01, 0xff03,
2334   0xff05, 0xff0a,
2335   0xff0c, 0xff0f,
2336   0xff1a, 0xff1b,
2337   0xff1f, 0xff20,
2338   0xff3b, 0xff3d,
2339   0xff3f, 0xff3f,
2340   0xff5b, 0xff5b,
2341   0xff5d, 0xff5d,
2342   0xff5f, 0xff65,
2343   0x10100, 0x10101,
2344   0x1039f, 0x1039f
2345 #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
2346 }; /* end of CRPunct */
2347 
2348 static const OnigCodePoint CRSpace[] = {
2349 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
2350   11,
2351 #else
2352   4,
2353 #endif
2354   0x0009, 0x000d,
2355   0x0020, 0x0020,
2356   0x0085, 0x0085,
2357   0x00a0, 0x00a0
2358 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
2359   ,
2360   0x1680, 0x1680,
2361   0x180e, 0x180e,
2362   0x2000, 0x200a,
2363   0x2028, 0x2029,
2364   0x202f, 0x202f,
2365   0x205f, 0x205f,
2366   0x3000, 0x3000
2367 #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
2368 }; /* end of CRSpace */
2369 
2370 static const OnigCodePoint CRUpper[] = {
2371 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
2372   421,
2373 #else
2374   3,
2375 #endif
2376   0x0041, 0x005a,
2377   0x00c0, 0x00d6,
2378   0x00d8, 0x00de
2379 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
2380   ,
2381   0x0100, 0x0100,
2382   0x0102, 0x0102,
2383   0x0104, 0x0104,
2384   0x0106, 0x0106,
2385   0x0108, 0x0108,
2386   0x010a, 0x010a,
2387   0x010c, 0x010c,
2388   0x010e, 0x010e,
2389   0x0110, 0x0110,
2390   0x0112, 0x0112,
2391   0x0114, 0x0114,
2392   0x0116, 0x0116,
2393   0x0118, 0x0118,
2394   0x011a, 0x011a,
2395   0x011c, 0x011c,
2396   0x011e, 0x011e,
2397   0x0120, 0x0120,
2398   0x0122, 0x0122,
2399   0x0124, 0x0124,
2400   0x0126, 0x0126,
2401   0x0128, 0x0128,
2402   0x012a, 0x012a,
2403   0x012c, 0x012c,
2404   0x012e, 0x012e,
2405   0x0130, 0x0130,
2406   0x0132, 0x0132,
2407   0x0134, 0x0134,
2408   0x0136, 0x0136,
2409   0x0139, 0x0139,
2410   0x013b, 0x013b,
2411   0x013d, 0x013d,
2412   0x013f, 0x013f,
2413   0x0141, 0x0141,
2414   0x0143, 0x0143,
2415   0x0145, 0x0145,
2416   0x0147, 0x0147,
2417   0x014a, 0x014a,
2418   0x014c, 0x014c,
2419   0x014e, 0x014e,
2420   0x0150, 0x0150,
2421   0x0152, 0x0152,
2422   0x0154, 0x0154,
2423   0x0156, 0x0156,
2424   0x0158, 0x0158,
2425   0x015a, 0x015a,
2426   0x015c, 0x015c,
2427   0x015e, 0x015e,
2428   0x0160, 0x0160,
2429   0x0162, 0x0162,
2430   0x0164, 0x0164,
2431   0x0166, 0x0166,
2432   0x0168, 0x0168,
2433   0x016a, 0x016a,
2434   0x016c, 0x016c,
2435   0x016e, 0x016e,
2436   0x0170, 0x0170,
2437   0x0172, 0x0172,
2438   0x0174, 0x0174,
2439   0x0176, 0x0176,
2440   0x0178, 0x0179,
2441   0x017b, 0x017b,
2442   0x017d, 0x017d,
2443   0x0181, 0x0182,
2444   0x0184, 0x0184,
2445   0x0186, 0x0187,
2446   0x0189, 0x018b,
2447   0x018e, 0x0191,
2448   0x0193, 0x0194,
2449   0x0196, 0x0198,
2450   0x019c, 0x019d,
2451   0x019f, 0x01a0,
2452   0x01a2, 0x01a2,
2453   0x01a4, 0x01a4,
2454   0x01a6, 0x01a7,
2455   0x01a9, 0x01a9,
2456   0x01ac, 0x01ac,
2457   0x01ae, 0x01af,
2458   0x01b1, 0x01b3,
2459   0x01b5, 0x01b5,
2460   0x01b7, 0x01b8,
2461   0x01bc, 0x01bc,
2462   0x01c4, 0x01c4,
2463   0x01c7, 0x01c7,
2464   0x01ca, 0x01ca,
2465   0x01cd, 0x01cd,
2466   0x01cf, 0x01cf,
2467   0x01d1, 0x01d1,
2468   0x01d3, 0x01d3,
2469   0x01d5, 0x01d5,
2470   0x01d7, 0x01d7,
2471   0x01d9, 0x01d9,
2472   0x01db, 0x01db,
2473   0x01de, 0x01de,
2474   0x01e0, 0x01e0,
2475   0x01e2, 0x01e2,
2476   0x01e4, 0x01e4,
2477   0x01e6, 0x01e6,
2478   0x01e8, 0x01e8,
2479   0x01ea, 0x01ea,
2480   0x01ec, 0x01ec,
2481   0x01ee, 0x01ee,
2482   0x01f1, 0x01f1,
2483   0x01f4, 0x01f4,
2484   0x01f6, 0x01f8,
2485   0x01fa, 0x01fa,
2486   0x01fc, 0x01fc,
2487   0x01fe, 0x01fe,
2488   0x0200, 0x0200,
2489   0x0202, 0x0202,
2490   0x0204, 0x0204,
2491   0x0206, 0x0206,
2492   0x0208, 0x0208,
2493   0x020a, 0x020a,
2494   0x020c, 0x020c,
2495   0x020e, 0x020e,
2496   0x0210, 0x0210,
2497   0x0212, 0x0212,
2498   0x0214, 0x0214,
2499   0x0216, 0x0216,
2500   0x0218, 0x0218,
2501   0x021a, 0x021a,
2502   0x021c, 0x021c,
2503   0x021e, 0x021e,
2504   0x0220, 0x0220,
2505   0x0222, 0x0222,
2506   0x0224, 0x0224,
2507   0x0226, 0x0226,
2508   0x0228, 0x0228,
2509   0x022a, 0x022a,
2510   0x022c, 0x022c,
2511   0x022e, 0x022e,
2512   0x0230, 0x0230,
2513   0x0232, 0x0232,
2514   0x0386, 0x0386,
2515   0x0388, 0x038a,
2516   0x038c, 0x038c,
2517   0x038e, 0x038f,
2518   0x0391, 0x03a1,
2519   0x03a3, 0x03ab,
2520   0x03d2, 0x03d4,
2521   0x03d8, 0x03d8,
2522   0x03da, 0x03da,
2523   0x03dc, 0x03dc,
2524   0x03de, 0x03de,
2525   0x03e0, 0x03e0,
2526   0x03e2, 0x03e2,
2527   0x03e4, 0x03e4,
2528   0x03e6, 0x03e6,
2529   0x03e8, 0x03e8,
2530   0x03ea, 0x03ea,
2531   0x03ec, 0x03ec,
2532   0x03ee, 0x03ee,
2533   0x03f4, 0x03f4,
2534   0x03f7, 0x03f7,
2535   0x03f9, 0x03fa,
2536   0x0400, 0x042f,
2537   0x0460, 0x0460,
2538   0x0462, 0x0462,
2539   0x0464, 0x0464,
2540   0x0466, 0x0466,
2541   0x0468, 0x0468,
2542   0x046a, 0x046a,
2543   0x046c, 0x046c,
2544   0x046e, 0x046e,
2545   0x0470, 0x0470,
2546   0x0472, 0x0472,
2547   0x0474, 0x0474,
2548   0x0476, 0x0476,
2549   0x0478, 0x0478,
2550   0x047a, 0x047a,
2551   0x047c, 0x047c,
2552   0x047e, 0x047e,
2553   0x0480, 0x0480,
2554   0x048a, 0x048a,
2555   0x048c, 0x048c,
2556   0x048e, 0x048e,
2557   0x0490, 0x0490,
2558   0x0492, 0x0492,
2559   0x0494, 0x0494,
2560   0x0496, 0x0496,
2561   0x0498, 0x0498,
2562   0x049a, 0x049a,
2563   0x049c, 0x049c,
2564   0x049e, 0x049e,
2565   0x04a0, 0x04a0,
2566   0x04a2, 0x04a2,
2567   0x04a4, 0x04a4,
2568   0x04a6, 0x04a6,
2569   0x04a8, 0x04a8,
2570   0x04aa, 0x04aa,
2571   0x04ac, 0x04ac,
2572   0x04ae, 0x04ae,
2573   0x04b0, 0x04b0,
2574   0x04b2, 0x04b2,
2575   0x04b4, 0x04b4,
2576   0x04b6, 0x04b6,
2577   0x04b8, 0x04b8,
2578   0x04ba, 0x04ba,
2579   0x04bc, 0x04bc,
2580   0x04be, 0x04be,
2581   0x04c0, 0x04c1,
2582   0x04c3, 0x04c3,
2583   0x04c5, 0x04c5,
2584   0x04c7, 0x04c7,
2585   0x04c9, 0x04c9,
2586   0x04cb, 0x04cb,
2587   0x04cd, 0x04cd,
2588   0x04d0, 0x04d0,
2589   0x04d2, 0x04d2,
2590   0x04d4, 0x04d4,
2591   0x04d6, 0x04d6,
2592   0x04d8, 0x04d8,
2593   0x04da, 0x04da,
2594   0x04dc, 0x04dc,
2595   0x04de, 0x04de,
2596   0x04e0, 0x04e0,
2597   0x04e2, 0x04e2,
2598   0x04e4, 0x04e4,
2599   0x04e6, 0x04e6,
2600   0x04e8, 0x04e8,
2601   0x04ea, 0x04ea,
2602   0x04ec, 0x04ec,
2603   0x04ee, 0x04ee,
2604   0x04f0, 0x04f0,
2605   0x04f2, 0x04f2,
2606   0x04f4, 0x04f4,
2607   0x04f8, 0x04f8,
2608   0x0500, 0x0500,
2609   0x0502, 0x0502,
2610   0x0504, 0x0504,
2611   0x0506, 0x0506,
2612   0x0508, 0x0508,
2613   0x050a, 0x050a,
2614   0x050c, 0x050c,
2615   0x050e, 0x050e,
2616   0x0531, 0x0556,
2617   0x10a0, 0x10c5,
2618   0x1e00, 0x1e00,
2619   0x1e02, 0x1e02,
2620   0x1e04, 0x1e04,
2621   0x1e06, 0x1e06,
2622   0x1e08, 0x1e08,
2623   0x1e0a, 0x1e0a,
2624   0x1e0c, 0x1e0c,
2625   0x1e0e, 0x1e0e,
2626   0x1e10, 0x1e10,
2627   0x1e12, 0x1e12,
2628   0x1e14, 0x1e14,
2629   0x1e16, 0x1e16,
2630   0x1e18, 0x1e18,
2631   0x1e1a, 0x1e1a,
2632   0x1e1c, 0x1e1c,
2633   0x1e1e, 0x1e1e,
2634   0x1e20, 0x1e20,
2635   0x1e22, 0x1e22,
2636   0x1e24, 0x1e24,
2637   0x1e26, 0x1e26,
2638   0x1e28, 0x1e28,
2639   0x1e2a, 0x1e2a,
2640   0x1e2c, 0x1e2c,
2641   0x1e2e, 0x1e2e,
2642   0x1e30, 0x1e30,
2643   0x1e32, 0x1e32,
2644   0x1e34, 0x1e34,
2645   0x1e36, 0x1e36,
2646   0x1e38, 0x1e38,
2647   0x1e3a, 0x1e3a,
2648   0x1e3c, 0x1e3c,
2649   0x1e3e, 0x1e3e,
2650   0x1e40, 0x1e40,
2651   0x1e42, 0x1e42,
2652   0x1e44, 0x1e44,
2653   0x1e46, 0x1e46,
2654   0x1e48, 0x1e48,
2655   0x1e4a, 0x1e4a,
2656   0x1e4c, 0x1e4c,
2657   0x1e4e, 0x1e4e,
2658   0x1e50, 0x1e50,
2659   0x1e52, 0x1e52,
2660   0x1e54, 0x1e54,
2661   0x1e56, 0x1e56,
2662   0x1e58, 0x1e58,
2663   0x1e5a, 0x1e5a,
2664   0x1e5c, 0x1e5c,
2665   0x1e5e, 0x1e5e,
2666   0x1e60, 0x1e60,
2667   0x1e62, 0x1e62,
2668   0x1e64, 0x1e64,
2669   0x1e66, 0x1e66,
2670   0x1e68, 0x1e68,
2671   0x1e6a, 0x1e6a,
2672   0x1e6c, 0x1e6c,
2673   0x1e6e, 0x1e6e,
2674   0x1e70, 0x1e70,
2675   0x1e72, 0x1e72,
2676   0x1e74, 0x1e74,
2677   0x1e76, 0x1e76,
2678   0x1e78, 0x1e78,
2679   0x1e7a, 0x1e7a,
2680   0x1e7c, 0x1e7c,
2681   0x1e7e, 0x1e7e,
2682   0x1e80, 0x1e80,
2683   0x1e82, 0x1e82,
2684   0x1e84, 0x1e84,
2685   0x1e86, 0x1e86,
2686   0x1e88, 0x1e88,
2687   0x1e8a, 0x1e8a,
2688   0x1e8c, 0x1e8c,
2689   0x1e8e, 0x1e8e,
2690   0x1e90, 0x1e90,
2691   0x1e92, 0x1e92,
2692   0x1e94, 0x1e94,
2693   0x1ea0, 0x1ea0,
2694   0x1ea2, 0x1ea2,
2695   0x1ea4, 0x1ea4,
2696   0x1ea6, 0x1ea6,
2697   0x1ea8, 0x1ea8,
2698   0x1eaa, 0x1eaa,
2699   0x1eac, 0x1eac,
2700   0x1eae, 0x1eae,
2701   0x1eb0, 0x1eb0,
2702   0x1eb2, 0x1eb2,
2703   0x1eb4, 0x1eb4,
2704   0x1eb6, 0x1eb6,
2705   0x1eb8, 0x1eb8,
2706   0x1eba, 0x1eba,
2707   0x1ebc, 0x1ebc,
2708   0x1ebe, 0x1ebe,
2709   0x1ec0, 0x1ec0,
2710   0x1ec2, 0x1ec2,
2711   0x1ec4, 0x1ec4,
2712   0x1ec6, 0x1ec6,
2713   0x1ec8, 0x1ec8,
2714   0x1eca, 0x1eca,
2715   0x1ecc, 0x1ecc,
2716   0x1ece, 0x1ece,
2717   0x1ed0, 0x1ed0,
2718   0x1ed2, 0x1ed2,
2719   0x1ed4, 0x1ed4,
2720   0x1ed6, 0x1ed6,
2721   0x1ed8, 0x1ed8,
2722   0x1eda, 0x1eda,
2723   0x1edc, 0x1edc,
2724   0x1ede, 0x1ede,
2725   0x1ee0, 0x1ee0,
2726   0x1ee2, 0x1ee2,
2727   0x1ee4, 0x1ee4,
2728   0x1ee6, 0x1ee6,
2729   0x1ee8, 0x1ee8,
2730   0x1eea, 0x1eea,
2731   0x1eec, 0x1eec,
2732   0x1eee, 0x1eee,
2733   0x1ef0, 0x1ef0,
2734   0x1ef2, 0x1ef2,
2735   0x1ef4, 0x1ef4,
2736   0x1ef6, 0x1ef6,
2737   0x1ef8, 0x1ef8,
2738   0x1f08, 0x1f0f,
2739   0x1f18, 0x1f1d,
2740   0x1f28, 0x1f2f,
2741   0x1f38, 0x1f3f,
2742   0x1f48, 0x1f4d,
2743   0x1f59, 0x1f59,
2744   0x1f5b, 0x1f5b,
2745   0x1f5d, 0x1f5d,
2746   0x1f5f, 0x1f5f,
2747   0x1f68, 0x1f6f,
2748   0x1fb8, 0x1fbb,
2749   0x1fc8, 0x1fcb,
2750   0x1fd8, 0x1fdb,
2751   0x1fe8, 0x1fec,
2752   0x1ff8, 0x1ffb,
2753   0x2102, 0x2102,
2754   0x2107, 0x2107,
2755   0x210b, 0x210d,
2756   0x2110, 0x2112,
2757   0x2115, 0x2115,
2758   0x2119, 0x211d,
2759   0x2124, 0x2124,
2760   0x2126, 0x2126,
2761   0x2128, 0x2128,
2762   0x212a, 0x212d,
2763   0x2130, 0x2131,
2764   0x2133, 0x2133,
2765   0x213e, 0x213f,
2766   0x2145, 0x2145,
2767   0xff21, 0xff3a,
2768   0x10400, 0x10427,
2769   0x1d400, 0x1d419,
2770   0x1d434, 0x1d44d,
2771   0x1d468, 0x1d481,
2772   0x1d49c, 0x1d49c,
2773   0x1d49e, 0x1d49f,
2774   0x1d4a2, 0x1d4a2,
2775   0x1d4a5, 0x1d4a6,
2776   0x1d4a9, 0x1d4ac,
2777   0x1d4ae, 0x1d4b5,
2778   0x1d4d0, 0x1d4e9,
2779   0x1d504, 0x1d505,
2780   0x1d507, 0x1d50a,
2781   0x1d50d, 0x1d514,
2782   0x1d516, 0x1d51c,
2783   0x1d538, 0x1d539,
2784   0x1d53b, 0x1d53e,
2785   0x1d540, 0x1d544,
2786   0x1d546, 0x1d546,
2787   0x1d54a, 0x1d550,
2788   0x1d56c, 0x1d585,
2789   0x1d5a0, 0x1d5b9,
2790   0x1d5d4, 0x1d5ed,
2791   0x1d608, 0x1d621,
2792   0x1d63c, 0x1d655,
2793   0x1d670, 0x1d689,
2794   0x1d6a8, 0x1d6c0,
2795   0x1d6e2, 0x1d6fa,
2796   0x1d71c, 0x1d734,
2797   0x1d756, 0x1d76e,
2798   0x1d790, 0x1d7a8
2799 #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
2800 }; /* end of CRUpper */
2801 
2802 static const OnigCodePoint CRXDigit[] = {
2803 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
2804   3,
2805 #else
2806   3,
2807 #endif
2808   0x0030, 0x0039,
2809   0x0041, 0x0046,
2810   0x0061, 0x0066
2811 };
2812 
2813 static const OnigCodePoint CRASCII[] = {
2814 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
2815   1,
2816 #else
2817   1,
2818 #endif
2819   0x0000, 0x007f
2820 };
2821 
2822 static const OnigCodePoint CRWord[] = {
2823 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
2824   436,
2825 #else
2826   12,
2827 #endif
2828   0x0030, 0x0039,
2829   0x0041, 0x005a,
2830   0x005f, 0x005f,
2831   0x0061, 0x007a,
2832   0x00aa, 0x00aa,
2833   0x00b2, 0x00b3,
2834   0x00b5, 0x00b5,
2835   0x00b9, 0x00ba,
2836   0x00bc, 0x00be,
2837   0x00c0, 0x00d6,
2838   0x00d8, 0x00f6,
2839 #ifndef USE_UNICODE_FULL_RANGE_CTYPE
2840   0x00f8, 0x7fffffff
2841 #else /* not USE_UNICODE_FULL_RANGE_CTYPE */
2842   0x00f8, 0x0236,
2843   0x0250, 0x02c1,
2844   0x02c6, 0x02d1,
2845   0x02e0, 0x02e4,
2846   0x02ee, 0x02ee,
2847   0x0300, 0x0357,
2848   0x035d, 0x036f,
2849   0x037a, 0x037a,
2850   0x0386, 0x0386,
2851   0x0388, 0x038a,
2852   0x038c, 0x038c,
2853   0x038e, 0x03a1,
2854   0x03a3, 0x03ce,
2855   0x03d0, 0x03f5,
2856   0x03f7, 0x03fb,
2857   0x0400, 0x0481,
2858   0x0483, 0x0486,
2859   0x0488, 0x04ce,
2860   0x04d0, 0x04f5,
2861   0x04f8, 0x04f9,
2862   0x0500, 0x050f,
2863   0x0531, 0x0556,
2864   0x0559, 0x0559,
2865   0x0561, 0x0587,
2866   0x0591, 0x05a1,
2867   0x05a3, 0x05b9,
2868   0x05bb, 0x05bd,
2869   0x05bf, 0x05bf,
2870   0x05c1, 0x05c2,
2871   0x05c4, 0x05c4,
2872   0x05d0, 0x05ea,
2873   0x05f0, 0x05f2,
2874   0x0610, 0x0615,
2875   0x0621, 0x063a,
2876   0x0640, 0x0658,
2877   0x0660, 0x0669,
2878   0x066e, 0x06d3,
2879   0x06d5, 0x06dc,
2880   0x06de, 0x06e8,
2881   0x06ea, 0x06fc,
2882   0x06ff, 0x06ff,
2883   0x0710, 0x074a,
2884   0x074d, 0x074f,
2885   0x0780, 0x07b1,
2886   0x0901, 0x0939,
2887   0x093c, 0x094d,
2888   0x0950, 0x0954,
2889   0x0958, 0x0963,
2890   0x0966, 0x096f,
2891   0x0981, 0x0983,
2892   0x0985, 0x098c,
2893   0x098f, 0x0990,
2894   0x0993, 0x09a8,
2895   0x09aa, 0x09b0,
2896   0x09b2, 0x09b2,
2897   0x09b6, 0x09b9,
2898   0x09bc, 0x09c4,
2899   0x09c7, 0x09c8,
2900   0x09cb, 0x09cd,
2901   0x09d7, 0x09d7,
2902   0x09dc, 0x09dd,
2903   0x09df, 0x09e3,
2904   0x09e6, 0x09f1,
2905   0x09f4, 0x09f9,
2906   0x0a01, 0x0a03,
2907   0x0a05, 0x0a0a,
2908   0x0a0f, 0x0a10,
2909   0x0a13, 0x0a28,
2910   0x0a2a, 0x0a30,
2911   0x0a32, 0x0a33,
2912   0x0a35, 0x0a36,
2913   0x0a38, 0x0a39,
2914   0x0a3c, 0x0a3c,
2915   0x0a3e, 0x0a42,
2916   0x0a47, 0x0a48,
2917   0x0a4b, 0x0a4d,
2918   0x0a59, 0x0a5c,
2919   0x0a5e, 0x0a5e,
2920   0x0a66, 0x0a74,
2921   0x0a81, 0x0a83,
2922   0x0a85, 0x0a8d,
2923   0x0a8f, 0x0a91,
2924   0x0a93, 0x0aa8,
2925   0x0aaa, 0x0ab0,
2926   0x0ab2, 0x0ab3,
2927   0x0ab5, 0x0ab9,
2928   0x0abc, 0x0ac5,
2929   0x0ac7, 0x0ac9,
2930   0x0acb, 0x0acd,
2931   0x0ad0, 0x0ad0,
2932   0x0ae0, 0x0ae3,
2933   0x0ae6, 0x0aef,
2934   0x0b01, 0x0b03,
2935   0x0b05, 0x0b0c,
2936   0x0b0f, 0x0b10,
2937   0x0b13, 0x0b28,
2938   0x0b2a, 0x0b30,
2939   0x0b32, 0x0b33,
2940   0x0b35, 0x0b39,
2941   0x0b3c, 0x0b43,
2942   0x0b47, 0x0b48,
2943   0x0b4b, 0x0b4d,
2944   0x0b56, 0x0b57,
2945   0x0b5c, 0x0b5d,
2946   0x0b5f, 0x0b61,
2947   0x0b66, 0x0b6f,
2948   0x0b71, 0x0b71,
2949   0x0b82, 0x0b83,
2950   0x0b85, 0x0b8a,
2951   0x0b8e, 0x0b90,
2952   0x0b92, 0x0b95,
2953   0x0b99, 0x0b9a,
2954   0x0b9c, 0x0b9c,
2955   0x0b9e, 0x0b9f,
2956   0x0ba3, 0x0ba4,
2957   0x0ba8, 0x0baa,
2958   0x0bae, 0x0bb5,
2959   0x0bb7, 0x0bb9,
2960   0x0bbe, 0x0bc2,
2961   0x0bc6, 0x0bc8,
2962   0x0bca, 0x0bcd,
2963   0x0bd7, 0x0bd7,
2964   0x0be7, 0x0bf2,
2965   0x0c01, 0x0c03,
2966   0x0c05, 0x0c0c,
2967   0x0c0e, 0x0c10,
2968   0x0c12, 0x0c28,
2969   0x0c2a, 0x0c33,
2970   0x0c35, 0x0c39,
2971   0x0c3e, 0x0c44,
2972   0x0c46, 0x0c48,
2973   0x0c4a, 0x0c4d,
2974   0x0c55, 0x0c56,
2975   0x0c60, 0x0c61,
2976   0x0c66, 0x0c6f,
2977   0x0c82, 0x0c83,
2978   0x0c85, 0x0c8c,
2979   0x0c8e, 0x0c90,
2980   0x0c92, 0x0ca8,
2981   0x0caa, 0x0cb3,
2982   0x0cb5, 0x0cb9,
2983   0x0cbc, 0x0cc4,
2984   0x0cc6, 0x0cc8,
2985   0x0cca, 0x0ccd,
2986   0x0cd5, 0x0cd6,
2987   0x0cde, 0x0cde,
2988   0x0ce0, 0x0ce1,
2989   0x0ce6, 0x0cef,
2990   0x0d02, 0x0d03,
2991   0x0d05, 0x0d0c,
2992   0x0d0e, 0x0d10,
2993   0x0d12, 0x0d28,
2994   0x0d2a, 0x0d39,
2995   0x0d3e, 0x0d43,
2996   0x0d46, 0x0d48,
2997   0x0d4a, 0x0d4d,
2998   0x0d57, 0x0d57,
2999   0x0d60, 0x0d61,
3000   0x0d66, 0x0d6f,
3001   0x0d82, 0x0d83,
3002   0x0d85, 0x0d96,
3003   0x0d9a, 0x0db1,
3004   0x0db3, 0x0dbb,
3005   0x0dbd, 0x0dbd,
3006   0x0dc0, 0x0dc6,
3007   0x0dca, 0x0dca,
3008   0x0dcf, 0x0dd4,
3009   0x0dd6, 0x0dd6,
3010   0x0dd8, 0x0ddf,
3011   0x0df2, 0x0df3,
3012   0x0e01, 0x0e3a,
3013   0x0e40, 0x0e4e,
3014   0x0e50, 0x0e59,
3015   0x0e81, 0x0e82,
3016   0x0e84, 0x0e84,
3017   0x0e87, 0x0e88,
3018   0x0e8a, 0x0e8a,
3019   0x0e8d, 0x0e8d,
3020   0x0e94, 0x0e97,
3021   0x0e99, 0x0e9f,
3022   0x0ea1, 0x0ea3,
3023   0x0ea5, 0x0ea5,
3024   0x0ea7, 0x0ea7,
3025   0x0eaa, 0x0eab,
3026   0x0ead, 0x0eb9,
3027   0x0ebb, 0x0ebd,
3028   0x0ec0, 0x0ec4,
3029   0x0ec6, 0x0ec6,
3030   0x0ec8, 0x0ecd,
3031   0x0ed0, 0x0ed9,
3032   0x0edc, 0x0edd,
3033   0x0f00, 0x0f00,
3034   0x0f18, 0x0f19,
3035   0x0f20, 0x0f33,
3036   0x0f35, 0x0f35,
3037   0x0f37, 0x0f37,
3038   0x0f39, 0x0f39,
3039   0x0f3e, 0x0f47,
3040   0x0f49, 0x0f6a,
3041   0x0f71, 0x0f84,
3042   0x0f86, 0x0f8b,
3043   0x0f90, 0x0f97,
3044   0x0f99, 0x0fbc,
3045   0x0fc6, 0x0fc6,
3046   0x1000, 0x1021,
3047   0x1023, 0x1027,
3048   0x1029, 0x102a,
3049   0x102c, 0x1032,
3050   0x1036, 0x1039,
3051   0x1040, 0x1049,
3052   0x1050, 0x1059,
3053   0x10a0, 0x10c5,
3054   0x10d0, 0x10f8,
3055   0x1100, 0x1159,
3056   0x115f, 0x11a2,
3057   0x11a8, 0x11f9,
3058   0x1200, 0x1206,
3059   0x1208, 0x1246,
3060   0x1248, 0x1248,
3061   0x124a, 0x124d,
3062   0x1250, 0x1256,
3063   0x1258, 0x1258,
3064   0x125a, 0x125d,
3065   0x1260, 0x1286,
3066   0x1288, 0x1288,
3067   0x128a, 0x128d,
3068   0x1290, 0x12ae,
3069   0x12b0, 0x12b0,
3070   0x12b2, 0x12b5,
3071   0x12b8, 0x12be,
3072   0x12c0, 0x12c0,
3073   0x12c2, 0x12c5,
3074   0x12c8, 0x12ce,
3075   0x12d0, 0x12d6,
3076   0x12d8, 0x12ee,
3077   0x12f0, 0x130e,
3078   0x1310, 0x1310,
3079   0x1312, 0x1315,
3080   0x1318, 0x131e,
3081   0x1320, 0x1346,
3082   0x1348, 0x135a,
3083   0x1369, 0x137c,
3084   0x13a0, 0x13f4,
3085   0x1401, 0x166c,
3086   0x166f, 0x1676,
3087   0x1681, 0x169a,
3088   0x16a0, 0x16ea,
3089   0x16ee, 0x16f0,
3090   0x1700, 0x170c,
3091   0x170e, 0x1714,
3092   0x1720, 0x1734,
3093   0x1740, 0x1753,
3094   0x1760, 0x176c,
3095   0x176e, 0x1770,
3096   0x1772, 0x1773,
3097   0x1780, 0x17b3,
3098   0x17b6, 0x17d3,
3099   0x17d7, 0x17d7,
3100   0x17dc, 0x17dd,
3101   0x17e0, 0x17e9,
3102   0x17f0, 0x17f9,
3103   0x180b, 0x180d,
3104   0x1810, 0x1819,
3105   0x1820, 0x1877,
3106   0x1880, 0x18a9,
3107   0x1900, 0x191c,
3108   0x1920, 0x192b,
3109   0x1930, 0x193b,
3110   0x1946, 0x196d,
3111   0x1970, 0x1974,
3112   0x1d00, 0x1d6b,
3113   0x1e00, 0x1e9b,
3114   0x1ea0, 0x1ef9,
3115   0x1f00, 0x1f15,
3116   0x1f18, 0x1f1d,
3117   0x1f20, 0x1f45,
3118   0x1f48, 0x1f4d,
3119   0x1f50, 0x1f57,
3120   0x1f59, 0x1f59,
3121   0x1f5b, 0x1f5b,
3122   0x1f5d, 0x1f5d,
3123   0x1f5f, 0x1f7d,
3124   0x1f80, 0x1fb4,
3125   0x1fb6, 0x1fbc,
3126   0x1fbe, 0x1fbe,
3127   0x1fc2, 0x1fc4,
3128   0x1fc6, 0x1fcc,
3129   0x1fd0, 0x1fd3,
3130   0x1fd6, 0x1fdb,
3131   0x1fe0, 0x1fec,
3132   0x1ff2, 0x1ff4,
3133   0x1ff6, 0x1ffc,
3134   0x203f, 0x2040,
3135   0x2054, 0x2054,
3136   0x2070, 0x2071,
3137   0x2074, 0x2079,
3138   0x207f, 0x2089,
3139   0x20d0, 0x20ea,
3140   0x2102, 0x2102,
3141   0x2107, 0x2107,
3142   0x210a, 0x2113,
3143   0x2115, 0x2115,
3144   0x2119, 0x211d,
3145   0x2124, 0x2124,
3146   0x2126, 0x2126,
3147   0x2128, 0x2128,
3148   0x212a, 0x212d,
3149   0x212f, 0x2131,
3150   0x2133, 0x2139,
3151   0x213d, 0x213f,
3152   0x2145, 0x2149,
3153   0x2153, 0x2183,
3154   0x2460, 0x249b,
3155   0x24ea, 0x24ff,
3156   0x2776, 0x2793,
3157   0x3005, 0x3007,
3158   0x3021, 0x302f,
3159   0x3031, 0x3035,
3160   0x3038, 0x303c,
3161   0x3041, 0x3096,
3162   0x3099, 0x309a,
3163   0x309d, 0x309f,
3164   0x30a1, 0x30ff,
3165   0x3105, 0x312c,
3166   0x3131, 0x318e,
3167   0x3192, 0x3195,
3168   0x31a0, 0x31b7,
3169   0x31f0, 0x31ff,
3170   0x3220, 0x3229,
3171   0x3251, 0x325f,
3172   0x3280, 0x3289,
3173   0x32b1, 0x32bf,
3174   0x3400, 0x4db5,
3175   0x4e00, 0x9fa5,
3176   0xa000, 0xa48c,
3177   0xac00, 0xd7a3,
3178   0xf900, 0xfa2d,
3179   0xfa30, 0xfa6a,
3180   0xfb00, 0xfb06,
3181   0xfb13, 0xfb17,
3182   0xfb1d, 0xfb28,
3183   0xfb2a, 0xfb36,
3184   0xfb38, 0xfb3c,
3185   0xfb3e, 0xfb3e,
3186   0xfb40, 0xfb41,
3187   0xfb43, 0xfb44,
3188   0xfb46, 0xfbb1,
3189   0xfbd3, 0xfd3d,
3190   0xfd50, 0xfd8f,
3191   0xfd92, 0xfdc7,
3192   0xfdf0, 0xfdfb,
3193   0xfe00, 0xfe0f,
3194   0xfe20, 0xfe23,
3195   0xfe33, 0xfe34,
3196   0xfe4d, 0xfe4f,
3197   0xfe70, 0xfe74,
3198   0xfe76, 0xfefc,
3199   0xff10, 0xff19,
3200   0xff21, 0xff3a,
3201   0xff3f, 0xff3f,
3202   0xff41, 0xff5a,
3203   0xff65, 0xffbe,
3204   0xffc2, 0xffc7,
3205   0xffca, 0xffcf,
3206   0xffd2, 0xffd7,
3207   0xffda, 0xffdc,
3208   0x10000, 0x1000b,
3209   0x1000d, 0x10026,
3210   0x10028, 0x1003a,
3211   0x1003c, 0x1003d,
3212   0x1003f, 0x1004d,
3213   0x10050, 0x1005d,
3214   0x10080, 0x100fa,
3215   0x10107, 0x10133,
3216   0x10300, 0x1031e,
3217   0x10320, 0x10323,
3218   0x10330, 0x1034a,
3219   0x10380, 0x1039d,
3220   0x10400, 0x1049d,
3221   0x104a0, 0x104a9,
3222   0x10800, 0x10805,
3223   0x10808, 0x10808,
3224   0x1080a, 0x10835,
3225   0x10837, 0x10838,
3226   0x1083c, 0x1083c,
3227   0x1083f, 0x1083f,
3228   0x1d165, 0x1d169,
3229   0x1d16d, 0x1d172,
3230   0x1d17b, 0x1d182,
3231   0x1d185, 0x1d18b,
3232   0x1d1aa, 0x1d1ad,
3233   0x1d400, 0x1d454,
3234   0x1d456, 0x1d49c,
3235   0x1d49e, 0x1d49f,
3236   0x1d4a2, 0x1d4a2,
3237   0x1d4a5, 0x1d4a6,
3238   0x1d4a9, 0x1d4ac,
3239   0x1d4ae, 0x1d4b9,
3240   0x1d4bb, 0x1d4bb,
3241   0x1d4bd, 0x1d4c3,
3242   0x1d4c5, 0x1d505,
3243   0x1d507, 0x1d50a,
3244   0x1d50d, 0x1d514,
3245   0x1d516, 0x1d51c,
3246   0x1d51e, 0x1d539,
3247   0x1d53b, 0x1d53e,
3248   0x1d540, 0x1d544,
3249   0x1d546, 0x1d546,
3250   0x1d54a, 0x1d550,
3251   0x1d552, 0x1d6a3,
3252   0x1d6a8, 0x1d6c0,
3253   0x1d6c2, 0x1d6da,
3254   0x1d6dc, 0x1d6fa,
3255   0x1d6fc, 0x1d714,
3256   0x1d716, 0x1d734,
3257   0x1d736, 0x1d74e,
3258   0x1d750, 0x1d76e,
3259   0x1d770, 0x1d788,
3260   0x1d78a, 0x1d7a8,
3261   0x1d7aa, 0x1d7c2,
3262   0x1d7c4, 0x1d7c9,
3263   0x1d7ce, 0x1d7ff,
3264   0x20000, 0x2a6d6,
3265   0x2f800, 0x2fa1d,
3266   0xe0100, 0xe01ef
3267 #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
3268 }; /* end of CRWord */
3269 
3270 
3271 extern int
onigenc_unicode_is_code_ctype(OnigCodePoint code,unsigned int ctype)3272 onigenc_unicode_is_code_ctype(OnigCodePoint code, unsigned int ctype)
3273 {
3274   if (code < 256) {
3275     return ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(code, ctype);
3276   }
3277 
3278 #ifdef USE_UNICODE_FULL_RANGE_CTYPE
3279 
3280   switch (ctype) {
3281   case ONIGENC_CTYPE_ALPHA:
3282     return onig_is_in_code_range((UChar* )CRAlpha, code);
3283     break;
3284   case ONIGENC_CTYPE_BLANK:
3285     return onig_is_in_code_range((UChar* )CRBlank, code);
3286     break;
3287   case ONIGENC_CTYPE_CNTRL:
3288     return onig_is_in_code_range((UChar* )CRCntrl, code);
3289     break;
3290   case ONIGENC_CTYPE_DIGIT:
3291     return onig_is_in_code_range((UChar* )CRDigit, code);
3292     break;
3293   case ONIGENC_CTYPE_GRAPH:
3294     return onig_is_in_code_range((UChar* )CRGraph, code);
3295     break;
3296   case ONIGENC_CTYPE_LOWER:
3297     return onig_is_in_code_range((UChar* )CRLower, code);
3298     break;
3299   case ONIGENC_CTYPE_PRINT:
3300     return onig_is_in_code_range((UChar* )CRPrint, code);
3301     break;
3302   case ONIGENC_CTYPE_PUNCT:
3303     return onig_is_in_code_range((UChar* )CRPunct, code);
3304     break;
3305   case ONIGENC_CTYPE_SPACE:
3306     return onig_is_in_code_range((UChar* )CRSpace, code);
3307     break;
3308   case ONIGENC_CTYPE_UPPER:
3309     return onig_is_in_code_range((UChar* )CRUpper, code);
3310     break;
3311   case ONIGENC_CTYPE_XDIGIT:
3312     return FALSE;
3313     break;
3314   case ONIGENC_CTYPE_WORD:
3315     return onig_is_in_code_range((UChar* )CRWord, code);
3316     break;
3317   case ONIGENC_CTYPE_ASCII:
3318     return FALSE;
3319     break;
3320   case ONIGENC_CTYPE_ALNUM:
3321     return onig_is_in_code_range((UChar* )CRAlnum, code);
3322     break;
3323   case ONIGENC_CTYPE_NEWLINE:
3324     return FALSE;
3325     break;
3326 
3327   default:
3328     return ONIGENCERR_TYPE_BUG;
3329     break;
3330   }
3331 
3332 #else
3333 
3334   if ((ctype & ONIGENC_CTYPE_WORD) != 0) {
3335     return TRUE;
3336   }
3337   return FALSE;
3338 #endif /* USE_UNICODE_FULL_RANGE_CTYPE */
3339 }
3340 
3341 extern int
onigenc_unicode_get_ctype_code_range(int ctype,const OnigCodePoint * sbr[],const OnigCodePoint * mbr[])3342 onigenc_unicode_get_ctype_code_range(int ctype,
3343 		  const OnigCodePoint* sbr[], const OnigCodePoint* mbr[])
3344 {
3345   static const OnigCodePoint EmptyRange[] = { 0 };
3346 
3347 #define CR_SET(list) do { \
3348   *mbr = list; \
3349 } while (0)
3350 
3351   *sbr = EmptyRange;
3352 
3353   switch (ctype) {
3354   case ONIGENC_CTYPE_ALPHA:
3355     CR_SET(CRAlpha);
3356     break;
3357   case ONIGENC_CTYPE_BLANK:
3358     CR_SET(CRBlank);
3359     break;
3360   case ONIGENC_CTYPE_CNTRL:
3361     CR_SET(CRCntrl);
3362     break;
3363   case ONIGENC_CTYPE_DIGIT:
3364     CR_SET(CRDigit);
3365     break;
3366   case ONIGENC_CTYPE_GRAPH:
3367     CR_SET(CRGraph);
3368     break;
3369   case ONIGENC_CTYPE_LOWER:
3370     CR_SET(CRLower);
3371     break;
3372   case ONIGENC_CTYPE_PRINT:
3373     CR_SET(CRPrint);
3374     break;
3375   case ONIGENC_CTYPE_PUNCT:
3376     CR_SET(CRPunct);
3377     break;
3378   case ONIGENC_CTYPE_SPACE:
3379     CR_SET(CRSpace);
3380     break;
3381   case ONIGENC_CTYPE_UPPER:
3382     CR_SET(CRUpper);
3383     break;
3384   case ONIGENC_CTYPE_XDIGIT:
3385     CR_SET(CRXDigit);
3386     break;
3387   case ONIGENC_CTYPE_WORD:
3388     CR_SET(CRWord);
3389     break;
3390   case ONIGENC_CTYPE_ASCII:
3391     CR_SET(CRASCII);
3392     break;
3393   case ONIGENC_CTYPE_ALNUM:
3394     CR_SET(CRAlnum);
3395     break;
3396 
3397   default:
3398     return ONIGENCERR_TYPE_BUG;
3399     break;
3400   }
3401 
3402   return 0;
3403 }
3404