Drizzled Public API Documentation

ctype-utf8.cc

00001 /* Copyright (C) 2000 MySQL AB
00002 
00003    This library is free software; you can redistribute it and/or
00004    modify it under the terms of the GNU Library General Public
00005    License as published by the Free Software Foundation; version 2
00006    of the License.
00007 
00008    This library is distributed in the hope that it will be useful,
00009    but WITHOUT ANY WARRANTY; without even the implied warranty of
00010    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00011    Library General Public License for more details.
00012 
00013    You should have received a copy of the GNU Library General Public
00014    License along with this library; if not, write to the Free
00015    Software Foundation, Inc., 51 Franklin Place - Suite 330, Boston,
00016    MA 02110-1301, USA */
00017 
00018 /* UTF8 according RFC 2279 */
00019 /* Written by Alexander Barkov <bar@udm.net> */
00020 
00021 #include <config.h>
00022 
00023 #include <drizzled/internal/m_string.h>
00024 #include <drizzled/charset_info.h>
00025 #include <errno.h>
00026 
00027 #include <algorithm>
00028 
00029 #ifndef EILSEQ
00030 #define EILSEQ ENOENT
00031 #endif
00032 
00033 
00034 #define MY_UTF8MB3_GENERAL_CI MY_UTF8MB3 "_general_ci"
00035 #define MY_UTF8MB3_BIN        MY_UTF8MB3 "_bin"
00036 #define MY_UTF8MB4_GENERAL_CI MY_UTF8MB4 "_general_ci"
00037 #define MY_UTF8MB4_BIN        MY_UTF8MB4 "_bin"
00038 
00039 
00040 using namespace std;
00041 
00042 namespace drizzled
00043 {
00044 
00045 void my_hash_sort_utf8mb4(const CHARSET_INFO * const cs,
00046                           const unsigned char *s, size_t slen,
00047                           uint32_t *n1, uint32_t *n2);
00048 
00049 static MY_UNICASE_INFO plane00[]={
00050   {0x0000,0x0000,0x0000},  {0x0001,0x0001,0x0001},
00051   {0x0002,0x0002,0x0002},  {0x0003,0x0003,0x0003},
00052   {0x0004,0x0004,0x0004},  {0x0005,0x0005,0x0005},
00053   {0x0006,0x0006,0x0006},  {0x0007,0x0007,0x0007},
00054   {0x0008,0x0008,0x0008},  {0x0009,0x0009,0x0009},
00055   {0x000A,0x000A,0x000A},  {0x000B,0x000B,0x000B},
00056   {0x000C,0x000C,0x000C},  {0x000D,0x000D,0x000D},
00057   {0x000E,0x000E,0x000E},  {0x000F,0x000F,0x000F},
00058   {0x0010,0x0010,0x0010},  {0x0011,0x0011,0x0011},
00059   {0x0012,0x0012,0x0012},  {0x0013,0x0013,0x0013},
00060   {0x0014,0x0014,0x0014},  {0x0015,0x0015,0x0015},
00061   {0x0016,0x0016,0x0016},  {0x0017,0x0017,0x0017},
00062   {0x0018,0x0018,0x0018},  {0x0019,0x0019,0x0019},
00063   {0x001A,0x001A,0x001A},  {0x001B,0x001B,0x001B},
00064   {0x001C,0x001C,0x001C},  {0x001D,0x001D,0x001D},
00065   {0x001E,0x001E,0x001E},  {0x001F,0x001F,0x001F},
00066   {0x0020,0x0020,0x0020},  {0x0021,0x0021,0x0021},
00067   {0x0022,0x0022,0x0022},  {0x0023,0x0023,0x0023},
00068   {0x0024,0x0024,0x0024},  {0x0025,0x0025,0x0025},
00069   {0x0026,0x0026,0x0026},  {0x0027,0x0027,0x0027},
00070   {0x0028,0x0028,0x0028},  {0x0029,0x0029,0x0029},
00071   {0x002A,0x002A,0x002A},  {0x002B,0x002B,0x002B},
00072   {0x002C,0x002C,0x002C},  {0x002D,0x002D,0x002D},
00073   {0x002E,0x002E,0x002E},  {0x002F,0x002F,0x002F},
00074   {0x0030,0x0030,0x0030},  {0x0031,0x0031,0x0031},
00075   {0x0032,0x0032,0x0032},  {0x0033,0x0033,0x0033},
00076   {0x0034,0x0034,0x0034},  {0x0035,0x0035,0x0035},
00077   {0x0036,0x0036,0x0036},  {0x0037,0x0037,0x0037},
00078   {0x0038,0x0038,0x0038},  {0x0039,0x0039,0x0039},
00079   {0x003A,0x003A,0x003A},  {0x003B,0x003B,0x003B},
00080   {0x003C,0x003C,0x003C},  {0x003D,0x003D,0x003D},
00081   {0x003E,0x003E,0x003E},  {0x003F,0x003F,0x003F},
00082   {0x0040,0x0040,0x0040},  {0x0041,0x0061,0x0041},
00083   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
00084   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
00085   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
00086   {0x0048,0x0068,0x0048},  {0x0049,0x0069,0x0049},
00087   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
00088   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
00089   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
00090   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
00091   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
00092   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
00093   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
00094   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
00095   {0x005A,0x007A,0x005A},  {0x005B,0x005B,0x005B},
00096   {0x005C,0x005C,0x005C},  {0x005D,0x005D,0x005D},
00097   {0x005E,0x005E,0x005E},  {0x005F,0x005F,0x005F},
00098   {0x0060,0x0060,0x0060},  {0x0041,0x0061,0x0041},
00099   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
00100   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
00101   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
00102   {0x0048,0x0068,0x0048},  {0x0049,0x0069,0x0049},
00103   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
00104   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
00105   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
00106   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
00107   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
00108   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
00109   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
00110   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
00111   {0x005A,0x007A,0x005A},  {0x007B,0x007B,0x007B},
00112   {0x007C,0x007C,0x007C},  {0x007D,0x007D,0x007D},
00113   {0x007E,0x007E,0x007E},  {0x007F,0x007F,0x007F},
00114   {0x0080,0x0080,0x0080},  {0x0081,0x0081,0x0081},
00115   {0x0082,0x0082,0x0082},  {0x0083,0x0083,0x0083},
00116   {0x0084,0x0084,0x0084},  {0x0085,0x0085,0x0085},
00117   {0x0086,0x0086,0x0086},  {0x0087,0x0087,0x0087},
00118   {0x0088,0x0088,0x0088},  {0x0089,0x0089,0x0089},
00119   {0x008A,0x008A,0x008A},  {0x008B,0x008B,0x008B},
00120   {0x008C,0x008C,0x008C},  {0x008D,0x008D,0x008D},
00121   {0x008E,0x008E,0x008E},  {0x008F,0x008F,0x008F},
00122   {0x0090,0x0090,0x0090},  {0x0091,0x0091,0x0091},
00123   {0x0092,0x0092,0x0092},  {0x0093,0x0093,0x0093},
00124   {0x0094,0x0094,0x0094},  {0x0095,0x0095,0x0095},
00125   {0x0096,0x0096,0x0096},  {0x0097,0x0097,0x0097},
00126   {0x0098,0x0098,0x0098},  {0x0099,0x0099,0x0099},
00127   {0x009A,0x009A,0x009A},  {0x009B,0x009B,0x009B},
00128   {0x009C,0x009C,0x009C},  {0x009D,0x009D,0x009D},
00129   {0x009E,0x009E,0x009E},  {0x009F,0x009F,0x009F},
00130   {0x00A0,0x00A0,0x00A0},  {0x00A1,0x00A1,0x00A1},
00131   {0x00A2,0x00A2,0x00A2},  {0x00A3,0x00A3,0x00A3},
00132   {0x00A4,0x00A4,0x00A4},  {0x00A5,0x00A5,0x00A5},
00133   {0x00A6,0x00A6,0x00A6},  {0x00A7,0x00A7,0x00A7},
00134   {0x00A8,0x00A8,0x00A8},  {0x00A9,0x00A9,0x00A9},
00135   {0x00AA,0x00AA,0x00AA},  {0x00AB,0x00AB,0x00AB},
00136   {0x00AC,0x00AC,0x00AC},  {0x00AD,0x00AD,0x00AD},
00137   {0x00AE,0x00AE,0x00AE},  {0x00AF,0x00AF,0x00AF},
00138   {0x00B0,0x00B0,0x00B0},  {0x00B1,0x00B1,0x00B1},
00139   {0x00B2,0x00B2,0x00B2},  {0x00B3,0x00B3,0x00B3},
00140   {0x00B4,0x00B4,0x00B4},  {0x039C,0x00B5,0x039C},
00141   {0x00B6,0x00B6,0x00B6},  {0x00B7,0x00B7,0x00B7},
00142   {0x00B8,0x00B8,0x00B8},  {0x00B9,0x00B9,0x00B9},
00143   {0x00BA,0x00BA,0x00BA},  {0x00BB,0x00BB,0x00BB},
00144   {0x00BC,0x00BC,0x00BC},  {0x00BD,0x00BD,0x00BD},
00145   {0x00BE,0x00BE,0x00BE},  {0x00BF,0x00BF,0x00BF},
00146   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
00147   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
00148   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
00149   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
00150   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
00151   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
00152   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
00153   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
00154   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
00155   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
00156   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
00157   {0x00D6,0x00F6,0x004F},  {0x00D7,0x00D7,0x00D7},
00158   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
00159   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
00160   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
00161   {0x00DE,0x00FE,0x00DE},  {0x00DF,0x00DF,0x0053},
00162   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
00163   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
00164   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
00165   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
00166   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
00167   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
00168   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
00169   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
00170   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
00171   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
00172   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
00173   {0x00D6,0x00F6,0x004F},  {0x00F7,0x00F7,0x00F7},
00174   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
00175   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
00176   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
00177   {0x00DE,0x00FE,0x00DE},  {0x0178,0x00FF,0x0059}
00178 };
00179 
00180 
00181 
00182 static MY_UNICASE_INFO plane01[]={
00183   {0x0100,0x0101,0x0041},  {0x0100,0x0101,0x0041},
00184   {0x0102,0x0103,0x0041},  {0x0102,0x0103,0x0041},
00185   {0x0104,0x0105,0x0041},  {0x0104,0x0105,0x0041},
00186   {0x0106,0x0107,0x0043},  {0x0106,0x0107,0x0043},
00187   {0x0108,0x0109,0x0043},  {0x0108,0x0109,0x0043},
00188   {0x010A,0x010B,0x0043},  {0x010A,0x010B,0x0043},
00189   {0x010C,0x010D,0x0043},  {0x010C,0x010D,0x0043},
00190   {0x010E,0x010F,0x0044},  {0x010E,0x010F,0x0044},
00191   {0x0110,0x0111,0x0110},  {0x0110,0x0111,0x0110},
00192   {0x0112,0x0113,0x0045},  {0x0112,0x0113,0x0045},
00193   {0x0114,0x0115,0x0045},  {0x0114,0x0115,0x0045},
00194   {0x0116,0x0117,0x0045},  {0x0116,0x0117,0x0045},
00195   {0x0118,0x0119,0x0045},  {0x0118,0x0119,0x0045},
00196   {0x011A,0x011B,0x0045},  {0x011A,0x011B,0x0045},
00197   {0x011C,0x011D,0x0047},  {0x011C,0x011D,0x0047},
00198   {0x011E,0x011F,0x0047},  {0x011E,0x011F,0x0047},
00199   {0x0120,0x0121,0x0047},  {0x0120,0x0121,0x0047},
00200   {0x0122,0x0123,0x0047},  {0x0122,0x0123,0x0047},
00201   {0x0124,0x0125,0x0048},  {0x0124,0x0125,0x0048},
00202   {0x0126,0x0127,0x0126},  {0x0126,0x0127,0x0126},
00203   {0x0128,0x0129,0x0049},  {0x0128,0x0129,0x0049},
00204   {0x012A,0x012B,0x0049},  {0x012A,0x012B,0x0049},
00205   {0x012C,0x012D,0x0049},  {0x012C,0x012D,0x0049},
00206   {0x012E,0x012F,0x0049},  {0x012E,0x012F,0x0049},
00207   {0x0130,0x0069,0x0049},  {0x0049,0x0131,0x0049},
00208   {0x0132,0x0133,0x0132},  {0x0132,0x0133,0x0132},
00209   {0x0134,0x0135,0x004A},  {0x0134,0x0135,0x004A},
00210   {0x0136,0x0137,0x004B},  {0x0136,0x0137,0x004B},
00211   {0x0138,0x0138,0x0138},  {0x0139,0x013A,0x004C},
00212   {0x0139,0x013A,0x004C},  {0x013B,0x013C,0x004C},
00213   {0x013B,0x013C,0x004C},  {0x013D,0x013E,0x004C},
00214   {0x013D,0x013E,0x004C},  {0x013F,0x0140,0x013F},
00215   {0x013F,0x0140,0x013F},  {0x0141,0x0142,0x0141},
00216   {0x0141,0x0142,0x0141},  {0x0143,0x0144,0x004E},
00217   {0x0143,0x0144,0x004E},  {0x0145,0x0146,0x004E},
00218   {0x0145,0x0146,0x004E},  {0x0147,0x0148,0x004E},
00219   {0x0147,0x0148,0x004E},  {0x0149,0x0149,0x0149},
00220   {0x014A,0x014B,0x014A},  {0x014A,0x014B,0x014A},
00221   {0x014C,0x014D,0x004F},  {0x014C,0x014D,0x004F},
00222   {0x014E,0x014F,0x004F},  {0x014E,0x014F,0x004F},
00223   {0x0150,0x0151,0x004F},  {0x0150,0x0151,0x004F},
00224   {0x0152,0x0153,0x0152},  {0x0152,0x0153,0x0152},
00225   {0x0154,0x0155,0x0052},  {0x0154,0x0155,0x0052},
00226   {0x0156,0x0157,0x0052},  {0x0156,0x0157,0x0052},
00227   {0x0158,0x0159,0x0052},  {0x0158,0x0159,0x0052},
00228   {0x015A,0x015B,0x0053},  {0x015A,0x015B,0x0053},
00229   {0x015C,0x015D,0x0053},  {0x015C,0x015D,0x0053},
00230   {0x015E,0x015F,0x0053},  {0x015E,0x015F,0x0053},
00231   {0x0160,0x0161,0x0053},  {0x0160,0x0161,0x0053},
00232   {0x0162,0x0163,0x0054},  {0x0162,0x0163,0x0054},
00233   {0x0164,0x0165,0x0054},  {0x0164,0x0165,0x0054},
00234   {0x0166,0x0167,0x0166},  {0x0166,0x0167,0x0166},
00235   {0x0168,0x0169,0x0055},  {0x0168,0x0169,0x0055},
00236   {0x016A,0x016B,0x0055},  {0x016A,0x016B,0x0055},
00237   {0x016C,0x016D,0x0055},  {0x016C,0x016D,0x0055},
00238   {0x016E,0x016F,0x0055},  {0x016E,0x016F,0x0055},
00239   {0x0170,0x0171,0x0055},  {0x0170,0x0171,0x0055},
00240   {0x0172,0x0173,0x0055},  {0x0172,0x0173,0x0055},
00241   {0x0174,0x0175,0x0057},  {0x0174,0x0175,0x0057},
00242   {0x0176,0x0177,0x0059},  {0x0176,0x0177,0x0059},
00243   {0x0178,0x00FF,0x0059},  {0x0179,0x017A,0x005A},
00244   {0x0179,0x017A,0x005A},  {0x017B,0x017C,0x005A},
00245   {0x017B,0x017C,0x005A},  {0x017D,0x017E,0x005A},
00246   {0x017D,0x017E,0x005A},  {0x0053,0x017F,0x0053},
00247   {0x0180,0x0180,0x0180},  {0x0181,0x0253,0x0181},
00248   {0x0182,0x0183,0x0182},  {0x0182,0x0183,0x0182},
00249   {0x0184,0x0185,0x0184},  {0x0184,0x0185,0x0184},
00250   {0x0186,0x0254,0x0186},  {0x0187,0x0188,0x0187},
00251   {0x0187,0x0188,0x0187},  {0x0189,0x0256,0x0189},
00252   {0x018A,0x0257,0x018A},  {0x018B,0x018C,0x018B},
00253   {0x018B,0x018C,0x018B},  {0x018D,0x018D,0x018D},
00254   {0x018E,0x01DD,0x018E},  {0x018F,0x0259,0x018F},
00255   {0x0190,0x025B,0x0190},  {0x0191,0x0192,0x0191},
00256   {0x0191,0x0192,0x0191},  {0x0193,0x0260,0x0193},
00257   {0x0194,0x0263,0x0194},  {0x01F6,0x0195,0x01F6},
00258   {0x0196,0x0269,0x0196},  {0x0197,0x0268,0x0197},
00259   {0x0198,0x0199,0x0198},  {0x0198,0x0199,0x0198},
00260   {0x019A,0x019A,0x019A},  {0x019B,0x019B,0x019B},
00261   {0x019C,0x026F,0x019C},  {0x019D,0x0272,0x019D},
00262   {0x019E,0x019E,0x019E},  {0x019F,0x0275,0x019F},
00263   {0x01A0,0x01A1,0x004F},  {0x01A0,0x01A1,0x004F},
00264   {0x01A2,0x01A3,0x01A2},  {0x01A2,0x01A3,0x01A2},
00265   {0x01A4,0x01A5,0x01A4},  {0x01A4,0x01A5,0x01A4},
00266   {0x01A6,0x0280,0x01A6},  {0x01A7,0x01A8,0x01A7},
00267   {0x01A7,0x01A8,0x01A7},  {0x01A9,0x0283,0x01A9},
00268   {0x01AA,0x01AA,0x01AA},  {0x01AB,0x01AB,0x01AB},
00269   {0x01AC,0x01AD,0x01AC},  {0x01AC,0x01AD,0x01AC},
00270   {0x01AE,0x0288,0x01AE},  {0x01AF,0x01B0,0x0055},
00271   {0x01AF,0x01B0,0x0055},  {0x01B1,0x028A,0x01B1},
00272   {0x01B2,0x028B,0x01B2},  {0x01B3,0x01B4,0x01B3},
00273   {0x01B3,0x01B4,0x01B3},  {0x01B5,0x01B6,0x01B5},
00274   {0x01B5,0x01B6,0x01B5},  {0x01B7,0x0292,0x01B7},
00275   {0x01B8,0x01B9,0x01B8},  {0x01B8,0x01B9,0x01B8},
00276   {0x01BA,0x01BA,0x01BA},  {0x01BB,0x01BB,0x01BB},
00277   {0x01BC,0x01BD,0x01BC},  {0x01BC,0x01BD,0x01BC},
00278   {0x01BE,0x01BE,0x01BE},  {0x01F7,0x01BF,0x01F7},
00279   {0x01C0,0x01C0,0x01C0},  {0x01C1,0x01C1,0x01C1},
00280   {0x01C2,0x01C2,0x01C2},  {0x01C3,0x01C3,0x01C3},
00281   {0x01C4,0x01C6,0x01C4},  {0x01C4,0x01C6,0x01C4},
00282   {0x01C4,0x01C6,0x01C4},  {0x01C7,0x01C9,0x01C7},
00283   {0x01C7,0x01C9,0x01C7},  {0x01C7,0x01C9,0x01C7},
00284   {0x01CA,0x01CC,0x01CA},  {0x01CA,0x01CC,0x01CA},
00285   {0x01CA,0x01CC,0x01CA},  {0x01CD,0x01CE,0x0041},
00286   {0x01CD,0x01CE,0x0041},  {0x01CF,0x01D0,0x0049},
00287   {0x01CF,0x01D0,0x0049},  {0x01D1,0x01D2,0x004F},
00288   {0x01D1,0x01D2,0x004F},  {0x01D3,0x01D4,0x0055},
00289   {0x01D3,0x01D4,0x0055},  {0x01D5,0x01D6,0x0055},
00290   {0x01D5,0x01D6,0x0055},  {0x01D7,0x01D8,0x0055},
00291   {0x01D7,0x01D8,0x0055},  {0x01D9,0x01DA,0x0055},
00292   {0x01D9,0x01DA,0x0055},  {0x01DB,0x01DC,0x0055},
00293   {0x01DB,0x01DC,0x0055},  {0x018E,0x01DD,0x018E},
00294   {0x01DE,0x01DF,0x0041},  {0x01DE,0x01DF,0x0041},
00295   {0x01E0,0x01E1,0x0041},  {0x01E0,0x01E1,0x0041},
00296   {0x01E2,0x01E3,0x00C6},  {0x01E2,0x01E3,0x00C6},
00297   {0x01E4,0x01E5,0x01E4},  {0x01E4,0x01E5,0x01E4},
00298   {0x01E6,0x01E7,0x0047},  {0x01E6,0x01E7,0x0047},
00299   {0x01E8,0x01E9,0x004B},  {0x01E8,0x01E9,0x004B},
00300   {0x01EA,0x01EB,0x004F},  {0x01EA,0x01EB,0x004F},
00301   {0x01EC,0x01ED,0x004F},  {0x01EC,0x01ED,0x004F},
00302   {0x01EE,0x01EF,0x01B7},  {0x01EE,0x01EF,0x01B7},
00303   {0x01F0,0x01F0,0x004A},  {0x01F1,0x01F3,0x01F1},
00304   {0x01F1,0x01F3,0x01F1},  {0x01F1,0x01F3,0x01F1},
00305   {0x01F4,0x01F5,0x0047},  {0x01F4,0x01F5,0x0047},
00306   {0x01F6,0x0195,0x01F6},  {0x01F7,0x01BF,0x01F7},
00307   {0x01F8,0x01F9,0x004E},  {0x01F8,0x01F9,0x004E},
00308   {0x01FA,0x01FB,0x0041},  {0x01FA,0x01FB,0x0041},
00309   {0x01FC,0x01FD,0x00C6},  {0x01FC,0x01FD,0x00C6},
00310   {0x01FE,0x01FF,0x00D8},  {0x01FE,0x01FF,0x00D8}
00311 };
00312 
00313 static MY_UNICASE_INFO plane02[]={
00314   {0x0200,0x0201,0x0041},  {0x0200,0x0201,0x0041},
00315   {0x0202,0x0203,0x0041},  {0x0202,0x0203,0x0041},
00316   {0x0204,0x0205,0x0045},  {0x0204,0x0205,0x0045},
00317   {0x0206,0x0207,0x0045},  {0x0206,0x0207,0x0045},
00318   {0x0208,0x0209,0x0049},  {0x0208,0x0209,0x0049},
00319   {0x020A,0x020B,0x0049},  {0x020A,0x020B,0x0049},
00320   {0x020C,0x020D,0x004F},  {0x020C,0x020D,0x004F},
00321   {0x020E,0x020F,0x004F},  {0x020E,0x020F,0x004F},
00322   {0x0210,0x0211,0x0052},  {0x0210,0x0211,0x0052},
00323   {0x0212,0x0213,0x0052},  {0x0212,0x0213,0x0052},
00324   {0x0214,0x0215,0x0055},  {0x0214,0x0215,0x0055},
00325   {0x0216,0x0217,0x0055},  {0x0216,0x0217,0x0055},
00326   {0x0218,0x0219,0x0053},  {0x0218,0x0219,0x0053},
00327   {0x021A,0x021B,0x0054},  {0x021A,0x021B,0x0054},
00328   {0x021C,0x021D,0x021C},  {0x021C,0x021D,0x021C},
00329   {0x021E,0x021F,0x0048},  {0x021E,0x021F,0x0048},
00330   {0x0220,0x0220,0x0220},  {0x0221,0x0221,0x0221},
00331   {0x0222,0x0223,0x0222},  {0x0222,0x0223,0x0222},
00332   {0x0224,0x0225,0x0224},  {0x0224,0x0225,0x0224},
00333   {0x0226,0x0227,0x0041},  {0x0226,0x0227,0x0041},
00334   {0x0228,0x0229,0x0045},  {0x0228,0x0229,0x0045},
00335   {0x022A,0x022B,0x004F},  {0x022A,0x022B,0x004F},
00336   {0x022C,0x022D,0x004F},  {0x022C,0x022D,0x004F},
00337   {0x022E,0x022F,0x004F},  {0x022E,0x022F,0x004F},
00338   {0x0230,0x0231,0x004F},  {0x0230,0x0231,0x004F},
00339   {0x0232,0x0233,0x0059},  {0x0232,0x0233,0x0059},
00340   {0x0234,0x0234,0x0234},  {0x0235,0x0235,0x0235},
00341   {0x0236,0x0236,0x0236},  {0x0237,0x0237,0x0237},
00342   {0x0238,0x0238,0x0238},  {0x0239,0x0239,0x0239},
00343   {0x023A,0x023A,0x023A},  {0x023B,0x023B,0x023B},
00344   {0x023C,0x023C,0x023C},  {0x023D,0x023D,0x023D},
00345   {0x023E,0x023E,0x023E},  {0x023F,0x023F,0x023F},
00346   {0x0240,0x0240,0x0240},  {0x0241,0x0241,0x0241},
00347   {0x0242,0x0242,0x0242},  {0x0243,0x0243,0x0243},
00348   {0x0244,0x0244,0x0244},  {0x0245,0x0245,0x0245},
00349   {0x0246,0x0246,0x0246},  {0x0247,0x0247,0x0247},
00350   {0x0248,0x0248,0x0248},  {0x0249,0x0249,0x0249},
00351   {0x024A,0x024A,0x024A},  {0x024B,0x024B,0x024B},
00352   {0x024C,0x024C,0x024C},  {0x024D,0x024D,0x024D},
00353   {0x024E,0x024E,0x024E},  {0x024F,0x024F,0x024F},
00354   {0x0250,0x0250,0x0250},  {0x0251,0x0251,0x0251},
00355   {0x0252,0x0252,0x0252},  {0x0181,0x0253,0x0181},
00356   {0x0186,0x0254,0x0186},  {0x0255,0x0255,0x0255},
00357   {0x0189,0x0256,0x0189},  {0x018A,0x0257,0x018A},
00358   {0x0258,0x0258,0x0258},  {0x018F,0x0259,0x018F},
00359   {0x025A,0x025A,0x025A},  {0x0190,0x025B,0x0190},
00360   {0x025C,0x025C,0x025C},  {0x025D,0x025D,0x025D},
00361   {0x025E,0x025E,0x025E},  {0x025F,0x025F,0x025F},
00362   {0x0193,0x0260,0x0193},  {0x0261,0x0261,0x0261},
00363   {0x0262,0x0262,0x0262},  {0x0194,0x0263,0x0194},
00364   {0x0264,0x0264,0x0264},  {0x0265,0x0265,0x0265},
00365   {0x0266,0x0266,0x0266},  {0x0267,0x0267,0x0267},
00366   {0x0197,0x0268,0x0197},  {0x0196,0x0269,0x0196},
00367   {0x026A,0x026A,0x026A},  {0x026B,0x026B,0x026B},
00368   {0x026C,0x026C,0x026C},  {0x026D,0x026D,0x026D},
00369   {0x026E,0x026E,0x026E},  {0x019C,0x026F,0x019C},
00370   {0x0270,0x0270,0x0270},  {0x0271,0x0271,0x0271},
00371   {0x019D,0x0272,0x019D},  {0x0273,0x0273,0x0273},
00372   {0x0274,0x0274,0x0274},  {0x019F,0x0275,0x019F},
00373   {0x0276,0x0276,0x0276},  {0x0277,0x0277,0x0277},
00374   {0x0278,0x0278,0x0278},  {0x0279,0x0279,0x0279},
00375   {0x027A,0x027A,0x027A},  {0x027B,0x027B,0x027B},
00376   {0x027C,0x027C,0x027C},  {0x027D,0x027D,0x027D},
00377   {0x027E,0x027E,0x027E},  {0x027F,0x027F,0x027F},
00378   {0x01A6,0x0280,0x01A6},  {0x0281,0x0281,0x0281},
00379   {0x0282,0x0282,0x0282},  {0x01A9,0x0283,0x01A9},
00380   {0x0284,0x0284,0x0284},  {0x0285,0x0285,0x0285},
00381   {0x0286,0x0286,0x0286},  {0x0287,0x0287,0x0287},
00382   {0x01AE,0x0288,0x01AE},  {0x0289,0x0289,0x0289},
00383   {0x01B1,0x028A,0x01B1},  {0x01B2,0x028B,0x01B2},
00384   {0x028C,0x028C,0x028C},  {0x028D,0x028D,0x028D},
00385   {0x028E,0x028E,0x028E},  {0x028F,0x028F,0x028F},
00386   {0x0290,0x0290,0x0290},  {0x0291,0x0291,0x0291},
00387   {0x01B7,0x0292,0x01B7},  {0x0293,0x0293,0x0293},
00388   {0x0294,0x0294,0x0294},  {0x0295,0x0295,0x0295},
00389   {0x0296,0x0296,0x0296},  {0x0297,0x0297,0x0297},
00390   {0x0298,0x0298,0x0298},  {0x0299,0x0299,0x0299},
00391   {0x029A,0x029A,0x029A},  {0x029B,0x029B,0x029B},
00392   {0x029C,0x029C,0x029C},  {0x029D,0x029D,0x029D},
00393   {0x029E,0x029E,0x029E},  {0x029F,0x029F,0x029F},
00394   {0x02A0,0x02A0,0x02A0},  {0x02A1,0x02A1,0x02A1},
00395   {0x02A2,0x02A2,0x02A2},  {0x02A3,0x02A3,0x02A3},
00396   {0x02A4,0x02A4,0x02A4},  {0x02A5,0x02A5,0x02A5},
00397   {0x02A6,0x02A6,0x02A6},  {0x02A7,0x02A7,0x02A7},
00398   {0x02A8,0x02A8,0x02A8},  {0x02A9,0x02A9,0x02A9},
00399   {0x02AA,0x02AA,0x02AA},  {0x02AB,0x02AB,0x02AB},
00400   {0x02AC,0x02AC,0x02AC},  {0x02AD,0x02AD,0x02AD},
00401   {0x02AE,0x02AE,0x02AE},  {0x02AF,0x02AF,0x02AF},
00402   {0x02B0,0x02B0,0x02B0},  {0x02B1,0x02B1,0x02B1},
00403   {0x02B2,0x02B2,0x02B2},  {0x02B3,0x02B3,0x02B3},
00404   {0x02B4,0x02B4,0x02B4},  {0x02B5,0x02B5,0x02B5},
00405   {0x02B6,0x02B6,0x02B6},  {0x02B7,0x02B7,0x02B7},
00406   {0x02B8,0x02B8,0x02B8},  {0x02B9,0x02B9,0x02B9},
00407   {0x02BA,0x02BA,0x02BA},  {0x02BB,0x02BB,0x02BB},
00408   {0x02BC,0x02BC,0x02BC},  {0x02BD,0x02BD,0x02BD},
00409   {0x02BE,0x02BE,0x02BE},  {0x02BF,0x02BF,0x02BF},
00410   {0x02C0,0x02C0,0x02C0},  {0x02C1,0x02C1,0x02C1},
00411   {0x02C2,0x02C2,0x02C2},  {0x02C3,0x02C3,0x02C3},
00412   {0x02C4,0x02C4,0x02C4},  {0x02C5,0x02C5,0x02C5},
00413   {0x02C6,0x02C6,0x02C6},  {0x02C7,0x02C7,0x02C7},
00414   {0x02C8,0x02C8,0x02C8},  {0x02C9,0x02C9,0x02C9},
00415   {0x02CA,0x02CA,0x02CA},  {0x02CB,0x02CB,0x02CB},
00416   {0x02CC,0x02CC,0x02CC},  {0x02CD,0x02CD,0x02CD},
00417   {0x02CE,0x02CE,0x02CE},  {0x02CF,0x02CF,0x02CF},
00418   {0x02D0,0x02D0,0x02D0},  {0x02D1,0x02D1,0x02D1},
00419   {0x02D2,0x02D2,0x02D2},  {0x02D3,0x02D3,0x02D3},
00420   {0x02D4,0x02D4,0x02D4},  {0x02D5,0x02D5,0x02D5},
00421   {0x02D6,0x02D6,0x02D6},  {0x02D7,0x02D7,0x02D7},
00422   {0x02D8,0x02D8,0x02D8},  {0x02D9,0x02D9,0x02D9},
00423   {0x02DA,0x02DA,0x02DA},  {0x02DB,0x02DB,0x02DB},
00424   {0x02DC,0x02DC,0x02DC},  {0x02DD,0x02DD,0x02DD},
00425   {0x02DE,0x02DE,0x02DE},  {0x02DF,0x02DF,0x02DF},
00426   {0x02E0,0x02E0,0x02E0},  {0x02E1,0x02E1,0x02E1},
00427   {0x02E2,0x02E2,0x02E2},  {0x02E3,0x02E3,0x02E3},
00428   {0x02E4,0x02E4,0x02E4},  {0x02E5,0x02E5,0x02E5},
00429   {0x02E6,0x02E6,0x02E6},  {0x02E7,0x02E7,0x02E7},
00430   {0x02E8,0x02E8,0x02E8},  {0x02E9,0x02E9,0x02E9},
00431   {0x02EA,0x02EA,0x02EA},  {0x02EB,0x02EB,0x02EB},
00432   {0x02EC,0x02EC,0x02EC},  {0x02ED,0x02ED,0x02ED},
00433   {0x02EE,0x02EE,0x02EE},  {0x02EF,0x02EF,0x02EF},
00434   {0x02F0,0x02F0,0x02F0},  {0x02F1,0x02F1,0x02F1},
00435   {0x02F2,0x02F2,0x02F2},  {0x02F3,0x02F3,0x02F3},
00436   {0x02F4,0x02F4,0x02F4},  {0x02F5,0x02F5,0x02F5},
00437   {0x02F6,0x02F6,0x02F6},  {0x02F7,0x02F7,0x02F7},
00438   {0x02F8,0x02F8,0x02F8},  {0x02F9,0x02F9,0x02F9},
00439   {0x02FA,0x02FA,0x02FA},  {0x02FB,0x02FB,0x02FB},
00440   {0x02FC,0x02FC,0x02FC},  {0x02FD,0x02FD,0x02FD},
00441   {0x02FE,0x02FE,0x02FE},  {0x02FF,0x02FF,0x02FF}
00442 };
00443 
00444 static MY_UNICASE_INFO plane03[]={
00445   {0x0300,0x0300,0x0300},  {0x0301,0x0301,0x0301},
00446   {0x0302,0x0302,0x0302},  {0x0303,0x0303,0x0303},
00447   {0x0304,0x0304,0x0304},  {0x0305,0x0305,0x0305},
00448   {0x0306,0x0306,0x0306},  {0x0307,0x0307,0x0307},
00449   {0x0308,0x0308,0x0308},  {0x0309,0x0309,0x0309},
00450   {0x030A,0x030A,0x030A},  {0x030B,0x030B,0x030B},
00451   {0x030C,0x030C,0x030C},  {0x030D,0x030D,0x030D},
00452   {0x030E,0x030E,0x030E},  {0x030F,0x030F,0x030F},
00453   {0x0310,0x0310,0x0310},  {0x0311,0x0311,0x0311},
00454   {0x0312,0x0312,0x0312},  {0x0313,0x0313,0x0313},
00455   {0x0314,0x0314,0x0314},  {0x0315,0x0315,0x0315},
00456   {0x0316,0x0316,0x0316},  {0x0317,0x0317,0x0317},
00457   {0x0318,0x0318,0x0318},  {0x0319,0x0319,0x0319},
00458   {0x031A,0x031A,0x031A},  {0x031B,0x031B,0x031B},
00459   {0x031C,0x031C,0x031C},  {0x031D,0x031D,0x031D},
00460   {0x031E,0x031E,0x031E},  {0x031F,0x031F,0x031F},
00461   {0x0320,0x0320,0x0320},  {0x0321,0x0321,0x0321},
00462   {0x0322,0x0322,0x0322},  {0x0323,0x0323,0x0323},
00463   {0x0324,0x0324,0x0324},  {0x0325,0x0325,0x0325},
00464   {0x0326,0x0326,0x0326},  {0x0327,0x0327,0x0327},
00465   {0x0328,0x0328,0x0328},  {0x0329,0x0329,0x0329},
00466   {0x032A,0x032A,0x032A},  {0x032B,0x032B,0x032B},
00467   {0x032C,0x032C,0x032C},  {0x032D,0x032D,0x032D},
00468   {0x032E,0x032E,0x032E},  {0x032F,0x032F,0x032F},
00469   {0x0330,0x0330,0x0330},  {0x0331,0x0331,0x0331},
00470   {0x0332,0x0332,0x0332},  {0x0333,0x0333,0x0333},
00471   {0x0334,0x0334,0x0334},  {0x0335,0x0335,0x0335},
00472   {0x0336,0x0336,0x0336},  {0x0337,0x0337,0x0337},
00473   {0x0338,0x0338,0x0338},  {0x0339,0x0339,0x0339},
00474   {0x033A,0x033A,0x033A},  {0x033B,0x033B,0x033B},
00475   {0x033C,0x033C,0x033C},  {0x033D,0x033D,0x033D},
00476   {0x033E,0x033E,0x033E},  {0x033F,0x033F,0x033F},
00477   {0x0340,0x0340,0x0340},  {0x0341,0x0341,0x0341},
00478   {0x0342,0x0342,0x0342},  {0x0343,0x0343,0x0343},
00479   {0x0344,0x0344,0x0344},  {0x0399,0x0345,0x0399},
00480   {0x0346,0x0346,0x0346},  {0x0347,0x0347,0x0347},
00481   {0x0348,0x0348,0x0348},  {0x0349,0x0349,0x0349},
00482   {0x034A,0x034A,0x034A},  {0x034B,0x034B,0x034B},
00483   {0x034C,0x034C,0x034C},  {0x034D,0x034D,0x034D},
00484   {0x034E,0x034E,0x034E},  {0x034F,0x034F,0x034F},
00485   {0x0350,0x0350,0x0350},  {0x0351,0x0351,0x0351},
00486   {0x0352,0x0352,0x0352},  {0x0353,0x0353,0x0353},
00487   {0x0354,0x0354,0x0354},  {0x0355,0x0355,0x0355},
00488   {0x0356,0x0356,0x0356},  {0x0357,0x0357,0x0357},
00489   {0x0358,0x0358,0x0358},  {0x0359,0x0359,0x0359},
00490   {0x035A,0x035A,0x035A},  {0x035B,0x035B,0x035B},
00491   {0x035C,0x035C,0x035C},  {0x035D,0x035D,0x035D},
00492   {0x035E,0x035E,0x035E},  {0x035F,0x035F,0x035F},
00493   {0x0360,0x0360,0x0360},  {0x0361,0x0361,0x0361},
00494   {0x0362,0x0362,0x0362},  {0x0363,0x0363,0x0363},
00495   {0x0364,0x0364,0x0364},  {0x0365,0x0365,0x0365},
00496   {0x0366,0x0366,0x0366},  {0x0367,0x0367,0x0367},
00497   {0x0368,0x0368,0x0368},  {0x0369,0x0369,0x0369},
00498   {0x036A,0x036A,0x036A},  {0x036B,0x036B,0x036B},
00499   {0x036C,0x036C,0x036C},  {0x036D,0x036D,0x036D},
00500   {0x036E,0x036E,0x036E},  {0x036F,0x036F,0x036F},
00501   {0x0370,0x0370,0x0370},  {0x0371,0x0371,0x0371},
00502   {0x0372,0x0372,0x0372},  {0x0373,0x0373,0x0373},
00503   {0x0374,0x0374,0x0374},  {0x0375,0x0375,0x0375},
00504   {0x0376,0x0376,0x0376},  {0x0377,0x0377,0x0377},
00505   {0x0378,0x0378,0x0378},  {0x0379,0x0379,0x0379},
00506   {0x037A,0x037A,0x037A},  {0x037B,0x037B,0x037B},
00507   {0x037C,0x037C,0x037C},  {0x037D,0x037D,0x037D},
00508   {0x037E,0x037E,0x037E},  {0x037F,0x037F,0x037F},
00509   {0x0380,0x0380,0x0380},  {0x0381,0x0381,0x0381},
00510   {0x0382,0x0382,0x0382},  {0x0383,0x0383,0x0383},
00511   {0x0384,0x0384,0x0384},  {0x0385,0x0385,0x0385},
00512   {0x0386,0x03AC,0x0391},  {0x0387,0x0387,0x0387},
00513   {0x0388,0x03AD,0x0395},  {0x0389,0x03AE,0x0397},
00514   {0x038A,0x03AF,0x0399},  {0x038B,0x038B,0x038B},
00515   {0x038C,0x03CC,0x039F},  {0x038D,0x038D,0x038D},
00516   {0x038E,0x03CD,0x03A5},  {0x038F,0x03CE,0x03A9},
00517   {0x0390,0x0390,0x0399},  {0x0391,0x03B1,0x0391},
00518   {0x0392,0x03B2,0x0392},  {0x0393,0x03B3,0x0393},
00519   {0x0394,0x03B4,0x0394},  {0x0395,0x03B5,0x0395},
00520   {0x0396,0x03B6,0x0396},  {0x0397,0x03B7,0x0397},
00521   {0x0398,0x03B8,0x0398},  {0x0399,0x03B9,0x0399},
00522   {0x039A,0x03BA,0x039A},  {0x039B,0x03BB,0x039B},
00523   {0x039C,0x03BC,0x039C},  {0x039D,0x03BD,0x039D},
00524   {0x039E,0x03BE,0x039E},  {0x039F,0x03BF,0x039F},
00525   {0x03A0,0x03C0,0x03A0},  {0x03A1,0x03C1,0x03A1},
00526   {0x03A2,0x03A2,0x03A2},  {0x03A3,0x03C3,0x03A3},
00527   {0x03A4,0x03C4,0x03A4},  {0x03A5,0x03C5,0x03A5},
00528   {0x03A6,0x03C6,0x03A6},  {0x03A7,0x03C7,0x03A7},
00529   {0x03A8,0x03C8,0x03A8},  {0x03A9,0x03C9,0x03A9},
00530   {0x03AA,0x03CA,0x0399},  {0x03AB,0x03CB,0x03A5},
00531   {0x0386,0x03AC,0x0391},  {0x0388,0x03AD,0x0395},
00532   {0x0389,0x03AE,0x0397},  {0x038A,0x03AF,0x0399},
00533   {0x03B0,0x03B0,0x03A5},  {0x0391,0x03B1,0x0391},
00534   {0x0392,0x03B2,0x0392},  {0x0393,0x03B3,0x0393},
00535   {0x0394,0x03B4,0x0394},  {0x0395,0x03B5,0x0395},
00536   {0x0396,0x03B6,0x0396},  {0x0397,0x03B7,0x0397},
00537   {0x0398,0x03B8,0x0398},  {0x0399,0x03B9,0x0399},
00538   {0x039A,0x03BA,0x039A},  {0x039B,0x03BB,0x039B},
00539   {0x039C,0x03BC,0x039C},  {0x039D,0x03BD,0x039D},
00540   {0x039E,0x03BE,0x039E},  {0x039F,0x03BF,0x039F},
00541   {0x03A0,0x03C0,0x03A0},  {0x03A1,0x03C1,0x03A1},
00542   {0x03A3,0x03C2,0x03A3},  {0x03A3,0x03C3,0x03A3},
00543   {0x03A4,0x03C4,0x03A4},  {0x03A5,0x03C5,0x03A5},
00544   {0x03A6,0x03C6,0x03A6},  {0x03A7,0x03C7,0x03A7},
00545   {0x03A8,0x03C8,0x03A8},  {0x03A9,0x03C9,0x03A9},
00546   {0x03AA,0x03CA,0x0399},  {0x03AB,0x03CB,0x03A5},
00547   {0x038C,0x03CC,0x039F},  {0x038E,0x03CD,0x03A5},
00548   {0x038F,0x03CE,0x03A9},  {0x03CF,0x03CF,0x03CF},
00549   {0x0392,0x03D0,0x0392},  {0x0398,0x03D1,0x0398},
00550   {0x03D2,0x03D2,0x03D2},  {0x03D3,0x03D3,0x03D2},
00551   {0x03D4,0x03D4,0x03D2},  {0x03A6,0x03D5,0x03A6},
00552   {0x03A0,0x03D6,0x03A0},  {0x03D7,0x03D7,0x03D7},
00553   {0x03D8,0x03D8,0x03D8},  {0x03D9,0x03D9,0x03D9},
00554   {0x03DA,0x03DB,0x03DA},  {0x03DA,0x03DB,0x03DA},
00555   {0x03DC,0x03DD,0x03DC},  {0x03DC,0x03DD,0x03DC},
00556   {0x03DE,0x03DF,0x03DE},  {0x03DE,0x03DF,0x03DE},
00557   {0x03E0,0x03E1,0x03E0},  {0x03E0,0x03E1,0x03E0},
00558   {0x03E2,0x03E3,0x03E2},  {0x03E2,0x03E3,0x03E2},
00559   {0x03E4,0x03E5,0x03E4},  {0x03E4,0x03E5,0x03E4},
00560   {0x03E6,0x03E7,0x03E6},  {0x03E6,0x03E7,0x03E6},
00561   {0x03E8,0x03E9,0x03E8},  {0x03E8,0x03E9,0x03E8},
00562   {0x03EA,0x03EB,0x03EA},  {0x03EA,0x03EB,0x03EA},
00563   {0x03EC,0x03ED,0x03EC},  {0x03EC,0x03ED,0x03EC},
00564   {0x03EE,0x03EF,0x03EE},  {0x03EE,0x03EF,0x03EE},
00565   {0x039A,0x03F0,0x039A},  {0x03A1,0x03F1,0x03A1},
00566   {0x03A3,0x03F2,0x03A3},  {0x03F3,0x03F3,0x03F3},
00567   {0x03F4,0x03F4,0x03F4},  {0x03F5,0x03F5,0x03F5},
00568   {0x03F6,0x03F6,0x03F6},  {0x03F7,0x03F7,0x03F7},
00569   {0x03F8,0x03F8,0x03F8},  {0x03F9,0x03F9,0x03F9},
00570   {0x03FA,0x03FA,0x03FA},  {0x03FB,0x03FB,0x03FB},
00571   {0x03FC,0x03FC,0x03FC},  {0x03FD,0x03FD,0x03FD},
00572   {0x03FE,0x03FE,0x03FE},  {0x03FF,0x03FF,0x03FF}
00573 };
00574 
00575 static MY_UNICASE_INFO plane04[]={
00576   {0x0400,0x0450,0x0415},  {0x0401,0x0451,0x0415},
00577   {0x0402,0x0452,0x0402},  {0x0403,0x0453,0x0413},
00578   {0x0404,0x0454,0x0404},  {0x0405,0x0455,0x0405},
00579   {0x0406,0x0456,0x0406},  {0x0407,0x0457,0x0406},
00580   {0x0408,0x0458,0x0408},  {0x0409,0x0459,0x0409},
00581   {0x040A,0x045A,0x040A},  {0x040B,0x045B,0x040B},
00582   {0x040C,0x045C,0x041A},  {0x040D,0x045D,0x0418},
00583   {0x040E,0x045E,0x0423},  {0x040F,0x045F,0x040F},
00584   {0x0410,0x0430,0x0410},  {0x0411,0x0431,0x0411},
00585   {0x0412,0x0432,0x0412},  {0x0413,0x0433,0x0413},
00586   {0x0414,0x0434,0x0414},  {0x0415,0x0435,0x0415},
00587   {0x0416,0x0436,0x0416},  {0x0417,0x0437,0x0417},
00588   {0x0418,0x0438,0x0418},  {0x0419,0x0439,0x0419},
00589   {0x041A,0x043A,0x041A},  {0x041B,0x043B,0x041B},
00590   {0x041C,0x043C,0x041C},  {0x041D,0x043D,0x041D},
00591   {0x041E,0x043E,0x041E},  {0x041F,0x043F,0x041F},
00592   {0x0420,0x0440,0x0420},  {0x0421,0x0441,0x0421},
00593   {0x0422,0x0442,0x0422},  {0x0423,0x0443,0x0423},
00594   {0x0424,0x0444,0x0424},  {0x0425,0x0445,0x0425},
00595   {0x0426,0x0446,0x0426},  {0x0427,0x0447,0x0427},
00596   {0x0428,0x0448,0x0428},  {0x0429,0x0449,0x0429},
00597   {0x042A,0x044A,0x042A},  {0x042B,0x044B,0x042B},
00598   {0x042C,0x044C,0x042C},  {0x042D,0x044D,0x042D},
00599   {0x042E,0x044E,0x042E},  {0x042F,0x044F,0x042F},
00600   {0x0410,0x0430,0x0410},  {0x0411,0x0431,0x0411},
00601   {0x0412,0x0432,0x0412},  {0x0413,0x0433,0x0413},
00602   {0x0414,0x0434,0x0414},  {0x0415,0x0435,0x0415},
00603   {0x0416,0x0436,0x0416},  {0x0417,0x0437,0x0417},
00604   {0x0418,0x0438,0x0418},  {0x0419,0x0439,0x0419},
00605   {0x041A,0x043A,0x041A},  {0x041B,0x043B,0x041B},
00606   {0x041C,0x043C,0x041C},  {0x041D,0x043D,0x041D},
00607   {0x041E,0x043E,0x041E},  {0x041F,0x043F,0x041F},
00608   {0x0420,0x0440,0x0420},  {0x0421,0x0441,0x0421},
00609   {0x0422,0x0442,0x0422},  {0x0423,0x0443,0x0423},
00610   {0x0424,0x0444,0x0424},  {0x0425,0x0445,0x0425},
00611   {0x0426,0x0446,0x0426},  {0x0427,0x0447,0x0427},
00612   {0x0428,0x0448,0x0428},  {0x0429,0x0449,0x0429},
00613   {0x042A,0x044A,0x042A},  {0x042B,0x044B,0x042B},
00614   {0x042C,0x044C,0x042C},  {0x042D,0x044D,0x042D},
00615   {0x042E,0x044E,0x042E},  {0x042F,0x044F,0x042F},
00616   {0x0400,0x0450,0x0415},  {0x0401,0x0451,0x0415},
00617   {0x0402,0x0452,0x0402},  {0x0403,0x0453,0x0413},
00618   {0x0404,0x0454,0x0404},  {0x0405,0x0455,0x0405},
00619   {0x0406,0x0456,0x0406},  {0x0407,0x0457,0x0406},
00620   {0x0408,0x0458,0x0408},  {0x0409,0x0459,0x0409},
00621   {0x040A,0x045A,0x040A},  {0x040B,0x045B,0x040B},
00622   {0x040C,0x045C,0x041A},  {0x040D,0x045D,0x0418},
00623   {0x040E,0x045E,0x0423},  {0x040F,0x045F,0x040F},
00624   {0x0460,0x0461,0x0460},  {0x0460,0x0461,0x0460},
00625   {0x0462,0x0463,0x0462},  {0x0462,0x0463,0x0462},
00626   {0x0464,0x0465,0x0464},  {0x0464,0x0465,0x0464},
00627   {0x0466,0x0467,0x0466},  {0x0466,0x0467,0x0466},
00628   {0x0468,0x0469,0x0468},  {0x0468,0x0469,0x0468},
00629   {0x046A,0x046B,0x046A},  {0x046A,0x046B,0x046A},
00630   {0x046C,0x046D,0x046C},  {0x046C,0x046D,0x046C},
00631   {0x046E,0x046F,0x046E},  {0x046E,0x046F,0x046E},
00632   {0x0470,0x0471,0x0470},  {0x0470,0x0471,0x0470},
00633   {0x0472,0x0473,0x0472},  {0x0472,0x0473,0x0472},
00634   {0x0474,0x0475,0x0474},  {0x0474,0x0475,0x0474},
00635   {0x0476,0x0477,0x0474},  {0x0476,0x0477,0x0474},
00636   {0x0478,0x0479,0x0478},  {0x0478,0x0479,0x0478},
00637   {0x047A,0x047B,0x047A},  {0x047A,0x047B,0x047A},
00638   {0x047C,0x047D,0x047C},  {0x047C,0x047D,0x047C},
00639   {0x047E,0x047F,0x047E},  {0x047E,0x047F,0x047E},
00640   {0x0480,0x0481,0x0480},  {0x0480,0x0481,0x0480},
00641   {0x0482,0x0482,0x0482},  {0x0483,0x0483,0x0483},
00642   {0x0484,0x0484,0x0484},  {0x0485,0x0485,0x0485},
00643   {0x0486,0x0486,0x0486},  {0x0487,0x0487,0x0487},
00644   {0x0488,0x0488,0x0488},  {0x0489,0x0489,0x0489},
00645   {0x048A,0x048A,0x048A},  {0x048B,0x048B,0x048B},
00646   {0x048C,0x048D,0x048C},  {0x048C,0x048D,0x048C},
00647   {0x048E,0x048F,0x048E},  {0x048E,0x048F,0x048E},
00648   {0x0490,0x0491,0x0490},  {0x0490,0x0491,0x0490},
00649   {0x0492,0x0493,0x0492},  {0x0492,0x0493,0x0492},
00650   {0x0494,0x0495,0x0494},  {0x0494,0x0495,0x0494},
00651   {0x0496,0x0497,0x0496},  {0x0496,0x0497,0x0496},
00652   {0x0498,0x0499,0x0498},  {0x0498,0x0499,0x0498},
00653   {0x049A,0x049B,0x049A},  {0x049A,0x049B,0x049A},
00654   {0x049C,0x049D,0x049C},  {0x049C,0x049D,0x049C},
00655   {0x049E,0x049F,0x049E},  {0x049E,0x049F,0x049E},
00656   {0x04A0,0x04A1,0x04A0},  {0x04A0,0x04A1,0x04A0},
00657   {0x04A2,0x04A3,0x04A2},  {0x04A2,0x04A3,0x04A2},
00658   {0x04A4,0x04A5,0x04A4},  {0x04A4,0x04A5,0x04A4},
00659   {0x04A6,0x04A7,0x04A6},  {0x04A6,0x04A7,0x04A6},
00660   {0x04A8,0x04A9,0x04A8},  {0x04A8,0x04A9,0x04A8},
00661   {0x04AA,0x04AB,0x04AA},  {0x04AA,0x04AB,0x04AA},
00662   {0x04AC,0x04AD,0x04AC},  {0x04AC,0x04AD,0x04AC},
00663   {0x04AE,0x04AF,0x04AE},  {0x04AE,0x04AF,0x04AE},
00664   {0x04B0,0x04B1,0x04B0},  {0x04B0,0x04B1,0x04B0},
00665   {0x04B2,0x04B3,0x04B2},  {0x04B2,0x04B3,0x04B2},
00666   {0x04B4,0x04B5,0x04B4},  {0x04B4,0x04B5,0x04B4},
00667   {0x04B6,0x04B7,0x04B6},  {0x04B6,0x04B7,0x04B6},
00668   {0x04B8,0x04B9,0x04B8},  {0x04B8,0x04B9,0x04B8},
00669   {0x04BA,0x04BB,0x04BA},  {0x04BA,0x04BB,0x04BA},
00670   {0x04BC,0x04BD,0x04BC},  {0x04BC,0x04BD,0x04BC},
00671   {0x04BE,0x04BF,0x04BE},  {0x04BE,0x04BF,0x04BE},
00672   {0x04C0,0x04C0,0x04C0},  {0x04C1,0x04C2,0x0416},
00673   {0x04C1,0x04C2,0x0416},  {0x04C3,0x04C4,0x04C3},
00674   {0x04C3,0x04C4,0x04C3},  {0x04C5,0x04C5,0x04C5},
00675   {0x04C6,0x04C6,0x04C6},  {0x04C7,0x04C8,0x04C7},
00676   {0x04C7,0x04C8,0x04C7},  {0x04C9,0x04C9,0x04C9},
00677   {0x04CA,0x04CA,0x04CA},  {0x04CB,0x04CC,0x04CB},
00678   {0x04CB,0x04CC,0x04CB},  {0x04CD,0x04CD,0x04CD},
00679   {0x04CE,0x04CE,0x04CE},  {0x04CF,0x04CF,0x04CF},
00680   {0x04D0,0x04D1,0x0410},  {0x04D0,0x04D1,0x0410},
00681   {0x04D2,0x04D3,0x0410},  {0x04D2,0x04D3,0x0410},
00682   {0x04D4,0x04D5,0x04D4},  {0x04D4,0x04D5,0x04D4},
00683   {0x04D6,0x04D7,0x0415},  {0x04D6,0x04D7,0x0415},
00684   {0x04D8,0x04D9,0x04D8},  {0x04D8,0x04D9,0x04D8},
00685   {0x04DA,0x04DB,0x04D8},  {0x04DA,0x04DB,0x04D8},
00686   {0x04DC,0x04DD,0x0416},  {0x04DC,0x04DD,0x0416},
00687   {0x04DE,0x04DF,0x0417},  {0x04DE,0x04DF,0x0417},
00688   {0x04E0,0x04E1,0x04E0},  {0x04E0,0x04E1,0x04E0},
00689   {0x04E2,0x04E3,0x0418},  {0x04E2,0x04E3,0x0418},
00690   {0x04E4,0x04E5,0x0418},  {0x04E4,0x04E5,0x0418},
00691   {0x04E6,0x04E7,0x041E},  {0x04E6,0x04E7,0x041E},
00692   {0x04E8,0x04E9,0x04E8},  {0x04E8,0x04E9,0x04E8},
00693   {0x04EA,0x04EB,0x04E8},  {0x04EA,0x04EB,0x04E8},
00694   {0x04EC,0x04ED,0x042D},  {0x04EC,0x04ED,0x042D},
00695   {0x04EE,0x04EF,0x0423},  {0x04EE,0x04EF,0x0423},
00696   {0x04F0,0x04F1,0x0423},  {0x04F0,0x04F1,0x0423},
00697   {0x04F2,0x04F3,0x0423},  {0x04F2,0x04F3,0x0423},
00698   {0x04F4,0x04F5,0x0427},  {0x04F4,0x04F5,0x0427},
00699   {0x04F6,0x04F6,0x04F6},  {0x04F7,0x04F7,0x04F7},
00700   {0x04F8,0x04F9,0x042B},  {0x04F8,0x04F9,0x042B},
00701   {0x04FA,0x04FA,0x04FA},  {0x04FB,0x04FB,0x04FB},
00702   {0x04FC,0x04FC,0x04FC},  {0x04FD,0x04FD,0x04FD},
00703   {0x04FE,0x04FE,0x04FE},  {0x04FF,0x04FF,0x04FF}
00704 };
00705 
00706 static MY_UNICASE_INFO plane05[]={
00707   {0x0500,0x0500,0x0500},  {0x0501,0x0501,0x0501},
00708   {0x0502,0x0502,0x0502},  {0x0503,0x0503,0x0503},
00709   {0x0504,0x0504,0x0504},  {0x0505,0x0505,0x0505},
00710   {0x0506,0x0506,0x0506},  {0x0507,0x0507,0x0507},
00711   {0x0508,0x0508,0x0508},  {0x0509,0x0509,0x0509},
00712   {0x050A,0x050A,0x050A},  {0x050B,0x050B,0x050B},
00713   {0x050C,0x050C,0x050C},  {0x050D,0x050D,0x050D},
00714   {0x050E,0x050E,0x050E},  {0x050F,0x050F,0x050F},
00715   {0x0510,0x0510,0x0510},  {0x0511,0x0511,0x0511},
00716   {0x0512,0x0512,0x0512},  {0x0513,0x0513,0x0513},
00717   {0x0514,0x0514,0x0514},  {0x0515,0x0515,0x0515},
00718   {0x0516,0x0516,0x0516},  {0x0517,0x0517,0x0517},
00719   {0x0518,0x0518,0x0518},  {0x0519,0x0519,0x0519},
00720   {0x051A,0x051A,0x051A},  {0x051B,0x051B,0x051B},
00721   {0x051C,0x051C,0x051C},  {0x051D,0x051D,0x051D},
00722   {0x051E,0x051E,0x051E},  {0x051F,0x051F,0x051F},
00723   {0x0520,0x0520,0x0520},  {0x0521,0x0521,0x0521},
00724   {0x0522,0x0522,0x0522},  {0x0523,0x0523,0x0523},
00725   {0x0524,0x0524,0x0524},  {0x0525,0x0525,0x0525},
00726   {0x0526,0x0526,0x0526},  {0x0527,0x0527,0x0527},
00727   {0x0528,0x0528,0x0528},  {0x0529,0x0529,0x0529},
00728   {0x052A,0x052A,0x052A},  {0x052B,0x052B,0x052B},
00729   {0x052C,0x052C,0x052C},  {0x052D,0x052D,0x052D},
00730   {0x052E,0x052E,0x052E},  {0x052F,0x052F,0x052F},
00731   {0x0530,0x0530,0x0530},  {0x0531,0x0561,0x0531},
00732   {0x0532,0x0562,0x0532},  {0x0533,0x0563,0x0533},
00733   {0x0534,0x0564,0x0534},  {0x0535,0x0565,0x0535},
00734   {0x0536,0x0566,0x0536},  {0x0537,0x0567,0x0537},
00735   {0x0538,0x0568,0x0538},  {0x0539,0x0569,0x0539},
00736   {0x053A,0x056A,0x053A},  {0x053B,0x056B,0x053B},
00737   {0x053C,0x056C,0x053C},  {0x053D,0x056D,0x053D},
00738   {0x053E,0x056E,0x053E},  {0x053F,0x056F,0x053F},
00739   {0x0540,0x0570,0x0540},  {0x0541,0x0571,0x0541},
00740   {0x0542,0x0572,0x0542},  {0x0543,0x0573,0x0543},
00741   {0x0544,0x0574,0x0544},  {0x0545,0x0575,0x0545},
00742   {0x0546,0x0576,0x0546},  {0x0547,0x0577,0x0547},
00743   {0x0548,0x0578,0x0548},  {0x0549,0x0579,0x0549},
00744   {0x054A,0x057A,0x054A},  {0x054B,0x057B,0x054B},
00745   {0x054C,0x057C,0x054C},  {0x054D,0x057D,0x054D},
00746   {0x054E,0x057E,0x054E},  {0x054F,0x057F,0x054F},
00747   {0x0550,0x0580,0x0550},  {0x0551,0x0581,0x0551},
00748   {0x0552,0x0582,0x0552},  {0x0553,0x0583,0x0553},
00749   {0x0554,0x0584,0x0554},  {0x0555,0x0585,0x0555},
00750   {0x0556,0x0586,0x0556},  {0x0557,0x0557,0x0557},
00751   {0x0558,0x0558,0x0558},  {0x0559,0x0559,0x0559},
00752   {0x055A,0x055A,0x055A},  {0x055B,0x055B,0x055B},
00753   {0x055C,0x055C,0x055C},  {0x055D,0x055D,0x055D},
00754   {0x055E,0x055E,0x055E},  {0x055F,0x055F,0x055F},
00755   {0x0560,0x0560,0x0560},  {0x0531,0x0561,0x0531},
00756   {0x0532,0x0562,0x0532},  {0x0533,0x0563,0x0533},
00757   {0x0534,0x0564,0x0534},  {0x0535,0x0565,0x0535},
00758   {0x0536,0x0566,0x0536},  {0x0537,0x0567,0x0537},
00759   {0x0538,0x0568,0x0538},  {0x0539,0x0569,0x0539},
00760   {0x053A,0x056A,0x053A},  {0x053B,0x056B,0x053B},
00761   {0x053C,0x056C,0x053C},  {0x053D,0x056D,0x053D},
00762   {0x053E,0x056E,0x053E},  {0x053F,0x056F,0x053F},
00763   {0x0540,0x0570,0x0540},  {0x0541,0x0571,0x0541},
00764   {0x0542,0x0572,0x0542},  {0x0543,0x0573,0x0543},
00765   {0x0544,0x0574,0x0544},  {0x0545,0x0575,0x0545},
00766   {0x0546,0x0576,0x0546},  {0x0547,0x0577,0x0547},
00767   {0x0548,0x0578,0x0548},  {0x0549,0x0579,0x0549},
00768   {0x054A,0x057A,0x054A},  {0x054B,0x057B,0x054B},
00769   {0x054C,0x057C,0x054C},  {0x054D,0x057D,0x054D},
00770   {0x054E,0x057E,0x054E},  {0x054F,0x057F,0x054F},
00771   {0x0550,0x0580,0x0550},  {0x0551,0x0581,0x0551},
00772   {0x0552,0x0582,0x0552},  {0x0553,0x0583,0x0553},
00773   {0x0554,0x0584,0x0554},  {0x0555,0x0585,0x0555},
00774   {0x0556,0x0586,0x0556},  {0x0587,0x0587,0x0587},
00775   {0x0588,0x0588,0x0588},  {0x0589,0x0589,0x0589},
00776   {0x058A,0x058A,0x058A},  {0x058B,0x058B,0x058B},
00777   {0x058C,0x058C,0x058C},  {0x058D,0x058D,0x058D},
00778   {0x058E,0x058E,0x058E},  {0x058F,0x058F,0x058F},
00779   {0x0590,0x0590,0x0590},  {0x0591,0x0591,0x0591},
00780   {0x0592,0x0592,0x0592},  {0x0593,0x0593,0x0593},
00781   {0x0594,0x0594,0x0594},  {0x0595,0x0595,0x0595},
00782   {0x0596,0x0596,0x0596},  {0x0597,0x0597,0x0597},
00783   {0x0598,0x0598,0x0598},  {0x0599,0x0599,0x0599},
00784   {0x059A,0x059A,0x059A},  {0x059B,0x059B,0x059B},
00785   {0x059C,0x059C,0x059C},  {0x059D,0x059D,0x059D},
00786   {0x059E,0x059E,0x059E},  {0x059F,0x059F,0x059F},
00787   {0x05A0,0x05A0,0x05A0},  {0x05A1,0x05A1,0x05A1},
00788   {0x05A2,0x05A2,0x05A2},  {0x05A3,0x05A3,0x05A3},
00789   {0x05A4,0x05A4,0x05A4},  {0x05A5,0x05A5,0x05A5},
00790   {0x05A6,0x05A6,0x05A6},  {0x05A7,0x05A7,0x05A7},
00791   {0x05A8,0x05A8,0x05A8},  {0x05A9,0x05A9,0x05A9},
00792   {0x05AA,0x05AA,0x05AA},  {0x05AB,0x05AB,0x05AB},
00793   {0x05AC,0x05AC,0x05AC},  {0x05AD,0x05AD,0x05AD},
00794   {0x05AE,0x05AE,0x05AE},  {0x05AF,0x05AF,0x05AF},
00795   {0x05B0,0x05B0,0x05B0},  {0x05B1,0x05B1,0x05B1},
00796   {0x05B2,0x05B2,0x05B2},  {0x05B3,0x05B3,0x05B3},
00797   {0x05B4,0x05B4,0x05B4},  {0x05B5,0x05B5,0x05B5},
00798   {0x05B6,0x05B6,0x05B6},  {0x05B7,0x05B7,0x05B7},
00799   {0x05B8,0x05B8,0x05B8},  {0x05B9,0x05B9,0x05B9},
00800   {0x05BA,0x05BA,0x05BA},  {0x05BB,0x05BB,0x05BB},
00801   {0x05BC,0x05BC,0x05BC},  {0x05BD,0x05BD,0x05BD},
00802   {0x05BE,0x05BE,0x05BE},  {0x05BF,0x05BF,0x05BF},
00803   {0x05C0,0x05C0,0x05C0},  {0x05C1,0x05C1,0x05C1},
00804   {0x05C2,0x05C2,0x05C2},  {0x05C3,0x05C3,0x05C3},
00805   {0x05C4,0x05C4,0x05C4},  {0x05C5,0x05C5,0x05C5},
00806   {0x05C6,0x05C6,0x05C6},  {0x05C7,0x05C7,0x05C7},
00807   {0x05C8,0x05C8,0x05C8},  {0x05C9,0x05C9,0x05C9},
00808   {0x05CA,0x05CA,0x05CA},  {0x05CB,0x05CB,0x05CB},
00809   {0x05CC,0x05CC,0x05CC},  {0x05CD,0x05CD,0x05CD},
00810   {0x05CE,0x05CE,0x05CE},  {0x05CF,0x05CF,0x05CF},
00811   {0x05D0,0x05D0,0x05D0},  {0x05D1,0x05D1,0x05D1},
00812   {0x05D2,0x05D2,0x05D2},  {0x05D3,0x05D3,0x05D3},
00813   {0x05D4,0x05D4,0x05D4},  {0x05D5,0x05D5,0x05D5},
00814   {0x05D6,0x05D6,0x05D6},  {0x05D7,0x05D7,0x05D7},
00815   {0x05D8,0x05D8,0x05D8},  {0x05D9,0x05D9,0x05D9},
00816   {0x05DA,0x05DA,0x05DA},  {0x05DB,0x05DB,0x05DB},
00817   {0x05DC,0x05DC,0x05DC},  {0x05DD,0x05DD,0x05DD},
00818   {0x05DE,0x05DE,0x05DE},  {0x05DF,0x05DF,0x05DF},
00819   {0x05E0,0x05E0,0x05E0},  {0x05E1,0x05E1,0x05E1},
00820   {0x05E2,0x05E2,0x05E2},  {0x05E3,0x05E3,0x05E3},
00821   {0x05E4,0x05E4,0x05E4},  {0x05E5,0x05E5,0x05E5},
00822   {0x05E6,0x05E6,0x05E6},  {0x05E7,0x05E7,0x05E7},
00823   {0x05E8,0x05E8,0x05E8},  {0x05E9,0x05E9,0x05E9},
00824   {0x05EA,0x05EA,0x05EA},  {0x05EB,0x05EB,0x05EB},
00825   {0x05EC,0x05EC,0x05EC},  {0x05ED,0x05ED,0x05ED},
00826   {0x05EE,0x05EE,0x05EE},  {0x05EF,0x05EF,0x05EF},
00827   {0x05F0,0x05F0,0x05F0},  {0x05F1,0x05F1,0x05F1},
00828   {0x05F2,0x05F2,0x05F2},  {0x05F3,0x05F3,0x05F3},
00829   {0x05F4,0x05F4,0x05F4},  {0x05F5,0x05F5,0x05F5},
00830   {0x05F6,0x05F6,0x05F6},  {0x05F7,0x05F7,0x05F7},
00831   {0x05F8,0x05F8,0x05F8},  {0x05F9,0x05F9,0x05F9},
00832   {0x05FA,0x05FA,0x05FA},  {0x05FB,0x05FB,0x05FB},
00833   {0x05FC,0x05FC,0x05FC},  {0x05FD,0x05FD,0x05FD},
00834   {0x05FE,0x05FE,0x05FE},  {0x05FF,0x05FF,0x05FF}
00835 };
00836 
00837 static MY_UNICASE_INFO plane1E[]={
00838   {0x1E00,0x1E01,0x0041},  {0x1E00,0x1E01,0x0041},
00839   {0x1E02,0x1E03,0x0042},  {0x1E02,0x1E03,0x0042},
00840   {0x1E04,0x1E05,0x0042},  {0x1E04,0x1E05,0x0042},
00841   {0x1E06,0x1E07,0x0042},  {0x1E06,0x1E07,0x0042},
00842   {0x1E08,0x1E09,0x0043},  {0x1E08,0x1E09,0x0043},
00843   {0x1E0A,0x1E0B,0x0044},  {0x1E0A,0x1E0B,0x0044},
00844   {0x1E0C,0x1E0D,0x0044},  {0x1E0C,0x1E0D,0x0044},
00845   {0x1E0E,0x1E0F,0x0044},  {0x1E0E,0x1E0F,0x0044},
00846   {0x1E10,0x1E11,0x0044},  {0x1E10,0x1E11,0x0044},
00847   {0x1E12,0x1E13,0x0044},  {0x1E12,0x1E13,0x0044},
00848   {0x1E14,0x1E15,0x0045},  {0x1E14,0x1E15,0x0045},
00849   {0x1E16,0x1E17,0x0045},  {0x1E16,0x1E17,0x0045},
00850   {0x1E18,0x1E19,0x0045},  {0x1E18,0x1E19,0x0045},
00851   {0x1E1A,0x1E1B,0x0045},  {0x1E1A,0x1E1B,0x0045},
00852   {0x1E1C,0x1E1D,0x0045},  {0x1E1C,0x1E1D,0x0045},
00853   {0x1E1E,0x1E1F,0x0046},  {0x1E1E,0x1E1F,0x0046},
00854   {0x1E20,0x1E21,0x0047},  {0x1E20,0x1E21,0x0047},
00855   {0x1E22,0x1E23,0x0048},  {0x1E22,0x1E23,0x0048},
00856   {0x1E24,0x1E25,0x0048},  {0x1E24,0x1E25,0x0048},
00857   {0x1E26,0x1E27,0x0048},  {0x1E26,0x1E27,0x0048},
00858   {0x1E28,0x1E29,0x0048},  {0x1E28,0x1E29,0x0048},
00859   {0x1E2A,0x1E2B,0x0048},  {0x1E2A,0x1E2B,0x0048},
00860   {0x1E2C,0x1E2D,0x0049},  {0x1E2C,0x1E2D,0x0049},
00861   {0x1E2E,0x1E2F,0x0049},  {0x1E2E,0x1E2F,0x0049},
00862   {0x1E30,0x1E31,0x004B},  {0x1E30,0x1E31,0x004B},
00863   {0x1E32,0x1E33,0x004B},  {0x1E32,0x1E33,0x004B},
00864   {0x1E34,0x1E35,0x004B},  {0x1E34,0x1E35,0x004B},
00865   {0x1E36,0x1E37,0x004C},  {0x1E36,0x1E37,0x004C},
00866   {0x1E38,0x1E39,0x004C},  {0x1E38,0x1E39,0x004C},
00867   {0x1E3A,0x1E3B,0x004C},  {0x1E3A,0x1E3B,0x004C},
00868   {0x1E3C,0x1E3D,0x004C},  {0x1E3C,0x1E3D,0x004C},
00869   {0x1E3E,0x1E3F,0x004D},  {0x1E3E,0x1E3F,0x004D},
00870   {0x1E40,0x1E41,0x004D},  {0x1E40,0x1E41,0x004D},
00871   {0x1E42,0x1E43,0x004D},  {0x1E42,0x1E43,0x004D},
00872   {0x1E44,0x1E45,0x004E},  {0x1E44,0x1E45,0x004E},
00873   {0x1E46,0x1E47,0x004E},  {0x1E46,0x1E47,0x004E},
00874   {0x1E48,0x1E49,0x004E},  {0x1E48,0x1E49,0x004E},
00875   {0x1E4A,0x1E4B,0x004E},  {0x1E4A,0x1E4B,0x004E},
00876   {0x1E4C,0x1E4D,0x004F},  {0x1E4C,0x1E4D,0x004F},
00877   {0x1E4E,0x1E4F,0x004F},  {0x1E4E,0x1E4F,0x004F},
00878   {0x1E50,0x1E51,0x004F},  {0x1E50,0x1E51,0x004F},
00879   {0x1E52,0x1E53,0x004F},  {0x1E52,0x1E53,0x004F},
00880   {0x1E54,0x1E55,0x0050},  {0x1E54,0x1E55,0x0050},
00881   {0x1E56,0x1E57,0x0050},  {0x1E56,0x1E57,0x0050},
00882   {0x1E58,0x1E59,0x0052},  {0x1E58,0x1E59,0x0052},
00883   {0x1E5A,0x1E5B,0x0052},  {0x1E5A,0x1E5B,0x0052},
00884   {0x1E5C,0x1E5D,0x0052},  {0x1E5C,0x1E5D,0x0052},
00885   {0x1E5E,0x1E5F,0x0052},  {0x1E5E,0x1E5F,0x0052},
00886   {0x1E60,0x1E61,0x0053},  {0x1E60,0x1E61,0x0053},
00887   {0x1E62,0x1E63,0x0053},  {0x1E62,0x1E63,0x0053},
00888   {0x1E64,0x1E65,0x0053},  {0x1E64,0x1E65,0x0053},
00889   {0x1E66,0x1E67,0x0053},  {0x1E66,0x1E67,0x0053},
00890   {0x1E68,0x1E69,0x0053},  {0x1E68,0x1E69,0x0053},
00891   {0x1E6A,0x1E6B,0x0054},  {0x1E6A,0x1E6B,0x0054},
00892   {0x1E6C,0x1E6D,0x0054},  {0x1E6C,0x1E6D,0x0054},
00893   {0x1E6E,0x1E6F,0x0054},  {0x1E6E,0x1E6F,0x0054},
00894   {0x1E70,0x1E71,0x0054},  {0x1E70,0x1E71,0x0054},
00895   {0x1E72,0x1E73,0x0055},  {0x1E72,0x1E73,0x0055},
00896   {0x1E74,0x1E75,0x0055},  {0x1E74,0x1E75,0x0055},
00897   {0x1E76,0x1E77,0x0055},  {0x1E76,0x1E77,0x0055},
00898   {0x1E78,0x1E79,0x0055},  {0x1E78,0x1E79,0x0055},
00899   {0x1E7A,0x1E7B,0x0055},  {0x1E7A,0x1E7B,0x0055},
00900   {0x1E7C,0x1E7D,0x0056},  {0x1E7C,0x1E7D,0x0056},
00901   {0x1E7E,0x1E7F,0x0056},  {0x1E7E,0x1E7F,0x0056},
00902   {0x1E80,0x1E81,0x0057},  {0x1E80,0x1E81,0x0057},
00903   {0x1E82,0x1E83,0x0057},  {0x1E82,0x1E83,0x0057},
00904   {0x1E84,0x1E85,0x0057},  {0x1E84,0x1E85,0x0057},
00905   {0x1E86,0x1E87,0x0057},  {0x1E86,0x1E87,0x0057},
00906   {0x1E88,0x1E89,0x0057},  {0x1E88,0x1E89,0x0057},
00907   {0x1E8A,0x1E8B,0x0058},  {0x1E8A,0x1E8B,0x0058},
00908   {0x1E8C,0x1E8D,0x0058},  {0x1E8C,0x1E8D,0x0058},
00909   {0x1E8E,0x1E8F,0x0059},  {0x1E8E,0x1E8F,0x0059},
00910   {0x1E90,0x1E91,0x005A},  {0x1E90,0x1E91,0x005A},
00911   {0x1E92,0x1E93,0x005A},  {0x1E92,0x1E93,0x005A},
00912   {0x1E94,0x1E95,0x005A},  {0x1E94,0x1E95,0x005A},
00913   {0x1E96,0x1E96,0x0048},  {0x1E97,0x1E97,0x0054},
00914   {0x1E98,0x1E98,0x0057},  {0x1E99,0x1E99,0x0059},
00915   {0x1E9A,0x1E9A,0x1E9A},  {0x1E60,0x1E9B,0x0053},
00916   {0x1E9C,0x1E9C,0x1E9C},  {0x1E9D,0x1E9D,0x1E9D},
00917   {0x1E9E,0x1E9E,0x1E9E},  {0x1E9F,0x1E9F,0x1E9F},
00918   {0x1EA0,0x1EA1,0x0041},  {0x1EA0,0x1EA1,0x0041},
00919   {0x1EA2,0x1EA3,0x0041},  {0x1EA2,0x1EA3,0x0041},
00920   {0x1EA4,0x1EA5,0x0041},  {0x1EA4,0x1EA5,0x0041},
00921   {0x1EA6,0x1EA7,0x0041},  {0x1EA6,0x1EA7,0x0041},
00922   {0x1EA8,0x1EA9,0x0041},  {0x1EA8,0x1EA9,0x0041},
00923   {0x1EAA,0x1EAB,0x0041},  {0x1EAA,0x1EAB,0x0041},
00924   {0x1EAC,0x1EAD,0x0041},  {0x1EAC,0x1EAD,0x0041},
00925   {0x1EAE,0x1EAF,0x0041},  {0x1EAE,0x1EAF,0x0041},
00926   {0x1EB0,0x1EB1,0x0041},  {0x1EB0,0x1EB1,0x0041},
00927   {0x1EB2,0x1EB3,0x0041},  {0x1EB2,0x1EB3,0x0041},
00928   {0x1EB4,0x1EB5,0x0041},  {0x1EB4,0x1EB5,0x0041},
00929   {0x1EB6,0x1EB7,0x0041},  {0x1EB6,0x1EB7,0x0041},
00930   {0x1EB8,0x1EB9,0x0045},  {0x1EB8,0x1EB9,0x0045},
00931   {0x1EBA,0x1EBB,0x0045},  {0x1EBA,0x1EBB,0x0045},
00932   {0x1EBC,0x1EBD,0x0045},  {0x1EBC,0x1EBD,0x0045},
00933   {0x1EBE,0x1EBF,0x0045},  {0x1EBE,0x1EBF,0x0045},
00934   {0x1EC0,0x1EC1,0x0045},  {0x1EC0,0x1EC1,0x0045},
00935   {0x1EC2,0x1EC3,0x0045},  {0x1EC2,0x1EC3,0x0045},
00936   {0x1EC4,0x1EC5,0x0045},  {0x1EC4,0x1EC5,0x0045},
00937   {0x1EC6,0x1EC7,0x0045},  {0x1EC6,0x1EC7,0x0045},
00938   {0x1EC8,0x1EC9,0x0049},  {0x1EC8,0x1EC9,0x0049},
00939   {0x1ECA,0x1ECB,0x0049},  {0x1ECA,0x1ECB,0x0049},
00940   {0x1ECC,0x1ECD,0x004F},  {0x1ECC,0x1ECD,0x004F},
00941   {0x1ECE,0x1ECF,0x004F},  {0x1ECE,0x1ECF,0x004F},
00942   {0x1ED0,0x1ED1,0x004F},  {0x1ED0,0x1ED1,0x004F},
00943   {0x1ED2,0x1ED3,0x004F},  {0x1ED2,0x1ED3,0x004F},
00944   {0x1ED4,0x1ED5,0x004F},  {0x1ED4,0x1ED5,0x004F},
00945   {0x1ED6,0x1ED7,0x004F},  {0x1ED6,0x1ED7,0x004F},
00946   {0x1ED8,0x1ED9,0x004F},  {0x1ED8,0x1ED9,0x004F},
00947   {0x1EDA,0x1EDB,0x004F},  {0x1EDA,0x1EDB,0x004F},
00948   {0x1EDC,0x1EDD,0x004F},  {0x1EDC,0x1EDD,0x004F},
00949   {0x1EDE,0x1EDF,0x004F},  {0x1EDE,0x1EDF,0x004F},
00950   {0x1EE0,0x1EE1,0x004F},  {0x1EE0,0x1EE1,0x004F},
00951   {0x1EE2,0x1EE3,0x004F},  {0x1EE2,0x1EE3,0x004F},
00952   {0x1EE4,0x1EE5,0x0055},  {0x1EE4,0x1EE5,0x0055},
00953   {0x1EE6,0x1EE7,0x0055},  {0x1EE6,0x1EE7,0x0055},
00954   {0x1EE8,0x1EE9,0x0055},  {0x1EE8,0x1EE9,0x0055},
00955   {0x1EEA,0x1EEB,0x0055},  {0x1EEA,0x1EEB,0x0055},
00956   {0x1EEC,0x1EED,0x0055},  {0x1EEC,0x1EED,0x0055},
00957   {0x1EEE,0x1EEF,0x0055},  {0x1EEE,0x1EEF,0x0055},
00958   {0x1EF0,0x1EF1,0x0055},  {0x1EF0,0x1EF1,0x0055},
00959   {0x1EF2,0x1EF3,0x0059},  {0x1EF2,0x1EF3,0x0059},
00960   {0x1EF4,0x1EF5,0x0059},  {0x1EF4,0x1EF5,0x0059},
00961   {0x1EF6,0x1EF7,0x0059},  {0x1EF6,0x1EF7,0x0059},
00962   {0x1EF8,0x1EF9,0x0059},  {0x1EF8,0x1EF9,0x0059},
00963   {0x1EFA,0x1EFA,0x1EFA},  {0x1EFB,0x1EFB,0x1EFB},
00964   {0x1EFC,0x1EFC,0x1EFC},  {0x1EFD,0x1EFD,0x1EFD},
00965   {0x1EFE,0x1EFE,0x1EFE},  {0x1EFF,0x1EFF,0x1EFF}
00966 };
00967 
00968 static MY_UNICASE_INFO plane1F[]={
00969   {0x1F08,0x1F00,0x0391},  {0x1F09,0x1F01,0x0391},
00970   {0x1F0A,0x1F02,0x0391},  {0x1F0B,0x1F03,0x0391},
00971   {0x1F0C,0x1F04,0x0391},  {0x1F0D,0x1F05,0x0391},
00972   {0x1F0E,0x1F06,0x0391},  {0x1F0F,0x1F07,0x0391},
00973   {0x1F08,0x1F00,0x0391},  {0x1F09,0x1F01,0x0391},
00974   {0x1F0A,0x1F02,0x0391},  {0x1F0B,0x1F03,0x0391},
00975   {0x1F0C,0x1F04,0x0391},  {0x1F0D,0x1F05,0x0391},
00976   {0x1F0E,0x1F06,0x0391},  {0x1F0F,0x1F07,0x0391},
00977   {0x1F18,0x1F10,0x0395},  {0x1F19,0x1F11,0x0395},
00978   {0x1F1A,0x1F12,0x0395},  {0x1F1B,0x1F13,0x0395},
00979   {0x1F1C,0x1F14,0x0395},  {0x1F1D,0x1F15,0x0395},
00980   {0x1F16,0x1F16,0x1F16},  {0x1F17,0x1F17,0x1F17},
00981   {0x1F18,0x1F10,0x0395},  {0x1F19,0x1F11,0x0395},
00982   {0x1F1A,0x1F12,0x0395},  {0x1F1B,0x1F13,0x0395},
00983   {0x1F1C,0x1F14,0x0395},  {0x1F1D,0x1F15,0x0395},
00984   {0x1F1E,0x1F1E,0x1F1E},  {0x1F1F,0x1F1F,0x1F1F},
00985   {0x1F28,0x1F20,0x0397},  {0x1F29,0x1F21,0x0397},
00986   {0x1F2A,0x1F22,0x0397},  {0x1F2B,0x1F23,0x0397},
00987   {0x1F2C,0x1F24,0x0397},  {0x1F2D,0x1F25,0x0397},
00988   {0x1F2E,0x1F26,0x0397},  {0x1F2F,0x1F27,0x0397},
00989   {0x1F28,0x1F20,0x0397},  {0x1F29,0x1F21,0x0397},
00990   {0x1F2A,0x1F22,0x0397},  {0x1F2B,0x1F23,0x0397},
00991   {0x1F2C,0x1F24,0x0397},  {0x1F2D,0x1F25,0x0397},
00992   {0x1F2E,0x1F26,0x0397},  {0x1F2F,0x1F27,0x0397},
00993   {0x1F38,0x1F30,0x0399},  {0x1F39,0x1F31,0x0399},
00994   {0x1F3A,0x1F32,0x0399},  {0x1F3B,0x1F33,0x0399},
00995   {0x1F3C,0x1F34,0x0399},  {0x1F3D,0x1F35,0x0399},
00996   {0x1F3E,0x1F36,0x0399},  {0x1F3F,0x1F37,0x0399},
00997   {0x1F38,0x1F30,0x0399},  {0x1F39,0x1F31,0x0399},
00998   {0x1F3A,0x1F32,0x0399},  {0x1F3B,0x1F33,0x0399},
00999   {0x1F3C,0x1F34,0x0399},  {0x1F3D,0x1F35,0x0399},
01000   {0x1F3E,0x1F36,0x0399},  {0x1F3F,0x1F37,0x0399},
01001   {0x1F48,0x1F40,0x039F},  {0x1F49,0x1F41,0x039F},
01002   {0x1F4A,0x1F42,0x039F},  {0x1F4B,0x1F43,0x039F},
01003   {0x1F4C,0x1F44,0x039F},  {0x1F4D,0x1F45,0x039F},
01004   {0x1F46,0x1F46,0x1F46},  {0x1F47,0x1F47,0x1F47},
01005   {0x1F48,0x1F40,0x039F},  {0x1F49,0x1F41,0x039F},
01006   {0x1F4A,0x1F42,0x039F},  {0x1F4B,0x1F43,0x039F},
01007   {0x1F4C,0x1F44,0x039F},  {0x1F4D,0x1F45,0x039F},
01008   {0x1F4E,0x1F4E,0x1F4E},  {0x1F4F,0x1F4F,0x1F4F},
01009   {0x1F50,0x1F50,0x03A5},  {0x1F59,0x1F51,0x03A5},
01010   {0x1F52,0x1F52,0x03A5},  {0x1F5B,0x1F53,0x03A5},
01011   {0x1F54,0x1F54,0x03A5},  {0x1F5D,0x1F55,0x03A5},
01012   {0x1F56,0x1F56,0x03A5},  {0x1F5F,0x1F57,0x03A5},
01013   {0x1F58,0x1F58,0x1F58},  {0x1F59,0x1F51,0x03A5},
01014   {0x1F5A,0x1F5A,0x1F5A},  {0x1F5B,0x1F53,0x03A5},
01015   {0x1F5C,0x1F5C,0x1F5C},  {0x1F5D,0x1F55,0x03A5},
01016   {0x1F5E,0x1F5E,0x1F5E},  {0x1F5F,0x1F57,0x03A5},
01017   {0x1F68,0x1F60,0x03A9},  {0x1F69,0x1F61,0x03A9},
01018   {0x1F6A,0x1F62,0x03A9},  {0x1F6B,0x1F63,0x03A9},
01019   {0x1F6C,0x1F64,0x03A9},  {0x1F6D,0x1F65,0x03A9},
01020   {0x1F6E,0x1F66,0x03A9},  {0x1F6F,0x1F67,0x03A9},
01021   {0x1F68,0x1F60,0x03A9},  {0x1F69,0x1F61,0x03A9},
01022   {0x1F6A,0x1F62,0x03A9},  {0x1F6B,0x1F63,0x03A9},
01023   {0x1F6C,0x1F64,0x03A9},  {0x1F6D,0x1F65,0x03A9},
01024   {0x1F6E,0x1F66,0x03A9},  {0x1F6F,0x1F67,0x03A9},
01025   {0x1FBA,0x1F70,0x0391},  {0x1FBB,0x1F71,0x1FBB},
01026   {0x1FC8,0x1F72,0x0395},  {0x1FC9,0x1F73,0x1FC9},
01027   {0x1FCA,0x1F74,0x0397},  {0x1FCB,0x1F75,0x1FCB},
01028   {0x1FDA,0x1F76,0x0399},  {0x1FDB,0x1F77,0x1FDB},
01029   {0x1FF8,0x1F78,0x039F},  {0x1FF9,0x1F79,0x1FF9},
01030   {0x1FEA,0x1F7A,0x03A5},  {0x1FEB,0x1F7B,0x1FEB},
01031   {0x1FFA,0x1F7C,0x03A9},  {0x1FFB,0x1F7D,0x1FFB},
01032   {0x1F7E,0x1F7E,0x1F7E},  {0x1F7F,0x1F7F,0x1F7F},
01033   {0x1F88,0x1F80,0x0391},  {0x1F89,0x1F81,0x0391},
01034   {0x1F8A,0x1F82,0x0391},  {0x1F8B,0x1F83,0x0391},
01035   {0x1F8C,0x1F84,0x0391},  {0x1F8D,0x1F85,0x0391},
01036   {0x1F8E,0x1F86,0x0391},  {0x1F8F,0x1F87,0x0391},
01037   {0x1F88,0x1F80,0x0391},  {0x1F89,0x1F81,0x0391},
01038   {0x1F8A,0x1F82,0x0391},  {0x1F8B,0x1F83,0x0391},
01039   {0x1F8C,0x1F84,0x0391},  {0x1F8D,0x1F85,0x0391},
01040   {0x1F8E,0x1F86,0x0391},  {0x1F8F,0x1F87,0x0391},
01041   {0x1F98,0x1F90,0x0397},  {0x1F99,0x1F91,0x0397},
01042   {0x1F9A,0x1F92,0x0397},  {0x1F9B,0x1F93,0x0397},
01043   {0x1F9C,0x1F94,0x0397},  {0x1F9D,0x1F95,0x0397},
01044   {0x1F9E,0x1F96,0x0397},  {0x1F9F,0x1F97,0x0397},
01045   {0x1F98,0x1F90,0x0397},  {0x1F99,0x1F91,0x0397},
01046   {0x1F9A,0x1F92,0x0397},  {0x1F9B,0x1F93,0x0397},
01047   {0x1F9C,0x1F94,0x0397},  {0x1F9D,0x1F95,0x0397},
01048   {0x1F9E,0x1F96,0x0397},  {0x1F9F,0x1F97,0x0397},
01049   {0x1FA8,0x1FA0,0x03A9},  {0x1FA9,0x1FA1,0x03A9},
01050   {0x1FAA,0x1FA2,0x03A9},  {0x1FAB,0x1FA3,0x03A9},
01051   {0x1FAC,0x1FA4,0x03A9},  {0x1FAD,0x1FA5,0x03A9},
01052   {0x1FAE,0x1FA6,0x03A9},  {0x1FAF,0x1FA7,0x03A9},
01053   {0x1FA8,0x1FA0,0x03A9},  {0x1FA9,0x1FA1,0x03A9},
01054   {0x1FAA,0x1FA2,0x03A9},  {0x1FAB,0x1FA3,0x03A9},
01055   {0x1FAC,0x1FA4,0x03A9},  {0x1FAD,0x1FA5,0x03A9},
01056   {0x1FAE,0x1FA6,0x03A9},  {0x1FAF,0x1FA7,0x03A9},
01057   {0x1FB8,0x1FB0,0x0391},  {0x1FB9,0x1FB1,0x0391},
01058   {0x1FB2,0x1FB2,0x0391},  {0x1FBC,0x1FB3,0x0391},
01059   {0x1FB4,0x1FB4,0x0391},  {0x1FB5,0x1FB5,0x1FB5},
01060   {0x1FB6,0x1FB6,0x0391},  {0x1FB7,0x1FB7,0x0391},
01061   {0x1FB8,0x1FB0,0x0391},  {0x1FB9,0x1FB1,0x0391},
01062   {0x1FBA,0x1F70,0x0391},  {0x1FBB,0x1F71,0x1FBB},
01063   {0x1FBC,0x1FB3,0x0391},  {0x1FBD,0x1FBD,0x1FBD},
01064   {0x0399,0x1FBE,0x0399},  {0x1FBF,0x1FBF,0x1FBF},
01065   {0x1FC0,0x1FC0,0x1FC0},  {0x1FC1,0x1FC1,0x1FC1},
01066   {0x1FC2,0x1FC2,0x0397},  {0x1FCC,0x1FC3,0x0397},
01067   {0x1FC4,0x1FC4,0x0397},  {0x1FC5,0x1FC5,0x1FC5},
01068   {0x1FC6,0x1FC6,0x0397},  {0x1FC7,0x1FC7,0x0397},
01069   {0x1FC8,0x1F72,0x0395},  {0x1FC9,0x1F73,0x1FC9},
01070   {0x1FCA,0x1F74,0x0397},  {0x1FCB,0x1F75,0x1FCB},
01071   {0x1FCC,0x1FC3,0x0397},  {0x1FCD,0x1FCD,0x1FCD},
01072   {0x1FCE,0x1FCE,0x1FCE},  {0x1FCF,0x1FCF,0x1FCF},
01073   {0x1FD8,0x1FD0,0x0399},  {0x1FD9,0x1FD1,0x0399},
01074   {0x1FD2,0x1FD2,0x0399},  {0x1FD3,0x1FD3,0x1FD3},
01075   {0x1FD4,0x1FD4,0x1FD4},  {0x1FD5,0x1FD5,0x1FD5},
01076   {0x1FD6,0x1FD6,0x0399},  {0x1FD7,0x1FD7,0x0399},
01077   {0x1FD8,0x1FD0,0x0399},  {0x1FD9,0x1FD1,0x0399},
01078   {0x1FDA,0x1F76,0x0399},  {0x1FDB,0x1F77,0x1FDB},
01079   {0x1FDC,0x1FDC,0x1FDC},  {0x1FDD,0x1FDD,0x1FDD},
01080   {0x1FDE,0x1FDE,0x1FDE},  {0x1FDF,0x1FDF,0x1FDF},
01081   {0x1FE8,0x1FE0,0x03A5},  {0x1FE9,0x1FE1,0x03A5},
01082   {0x1FE2,0x1FE2,0x03A5},  {0x1FE3,0x1FE3,0x1FE3},
01083   {0x1FE4,0x1FE4,0x03A1},  {0x1FEC,0x1FE5,0x03A1},
01084   {0x1FE6,0x1FE6,0x03A5},  {0x1FE7,0x1FE7,0x03A5},
01085   {0x1FE8,0x1FE0,0x03A5},  {0x1FE9,0x1FE1,0x03A5},
01086   {0x1FEA,0x1F7A,0x03A5},  {0x1FEB,0x1F7B,0x1FEB},
01087   {0x1FEC,0x1FE5,0x03A1},  {0x1FED,0x1FED,0x1FED},
01088   {0x1FEE,0x1FEE,0x1FEE},  {0x1FEF,0x1FEF,0x1FEF},
01089   {0x1FF0,0x1FF0,0x1FF0},  {0x1FF1,0x1FF1,0x1FF1},
01090   {0x1FF2,0x1FF2,0x03A9},  {0x1FFC,0x1FF3,0x03A9},
01091   {0x1FF4,0x1FF4,0x03A9},  {0x1FF5,0x1FF5,0x1FF5},
01092   {0x1FF6,0x1FF6,0x03A9},  {0x1FF7,0x1FF7,0x03A9},
01093   {0x1FF8,0x1F78,0x039F},  {0x1FF9,0x1F79,0x1FF9},
01094   {0x1FFA,0x1F7C,0x03A9},  {0x1FFB,0x1F7D,0x1FFB},
01095   {0x1FFC,0x1FF3,0x03A9},  {0x1FFD,0x1FFD,0x1FFD},
01096   {0x1FFE,0x1FFE,0x1FFE},  {0x1FFF,0x1FFF,0x1FFF}
01097 };
01098 
01099 static MY_UNICASE_INFO plane21[]={
01100   {0x2100,0x2100,0x2100},  {0x2101,0x2101,0x2101},
01101   {0x2102,0x2102,0x2102},  {0x2103,0x2103,0x2103},
01102   {0x2104,0x2104,0x2104},  {0x2105,0x2105,0x2105},
01103   {0x2106,0x2106,0x2106},  {0x2107,0x2107,0x2107},
01104   {0x2108,0x2108,0x2108},  {0x2109,0x2109,0x2109},
01105   {0x210A,0x210A,0x210A},  {0x210B,0x210B,0x210B},
01106   {0x210C,0x210C,0x210C},  {0x210D,0x210D,0x210D},
01107   {0x210E,0x210E,0x210E},  {0x210F,0x210F,0x210F},
01108   {0x2110,0x2110,0x2110},  {0x2111,0x2111,0x2111},
01109   {0x2112,0x2112,0x2112},  {0x2113,0x2113,0x2113},
01110   {0x2114,0x2114,0x2114},  {0x2115,0x2115,0x2115},
01111   {0x2116,0x2116,0x2116},  {0x2117,0x2117,0x2117},
01112   {0x2118,0x2118,0x2118},  {0x2119,0x2119,0x2119},
01113   {0x211A,0x211A,0x211A},  {0x211B,0x211B,0x211B},
01114   {0x211C,0x211C,0x211C},  {0x211D,0x211D,0x211D},
01115   {0x211E,0x211E,0x211E},  {0x211F,0x211F,0x211F},
01116   {0x2120,0x2120,0x2120},  {0x2121,0x2121,0x2121},
01117   {0x2122,0x2122,0x2122},  {0x2123,0x2123,0x2123},
01118   {0x2124,0x2124,0x2124},  {0x2125,0x2125,0x2125},
01119   {0x2126,0x03C9,0x2126},  {0x2127,0x2127,0x2127},
01120   {0x2128,0x2128,0x2128},  {0x2129,0x2129,0x2129},
01121   {0x212A,0x006B,0x212A},  {0x212B,0x00E5,0x212B},
01122   {0x212C,0x212C,0x212C},  {0x212D,0x212D,0x212D},
01123   {0x212E,0x212E,0x212E},  {0x212F,0x212F,0x212F},
01124   {0x2130,0x2130,0x2130},  {0x2131,0x2131,0x2131},
01125   {0x2132,0x2132,0x2132},  {0x2133,0x2133,0x2133},
01126   {0x2134,0x2134,0x2134},  {0x2135,0x2135,0x2135},
01127   {0x2136,0x2136,0x2136},  {0x2137,0x2137,0x2137},
01128   {0x2138,0x2138,0x2138},  {0x2139,0x2139,0x2139},
01129   {0x213A,0x213A,0x213A},  {0x213B,0x213B,0x213B},
01130   {0x213C,0x213C,0x213C},  {0x213D,0x213D,0x213D},
01131   {0x213E,0x213E,0x213E},  {0x213F,0x213F,0x213F},
01132   {0x2140,0x2140,0x2140},  {0x2141,0x2141,0x2141},
01133   {0x2142,0x2142,0x2142},  {0x2143,0x2143,0x2143},
01134   {0x2144,0x2144,0x2144},  {0x2145,0x2145,0x2145},
01135   {0x2146,0x2146,0x2146},  {0x2147,0x2147,0x2147},
01136   {0x2148,0x2148,0x2148},  {0x2149,0x2149,0x2149},
01137   {0x214A,0x214A,0x214A},  {0x214B,0x214B,0x214B},
01138   {0x214C,0x214C,0x214C},  {0x214D,0x214D,0x214D},
01139   {0x214E,0x214E,0x214E},  {0x214F,0x214F,0x214F},
01140   {0x2150,0x2150,0x2150},  {0x2151,0x2151,0x2151},
01141   {0x2152,0x2152,0x2152},  {0x2153,0x2153,0x2153},
01142   {0x2154,0x2154,0x2154},  {0x2155,0x2155,0x2155},
01143   {0x2156,0x2156,0x2156},  {0x2157,0x2157,0x2157},
01144   {0x2158,0x2158,0x2158},  {0x2159,0x2159,0x2159},
01145   {0x215A,0x215A,0x215A},  {0x215B,0x215B,0x215B},
01146   {0x215C,0x215C,0x215C},  {0x215D,0x215D,0x215D},
01147   {0x215E,0x215E,0x215E},  {0x215F,0x215F,0x215F},
01148   {0x2160,0x2170,0x2160},  {0x2161,0x2171,0x2161},
01149   {0x2162,0x2172,0x2162},  {0x2163,0x2173,0x2163},
01150   {0x2164,0x2174,0x2164},  {0x2165,0x2175,0x2165},
01151   {0x2166,0x2176,0x2166},  {0x2167,0x2177,0x2167},
01152   {0x2168,0x2178,0x2168},  {0x2169,0x2179,0x2169},
01153   {0x216A,0x217A,0x216A},  {0x216B,0x217B,0x216B},
01154   {0x216C,0x217C,0x216C},  {0x216D,0x217D,0x216D},
01155   {0x216E,0x217E,0x216E},  {0x216F,0x217F,0x216F},
01156   {0x2160,0x2170,0x2160},  {0x2161,0x2171,0x2161},
01157   {0x2162,0x2172,0x2162},  {0x2163,0x2173,0x2163},
01158   {0x2164,0x2174,0x2164},  {0x2165,0x2175,0x2165},
01159   {0x2166,0x2176,0x2166},  {0x2167,0x2177,0x2167},
01160   {0x2168,0x2178,0x2168},  {0x2169,0x2179,0x2169},
01161   {0x216A,0x217A,0x216A},  {0x216B,0x217B,0x216B},
01162   {0x216C,0x217C,0x216C},  {0x216D,0x217D,0x216D},
01163   {0x216E,0x217E,0x216E},  {0x216F,0x217F,0x216F},
01164   {0x2180,0x2180,0x2180},  {0x2181,0x2181,0x2181},
01165   {0x2182,0x2182,0x2182},  {0x2183,0x2183,0x2183},
01166   {0x2184,0x2184,0x2184},  {0x2185,0x2185,0x2185},
01167   {0x2186,0x2186,0x2186},  {0x2187,0x2187,0x2187},
01168   {0x2188,0x2188,0x2188},  {0x2189,0x2189,0x2189},
01169   {0x218A,0x218A,0x218A},  {0x218B,0x218B,0x218B},
01170   {0x218C,0x218C,0x218C},  {0x218D,0x218D,0x218D},
01171   {0x218E,0x218E,0x218E},  {0x218F,0x218F,0x218F},
01172   {0x2190,0x2190,0x2190},  {0x2191,0x2191,0x2191},
01173   {0x2192,0x2192,0x2192},  {0x2193,0x2193,0x2193},
01174   {0x2194,0x2194,0x2194},  {0x2195,0x2195,0x2195},
01175   {0x2196,0x2196,0x2196},  {0x2197,0x2197,0x2197},
01176   {0x2198,0x2198,0x2198},  {0x2199,0x2199,0x2199},
01177   {0x219A,0x219A,0x219A},  {0x219B,0x219B,0x219B},
01178   {0x219C,0x219C,0x219C},  {0x219D,0x219D,0x219D},
01179   {0x219E,0x219E,0x219E},  {0x219F,0x219F,0x219F},
01180   {0x21A0,0x21A0,0x21A0},  {0x21A1,0x21A1,0x21A1},
01181   {0x21A2,0x21A2,0x21A2},  {0x21A3,0x21A3,0x21A3},
01182   {0x21A4,0x21A4,0x21A4},  {0x21A5,0x21A5,0x21A5},
01183   {0x21A6,0x21A6,0x21A6},  {0x21A7,0x21A7,0x21A7},
01184   {0x21A8,0x21A8,0x21A8},  {0x21A9,0x21A9,0x21A9},
01185   {0x21AA,0x21AA,0x21AA},  {0x21AB,0x21AB,0x21AB},
01186   {0x21AC,0x21AC,0x21AC},  {0x21AD,0x21AD,0x21AD},
01187   {0x21AE,0x21AE,0x21AE},  {0x21AF,0x21AF,0x21AF},
01188   {0x21B0,0x21B0,0x21B0},  {0x21B1,0x21B1,0x21B1},
01189   {0x21B2,0x21B2,0x21B2},  {0x21B3,0x21B3,0x21B3},
01190   {0x21B4,0x21B4,0x21B4},  {0x21B5,0x21B5,0x21B5},
01191   {0x21B6,0x21B6,0x21B6},  {0x21B7,0x21B7,0x21B7},
01192   {0x21B8,0x21B8,0x21B8},  {0x21B9,0x21B9,0x21B9},
01193   {0x21BA,0x21BA,0x21BA},  {0x21BB,0x21BB,0x21BB},
01194   {0x21BC,0x21BC,0x21BC},  {0x21BD,0x21BD,0x21BD},
01195   {0x21BE,0x21BE,0x21BE},  {0x21BF,0x21BF,0x21BF},
01196   {0x21C0,0x21C0,0x21C0},  {0x21C1,0x21C1,0x21C1},
01197   {0x21C2,0x21C2,0x21C2},  {0x21C3,0x21C3,0x21C3},
01198   {0x21C4,0x21C4,0x21C4},  {0x21C5,0x21C5,0x21C5},
01199   {0x21C6,0x21C6,0x21C6},  {0x21C7,0x21C7,0x21C7},
01200   {0x21C8,0x21C8,0x21C8},  {0x21C9,0x21C9,0x21C9},
01201   {0x21CA,0x21CA,0x21CA},  {0x21CB,0x21CB,0x21CB},
01202   {0x21CC,0x21CC,0x21CC},  {0x21CD,0x21CD,0x21CD},
01203   {0x21CE,0x21CE,0x21CE},  {0x21CF,0x21CF,0x21CF},
01204   {0x21D0,0x21D0,0x21D0},  {0x21D1,0x21D1,0x21D1},
01205   {0x21D2,0x21D2,0x21D2},  {0x21D3,0x21D3,0x21D3},
01206   {0x21D4,0x21D4,0x21D4},  {0x21D5,0x21D5,0x21D5},
01207   {0x21D6,0x21D6,0x21D6},  {0x21D7,0x21D7,0x21D7},
01208   {0x21D8,0x21D8,0x21D8},  {0x21D9,0x21D9,0x21D9},
01209   {0x21DA,0x21DA,0x21DA},  {0x21DB,0x21DB,0x21DB},
01210   {0x21DC,0x21DC,0x21DC},  {0x21DD,0x21DD,0x21DD},
01211   {0x21DE,0x21DE,0x21DE},  {0x21DF,0x21DF,0x21DF},
01212   {0x21E0,0x21E0,0x21E0},  {0x21E1,0x21E1,0x21E1},
01213   {0x21E2,0x21E2,0x21E2},  {0x21E3,0x21E3,0x21E3},
01214   {0x21E4,0x21E4,0x21E4},  {0x21E5,0x21E5,0x21E5},
01215   {0x21E6,0x21E6,0x21E6},  {0x21E7,0x21E7,0x21E7},
01216   {0x21E8,0x21E8,0x21E8},  {0x21E9,0x21E9,0x21E9},
01217   {0x21EA,0x21EA,0x21EA},  {0x21EB,0x21EB,0x21EB},
01218   {0x21EC,0x21EC,0x21EC},  {0x21ED,0x21ED,0x21ED},
01219   {0x21EE,0x21EE,0x21EE},  {0x21EF,0x21EF,0x21EF},
01220   {0x21F0,0x21F0,0x21F0},  {0x21F1,0x21F1,0x21F1},
01221   {0x21F2,0x21F2,0x21F2},  {0x21F3,0x21F3,0x21F3},
01222   {0x21F4,0x21F4,0x21F4},  {0x21F5,0x21F5,0x21F5},
01223   {0x21F6,0x21F6,0x21F6},  {0x21F7,0x21F7,0x21F7},
01224   {0x21F8,0x21F8,0x21F8},  {0x21F9,0x21F9,0x21F9},
01225   {0x21FA,0x21FA,0x21FA},  {0x21FB,0x21FB,0x21FB},
01226   {0x21FC,0x21FC,0x21FC},  {0x21FD,0x21FD,0x21FD},
01227   {0x21FE,0x21FE,0x21FE},  {0x21FF,0x21FF,0x21FF}
01228 };
01229 
01230 static MY_UNICASE_INFO plane24[]={
01231   {0x2400,0x2400,0x2400},  {0x2401,0x2401,0x2401},
01232   {0x2402,0x2402,0x2402},  {0x2403,0x2403,0x2403},
01233   {0x2404,0x2404,0x2404},  {0x2405,0x2405,0x2405},
01234   {0x2406,0x2406,0x2406},  {0x2407,0x2407,0x2407},
01235   {0x2408,0x2408,0x2408},  {0x2409,0x2409,0x2409},
01236   {0x240A,0x240A,0x240A},  {0x240B,0x240B,0x240B},
01237   {0x240C,0x240C,0x240C},  {0x240D,0x240D,0x240D},
01238   {0x240E,0x240E,0x240E},  {0x240F,0x240F,0x240F},
01239   {0x2410,0x2410,0x2410},  {0x2411,0x2411,0x2411},
01240   {0x2412,0x2412,0x2412},  {0x2413,0x2413,0x2413},
01241   {0x2414,0x2414,0x2414},  {0x2415,0x2415,0x2415},
01242   {0x2416,0x2416,0x2416},  {0x2417,0x2417,0x2417},
01243   {0x2418,0x2418,0x2418},  {0x2419,0x2419,0x2419},
01244   {0x241A,0x241A,0x241A},  {0x241B,0x241B,0x241B},
01245   {0x241C,0x241C,0x241C},  {0x241D,0x241D,0x241D},
01246   {0x241E,0x241E,0x241E},  {0x241F,0x241F,0x241F},
01247   {0x2420,0x2420,0x2420},  {0x2421,0x2421,0x2421},
01248   {0x2422,0x2422,0x2422},  {0x2423,0x2423,0x2423},
01249   {0x2424,0x2424,0x2424},  {0x2425,0x2425,0x2425},
01250   {0x2426,0x2426,0x2426},  {0x2427,0x2427,0x2427},
01251   {0x2428,0x2428,0x2428},  {0x2429,0x2429,0x2429},
01252   {0x242A,0x242A,0x242A},  {0x242B,0x242B,0x242B},
01253   {0x242C,0x242C,0x242C},  {0x242D,0x242D,0x242D},
01254   {0x242E,0x242E,0x242E},  {0x242F,0x242F,0x242F},
01255   {0x2430,0x2430,0x2430},  {0x2431,0x2431,0x2431},
01256   {0x2432,0x2432,0x2432},  {0x2433,0x2433,0x2433},
01257   {0x2434,0x2434,0x2434},  {0x2435,0x2435,0x2435},
01258   {0x2436,0x2436,0x2436},  {0x2437,0x2437,0x2437},
01259   {0x2438,0x2438,0x2438},  {0x2439,0x2439,0x2439},
01260   {0x243A,0x243A,0x243A},  {0x243B,0x243B,0x243B},
01261   {0x243C,0x243C,0x243C},  {0x243D,0x243D,0x243D},
01262   {0x243E,0x243E,0x243E},  {0x243F,0x243F,0x243F},
01263   {0x2440,0x2440,0x2440},  {0x2441,0x2441,0x2441},
01264   {0x2442,0x2442,0x2442},  {0x2443,0x2443,0x2443},
01265   {0x2444,0x2444,0x2444},  {0x2445,0x2445,0x2445},
01266   {0x2446,0x2446,0x2446},  {0x2447,0x2447,0x2447},
01267   {0x2448,0x2448,0x2448},  {0x2449,0x2449,0x2449},
01268   {0x244A,0x244A,0x244A},  {0x244B,0x244B,0x244B},
01269   {0x244C,0x244C,0x244C},  {0x244D,0x244D,0x244D},
01270   {0x244E,0x244E,0x244E},  {0x244F,0x244F,0x244F},
01271   {0x2450,0x2450,0x2450},  {0x2451,0x2451,0x2451},
01272   {0x2452,0x2452,0x2452},  {0x2453,0x2453,0x2453},
01273   {0x2454,0x2454,0x2454},  {0x2455,0x2455,0x2455},
01274   {0x2456,0x2456,0x2456},  {0x2457,0x2457,0x2457},
01275   {0x2458,0x2458,0x2458},  {0x2459,0x2459,0x2459},
01276   {0x245A,0x245A,0x245A},  {0x245B,0x245B,0x245B},
01277   {0x245C,0x245C,0x245C},  {0x245D,0x245D,0x245D},
01278   {0x245E,0x245E,0x245E},  {0x245F,0x245F,0x245F},
01279   {0x2460,0x2460,0x2460},  {0x2461,0x2461,0x2461},
01280   {0x2462,0x2462,0x2462},  {0x2463,0x2463,0x2463},
01281   {0x2464,0x2464,0x2464},  {0x2465,0x2465,0x2465},
01282   {0x2466,0x2466,0x2466},  {0x2467,0x2467,0x2467},
01283   {0x2468,0x2468,0x2468},  {0x2469,0x2469,0x2469},
01284   {0x246A,0x246A,0x246A},  {0x246B,0x246B,0x246B},
01285   {0x246C,0x246C,0x246C},  {0x246D,0x246D,0x246D},
01286   {0x246E,0x246E,0x246E},  {0x246F,0x246F,0x246F},
01287   {0x2470,0x2470,0x2470},  {0x2471,0x2471,0x2471},
01288   {0x2472,0x2472,0x2472},  {0x2473,0x2473,0x2473},
01289   {0x2474,0x2474,0x2474},  {0x2475,0x2475,0x2475},
01290   {0x2476,0x2476,0x2476},  {0x2477,0x2477,0x2477},
01291   {0x2478,0x2478,0x2478},  {0x2479,0x2479,0x2479},
01292   {0x247A,0x247A,0x247A},  {0x247B,0x247B,0x247B},
01293   {0x247C,0x247C,0x247C},  {0x247D,0x247D,0x247D},
01294   {0x247E,0x247E,0x247E},  {0x247F,0x247F,0x247F},
01295   {0x2480,0x2480,0x2480},  {0x2481,0x2481,0x2481},
01296   {0x2482,0x2482,0x2482},  {0x2483,0x2483,0x2483},
01297   {0x2484,0x2484,0x2484},  {0x2485,0x2485,0x2485},
01298   {0x2486,0x2486,0x2486},  {0x2487,0x2487,0x2487},
01299   {0x2488,0x2488,0x2488},  {0x2489,0x2489,0x2489},
01300   {0x248A,0x248A,0x248A},  {0x248B,0x248B,0x248B},
01301   {0x248C,0x248C,0x248C},  {0x248D,0x248D,0x248D},
01302   {0x248E,0x248E,0x248E},  {0x248F,0x248F,0x248F},
01303   {0x2490,0x2490,0x2490},  {0x2491,0x2491,0x2491},
01304   {0x2492,0x2492,0x2492},  {0x2493,0x2493,0x2493},
01305   {0x2494,0x2494,0x2494},  {0x2495,0x2495,0x2495},
01306   {0x2496,0x2496,0x2496},  {0x2497,0x2497,0x2497},
01307   {0x2498,0x2498,0x2498},  {0x2499,0x2499,0x2499},
01308   {0x249A,0x249A,0x249A},  {0x249B,0x249B,0x249B},
01309   {0x249C,0x249C,0x249C},  {0x249D,0x249D,0x249D},
01310   {0x249E,0x249E,0x249E},  {0x249F,0x249F,0x249F},
01311   {0x24A0,0x24A0,0x24A0},  {0x24A1,0x24A1,0x24A1},
01312   {0x24A2,0x24A2,0x24A2},  {0x24A3,0x24A3,0x24A3},
01313   {0x24A4,0x24A4,0x24A4},  {0x24A5,0x24A5,0x24A5},
01314   {0x24A6,0x24A6,0x24A6},  {0x24A7,0x24A7,0x24A7},
01315   {0x24A8,0x24A8,0x24A8},  {0x24A9,0x24A9,0x24A9},
01316   {0x24AA,0x24AA,0x24AA},  {0x24AB,0x24AB,0x24AB},
01317   {0x24AC,0x24AC,0x24AC},  {0x24AD,0x24AD,0x24AD},
01318   {0x24AE,0x24AE,0x24AE},  {0x24AF,0x24AF,0x24AF},
01319   {0x24B0,0x24B0,0x24B0},  {0x24B1,0x24B1,0x24B1},
01320   {0x24B2,0x24B2,0x24B2},  {0x24B3,0x24B3,0x24B3},
01321   {0x24B4,0x24B4,0x24B4},  {0x24B5,0x24B5,0x24B5},
01322   {0x24B6,0x24D0,0x24B6},  {0x24B7,0x24D1,0x24B7},
01323   {0x24B8,0x24D2,0x24B8},  {0x24B9,0x24D3,0x24B9},
01324   {0x24BA,0x24D4,0x24BA},  {0x24BB,0x24D5,0x24BB},
01325   {0x24BC,0x24D6,0x24BC},  {0x24BD,0x24D7,0x24BD},
01326   {0x24BE,0x24D8,0x24BE},  {0x24BF,0x24D9,0x24BF},
01327   {0x24C0,0x24DA,0x24C0},  {0x24C1,0x24DB,0x24C1},
01328   {0x24C2,0x24DC,0x24C2},  {0x24C3,0x24DD,0x24C3},
01329   {0x24C4,0x24DE,0x24C4},  {0x24C5,0x24DF,0x24C5},
01330   {0x24C6,0x24E0,0x24C6},  {0x24C7,0x24E1,0x24C7},
01331   {0x24C8,0x24E2,0x24C8},  {0x24C9,0x24E3,0x24C9},
01332   {0x24CA,0x24E4,0x24CA},  {0x24CB,0x24E5,0x24CB},
01333   {0x24CC,0x24E6,0x24CC},  {0x24CD,0x24E7,0x24CD},
01334   {0x24CE,0x24E8,0x24CE},  {0x24CF,0x24E9,0x24CF},
01335   {0x24B6,0x24D0,0x24B6},  {0x24B7,0x24D1,0x24B7},
01336   {0x24B8,0x24D2,0x24B8},  {0x24B9,0x24D3,0x24B9},
01337   {0x24BA,0x24D4,0x24BA},  {0x24BB,0x24D5,0x24BB},
01338   {0x24BC,0x24D6,0x24BC},  {0x24BD,0x24D7,0x24BD},
01339   {0x24BE,0x24D8,0x24BE},  {0x24BF,0x24D9,0x24BF},
01340   {0x24C0,0x24DA,0x24C0},  {0x24C1,0x24DB,0x24C1},
01341   {0x24C2,0x24DC,0x24C2},  {0x24C3,0x24DD,0x24C3},
01342   {0x24C4,0x24DE,0x24C4},  {0x24C5,0x24DF,0x24C5},
01343   {0x24C6,0x24E0,0x24C6},  {0x24C7,0x24E1,0x24C7},
01344   {0x24C8,0x24E2,0x24C8},  {0x24C9,0x24E3,0x24C9},
01345   {0x24CA,0x24E4,0x24CA},  {0x24CB,0x24E5,0x24CB},
01346   {0x24CC,0x24E6,0x24CC},  {0x24CD,0x24E7,0x24CD},
01347   {0x24CE,0x24E8,0x24CE},  {0x24CF,0x24E9,0x24CF},
01348   {0x24EA,0x24EA,0x24EA},  {0x24EB,0x24EB,0x24EB},
01349   {0x24EC,0x24EC,0x24EC},  {0x24ED,0x24ED,0x24ED},
01350   {0x24EE,0x24EE,0x24EE},  {0x24EF,0x24EF,0x24EF},
01351   {0x24F0,0x24F0,0x24F0},  {0x24F1,0x24F1,0x24F1},
01352   {0x24F2,0x24F2,0x24F2},  {0x24F3,0x24F3,0x24F3},
01353   {0x24F4,0x24F4,0x24F4},  {0x24F5,0x24F5,0x24F5},
01354   {0x24F6,0x24F6,0x24F6},  {0x24F7,0x24F7,0x24F7},
01355   {0x24F8,0x24F8,0x24F8},  {0x24F9,0x24F9,0x24F9},
01356   {0x24FA,0x24FA,0x24FA},  {0x24FB,0x24FB,0x24FB},
01357   {0x24FC,0x24FC,0x24FC},  {0x24FD,0x24FD,0x24FD},
01358   {0x24FE,0x24FE,0x24FE},  {0x24FF,0x24FF,0x24FF}
01359 };
01360 
01361 static MY_UNICASE_INFO planeFF[]={
01362   {0xFF00,0xFF00,0xFF00},  {0xFF01,0xFF01,0xFF01},
01363   {0xFF02,0xFF02,0xFF02},  {0xFF03,0xFF03,0xFF03},
01364   {0xFF04,0xFF04,0xFF04},  {0xFF05,0xFF05,0xFF05},
01365   {0xFF06,0xFF06,0xFF06},  {0xFF07,0xFF07,0xFF07},
01366   {0xFF08,0xFF08,0xFF08},  {0xFF09,0xFF09,0xFF09},
01367   {0xFF0A,0xFF0A,0xFF0A},  {0xFF0B,0xFF0B,0xFF0B},
01368   {0xFF0C,0xFF0C,0xFF0C},  {0xFF0D,0xFF0D,0xFF0D},
01369   {0xFF0E,0xFF0E,0xFF0E},  {0xFF0F,0xFF0F,0xFF0F},
01370   {0xFF10,0xFF10,0xFF10},  {0xFF11,0xFF11,0xFF11},
01371   {0xFF12,0xFF12,0xFF12},  {0xFF13,0xFF13,0xFF13},
01372   {0xFF14,0xFF14,0xFF14},  {0xFF15,0xFF15,0xFF15},
01373   {0xFF16,0xFF16,0xFF16},  {0xFF17,0xFF17,0xFF17},
01374   {0xFF18,0xFF18,0xFF18},  {0xFF19,0xFF19,0xFF19},
01375   {0xFF1A,0xFF1A,0xFF1A},  {0xFF1B,0xFF1B,0xFF1B},
01376   {0xFF1C,0xFF1C,0xFF1C},  {0xFF1D,0xFF1D,0xFF1D},
01377   {0xFF1E,0xFF1E,0xFF1E},  {0xFF1F,0xFF1F,0xFF1F},
01378   {0xFF20,0xFF20,0xFF20},  {0xFF21,0xFF41,0xFF21},
01379   {0xFF22,0xFF42,0xFF22},  {0xFF23,0xFF43,0xFF23},
01380   {0xFF24,0xFF44,0xFF24},  {0xFF25,0xFF45,0xFF25},
01381   {0xFF26,0xFF46,0xFF26},  {0xFF27,0xFF47,0xFF27},
01382   {0xFF28,0xFF48,0xFF28},  {0xFF29,0xFF49,0xFF29},
01383   {0xFF2A,0xFF4A,0xFF2A},  {0xFF2B,0xFF4B,0xFF2B},
01384   {0xFF2C,0xFF4C,0xFF2C},  {0xFF2D,0xFF4D,0xFF2D},
01385   {0xFF2E,0xFF4E,0xFF2E},  {0xFF2F,0xFF4F,0xFF2F},
01386   {0xFF30,0xFF50,0xFF30},  {0xFF31,0xFF51,0xFF31},
01387   {0xFF32,0xFF52,0xFF32},  {0xFF33,0xFF53,0xFF33},
01388   {0xFF34,0xFF54,0xFF34},  {0xFF35,0xFF55,0xFF35},
01389   {0xFF36,0xFF56,0xFF36},  {0xFF37,0xFF57,0xFF37},
01390   {0xFF38,0xFF58,0xFF38},  {0xFF39,0xFF59,0xFF39},
01391   {0xFF3A,0xFF5A,0xFF3A},  {0xFF3B,0xFF3B,0xFF3B},
01392   {0xFF3C,0xFF3C,0xFF3C},  {0xFF3D,0xFF3D,0xFF3D},
01393   {0xFF3E,0xFF3E,0xFF3E},  {0xFF3F,0xFF3F,0xFF3F},
01394   {0xFF40,0xFF40,0xFF40},  {0xFF21,0xFF41,0xFF21},
01395   {0xFF22,0xFF42,0xFF22},  {0xFF23,0xFF43,0xFF23},
01396   {0xFF24,0xFF44,0xFF24},  {0xFF25,0xFF45,0xFF25},
01397   {0xFF26,0xFF46,0xFF26},  {0xFF27,0xFF47,0xFF27},
01398   {0xFF28,0xFF48,0xFF28},  {0xFF29,0xFF49,0xFF29},
01399   {0xFF2A,0xFF4A,0xFF2A},  {0xFF2B,0xFF4B,0xFF2B},
01400   {0xFF2C,0xFF4C,0xFF2C},  {0xFF2D,0xFF4D,0xFF2D},
01401   {0xFF2E,0xFF4E,0xFF2E},  {0xFF2F,0xFF4F,0xFF2F},
01402   {0xFF30,0xFF50,0xFF30},  {0xFF31,0xFF51,0xFF31},
01403   {0xFF32,0xFF52,0xFF32},  {0xFF33,0xFF53,0xFF33},
01404   {0xFF34,0xFF54,0xFF34},  {0xFF35,0xFF55,0xFF35},
01405   {0xFF36,0xFF56,0xFF36},  {0xFF37,0xFF57,0xFF37},
01406   {0xFF38,0xFF58,0xFF38},  {0xFF39,0xFF59,0xFF39},
01407   {0xFF3A,0xFF5A,0xFF3A},  {0xFF5B,0xFF5B,0xFF5B},
01408   {0xFF5C,0xFF5C,0xFF5C},  {0xFF5D,0xFF5D,0xFF5D},
01409   {0xFF5E,0xFF5E,0xFF5E},  {0xFF5F,0xFF5F,0xFF5F},
01410   {0xFF60,0xFF60,0xFF60},  {0xFF61,0xFF61,0xFF61},
01411   {0xFF62,0xFF62,0xFF62},  {0xFF63,0xFF63,0xFF63},
01412   {0xFF64,0xFF64,0xFF64},  {0xFF65,0xFF65,0xFF65},
01413   {0xFF66,0xFF66,0xFF66},  {0xFF67,0xFF67,0xFF67},
01414   {0xFF68,0xFF68,0xFF68},  {0xFF69,0xFF69,0xFF69},
01415   {0xFF6A,0xFF6A,0xFF6A},  {0xFF6B,0xFF6B,0xFF6B},
01416   {0xFF6C,0xFF6C,0xFF6C},  {0xFF6D,0xFF6D,0xFF6D},
01417   {0xFF6E,0xFF6E,0xFF6E},  {0xFF6F,0xFF6F,0xFF6F},
01418   {0xFF70,0xFF70,0xFF70},  {0xFF71,0xFF71,0xFF71},
01419   {0xFF72,0xFF72,0xFF72},  {0xFF73,0xFF73,0xFF73},
01420   {0xFF74,0xFF74,0xFF74},  {0xFF75,0xFF75,0xFF75},
01421   {0xFF76,0xFF76,0xFF76},  {0xFF77,0xFF77,0xFF77},
01422   {0xFF78,0xFF78,0xFF78},  {0xFF79,0xFF79,0xFF79},
01423   {0xFF7A,0xFF7A,0xFF7A},  {0xFF7B,0xFF7B,0xFF7B},
01424   {0xFF7C,0xFF7C,0xFF7C},  {0xFF7D,0xFF7D,0xFF7D},
01425   {0xFF7E,0xFF7E,0xFF7E},  {0xFF7F,0xFF7F,0xFF7F},
01426   {0xFF80,0xFF80,0xFF80},  {0xFF81,0xFF81,0xFF81},
01427   {0xFF82,0xFF82,0xFF82},  {0xFF83,0xFF83,0xFF83},
01428   {0xFF84,0xFF84,0xFF84},  {0xFF85,0xFF85,0xFF85},
01429   {0xFF86,0xFF86,0xFF86},  {0xFF87,0xFF87,0xFF87},
01430   {0xFF88,0xFF88,0xFF88},  {0xFF89,0xFF89,0xFF89},
01431   {0xFF8A,0xFF8A,0xFF8A},  {0xFF8B,0xFF8B,0xFF8B},
01432   {0xFF8C,0xFF8C,0xFF8C},  {0xFF8D,0xFF8D,0xFF8D},
01433   {0xFF8E,0xFF8E,0xFF8E},  {0xFF8F,0xFF8F,0xFF8F},
01434   {0xFF90,0xFF90,0xFF90},  {0xFF91,0xFF91,0xFF91},
01435   {0xFF92,0xFF92,0xFF92},  {0xFF93,0xFF93,0xFF93},
01436   {0xFF94,0xFF94,0xFF94},  {0xFF95,0xFF95,0xFF95},
01437   {0xFF96,0xFF96,0xFF96},  {0xFF97,0xFF97,0xFF97},
01438   {0xFF98,0xFF98,0xFF98},  {0xFF99,0xFF99,0xFF99},
01439   {0xFF9A,0xFF9A,0xFF9A},  {0xFF9B,0xFF9B,0xFF9B},
01440   {0xFF9C,0xFF9C,0xFF9C},  {0xFF9D,0xFF9D,0xFF9D},
01441   {0xFF9E,0xFF9E,0xFF9E},  {0xFF9F,0xFF9F,0xFF9F},
01442   {0xFFA0,0xFFA0,0xFFA0},  {0xFFA1,0xFFA1,0xFFA1},
01443   {0xFFA2,0xFFA2,0xFFA2},  {0xFFA3,0xFFA3,0xFFA3},
01444   {0xFFA4,0xFFA4,0xFFA4},  {0xFFA5,0xFFA5,0xFFA5},
01445   {0xFFA6,0xFFA6,0xFFA6},  {0xFFA7,0xFFA7,0xFFA7},
01446   {0xFFA8,0xFFA8,0xFFA8},  {0xFFA9,0xFFA9,0xFFA9},
01447   {0xFFAA,0xFFAA,0xFFAA},  {0xFFAB,0xFFAB,0xFFAB},
01448   {0xFFAC,0xFFAC,0xFFAC},  {0xFFAD,0xFFAD,0xFFAD},
01449   {0xFFAE,0xFFAE,0xFFAE},  {0xFFAF,0xFFAF,0xFFAF},
01450   {0xFFB0,0xFFB0,0xFFB0},  {0xFFB1,0xFFB1,0xFFB1},
01451   {0xFFB2,0xFFB2,0xFFB2},  {0xFFB3,0xFFB3,0xFFB3},
01452   {0xFFB4,0xFFB4,0xFFB4},  {0xFFB5,0xFFB5,0xFFB5},
01453   {0xFFB6,0xFFB6,0xFFB6},  {0xFFB7,0xFFB7,0xFFB7},
01454   {0xFFB8,0xFFB8,0xFFB8},  {0xFFB9,0xFFB9,0xFFB9},
01455   {0xFFBA,0xFFBA,0xFFBA},  {0xFFBB,0xFFBB,0xFFBB},
01456   {0xFFBC,0xFFBC,0xFFBC},  {0xFFBD,0xFFBD,0xFFBD},
01457   {0xFFBE,0xFFBE,0xFFBE},  {0xFFBF,0xFFBF,0xFFBF},
01458   {0xFFC0,0xFFC0,0xFFC0},  {0xFFC1,0xFFC1,0xFFC1},
01459   {0xFFC2,0xFFC2,0xFFC2},  {0xFFC3,0xFFC3,0xFFC3},
01460   {0xFFC4,0xFFC4,0xFFC4},  {0xFFC5,0xFFC5,0xFFC5},
01461   {0xFFC6,0xFFC6,0xFFC6},  {0xFFC7,0xFFC7,0xFFC7},
01462   {0xFFC8,0xFFC8,0xFFC8},  {0xFFC9,0xFFC9,0xFFC9},
01463   {0xFFCA,0xFFCA,0xFFCA},  {0xFFCB,0xFFCB,0xFFCB},
01464   {0xFFCC,0xFFCC,0xFFCC},  {0xFFCD,0xFFCD,0xFFCD},
01465   {0xFFCE,0xFFCE,0xFFCE},  {0xFFCF,0xFFCF,0xFFCF},
01466   {0xFFD0,0xFFD0,0xFFD0},  {0xFFD1,0xFFD1,0xFFD1},
01467   {0xFFD2,0xFFD2,0xFFD2},  {0xFFD3,0xFFD3,0xFFD3},
01468   {0xFFD4,0xFFD4,0xFFD4},  {0xFFD5,0xFFD5,0xFFD5},
01469   {0xFFD6,0xFFD6,0xFFD6},  {0xFFD7,0xFFD7,0xFFD7},
01470   {0xFFD8,0xFFD8,0xFFD8},  {0xFFD9,0xFFD9,0xFFD9},
01471   {0xFFDA,0xFFDA,0xFFDA},  {0xFFDB,0xFFDB,0xFFDB},
01472   {0xFFDC,0xFFDC,0xFFDC},  {0xFFDD,0xFFDD,0xFFDD},
01473   {0xFFDE,0xFFDE,0xFFDE},  {0xFFDF,0xFFDF,0xFFDF},
01474   {0xFFE0,0xFFE0,0xFFE0},  {0xFFE1,0xFFE1,0xFFE1},
01475   {0xFFE2,0xFFE2,0xFFE2},  {0xFFE3,0xFFE3,0xFFE3},
01476   {0xFFE4,0xFFE4,0xFFE4},  {0xFFE5,0xFFE5,0xFFE5},
01477   {0xFFE6,0xFFE6,0xFFE6},  {0xFFE7,0xFFE7,0xFFE7},
01478   {0xFFE8,0xFFE8,0xFFE8},  {0xFFE9,0xFFE9,0xFFE9},
01479   {0xFFEA,0xFFEA,0xFFEA},  {0xFFEB,0xFFEB,0xFFEB},
01480   {0xFFEC,0xFFEC,0xFFEC},  {0xFFED,0xFFED,0xFFED},
01481   {0xFFEE,0xFFEE,0xFFEE},  {0xFFEF,0xFFEF,0xFFEF},
01482   {0xFFF0,0xFFF0,0xFFF0},  {0xFFF1,0xFFF1,0xFFF1},
01483   {0xFFF2,0xFFF2,0xFFF2},  {0xFFF3,0xFFF3,0xFFF3},
01484   {0xFFF4,0xFFF4,0xFFF4},  {0xFFF5,0xFFF5,0xFFF5},
01485   {0xFFF6,0xFFF6,0xFFF6},  {0xFFF7,0xFFF7,0xFFF7},
01486   {0xFFF8,0xFFF8,0xFFF8},  {0xFFF9,0xFFF9,0xFFF9},
01487   {0xFFFA,0xFFFA,0xFFFA},  {0xFFFB,0xFFFB,0xFFFB},
01488   {0xFFFC,0xFFFC,0xFFFC},  {0xFFFD,0xFFFD,0xFFFD},
01489   {0xFFFE,0xFFFE,0xFFFE},  {0xFFFF,0xFFFF,0xFFFF}
01490 };
01491 
01492 MY_UNICASE_INFO *my_unicase_default[256]={
01493  plane00, plane01, plane02, plane03, plane04, plane05,    NULL,    NULL,
01494     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01495     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01496     NULL,    NULL,    NULL,    NULL,    NULL,    NULL, plane1E, plane1F,
01497     NULL, plane21,    NULL,    NULL, plane24,    NULL,    NULL,    NULL,
01498     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01499     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01500     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01501     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01502     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01503     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01504     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01505     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01506     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01507     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01508     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01509     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01510     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01511     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01512     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01513     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01514     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01515     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01516     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01517     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01518     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01519     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01520     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01521     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01522     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01523     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01524     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL, planeFF
01525 
01526 };
01527 
01528 
01529 /*
01530   Turkish lower/upper mapping:
01531   1. LOWER(0x0049 LATIN CAPITAL LETTER I) ->
01532            0x0131 LATIN SMALL   LETTER DOTLESS I
01533   2. UPPER(0x0069 LATIN SMALL   LETTER I) ->
01534            0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
01535 */
01536 
01537 static MY_UNICASE_INFO turk00[]=
01538 {
01539   {0x0000,0x0000,0x0000},  {0x0001,0x0001,0x0001},
01540   {0x0002,0x0002,0x0002},  {0x0003,0x0003,0x0003},
01541   {0x0004,0x0004,0x0004},  {0x0005,0x0005,0x0005},
01542   {0x0006,0x0006,0x0006},  {0x0007,0x0007,0x0007},
01543   {0x0008,0x0008,0x0008},  {0x0009,0x0009,0x0009},
01544   {0x000A,0x000A,0x000A},  {0x000B,0x000B,0x000B},
01545   {0x000C,0x000C,0x000C},  {0x000D,0x000D,0x000D},
01546   {0x000E,0x000E,0x000E},  {0x000F,0x000F,0x000F},
01547   {0x0010,0x0010,0x0010},  {0x0011,0x0011,0x0011},
01548   {0x0012,0x0012,0x0012},  {0x0013,0x0013,0x0013},
01549   {0x0014,0x0014,0x0014},  {0x0015,0x0015,0x0015},
01550   {0x0016,0x0016,0x0016},  {0x0017,0x0017,0x0017},
01551   {0x0018,0x0018,0x0018},  {0x0019,0x0019,0x0019},
01552   {0x001A,0x001A,0x001A},  {0x001B,0x001B,0x001B},
01553   {0x001C,0x001C,0x001C},  {0x001D,0x001D,0x001D},
01554   {0x001E,0x001E,0x001E},  {0x001F,0x001F,0x001F},
01555   {0x0020,0x0020,0x0020},  {0x0021,0x0021,0x0021},
01556   {0x0022,0x0022,0x0022},  {0x0023,0x0023,0x0023},
01557   {0x0024,0x0024,0x0024},  {0x0025,0x0025,0x0025},
01558   {0x0026,0x0026,0x0026},  {0x0027,0x0027,0x0027},
01559   {0x0028,0x0028,0x0028},  {0x0029,0x0029,0x0029},
01560   {0x002A,0x002A,0x002A},  {0x002B,0x002B,0x002B},
01561   {0x002C,0x002C,0x002C},  {0x002D,0x002D,0x002D},
01562   {0x002E,0x002E,0x002E},  {0x002F,0x002F,0x002F},
01563   {0x0030,0x0030,0x0030},  {0x0031,0x0031,0x0031},
01564   {0x0032,0x0032,0x0032},  {0x0033,0x0033,0x0033},
01565   {0x0034,0x0034,0x0034},  {0x0035,0x0035,0x0035},
01566   {0x0036,0x0036,0x0036},  {0x0037,0x0037,0x0037},
01567   {0x0038,0x0038,0x0038},  {0x0039,0x0039,0x0039},
01568   {0x003A,0x003A,0x003A},  {0x003B,0x003B,0x003B},
01569   {0x003C,0x003C,0x003C},  {0x003D,0x003D,0x003D},
01570   {0x003E,0x003E,0x003E},  {0x003F,0x003F,0x003F},
01571   {0x0040,0x0040,0x0040},  {0x0041,0x0061,0x0041},
01572   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
01573   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
01574   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
01575   {0x0048,0x0068,0x0048},  {0x0049,0x0131,0x0049},
01576   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
01577   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
01578   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
01579   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
01580   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
01581   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
01582   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
01583   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
01584   {0x005A,0x007A,0x005A},  {0x005B,0x005B,0x005B},
01585   {0x005C,0x005C,0x005C},  {0x005D,0x005D,0x005D},
01586   {0x005E,0x005E,0x005E},  {0x005F,0x005F,0x005F},
01587   {0x0060,0x0060,0x0060},  {0x0041,0x0061,0x0041},
01588   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
01589   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
01590   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
01591   {0x0048,0x0068,0x0048},  {0x0130,0x0069,0x0049},
01592   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
01593   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
01594   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
01595   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
01596   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
01597   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
01598   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
01599   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
01600   {0x005A,0x007A,0x005A},  {0x007B,0x007B,0x007B},
01601   {0x007C,0x007C,0x007C},  {0x007D,0x007D,0x007D},
01602   {0x007E,0x007E,0x007E},  {0x007F,0x007F,0x007F},
01603   {0x0080,0x0080,0x0080},  {0x0081,0x0081,0x0081},
01604   {0x0082,0x0082,0x0082},  {0x0083,0x0083,0x0083},
01605   {0x0084,0x0084,0x0084},  {0x0085,0x0085,0x0085},
01606   {0x0086,0x0086,0x0086},  {0x0087,0x0087,0x0087},
01607   {0x0088,0x0088,0x0088},  {0x0089,0x0089,0x0089},
01608   {0x008A,0x008A,0x008A},  {0x008B,0x008B,0x008B},
01609   {0x008C,0x008C,0x008C},  {0x008D,0x008D,0x008D},
01610   {0x008E,0x008E,0x008E},  {0x008F,0x008F,0x008F},
01611   {0x0090,0x0090,0x0090},  {0x0091,0x0091,0x0091},
01612   {0x0092,0x0092,0x0092},  {0x0093,0x0093,0x0093},
01613   {0x0094,0x0094,0x0094},  {0x0095,0x0095,0x0095},
01614   {0x0096,0x0096,0x0096},  {0x0097,0x0097,0x0097},
01615   {0x0098,0x0098,0x0098},  {0x0099,0x0099,0x0099},
01616   {0x009A,0x009A,0x009A},  {0x009B,0x009B,0x009B},
01617   {0x009C,0x009C,0x009C},  {0x009D,0x009D,0x009D},
01618   {0x009E,0x009E,0x009E},  {0x009F,0x009F,0x009F},
01619   {0x00A0,0x00A0,0x00A0},  {0x00A1,0x00A1,0x00A1},
01620   {0x00A2,0x00A2,0x00A2},  {0x00A3,0x00A3,0x00A3},
01621   {0x00A4,0x00A4,0x00A4},  {0x00A5,0x00A5,0x00A5},
01622   {0x00A6,0x00A6,0x00A6},  {0x00A7,0x00A7,0x00A7},
01623   {0x00A8,0x00A8,0x00A8},  {0x00A9,0x00A9,0x00A9},
01624   {0x00AA,0x00AA,0x00AA},  {0x00AB,0x00AB,0x00AB},
01625   {0x00AC,0x00AC,0x00AC},  {0x00AD,0x00AD,0x00AD},
01626   {0x00AE,0x00AE,0x00AE},  {0x00AF,0x00AF,0x00AF},
01627   {0x00B0,0x00B0,0x00B0},  {0x00B1,0x00B1,0x00B1},
01628   {0x00B2,0x00B2,0x00B2},  {0x00B3,0x00B3,0x00B3},
01629   {0x00B4,0x00B4,0x00B4},  {0x039C,0x00B5,0x039C},
01630   {0x00B6,0x00B6,0x00B6},  {0x00B7,0x00B7,0x00B7},
01631   {0x00B8,0x00B8,0x00B8},  {0x00B9,0x00B9,0x00B9},
01632   {0x00BA,0x00BA,0x00BA},  {0x00BB,0x00BB,0x00BB},
01633   {0x00BC,0x00BC,0x00BC},  {0x00BD,0x00BD,0x00BD},
01634   {0x00BE,0x00BE,0x00BE},  {0x00BF,0x00BF,0x00BF},
01635   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
01636   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
01637   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
01638   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
01639   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
01640   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
01641   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
01642   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
01643   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
01644   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
01645   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
01646   {0x00D6,0x00F6,0x004F},  {0x00D7,0x00D7,0x00D7},
01647   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
01648   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
01649   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
01650   {0x00DE,0x00FE,0x00DE},  {0x00DF,0x00DF,0x00DF},
01651   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
01652   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
01653   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
01654   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
01655   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
01656   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
01657   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
01658   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
01659   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
01660   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
01661   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
01662   {0x00D6,0x00F6,0x004F},  {0x00F7,0x00F7,0x00F7},
01663   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
01664   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
01665   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
01666   {0x00DE,0x00FE,0x00DE},  {0x0178,0x00FF,0x0059}
01667 };
01668 
01669 
01670 
01671 MY_UNICASE_INFO *my_unicase_turkish[256]=
01672 {
01673   turk00, plane01, plane02, plane03, plane04, plane05,    NULL,    NULL,
01674     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01675     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01676     NULL,    NULL,    NULL,    NULL,    NULL,    NULL, plane1E, plane1F,
01677     NULL, plane21,    NULL,    NULL, plane24,    NULL,    NULL,    NULL,
01678     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01679     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01680     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01681     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01682     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01683     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01684     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01685     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01686     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01687     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01688     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01689     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01690     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01691     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01692     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01693     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01694     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01695     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01696     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01697     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01698     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01699     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01700     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01701     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01702     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01703     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
01704     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL, planeFF
01705 };
01706 
01707 
01708 
01728 int my_wildcmp_unicode(const CHARSET_INFO * const cs,
01729            const char *str,const char *str_end,
01730            const char *wildstr,const char *wildend,
01731            int escape, int w_one, int w_many,
01732            MY_UNICASE_INFO **weights)
01733 {
01734   int result= -1;     /* Not found, using wildcards */
01735   my_wc_t s_wc=0, w_wc=0;
01736   int scan, plane;
01737   my_charset_conv_mb_wc mb_wc;
01738   mb_wc= cs->cset->mb_wc;
01739 
01740   while (wildstr != wildend)
01741   {
01742     while (1)
01743     {
01744       bool escaped= 0;
01745       if ((scan= mb_wc(cs, &w_wc, (const unsigned char*)wildstr,
01746                        (const unsigned char*)wildend)) <= 0)
01747         return 1;
01748 
01749       if (w_wc == (my_wc_t)w_many)
01750       {
01751         result= 1;        /* Found an anchor char */
01752         break;
01753       }
01754 
01755       wildstr+= scan;
01756       if (w_wc ==  (my_wc_t)escape && wildstr < wildend)
01757       {
01758         if ((scan= mb_wc(cs, &w_wc, (const unsigned char*)wildstr,
01759                          (const unsigned char*)wildend)) <= 0)
01760           return 1;
01761         wildstr+= scan;
01762         escaped= 1;
01763       }
01764 
01765       if ((scan= mb_wc(cs, &s_wc, (const unsigned char*)str,
01766                        (const unsigned char*)str_end)) <= 0)
01767         return 1;
01768       str+= scan;
01769 
01770       if (!escaped && w_wc == (my_wc_t)w_one)
01771       {
01772         result= 1;        /* Found an anchor char */
01773       }
01774       else
01775       {
01776         if (weights)
01777         {
01778           if (s_wc < 0x10000)
01779           {
01780             plane=(s_wc>>8) & 0xFF;
01781             s_wc = weights[plane] ? weights[plane][s_wc & 0xFF].sort : s_wc;
01782           }
01783           if (w_wc < 0x10000)
01784           {
01785             plane=(w_wc>>8) & 0xFF;
01786             w_wc = weights[plane] ? weights[plane][w_wc & 0xFF].sort : w_wc;
01787           }
01788         }
01789         if (s_wc != w_wc)
01790           return 1;       /* No match */
01791       }
01792       if (wildstr == wildend)
01793   return (str != str_end);    /* Match if both are at end */
01794     }
01795 
01796 
01797     if (w_wc == (my_wc_t)w_many)
01798     {           /* Found w_many */
01799 
01800       /* Remove any '%' and '_' from the wild search string */
01801       for (; wildstr != wildend ;)
01802       {
01803         if ((scan= mb_wc(cs, &w_wc, (const unsigned char*)wildstr,
01804                          (const unsigned char*)wildend)) <= 0)
01805           return 1;
01806 
01807   if (w_wc == (my_wc_t)w_many)
01808   {
01809     wildstr+= scan;
01810     continue;
01811   }
01812 
01813   if (w_wc == (my_wc_t)w_one)
01814   {
01815     wildstr+= scan;
01816           if ((scan= mb_wc(cs, &s_wc, (const unsigned char*)str,
01817                            (const unsigned char*)str_end)) <=0)
01818             return 1;
01819           str+= scan;
01820     continue;
01821   }
01822   break;          /* Not a wild character */
01823       }
01824 
01825       if (wildstr == wildend)
01826   return 0;       /* Ok if w_many is last */
01827 
01828       if (str == str_end)
01829   return -1;
01830 
01831       if ((scan= mb_wc(cs, &w_wc, (const unsigned char*)wildstr,
01832                        (const unsigned char*)wildend)) <=0)
01833         return 1;
01834       wildstr+= scan;
01835 
01836       if (w_wc ==  (my_wc_t)escape)
01837       {
01838         if (wildstr < wildend)
01839         {
01840           if ((scan= mb_wc(cs, &w_wc, (const unsigned char*)wildstr,
01841                            (const unsigned char*)wildend)) <=0)
01842             return 1;
01843           wildstr+= scan;
01844         }
01845       }
01846 
01847       while (1)
01848       {
01849         /* Skip until the first character from wildstr is found */
01850         while (str != str_end)
01851         {
01852           if ((scan= mb_wc(cs, &s_wc, (const unsigned char*)str,
01853                            (const unsigned char*)str_end)) <=0)
01854             return 1;
01855           if (weights)
01856           {
01857             plane=(s_wc>>8) & 0xFF;
01858             s_wc = weights[plane] ? weights[plane][s_wc & 0xFF].sort : s_wc;
01859             plane=(w_wc>>8) & 0xFF;
01860             w_wc = weights[plane] ? weights[plane][w_wc & 0xFF].sort : w_wc;
01861           }
01862 
01863           if (s_wc == w_wc)
01864             break;
01865           str+= scan;
01866         }
01867         if (str == str_end)
01868           return -1;
01869 
01870         str+= scan;
01871         result= my_wildcmp_unicode(cs, str, str_end, wildstr, wildend,
01872                                    escape, w_one, w_many,
01873                                    weights);
01874         if (result <= 0)
01875           return result;
01876       }
01877     }
01878   }
01879   return (str != str_end ? 1 : 0);
01880 }
01881 
01882 
01883 int make_escape_code(const CHARSET_INFO * const cs, const char *escape)
01884 {
01885   my_charset_conv_mb_wc mb_wc= cs->cset->mb_wc;
01886   my_wc_t escape_wc;
01887   int rc= mb_wc(cs, &escape_wc,
01888                 (const unsigned char*) escape,
01889                 (const unsigned char*) escape + strlen(escape));
01890   return (int)(rc > 0 ? escape_wc : '\\');
01891 }
01892 
01893 /*
01894   We consider bytes with code more than 127 as a letter.
01895   This garantees that word boundaries work fine with regular
01896   expressions. Note, there is no need to mark byte 255  as a
01897   letter, it is illegal byte in UTF8.
01898 */
01899 static unsigned char ctype_utf8mb4[]=
01900 {
01901     0,
01902    32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32,
01903    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
01904    72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
01905   132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16,
01906    16,129,129,129,129,129,129,  1,  1,  1,  1,  1,  1,  1,  1,  1,
01907     1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 16, 16, 16, 16, 16,
01908    16,130,130,130,130,130,130,  2,  2,  2,  2,  2,  2,  2,  2,  2,
01909     2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 16, 16, 16, 16, 32,
01910     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
01911     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
01912     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
01913     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
01914     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
01915     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
01916     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
01917     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  0
01918 };
01919 
01920 
01921 static unsigned char to_lower_utf8mb4[]=
01922 {
01923     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
01924    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
01925    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
01926    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
01927    64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
01928   112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95,
01929    96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
01930   112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
01931   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
01932   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
01933   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
01934   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
01935   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
01936   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
01937   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
01938   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
01939 };
01940 
01941 
01942 static unsigned char to_upper_utf8mb4[]=
01943 {
01944     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
01945    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
01946    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
01947    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
01948    64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
01949    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
01950    96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
01951    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127,
01952   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
01953   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
01954   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
01955   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
01956   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
01957   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
01958   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
01959   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
01960 };
01961 
01962 
01963 static inline int
01964 bincmp_utf8mb4(const unsigned char *s, const unsigned char *se,
01965                const unsigned char *t, const unsigned char *te)
01966 {
01967   int slen= (int) (se - s), tlen= (int) (te - t);
01968   int len= min(slen, tlen);
01969   int cmp= memcmp(s, t, len);
01970   return cmp ? cmp : slen - tlen;
01971 }
01972 
01973 
01974 int
01975 my_mb_wc_utf8mb4(const CHARSET_INFO * const,
01976                  my_wc_t * pwc, const unsigned char *s, const unsigned char *e)
01977 {
01978   unsigned char c;
01979 
01980   if (s >= e)
01981     return MY_CS_TOOSMALL;
01982 
01983   c= s[0];
01984   if (c < 0x80)
01985   {
01986     *pwc= c;
01987     return 1;
01988   }
01989   else if (c < 0xc2)
01990     return MY_CS_ILSEQ;
01991   else if (c < 0xe0)
01992   {
01993     if (s + 2 > e) /* We need 2 characters */
01994       return MY_CS_TOOSMALL2;
01995 
01996     if (!((s[1] ^ 0x80) < 0x40))
01997       return MY_CS_ILSEQ;
01998 
01999     *pwc= ((my_wc_t) (c & 0x1f) << 6) | (my_wc_t) (s[1] ^ 0x80);
02000     return 2;
02001   }
02002   else if (c < 0xf0)
02003   {
02004     if (s + 3 > e) /* We need 3 characters */
02005       return MY_CS_TOOSMALL3;
02006 
02007     if (!((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 &&
02008           (c >= 0xe1 || s[1] >= 0xa0)))
02009       return MY_CS_ILSEQ;
02010 
02011     *pwc= ((my_wc_t) (c & 0x0f) << 12)   |
02012           ((my_wc_t) (s[1] ^ 0x80) << 6) |
02013            (my_wc_t) (s[2] ^ 0x80);
02014     return 3;
02015   }
02016   else if (c < 0xf8)
02017   {
02018     if (s + 4 > e) /* We need 4 characters */
02019       return MY_CS_TOOSMALL4;
02020 
02021     if (!((s[1] ^ 0x80) < 0x40 &&
02022           (s[2] ^ 0x80) < 0x40 &&
02023           (s[3] ^ 0x80) < 0x40 &&
02024           (c >= 0xf1 || s[1] >= 0x90)))
02025       return MY_CS_ILSEQ;
02026     *pwc = ((my_wc_t) (c & 0x07) << 18)    |
02027            ((my_wc_t) (s[1] ^ 0x80) << 12) |
02028            ((my_wc_t) (s[2] ^ 0x80) << 6)  |
02029             (my_wc_t) (s[3] ^ 0x80);
02030     return 4;
02031   }
02032   return MY_CS_ILSEQ;
02033 }
02034 
02035 
02036 /*
02037   The same as above, but without range check
02038   for example, for a null-terminated string
02039 */
02040 static int
02041 my_mb_wc_utf8mb4_no_range(const CHARSET_INFO * const,
02042                           my_wc_t *pwc, const unsigned char *s)
02043 {
02044   unsigned char c;
02045 
02046   c= s[0];
02047   if (c < 0x80)
02048   {
02049     *pwc = c;
02050     return 1;
02051   }
02052 
02053   if (c < 0xc2)
02054     return MY_CS_ILSEQ;
02055 
02056   if (c < 0xe0)
02057   {
02058     if (!((s[1] ^ 0x80) < 0x40))
02059       return MY_CS_ILSEQ;
02060 
02061     *pwc = ((my_wc_t) (c & 0x1f) << 6) | (my_wc_t) (s[1] ^ 0x80);
02062     return 2;
02063   }
02064 
02065   if (c < 0xf0)
02066   {
02067     if (!((s[1] ^ 0x80) < 0x40 &&
02068           (s[2] ^ 0x80) < 0x40 &&
02069           (c >= 0xe1 || s[1] >= 0xa0)))
02070       return MY_CS_ILSEQ;
02071     *pwc= ((my_wc_t) (c & 0x0f) << 12)   |
02072           ((my_wc_t) (s[1] ^ 0x80) << 6) |
02073            (my_wc_t) (s[2] ^ 0x80);
02074 
02075     return 3;
02076   }
02077   else if (c < 0xf8)
02078   {
02079     if (!((s[1] ^ 0x80) < 0x40 &&
02080           (s[2] ^ 0x80) < 0x40 &&
02081           (s[3] ^ 0x80) < 0x40 &&
02082           (c >= 0xf1 || s[1] >= 0x90)))
02083       return MY_CS_ILSEQ;
02084     *pwc = ((my_wc_t) (c & 0x07) << 18)    |
02085            ((my_wc_t) (s[1] ^ 0x80) << 12) |
02086            ((my_wc_t) (s[2] ^ 0x80) << 6)  |
02087             (my_wc_t) (s[3] ^ 0x80);
02088     return 4;
02089   }
02090   return MY_CS_ILSEQ;
02091 }
02092 
02093 
02094 int
02095 my_wc_mb_utf8mb4(const CHARSET_INFO * const,
02096                  my_wc_t wc, unsigned char *r, unsigned char *e)
02097 {
02098   int count;
02099 
02100   if (r >= e)
02101     return MY_CS_TOOSMALL;
02102 
02103   if (wc < 0x80)
02104     count= 1;
02105   else if (wc < 0x800)
02106     count= 2;
02107   else if (wc < 0x10000)
02108     count= 3;
02109   else if (wc < 0x200000)
02110     count= 4;
02111   else return MY_CS_ILUNI;
02112 
02113   if (r + count > e)
02114     return my_cs_toosmalln(count);
02115 
02116   switch (count) {
02117     /* Fall through all cases!!! */
02118     case 4: r[3] = (unsigned char) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x10000;
02119     case 3: r[2] = (unsigned char) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x800;
02120     case 2: r[1] = (unsigned char) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0xc0;
02121     case 1: r[0] = (unsigned char) wc;
02122   }
02123   return count;
02124 }
02125 
02126 
02127 /*
02128   The same as above, but without range check.
02129 */
02130 static int
02131 my_wc_mb_utf8mb4_no_range(const CHARSET_INFO * const,
02132                           my_wc_t wc, unsigned char *r)
02133 {
02134   int count;
02135 
02136   if (wc < 0x80)
02137     count= 1;
02138   else if (wc < 0x800)
02139     count= 2;
02140   else if (wc < 0x10000)
02141     count= 3;
02142   else if (wc < 0x200000)
02143     count= 4;
02144   else
02145     return MY_CS_ILUNI;
02146 
02147   switch (count)
02148   {
02149     /* Fall through all cases!!! */
02150     case 4: r[3]= (unsigned char) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x10000;
02151     case 3: r[2]= (unsigned char) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x800;
02152     case 2: r[1]= (unsigned char) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0xc0;
02153     case 1: r[0]= (unsigned char) wc;
02154   }
02155   return count;
02156 }
02157 
02158 
02159 #define REPLACEMENT_CHAR 0xFFFD;
02160 
02161 
02162 static inline void
02163 my_tolower_utf8mb4(MY_UNICASE_INFO **uni_plane, my_wc_t *wc)
02164 {
02165   int page= *wc >> 8;
02166   if (page < 256 && uni_plane[page])
02167     *wc= uni_plane[page][*wc & 0xFF].tolower;
02168 }
02169 
02170 
02171 static inline void
02172 my_toupper_utf8mb4(MY_UNICASE_INFO **uni_plane, my_wc_t *wc)
02173 {
02174   int page= *wc >> 8;
02175   if (page < 256 && uni_plane[page])
02176     *wc= uni_plane[page][*wc & 0xFF].toupper;
02177 }
02178 
02179 
02180 static inline void
02181 my_tosort_utf8mb4(MY_UNICASE_INFO **uni_plane, my_wc_t *wc)
02182 {
02183   int page= *wc >> 8;
02184   if (page < 256)
02185   {
02186     if (uni_plane[page])
02187       *wc= uni_plane[page][*wc & 0xFF].sort;
02188   }
02189   else
02190   {
02191     *wc= REPLACEMENT_CHAR;
02192   }
02193 }
02194 
02195 
02196 size_t
02197 my_caseup_utf8mb4(const CHARSET_INFO * const cs, char *src, size_t srclen,
02198                   char *dst, size_t dstlen)
02199 {
02200   my_wc_t wc;
02201   int srcres, dstres;
02202   char *srcend= src + srclen, *dstend= dst + dstlen, *dst0= dst;
02203   MY_UNICASE_INFO **uni_plane= cs->caseinfo;
02204   assert(src != dst || cs->caseup_multiply == 1);
02205 
02206   while ((src < srcend) &&
02207          (srcres= my_mb_wc_utf8mb4(cs, &wc,
02208                                    (unsigned char *) src, (unsigned char*) srcend)) > 0)
02209   {
02210     my_toupper_utf8mb4(uni_plane, &wc);
02211     if ((dstres= my_wc_mb_utf8mb4(cs, wc, (unsigned char*) dst, (unsigned char*) dstend)) <= 0)
02212       break;
02213     src+= srcres;
02214     dst+= dstres;
02215   }
02216   return (size_t) (dst - dst0);
02217 }
02218 
02219 
02220 static inline void
02221 my_hash_add(uint32_t *n1, uint32_t *n2, uint32_t ch)
02222 {
02223   n1[0]^= (((n1[0] & 63) + n2[0]) * (ch)) + (n1[0] << 8);
02224   n2[0]+= 3;
02225 }
02226 
02227 
02228 void my_hash_sort_utf8mb4(const CHARSET_INFO * const cs,
02229                           const unsigned char *s, size_t slen,
02230                           uint32_t *n1, uint32_t *n2)
02231 {
02232   my_wc_t wc;
02233   int res;
02234   const unsigned char *e= s + slen;
02235   MY_UNICASE_INFO **uni_plane= cs->caseinfo;
02236 
02237   /*
02238     Remove end space. We do this to be able to compare
02239     'A ' and 'A' as identical
02240   */
02241   while (e > s && e[-1] == ' ')
02242     e--;
02243 
02244   while ((res= my_mb_wc_utf8mb4(cs, &wc, (const unsigned char*) s, (const unsigned char*) e)) > 0)
02245   {
02246     my_tosort_utf8mb4(uni_plane, &wc);
02247     my_hash_add(n1, n2, (uint32_t) (wc & 0xFF));
02248     my_hash_add(n1, n2, (uint32_t) (wc >> 8)  & 0xFF);
02249     if (wc > 0xFFFF)
02250     {
02251        /*
02252         Put the highest byte only if it is non-zero,
02253         to make hash functions for utf8mb3 and utf8mb4
02254         compatible for BMP characters.
02255         This is useful to keep order of records in
02256         test results, e.g. for "SHOW GRANTS".
02257       */
02258       my_hash_add(n1, n2, (uint32_t) (wc >> 16) & 0xFF);
02259     }
02260     s+= res;
02261   }
02262 }
02263 
02264 
02265 size_t
02266 my_caseup_str_utf8mb4(const CHARSET_INFO * const cs, char *src)
02267 {
02268   my_wc_t wc;
02269   int srcres, dstres;
02270   char *dst= src, *dst0= src;
02271   MY_UNICASE_INFO **uni_plane= cs->caseinfo;
02272   assert(cs->caseup_multiply == 1);
02273 
02274   while (*src &&
02275          (srcres= my_mb_wc_utf8mb4_no_range(cs, &wc, (unsigned char *) src)) > 0)
02276   {
02277     my_toupper_utf8mb4(uni_plane, &wc);
02278     if ((dstres= my_wc_mb_utf8mb4_no_range(cs, wc, (unsigned char*) dst)) <= 0)
02279       break;
02280     src+= srcres;
02281     dst+= dstres;
02282   }
02283   *dst= '\0';
02284   return (size_t) (dst - dst0);
02285 }
02286 
02287 
02288 size_t
02289 my_casedn_utf8mb4(const CHARSET_INFO * const cs,
02290                   char *src, size_t srclen,
02291                   char *dst, size_t dstlen)
02292 {
02293   my_wc_t wc;
02294   int srcres, dstres;
02295   char *srcend= src + srclen, *dstend= dst + dstlen, *dst0= dst;
02296   MY_UNICASE_INFO **uni_plane= cs->caseinfo;
02297   assert(src != dst || cs->casedn_multiply == 1);
02298 
02299   while ((src < srcend) &&
02300          (srcres= my_mb_wc_utf8mb4(cs, &wc,
02301                                    (unsigned char*) src, (unsigned char*) srcend)) > 0)
02302   {
02303     my_tolower_utf8mb4(uni_plane, &wc);
02304     if ((dstres= my_wc_mb_utf8mb4(cs, wc, (unsigned char*) dst, (unsigned char*) dstend)) <= 0)
02305       break;
02306     src+= srcres;
02307     dst+= dstres;
02308   }
02309   return (size_t) (dst - dst0);
02310 }
02311 
02312 
02313 size_t
02314 my_casedn_str_utf8mb4(const CHARSET_INFO * const cs, char *src)
02315 {
02316   my_wc_t wc;
02317   int srcres, dstres;
02318   char *dst= src, *dst0= src;
02319   MY_UNICASE_INFO **uni_plane= cs->caseinfo;
02320   assert(cs->casedn_multiply == 1);
02321 
02322   while (*src &&
02323          (srcres= my_mb_wc_utf8mb4_no_range(cs, &wc, (unsigned char *) src)) > 0)
02324   {
02325     my_tolower_utf8mb4(uni_plane, &wc);
02326     if ((dstres= my_wc_mb_utf8mb4_no_range(cs, wc, (unsigned char*) dst)) <= 0)
02327       break;
02328     src+= srcres;
02329     dst+= dstres;
02330   }
02331 
02332   /*
02333    In rare cases lower string can be shorter than
02334    the original string, for example:
02335 
02336    "U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE"
02337    (which is 0xC4B0 in utf8, i.e. two bytes)
02338 
02339    is converted into
02340 
02341    "U+0069 LATIN SMALL LETTER I"
02342    (which is 0x69 in utf8, i.e. one byte)
02343 
02344    So, we need to put '\0' terminator after converting.
02345   */
02346 
02347   *dst= '\0';
02348   return (size_t) (dst - dst0);
02349 }
02350 
02351 
02352 int
02353 my_strnncoll_utf8mb4(const CHARSET_INFO * const cs,
02354                      const unsigned char *s, size_t slen,
02355                      const unsigned char *t, size_t tlen,
02356                      bool t_is_prefix)
02357 {
02358   my_wc_t s_wc=0;
02359   my_wc_t t_wc=0;
02360   const unsigned char *se= s + slen;
02361   const unsigned char *te= t + tlen;
02362   MY_UNICASE_INFO **uni_plane= cs->caseinfo;
02363 
02364   while ( s < se && t < te )
02365   {
02366     int s_res= my_mb_wc_utf8mb4(cs, &s_wc, s, se);
02367     int t_res= my_mb_wc_utf8mb4(cs, &t_wc, t, te);
02368 
02369     if ( s_res <= 0 || t_res <= 0 )
02370     {
02371       /* Incorrect string, compare bytewise */
02372       return bincmp_utf8mb4(s, se, t, te);
02373     }
02374 
02375     my_tosort_utf8mb4(uni_plane, &s_wc);
02376     my_tosort_utf8mb4(uni_plane, &t_wc);
02377 
02378     if ( s_wc != t_wc )
02379     {
02380       return s_wc > t_wc ? 1 : -1;
02381     }
02382 
02383     s+= s_res;
02384     t+= t_res;
02385   }
02386   return (int) (t_is_prefix ? (t - te) : ((se - s) - (te - t)));
02387 }
02388 
02389 
02417 int
02418 my_strnncollsp_utf8mb4(const CHARSET_INFO * const cs,
02419                        const unsigned char *s, size_t slen,
02420                        const unsigned char *t, size_t tlen,
02421                        bool diff_if_only_endspace_difference)
02422 {
02423   int res;
02424   my_wc_t s_wc=0;
02425   my_wc_t t_wc=0;
02426   const unsigned char *se= s + slen, *te= t + tlen;
02427   MY_UNICASE_INFO **uni_plane= cs->caseinfo;
02428 
02429 #ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE
02430   diff_if_only_endspace_difference= false;
02431 #endif
02432 
02433   while ( s < se && t < te )
02434   {
02435     int s_res= my_mb_wc_utf8mb4(cs, &s_wc, s, se);
02436     int t_res= my_mb_wc_utf8mb4(cs, &t_wc, t, te);
02437 
02438     if ( s_res <= 0 || t_res <= 0 )
02439     {
02440       /* Incorrect string, compare bytewise */
02441       return bincmp_utf8mb4(s, se, t, te);
02442     }
02443 
02444     my_tosort_utf8mb4(uni_plane, &s_wc);
02445     my_tosort_utf8mb4(uni_plane, &t_wc);
02446 
02447     if ( s_wc != t_wc )
02448     {
02449       return s_wc > t_wc ? 1 : -1;
02450     }
02451 
02452     s+=s_res;
02453     t+=t_res;
02454   }
02455 
02456   slen= (size_t) (se-s);
02457   tlen= (size_t) (te-t);
02458   res= 0;
02459 
02460   if (slen != tlen)
02461   {
02462     int swap= 1;
02463     if (diff_if_only_endspace_difference)
02464       res= 1;                                   /* Assume 'a' is bigger */
02465     if (slen < tlen)
02466     {
02467       slen= tlen;
02468       s= t;
02469       se= te;
02470       swap= -1;
02471       res= -res;
02472     }
02473     /*
02474       This following loop uses the fact that in UTF-8
02475       all multibyte characters are greater than space,
02476       and all multibyte head characters are greater than
02477       space. It means if we meet a character greater
02478       than space, it always means that the longer string
02479       is greater. So we can reuse the same loop from the
02480       8bit version, without having to process full multibute
02481       sequences.
02482     */
02483     for ( ; s < se; s++)
02484     {
02485       if (*s != ' ')
02486   return (*s < ' ') ? -swap : swap;
02487     }
02488   }
02489   return res;
02490 }
02491 
02492 
02506 int my_strcasecmp_utf8mb4(const CHARSET_INFO * const cs,
02507                           const char *s, const char *t)
02508 {
02509   MY_UNICASE_INFO **uni_plane= cs->caseinfo;
02510   while (s[0] && t[0])
02511   {
02512     my_wc_t s_wc,t_wc;
02513 
02514     if ((unsigned char) s[0] < 128)
02515     {
02516       /*
02517         s[0] is between 0 and 127.
02518         It represents a single byte character.
02519         Convert it into weight according to collation.
02520       */
02521       s_wc= plane00[(unsigned char) s[0]].tolower;
02522       s++;
02523     }
02524     else
02525     {
02526       int res= my_mb_wc_utf8mb4_no_range(cs, &s_wc, (const unsigned char*) s);
02527 
02528       /*
02529          In the case of wrong multibyte sequence we will
02530          call strcmp() for byte-to-byte comparison.
02531       */
02532       if (res <= 0)
02533         return strcmp(s, t);
02534       s+= res;
02535 
02536       my_tolower_utf8mb4(uni_plane, &s_wc);
02537     }
02538 
02539 
02540     /* Do the same for the second string */
02541 
02542     if ((unsigned char) t[0] < 128)
02543     {
02544       /* Convert single byte character into weight */
02545       t_wc= plane00[(unsigned char) t[0]].tolower;
02546       t++;
02547     }
02548     else
02549     {
02550       int res= my_mb_wc_utf8mb4_no_range(cs, &t_wc, (const unsigned char*) t);
02551       if (res <= 0)
02552         return strcmp(s, t);
02553       t+= res;
02554 
02555       my_tolower_utf8mb4(uni_plane, &t_wc);
02556     }
02557 
02558     /* Now we have two weights, let's compare them */
02559     if ( s_wc != t_wc )
02560       return  ((int) s_wc) - ((int) t_wc);
02561   }
02562   return ((int) (unsigned char) s[0]) - ((int) (unsigned char) t[0]);
02563 }
02564 
02565 
02566 int
02567 my_wildcmp_utf8mb4(const CHARSET_INFO * const cs,
02568                    const char *str, const char *strend,
02569                    const char *wildstr, const char *wildend,
02570                    int escape, int w_one, int w_many)
02571 {
02572   return my_wildcmp_unicode(cs, str, strend, wildstr, wildend,
02573                             escape, w_one, w_many, cs->caseinfo);
02574 }
02575 
02576 
02577 size_t
02578 my_strnxfrmlen_utf8mb4(const CHARSET_INFO * const, size_t len)
02579 {
02580   /* TODO: fix when working on WL "Unicode new version" */
02581   return (len * 2 + 2) / 4;
02582 }
02583 
02584 
02585 size_t
02586 my_strnxfrm_utf8mb4(const CHARSET_INFO * const cs,
02587                     unsigned char *dst, size_t dstlen, uint32_t nweights,
02588                     const unsigned char *src, size_t srclen, uint32_t flags)
02589 {
02590   my_wc_t wc;
02591   int res;
02592   unsigned char *dst0= dst;
02593   unsigned char *de= dst + dstlen;
02594   unsigned char *de_beg= de - 1;
02595   const unsigned char *se = src + srclen;
02596   MY_UNICASE_INFO **uni_plane= (cs->state & MY_CS_BINSORT) ?
02597                                 NULL : cs->caseinfo;
02598 
02599   for (; dst < de_beg && nweights; nweights--)
02600   {
02601     if ((res= my_mb_wc_utf8mb4(cs,&wc, src, se)) <= 0)
02602       break;
02603     src+=res;
02604 
02605     if (uni_plane)
02606       my_tosort_utf8mb4(uni_plane, &wc);
02607 
02608     *dst++= (unsigned char)(wc >> 8);
02609     *dst++= (unsigned char)(wc & 0xFF);
02610 
02611   }
02612 
02613   if (dst < de && nweights && (flags & MY_STRXFRM_PAD_WITH_SPACE))
02614   {
02615     /* Fill the tail with keys for space character */
02616     for (; dst < de_beg && nweights; nweights--)
02617     {
02618       *dst++= 0x00;
02619       *dst++= 0x20;
02620     }
02621 
02622     if (dst < de)  /* Clear the last byte, if "dstlen" was an odd number */
02623       *dst++= 0x00;
02624   }
02625   my_strxfrm_desc_and_reverse(dst0, dst, flags, 0);
02626   return dst - dst0;
02627 }
02628 
02629 
02630 unsigned int my_ismbchar_utf8mb4(const CHARSET_INFO * const cs,
02631                                  const char *b, const char *e)
02632 {
02633   my_wc_t wc;
02634   int res= my_mb_wc_utf8mb4(cs,&wc, (const unsigned char*)b, (const unsigned char*)e);
02635   return (res > 1) ? res : 0;
02636 }
02637 
02638 
02639 unsigned int my_mbcharlen_utf8mb4(const CHARSET_INFO * const, uint32_t c)
02640 {
02641   if (c < 0x80)
02642     return 1;
02643   if (c < 0xc2)
02644     return 0; /* Illegal mb head */
02645   if (c < 0xe0)
02646     return 2;
02647   if (c < 0xf0)
02648     return 3;
02649   if (c < 0xf8)
02650     return 4;
02651   return 0; /* Illegal mb head */;
02652 }
02653 
02654 
02655 static MY_COLLATION_HANDLER my_collation_utf8mb4_general_ci_handler=
02656 {
02657   NULL,               /* init */
02658   my_strnncoll_utf8mb4,
02659   my_strnncollsp_utf8mb4,
02660   my_strnxfrm_utf8mb4,
02661   my_strnxfrmlen_utf8mb4,
02662   my_like_range_mb,
02663   my_wildcmp_utf8mb4,
02664   my_strcasecmp_utf8mb4,
02665   my_instr_mb,
02666   my_hash_sort_utf8mb4,
02667   my_propagate_complex
02668 };
02669 
02670 
02671 static MY_COLLATION_HANDLER my_collation_utf8mb4_bin_handler =
02672 {
02673     NULL,   /* init */
02674     my_strnncoll_mb_bin,
02675     my_strnncollsp_mb_bin,
02676     my_strnxfrm_utf8mb4,
02677     my_strnxfrmlen_utf8mb4,
02678     my_like_range_mb,
02679     my_wildcmp_mb_bin,
02680     my_strcasecmp_mb_bin,
02681     my_instr_mb,
02682     my_hash_sort_mb_bin,
02683     my_propagate_simple
02684 };
02685 
02686 
02687 MY_CHARSET_HANDLER my_charset_utf8mb4_handler=
02688 {
02689   NULL,               /* init */
02690   my_ismbchar_utf8mb4,
02691   my_mbcharlen_utf8mb4,
02692   my_numchars_mb,
02693   my_charpos_mb,
02694   my_well_formed_len_mb,
02695   my_lengthsp_8bit,
02696   my_numcells_mb,
02697   my_mb_wc_utf8mb4,
02698   my_wc_mb_utf8mb4,
02699   my_mb_ctype_mb,
02700   my_caseup_str_utf8mb4,
02701   my_casedn_str_utf8mb4,
02702   my_caseup_utf8mb4,
02703   my_casedn_utf8mb4,
02704   my_snprintf_8bit,
02705   my_long10_to_str_8bit,
02706   my_int64_t10_to_str_8bit,
02707   my_fill_8bit,
02708   my_strntol_8bit,
02709   my_strntoul_8bit,
02710   my_strntoll_8bit,
02711   my_strntoull_8bit,
02712   my_strntod_8bit,
02713   my_strtoll10_8bit,
02714   my_strntoull10rnd_8bit,
02715   my_scan_8bit
02716 };
02717 
02718 
02719 
02720 DRIZZLED_API CHARSET_INFO my_charset_utf8mb4_general_ci=
02721 {
02722   45,0,0,              /* number       */
02723   MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE,  /* state  */
02724   MY_UTF8MB4,         /* cs name      */
02725   MY_UTF8MB4_GENERAL_CI,/* name       */
02726   "UTF-8 Unicode",    /* comment      */
02727   NULL,               /* tailoring    */
02728   ctype_utf8mb4,      /* ctype        */
02729   to_lower_utf8mb4,   /* to_lower     */
02730   to_upper_utf8mb4,   /* to_upper     */
02731   to_upper_utf8mb4,   /* sort_order   */
02732   NULL,               /* contractions */
02733   NULL,               /* sort_order_big*/
02734   NULL,               /* tab_to_uni   */
02735   NULL,               /* tab_from_uni */
02736   my_unicase_default, /* caseinfo     */
02737   NULL,               /* state_map    */
02738   NULL,               /* ident_map    */
02739   1,                  /* strxfrm_multiply */
02740   1,                  /* caseup_multiply  */
02741   1,                  /* casedn_multiply  */
02742   1,                  /* mbminlen     */
02743   4,                  /* mbmaxlen     */
02744   0,                  /* min_sort_char */
02745   0xFFFF,             /* max_sort_char */
02746   ' ',                /* pad char      */
02747   0,                  /* escape_with_backslash_is_dangerous */
02748   1,                  /* levels_for_compare */
02749   1,                  /* levels_for_order   */
02750   &my_charset_utf8mb4_handler,
02751   &my_collation_utf8mb4_general_ci_handler
02752 };
02753 
02754 
02755 DRIZZLED_API CHARSET_INFO my_charset_utf8mb4_bin=
02756 {
02757   46,0,0,             /* number       */
02758   MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_UNICODE, /* state  */
02759   MY_UTF8MB4,         /* cs name      */
02760   MY_UTF8MB4_BIN,     /* name         */
02761   "UTF-8 Unicode",    /* comment      */
02762   NULL,               /* tailoring    */
02763   ctype_utf8mb4,      /* ctype        */
02764   to_lower_utf8mb4,   /* to_lower     */
02765   to_upper_utf8mb4,   /* to_upper     */
02766   NULL,               /* sort_order   */
02767   NULL,               /* contractions */
02768   NULL,               /* sort_order_big*/
02769   NULL,               /* tab_to_uni   */
02770   NULL,               /* tab_from_uni */
02771   my_unicase_default, /* caseinfo     */
02772   NULL,               /* state_map    */
02773   NULL,               /* ident_map    */
02774   1,                  /* strxfrm_multiply */
02775   1,                  /* caseup_multiply  */
02776   1,                  /* casedn_multiply  */
02777   1,                  /* mbminlen     */
02778   4,                  /* mbmaxlen     */
02779   0,                  /* min_sort_char */
02780   0xFFFF,             /* max_sort_char */
02781   ' ',                /* pad char      */
02782   0,                  /* escape_with_backslash_is_dangerous */
02783   1,                  /* levels_for_compare */
02784   1,                  /* levels_for_order   */
02785   &my_charset_utf8mb4_handler,
02786   &my_collation_utf8mb4_bin_handler
02787 };
02788 
02789 
02790 
02791 static inline int bincmp(const unsigned char *s, const unsigned char *se,
02792                          const unsigned char *t, const unsigned char *te)
02793 {
02794   int slen= (int) (se-s), tlen= (int) (te-t);
02795   int len= min(slen,tlen);
02796   int cmp= memcmp(s,t,len);
02797   return cmp ? cmp : slen-tlen;
02798 }
02799 
02800 
02801 /*
02802   File system encoding components:
02803 
02804 Code range Pattern            Number   Used Unused  Blocks
02805 -----------------------------------------------------------------------------
02806 00C0..017F [.][0..4][g..z] 5*20= 100   97     3  Latin1 Supplement + Ext A
02807 0370..03FF [.][5..9][g..z] 5*20= 100   88    12  Greek + Coptic
02808 0400..052F [.][g..z][0..6] 20*7= 140  140   137  Cyrillic
02809 0530..058F [.][g..z][7..8] 20*2=  40   38     2  Armenian
02810 2160..217F [.][g..z][9]    20*1=  20   16     4  Number Forms
02811 0180..02AF [.][g..z][a..k] 28*11=220  203    17  Latin Ext B + IPA
02812 1E00..0EFF [.][g..z][l..r] 20*7= 140  136     4  Latin Additional Extended
02813 1F00..1FFF [.][g..z][s..z] 20*8= 160  144    16  Greek Extended
02814 ....  .... [.][a..f][g..z] 6*20= 120    0   120  RESERVED
02815 24B6..24E9 [.][@][a..z]           26   26     0  Enclosed Alphanumerics
02816 FF21..FF5A [.][a..z][@]           26   26     0  Full Width forms
02817 
02818 All other characters are encoded using five bytes:
02819 
02820 [.][0..9a..z][0..9a..z][0..9a..z][0..9a..z]
02821 
02822 */
02823 
02824 } /* namespace drizzled */
02825 
02826 #ifdef MY_TEST_UTF8
02827 #include <stdio.h>
02828 
02829 static void test_mb(CHARSET_INFO *cs, unsigned char *s)
02830 {
02831   while(*s)
02832   {
02833     if (my_ismbhead_utf8(cs,*s))
02834     {
02835       uint32_t len=my_mbcharlen_utf8(cs,*s);
02836       while(len--)
02837       {
02838         printf("%c",*s);
02839         s++;
02840       }
02841       printf("\n");
02842     }
02843     else
02844     {
02845       printf("%c\n",*s);
02846       s++;
02847     }
02848   }
02849 }
02850 
02851 int main()
02852 {
02853   char str[1024]=" utf8 test проба ПЕРА по-РУССКИ";
02854   CHARSET_INFO *cs;
02855 
02856   test_mb(cs,(unsigned char*)str);
02857 
02858   printf("orig      :'%s'\n",str);
02859 
02860   my_caseup_utf8(cs,str,15);
02861   printf("caseup    :'%s'\n",str);
02862 
02863   my_caseup_str_utf8(cs,str);
02864   printf("caseup_str:'%s'\n",str);
02865 
02866   my_casedn_utf8(cs,str,15);
02867   printf("casedn    :'%s'\n",str);
02868 
02869   my_casedn_str_utf8(cs,str);
02870   printf("casedn_str:'%s'\n",str);
02871 
02872   return 0;
02873 }
02874 
02875 #endif