Ruby 1.9.3p327(2012-11-10revision37606)
enc/unicode.c
Go to the documentation of this file.
00001 /**********************************************************************
00002   unicode.c -  Oniguruma (regular expression library)
00003 **********************************************************************/
00004 /*-
00005  * Copyright (c) 2002-2008  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
00006  * All rights reserved.
00007  *
00008  * Redistribution and use in source and binary forms, with or without
00009  * modification, are permitted provided that the following conditions
00010  * are met:
00011  * 1. Redistributions of source code must retain the above copyright
00012  *    notice, this list of conditions and the following disclaimer.
00013  * 2. Redistributions in binary form must reproduce the above copyright
00014  *    notice, this list of conditions and the following disclaimer in the
00015  *    documentation and/or other materials provided with the distribution.
00016  *
00017  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00027  * SUCH DAMAGE.
00028  */
00029 
00030 #include "regint.h"
00031 
00032 #define ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(code,ctype) \
00033   ((EncUNICODE_ISO_8859_1_CtypeTable[code] & CTYPE_TO_BIT(ctype)) != 0)
00034 #if 0
00035 #define ONIGENC_IS_UNICODE_ISO_8859_1_BIT_CTYPE(code,cbit) \
00036   ((EncUNICODE_ISO_8859_1_CtypeTable[code] & (cbit)) != 0)
00037 #endif
00038 
00039 static const unsigned short EncUNICODE_ISO_8859_1_CtypeTable[256] = {
00040   0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008,
00041   0x4008, 0x428c, 0x4289, 0x4288, 0x4288, 0x4288, 0x4008, 0x4008,
00042   0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008,
00043   0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008, 0x4008,
00044   0x4284, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0,
00045   0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0,
00046   0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0, 0x78b0,
00047   0x78b0, 0x78b0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a0,
00048   0x41a0, 0x7ca2, 0x7ca2, 0x7ca2, 0x7ca2, 0x7ca2, 0x7ca2, 0x74a2,
00049   0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2,
00050   0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2, 0x74a2,
00051   0x74a2, 0x74a2, 0x74a2, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x51a0,
00052   0x41a0, 0x78e2, 0x78e2, 0x78e2, 0x78e2, 0x78e2, 0x78e2, 0x70e2,
00053   0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2,
00054   0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2, 0x70e2,
00055   0x70e2, 0x70e2, 0x70e2, 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x4008,
00056   0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0288, 0x0008, 0x0008,
00057   0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,
00058   0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,
00059   0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,
00060   0x0284, 0x01a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0,
00061   0x00a0, 0x00a0, 0x30e2, 0x01a0, 0x00a0, 0x00a8, 0x00a0, 0x00a0,
00062   0x00a0, 0x00a0, 0x10a0, 0x10a0, 0x00a0, 0x30e2, 0x00a0, 0x01a0,
00063   0x00a0, 0x10a0, 0x30e2, 0x01a0, 0x10a0, 0x10a0, 0x10a0, 0x01a0,
00064   0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2,
00065   0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2,
00066   0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x00a0,
00067   0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x30e2,
00068   0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2,
00069   0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2,
00070   0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x00a0,
00071   0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2
00072 };
00073 
00074 #include "enc/unicode/name2ctype.h"
00075 
00076 typedef struct {
00077   int n;
00078   OnigCodePoint code[3];
00079 } CodePointList3;
00080 
00081 typedef struct {
00082   OnigCodePoint  from;
00083   CodePointList3 to;
00084 } CaseFold_11_Type;
00085 
00086 typedef struct {
00087   OnigCodePoint  from;
00088   CodePointList3 to;
00089 } CaseUnfold_11_Type;
00090 
00091 typedef struct {
00092   int n;
00093   OnigCodePoint code[2];
00094 } CodePointList2;
00095 
00096 typedef struct {
00097   OnigCodePoint  from[2];
00098   CodePointList2 to;
00099 } CaseUnfold_12_Type;
00100 
00101 typedef struct {
00102   OnigCodePoint  from[3];
00103   CodePointList2 to;
00104 } CaseUnfold_13_Type;
00105 
00106 static const CaseFold_11_Type CaseFold[] = {
00107  { 0x0041, {1, {0x0061}}},
00108  { 0x0042, {1, {0x0062}}},
00109  { 0x0043, {1, {0x0063}}},
00110  { 0x0044, {1, {0x0064}}},
00111  { 0x0045, {1, {0x0065}}},
00112  { 0x0046, {1, {0x0066}}},
00113  { 0x0047, {1, {0x0067}}},
00114  { 0x0048, {1, {0x0068}}},
00115  { 0x004a, {1, {0x006a}}},
00116  { 0x004b, {1, {0x006b}}},
00117  { 0x004c, {1, {0x006c}}},
00118  { 0x004d, {1, {0x006d}}},
00119  { 0x004e, {1, {0x006e}}},
00120  { 0x004f, {1, {0x006f}}},
00121  { 0x0050, {1, {0x0070}}},
00122  { 0x0051, {1, {0x0071}}},
00123  { 0x0052, {1, {0x0072}}},
00124  { 0x0053, {1, {0x0073}}},
00125  { 0x0054, {1, {0x0074}}},
00126  { 0x0055, {1, {0x0075}}},
00127  { 0x0056, {1, {0x0076}}},
00128  { 0x0057, {1, {0x0077}}},
00129  { 0x0058, {1, {0x0078}}},
00130  { 0x0059, {1, {0x0079}}},
00131  { 0x005a, {1, {0x007a}}},
00132  { 0x00b5, {1, {0x03bc}}},
00133  { 0x00c0, {1, {0x00e0}}},
00134  { 0x00c1, {1, {0x00e1}}},
00135  { 0x00c2, {1, {0x00e2}}},
00136  { 0x00c3, {1, {0x00e3}}},
00137  { 0x00c4, {1, {0x00e4}}},
00138  { 0x00c5, {1, {0x00e5}}},
00139  { 0x00c6, {1, {0x00e6}}},
00140  { 0x00c7, {1, {0x00e7}}},
00141  { 0x00c8, {1, {0x00e8}}},
00142  { 0x00c9, {1, {0x00e9}}},
00143  { 0x00ca, {1, {0x00ea}}},
00144  { 0x00cb, {1, {0x00eb}}},
00145  { 0x00cc, {1, {0x00ec}}},
00146  { 0x00cd, {1, {0x00ed}}},
00147  { 0x00ce, {1, {0x00ee}}},
00148  { 0x00cf, {1, {0x00ef}}},
00149  { 0x00d0, {1, {0x00f0}}},
00150  { 0x00d1, {1, {0x00f1}}},
00151  { 0x00d2, {1, {0x00f2}}},
00152  { 0x00d3, {1, {0x00f3}}},
00153  { 0x00d4, {1, {0x00f4}}},
00154  { 0x00d5, {1, {0x00f5}}},
00155  { 0x00d6, {1, {0x00f6}}},
00156  { 0x00d8, {1, {0x00f8}}},
00157  { 0x00d9, {1, {0x00f9}}},
00158  { 0x00da, {1, {0x00fa}}},
00159  { 0x00db, {1, {0x00fb}}},
00160  { 0x00dc, {1, {0x00fc}}},
00161  { 0x00dd, {1, {0x00fd}}},
00162  { 0x00de, {1, {0x00fe}}},
00163  { 0x00df, {2, {0x0073, 0x0073}}},
00164  { 0x0100, {1, {0x0101}}},
00165  { 0x0102, {1, {0x0103}}},
00166  { 0x0104, {1, {0x0105}}},
00167  { 0x0106, {1, {0x0107}}},
00168  { 0x0108, {1, {0x0109}}},
00169  { 0x010a, {1, {0x010b}}},
00170  { 0x010c, {1, {0x010d}}},
00171  { 0x010e, {1, {0x010f}}},
00172  { 0x0110, {1, {0x0111}}},
00173  { 0x0112, {1, {0x0113}}},
00174  { 0x0114, {1, {0x0115}}},
00175  { 0x0116, {1, {0x0117}}},
00176  { 0x0118, {1, {0x0119}}},
00177  { 0x011a, {1, {0x011b}}},
00178  { 0x011c, {1, {0x011d}}},
00179  { 0x011e, {1, {0x011f}}},
00180  { 0x0120, {1, {0x0121}}},
00181  { 0x0122, {1, {0x0123}}},
00182  { 0x0124, {1, {0x0125}}},
00183  { 0x0126, {1, {0x0127}}},
00184  { 0x0128, {1, {0x0129}}},
00185  { 0x012a, {1, {0x012b}}},
00186  { 0x012c, {1, {0x012d}}},
00187  { 0x012e, {1, {0x012f}}},
00188  { 0x0132, {1, {0x0133}}},
00189  { 0x0134, {1, {0x0135}}},
00190  { 0x0136, {1, {0x0137}}},
00191  { 0x0139, {1, {0x013a}}},
00192  { 0x013b, {1, {0x013c}}},
00193  { 0x013d, {1, {0x013e}}},
00194  { 0x013f, {1, {0x0140}}},
00195  { 0x0141, {1, {0x0142}}},
00196  { 0x0143, {1, {0x0144}}},
00197  { 0x0145, {1, {0x0146}}},
00198  { 0x0147, {1, {0x0148}}},
00199  { 0x0149, {2, {0x02bc, 0x006e}}},
00200  { 0x014a, {1, {0x014b}}},
00201  { 0x014c, {1, {0x014d}}},
00202  { 0x014e, {1, {0x014f}}},
00203  { 0x0150, {1, {0x0151}}},
00204  { 0x0152, {1, {0x0153}}},
00205  { 0x0154, {1, {0x0155}}},
00206  { 0x0156, {1, {0x0157}}},
00207  { 0x0158, {1, {0x0159}}},
00208  { 0x015a, {1, {0x015b}}},
00209  { 0x015c, {1, {0x015d}}},
00210  { 0x015e, {1, {0x015f}}},
00211  { 0x0160, {1, {0x0161}}},
00212  { 0x0162, {1, {0x0163}}},
00213  { 0x0164, {1, {0x0165}}},
00214  { 0x0166, {1, {0x0167}}},
00215  { 0x0168, {1, {0x0169}}},
00216  { 0x016a, {1, {0x016b}}},
00217  { 0x016c, {1, {0x016d}}},
00218  { 0x016e, {1, {0x016f}}},
00219  { 0x0170, {1, {0x0171}}},
00220  { 0x0172, {1, {0x0173}}},
00221  { 0x0174, {1, {0x0175}}},
00222  { 0x0176, {1, {0x0177}}},
00223  { 0x0178, {1, {0x00ff}}},
00224  { 0x0179, {1, {0x017a}}},
00225  { 0x017b, {1, {0x017c}}},
00226  { 0x017d, {1, {0x017e}}},
00227  { 0x017f, {1, {0x0073}}},
00228  { 0x0181, {1, {0x0253}}},
00229  { 0x0182, {1, {0x0183}}},
00230  { 0x0184, {1, {0x0185}}},
00231  { 0x0186, {1, {0x0254}}},
00232  { 0x0187, {1, {0x0188}}},
00233  { 0x0189, {1, {0x0256}}},
00234  { 0x018a, {1, {0x0257}}},
00235  { 0x018b, {1, {0x018c}}},
00236  { 0x018e, {1, {0x01dd}}},
00237  { 0x018f, {1, {0x0259}}},
00238  { 0x0190, {1, {0x025b}}},
00239  { 0x0191, {1, {0x0192}}},
00240  { 0x0193, {1, {0x0260}}},
00241  { 0x0194, {1, {0x0263}}},
00242  { 0x0196, {1, {0x0269}}},
00243  { 0x0197, {1, {0x0268}}},
00244  { 0x0198, {1, {0x0199}}},
00245  { 0x019c, {1, {0x026f}}},
00246  { 0x019d, {1, {0x0272}}},
00247  { 0x019f, {1, {0x0275}}},
00248  { 0x01a0, {1, {0x01a1}}},
00249  { 0x01a2, {1, {0x01a3}}},
00250  { 0x01a4, {1, {0x01a5}}},
00251  { 0x01a6, {1, {0x0280}}},
00252  { 0x01a7, {1, {0x01a8}}},
00253  { 0x01a9, {1, {0x0283}}},
00254  { 0x01ac, {1, {0x01ad}}},
00255  { 0x01ae, {1, {0x0288}}},
00256  { 0x01af, {1, {0x01b0}}},
00257  { 0x01b1, {1, {0x028a}}},
00258  { 0x01b2, {1, {0x028b}}},
00259  { 0x01b3, {1, {0x01b4}}},
00260  { 0x01b5, {1, {0x01b6}}},
00261  { 0x01b7, {1, {0x0292}}},
00262  { 0x01b8, {1, {0x01b9}}},
00263  { 0x01bc, {1, {0x01bd}}},
00264  { 0x01c4, {1, {0x01c6}}},
00265  { 0x01c5, {1, {0x01c6}}},
00266  { 0x01c7, {1, {0x01c9}}},
00267  { 0x01c8, {1, {0x01c9}}},
00268  { 0x01ca, {1, {0x01cc}}},
00269  { 0x01cb, {1, {0x01cc}}},
00270  { 0x01cd, {1, {0x01ce}}},
00271  { 0x01cf, {1, {0x01d0}}},
00272  { 0x01d1, {1, {0x01d2}}},
00273  { 0x01d3, {1, {0x01d4}}},
00274  { 0x01d5, {1, {0x01d6}}},
00275  { 0x01d7, {1, {0x01d8}}},
00276  { 0x01d9, {1, {0x01da}}},
00277  { 0x01db, {1, {0x01dc}}},
00278  { 0x01de, {1, {0x01df}}},
00279  { 0x01e0, {1, {0x01e1}}},
00280  { 0x01e2, {1, {0x01e3}}},
00281  { 0x01e4, {1, {0x01e5}}},
00282  { 0x01e6, {1, {0x01e7}}},
00283  { 0x01e8, {1, {0x01e9}}},
00284  { 0x01ea, {1, {0x01eb}}},
00285  { 0x01ec, {1, {0x01ed}}},
00286  { 0x01ee, {1, {0x01ef}}},
00287  { 0x01f0, {2, {0x006a, 0x030c}}},
00288  { 0x01f1, {1, {0x01f3}}},
00289  { 0x01f2, {1, {0x01f3}}},
00290  { 0x01f4, {1, {0x01f5}}},
00291  { 0x01f6, {1, {0x0195}}},
00292  { 0x01f7, {1, {0x01bf}}},
00293  { 0x01f8, {1, {0x01f9}}},
00294  { 0x01fa, {1, {0x01fb}}},
00295  { 0x01fc, {1, {0x01fd}}},
00296  { 0x01fe, {1, {0x01ff}}},
00297  { 0x0200, {1, {0x0201}}},
00298  { 0x0202, {1, {0x0203}}},
00299  { 0x0204, {1, {0x0205}}},
00300  { 0x0206, {1, {0x0207}}},
00301  { 0x0208, {1, {0x0209}}},
00302  { 0x020a, {1, {0x020b}}},
00303  { 0x020c, {1, {0x020d}}},
00304  { 0x020e, {1, {0x020f}}},
00305  { 0x0210, {1, {0x0211}}},
00306  { 0x0212, {1, {0x0213}}},
00307  { 0x0214, {1, {0x0215}}},
00308  { 0x0216, {1, {0x0217}}},
00309  { 0x0218, {1, {0x0219}}},
00310  { 0x021a, {1, {0x021b}}},
00311  { 0x021c, {1, {0x021d}}},
00312  { 0x021e, {1, {0x021f}}},
00313  { 0x0220, {1, {0x019e}}},
00314  { 0x0222, {1, {0x0223}}},
00315  { 0x0224, {1, {0x0225}}},
00316  { 0x0226, {1, {0x0227}}},
00317  { 0x0228, {1, {0x0229}}},
00318  { 0x022a, {1, {0x022b}}},
00319  { 0x022c, {1, {0x022d}}},
00320  { 0x022e, {1, {0x022f}}},
00321  { 0x0230, {1, {0x0231}}},
00322  { 0x0232, {1, {0x0233}}},
00323  { 0x023b, {1, {0x023c}}},
00324  { 0x023d, {1, {0x019a}}},
00325  { 0x0241, {1, {0x0294}}},
00326  { 0x0345, {1, {0x03b9}}},
00327  { 0x0386, {1, {0x03ac}}},
00328  { 0x0388, {1, {0x03ad}}},
00329  { 0x0389, {1, {0x03ae}}},
00330  { 0x038a, {1, {0x03af}}},
00331  { 0x038c, {1, {0x03cc}}},
00332  { 0x038e, {1, {0x03cd}}},
00333  { 0x038f, {1, {0x03ce}}},
00334  { 0x0390, {3, {0x03b9, 0x0308, 0x0301}}},
00335  { 0x0391, {1, {0x03b1}}},
00336  { 0x0392, {1, {0x03b2}}},
00337  { 0x0393, {1, {0x03b3}}},
00338  { 0x0394, {1, {0x03b4}}},
00339  { 0x0395, {1, {0x03b5}}},
00340  { 0x0396, {1, {0x03b6}}},
00341  { 0x0397, {1, {0x03b7}}},
00342  { 0x0398, {1, {0x03b8}}},
00343  { 0x0399, {1, {0x03b9}}},
00344  { 0x039a, {1, {0x03ba}}},
00345  { 0x039b, {1, {0x03bb}}},
00346  { 0x039c, {1, {0x03bc}}},
00347  { 0x039d, {1, {0x03bd}}},
00348  { 0x039e, {1, {0x03be}}},
00349  { 0x039f, {1, {0x03bf}}},
00350  { 0x03a0, {1, {0x03c0}}},
00351  { 0x03a1, {1, {0x03c1}}},
00352  { 0x03a3, {1, {0x03c3}}},
00353  { 0x03a4, {1, {0x03c4}}},
00354  { 0x03a5, {1, {0x03c5}}},
00355  { 0x03a6, {1, {0x03c6}}},
00356  { 0x03a7, {1, {0x03c7}}},
00357  { 0x03a8, {1, {0x03c8}}},
00358  { 0x03a9, {1, {0x03c9}}},
00359  { 0x03aa, {1, {0x03ca}}},
00360  { 0x03ab, {1, {0x03cb}}},
00361  { 0x03b0, {3, {0x03c5, 0x0308, 0x0301}}},
00362  { 0x03c2, {1, {0x03c3}}},
00363  { 0x03d0, {1, {0x03b2}}},
00364  { 0x03d1, {1, {0x03b8}}},
00365  { 0x03d5, {1, {0x03c6}}},
00366  { 0x03d6, {1, {0x03c0}}},
00367  { 0x03d8, {1, {0x03d9}}},
00368  { 0x03da, {1, {0x03db}}},
00369  { 0x03dc, {1, {0x03dd}}},
00370  { 0x03de, {1, {0x03df}}},
00371  { 0x03e0, {1, {0x03e1}}},
00372  { 0x03e2, {1, {0x03e3}}},
00373  { 0x03e4, {1, {0x03e5}}},
00374  { 0x03e6, {1, {0x03e7}}},
00375  { 0x03e8, {1, {0x03e9}}},
00376  { 0x03ea, {1, {0x03eb}}},
00377  { 0x03ec, {1, {0x03ed}}},
00378  { 0x03ee, {1, {0x03ef}}},
00379  { 0x03f0, {1, {0x03ba}}},
00380  { 0x03f1, {1, {0x03c1}}},
00381  { 0x03f4, {1, {0x03b8}}},
00382  { 0x03f5, {1, {0x03b5}}},
00383  { 0x03f7, {1, {0x03f8}}},
00384  { 0x03f9, {1, {0x03f2}}},
00385  { 0x03fa, {1, {0x03fb}}},
00386  { 0x0400, {1, {0x0450}}},
00387  { 0x0401, {1, {0x0451}}},
00388  { 0x0402, {1, {0x0452}}},
00389  { 0x0403, {1, {0x0453}}},
00390  { 0x0404, {1, {0x0454}}},
00391  { 0x0405, {1, {0x0455}}},
00392  { 0x0406, {1, {0x0456}}},
00393  { 0x0407, {1, {0x0457}}},
00394  { 0x0408, {1, {0x0458}}},
00395  { 0x0409, {1, {0x0459}}},
00396  { 0x040a, {1, {0x045a}}},
00397  { 0x040b, {1, {0x045b}}},
00398  { 0x040c, {1, {0x045c}}},
00399  { 0x040d, {1, {0x045d}}},
00400  { 0x040e, {1, {0x045e}}},
00401  { 0x040f, {1, {0x045f}}},
00402  { 0x0410, {1, {0x0430}}},
00403  { 0x0411, {1, {0x0431}}},
00404  { 0x0412, {1, {0x0432}}},
00405  { 0x0413, {1, {0x0433}}},
00406  { 0x0414, {1, {0x0434}}},
00407  { 0x0415, {1, {0x0435}}},
00408  { 0x0416, {1, {0x0436}}},
00409  { 0x0417, {1, {0x0437}}},
00410  { 0x0418, {1, {0x0438}}},
00411  { 0x0419, {1, {0x0439}}},
00412  { 0x041a, {1, {0x043a}}},
00413  { 0x041b, {1, {0x043b}}},
00414  { 0x041c, {1, {0x043c}}},
00415  { 0x041d, {1, {0x043d}}},
00416  { 0x041e, {1, {0x043e}}},
00417  { 0x041f, {1, {0x043f}}},
00418  { 0x0420, {1, {0x0440}}},
00419  { 0x0421, {1, {0x0441}}},
00420  { 0x0422, {1, {0x0442}}},
00421  { 0x0423, {1, {0x0443}}},
00422  { 0x0424, {1, {0x0444}}},
00423  { 0x0425, {1, {0x0445}}},
00424  { 0x0426, {1, {0x0446}}},
00425  { 0x0427, {1, {0x0447}}},
00426  { 0x0428, {1, {0x0448}}},
00427  { 0x0429, {1, {0x0449}}},
00428  { 0x042a, {1, {0x044a}}},
00429  { 0x042b, {1, {0x044b}}},
00430  { 0x042c, {1, {0x044c}}},
00431  { 0x042d, {1, {0x044d}}},
00432  { 0x042e, {1, {0x044e}}},
00433  { 0x042f, {1, {0x044f}}},
00434  { 0x0460, {1, {0x0461}}},
00435  { 0x0462, {1, {0x0463}}},
00436  { 0x0464, {1, {0x0465}}},
00437  { 0x0466, {1, {0x0467}}},
00438  { 0x0468, {1, {0x0469}}},
00439  { 0x046a, {1, {0x046b}}},
00440  { 0x046c, {1, {0x046d}}},
00441  { 0x046e, {1, {0x046f}}},
00442  { 0x0470, {1, {0x0471}}},
00443  { 0x0472, {1, {0x0473}}},
00444  { 0x0474, {1, {0x0475}}},
00445  { 0x0476, {1, {0x0477}}},
00446  { 0x0478, {1, {0x0479}}},
00447  { 0x047a, {1, {0x047b}}},
00448  { 0x047c, {1, {0x047d}}},
00449  { 0x047e, {1, {0x047f}}},
00450  { 0x0480, {1, {0x0481}}},
00451  { 0x048a, {1, {0x048b}}},
00452  { 0x048c, {1, {0x048d}}},
00453  { 0x048e, {1, {0x048f}}},
00454  { 0x0490, {1, {0x0491}}},
00455  { 0x0492, {1, {0x0493}}},
00456  { 0x0494, {1, {0x0495}}},
00457  { 0x0496, {1, {0x0497}}},
00458  { 0x0498, {1, {0x0499}}},
00459  { 0x049a, {1, {0x049b}}},
00460  { 0x049c, {1, {0x049d}}},
00461  { 0x049e, {1, {0x049f}}},
00462  { 0x04a0, {1, {0x04a1}}},
00463  { 0x04a2, {1, {0x04a3}}},
00464  { 0x04a4, {1, {0x04a5}}},
00465  { 0x04a6, {1, {0x04a7}}},
00466  { 0x04a8, {1, {0x04a9}}},
00467  { 0x04aa, {1, {0x04ab}}},
00468  { 0x04ac, {1, {0x04ad}}},
00469  { 0x04ae, {1, {0x04af}}},
00470  { 0x04b0, {1, {0x04b1}}},
00471  { 0x04b2, {1, {0x04b3}}},
00472  { 0x04b4, {1, {0x04b5}}},
00473  { 0x04b6, {1, {0x04b7}}},
00474  { 0x04b8, {1, {0x04b9}}},
00475  { 0x04ba, {1, {0x04bb}}},
00476  { 0x04bc, {1, {0x04bd}}},
00477  { 0x04be, {1, {0x04bf}}},
00478  { 0x04c1, {1, {0x04c2}}},
00479  { 0x04c3, {1, {0x04c4}}},
00480  { 0x04c5, {1, {0x04c6}}},
00481  { 0x04c7, {1, {0x04c8}}},
00482  { 0x04c9, {1, {0x04ca}}},
00483  { 0x04cb, {1, {0x04cc}}},
00484  { 0x04cd, {1, {0x04ce}}},
00485  { 0x04d0, {1, {0x04d1}}},
00486  { 0x04d2, {1, {0x04d3}}},
00487  { 0x04d4, {1, {0x04d5}}},
00488  { 0x04d6, {1, {0x04d7}}},
00489  { 0x04d8, {1, {0x04d9}}},
00490  { 0x04da, {1, {0x04db}}},
00491  { 0x04dc, {1, {0x04dd}}},
00492  { 0x04de, {1, {0x04df}}},
00493  { 0x04e0, {1, {0x04e1}}},
00494  { 0x04e2, {1, {0x04e3}}},
00495  { 0x04e4, {1, {0x04e5}}},
00496  { 0x04e6, {1, {0x04e7}}},
00497  { 0x04e8, {1, {0x04e9}}},
00498  { 0x04ea, {1, {0x04eb}}},
00499  { 0x04ec, {1, {0x04ed}}},
00500  { 0x04ee, {1, {0x04ef}}},
00501  { 0x04f0, {1, {0x04f1}}},
00502  { 0x04f2, {1, {0x04f3}}},
00503  { 0x04f4, {1, {0x04f5}}},
00504  { 0x04f6, {1, {0x04f7}}},
00505  { 0x04f8, {1, {0x04f9}}},
00506  { 0x0500, {1, {0x0501}}},
00507  { 0x0502, {1, {0x0503}}},
00508  { 0x0504, {1, {0x0505}}},
00509  { 0x0506, {1, {0x0507}}},
00510  { 0x0508, {1, {0x0509}}},
00511  { 0x050a, {1, {0x050b}}},
00512  { 0x050c, {1, {0x050d}}},
00513  { 0x050e, {1, {0x050f}}},
00514  { 0x0531, {1, {0x0561}}},
00515  { 0x0532, {1, {0x0562}}},
00516  { 0x0533, {1, {0x0563}}},
00517  { 0x0534, {1, {0x0564}}},
00518  { 0x0535, {1, {0x0565}}},
00519  { 0x0536, {1, {0x0566}}},
00520  { 0x0537, {1, {0x0567}}},
00521  { 0x0538, {1, {0x0568}}},
00522  { 0x0539, {1, {0x0569}}},
00523  { 0x053a, {1, {0x056a}}},
00524  { 0x053b, {1, {0x056b}}},
00525  { 0x053c, {1, {0x056c}}},
00526  { 0x053d, {1, {0x056d}}},
00527  { 0x053e, {1, {0x056e}}},
00528  { 0x053f, {1, {0x056f}}},
00529  { 0x0540, {1, {0x0570}}},
00530  { 0x0541, {1, {0x0571}}},
00531  { 0x0542, {1, {0x0572}}},
00532  { 0x0543, {1, {0x0573}}},
00533  { 0x0544, {1, {0x0574}}},
00534  { 0x0545, {1, {0x0575}}},
00535  { 0x0546, {1, {0x0576}}},
00536  { 0x0547, {1, {0x0577}}},
00537  { 0x0548, {1, {0x0578}}},
00538  { 0x0549, {1, {0x0579}}},
00539  { 0x054a, {1, {0x057a}}},
00540  { 0x054b, {1, {0x057b}}},
00541  { 0x054c, {1, {0x057c}}},
00542  { 0x054d, {1, {0x057d}}},
00543  { 0x054e, {1, {0x057e}}},
00544  { 0x054f, {1, {0x057f}}},
00545  { 0x0550, {1, {0x0580}}},
00546  { 0x0551, {1, {0x0581}}},
00547  { 0x0552, {1, {0x0582}}},
00548  { 0x0553, {1, {0x0583}}},
00549  { 0x0554, {1, {0x0584}}},
00550  { 0x0555, {1, {0x0585}}},
00551  { 0x0556, {1, {0x0586}}},
00552  { 0x0587, {2, {0x0565, 0x0582}}},
00553  { 0x10a0, {1, {0x2d00}}},
00554  { 0x10a1, {1, {0x2d01}}},
00555  { 0x10a2, {1, {0x2d02}}},
00556  { 0x10a3, {1, {0x2d03}}},
00557  { 0x10a4, {1, {0x2d04}}},
00558  { 0x10a5, {1, {0x2d05}}},
00559  { 0x10a6, {1, {0x2d06}}},
00560  { 0x10a7, {1, {0x2d07}}},
00561  { 0x10a8, {1, {0x2d08}}},
00562  { 0x10a9, {1, {0x2d09}}},
00563  { 0x10aa, {1, {0x2d0a}}},
00564  { 0x10ab, {1, {0x2d0b}}},
00565  { 0x10ac, {1, {0x2d0c}}},
00566  { 0x10ad, {1, {0x2d0d}}},
00567  { 0x10ae, {1, {0x2d0e}}},
00568  { 0x10af, {1, {0x2d0f}}},
00569  { 0x10b0, {1, {0x2d10}}},
00570  { 0x10b1, {1, {0x2d11}}},
00571  { 0x10b2, {1, {0x2d12}}},
00572  { 0x10b3, {1, {0x2d13}}},
00573  { 0x10b4, {1, {0x2d14}}},
00574  { 0x10b5, {1, {0x2d15}}},
00575  { 0x10b6, {1, {0x2d16}}},
00576  { 0x10b7, {1, {0x2d17}}},
00577  { 0x10b8, {1, {0x2d18}}},
00578  { 0x10b9, {1, {0x2d19}}},
00579  { 0x10ba, {1, {0x2d1a}}},
00580  { 0x10bb, {1, {0x2d1b}}},
00581  { 0x10bc, {1, {0x2d1c}}},
00582  { 0x10bd, {1, {0x2d1d}}},
00583  { 0x10be, {1, {0x2d1e}}},
00584  { 0x10bf, {1, {0x2d1f}}},
00585  { 0x10c0, {1, {0x2d20}}},
00586  { 0x10c1, {1, {0x2d21}}},
00587  { 0x10c2, {1, {0x2d22}}},
00588  { 0x10c3, {1, {0x2d23}}},
00589  { 0x10c4, {1, {0x2d24}}},
00590  { 0x10c5, {1, {0x2d25}}},
00591  { 0x1e00, {1, {0x1e01}}},
00592  { 0x1e02, {1, {0x1e03}}},
00593  { 0x1e04, {1, {0x1e05}}},
00594  { 0x1e06, {1, {0x1e07}}},
00595  { 0x1e08, {1, {0x1e09}}},
00596  { 0x1e0a, {1, {0x1e0b}}},
00597  { 0x1e0c, {1, {0x1e0d}}},
00598  { 0x1e0e, {1, {0x1e0f}}},
00599  { 0x1e10, {1, {0x1e11}}},
00600  { 0x1e12, {1, {0x1e13}}},
00601  { 0x1e14, {1, {0x1e15}}},
00602  { 0x1e16, {1, {0x1e17}}},
00603  { 0x1e18, {1, {0x1e19}}},
00604  { 0x1e1a, {1, {0x1e1b}}},
00605  { 0x1e1c, {1, {0x1e1d}}},
00606  { 0x1e1e, {1, {0x1e1f}}},
00607  { 0x1e20, {1, {0x1e21}}},
00608  { 0x1e22, {1, {0x1e23}}},
00609  { 0x1e24, {1, {0x1e25}}},
00610  { 0x1e26, {1, {0x1e27}}},
00611  { 0x1e28, {1, {0x1e29}}},
00612  { 0x1e2a, {1, {0x1e2b}}},
00613  { 0x1e2c, {1, {0x1e2d}}},
00614  { 0x1e2e, {1, {0x1e2f}}},
00615  { 0x1e30, {1, {0x1e31}}},
00616  { 0x1e32, {1, {0x1e33}}},
00617  { 0x1e34, {1, {0x1e35}}},
00618  { 0x1e36, {1, {0x1e37}}},
00619  { 0x1e38, {1, {0x1e39}}},
00620  { 0x1e3a, {1, {0x1e3b}}},
00621  { 0x1e3c, {1, {0x1e3d}}},
00622  { 0x1e3e, {1, {0x1e3f}}},
00623  { 0x1e40, {1, {0x1e41}}},
00624  { 0x1e42, {1, {0x1e43}}},
00625  { 0x1e44, {1, {0x1e45}}},
00626  { 0x1e46, {1, {0x1e47}}},
00627  { 0x1e48, {1, {0x1e49}}},
00628  { 0x1e4a, {1, {0x1e4b}}},
00629  { 0x1e4c, {1, {0x1e4d}}},
00630  { 0x1e4e, {1, {0x1e4f}}},
00631  { 0x1e50, {1, {0x1e51}}},
00632  { 0x1e52, {1, {0x1e53}}},
00633  { 0x1e54, {1, {0x1e55}}},
00634  { 0x1e56, {1, {0x1e57}}},
00635  { 0x1e58, {1, {0x1e59}}},
00636  { 0x1e5a, {1, {0x1e5b}}},
00637  { 0x1e5c, {1, {0x1e5d}}},
00638  { 0x1e5e, {1, {0x1e5f}}},
00639  { 0x1e60, {1, {0x1e61}}},
00640  { 0x1e62, {1, {0x1e63}}},
00641  { 0x1e64, {1, {0x1e65}}},
00642  { 0x1e66, {1, {0x1e67}}},
00643  { 0x1e68, {1, {0x1e69}}},
00644  { 0x1e6a, {1, {0x1e6b}}},
00645  { 0x1e6c, {1, {0x1e6d}}},
00646  { 0x1e6e, {1, {0x1e6f}}},
00647  { 0x1e70, {1, {0x1e71}}},
00648  { 0x1e72, {1, {0x1e73}}},
00649  { 0x1e74, {1, {0x1e75}}},
00650  { 0x1e76, {1, {0x1e77}}},
00651  { 0x1e78, {1, {0x1e79}}},
00652  { 0x1e7a, {1, {0x1e7b}}},
00653  { 0x1e7c, {1, {0x1e7d}}},
00654  { 0x1e7e, {1, {0x1e7f}}},
00655  { 0x1e80, {1, {0x1e81}}},
00656  { 0x1e82, {1, {0x1e83}}},
00657  { 0x1e84, {1, {0x1e85}}},
00658  { 0x1e86, {1, {0x1e87}}},
00659  { 0x1e88, {1, {0x1e89}}},
00660  { 0x1e8a, {1, {0x1e8b}}},
00661  { 0x1e8c, {1, {0x1e8d}}},
00662  { 0x1e8e, {1, {0x1e8f}}},
00663  { 0x1e90, {1, {0x1e91}}},
00664  { 0x1e92, {1, {0x1e93}}},
00665  { 0x1e94, {1, {0x1e95}}},
00666  { 0x1e96, {2, {0x0068, 0x0331}}},
00667  { 0x1e97, {2, {0x0074, 0x0308}}},
00668  { 0x1e98, {2, {0x0077, 0x030a}}},
00669  { 0x1e99, {2, {0x0079, 0x030a}}},
00670  { 0x1e9a, {2, {0x0061, 0x02be}}},
00671  { 0x1e9b, {1, {0x1e61}}},
00672  { 0x1ea0, {1, {0x1ea1}}},
00673  { 0x1ea2, {1, {0x1ea3}}},
00674  { 0x1ea4, {1, {0x1ea5}}},
00675  { 0x1ea6, {1, {0x1ea7}}},
00676  { 0x1ea8, {1, {0x1ea9}}},
00677  { 0x1eaa, {1, {0x1eab}}},
00678  { 0x1eac, {1, {0x1ead}}},
00679  { 0x1eae, {1, {0x1eaf}}},
00680  { 0x1eb0, {1, {0x1eb1}}},
00681  { 0x1eb2, {1, {0x1eb3}}},
00682  { 0x1eb4, {1, {0x1eb5}}},
00683  { 0x1eb6, {1, {0x1eb7}}},
00684  { 0x1eb8, {1, {0x1eb9}}},
00685  { 0x1eba, {1, {0x1ebb}}},
00686  { 0x1ebc, {1, {0x1ebd}}},
00687  { 0x1ebe, {1, {0x1ebf}}},
00688  { 0x1ec0, {1, {0x1ec1}}},
00689  { 0x1ec2, {1, {0x1ec3}}},
00690  { 0x1ec4, {1, {0x1ec5}}},
00691  { 0x1ec6, {1, {0x1ec7}}},
00692  { 0x1ec8, {1, {0x1ec9}}},
00693  { 0x1eca, {1, {0x1ecb}}},
00694  { 0x1ecc, {1, {0x1ecd}}},
00695  { 0x1ece, {1, {0x1ecf}}},
00696  { 0x1ed0, {1, {0x1ed1}}},
00697  { 0x1ed2, {1, {0x1ed3}}},
00698  { 0x1ed4, {1, {0x1ed5}}},
00699  { 0x1ed6, {1, {0x1ed7}}},
00700  { 0x1ed8, {1, {0x1ed9}}},
00701  { 0x1eda, {1, {0x1edb}}},
00702  { 0x1edc, {1, {0x1edd}}},
00703  { 0x1ede, {1, {0x1edf}}},
00704  { 0x1ee0, {1, {0x1ee1}}},
00705  { 0x1ee2, {1, {0x1ee3}}},
00706  { 0x1ee4, {1, {0x1ee5}}},
00707  { 0x1ee6, {1, {0x1ee7}}},
00708  { 0x1ee8, {1, {0x1ee9}}},
00709  { 0x1eea, {1, {0x1eeb}}},
00710  { 0x1eec, {1, {0x1eed}}},
00711  { 0x1eee, {1, {0x1eef}}},
00712  { 0x1ef0, {1, {0x1ef1}}},
00713  { 0x1ef2, {1, {0x1ef3}}},
00714  { 0x1ef4, {1, {0x1ef5}}},
00715  { 0x1ef6, {1, {0x1ef7}}},
00716  { 0x1ef8, {1, {0x1ef9}}},
00717  { 0x1f08, {1, {0x1f00}}},
00718  { 0x1f09, {1, {0x1f01}}},
00719  { 0x1f0a, {1, {0x1f02}}},
00720  { 0x1f0b, {1, {0x1f03}}},
00721  { 0x1f0c, {1, {0x1f04}}},
00722  { 0x1f0d, {1, {0x1f05}}},
00723  { 0x1f0e, {1, {0x1f06}}},
00724  { 0x1f0f, {1, {0x1f07}}},
00725  { 0x1f18, {1, {0x1f10}}},
00726  { 0x1f19, {1, {0x1f11}}},
00727  { 0x1f1a, {1, {0x1f12}}},
00728  { 0x1f1b, {1, {0x1f13}}},
00729  { 0x1f1c, {1, {0x1f14}}},
00730  { 0x1f1d, {1, {0x1f15}}},
00731  { 0x1f28, {1, {0x1f20}}},
00732  { 0x1f29, {1, {0x1f21}}},
00733  { 0x1f2a, {1, {0x1f22}}},
00734  { 0x1f2b, {1, {0x1f23}}},
00735  { 0x1f2c, {1, {0x1f24}}},
00736  { 0x1f2d, {1, {0x1f25}}},
00737  { 0x1f2e, {1, {0x1f26}}},
00738  { 0x1f2f, {1, {0x1f27}}},
00739  { 0x1f38, {1, {0x1f30}}},
00740  { 0x1f39, {1, {0x1f31}}},
00741  { 0x1f3a, {1, {0x1f32}}},
00742  { 0x1f3b, {1, {0x1f33}}},
00743  { 0x1f3c, {1, {0x1f34}}},
00744  { 0x1f3d, {1, {0x1f35}}},
00745  { 0x1f3e, {1, {0x1f36}}},
00746  { 0x1f3f, {1, {0x1f37}}},
00747  { 0x1f48, {1, {0x1f40}}},
00748  { 0x1f49, {1, {0x1f41}}},
00749  { 0x1f4a, {1, {0x1f42}}},
00750  { 0x1f4b, {1, {0x1f43}}},
00751  { 0x1f4c, {1, {0x1f44}}},
00752  { 0x1f4d, {1, {0x1f45}}},
00753  { 0x1f50, {2, {0x03c5, 0x0313}}},
00754  { 0x1f52, {3, {0x03c5, 0x0313, 0x0300}}},
00755  { 0x1f54, {3, {0x03c5, 0x0313, 0x0301}}},
00756  { 0x1f56, {3, {0x03c5, 0x0313, 0x0342}}},
00757  { 0x1f59, {1, {0x1f51}}},
00758  { 0x1f5b, {1, {0x1f53}}},
00759  { 0x1f5d, {1, {0x1f55}}},
00760  { 0x1f5f, {1, {0x1f57}}},
00761  { 0x1f68, {1, {0x1f60}}},
00762  { 0x1f69, {1, {0x1f61}}},
00763  { 0x1f6a, {1, {0x1f62}}},
00764  { 0x1f6b, {1, {0x1f63}}},
00765  { 0x1f6c, {1, {0x1f64}}},
00766  { 0x1f6d, {1, {0x1f65}}},
00767  { 0x1f6e, {1, {0x1f66}}},
00768  { 0x1f6f, {1, {0x1f67}}},
00769  { 0x1f80, {2, {0x1f00, 0x03b9}}},
00770  { 0x1f81, {2, {0x1f01, 0x03b9}}},
00771  { 0x1f82, {2, {0x1f02, 0x03b9}}},
00772  { 0x1f83, {2, {0x1f03, 0x03b9}}},
00773  { 0x1f84, {2, {0x1f04, 0x03b9}}},
00774  { 0x1f85, {2, {0x1f05, 0x03b9}}},
00775  { 0x1f86, {2, {0x1f06, 0x03b9}}},
00776  { 0x1f87, {2, {0x1f07, 0x03b9}}},
00777  { 0x1f88, {2, {0x1f00, 0x03b9}}},
00778  { 0x1f89, {2, {0x1f01, 0x03b9}}},
00779  { 0x1f8a, {2, {0x1f02, 0x03b9}}},
00780  { 0x1f8b, {2, {0x1f03, 0x03b9}}},
00781  { 0x1f8c, {2, {0x1f04, 0x03b9}}},
00782  { 0x1f8d, {2, {0x1f05, 0x03b9}}},
00783  { 0x1f8e, {2, {0x1f06, 0x03b9}}},
00784  { 0x1f8f, {2, {0x1f07, 0x03b9}}},
00785  { 0x1f90, {2, {0x1f20, 0x03b9}}},
00786  { 0x1f91, {2, {0x1f21, 0x03b9}}},
00787  { 0x1f92, {2, {0x1f22, 0x03b9}}},
00788  { 0x1f93, {2, {0x1f23, 0x03b9}}},
00789  { 0x1f94, {2, {0x1f24, 0x03b9}}},
00790  { 0x1f95, {2, {0x1f25, 0x03b9}}},
00791  { 0x1f96, {2, {0x1f26, 0x03b9}}},
00792  { 0x1f97, {2, {0x1f27, 0x03b9}}},
00793  { 0x1f98, {2, {0x1f20, 0x03b9}}},
00794  { 0x1f99, {2, {0x1f21, 0x03b9}}},
00795  { 0x1f9a, {2, {0x1f22, 0x03b9}}},
00796  { 0x1f9b, {2, {0x1f23, 0x03b9}}},
00797  { 0x1f9c, {2, {0x1f24, 0x03b9}}},
00798  { 0x1f9d, {2, {0x1f25, 0x03b9}}},
00799  { 0x1f9e, {2, {0x1f26, 0x03b9}}},
00800  { 0x1f9f, {2, {0x1f27, 0x03b9}}},
00801  { 0x1fa0, {2, {0x1f60, 0x03b9}}},
00802  { 0x1fa1, {2, {0x1f61, 0x03b9}}},
00803  { 0x1fa2, {2, {0x1f62, 0x03b9}}},
00804  { 0x1fa3, {2, {0x1f63, 0x03b9}}},
00805  { 0x1fa4, {2, {0x1f64, 0x03b9}}},
00806  { 0x1fa5, {2, {0x1f65, 0x03b9}}},
00807  { 0x1fa6, {2, {0x1f66, 0x03b9}}},
00808  { 0x1fa7, {2, {0x1f67, 0x03b9}}},
00809  { 0x1fa8, {2, {0x1f60, 0x03b9}}},
00810  { 0x1fa9, {2, {0x1f61, 0x03b9}}},
00811  { 0x1faa, {2, {0x1f62, 0x03b9}}},
00812  { 0x1fab, {2, {0x1f63, 0x03b9}}},
00813  { 0x1fac, {2, {0x1f64, 0x03b9}}},
00814  { 0x1fad, {2, {0x1f65, 0x03b9}}},
00815  { 0x1fae, {2, {0x1f66, 0x03b9}}},
00816  { 0x1faf, {2, {0x1f67, 0x03b9}}},
00817  { 0x1fb2, {2, {0x1f70, 0x03b9}}},
00818  { 0x1fb3, {2, {0x03b1, 0x03b9}}},
00819  { 0x1fb4, {2, {0x03ac, 0x03b9}}},
00820  { 0x1fb6, {2, {0x03b1, 0x0342}}},
00821  { 0x1fb7, {3, {0x03b1, 0x0342, 0x03b9}}},
00822  { 0x1fb8, {1, {0x1fb0}}},
00823  { 0x1fb9, {1, {0x1fb1}}},
00824  { 0x1fba, {1, {0x1f70}}},
00825  { 0x1fbb, {1, {0x1f71}}},
00826  { 0x1fbc, {2, {0x03b1, 0x03b9}}},
00827  { 0x1fbe, {1, {0x03b9}}},
00828  { 0x1fc2, {2, {0x1f74, 0x03b9}}},
00829  { 0x1fc3, {2, {0x03b7, 0x03b9}}},
00830  { 0x1fc4, {2, {0x03ae, 0x03b9}}},
00831  { 0x1fc6, {2, {0x03b7, 0x0342}}},
00832  { 0x1fc7, {3, {0x03b7, 0x0342, 0x03b9}}},
00833  { 0x1fc8, {1, {0x1f72}}},
00834  { 0x1fc9, {1, {0x1f73}}},
00835  { 0x1fca, {1, {0x1f74}}},
00836  { 0x1fcb, {1, {0x1f75}}},
00837  { 0x1fcc, {2, {0x03b7, 0x03b9}}},
00838  { 0x1fd2, {3, {0x03b9, 0x0308, 0x0300}}},
00839  { 0x1fd3, {3, {0x03b9, 0x0308, 0x0301}}},
00840  { 0x1fd6, {2, {0x03b9, 0x0342}}},
00841  { 0x1fd7, {3, {0x03b9, 0x0308, 0x0342}}},
00842  { 0x1fd8, {1, {0x1fd0}}},
00843  { 0x1fd9, {1, {0x1fd1}}},
00844  { 0x1fda, {1, {0x1f76}}},
00845  { 0x1fdb, {1, {0x1f77}}},
00846  { 0x1fe2, {3, {0x03c5, 0x0308, 0x0300}}},
00847  { 0x1fe3, {3, {0x03c5, 0x0308, 0x0301}}},
00848  { 0x1fe4, {2, {0x03c1, 0x0313}}},
00849  { 0x1fe6, {2, {0x03c5, 0x0342}}},
00850  { 0x1fe7, {3, {0x03c5, 0x0308, 0x0342}}},
00851  { 0x1fe8, {1, {0x1fe0}}},
00852  { 0x1fe9, {1, {0x1fe1}}},
00853  { 0x1fea, {1, {0x1f7a}}},
00854  { 0x1feb, {1, {0x1f7b}}},
00855  { 0x1fec, {1, {0x1fe5}}},
00856  { 0x1ff2, {2, {0x1f7c, 0x03b9}}},
00857  { 0x1ff3, {2, {0x03c9, 0x03b9}}},
00858  { 0x1ff4, {2, {0x03ce, 0x03b9}}},
00859  { 0x1ff6, {2, {0x03c9, 0x0342}}},
00860  { 0x1ff7, {3, {0x03c9, 0x0342, 0x03b9}}},
00861  { 0x1ff8, {1, {0x1f78}}},
00862  { 0x1ff9, {1, {0x1f79}}},
00863  { 0x1ffa, {1, {0x1f7c}}},
00864  { 0x1ffb, {1, {0x1f7d}}},
00865  { 0x1ffc, {2, {0x03c9, 0x03b9}}},
00866  { 0x2126, {1, {0x03c9}}},
00867  { 0x212a, {1, {0x006b}}},
00868  { 0x212b, {1, {0x00e5}}},
00869  { 0x2160, {1, {0x2170}}},
00870  { 0x2161, {1, {0x2171}}},
00871  { 0x2162, {1, {0x2172}}},
00872  { 0x2163, {1, {0x2173}}},
00873  { 0x2164, {1, {0x2174}}},
00874  { 0x2165, {1, {0x2175}}},
00875  { 0x2166, {1, {0x2176}}},
00876  { 0x2167, {1, {0x2177}}},
00877  { 0x2168, {1, {0x2178}}},
00878  { 0x2169, {1, {0x2179}}},
00879  { 0x216a, {1, {0x217a}}},
00880  { 0x216b, {1, {0x217b}}},
00881  { 0x216c, {1, {0x217c}}},
00882  { 0x216d, {1, {0x217d}}},
00883  { 0x216e, {1, {0x217e}}},
00884  { 0x216f, {1, {0x217f}}},
00885  { 0x24b6, {1, {0x24d0}}},
00886  { 0x24b7, {1, {0x24d1}}},
00887  { 0x24b8, {1, {0x24d2}}},
00888  { 0x24b9, {1, {0x24d3}}},
00889  { 0x24ba, {1, {0x24d4}}},
00890  { 0x24bb, {1, {0x24d5}}},
00891  { 0x24bc, {1, {0x24d6}}},
00892  { 0x24bd, {1, {0x24d7}}},
00893  { 0x24be, {1, {0x24d8}}},
00894  { 0x24bf, {1, {0x24d9}}},
00895  { 0x24c0, {1, {0x24da}}},
00896  { 0x24c1, {1, {0x24db}}},
00897  { 0x24c2, {1, {0x24dc}}},
00898  { 0x24c3, {1, {0x24dd}}},
00899  { 0x24c4, {1, {0x24de}}},
00900  { 0x24c5, {1, {0x24df}}},
00901  { 0x24c6, {1, {0x24e0}}},
00902  { 0x24c7, {1, {0x24e1}}},
00903  { 0x24c8, {1, {0x24e2}}},
00904  { 0x24c9, {1, {0x24e3}}},
00905  { 0x24ca, {1, {0x24e4}}},
00906  { 0x24cb, {1, {0x24e5}}},
00907  { 0x24cc, {1, {0x24e6}}},
00908  { 0x24cd, {1, {0x24e7}}},
00909  { 0x24ce, {1, {0x24e8}}},
00910  { 0x24cf, {1, {0x24e9}}},
00911  { 0x2c00, {1, {0x2c30}}},
00912  { 0x2c01, {1, {0x2c31}}},
00913  { 0x2c02, {1, {0x2c32}}},
00914  { 0x2c03, {1, {0x2c33}}},
00915  { 0x2c04, {1, {0x2c34}}},
00916  { 0x2c05, {1, {0x2c35}}},
00917  { 0x2c06, {1, {0x2c36}}},
00918  { 0x2c07, {1, {0x2c37}}},
00919  { 0x2c08, {1, {0x2c38}}},
00920  { 0x2c09, {1, {0x2c39}}},
00921  { 0x2c0a, {1, {0x2c3a}}},
00922  { 0x2c0b, {1, {0x2c3b}}},
00923  { 0x2c0c, {1, {0x2c3c}}},
00924  { 0x2c0d, {1, {0x2c3d}}},
00925  { 0x2c0e, {1, {0x2c3e}}},
00926  { 0x2c0f, {1, {0x2c3f}}},
00927  { 0x2c10, {1, {0x2c40}}},
00928  { 0x2c11, {1, {0x2c41}}},
00929  { 0x2c12, {1, {0x2c42}}},
00930  { 0x2c13, {1, {0x2c43}}},
00931  { 0x2c14, {1, {0x2c44}}},
00932  { 0x2c15, {1, {0x2c45}}},
00933  { 0x2c16, {1, {0x2c46}}},
00934  { 0x2c17, {1, {0x2c47}}},
00935  { 0x2c18, {1, {0x2c48}}},
00936  { 0x2c19, {1, {0x2c49}}},
00937  { 0x2c1a, {1, {0x2c4a}}},
00938  { 0x2c1b, {1, {0x2c4b}}},
00939  { 0x2c1c, {1, {0x2c4c}}},
00940  { 0x2c1d, {1, {0x2c4d}}},
00941  { 0x2c1e, {1, {0x2c4e}}},
00942  { 0x2c1f, {1, {0x2c4f}}},
00943  { 0x2c20, {1, {0x2c50}}},
00944  { 0x2c21, {1, {0x2c51}}},
00945  { 0x2c22, {1, {0x2c52}}},
00946  { 0x2c23, {1, {0x2c53}}},
00947  { 0x2c24, {1, {0x2c54}}},
00948  { 0x2c25, {1, {0x2c55}}},
00949  { 0x2c26, {1, {0x2c56}}},
00950  { 0x2c27, {1, {0x2c57}}},
00951  { 0x2c28, {1, {0x2c58}}},
00952  { 0x2c29, {1, {0x2c59}}},
00953  { 0x2c2a, {1, {0x2c5a}}},
00954  { 0x2c2b, {1, {0x2c5b}}},
00955  { 0x2c2c, {1, {0x2c5c}}},
00956  { 0x2c2d, {1, {0x2c5d}}},
00957  { 0x2c2e, {1, {0x2c5e}}},
00958  { 0x2c80, {1, {0x2c81}}},
00959  { 0x2c82, {1, {0x2c83}}},
00960  { 0x2c84, {1, {0x2c85}}},
00961  { 0x2c86, {1, {0x2c87}}},
00962  { 0x2c88, {1, {0x2c89}}},
00963  { 0x2c8a, {1, {0x2c8b}}},
00964  { 0x2c8c, {1, {0x2c8d}}},
00965  { 0x2c8e, {1, {0x2c8f}}},
00966  { 0x2c90, {1, {0x2c91}}},
00967  { 0x2c92, {1, {0x2c93}}},
00968  { 0x2c94, {1, {0x2c95}}},
00969  { 0x2c96, {1, {0x2c97}}},
00970  { 0x2c98, {1, {0x2c99}}},
00971  { 0x2c9a, {1, {0x2c9b}}},
00972  { 0x2c9c, {1, {0x2c9d}}},
00973  { 0x2c9e, {1, {0x2c9f}}},
00974  { 0x2ca0, {1, {0x2ca1}}},
00975  { 0x2ca2, {1, {0x2ca3}}},
00976  { 0x2ca4, {1, {0x2ca5}}},
00977  { 0x2ca6, {1, {0x2ca7}}},
00978  { 0x2ca8, {1, {0x2ca9}}},
00979  { 0x2caa, {1, {0x2cab}}},
00980  { 0x2cac, {1, {0x2cad}}},
00981  { 0x2cae, {1, {0x2caf}}},
00982  { 0x2cb0, {1, {0x2cb1}}},
00983  { 0x2cb2, {1, {0x2cb3}}},
00984  { 0x2cb4, {1, {0x2cb5}}},
00985  { 0x2cb6, {1, {0x2cb7}}},
00986  { 0x2cb8, {1, {0x2cb9}}},
00987  { 0x2cba, {1, {0x2cbb}}},
00988  { 0x2cbc, {1, {0x2cbd}}},
00989  { 0x2cbe, {1, {0x2cbf}}},
00990  { 0x2cc0, {1, {0x2cc1}}},
00991  { 0x2cc2, {1, {0x2cc3}}},
00992  { 0x2cc4, {1, {0x2cc5}}},
00993  { 0x2cc6, {1, {0x2cc7}}},
00994  { 0x2cc8, {1, {0x2cc9}}},
00995  { 0x2cca, {1, {0x2ccb}}},
00996  { 0x2ccc, {1, {0x2ccd}}},
00997  { 0x2cce, {1, {0x2ccf}}},
00998  { 0x2cd0, {1, {0x2cd1}}},
00999  { 0x2cd2, {1, {0x2cd3}}},
01000  { 0x2cd4, {1, {0x2cd5}}},
01001  { 0x2cd6, {1, {0x2cd7}}},
01002  { 0x2cd8, {1, {0x2cd9}}},
01003  { 0x2cda, {1, {0x2cdb}}},
01004  { 0x2cdc, {1, {0x2cdd}}},
01005  { 0x2cde, {1, {0x2cdf}}},
01006  { 0x2ce0, {1, {0x2ce1}}},
01007  { 0x2ce2, {1, {0x2ce3}}},
01008  { 0xfb00, {2, {0x0066, 0x0066}}},
01009  { 0xfb01, {2, {0x0066, 0x0069}}},
01010  { 0xfb02, {2, {0x0066, 0x006c}}},
01011  { 0xfb03, {3, {0x0066, 0x0066, 0x0069}}},
01012  { 0xfb04, {3, {0x0066, 0x0066, 0x006c}}},
01013  { 0xfb05, {2, {0x0073, 0x0074}}},
01014  { 0xfb06, {2, {0x0073, 0x0074}}},
01015  { 0xfb13, {2, {0x0574, 0x0576}}},
01016  { 0xfb14, {2, {0x0574, 0x0565}}},
01017  { 0xfb15, {2, {0x0574, 0x056b}}},
01018  { 0xfb16, {2, {0x057e, 0x0576}}},
01019  { 0xfb17, {2, {0x0574, 0x056d}}},
01020  { 0xff21, {1, {0xff41}}},
01021  { 0xff22, {1, {0xff42}}},
01022  { 0xff23, {1, {0xff43}}},
01023  { 0xff24, {1, {0xff44}}},
01024  { 0xff25, {1, {0xff45}}},
01025  { 0xff26, {1, {0xff46}}},
01026  { 0xff27, {1, {0xff47}}},
01027  { 0xff28, {1, {0xff48}}},
01028  { 0xff29, {1, {0xff49}}},
01029  { 0xff2a, {1, {0xff4a}}},
01030  { 0xff2b, {1, {0xff4b}}},
01031  { 0xff2c, {1, {0xff4c}}},
01032  { 0xff2d, {1, {0xff4d}}},
01033  { 0xff2e, {1, {0xff4e}}},
01034  { 0xff2f, {1, {0xff4f}}},
01035  { 0xff30, {1, {0xff50}}},
01036  { 0xff31, {1, {0xff51}}},
01037  { 0xff32, {1, {0xff52}}},
01038  { 0xff33, {1, {0xff53}}},
01039  { 0xff34, {1, {0xff54}}},
01040  { 0xff35, {1, {0xff55}}},
01041  { 0xff36, {1, {0xff56}}},
01042  { 0xff37, {1, {0xff57}}},
01043  { 0xff38, {1, {0xff58}}},
01044  { 0xff39, {1, {0xff59}}},
01045  { 0xff3a, {1, {0xff5a}}},
01046  { 0x10400, {1, {0x10428}}},
01047  { 0x10401, {1, {0x10429}}},
01048  { 0x10402, {1, {0x1042a}}},
01049  { 0x10403, {1, {0x1042b}}},
01050  { 0x10404, {1, {0x1042c}}},
01051  { 0x10405, {1, {0x1042d}}},
01052  { 0x10406, {1, {0x1042e}}},
01053  { 0x10407, {1, {0x1042f}}},
01054  { 0x10408, {1, {0x10430}}},
01055  { 0x10409, {1, {0x10431}}},
01056  { 0x1040a, {1, {0x10432}}},
01057  { 0x1040b, {1, {0x10433}}},
01058  { 0x1040c, {1, {0x10434}}},
01059  { 0x1040d, {1, {0x10435}}},
01060  { 0x1040e, {1, {0x10436}}},
01061  { 0x1040f, {1, {0x10437}}},
01062  { 0x10410, {1, {0x10438}}},
01063  { 0x10411, {1, {0x10439}}},
01064  { 0x10412, {1, {0x1043a}}},
01065  { 0x10413, {1, {0x1043b}}},
01066  { 0x10414, {1, {0x1043c}}},
01067  { 0x10415, {1, {0x1043d}}},
01068  { 0x10416, {1, {0x1043e}}},
01069  { 0x10417, {1, {0x1043f}}},
01070  { 0x10418, {1, {0x10440}}},
01071  { 0x10419, {1, {0x10441}}},
01072  { 0x1041a, {1, {0x10442}}},
01073  { 0x1041b, {1, {0x10443}}},
01074  { 0x1041c, {1, {0x10444}}},
01075  { 0x1041d, {1, {0x10445}}},
01076  { 0x1041e, {1, {0x10446}}},
01077  { 0x1041f, {1, {0x10447}}},
01078  { 0x10420, {1, {0x10448}}},
01079  { 0x10421, {1, {0x10449}}},
01080  { 0x10422, {1, {0x1044a}}},
01081  { 0x10423, {1, {0x1044b}}},
01082  { 0x10424, {1, {0x1044c}}},
01083  { 0x10425, {1, {0x1044d}}},
01084  { 0x10426, {1, {0x1044e}}},
01085  { 0x10427, {1, {0x1044f}}}
01086 };
01087 
01088 static const CaseFold_11_Type CaseFold_Locale[] = {
01089  { 0x0049, {1, {0x0069}}},
01090  { 0x0130, {2, {0x0069, 0x0307}}}
01091 };
01092 
01093 static const CaseUnfold_11_Type CaseUnfold_11[] = {
01094  { 0x0061, {1, {0x0041 }}},
01095  { 0x0062, {1, {0x0042 }}},
01096  { 0x0063, {1, {0x0043 }}},
01097  { 0x0064, {1, {0x0044 }}},
01098  { 0x0065, {1, {0x0045 }}},
01099  { 0x0066, {1, {0x0046 }}},
01100  { 0x0067, {1, {0x0047 }}},
01101  { 0x0068, {1, {0x0048 }}},
01102  { 0x006a, {1, {0x004a }}},
01103  { 0x006b, {2, {0x212a, 0x004b }}},
01104  { 0x006c, {1, {0x004c }}},
01105  { 0x006d, {1, {0x004d }}},
01106  { 0x006e, {1, {0x004e }}},
01107  { 0x006f, {1, {0x004f }}},
01108  { 0x0070, {1, {0x0050 }}},
01109  { 0x0071, {1, {0x0051 }}},
01110  { 0x0072, {1, {0x0052 }}},
01111  { 0x0073, {2, {0x0053, 0x017f }}},
01112  { 0x0074, {1, {0x0054 }}},
01113  { 0x0075, {1, {0x0055 }}},
01114  { 0x0076, {1, {0x0056 }}},
01115  { 0x0077, {1, {0x0057 }}},
01116  { 0x0078, {1, {0x0058 }}},
01117  { 0x0079, {1, {0x0059 }}},
01118  { 0x007a, {1, {0x005a }}},
01119  { 0x00e0, {1, {0x00c0 }}},
01120  { 0x00e1, {1, {0x00c1 }}},
01121  { 0x00e2, {1, {0x00c2 }}},
01122  { 0x00e3, {1, {0x00c3 }}},
01123  { 0x00e4, {1, {0x00c4 }}},
01124  { 0x00e5, {2, {0x212b, 0x00c5 }}},
01125  { 0x00e6, {1, {0x00c6 }}},
01126  { 0x00e7, {1, {0x00c7 }}},
01127  { 0x00e8, {1, {0x00c8 }}},
01128  { 0x00e9, {1, {0x00c9 }}},
01129  { 0x00ea, {1, {0x00ca }}},
01130  { 0x00eb, {1, {0x00cb }}},
01131  { 0x00ec, {1, {0x00cc }}},
01132  { 0x00ed, {1, {0x00cd }}},
01133  { 0x00ee, {1, {0x00ce }}},
01134  { 0x00ef, {1, {0x00cf }}},
01135  { 0x00f0, {1, {0x00d0 }}},
01136  { 0x00f1, {1, {0x00d1 }}},
01137  { 0x00f2, {1, {0x00d2 }}},
01138  { 0x00f3, {1, {0x00d3 }}},
01139  { 0x00f4, {1, {0x00d4 }}},
01140  { 0x00f5, {1, {0x00d5 }}},
01141  { 0x00f6, {1, {0x00d6 }}},
01142  { 0x00f8, {1, {0x00d8 }}},
01143  { 0x00f9, {1, {0x00d9 }}},
01144  { 0x00fa, {1, {0x00da }}},
01145  { 0x00fb, {1, {0x00db }}},
01146  { 0x00fc, {1, {0x00dc }}},
01147  { 0x00fd, {1, {0x00dd }}},
01148  { 0x00fe, {1, {0x00de }}},
01149  { 0x00ff, {1, {0x0178 }}},
01150  { 0x0101, {1, {0x0100 }}},
01151  { 0x0103, {1, {0x0102 }}},
01152  { 0x0105, {1, {0x0104 }}},
01153  { 0x0107, {1, {0x0106 }}},
01154  { 0x0109, {1, {0x0108 }}},
01155  { 0x010b, {1, {0x010a }}},
01156  { 0x010d, {1, {0x010c }}},
01157  { 0x010f, {1, {0x010e }}},
01158  { 0x0111, {1, {0x0110 }}},
01159  { 0x0113, {1, {0x0112 }}},
01160  { 0x0115, {1, {0x0114 }}},
01161  { 0x0117, {1, {0x0116 }}},
01162  { 0x0119, {1, {0x0118 }}},
01163  { 0x011b, {1, {0x011a }}},
01164  { 0x011d, {1, {0x011c }}},
01165  { 0x011f, {1, {0x011e }}},
01166  { 0x0121, {1, {0x0120 }}},
01167  { 0x0123, {1, {0x0122 }}},
01168  { 0x0125, {1, {0x0124 }}},
01169  { 0x0127, {1, {0x0126 }}},
01170  { 0x0129, {1, {0x0128 }}},
01171  { 0x012b, {1, {0x012a }}},
01172  { 0x012d, {1, {0x012c }}},
01173  { 0x012f, {1, {0x012e }}},
01174  { 0x0133, {1, {0x0132 }}},
01175  { 0x0135, {1, {0x0134 }}},
01176  { 0x0137, {1, {0x0136 }}},
01177  { 0x013a, {1, {0x0139 }}},
01178  { 0x013c, {1, {0x013b }}},
01179  { 0x013e, {1, {0x013d }}},
01180  { 0x0140, {1, {0x013f }}},
01181  { 0x0142, {1, {0x0141 }}},
01182  { 0x0144, {1, {0x0143 }}},
01183  { 0x0146, {1, {0x0145 }}},
01184  { 0x0148, {1, {0x0147 }}},
01185  { 0x014b, {1, {0x014a }}},
01186  { 0x014d, {1, {0x014c }}},
01187  { 0x014f, {1, {0x014e }}},
01188  { 0x0151, {1, {0x0150 }}},
01189  { 0x0153, {1, {0x0152 }}},
01190  { 0x0155, {1, {0x0154 }}},
01191  { 0x0157, {1, {0x0156 }}},
01192  { 0x0159, {1, {0x0158 }}},
01193  { 0x015b, {1, {0x015a }}},
01194  { 0x015d, {1, {0x015c }}},
01195  { 0x015f, {1, {0x015e }}},
01196  { 0x0161, {1, {0x0160 }}},
01197  { 0x0163, {1, {0x0162 }}},
01198  { 0x0165, {1, {0x0164 }}},
01199  { 0x0167, {1, {0x0166 }}},
01200  { 0x0169, {1, {0x0168 }}},
01201  { 0x016b, {1, {0x016a }}},
01202  { 0x016d, {1, {0x016c }}},
01203  { 0x016f, {1, {0x016e }}},
01204  { 0x0171, {1, {0x0170 }}},
01205  { 0x0173, {1, {0x0172 }}},
01206  { 0x0175, {1, {0x0174 }}},
01207  { 0x0177, {1, {0x0176 }}},
01208  { 0x017a, {1, {0x0179 }}},
01209  { 0x017c, {1, {0x017b }}},
01210  { 0x017e, {1, {0x017d }}},
01211  { 0x0183, {1, {0x0182 }}},
01212  { 0x0185, {1, {0x0184 }}},
01213  { 0x0188, {1, {0x0187 }}},
01214  { 0x018c, {1, {0x018b }}},
01215  { 0x0192, {1, {0x0191 }}},
01216  { 0x0195, {1, {0x01f6 }}},
01217  { 0x0199, {1, {0x0198 }}},
01218  { 0x019a, {1, {0x023d }}},
01219  { 0x019e, {1, {0x0220 }}},
01220  { 0x01a1, {1, {0x01a0 }}},
01221  { 0x01a3, {1, {0x01a2 }}},
01222  { 0x01a5, {1, {0x01a4 }}},
01223  { 0x01a8, {1, {0x01a7 }}},
01224  { 0x01ad, {1, {0x01ac }}},
01225  { 0x01b0, {1, {0x01af }}},
01226  { 0x01b4, {1, {0x01b3 }}},
01227  { 0x01b6, {1, {0x01b5 }}},
01228  { 0x01b9, {1, {0x01b8 }}},
01229  { 0x01bd, {1, {0x01bc }}},
01230  { 0x01bf, {1, {0x01f7 }}},
01231  { 0x01c6, {2, {0x01c4, 0x01c5 }}},
01232  { 0x01c9, {2, {0x01c7, 0x01c8 }}},
01233  { 0x01cc, {2, {0x01ca, 0x01cb }}},
01234  { 0x01ce, {1, {0x01cd }}},
01235  { 0x01d0, {1, {0x01cf }}},
01236  { 0x01d2, {1, {0x01d1 }}},
01237  { 0x01d4, {1, {0x01d3 }}},
01238  { 0x01d6, {1, {0x01d5 }}},
01239  { 0x01d8, {1, {0x01d7 }}},
01240  { 0x01da, {1, {0x01d9 }}},
01241  { 0x01dc, {1, {0x01db }}},
01242  { 0x01dd, {1, {0x018e }}},
01243  { 0x01df, {1, {0x01de }}},
01244  { 0x01e1, {1, {0x01e0 }}},
01245  { 0x01e3, {1, {0x01e2 }}},
01246  { 0x01e5, {1, {0x01e4 }}},
01247  { 0x01e7, {1, {0x01e6 }}},
01248  { 0x01e9, {1, {0x01e8 }}},
01249  { 0x01eb, {1, {0x01ea }}},
01250  { 0x01ed, {1, {0x01ec }}},
01251  { 0x01ef, {1, {0x01ee }}},
01252  { 0x01f3, {2, {0x01f1, 0x01f2 }}},
01253  { 0x01f5, {1, {0x01f4 }}},
01254  { 0x01f9, {1, {0x01f8 }}},
01255  { 0x01fb, {1, {0x01fa }}},
01256  { 0x01fd, {1, {0x01fc }}},
01257  { 0x01ff, {1, {0x01fe }}},
01258  { 0x0201, {1, {0x0200 }}},
01259  { 0x0203, {1, {0x0202 }}},
01260  { 0x0205, {1, {0x0204 }}},
01261  { 0x0207, {1, {0x0206 }}},
01262  { 0x0209, {1, {0x0208 }}},
01263  { 0x020b, {1, {0x020a }}},
01264  { 0x020d, {1, {0x020c }}},
01265  { 0x020f, {1, {0x020e }}},
01266  { 0x0211, {1, {0x0210 }}},
01267  { 0x0213, {1, {0x0212 }}},
01268  { 0x0215, {1, {0x0214 }}},
01269  { 0x0217, {1, {0x0216 }}},
01270  { 0x0219, {1, {0x0218 }}},
01271  { 0x021b, {1, {0x021a }}},
01272  { 0x021d, {1, {0x021c }}},
01273  { 0x021f, {1, {0x021e }}},
01274  { 0x0223, {1, {0x0222 }}},
01275  { 0x0225, {1, {0x0224 }}},
01276  { 0x0227, {1, {0x0226 }}},
01277  { 0x0229, {1, {0x0228 }}},
01278  { 0x022b, {1, {0x022a }}},
01279  { 0x022d, {1, {0x022c }}},
01280  { 0x022f, {1, {0x022e }}},
01281  { 0x0231, {1, {0x0230 }}},
01282  { 0x0233, {1, {0x0232 }}},
01283  { 0x023c, {1, {0x023b }}},
01284  { 0x0253, {1, {0x0181 }}},
01285  { 0x0254, {1, {0x0186 }}},
01286  { 0x0256, {1, {0x0189 }}},
01287  { 0x0257, {1, {0x018a }}},
01288  { 0x0259, {1, {0x018f }}},
01289  { 0x025b, {1, {0x0190 }}},
01290  { 0x0260, {1, {0x0193 }}},
01291  { 0x0263, {1, {0x0194 }}},
01292  { 0x0268, {1, {0x0197 }}},
01293  { 0x0269, {1, {0x0196 }}},
01294  { 0x026f, {1, {0x019c }}},
01295  { 0x0272, {1, {0x019d }}},
01296  { 0x0275, {1, {0x019f }}},
01297  { 0x0280, {1, {0x01a6 }}},
01298  { 0x0283, {1, {0x01a9 }}},
01299  { 0x0288, {1, {0x01ae }}},
01300  { 0x028a, {1, {0x01b1 }}},
01301  { 0x028b, {1, {0x01b2 }}},
01302  { 0x0292, {1, {0x01b7 }}},
01303  { 0x0294, {1, {0x0241 }}},
01304  { 0x03ac, {1, {0x0386 }}},
01305  { 0x03ad, {1, {0x0388 }}},
01306  { 0x03ae, {1, {0x0389 }}},
01307  { 0x03af, {1, {0x038a }}},
01308  { 0x03b1, {1, {0x0391 }}},
01309  { 0x03b2, {2, {0x0392, 0x03d0 }}},
01310  { 0x03b3, {1, {0x0393 }}},
01311  { 0x03b4, {1, {0x0394 }}},
01312  { 0x03b5, {2, {0x03f5, 0x0395 }}},
01313  { 0x03b6, {1, {0x0396 }}},
01314  { 0x03b7, {1, {0x0397 }}},
01315  { 0x03b8, {3, {0x03f4, 0x0398, 0x03d1 }}},
01316  { 0x03b9, {3, {0x1fbe, 0x0399, 0x0345 }}},
01317  { 0x03ba, {2, {0x03f0, 0x039a }}},
01318  { 0x03bb, {1, {0x039b }}},
01319  { 0x03bc, {2, {0x00b5, 0x039c }}},
01320  { 0x03bd, {1, {0x039d }}},
01321  { 0x03be, {1, {0x039e }}},
01322  { 0x03bf, {1, {0x039f }}},
01323  { 0x03c0, {2, {0x03a0, 0x03d6 }}},
01324  { 0x03c1, {2, {0x03f1, 0x03a1 }}},
01325  { 0x03c3, {2, {0x03a3, 0x03c2 }}},
01326  { 0x03c4, {1, {0x03a4 }}},
01327  { 0x03c5, {1, {0x03a5 }}},
01328  { 0x03c6, {2, {0x03a6, 0x03d5 }}},
01329  { 0x03c7, {1, {0x03a7 }}},
01330  { 0x03c8, {1, {0x03a8 }}},
01331  { 0x03c9, {2, {0x03a9, 0x2126 }}},
01332  { 0x03ca, {1, {0x03aa }}},
01333  { 0x03cb, {1, {0x03ab }}},
01334  { 0x03cc, {1, {0x038c }}},
01335  { 0x03cd, {1, {0x038e }}},
01336  { 0x03ce, {1, {0x038f }}},
01337  { 0x03d9, {1, {0x03d8 }}},
01338  { 0x03db, {1, {0x03da }}},
01339  { 0x03dd, {1, {0x03dc }}},
01340  { 0x03df, {1, {0x03de }}},
01341  { 0x03e1, {1, {0x03e0 }}},
01342  { 0x03e3, {1, {0x03e2 }}},
01343  { 0x03e5, {1, {0x03e4 }}},
01344  { 0x03e7, {1, {0x03e6 }}},
01345  { 0x03e9, {1, {0x03e8 }}},
01346  { 0x03eb, {1, {0x03ea }}},
01347  { 0x03ed, {1, {0x03ec }}},
01348  { 0x03ef, {1, {0x03ee }}},
01349  { 0x03f2, {1, {0x03f9 }}},
01350  { 0x03f8, {1, {0x03f7 }}},
01351  { 0x03fb, {1, {0x03fa }}},
01352  { 0x0430, {1, {0x0410 }}},
01353  { 0x0431, {1, {0x0411 }}},
01354  { 0x0432, {1, {0x0412 }}},
01355  { 0x0433, {1, {0x0413 }}},
01356  { 0x0434, {1, {0x0414 }}},
01357  { 0x0435, {1, {0x0415 }}},
01358  { 0x0436, {1, {0x0416 }}},
01359  { 0x0437, {1, {0x0417 }}},
01360  { 0x0438, {1, {0x0418 }}},
01361  { 0x0439, {1, {0x0419 }}},
01362  { 0x043a, {1, {0x041a }}},
01363  { 0x043b, {1, {0x041b }}},
01364  { 0x043c, {1, {0x041c }}},
01365  { 0x043d, {1, {0x041d }}},
01366  { 0x043e, {1, {0x041e }}},
01367  { 0x043f, {1, {0x041f }}},
01368  { 0x0440, {1, {0x0420 }}},
01369  { 0x0441, {1, {0x0421 }}},
01370  { 0x0442, {1, {0x0422 }}},
01371  { 0x0443, {1, {0x0423 }}},
01372  { 0x0444, {1, {0x0424 }}},
01373  { 0x0445, {1, {0x0425 }}},
01374  { 0x0446, {1, {0x0426 }}},
01375  { 0x0447, {1, {0x0427 }}},
01376  { 0x0448, {1, {0x0428 }}},
01377  { 0x0449, {1, {0x0429 }}},
01378  { 0x044a, {1, {0x042a }}},
01379  { 0x044b, {1, {0x042b }}},
01380  { 0x044c, {1, {0x042c }}},
01381  { 0x044d, {1, {0x042d }}},
01382  { 0x044e, {1, {0x042e }}},
01383  { 0x044f, {1, {0x042f }}},
01384  { 0x0450, {1, {0x0400 }}},
01385  { 0x0451, {1, {0x0401 }}},
01386  { 0x0452, {1, {0x0402 }}},
01387  { 0x0453, {1, {0x0403 }}},
01388  { 0x0454, {1, {0x0404 }}},
01389  { 0x0455, {1, {0x0405 }}},
01390  { 0x0456, {1, {0x0406 }}},
01391  { 0x0457, {1, {0x0407 }}},
01392  { 0x0458, {1, {0x0408 }}},
01393  { 0x0459, {1, {0x0409 }}},
01394  { 0x045a, {1, {0x040a }}},
01395  { 0x045b, {1, {0x040b }}},
01396  { 0x045c, {1, {0x040c }}},
01397  { 0x045d, {1, {0x040d }}},
01398  { 0x045e, {1, {0x040e }}},
01399  { 0x045f, {1, {0x040f }}},
01400  { 0x0461, {1, {0x0460 }}},
01401  { 0x0463, {1, {0x0462 }}},
01402  { 0x0465, {1, {0x0464 }}},
01403  { 0x0467, {1, {0x0466 }}},
01404  { 0x0469, {1, {0x0468 }}},
01405  { 0x046b, {1, {0x046a }}},
01406  { 0x046d, {1, {0x046c }}},
01407  { 0x046f, {1, {0x046e }}},
01408  { 0x0471, {1, {0x0470 }}},
01409  { 0x0473, {1, {0x0472 }}},
01410  { 0x0475, {1, {0x0474 }}},
01411  { 0x0477, {1, {0x0476 }}},
01412  { 0x0479, {1, {0x0478 }}},
01413  { 0x047b, {1, {0x047a }}},
01414  { 0x047d, {1, {0x047c }}},
01415  { 0x047f, {1, {0x047e }}},
01416  { 0x0481, {1, {0x0480 }}},
01417  { 0x048b, {1, {0x048a }}},
01418  { 0x048d, {1, {0x048c }}},
01419  { 0x048f, {1, {0x048e }}},
01420  { 0x0491, {1, {0x0490 }}},
01421  { 0x0493, {1, {0x0492 }}},
01422  { 0x0495, {1, {0x0494 }}},
01423  { 0x0497, {1, {0x0496 }}},
01424  { 0x0499, {1, {0x0498 }}},
01425  { 0x049b, {1, {0x049a }}},
01426  { 0x049d, {1, {0x049c }}},
01427  { 0x049f, {1, {0x049e }}},
01428  { 0x04a1, {1, {0x04a0 }}},
01429  { 0x04a3, {1, {0x04a2 }}},
01430  { 0x04a5, {1, {0x04a4 }}},
01431  { 0x04a7, {1, {0x04a6 }}},
01432  { 0x04a9, {1, {0x04a8 }}},
01433  { 0x04ab, {1, {0x04aa }}},
01434  { 0x04ad, {1, {0x04ac }}},
01435  { 0x04af, {1, {0x04ae }}},
01436  { 0x04b1, {1, {0x04b0 }}},
01437  { 0x04b3, {1, {0x04b2 }}},
01438  { 0x04b5, {1, {0x04b4 }}},
01439  { 0x04b7, {1, {0x04b6 }}},
01440  { 0x04b9, {1, {0x04b8 }}},
01441  { 0x04bb, {1, {0x04ba }}},
01442  { 0x04bd, {1, {0x04bc }}},
01443  { 0x04bf, {1, {0x04be }}},
01444  { 0x04c2, {1, {0x04c1 }}},
01445  { 0x04c4, {1, {0x04c3 }}},
01446  { 0x04c6, {1, {0x04c5 }}},
01447  { 0x04c8, {1, {0x04c7 }}},
01448  { 0x04ca, {1, {0x04c9 }}},
01449  { 0x04cc, {1, {0x04cb }}},
01450  { 0x04ce, {1, {0x04cd }}},
01451  { 0x04d1, {1, {0x04d0 }}},
01452  { 0x04d3, {1, {0x04d2 }}},
01453  { 0x04d5, {1, {0x04d4 }}},
01454  { 0x04d7, {1, {0x04d6 }}},
01455  { 0x04d9, {1, {0x04d8 }}},
01456  { 0x04db, {1, {0x04da }}},
01457  { 0x04dd, {1, {0x04dc }}},
01458  { 0x04df, {1, {0x04de }}},
01459  { 0x04e1, {1, {0x04e0 }}},
01460  { 0x04e3, {1, {0x04e2 }}},
01461  { 0x04e5, {1, {0x04e4 }}},
01462  { 0x04e7, {1, {0x04e6 }}},
01463  { 0x04e9, {1, {0x04e8 }}},
01464  { 0x04eb, {1, {0x04ea }}},
01465  { 0x04ed, {1, {0x04ec }}},
01466  { 0x04ef, {1, {0x04ee }}},
01467  { 0x04f1, {1, {0x04f0 }}},
01468  { 0x04f3, {1, {0x04f2 }}},
01469  { 0x04f5, {1, {0x04f4 }}},
01470  { 0x04f7, {1, {0x04f6 }}},
01471  { 0x04f9, {1, {0x04f8 }}},
01472  { 0x0501, {1, {0x0500 }}},
01473  { 0x0503, {1, {0x0502 }}},
01474  { 0x0505, {1, {0x0504 }}},
01475  { 0x0507, {1, {0x0506 }}},
01476  { 0x0509, {1, {0x0508 }}},
01477  { 0x050b, {1, {0x050a }}},
01478  { 0x050d, {1, {0x050c }}},
01479  { 0x050f, {1, {0x050e }}},
01480  { 0x0561, {1, {0x0531 }}},
01481  { 0x0562, {1, {0x0532 }}},
01482  { 0x0563, {1, {0x0533 }}},
01483  { 0x0564, {1, {0x0534 }}},
01484  { 0x0565, {1, {0x0535 }}},
01485  { 0x0566, {1, {0x0536 }}},
01486  { 0x0567, {1, {0x0537 }}},
01487  { 0x0568, {1, {0x0538 }}},
01488  { 0x0569, {1, {0x0539 }}},
01489  { 0x056a, {1, {0x053a }}},
01490  { 0x056b, {1, {0x053b }}},
01491  { 0x056c, {1, {0x053c }}},
01492  { 0x056d, {1, {0x053d }}},
01493  { 0x056e, {1, {0x053e }}},
01494  { 0x056f, {1, {0x053f }}},
01495  { 0x0570, {1, {0x0540 }}},
01496  { 0x0571, {1, {0x0541 }}},
01497  { 0x0572, {1, {0x0542 }}},
01498  { 0x0573, {1, {0x0543 }}},
01499  { 0x0574, {1, {0x0544 }}},
01500  { 0x0575, {1, {0x0545 }}},
01501  { 0x0576, {1, {0x0546 }}},
01502  { 0x0577, {1, {0x0547 }}},
01503  { 0x0578, {1, {0x0548 }}},
01504  { 0x0579, {1, {0x0549 }}},
01505  { 0x057a, {1, {0x054a }}},
01506  { 0x057b, {1, {0x054b }}},
01507  { 0x057c, {1, {0x054c }}},
01508  { 0x057d, {1, {0x054d }}},
01509  { 0x057e, {1, {0x054e }}},
01510  { 0x057f, {1, {0x054f }}},
01511  { 0x0580, {1, {0x0550 }}},
01512  { 0x0581, {1, {0x0551 }}},
01513  { 0x0582, {1, {0x0552 }}},
01514  { 0x0583, {1, {0x0553 }}},
01515  { 0x0584, {1, {0x0554 }}},
01516  { 0x0585, {1, {0x0555 }}},
01517  { 0x0586, {1, {0x0556 }}},
01518  { 0x1e01, {1, {0x1e00 }}},
01519  { 0x1e03, {1, {0x1e02 }}},
01520  { 0x1e05, {1, {0x1e04 }}},
01521  { 0x1e07, {1, {0x1e06 }}},
01522  { 0x1e09, {1, {0x1e08 }}},
01523  { 0x1e0b, {1, {0x1e0a }}},
01524  { 0x1e0d, {1, {0x1e0c }}},
01525  { 0x1e0f, {1, {0x1e0e }}},
01526  { 0x1e11, {1, {0x1e10 }}},
01527  { 0x1e13, {1, {0x1e12 }}},
01528  { 0x1e15, {1, {0x1e14 }}},
01529  { 0x1e17, {1, {0x1e16 }}},
01530  { 0x1e19, {1, {0x1e18 }}},
01531  { 0x1e1b, {1, {0x1e1a }}},
01532  { 0x1e1d, {1, {0x1e1c }}},
01533  { 0x1e1f, {1, {0x1e1e }}},
01534  { 0x1e21, {1, {0x1e20 }}},
01535  { 0x1e23, {1, {0x1e22 }}},
01536  { 0x1e25, {1, {0x1e24 }}},
01537  { 0x1e27, {1, {0x1e26 }}},
01538  { 0x1e29, {1, {0x1e28 }}},
01539  { 0x1e2b, {1, {0x1e2a }}},
01540  { 0x1e2d, {1, {0x1e2c }}},
01541  { 0x1e2f, {1, {0x1e2e }}},
01542  { 0x1e31, {1, {0x1e30 }}},
01543  { 0x1e33, {1, {0x1e32 }}},
01544  { 0x1e35, {1, {0x1e34 }}},
01545  { 0x1e37, {1, {0x1e36 }}},
01546  { 0x1e39, {1, {0x1e38 }}},
01547  { 0x1e3b, {1, {0x1e3a }}},
01548  { 0x1e3d, {1, {0x1e3c }}},
01549  { 0x1e3f, {1, {0x1e3e }}},
01550  { 0x1e41, {1, {0x1e40 }}},
01551  { 0x1e43, {1, {0x1e42 }}},
01552  { 0x1e45, {1, {0x1e44 }}},
01553  { 0x1e47, {1, {0x1e46 }}},
01554  { 0x1e49, {1, {0x1e48 }}},
01555  { 0x1e4b, {1, {0x1e4a }}},
01556  { 0x1e4d, {1, {0x1e4c }}},
01557  { 0x1e4f, {1, {0x1e4e }}},
01558  { 0x1e51, {1, {0x1e50 }}},
01559  { 0x1e53, {1, {0x1e52 }}},
01560  { 0x1e55, {1, {0x1e54 }}},
01561  { 0x1e57, {1, {0x1e56 }}},
01562  { 0x1e59, {1, {0x1e58 }}},
01563  { 0x1e5b, {1, {0x1e5a }}},
01564  { 0x1e5d, {1, {0x1e5c }}},
01565  { 0x1e5f, {1, {0x1e5e }}},
01566  { 0x1e61, {2, {0x1e9b, 0x1e60 }}},
01567  { 0x1e63, {1, {0x1e62 }}},
01568  { 0x1e65, {1, {0x1e64 }}},
01569  { 0x1e67, {1, {0x1e66 }}},
01570  { 0x1e69, {1, {0x1e68 }}},
01571  { 0x1e6b, {1, {0x1e6a }}},
01572  { 0x1e6d, {1, {0x1e6c }}},
01573  { 0x1e6f, {1, {0x1e6e }}},
01574  { 0x1e71, {1, {0x1e70 }}},
01575  { 0x1e73, {1, {0x1e72 }}},
01576  { 0x1e75, {1, {0x1e74 }}},
01577  { 0x1e77, {1, {0x1e76 }}},
01578  { 0x1e79, {1, {0x1e78 }}},
01579  { 0x1e7b, {1, {0x1e7a }}},
01580  { 0x1e7d, {1, {0x1e7c }}},
01581  { 0x1e7f, {1, {0x1e7e }}},
01582  { 0x1e81, {1, {0x1e80 }}},
01583  { 0x1e83, {1, {0x1e82 }}},
01584  { 0x1e85, {1, {0x1e84 }}},
01585  { 0x1e87, {1, {0x1e86 }}},
01586  { 0x1e89, {1, {0x1e88 }}},
01587  { 0x1e8b, {1, {0x1e8a }}},
01588  { 0x1e8d, {1, {0x1e8c }}},
01589  { 0x1e8f, {1, {0x1e8e }}},
01590  { 0x1e91, {1, {0x1e90 }}},
01591  { 0x1e93, {1, {0x1e92 }}},
01592  { 0x1e95, {1, {0x1e94 }}},
01593  { 0x1ea1, {1, {0x1ea0 }}},
01594  { 0x1ea3, {1, {0x1ea2 }}},
01595  { 0x1ea5, {1, {0x1ea4 }}},
01596  { 0x1ea7, {1, {0x1ea6 }}},
01597  { 0x1ea9, {1, {0x1ea8 }}},
01598  { 0x1eab, {1, {0x1eaa }}},
01599  { 0x1ead, {1, {0x1eac }}},
01600  { 0x1eaf, {1, {0x1eae }}},
01601  { 0x1eb1, {1, {0x1eb0 }}},
01602  { 0x1eb3, {1, {0x1eb2 }}},
01603  { 0x1eb5, {1, {0x1eb4 }}},
01604  { 0x1eb7, {1, {0x1eb6 }}},
01605  { 0x1eb9, {1, {0x1eb8 }}},
01606  { 0x1ebb, {1, {0x1eba }}},
01607  { 0x1ebd, {1, {0x1ebc }}},
01608  { 0x1ebf, {1, {0x1ebe }}},
01609  { 0x1ec1, {1, {0x1ec0 }}},
01610  { 0x1ec3, {1, {0x1ec2 }}},
01611  { 0x1ec5, {1, {0x1ec4 }}},
01612  { 0x1ec7, {1, {0x1ec6 }}},
01613  { 0x1ec9, {1, {0x1ec8 }}},
01614  { 0x1ecb, {1, {0x1eca }}},
01615  { 0x1ecd, {1, {0x1ecc }}},
01616  { 0x1ecf, {1, {0x1ece }}},
01617  { 0x1ed1, {1, {0x1ed0 }}},
01618  { 0x1ed3, {1, {0x1ed2 }}},
01619  { 0x1ed5, {1, {0x1ed4 }}},
01620  { 0x1ed7, {1, {0x1ed6 }}},
01621  { 0x1ed9, {1, {0x1ed8 }}},
01622  { 0x1edb, {1, {0x1eda }}},
01623  { 0x1edd, {1, {0x1edc }}},
01624  { 0x1edf, {1, {0x1ede }}},
01625  { 0x1ee1, {1, {0x1ee0 }}},
01626  { 0x1ee3, {1, {0x1ee2 }}},
01627  { 0x1ee5, {1, {0x1ee4 }}},
01628  { 0x1ee7, {1, {0x1ee6 }}},
01629  { 0x1ee9, {1, {0x1ee8 }}},
01630  { 0x1eeb, {1, {0x1eea }}},
01631  { 0x1eed, {1, {0x1eec }}},
01632  { 0x1eef, {1, {0x1eee }}},
01633  { 0x1ef1, {1, {0x1ef0 }}},
01634  { 0x1ef3, {1, {0x1ef2 }}},
01635  { 0x1ef5, {1, {0x1ef4 }}},
01636  { 0x1ef7, {1, {0x1ef6 }}},
01637  { 0x1ef9, {1, {0x1ef8 }}},
01638  { 0x1f00, {1, {0x1f08 }}},
01639  { 0x1f01, {1, {0x1f09 }}},
01640  { 0x1f02, {1, {0x1f0a }}},
01641  { 0x1f03, {1, {0x1f0b }}},
01642  { 0x1f04, {1, {0x1f0c }}},
01643  { 0x1f05, {1, {0x1f0d }}},
01644  { 0x1f06, {1, {0x1f0e }}},
01645  { 0x1f07, {1, {0x1f0f }}},
01646  { 0x1f10, {1, {0x1f18 }}},
01647  { 0x1f11, {1, {0x1f19 }}},
01648  { 0x1f12, {1, {0x1f1a }}},
01649  { 0x1f13, {1, {0x1f1b }}},
01650  { 0x1f14, {1, {0x1f1c }}},
01651  { 0x1f15, {1, {0x1f1d }}},
01652  { 0x1f20, {1, {0x1f28 }}},
01653  { 0x1f21, {1, {0x1f29 }}},
01654  { 0x1f22, {1, {0x1f2a }}},
01655  { 0x1f23, {1, {0x1f2b }}},
01656  { 0x1f24, {1, {0x1f2c }}},
01657  { 0x1f25, {1, {0x1f2d }}},
01658  { 0x1f26, {1, {0x1f2e }}},
01659  { 0x1f27, {1, {0x1f2f }}},
01660  { 0x1f30, {1, {0x1f38 }}},
01661  { 0x1f31, {1, {0x1f39 }}},
01662  { 0x1f32, {1, {0x1f3a }}},
01663  { 0x1f33, {1, {0x1f3b }}},
01664  { 0x1f34, {1, {0x1f3c }}},
01665  { 0x1f35, {1, {0x1f3d }}},
01666  { 0x1f36, {1, {0x1f3e }}},
01667  { 0x1f37, {1, {0x1f3f }}},
01668  { 0x1f40, {1, {0x1f48 }}},
01669  { 0x1f41, {1, {0x1f49 }}},
01670  { 0x1f42, {1, {0x1f4a }}},
01671  { 0x1f43, {1, {0x1f4b }}},
01672  { 0x1f44, {1, {0x1f4c }}},
01673  { 0x1f45, {1, {0x1f4d }}},
01674  { 0x1f51, {1, {0x1f59 }}},
01675  { 0x1f53, {1, {0x1f5b }}},
01676  { 0x1f55, {1, {0x1f5d }}},
01677  { 0x1f57, {1, {0x1f5f }}},
01678  { 0x1f60, {1, {0x1f68 }}},
01679  { 0x1f61, {1, {0x1f69 }}},
01680  { 0x1f62, {1, {0x1f6a }}},
01681  { 0x1f63, {1, {0x1f6b }}},
01682  { 0x1f64, {1, {0x1f6c }}},
01683  { 0x1f65, {1, {0x1f6d }}},
01684  { 0x1f66, {1, {0x1f6e }}},
01685  { 0x1f67, {1, {0x1f6f }}},
01686  { 0x1f70, {1, {0x1fba }}},
01687  { 0x1f71, {1, {0x1fbb }}},
01688  { 0x1f72, {1, {0x1fc8 }}},
01689  { 0x1f73, {1, {0x1fc9 }}},
01690  { 0x1f74, {1, {0x1fca }}},
01691  { 0x1f75, {1, {0x1fcb }}},
01692  { 0x1f76, {1, {0x1fda }}},
01693  { 0x1f77, {1, {0x1fdb }}},
01694  { 0x1f78, {1, {0x1ff8 }}},
01695  { 0x1f79, {1, {0x1ff9 }}},
01696  { 0x1f7a, {1, {0x1fea }}},
01697  { 0x1f7b, {1, {0x1feb }}},
01698  { 0x1f7c, {1, {0x1ffa }}},
01699  { 0x1f7d, {1, {0x1ffb }}},
01700  { 0x1fb0, {1, {0x1fb8 }}},
01701  { 0x1fb1, {1, {0x1fb9 }}},
01702  { 0x1fd0, {1, {0x1fd8 }}},
01703  { 0x1fd1, {1, {0x1fd9 }}},
01704  { 0x1fe0, {1, {0x1fe8 }}},
01705  { 0x1fe1, {1, {0x1fe9 }}},
01706  { 0x1fe5, {1, {0x1fec }}},
01707  { 0x2170, {1, {0x2160 }}},
01708  { 0x2171, {1, {0x2161 }}},
01709  { 0x2172, {1, {0x2162 }}},
01710  { 0x2173, {1, {0x2163 }}},
01711  { 0x2174, {1, {0x2164 }}},
01712  { 0x2175, {1, {0x2165 }}},
01713  { 0x2176, {1, {0x2166 }}},
01714  { 0x2177, {1, {0x2167 }}},
01715  { 0x2178, {1, {0x2168 }}},
01716  { 0x2179, {1, {0x2169 }}},
01717  { 0x217a, {1, {0x216a }}},
01718  { 0x217b, {1, {0x216b }}},
01719  { 0x217c, {1, {0x216c }}},
01720  { 0x217d, {1, {0x216d }}},
01721  { 0x217e, {1, {0x216e }}},
01722  { 0x217f, {1, {0x216f }}},
01723  { 0x24d0, {1, {0x24b6 }}},
01724  { 0x24d1, {1, {0x24b7 }}},
01725  { 0x24d2, {1, {0x24b8 }}},
01726  { 0x24d3, {1, {0x24b9 }}},
01727  { 0x24d4, {1, {0x24ba }}},
01728  { 0x24d5, {1, {0x24bb }}},
01729  { 0x24d6, {1, {0x24bc }}},
01730  { 0x24d7, {1, {0x24bd }}},
01731  { 0x24d8, {1, {0x24be }}},
01732  { 0x24d9, {1, {0x24bf }}},
01733  { 0x24da, {1, {0x24c0 }}},
01734  { 0x24db, {1, {0x24c1 }}},
01735  { 0x24dc, {1, {0x24c2 }}},
01736  { 0x24dd, {1, {0x24c3 }}},
01737  { 0x24de, {1, {0x24c4 }}},
01738  { 0x24df, {1, {0x24c5 }}},
01739  { 0x24e0, {1, {0x24c6 }}},
01740  { 0x24e1, {1, {0x24c7 }}},
01741  { 0x24e2, {1, {0x24c8 }}},
01742  { 0x24e3, {1, {0x24c9 }}},
01743  { 0x24e4, {1, {0x24ca }}},
01744  { 0x24e5, {1, {0x24cb }}},
01745  { 0x24e6, {1, {0x24cc }}},
01746  { 0x24e7, {1, {0x24cd }}},
01747  { 0x24e8, {1, {0x24ce }}},
01748  { 0x24e9, {1, {0x24cf }}},
01749  { 0x2c30, {1, {0x2c00 }}},
01750  { 0x2c31, {1, {0x2c01 }}},
01751  { 0x2c32, {1, {0x2c02 }}},
01752  { 0x2c33, {1, {0x2c03 }}},
01753  { 0x2c34, {1, {0x2c04 }}},
01754  { 0x2c35, {1, {0x2c05 }}},
01755  { 0x2c36, {1, {0x2c06 }}},
01756  { 0x2c37, {1, {0x2c07 }}},
01757  { 0x2c38, {1, {0x2c08 }}},
01758  { 0x2c39, {1, {0x2c09 }}},
01759  { 0x2c3a, {1, {0x2c0a }}},
01760  { 0x2c3b, {1, {0x2c0b }}},
01761  { 0x2c3c, {1, {0x2c0c }}},
01762  { 0x2c3d, {1, {0x2c0d }}},
01763  { 0x2c3e, {1, {0x2c0e }}},
01764  { 0x2c3f, {1, {0x2c0f }}},
01765  { 0x2c40, {1, {0x2c10 }}},
01766  { 0x2c41, {1, {0x2c11 }}},
01767  { 0x2c42, {1, {0x2c12 }}},
01768  { 0x2c43, {1, {0x2c13 }}},
01769  { 0x2c44, {1, {0x2c14 }}},
01770  { 0x2c45, {1, {0x2c15 }}},
01771  { 0x2c46, {1, {0x2c16 }}},
01772  { 0x2c47, {1, {0x2c17 }}},
01773  { 0x2c48, {1, {0x2c18 }}},
01774  { 0x2c49, {1, {0x2c19 }}},
01775  { 0x2c4a, {1, {0x2c1a }}},
01776  { 0x2c4b, {1, {0x2c1b }}},
01777  { 0x2c4c, {1, {0x2c1c }}},
01778  { 0x2c4d, {1, {0x2c1d }}},
01779  { 0x2c4e, {1, {0x2c1e }}},
01780  { 0x2c4f, {1, {0x2c1f }}},
01781  { 0x2c50, {1, {0x2c20 }}},
01782  { 0x2c51, {1, {0x2c21 }}},
01783  { 0x2c52, {1, {0x2c22 }}},
01784  { 0x2c53, {1, {0x2c23 }}},
01785  { 0x2c54, {1, {0x2c24 }}},
01786  { 0x2c55, {1, {0x2c25 }}},
01787  { 0x2c56, {1, {0x2c26 }}},
01788  { 0x2c57, {1, {0x2c27 }}},
01789  { 0x2c58, {1, {0x2c28 }}},
01790  { 0x2c59, {1, {0x2c29 }}},
01791  { 0x2c5a, {1, {0x2c2a }}},
01792  { 0x2c5b, {1, {0x2c2b }}},
01793  { 0x2c5c, {1, {0x2c2c }}},
01794  { 0x2c5d, {1, {0x2c2d }}},
01795  { 0x2c5e, {1, {0x2c2e }}},
01796  { 0x2c81, {1, {0x2c80 }}},
01797  { 0x2c83, {1, {0x2c82 }}},
01798  { 0x2c85, {1, {0x2c84 }}},
01799  { 0x2c87, {1, {0x2c86 }}},
01800  { 0x2c89, {1, {0x2c88 }}},
01801  { 0x2c8b, {1, {0x2c8a }}},
01802  { 0x2c8d, {1, {0x2c8c }}},
01803  { 0x2c8f, {1, {0x2c8e }}},
01804  { 0x2c91, {1, {0x2c90 }}},
01805  { 0x2c93, {1, {0x2c92 }}},
01806  { 0x2c95, {1, {0x2c94 }}},
01807  { 0x2c97, {1, {0x2c96 }}},
01808  { 0x2c99, {1, {0x2c98 }}},
01809  { 0x2c9b, {1, {0x2c9a }}},
01810  { 0x2c9d, {1, {0x2c9c }}},
01811  { 0x2c9f, {1, {0x2c9e }}},
01812  { 0x2ca1, {1, {0x2ca0 }}},
01813  { 0x2ca3, {1, {0x2ca2 }}},
01814  { 0x2ca5, {1, {0x2ca4 }}},
01815  { 0x2ca7, {1, {0x2ca6 }}},
01816  { 0x2ca9, {1, {0x2ca8 }}},
01817  { 0x2cab, {1, {0x2caa }}},
01818  { 0x2cad, {1, {0x2cac }}},
01819  { 0x2caf, {1, {0x2cae }}},
01820  { 0x2cb1, {1, {0x2cb0 }}},
01821  { 0x2cb3, {1, {0x2cb2 }}},
01822  { 0x2cb5, {1, {0x2cb4 }}},
01823  { 0x2cb7, {1, {0x2cb6 }}},
01824  { 0x2cb9, {1, {0x2cb8 }}},
01825  { 0x2cbb, {1, {0x2cba }}},
01826  { 0x2cbd, {1, {0x2cbc }}},
01827  { 0x2cbf, {1, {0x2cbe }}},
01828  { 0x2cc1, {1, {0x2cc0 }}},
01829  { 0x2cc3, {1, {0x2cc2 }}},
01830  { 0x2cc5, {1, {0x2cc4 }}},
01831  { 0x2cc7, {1, {0x2cc6 }}},
01832  { 0x2cc9, {1, {0x2cc8 }}},
01833  { 0x2ccb, {1, {0x2cca }}},
01834  { 0x2ccd, {1, {0x2ccc }}},
01835  { 0x2ccf, {1, {0x2cce }}},
01836  { 0x2cd1, {1, {0x2cd0 }}},
01837  { 0x2cd3, {1, {0x2cd2 }}},
01838  { 0x2cd5, {1, {0x2cd4 }}},
01839  { 0x2cd7, {1, {0x2cd6 }}},
01840  { 0x2cd9, {1, {0x2cd8 }}},
01841  { 0x2cdb, {1, {0x2cda }}},
01842  { 0x2cdd, {1, {0x2cdc }}},
01843  { 0x2cdf, {1, {0x2cde }}},
01844  { 0x2ce1, {1, {0x2ce0 }}},
01845  { 0x2ce3, {1, {0x2ce2 }}},
01846  { 0x2d00, {1, {0x10a0 }}},
01847  { 0x2d01, {1, {0x10a1 }}},
01848  { 0x2d02, {1, {0x10a2 }}},
01849  { 0x2d03, {1, {0x10a3 }}},
01850  { 0x2d04, {1, {0x10a4 }}},
01851  { 0x2d05, {1, {0x10a5 }}},
01852  { 0x2d06, {1, {0x10a6 }}},
01853  { 0x2d07, {1, {0x10a7 }}},
01854  { 0x2d08, {1, {0x10a8 }}},
01855  { 0x2d09, {1, {0x10a9 }}},
01856  { 0x2d0a, {1, {0x10aa }}},
01857  { 0x2d0b, {1, {0x10ab }}},
01858  { 0x2d0c, {1, {0x10ac }}},
01859  { 0x2d0d, {1, {0x10ad }}},
01860  { 0x2d0e, {1, {0x10ae }}},
01861  { 0x2d0f, {1, {0x10af }}},
01862  { 0x2d10, {1, {0x10b0 }}},
01863  { 0x2d11, {1, {0x10b1 }}},
01864  { 0x2d12, {1, {0x10b2 }}},
01865  { 0x2d13, {1, {0x10b3 }}},
01866  { 0x2d14, {1, {0x10b4 }}},
01867  { 0x2d15, {1, {0x10b5 }}},
01868  { 0x2d16, {1, {0x10b6 }}},
01869  { 0x2d17, {1, {0x10b7 }}},
01870  { 0x2d18, {1, {0x10b8 }}},
01871  { 0x2d19, {1, {0x10b9 }}},
01872  { 0x2d1a, {1, {0x10ba }}},
01873  { 0x2d1b, {1, {0x10bb }}},
01874  { 0x2d1c, {1, {0x10bc }}},
01875  { 0x2d1d, {1, {0x10bd }}},
01876  { 0x2d1e, {1, {0x10be }}},
01877  { 0x2d1f, {1, {0x10bf }}},
01878  { 0x2d20, {1, {0x10c0 }}},
01879  { 0x2d21, {1, {0x10c1 }}},
01880  { 0x2d22, {1, {0x10c2 }}},
01881  { 0x2d23, {1, {0x10c3 }}},
01882  { 0x2d24, {1, {0x10c4 }}},
01883  { 0x2d25, {1, {0x10c5 }}},
01884  { 0xff41, {1, {0xff21 }}},
01885  { 0xff42, {1, {0xff22 }}},
01886  { 0xff43, {1, {0xff23 }}},
01887  { 0xff44, {1, {0xff24 }}},
01888  { 0xff45, {1, {0xff25 }}},
01889  { 0xff46, {1, {0xff26 }}},
01890  { 0xff47, {1, {0xff27 }}},
01891  { 0xff48, {1, {0xff28 }}},
01892  { 0xff49, {1, {0xff29 }}},
01893  { 0xff4a, {1, {0xff2a }}},
01894  { 0xff4b, {1, {0xff2b }}},
01895  { 0xff4c, {1, {0xff2c }}},
01896  { 0xff4d, {1, {0xff2d }}},
01897  { 0xff4e, {1, {0xff2e }}},
01898  { 0xff4f, {1, {0xff2f }}},
01899  { 0xff50, {1, {0xff30 }}},
01900  { 0xff51, {1, {0xff31 }}},
01901  { 0xff52, {1, {0xff32 }}},
01902  { 0xff53, {1, {0xff33 }}},
01903  { 0xff54, {1, {0xff34 }}},
01904  { 0xff55, {1, {0xff35 }}},
01905  { 0xff56, {1, {0xff36 }}},
01906  { 0xff57, {1, {0xff37 }}},
01907  { 0xff58, {1, {0xff38 }}},
01908  { 0xff59, {1, {0xff39 }}},
01909  { 0xff5a, {1, {0xff3a }}},
01910  { 0x10428, {1, {0x10400 }}},
01911  { 0x10429, {1, {0x10401 }}},
01912  { 0x1042a, {1, {0x10402 }}},
01913  { 0x1042b, {1, {0x10403 }}},
01914  { 0x1042c, {1, {0x10404 }}},
01915  { 0x1042d, {1, {0x10405 }}},
01916  { 0x1042e, {1, {0x10406 }}},
01917  { 0x1042f, {1, {0x10407 }}},
01918  { 0x10430, {1, {0x10408 }}},
01919  { 0x10431, {1, {0x10409 }}},
01920  { 0x10432, {1, {0x1040a }}},
01921  { 0x10433, {1, {0x1040b }}},
01922  { 0x10434, {1, {0x1040c }}},
01923  { 0x10435, {1, {0x1040d }}},
01924  { 0x10436, {1, {0x1040e }}},
01925  { 0x10437, {1, {0x1040f }}},
01926  { 0x10438, {1, {0x10410 }}},
01927  { 0x10439, {1, {0x10411 }}},
01928  { 0x1043a, {1, {0x10412 }}},
01929  { 0x1043b, {1, {0x10413 }}},
01930  { 0x1043c, {1, {0x10414 }}},
01931  { 0x1043d, {1, {0x10415 }}},
01932  { 0x1043e, {1, {0x10416 }}},
01933  { 0x1043f, {1, {0x10417 }}},
01934  { 0x10440, {1, {0x10418 }}},
01935  { 0x10441, {1, {0x10419 }}},
01936  { 0x10442, {1, {0x1041a }}},
01937  { 0x10443, {1, {0x1041b }}},
01938  { 0x10444, {1, {0x1041c }}},
01939  { 0x10445, {1, {0x1041d }}},
01940  { 0x10446, {1, {0x1041e }}},
01941  { 0x10447, {1, {0x1041f }}},
01942  { 0x10448, {1, {0x10420 }}},
01943  { 0x10449, {1, {0x10421 }}},
01944  { 0x1044a, {1, {0x10422 }}},
01945  { 0x1044b, {1, {0x10423 }}},
01946  { 0x1044c, {1, {0x10424 }}},
01947  { 0x1044d, {1, {0x10425 }}},
01948  { 0x1044e, {1, {0x10426 }}},
01949  { 0x1044f, {1, {0x10427 }}}
01950 };
01951 
01952 static const CaseUnfold_11_Type CaseUnfold_11_Locale[] = {
01953  { 0x0069, {1, {0x0049 }}}
01954 };
01955 
01956 static const CaseUnfold_12_Type CaseUnfold_12[] = {
01957  { {0x0061, 0x02be}, {1, {0x1e9a }}},
01958  { {0x0066, 0x0066}, {1, {0xfb00 }}},
01959  { {0x0066, 0x0069}, {1, {0xfb01 }}},
01960  { {0x0066, 0x006c}, {1, {0xfb02 }}},
01961  { {0x0068, 0x0331}, {1, {0x1e96 }}},
01962  { {0x006a, 0x030c}, {1, {0x01f0 }}},
01963  { {0x0073, 0x0073}, {1, {0x00df }}},
01964  { {0x0073, 0x0074}, {2, {0xfb05, 0xfb06 }}},
01965  { {0x0074, 0x0308}, {1, {0x1e97 }}},
01966  { {0x0077, 0x030a}, {1, {0x1e98 }}},
01967  { {0x0079, 0x030a}, {1, {0x1e99 }}},
01968  { {0x02bc, 0x006e}, {1, {0x0149 }}},
01969  { {0x03ac, 0x03b9}, {1, {0x1fb4 }}},
01970  { {0x03ae, 0x03b9}, {1, {0x1fc4 }}},
01971  { {0x03b1, 0x0342}, {1, {0x1fb6 }}},
01972  { {0x03b1, 0x03b9}, {2, {0x1fb3, 0x1fbc }}},
01973  { {0x03b7, 0x0342}, {1, {0x1fc6 }}},
01974  { {0x03b7, 0x03b9}, {2, {0x1fc3, 0x1fcc }}},
01975  { {0x03b9, 0x0342}, {1, {0x1fd6 }}},
01976  { {0x03c1, 0x0313}, {1, {0x1fe4 }}},
01977  { {0x03c5, 0x0313}, {1, {0x1f50 }}},
01978  { {0x03c5, 0x0342}, {1, {0x1fe6 }}},
01979  { {0x03c9, 0x0342}, {1, {0x1ff6 }}},
01980  { {0x03c9, 0x03b9}, {2, {0x1ff3, 0x1ffc }}},
01981  { {0x03ce, 0x03b9}, {1, {0x1ff4 }}},
01982  { {0x0565, 0x0582}, {1, {0x0587 }}},
01983  { {0x0574, 0x0565}, {1, {0xfb14 }}},
01984  { {0x0574, 0x056b}, {1, {0xfb15 }}},
01985  { {0x0574, 0x056d}, {1, {0xfb17 }}},
01986  { {0x0574, 0x0576}, {1, {0xfb13 }}},
01987  { {0x057e, 0x0576}, {1, {0xfb16 }}},
01988  { {0x1f00, 0x03b9}, {2, {0x1f88, 0x1f80 }}},
01989  { {0x1f01, 0x03b9}, {2, {0x1f81, 0x1f89 }}},
01990  { {0x1f02, 0x03b9}, {2, {0x1f82, 0x1f8a }}},
01991  { {0x1f03, 0x03b9}, {2, {0x1f83, 0x1f8b }}},
01992  { {0x1f04, 0x03b9}, {2, {0x1f84, 0x1f8c }}},
01993  { {0x1f05, 0x03b9}, {2, {0x1f85, 0x1f8d }}},
01994  { {0x1f06, 0x03b9}, {2, {0x1f86, 0x1f8e }}},
01995  { {0x1f07, 0x03b9}, {2, {0x1f87, 0x1f8f }}},
01996  { {0x1f20, 0x03b9}, {2, {0x1f90, 0x1f98 }}},
01997  { {0x1f21, 0x03b9}, {2, {0x1f91, 0x1f99 }}},
01998  { {0x1f22, 0x03b9}, {2, {0x1f92, 0x1f9a }}},
01999  { {0x1f23, 0x03b9}, {2, {0x1f93, 0x1f9b }}},
02000  { {0x1f24, 0x03b9}, {2, {0x1f94, 0x1f9c }}},
02001  { {0x1f25, 0x03b9}, {2, {0x1f95, 0x1f9d }}},
02002  { {0x1f26, 0x03b9}, {2, {0x1f96, 0x1f9e }}},
02003  { {0x1f27, 0x03b9}, {2, {0x1f97, 0x1f9f }}},
02004  { {0x1f60, 0x03b9}, {2, {0x1fa0, 0x1fa8 }}},
02005  { {0x1f61, 0x03b9}, {2, {0x1fa1, 0x1fa9 }}},
02006  { {0x1f62, 0x03b9}, {2, {0x1fa2, 0x1faa }}},
02007  { {0x1f63, 0x03b9}, {2, {0x1fa3, 0x1fab }}},
02008  { {0x1f64, 0x03b9}, {2, {0x1fa4, 0x1fac }}},
02009  { {0x1f65, 0x03b9}, {2, {0x1fa5, 0x1fad }}},
02010  { {0x1f66, 0x03b9}, {2, {0x1fa6, 0x1fae }}},
02011  { {0x1f67, 0x03b9}, {2, {0x1fa7, 0x1faf }}},
02012  { {0x1f70, 0x03b9}, {1, {0x1fb2 }}},
02013  { {0x1f74, 0x03b9}, {1, {0x1fc2 }}},
02014  { {0x1f7c, 0x03b9}, {1, {0x1ff2 }}}
02015 };
02016 
02017 static const CaseUnfold_12_Type CaseUnfold_12_Locale[] = {
02018  { {0x0069, 0x0307}, {1, {0x0130 }}}
02019 };
02020 
02021 static const CaseUnfold_13_Type CaseUnfold_13[] = {
02022  { {0x0066, 0x0066, 0x0069}, {1, {0xfb03 }}},
02023  { {0x0066, 0x0066, 0x006c}, {1, {0xfb04 }}},
02024  { {0x03b1, 0x0342, 0x03b9}, {1, {0x1fb7 }}},
02025  { {0x03b7, 0x0342, 0x03b9}, {1, {0x1fc7 }}},
02026  { {0x03b9, 0x0308, 0x0300}, {1, {0x1fd2 }}},
02027  { {0x03b9, 0x0308, 0x0301}, {2, {0x0390, 0x1fd3 }}},
02028  { {0x03b9, 0x0308, 0x0342}, {1, {0x1fd7 }}},
02029  { {0x03c5, 0x0308, 0x0300}, {1, {0x1fe2 }}},
02030  { {0x03c5, 0x0308, 0x0301}, {2, {0x03b0, 0x1fe3 }}},
02031  { {0x03c5, 0x0308, 0x0342}, {1, {0x1fe7 }}},
02032  { {0x03c5, 0x0313, 0x0300}, {1, {0x1f52 }}},
02033  { {0x03c5, 0x0313, 0x0301}, {1, {0x1f54 }}},
02034  { {0x03c5, 0x0313, 0x0342}, {1, {0x1f56 }}},
02035  { {0x03c9, 0x0342, 0x03b9}, {1, {0x1ff7 }}}
02036 };
02037 
02038 #define numberof(array) (int)(sizeof(array) / sizeof((array)[0]))
02039 #define CODE_RANGES_NUM numberof(CodeRanges)
02040 
02041 extern int
02042 onigenc_unicode_is_code_ctype(OnigCodePoint code, unsigned int ctype, OnigEncoding enc ARG_UNUSED)
02043 {
02044   if (
02045 #ifdef USE_UNICODE_PROPERTIES
02046       ctype <= ONIGENC_MAX_STD_CTYPE &&
02047 #endif
02048       code < 256) {
02049     return ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(code, ctype);
02050   }
02051 
02052   if (ctype >= CODE_RANGES_NUM) {
02053     return ONIGERR_TYPE_BUG;
02054   }
02055 
02056   return onig_is_in_code_range((UChar* )CodeRanges[ctype], code);
02057 }
02058 
02059 
02060 extern int
02061 onigenc_unicode_ctype_code_range(int ctype, const OnigCodePoint* ranges[])
02062 {
02063   if (ctype >= CODE_RANGES_NUM) {
02064     return ONIGERR_TYPE_BUG;
02065   }
02066 
02067   *ranges = CodeRanges[ctype];
02068 
02069   return 0;
02070 }
02071 
02072 extern int
02073 onigenc_utf16_32_get_ctype_code_range(OnigCtype ctype, OnigCodePoint* sb_out,
02074                                       const OnigCodePoint* ranges[],
02075                                       struct OnigEncodingTypeST* enc ARG_UNUSED)
02076 {
02077   *sb_out = 0x00;
02078   return onigenc_unicode_ctype_code_range(ctype, ranges);
02079 }
02080 
02081 #include "ruby/st.h"
02082 
02083 #define PROPERTY_NAME_MAX_SIZE    MAX_WORD_LENGTH
02084 
02085 extern int
02086 onigenc_unicode_property_name_to_ctype(OnigEncoding enc, UChar* name, UChar* end)
02087 {
02088   int len;
02089   int ctype;
02090   UChar buf[PROPERTY_NAME_MAX_SIZE];
02091   UChar *p;
02092   OnigCodePoint code;
02093 
02094   len = 0;
02095   for (p = name; p < end; p += enclen(enc, p, end)) {
02096     code = ONIGENC_MBC_TO_CODE(enc, p, end);
02097     if (code == ' ' || code == '-' || code == '_')
02098       continue;
02099     if (code >= 0x80)
02100       return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
02101 
02102     buf[len++] = (UChar )TOLOWER((unsigned char)code);
02103     if (len >= PROPERTY_NAME_MAX_SIZE)
02104       return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
02105   }
02106 
02107   buf[len] = 0;
02108 
02109   if ((ctype = uniname2ctype(buf, len)) < 0) {
02110     return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
02111   }
02112 
02113   return ctype;
02114 }
02115 
02116 
02117 static int
02118 code2_cmp(OnigCodePoint* x, OnigCodePoint* y)
02119 {
02120   if (x[0] == y[0] && x[1] == y[1]) return 0;
02121   return 1;
02122 }
02123 
02124 static st_index_t
02125 code2_hash(OnigCodePoint* x)
02126 {
02127   return (st_index_t )(x[0] + x[1]);
02128 }
02129 
02130 static const struct st_hash_type type_code2_hash = {
02131   code2_cmp,
02132   code2_hash,
02133 };
02134 
02135 static int
02136 code3_cmp(OnigCodePoint* x, OnigCodePoint* y)
02137 {
02138   if (x[0] == y[0] && x[1] == y[1] && x[2] == y[2]) return 0;
02139   return 1;
02140 }
02141 
02142 static st_index_t
02143 code3_hash(OnigCodePoint* x)
02144 {
02145   return (st_index_t )(x[0] + x[1] + x[2]);
02146 }
02147 
02148 static const struct st_hash_type type_code3_hash = {
02149   code3_cmp,
02150   code3_hash,
02151 };
02152 
02153 
02154 static st_table* FoldTable;    /* fold-1, fold-2, fold-3 */
02155 static st_table* Unfold1Table;
02156 static st_table* Unfold2Table;
02157 static st_table* Unfold3Table;
02158 static int CaseFoldInited = 0;
02159 
02160 static int init_case_fold_table(void)
02161 {
02162   const CaseFold_11_Type   *p;
02163   const CaseUnfold_11_Type *p1;
02164   const CaseUnfold_12_Type *p2;
02165   const CaseUnfold_13_Type *p3;
02166   int i;
02167 
02168   THREAD_ATOMIC_START;
02169 
02170   FoldTable = st_init_numtable_with_size(1200);
02171   if (ONIG_IS_NULL(FoldTable)) return ONIGERR_MEMORY;
02172   for (i = 0; i < numberof(CaseFold); i++) {
02173     p = &CaseFold[i];
02174     st_add_direct(FoldTable, (st_data_t )p->from, (st_data_t )&(p->to));
02175   }
02176   for (i = 0; i < numberof(CaseFold_Locale); i++) {
02177     p = &CaseFold_Locale[i];
02178     st_add_direct(FoldTable, (st_data_t )p->from, (st_data_t )&(p->to));
02179   }
02180 
02181   Unfold1Table = st_init_numtable_with_size(1000);
02182   if (ONIG_IS_NULL(Unfold1Table)) return ONIGERR_MEMORY;
02183 
02184   for (i = 0; i < numberof(CaseUnfold_11); i++) {
02185     p1 = &CaseUnfold_11[i];
02186     st_add_direct(Unfold1Table, (st_data_t )p1->from, (st_data_t )&(p1->to));
02187   }
02188   for (i = 0; i < numberof(CaseUnfold_11_Locale); i++) {
02189     p1 = &CaseUnfold_11_Locale[i];
02190     st_add_direct(Unfold1Table, (st_data_t )p1->from, (st_data_t )&(p1->to));
02191   }
02192 
02193   Unfold2Table = st_init_table_with_size(&type_code2_hash, 200);
02194   if (ONIG_IS_NULL(Unfold2Table)) return ONIGERR_MEMORY;
02195 
02196   for (i = 0; i < numberof(CaseUnfold_12); i++) {
02197     p2 = &CaseUnfold_12[i];
02198     st_add_direct(Unfold2Table, (st_data_t )p2->from, (st_data_t )(&p2->to));
02199   }
02200   for (i = 0; i < numberof(CaseUnfold_12_Locale); i++) {
02201     p2 = &CaseUnfold_12_Locale[i];
02202     st_add_direct(Unfold2Table, (st_data_t )p2->from, (st_data_t )(&p2->to));
02203   }
02204 
02205   Unfold3Table = st_init_table_with_size(&type_code3_hash, 30);
02206   if (ONIG_IS_NULL(Unfold3Table)) return ONIGERR_MEMORY;
02207 
02208   for (i = 0; i < numberof(CaseUnfold_13); i++) {
02209     p3 = &CaseUnfold_13[i];
02210     st_add_direct(Unfold3Table, (st_data_t )p3->from, (st_data_t )(&p3->to));
02211   }
02212 
02213   CaseFoldInited = 1;
02214   THREAD_ATOMIC_END;
02215   return 0;
02216 }
02217 
02218 extern int
02219 onigenc_unicode_mbc_case_fold(OnigEncoding enc,
02220     OnigCaseFoldType flag ARG_UNUSED, const UChar** pp, const UChar* end,
02221     UChar* fold)
02222 {
02223   CodePointList3 *to;
02224   OnigCodePoint code;
02225   int i, len, rlen;
02226   const UChar *p = *pp;
02227 
02228   if (CaseFoldInited == 0) init_case_fold_table();
02229 
02230   code = ONIGENC_MBC_TO_CODE(enc, p, end);
02231   len = enclen(enc, p, end);
02232   *pp += len;
02233 
02234 #ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
02235   if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {
02236     if (code == 0x0049) {
02237       return ONIGENC_CODE_TO_MBC(enc, 0x0131, fold);
02238     }
02239     else if (code == 0x0130) {
02240       return ONIGENC_CODE_TO_MBC(enc, 0x0069, fold);
02241     }
02242   }
02243 #endif
02244 
02245   if (onig_st_lookup(FoldTable, (st_data_t )code, (void* )&to) != 0) {
02246     if (to->n == 1) {
02247       return ONIGENC_CODE_TO_MBC(enc, to->code[0], fold);
02248     }
02249 #if 0
02250     /* NO NEEDS TO CHECK */
02251     else if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0)
02252 #else
02253     else
02254 #endif
02255     {
02256       rlen = 0;
02257       for (i = 0; i < to->n; i++) {
02258         len = ONIGENC_CODE_TO_MBC(enc, to->code[i], fold);
02259         fold += len;
02260         rlen += len;
02261       }
02262       return rlen;
02263     }
02264   }
02265 
02266   for (i = 0; i < len; i++) {
02267     *fold++ = *p++;
02268   }
02269   return len;
02270 }
02271 
02272 extern int
02273 onigenc_unicode_apply_all_case_fold(OnigCaseFoldType flag,
02274                                     OnigApplyAllCaseFoldFunc f, void* arg,
02275                                     OnigEncoding enc ARG_UNUSED)
02276 {
02277   const CaseUnfold_11_Type* p11;
02278   OnigCodePoint code;
02279   int i, j, k, r;
02280 
02281   /* if (CaseFoldInited == 0) init_case_fold_table(); */
02282 
02283   for (i = 0; i < numberof(CaseUnfold_11); i++) {
02284     p11 = &CaseUnfold_11[i];
02285     for (j = 0; j < p11->to.n; j++) {
02286       code = p11->from;
02287       r = (*f)(p11->to.code[j], &code, 1, arg);
02288       if (r != 0) return r;
02289 
02290       code = p11->to.code[j];
02291       r = (*f)(p11->from, &code, 1, arg);
02292       if (r != 0) return r;
02293 
02294       for (k = 0; k < j; k++) {
02295         r = (*f)(p11->to.code[j], (OnigCodePoint* )(&p11->to.code[k]), 1, arg);
02296         if (r != 0) return r;
02297 
02298         r = (*f)(p11->to.code[k], (OnigCodePoint* )(&p11->to.code[j]), 1, arg);
02299         if (r != 0) return r;
02300       }
02301     }
02302   }
02303 
02304 #ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
02305   if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {
02306     code = 0x0131;
02307     r = (*f)(0x0049, &code, 1, arg);
02308     if (r != 0) return r;
02309     code = 0x0049;
02310     r = (*f)(0x0131, &code, 1, arg);
02311     if (r != 0) return r;
02312 
02313     code = 0x0130;
02314     r = (*f)(0x0069, &code, 1, arg);
02315     if (r != 0) return r;
02316     code = 0x0069;
02317     r = (*f)(0x0130, &code, 1, arg);
02318     if (r != 0) return r;
02319   }
02320   else {
02321 #endif
02322     for (i = 0; i < numberof(CaseUnfold_11_Locale); i++) {
02323       p11 = &CaseUnfold_11_Locale[i];
02324       for (j = 0; j < p11->to.n; j++) {
02325         code = p11->from;
02326         r = (*f)(p11->to.code[j], &code, 1, arg);
02327         if (r != 0) return r;
02328 
02329         code = p11->to.code[j];
02330         r = (*f)(p11->from, &code, 1, arg);
02331         if (r != 0) return r;
02332 
02333         for (k = 0; k < j; k++) {
02334           r = (*f)(p11->to.code[j], (OnigCodePoint* )(&p11->to.code[k]),
02335                    1, arg);
02336           if (r != 0) return r;
02337 
02338           r = (*f)(p11->to.code[k], (OnigCodePoint* )(&p11->to.code[j]),
02339                    1, arg);
02340           if (r != 0) return r;
02341         }
02342       }
02343     }
02344 #ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
02345   }
02346 #endif
02347 
02348   if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {
02349     for (i = 0; i < numberof(CaseUnfold_12); i++) {
02350       for (j = 0; j < CaseUnfold_12[i].to.n; j++) {
02351         r = (*f)(CaseUnfold_12[i].to.code[j],
02352                  (OnigCodePoint* )CaseUnfold_12[i].from, 2, arg);
02353         if (r != 0) return r;
02354 
02355         for (k = 0; k < CaseUnfold_12[i].to.n; k++) {
02356           if (k == j) continue;
02357 
02358           r = (*f)(CaseUnfold_12[i].to.code[j],
02359                    (OnigCodePoint* )(&CaseUnfold_12[i].to.code[k]), 1, arg);
02360           if (r != 0) return r;
02361         }
02362       }
02363     }
02364 
02365 #ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
02366     if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) == 0) {
02367 #endif
02368       for (i = 0; i < numberof(CaseUnfold_12_Locale); i++) {
02369         for (j = 0; j < CaseUnfold_12_Locale[i].to.n; j++) {
02370           r = (*f)(CaseUnfold_12_Locale[i].to.code[j],
02371                    (OnigCodePoint* )CaseUnfold_12_Locale[i].from, 2, arg);
02372           if (r != 0) return r;
02373 
02374           for (k = 0; k < CaseUnfold_12_Locale[i].to.n; k++) {
02375             if (k == j) continue;
02376 
02377             r = (*f)(CaseUnfold_12_Locale[i].to.code[j],
02378                      (OnigCodePoint* )(&CaseUnfold_12_Locale[i].to.code[k]),
02379                      1, arg);
02380             if (r != 0) return r;
02381           }
02382         }
02383       }
02384 #ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
02385     }
02386 #endif
02387 
02388     for (i = 0; i < numberof(CaseUnfold_13); i++) {
02389       for (j = 0; j < CaseUnfold_13[i].to.n; j++) {
02390         r = (*f)(CaseUnfold_13[i].to.code[j],
02391                  (OnigCodePoint* )CaseUnfold_13[i].from, 3, arg);
02392         if (r != 0) return r;
02393 
02394         for (k = 0; k < CaseUnfold_13[i].to.n; k++) {
02395           if (k == j) continue;
02396 
02397           r = (*f)(CaseUnfold_13[i].to.code[j],
02398                    (OnigCodePoint* )(&CaseUnfold_13[i].to.code[k]), 1, arg);
02399           if (r != 0) return r;
02400         }
02401       }
02402     }
02403   }
02404 
02405   return 0;
02406 }
02407 
02408 extern int
02409 onigenc_unicode_get_case_fold_codes_by_str(OnigEncoding enc,
02410     OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end,
02411     OnigCaseFoldCodeItem items[])
02412 {
02413   int n, i, j, k, len;
02414   OnigCodePoint code, codes[3];
02415   CodePointList3 *to, *z3;
02416   CodePointList2 *z2;
02417 
02418   if (CaseFoldInited == 0) init_case_fold_table();
02419 
02420   n = 0;
02421 
02422   code = ONIGENC_MBC_TO_CODE(enc, p, end);
02423   len = enclen(enc, p, end);
02424 
02425 #ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
02426   if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {
02427     if (code == 0x0049) {
02428       items[0].byte_len = len;
02429       items[0].code_len = 1;
02430       items[0].code[0]  = 0x0131;
02431       return 1;
02432     }
02433     else if (code == 0x0130) {
02434       items[0].byte_len = len;
02435       items[0].code_len = 1;
02436       items[0].code[0]  = 0x0069;
02437       return 1;
02438     }
02439     else if (code == 0x0131) {
02440       items[0].byte_len = len;
02441       items[0].code_len = 1;
02442       items[0].code[0]  = 0x0049;
02443       return 1;
02444     }
02445     else if (code == 0x0069) {
02446       items[0].byte_len = len;
02447       items[0].code_len = 1;
02448       items[0].code[0]  = 0x0130;
02449       return 1;
02450     }
02451   }
02452 #endif
02453 
02454   if (onig_st_lookup(FoldTable, (st_data_t )code, (void* )&to) != 0) {
02455     if (to->n == 1) {
02456       OnigCodePoint orig_code = code;
02457 
02458       items[0].byte_len = len;
02459       items[0].code_len = 1;
02460       items[0].code[0]  = to->code[0];
02461       n++;
02462 
02463       code = to->code[0];
02464       if (onig_st_lookup(Unfold1Table, (st_data_t )code, (void* )&to) != 0) {
02465         for (i = 0; i < to->n; i++) {
02466           if (to->code[i] != orig_code) {
02467             items[n].byte_len = len;
02468             items[n].code_len = 1;
02469             items[n].code[0]  = to->code[i];
02470             n++;
02471           }
02472         }
02473       }
02474     }
02475     else if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {
02476       OnigCodePoint cs[3][4];
02477       int fn, ncs[3];
02478 
02479       for (fn = 0; fn < to->n; fn++) {
02480         cs[fn][0] = to->code[fn];
02481         if (onig_st_lookup(Unfold1Table, (st_data_t )cs[fn][0],
02482                            (void* )&z3) != 0) {
02483           for (i = 0; i < z3->n; i++) {
02484             cs[fn][i+1] = z3->code[i];
02485           }
02486           ncs[fn] = z3->n + 1;
02487         }
02488         else
02489           ncs[fn] = 1;
02490       }
02491 
02492       if (fn == 2) {
02493         for (i = 0; i < ncs[0]; i++) {
02494           for (j = 0; j < ncs[1]; j++) {
02495             items[n].byte_len = len;
02496             items[n].code_len = 2;
02497             items[n].code[0]  = cs[0][i];
02498             items[n].code[1]  = cs[1][j];
02499             n++;
02500           }
02501         }
02502 
02503         if (onig_st_lookup(Unfold2Table, (st_data_t )to->code,
02504                            (void* )&z2) != 0) {
02505           for (i = 0; i < z2->n; i++) {
02506             if (z2->code[i] == code) continue;
02507 
02508             items[n].byte_len = len;
02509             items[n].code_len = 1;
02510             items[n].code[0]  = z2->code[i];
02511             n++;
02512           }
02513         }
02514       }
02515       else {
02516         for (i = 0; i < ncs[0]; i++) {
02517           for (j = 0; j < ncs[1]; j++) {
02518             for (k = 0; k < ncs[2]; k++) {
02519               items[n].byte_len = len;
02520               items[n].code_len = 3;
02521               items[n].code[0]  = cs[0][i];
02522               items[n].code[1]  = cs[1][j];
02523               items[n].code[2]  = cs[2][k];
02524               n++;
02525             }
02526           }
02527         }
02528 
02529         if (onig_st_lookup(Unfold3Table, (st_data_t )to->code,
02530                            (void* )&z2) != 0) {
02531           for (i = 0; i < z2->n; i++) {
02532             if (z2->code[i] == code) continue;
02533 
02534             items[n].byte_len = len;
02535             items[n].code_len = 1;
02536             items[n].code[0]  = z2->code[i];
02537             n++;
02538           }
02539         }
02540       }
02541 
02542       /* multi char folded code is not head of another folded multi char */
02543       flag = 0; /* DISABLE_CASE_FOLD_MULTI_CHAR(flag); */
02544     }
02545   }
02546   else {
02547     if (onig_st_lookup(Unfold1Table, (st_data_t )code, (void* )&to) != 0) {
02548       for (i = 0; i < to->n; i++) {
02549         items[n].byte_len = len;
02550         items[n].code_len = 1;
02551         items[n].code[0]  = to->code[i];
02552         n++;
02553       }
02554     }
02555   }
02556 
02557 
02558   if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {
02559     p += len;
02560     if (p < end) {
02561       int clen;
02562 
02563       codes[0] = code;
02564       code = ONIGENC_MBC_TO_CODE(enc, p, end);
02565       if (onig_st_lookup(FoldTable, (st_data_t )code, (void* )&to) != 0
02566           && to->n == 1) {
02567         codes[1] = to->code[0];
02568       }
02569       else
02570         codes[1] = code;
02571 
02572       clen = enclen(enc, p, end);
02573       len += clen;
02574       if (onig_st_lookup(Unfold2Table, (st_data_t )codes, (void* )&z2) != 0) {
02575         for (i = 0; i < z2->n; i++) {
02576           items[n].byte_len = len;
02577           items[n].code_len = 1;
02578           items[n].code[0]  = z2->code[i];
02579           n++;
02580         }
02581       }
02582 
02583       p += clen;
02584       if (p < end) {
02585         code = ONIGENC_MBC_TO_CODE(enc, p, end);
02586         if (onig_st_lookup(FoldTable, (st_data_t )code, (void* )&to) != 0
02587             && to->n == 1) {
02588           codes[2] = to->code[0];
02589         }
02590         else
02591           codes[2] = code;
02592 
02593         clen = enclen(enc, p, end);
02594         len += clen;
02595         if (onig_st_lookup(Unfold3Table, (st_data_t )codes,
02596                            (void* )&z2) != 0) {
02597           for (i = 0; i < z2->n; i++) {
02598             items[n].byte_len = len;
02599             items[n].code_len = 1;
02600             items[n].code[0]  = z2->code[i];
02601             n++;
02602           }
02603         }
02604       }
02605     }
02606   }
02607 
02608   return n;
02609 }
02610