• Main Page
  • Modules
  • Data Structures
  • Files
  • File List
  • Globals

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   p = name;
02095   len = 0;
02096   for (p = name; p < end; p += enclen(enc, p, end)) {
02097     code = ONIGENC_MBC_TO_CODE(enc, p, end);
02098     if (code == ' ' || code == '-' || code == '_')
02099       continue;
02100     if (code >= 0x80)
02101       return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
02102 
02103     buf[len++] = (UChar )TOLOWER((unsigned char)code);
02104     if (len >= PROPERTY_NAME_MAX_SIZE)
02105       return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
02106   }
02107 
02108   buf[len] = 0;
02109 
02110   if ((ctype = uniname2ctype(buf, len)) < 0) {
02111     return ONIGERR_INVALID_CHAR_PROPERTY_NAME;
02112   }
02113 
02114   return ctype;
02115 }
02116 
02117 
02118 static int
02119 code2_cmp(OnigCodePoint* x, OnigCodePoint* y)
02120 {
02121   if (x[0] == y[0] && x[1] == y[1]) return 0;
02122   return 1;
02123 }
02124 
02125 static st_index_t
02126 code2_hash(OnigCodePoint* x)
02127 {
02128   return (st_index_t )(x[0] + x[1]);
02129 }
02130 
02131 static const struct st_hash_type type_code2_hash = {
02132   code2_cmp,
02133   code2_hash,
02134 };
02135 
02136 static int
02137 code3_cmp(OnigCodePoint* x, OnigCodePoint* y)
02138 {
02139   if (x[0] == y[0] && x[1] == y[1] && x[2] == y[2]) return 0;
02140   return 1;
02141 }
02142 
02143 static st_index_t
02144 code3_hash(OnigCodePoint* x)
02145 {
02146   return (st_index_t )(x[0] + x[1] + x[2]);
02147 }
02148 
02149 static const struct st_hash_type type_code3_hash = {
02150   code3_cmp,
02151   code3_hash,
02152 };
02153 
02154 
02155 static st_table* FoldTable;    /* fold-1, fold-2, fold-3 */
02156 static st_table* Unfold1Table;
02157 static st_table* Unfold2Table;
02158 static st_table* Unfold3Table;
02159 static int CaseFoldInited = 0;
02160 
02161 static int init_case_fold_table(void)
02162 {
02163   const CaseFold_11_Type   *p;
02164   const CaseUnfold_11_Type *p1;
02165   const CaseUnfold_12_Type *p2;
02166   const CaseUnfold_13_Type *p3;
02167   int i;
02168 
02169   THREAD_ATOMIC_START;
02170 
02171   FoldTable = st_init_numtable_with_size(1200);
02172   if (ONIG_IS_NULL(FoldTable)) return ONIGERR_MEMORY;
02173   for (i = 0; i < numberof(CaseFold); i++) {
02174     p = &CaseFold[i];
02175     st_add_direct(FoldTable, (st_data_t )p->from, (st_data_t )&(p->to));
02176   }
02177   for (i = 0; i < numberof(CaseFold_Locale); i++) {
02178     p = &CaseFold_Locale[i];
02179     st_add_direct(FoldTable, (st_data_t )p->from, (st_data_t )&(p->to));
02180   }
02181 
02182   Unfold1Table = st_init_numtable_with_size(1000);
02183   if (ONIG_IS_NULL(Unfold1Table)) return ONIGERR_MEMORY;
02184 
02185   for (i = 0; i < numberof(CaseUnfold_11); i++) {
02186     p1 = &CaseUnfold_11[i];
02187     st_add_direct(Unfold1Table, (st_data_t )p1->from, (st_data_t )&(p1->to));
02188   }
02189   for (i = 0; i < numberof(CaseUnfold_11_Locale); i++) {
02190     p1 = &CaseUnfold_11_Locale[i];
02191     st_add_direct(Unfold1Table, (st_data_t )p1->from, (st_data_t )&(p1->to));
02192   }
02193 
02194   Unfold2Table = st_init_table_with_size(&type_code2_hash, 200);
02195   if (ONIG_IS_NULL(Unfold2Table)) return ONIGERR_MEMORY;
02196 
02197   for (i = 0; i < numberof(CaseUnfold_12); i++) {
02198     p2 = &CaseUnfold_12[i];
02199     st_add_direct(Unfold2Table, (st_data_t )p2->from, (st_data_t )(&p2->to));
02200   }
02201   for (i = 0; i < numberof(CaseUnfold_12_Locale); i++) {
02202     p2 = &CaseUnfold_12_Locale[i];
02203     st_add_direct(Unfold2Table, (st_data_t )p2->from, (st_data_t )(&p2->to));
02204   }
02205 
02206   Unfold3Table = st_init_table_with_size(&type_code3_hash, 30);
02207   if (ONIG_IS_NULL(Unfold3Table)) return ONIGERR_MEMORY;
02208 
02209   for (i = 0; i < numberof(CaseUnfold_13); i++) {
02210     p3 = &CaseUnfold_13[i];
02211     st_add_direct(Unfold3Table, (st_data_t )p3->from, (st_data_t )(&p3->to));
02212   }
02213 
02214   CaseFoldInited = 1;
02215   THREAD_ATOMIC_END;
02216   return 0;
02217 }
02218 
02219 extern int
02220 onigenc_unicode_mbc_case_fold(OnigEncoding enc,
02221     OnigCaseFoldType flag ARG_UNUSED, const UChar** pp, const UChar* end,
02222     UChar* fold)
02223 {
02224   CodePointList3 *to;
02225   OnigCodePoint code;
02226   int i, len, rlen;
02227   const UChar *p = *pp;
02228 
02229   if (CaseFoldInited == 0) init_case_fold_table();
02230 
02231   code = ONIGENC_MBC_TO_CODE(enc, p, end);
02232   len = enclen(enc, p, end);
02233   *pp += len;
02234 
02235 #ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
02236   if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {
02237     if (code == 0x0049) {
02238       return ONIGENC_CODE_TO_MBC(enc, 0x0131, fold);
02239     }
02240     else if (code == 0x0130) {
02241       return ONIGENC_CODE_TO_MBC(enc, 0x0069, fold);
02242     }
02243   }
02244 #endif
02245 
02246   if (onig_st_lookup(FoldTable, (st_data_t )code, (void* )&to) != 0) {
02247     if (to->n == 1) {
02248       return ONIGENC_CODE_TO_MBC(enc, to->code[0], fold);      
02249     }
02250 #if 0
02251     /* NO NEEDS TO CHECK */
02252     else if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0)
02253 #else
02254     else
02255 #endif
02256     {
02257       rlen = 0;
02258       for (i = 0; i < to->n; i++) {
02259         len = ONIGENC_CODE_TO_MBC(enc, to->code[i], fold);
02260         fold += len;
02261         rlen += len;
02262       }
02263       return rlen;
02264     }
02265   }
02266 
02267   for (i = 0; i < len; i++) {
02268     *fold++ = *p++;
02269   }
02270   return len;
02271 }
02272 
02273 extern int
02274 onigenc_unicode_apply_all_case_fold(OnigCaseFoldType flag,
02275                                     OnigApplyAllCaseFoldFunc f, void* arg,
02276                                     OnigEncoding enc ARG_UNUSED)
02277 {
02278   const CaseUnfold_11_Type* p11;
02279   OnigCodePoint code;
02280   int i, j, k, r;
02281 
02282   /* if (CaseFoldInited == 0) init_case_fold_table(); */
02283 
02284   for (i = 0; i < numberof(CaseUnfold_11); i++) {
02285     p11 = &CaseUnfold_11[i];
02286     for (j = 0; j < p11->to.n; j++) {
02287       code = p11->from;
02288       r = (*f)(p11->to.code[j], &code, 1, arg);
02289       if (r != 0) return r;
02290 
02291       code = p11->to.code[j];
02292       r = (*f)(p11->from, &code, 1, arg);
02293       if (r != 0) return r;
02294 
02295       for (k = 0; k < j; k++) {
02296         r = (*f)(p11->to.code[j], (OnigCodePoint* )(&p11->to.code[k]), 1, arg);
02297         if (r != 0) return r;
02298 
02299         r = (*f)(p11->to.code[k], (OnigCodePoint* )(&p11->to.code[j]), 1, arg);
02300         if (r != 0) return r;
02301       }
02302     }
02303   }
02304 
02305 #ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
02306   if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {
02307     code = 0x0131;
02308     r = (*f)(0x0049, &code, 1, arg);
02309     if (r != 0) return r;
02310     code = 0x0049;
02311     r = (*f)(0x0131, &code, 1, arg);
02312     if (r != 0) return r;
02313 
02314     code = 0x0130;
02315     r = (*f)(0x0069, &code, 1, arg);
02316     if (r != 0) return r;
02317     code = 0x0069;
02318     r = (*f)(0x0130, &code, 1, arg);
02319     if (r != 0) return r;
02320   }
02321   else {
02322 #endif
02323     for (i = 0; i < numberof(CaseUnfold_11_Locale); i++) {
02324       p11 = &CaseUnfold_11_Locale[i];
02325       for (j = 0; j < p11->to.n; j++) {
02326         code = p11->from;
02327         r = (*f)(p11->to.code[j], &code, 1, arg);
02328         if (r != 0) return r;
02329 
02330         code = p11->to.code[j];
02331         r = (*f)(p11->from, &code, 1, arg);
02332         if (r != 0) return r;
02333 
02334         for (k = 0; k < j; k++) {
02335           r = (*f)(p11->to.code[j], (OnigCodePoint* )(&p11->to.code[k]),
02336                    1, arg);
02337           if (r != 0) return r;
02338 
02339           r = (*f)(p11->to.code[k], (OnigCodePoint* )(&p11->to.code[j]),
02340                    1, arg);
02341           if (r != 0) return r;
02342         }
02343       }
02344     }
02345 #ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
02346   }
02347 #endif
02348 
02349   if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {
02350     for (i = 0; i < numberof(CaseUnfold_12); i++) {
02351       for (j = 0; j < CaseUnfold_12[i].to.n; j++) {
02352         r = (*f)(CaseUnfold_12[i].to.code[j],
02353                  (OnigCodePoint* )CaseUnfold_12[i].from, 2, arg);
02354         if (r != 0) return r;   
02355 
02356         for (k = 0; k < CaseUnfold_12[i].to.n; k++) {
02357           if (k == j) continue;
02358 
02359           r = (*f)(CaseUnfold_12[i].to.code[j],
02360                    (OnigCodePoint* )(&CaseUnfold_12[i].to.code[k]), 1, arg);
02361           if (r != 0) return r;
02362         }
02363       }
02364     }
02365 
02366 #ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
02367     if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) == 0) {
02368 #endif
02369       for (i = 0; i < numberof(CaseUnfold_12_Locale); i++) {
02370         for (j = 0; j < CaseUnfold_12_Locale[i].to.n; j++) {
02371           r = (*f)(CaseUnfold_12_Locale[i].to.code[j],
02372                    (OnigCodePoint* )CaseUnfold_12_Locale[i].from, 2, arg);
02373           if (r != 0) return r; 
02374 
02375           for (k = 0; k < CaseUnfold_12_Locale[i].to.n; k++) {
02376             if (k == j) continue;
02377 
02378             r = (*f)(CaseUnfold_12_Locale[i].to.code[j],
02379                      (OnigCodePoint* )(&CaseUnfold_12_Locale[i].to.code[k]),
02380                      1, arg);
02381             if (r != 0) return r;
02382           }
02383         }
02384       }
02385 #ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
02386     }
02387 #endif
02388 
02389     for (i = 0; i < numberof(CaseUnfold_13); i++) {
02390       for (j = 0; j < CaseUnfold_13[i].to.n; j++) {
02391         r = (*f)(CaseUnfold_13[i].to.code[j],
02392                  (OnigCodePoint* )CaseUnfold_13[i].from, 3, arg);
02393         if (r != 0) return r;   
02394 
02395         for (k = 0; k < CaseUnfold_13[i].to.n; k++) {
02396           if (k == j) continue;
02397 
02398           r = (*f)(CaseUnfold_13[i].to.code[j],
02399                    (OnigCodePoint* )(&CaseUnfold_13[i].to.code[k]), 1, arg);
02400           if (r != 0) return r;
02401         }
02402       }
02403     }
02404   }
02405 
02406   return 0;
02407 }
02408 
02409 extern int
02410 onigenc_unicode_get_case_fold_codes_by_str(OnigEncoding enc,
02411     OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end,
02412     OnigCaseFoldCodeItem items[])
02413 {
02414   int n, i, j, k, len;
02415   OnigCodePoint code, codes[3];
02416   CodePointList3 *to, *z3;
02417   CodePointList2 *z2;
02418 
02419   if (CaseFoldInited == 0) init_case_fold_table();
02420 
02421   n = 0;
02422 
02423   code = ONIGENC_MBC_TO_CODE(enc, p, end);
02424   len = enclen(enc, p, end);
02425 
02426 #ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
02427   if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {
02428     if (code == 0x0049) {
02429       items[0].byte_len = len;
02430       items[0].code_len = 1;
02431       items[0].code[0]  = 0x0131;
02432       return 1;
02433     }
02434     else if (code == 0x0130) {
02435       items[0].byte_len = len;
02436       items[0].code_len = 1;
02437       items[0].code[0]  = 0x0069;
02438       return 1;
02439     }
02440     else if (code == 0x0131) {
02441       items[0].byte_len = len;
02442       items[0].code_len = 1;
02443       items[0].code[0]  = 0x0049;
02444       return 1;
02445     }
02446     else if (code == 0x0069) {
02447       items[0].byte_len = len;
02448       items[0].code_len = 1;
02449       items[0].code[0]  = 0x0130;
02450       return 1;
02451     }
02452   }
02453 #endif
02454 
02455   if (onig_st_lookup(FoldTable, (st_data_t )code, (void* )&to) != 0) {
02456     if (to->n == 1) {
02457       OnigCodePoint orig_code = code;
02458 
02459       items[0].byte_len = len;
02460       items[0].code_len = 1;
02461       items[0].code[0]  = to->code[0];
02462       n++;
02463 
02464       code = to->code[0];
02465       if (onig_st_lookup(Unfold1Table, (st_data_t )code, (void* )&to) != 0) {
02466         for (i = 0; i < to->n; i++) {
02467           if (to->code[i] != orig_code) {
02468             items[n].byte_len = len;
02469             items[n].code_len = 1;
02470             items[n].code[0]  = to->code[i];
02471             n++;
02472           }
02473         }
02474       }
02475     }
02476     else if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {
02477       OnigCodePoint cs[3][4];
02478       int fn, ncs[3];
02479 
02480       for (fn = 0; fn < to->n; fn++) {
02481         cs[fn][0] = to->code[fn];
02482         if (onig_st_lookup(Unfold1Table, (st_data_t )cs[fn][0],
02483                            (void* )&z3) != 0) {
02484           for (i = 0; i < z3->n; i++) {
02485             cs[fn][i+1] = z3->code[i];
02486           }
02487           ncs[fn] = z3->n + 1;
02488         }
02489         else
02490           ncs[fn] = 1;
02491       }
02492 
02493       if (fn == 2) {
02494         for (i = 0; i < ncs[0]; i++) {
02495           for (j = 0; j < ncs[1]; j++) {
02496             items[n].byte_len = len;
02497             items[n].code_len = 2;
02498             items[n].code[0]  = cs[0][i];
02499             items[n].code[1]  = cs[1][j];
02500             n++;
02501           }
02502         }
02503 
02504         if (onig_st_lookup(Unfold2Table, (st_data_t )to->code,
02505                            (void* )&z2) != 0) {
02506           for (i = 0; i < z2->n; i++) {
02507             if (z2->code[i] == code) continue;
02508 
02509             items[n].byte_len = len;
02510             items[n].code_len = 1;
02511             items[n].code[0]  = z2->code[i];
02512             n++;
02513           }
02514         }
02515       }
02516       else {
02517         for (i = 0; i < ncs[0]; i++) {
02518           for (j = 0; j < ncs[1]; j++) {
02519             for (k = 0; k < ncs[2]; k++) {
02520               items[n].byte_len = len;
02521               items[n].code_len = 3;
02522               items[n].code[0]  = cs[0][i];
02523               items[n].code[1]  = cs[1][j];
02524               items[n].code[2]  = cs[2][k];
02525               n++;
02526             }
02527           }
02528         }
02529 
02530         if (onig_st_lookup(Unfold3Table, (st_data_t )to->code,
02531                            (void* )&z2) != 0) {
02532           for (i = 0; i < z2->n; i++) {
02533             if (z2->code[i] == code) continue;
02534 
02535             items[n].byte_len = len;
02536             items[n].code_len = 1;
02537             items[n].code[0]  = z2->code[i];
02538             n++;
02539           }
02540         }
02541       }
02542 
02543       /* multi char folded code is not head of another folded multi char */
02544       flag = 0; /* DISABLE_CASE_FOLD_MULTI_CHAR(flag); */
02545     }
02546   }
02547   else {
02548     if (onig_st_lookup(Unfold1Table, (st_data_t )code, (void* )&to) != 0) {
02549       for (i = 0; i < to->n; i++) {
02550         items[n].byte_len = len;
02551         items[n].code_len = 1;
02552         items[n].code[0]  = to->code[i];
02553         n++;
02554       }
02555     }
02556   }
02557 
02558 
02559   if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {
02560     p += len;
02561     if (p < end) {
02562       int clen;
02563 
02564       codes[0] = code;
02565       code = ONIGENC_MBC_TO_CODE(enc, p, end);
02566       if (onig_st_lookup(FoldTable, (st_data_t )code, (void* )&to) != 0
02567           && to->n == 1) {
02568         codes[1] = to->code[0];
02569       }
02570       else
02571         codes[1] = code;
02572 
02573       clen = enclen(enc, p, end);
02574       len += clen;
02575       if (onig_st_lookup(Unfold2Table, (st_data_t )codes, (void* )&z2) != 0) {
02576         for (i = 0; i < z2->n; i++) {
02577           items[n].byte_len = len;
02578           items[n].code_len = 1;
02579           items[n].code[0]  = z2->code[i];
02580           n++;
02581         }
02582       }
02583 
02584       p += clen;
02585       if (p < end) {
02586         code = ONIGENC_MBC_TO_CODE(enc, p, end);
02587         if (onig_st_lookup(FoldTable, (st_data_t )code, (void* )&to) != 0
02588             && to->n == 1) {
02589           codes[2] = to->code[0];
02590         }
02591         else
02592           codes[2] = code;
02593 
02594         clen = enclen(enc, p, end);
02595         len += clen;
02596         if (onig_st_lookup(Unfold3Table, (st_data_t )codes,
02597                            (void* )&z2) != 0) {
02598           for (i = 0; i < z2->n; i++) {
02599             items[n].byte_len = len;
02600             items[n].code_len = 1;
02601             items[n].code[0]  = z2->code[i];
02602             n++;
02603           }
02604         }
02605       }
02606     }
02607   }
02608 
02609   return n;
02610 }
02611 

Generated on Wed Sep 8 2010 09:54:32 for Ruby by  doxygen 1.7.1