ctype-utf8.c
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:102k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000 MySQL AB
  2.    This library is free software; you can redistribute it and/or
  3.    modify it under the terms of the GNU Library General Public
  4.    License as published by the Free Software Foundation; either
  5.    version 2 of the License, or (at your option) any later version.
  6.    This library is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  9.    Library General Public License for more details.
  10.    You should have received a copy of the GNU Library General Public
  11.    License along with this library; if not, write to the Free
  12.    Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
  13.    MA 02111-1307, USA */
  14. /* UTF8 according RFC 2279 */
  15. /* Written by Alexander Barkov <bar@udm.net> */
  16. #include <my_global.h>
  17. #include "m_string.h"
  18. #include "m_ctype.h"
  19. #include <errno.h>
  20. #ifndef EILSEQ
  21. #define EILSEQ ENOENT
  22. #endif
  23. #ifndef HAVE_CHARSET_utf8
  24. #define HAVE_CHARSET_utf8
  25. #endif
  26. #ifdef HAVE_CHARSET_utf8
  27. #define HAVE_UNIDATA
  28. #endif
  29. #ifdef HAVE_CHARSET_ucs2
  30. #define HAVE_UNIDATA
  31. #endif
  32. #ifdef HAVE_UNIDATA
  33. static MY_UNICASE_INFO plane00[]={
  34.   {0x0000,0x0000,0x0000},  {0x0001,0x0001,0x0001},
  35.   {0x0002,0x0002,0x0002},  {0x0003,0x0003,0x0003},
  36.   {0x0004,0x0004,0x0004},  {0x0005,0x0005,0x0005},
  37.   {0x0006,0x0006,0x0006},  {0x0007,0x0007,0x0007},
  38.   {0x0008,0x0008,0x0008},  {0x0009,0x0009,0x0009},
  39.   {0x000A,0x000A,0x000A},  {0x000B,0x000B,0x000B},
  40.   {0x000C,0x000C,0x000C},  {0x000D,0x000D,0x000D},
  41.   {0x000E,0x000E,0x000E},  {0x000F,0x000F,0x000F},
  42.   {0x0010,0x0010,0x0010},  {0x0011,0x0011,0x0011},
  43.   {0x0012,0x0012,0x0012},  {0x0013,0x0013,0x0013},
  44.   {0x0014,0x0014,0x0014},  {0x0015,0x0015,0x0015},
  45.   {0x0016,0x0016,0x0016},  {0x0017,0x0017,0x0017},
  46.   {0x0018,0x0018,0x0018},  {0x0019,0x0019,0x0019},
  47.   {0x001A,0x001A,0x001A},  {0x001B,0x001B,0x001B},
  48.   {0x001C,0x001C,0x001C},  {0x001D,0x001D,0x001D},
  49.   {0x001E,0x001E,0x001E},  {0x001F,0x001F,0x001F},
  50.   {0x0020,0x0020,0x0020},  {0x0021,0x0021,0x0021},
  51.   {0x0022,0x0022,0x0022},  {0x0023,0x0023,0x0023},
  52.   {0x0024,0x0024,0x0024},  {0x0025,0x0025,0x0025},
  53.   {0x0026,0x0026,0x0026},  {0x0027,0x0027,0x0027},
  54.   {0x0028,0x0028,0x0028},  {0x0029,0x0029,0x0029},
  55.   {0x002A,0x002A,0x002A},  {0x002B,0x002B,0x002B},
  56.   {0x002C,0x002C,0x002C},  {0x002D,0x002D,0x002D},
  57.   {0x002E,0x002E,0x002E},  {0x002F,0x002F,0x002F},
  58.   {0x0030,0x0030,0x0030},  {0x0031,0x0031,0x0031},
  59.   {0x0032,0x0032,0x0032},  {0x0033,0x0033,0x0033},
  60.   {0x0034,0x0034,0x0034},  {0x0035,0x0035,0x0035},
  61.   {0x0036,0x0036,0x0036},  {0x0037,0x0037,0x0037},
  62.   {0x0038,0x0038,0x0038},  {0x0039,0x0039,0x0039},
  63.   {0x003A,0x003A,0x003A},  {0x003B,0x003B,0x003B},
  64.   {0x003C,0x003C,0x003C},  {0x003D,0x003D,0x003D},
  65.   {0x003E,0x003E,0x003E},  {0x003F,0x003F,0x003F},
  66.   {0x0040,0x0040,0x0040},  {0x0041,0x0061,0x0041},
  67.   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
  68.   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
  69.   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
  70.   {0x0048,0x0068,0x0048},  {0x0049,0x0069,0x0049},
  71.   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
  72.   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
  73.   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
  74.   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
  75.   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
  76.   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
  77.   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
  78.   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
  79.   {0x005A,0x007A,0x005A},  {0x005B,0x005B,0x005B},
  80.   {0x005C,0x005C,0x005C},  {0x005D,0x005D,0x005D},
  81.   {0x005E,0x005E,0x005E},  {0x005F,0x005F,0x005F},
  82.   {0x0060,0x0060,0x0060},  {0x0041,0x0061,0x0041},
  83.   {0x0042,0x0062,0x0042},  {0x0043,0x0063,0x0043},
  84.   {0x0044,0x0064,0x0044},  {0x0045,0x0065,0x0045},
  85.   {0x0046,0x0066,0x0046},  {0x0047,0x0067,0x0047},
  86.   {0x0048,0x0068,0x0048},  {0x0049,0x0069,0x0049},
  87.   {0x004A,0x006A,0x004A},  {0x004B,0x006B,0x004B},
  88.   {0x004C,0x006C,0x004C},  {0x004D,0x006D,0x004D},
  89.   {0x004E,0x006E,0x004E},  {0x004F,0x006F,0x004F},
  90.   {0x0050,0x0070,0x0050},  {0x0051,0x0071,0x0051},
  91.   {0x0052,0x0072,0x0052},  {0x0053,0x0073,0x0053},
  92.   {0x0054,0x0074,0x0054},  {0x0055,0x0075,0x0055},
  93.   {0x0056,0x0076,0x0056},  {0x0057,0x0077,0x0057},
  94.   {0x0058,0x0078,0x0058},  {0x0059,0x0079,0x0059},
  95.   {0x005A,0x007A,0x005A},  {0x007B,0x007B,0x007B},
  96.   {0x007C,0x007C,0x007C},  {0x007D,0x007D,0x007D},
  97.   {0x007E,0x007E,0x007E},  {0x007F,0x007F,0x007F},
  98.   {0x0080,0x0080,0x0080},  {0x0081,0x0081,0x0081},
  99.   {0x0082,0x0082,0x0082},  {0x0083,0x0083,0x0083},
  100.   {0x0084,0x0084,0x0084},  {0x0085,0x0085,0x0085},
  101.   {0x0086,0x0086,0x0086},  {0x0087,0x0087,0x0087},
  102.   {0x0088,0x0088,0x0088},  {0x0089,0x0089,0x0089},
  103.   {0x008A,0x008A,0x008A},  {0x008B,0x008B,0x008B},
  104.   {0x008C,0x008C,0x008C},  {0x008D,0x008D,0x008D},
  105.   {0x008E,0x008E,0x008E},  {0x008F,0x008F,0x008F},
  106.   {0x0090,0x0090,0x0090},  {0x0091,0x0091,0x0091},
  107.   {0x0092,0x0092,0x0092},  {0x0093,0x0093,0x0093},
  108.   {0x0094,0x0094,0x0094},  {0x0095,0x0095,0x0095},
  109.   {0x0096,0x0096,0x0096},  {0x0097,0x0097,0x0097},
  110.   {0x0098,0x0098,0x0098},  {0x0099,0x0099,0x0099},
  111.   {0x009A,0x009A,0x009A},  {0x009B,0x009B,0x009B},
  112.   {0x009C,0x009C,0x009C},  {0x009D,0x009D,0x009D},
  113.   {0x009E,0x009E,0x009E},  {0x009F,0x009F,0x009F},
  114.   {0x00A0,0x00A0,0x00A0},  {0x00A1,0x00A1,0x00A1},
  115.   {0x00A2,0x00A2,0x00A2},  {0x00A3,0x00A3,0x00A3},
  116.   {0x00A4,0x00A4,0x00A4},  {0x00A5,0x00A5,0x00A5},
  117.   {0x00A6,0x00A6,0x00A6},  {0x00A7,0x00A7,0x00A7},
  118.   {0x00A8,0x00A8,0x00A8},  {0x00A9,0x00A9,0x00A9},
  119.   {0x00AA,0x00AA,0x00AA},  {0x00AB,0x00AB,0x00AB},
  120.   {0x00AC,0x00AC,0x00AC},  {0x00AD,0x00AD,0x00AD},
  121.   {0x00AE,0x00AE,0x00AE},  {0x00AF,0x00AF,0x00AF},
  122.   {0x00B0,0x00B0,0x00B0},  {0x00B1,0x00B1,0x00B1},
  123.   {0x00B2,0x00B2,0x00B2},  {0x00B3,0x00B3,0x00B3},
  124.   {0x00B4,0x00B4,0x00B4},  {0x039C,0x00B5,0x039C},
  125.   {0x00B6,0x00B6,0x00B6},  {0x00B7,0x00B7,0x00B7},
  126.   {0x00B8,0x00B8,0x00B8},  {0x00B9,0x00B9,0x00B9},
  127.   {0x00BA,0x00BA,0x00BA},  {0x00BB,0x00BB,0x00BB},
  128.   {0x00BC,0x00BC,0x00BC},  {0x00BD,0x00BD,0x00BD},
  129.   {0x00BE,0x00BE,0x00BE},  {0x00BF,0x00BF,0x00BF},
  130.   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
  131.   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
  132.   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
  133.   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
  134.   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
  135.   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
  136.   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
  137.   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
  138.   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
  139.   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
  140.   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
  141.   {0x00D6,0x00F6,0x004F},  {0x00D7,0x00D7,0x00D7},
  142.   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
  143.   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
  144.   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
  145.   {0x00DE,0x00FE,0x00DE},  {0x00DF,0x00DF,0x00DF},
  146.   {0x00C0,0x00E0,0x0041},  {0x00C1,0x00E1,0x0041},
  147.   {0x00C2,0x00E2,0x0041},  {0x00C3,0x00E3,0x0041},
  148.   {0x00C4,0x00E4,0x0041},  {0x00C5,0x00E5,0x0041},
  149.   {0x00C6,0x00E6,0x00C6},  {0x00C7,0x00E7,0x0043},
  150.   {0x00C8,0x00E8,0x0045},  {0x00C9,0x00E9,0x0045},
  151.   {0x00CA,0x00EA,0x0045},  {0x00CB,0x00EB,0x0045},
  152.   {0x00CC,0x00EC,0x0049},  {0x00CD,0x00ED,0x0049},
  153.   {0x00CE,0x00EE,0x0049},  {0x00CF,0x00EF,0x0049},
  154.   {0x00D0,0x00F0,0x00D0},  {0x00D1,0x00F1,0x004E},
  155.   {0x00D2,0x00F2,0x004F},  {0x00D3,0x00F3,0x004F},
  156.   {0x00D4,0x00F4,0x004F},  {0x00D5,0x00F5,0x004F},
  157.   {0x00D6,0x00F6,0x004F},  {0x00F7,0x00F7,0x00F7},
  158.   {0x00D8,0x00F8,0x00D8},  {0x00D9,0x00F9,0x0055},
  159.   {0x00DA,0x00FA,0x0055},  {0x00DB,0x00FB,0x0055},
  160.   {0x00DC,0x00FC,0x0055},  {0x00DD,0x00FD,0x0059},
  161.   {0x00DE,0x00FE,0x00DE},  {0x0178,0x00FF,0x0059}
  162. };
  163. static MY_UNICASE_INFO plane01[]={
  164.   {0x0100,0x0101,0x0041},  {0x0100,0x0101,0x0041},
  165.   {0x0102,0x0103,0x0041},  {0x0102,0x0103,0x0041},
  166.   {0x0104,0x0105,0x0041},  {0x0104,0x0105,0x0041},
  167.   {0x0106,0x0107,0x0043},  {0x0106,0x0107,0x0043},
  168.   {0x0108,0x0109,0x0043},  {0x0108,0x0109,0x0043},
  169.   {0x010A,0x010B,0x0043},  {0x010A,0x010B,0x0043},
  170.   {0x010C,0x010D,0x0043},  {0x010C,0x010D,0x0043},
  171.   {0x010E,0x010F,0x0044},  {0x010E,0x010F,0x0044},
  172.   {0x0110,0x0111,0x0110},  {0x0110,0x0111,0x0110},
  173.   {0x0112,0x0113,0x0045},  {0x0112,0x0113,0x0045},
  174.   {0x0114,0x0115,0x0045},  {0x0114,0x0115,0x0045},
  175.   {0x0116,0x0117,0x0045},  {0x0116,0x0117,0x0045},
  176.   {0x0118,0x0119,0x0045},  {0x0118,0x0119,0x0045},
  177.   {0x011A,0x011B,0x0045},  {0x011A,0x011B,0x0045},
  178.   {0x011C,0x011D,0x0047},  {0x011C,0x011D,0x0047},
  179.   {0x011E,0x011F,0x0047},  {0x011E,0x011F,0x0047},
  180.   {0x0120,0x0121,0x0047},  {0x0120,0x0121,0x0047},
  181.   {0x0122,0x0123,0x0047},  {0x0122,0x0123,0x0047},
  182.   {0x0124,0x0125,0x0048},  {0x0124,0x0125,0x0048},
  183.   {0x0126,0x0127,0x0126},  {0x0126,0x0127,0x0126},
  184.   {0x0128,0x0129,0x0049},  {0x0128,0x0129,0x0049},
  185.   {0x012A,0x012B,0x0049},  {0x012A,0x012B,0x0049},
  186.   {0x012C,0x012D,0x0049},  {0x012C,0x012D,0x0049},
  187.   {0x012E,0x012F,0x0049},  {0x012E,0x012F,0x0049},
  188.   {0x0130,0x0069,0x0049},  {0x0049,0x0131,0x0049},
  189.   {0x0132,0x0133,0x0132},  {0x0132,0x0133,0x0132},
  190.   {0x0134,0x0135,0x004A},  {0x0134,0x0135,0x004A},
  191.   {0x0136,0x0137,0x004B},  {0x0136,0x0137,0x004B},
  192.   {0x0138,0x0138,0x0138},  {0x0139,0x013A,0x004C},
  193.   {0x0139,0x013A,0x004C},  {0x013B,0x013C,0x004C},
  194.   {0x013B,0x013C,0x004C},  {0x013D,0x013E,0x004C},
  195.   {0x013D,0x013E,0x004C},  {0x013F,0x0140,0x013F},
  196.   {0x013F,0x0140,0x013F},  {0x0141,0x0142,0x0141},
  197.   {0x0141,0x0142,0x0141},  {0x0143,0x0144,0x004E},
  198.   {0x0143,0x0144,0x004E},  {0x0145,0x0146,0x004E},
  199.   {0x0145,0x0146,0x004E},  {0x0147,0x0148,0x004E},
  200.   {0x0147,0x0148,0x004E},  {0x0149,0x0149,0x0149},
  201.   {0x014A,0x014B,0x014A},  {0x014A,0x014B,0x014A},
  202.   {0x014C,0x014D,0x004F},  {0x014C,0x014D,0x004F},
  203.   {0x014E,0x014F,0x004F},  {0x014E,0x014F,0x004F},
  204.   {0x0150,0x0151,0x004F},  {0x0150,0x0151,0x004F},
  205.   {0x0152,0x0153,0x0152},  {0x0152,0x0153,0x0152},
  206.   {0x0154,0x0155,0x0052},  {0x0154,0x0155,0x0052},
  207.   {0x0156,0x0157,0x0052},  {0x0156,0x0157,0x0052},
  208.   {0x0158,0x0159,0x0052},  {0x0158,0x0159,0x0052},
  209.   {0x015A,0x015B,0x0053},  {0x015A,0x015B,0x0053},
  210.   {0x015C,0x015D,0x0053},  {0x015C,0x015D,0x0053},
  211.   {0x015E,0x015F,0x0053},  {0x015E,0x015F,0x0053},
  212.   {0x0160,0x0161,0x0053},  {0x0160,0x0161,0x0053},
  213.   {0x0162,0x0163,0x0054},  {0x0162,0x0163,0x0054},
  214.   {0x0164,0x0165,0x0054},  {0x0164,0x0165,0x0054},
  215.   {0x0166,0x0167,0x0166},  {0x0166,0x0167,0x0166},
  216.   {0x0168,0x0169,0x0055},  {0x0168,0x0169,0x0055},
  217.   {0x016A,0x016B,0x0055},  {0x016A,0x016B,0x0055},
  218.   {0x016C,0x016D,0x0055},  {0x016C,0x016D,0x0055},
  219.   {0x016E,0x016F,0x0055},  {0x016E,0x016F,0x0055},
  220.   {0x0170,0x0171,0x0055},  {0x0170,0x0171,0x0055},
  221.   {0x0172,0x0173,0x0055},  {0x0172,0x0173,0x0055},
  222.   {0x0174,0x0175,0x0057},  {0x0174,0x0175,0x0057},
  223.   {0x0176,0x0177,0x0059},  {0x0176,0x0177,0x0059},
  224.   {0x0178,0x00FF,0x0059},  {0x0179,0x017A,0x005A},
  225.   {0x0179,0x017A,0x005A},  {0x017B,0x017C,0x005A},
  226.   {0x017B,0x017C,0x005A},  {0x017D,0x017E,0x005A},
  227.   {0x017D,0x017E,0x005A},  {0x0053,0x017F,0x0053},
  228.   {0x0180,0x0180,0x0180},  {0x0181,0x0253,0x0181},
  229.   {0x0182,0x0183,0x0182},  {0x0182,0x0183,0x0182},
  230.   {0x0184,0x0185,0x0184},  {0x0184,0x0185,0x0184},
  231.   {0x0186,0x0254,0x0186},  {0x0187,0x0188,0x0187},
  232.   {0x0187,0x0188,0x0187},  {0x0189,0x0256,0x0189},
  233.   {0x018A,0x0257,0x018A},  {0x018B,0x018C,0x018B},
  234.   {0x018B,0x018C,0x018B},  {0x018D,0x018D,0x018D},
  235.   {0x018E,0x01DD,0x018E},  {0x018F,0x0259,0x018F},
  236.   {0x0190,0x025B,0x0190},  {0x0191,0x0192,0x0191},
  237.   {0x0191,0x0192,0x0191},  {0x0193,0x0260,0x0193},
  238.   {0x0194,0x0263,0x0194},  {0x01F6,0x0195,0x01F6},
  239.   {0x0196,0x0269,0x0196},  {0x0197,0x0268,0x0197},
  240.   {0x0198,0x0199,0x0198},  {0x0198,0x0199,0x0198},
  241.   {0x019A,0x019A,0x019A},  {0x019B,0x019B,0x019B},
  242.   {0x019C,0x026F,0x019C},  {0x019D,0x0272,0x019D},
  243.   {0x019E,0x019E,0x019E},  {0x019F,0x0275,0x019F},
  244.   {0x01A0,0x01A1,0x004F},  {0x01A0,0x01A1,0x004F},
  245.   {0x01A2,0x01A3,0x01A2},  {0x01A2,0x01A3,0x01A2},
  246.   {0x01A4,0x01A5,0x01A4},  {0x01A4,0x01A5,0x01A4},
  247.   {0x01A6,0x0280,0x01A6},  {0x01A7,0x01A8,0x01A7},
  248.   {0x01A7,0x01A8,0x01A7},  {0x01A9,0x0283,0x01A9},
  249.   {0x01AA,0x01AA,0x01AA},  {0x01AB,0x01AB,0x01AB},
  250.   {0x01AC,0x01AD,0x01AC},  {0x01AC,0x01AD,0x01AC},
  251.   {0x01AE,0x0288,0x01AE},  {0x01AF,0x01B0,0x0055},
  252.   {0x01AF,0x01B0,0x0055},  {0x01B1,0x028A,0x01B1},
  253.   {0x01B2,0x028B,0x01B2},  {0x01B3,0x01B4,0x01B3},
  254.   {0x01B3,0x01B4,0x01B3},  {0x01B5,0x01B6,0x01B5},
  255.   {0x01B5,0x01B6,0x01B5},  {0x01B7,0x0292,0x01B7},
  256.   {0x01B8,0x01B9,0x01B8},  {0x01B8,0x01B9,0x01B8},
  257.   {0x01BA,0x01BA,0x01BA},  {0x01BB,0x01BB,0x01BB},
  258.   {0x01BC,0x01BD,0x01BC},  {0x01BC,0x01BD,0x01BC},
  259.   {0x01BE,0x01BE,0x01BE},  {0x01F7,0x01BF,0x01F7},
  260.   {0x01C0,0x01C0,0x01C0},  {0x01C1,0x01C1,0x01C1},
  261.   {0x01C2,0x01C2,0x01C2},  {0x01C3,0x01C3,0x01C3},
  262.   {0x01C4,0x01C6,0x01C4},  {0x01C4,0x01C6,0x01C4},
  263.   {0x01C4,0x01C6,0x01C4},  {0x01C7,0x01C9,0x01C7},
  264.   {0x01C7,0x01C9,0x01C7},  {0x01C7,0x01C9,0x01C7},
  265.   {0x01CA,0x01CC,0x01CA},  {0x01CA,0x01CC,0x01CA},
  266.   {0x01CA,0x01CC,0x01CA},  {0x01CD,0x01CE,0x0041},
  267.   {0x01CD,0x01CE,0x0041},  {0x01CF,0x01D0,0x0049},
  268.   {0x01CF,0x01D0,0x0049},  {0x01D1,0x01D2,0x004F},
  269.   {0x01D1,0x01D2,0x004F},  {0x01D3,0x01D4,0x0055},
  270.   {0x01D3,0x01D4,0x0055},  {0x01D5,0x01D6,0x0055},
  271.   {0x01D5,0x01D6,0x0055},  {0x01D7,0x01D8,0x0055},
  272.   {0x01D7,0x01D8,0x0055},  {0x01D9,0x01DA,0x0055},
  273.   {0x01D9,0x01DA,0x0055},  {0x01DB,0x01DC,0x0055},
  274.   {0x01DB,0x01DC,0x0055},  {0x018E,0x01DD,0x018E},
  275.   {0x01DE,0x01DF,0x0041},  {0x01DE,0x01DF,0x0041},
  276.   {0x01E0,0x01E1,0x0041},  {0x01E0,0x01E1,0x0041},
  277.   {0x01E2,0x01E3,0x00C6},  {0x01E2,0x01E3,0x00C6},
  278.   {0x01E4,0x01E5,0x01E4},  {0x01E4,0x01E5,0x01E4},
  279.   {0x01E6,0x01E7,0x0047},  {0x01E6,0x01E7,0x0047},
  280.   {0x01E8,0x01E9,0x004B},  {0x01E8,0x01E9,0x004B},
  281.   {0x01EA,0x01EB,0x004F},  {0x01EA,0x01EB,0x004F},
  282.   {0x01EC,0x01ED,0x004F},  {0x01EC,0x01ED,0x004F},
  283.   {0x01EE,0x01EF,0x01B7},  {0x01EE,0x01EF,0x01B7},
  284.   {0x01F0,0x01F0,0x004A},  {0x01F1,0x01F3,0x01F1},
  285.   {0x01F1,0x01F3,0x01F1},  {0x01F1,0x01F3,0x01F1},
  286.   {0x01F4,0x01F5,0x0047},  {0x01F4,0x01F5,0x0047},
  287.   {0x01F6,0x0195,0x01F6},  {0x01F7,0x01BF,0x01F7},
  288.   {0x01F8,0x01F9,0x004E},  {0x01F8,0x01F9,0x004E},
  289.   {0x01FA,0x01FB,0x0041},  {0x01FA,0x01FB,0x0041},
  290.   {0x01FC,0x01FD,0x00C6},  {0x01FC,0x01FD,0x00C6},
  291.   {0x01FE,0x01FF,0x00D8},  {0x01FE,0x01FF,0x00D8}
  292. };
  293. static MY_UNICASE_INFO plane02[]={
  294.   {0x0200,0x0201,0x0041},  {0x0200,0x0201,0x0041},
  295.   {0x0202,0x0203,0x0041},  {0x0202,0x0203,0x0041},
  296.   {0x0204,0x0205,0x0045},  {0x0204,0x0205,0x0045},
  297.   {0x0206,0x0207,0x0045},  {0x0206,0x0207,0x0045},
  298.   {0x0208,0x0209,0x0049},  {0x0208,0x0209,0x0049},
  299.   {0x020A,0x020B,0x0049},  {0x020A,0x020B,0x0049},
  300.   {0x020C,0x020D,0x004F},  {0x020C,0x020D,0x004F},
  301.   {0x020E,0x020F,0x004F},  {0x020E,0x020F,0x004F},
  302.   {0x0210,0x0211,0x0052},  {0x0210,0x0211,0x0052},
  303.   {0x0212,0x0213,0x0052},  {0x0212,0x0213,0x0052},
  304.   {0x0214,0x0215,0x0055},  {0x0214,0x0215,0x0055},
  305.   {0x0216,0x0217,0x0055},  {0x0216,0x0217,0x0055},
  306.   {0x0218,0x0219,0x0053},  {0x0218,0x0219,0x0053},
  307.   {0x021A,0x021B,0x0054},  {0x021A,0x021B,0x0054},
  308.   {0x021C,0x021D,0x021C},  {0x021C,0x021D,0x021C},
  309.   {0x021E,0x021F,0x0048},  {0x021E,0x021F,0x0048},
  310.   {0x0220,0x0220,0x0220},  {0x0221,0x0221,0x0221},
  311.   {0x0222,0x0223,0x0222},  {0x0222,0x0223,0x0222},
  312.   {0x0224,0x0225,0x0224},  {0x0224,0x0225,0x0224},
  313.   {0x0226,0x0227,0x0041},  {0x0226,0x0227,0x0041},
  314.   {0x0228,0x0229,0x0045},  {0x0228,0x0229,0x0045},
  315.   {0x022A,0x022B,0x004F},  {0x022A,0x022B,0x004F},
  316.   {0x022C,0x022D,0x004F},  {0x022C,0x022D,0x004F},
  317.   {0x022E,0x022F,0x004F},  {0x022E,0x022F,0x004F},
  318.   {0x0230,0x0231,0x004F},  {0x0230,0x0231,0x004F},
  319.   {0x0232,0x0233,0x0059},  {0x0232,0x0233,0x0059},
  320.   {0x0234,0x0234,0x0234},  {0x0235,0x0235,0x0235},
  321.   {0x0236,0x0236,0x0236},  {0x0237,0x0237,0x0237},
  322.   {0x0238,0x0238,0x0238},  {0x0239,0x0239,0x0239},
  323.   {0x023A,0x023A,0x023A},  {0x023B,0x023B,0x023B},
  324.   {0x023C,0x023C,0x023C},  {0x023D,0x023D,0x023D},
  325.   {0x023E,0x023E,0x023E},  {0x023F,0x023F,0x023F},
  326.   {0x0240,0x0240,0x0240},  {0x0241,0x0241,0x0241},
  327.   {0x0242,0x0242,0x0242},  {0x0243,0x0243,0x0243},
  328.   {0x0244,0x0244,0x0244},  {0x0245,0x0245,0x0245},
  329.   {0x0246,0x0246,0x0246},  {0x0247,0x0247,0x0247},
  330.   {0x0248,0x0248,0x0248},  {0x0249,0x0249,0x0249},
  331.   {0x024A,0x024A,0x024A},  {0x024B,0x024B,0x024B},
  332.   {0x024C,0x024C,0x024C},  {0x024D,0x024D,0x024D},
  333.   {0x024E,0x024E,0x024E},  {0x024F,0x024F,0x024F},
  334.   {0x0250,0x0250,0x0250},  {0x0251,0x0251,0x0251},
  335.   {0x0252,0x0252,0x0252},  {0x0181,0x0253,0x0181},
  336.   {0x0186,0x0254,0x0186},  {0x0255,0x0255,0x0255},
  337.   {0x0189,0x0256,0x0189},  {0x018A,0x0257,0x018A},
  338.   {0x0258,0x0258,0x0258},  {0x018F,0x0259,0x018F},
  339.   {0x025A,0x025A,0x025A},  {0x0190,0x025B,0x0190},
  340.   {0x025C,0x025C,0x025C},  {0x025D,0x025D,0x025D},
  341.   {0x025E,0x025E,0x025E},  {0x025F,0x025F,0x025F},
  342.   {0x0193,0x0260,0x0193},  {0x0261,0x0261,0x0261},
  343.   {0x0262,0x0262,0x0262},  {0x0194,0x0263,0x0194},
  344.   {0x0264,0x0264,0x0264},  {0x0265,0x0265,0x0265},
  345.   {0x0266,0x0266,0x0266},  {0x0267,0x0267,0x0267},
  346.   {0x0197,0x0268,0x0197},  {0x0196,0x0269,0x0196},
  347.   {0x026A,0x026A,0x026A},  {0x026B,0x026B,0x026B},
  348.   {0x026C,0x026C,0x026C},  {0x026D,0x026D,0x026D},
  349.   {0x026E,0x026E,0x026E},  {0x019C,0x026F,0x019C},
  350.   {0x0270,0x0270,0x0270},  {0x0271,0x0271,0x0271},
  351.   {0x019D,0x0272,0x019D},  {0x0273,0x0273,0x0273},
  352.   {0x0274,0x0274,0x0274},  {0x019F,0x0275,0x019F},
  353.   {0x0276,0x0276,0x0276},  {0x0277,0x0277,0x0277},
  354.   {0x0278,0x0278,0x0278},  {0x0279,0x0279,0x0279},
  355.   {0x027A,0x027A,0x027A},  {0x027B,0x027B,0x027B},
  356.   {0x027C,0x027C,0x027C},  {0x027D,0x027D,0x027D},
  357.   {0x027E,0x027E,0x027E},  {0x027F,0x027F,0x027F},
  358.   {0x01A6,0x0280,0x01A6},  {0x0281,0x0281,0x0281},
  359.   {0x0282,0x0282,0x0282},  {0x01A9,0x0283,0x01A9},
  360.   {0x0284,0x0284,0x0284},  {0x0285,0x0285,0x0285},
  361.   {0x0286,0x0286,0x0286},  {0x0287,0x0287,0x0287},
  362.   {0x01AE,0x0288,0x01AE},  {0x0289,0x0289,0x0289},
  363.   {0x01B1,0x028A,0x01B1},  {0x01B2,0x028B,0x01B2},
  364.   {0x028C,0x028C,0x028C},  {0x028D,0x028D,0x028D},
  365.   {0x028E,0x028E,0x028E},  {0x028F,0x028F,0x028F},
  366.   {0x0290,0x0290,0x0290},  {0x0291,0x0291,0x0291},
  367.   {0x01B7,0x0292,0x01B7},  {0x0293,0x0293,0x0293},
  368.   {0x0294,0x0294,0x0294},  {0x0295,0x0295,0x0295},
  369.   {0x0296,0x0296,0x0296},  {0x0297,0x0297,0x0297},
  370.   {0x0298,0x0298,0x0298},  {0x0299,0x0299,0x0299},
  371.   {0x029A,0x029A,0x029A},  {0x029B,0x029B,0x029B},
  372.   {0x029C,0x029C,0x029C},  {0x029D,0x029D,0x029D},
  373.   {0x029E,0x029E,0x029E},  {0x029F,0x029F,0x029F},
  374.   {0x02A0,0x02A0,0x02A0},  {0x02A1,0x02A1,0x02A1},
  375.   {0x02A2,0x02A2,0x02A2},  {0x02A3,0x02A3,0x02A3},
  376.   {0x02A4,0x02A4,0x02A4},  {0x02A5,0x02A5,0x02A5},
  377.   {0x02A6,0x02A6,0x02A6},  {0x02A7,0x02A7,0x02A7},
  378.   {0x02A8,0x02A8,0x02A8},  {0x02A9,0x02A9,0x02A9},
  379.   {0x02AA,0x02AA,0x02AA},  {0x02AB,0x02AB,0x02AB},
  380.   {0x02AC,0x02AC,0x02AC},  {0x02AD,0x02AD,0x02AD},
  381.   {0x02AE,0x02AE,0x02AE},  {0x02AF,0x02AF,0x02AF},
  382.   {0x02B0,0x02B0,0x02B0},  {0x02B1,0x02B1,0x02B1},
  383.   {0x02B2,0x02B2,0x02B2},  {0x02B3,0x02B3,0x02B3},
  384.   {0x02B4,0x02B4,0x02B4},  {0x02B5,0x02B5,0x02B5},
  385.   {0x02B6,0x02B6,0x02B6},  {0x02B7,0x02B7,0x02B7},
  386.   {0x02B8,0x02B8,0x02B8},  {0x02B9,0x02B9,0x02B9},
  387.   {0x02BA,0x02BA,0x02BA},  {0x02BB,0x02BB,0x02BB},
  388.   {0x02BC,0x02BC,0x02BC},  {0x02BD,0x02BD,0x02BD},
  389.   {0x02BE,0x02BE,0x02BE},  {0x02BF,0x02BF,0x02BF},
  390.   {0x02C0,0x02C0,0x02C0},  {0x02C1,0x02C1,0x02C1},
  391.   {0x02C2,0x02C2,0x02C2},  {0x02C3,0x02C3,0x02C3},
  392.   {0x02C4,0x02C4,0x02C4},  {0x02C5,0x02C5,0x02C5},
  393.   {0x02C6,0x02C6,0x02C6},  {0x02C7,0x02C7,0x02C7},
  394.   {0x02C8,0x02C8,0x02C8},  {0x02C9,0x02C9,0x02C9},
  395.   {0x02CA,0x02CA,0x02CA},  {0x02CB,0x02CB,0x02CB},
  396.   {0x02CC,0x02CC,0x02CC},  {0x02CD,0x02CD,0x02CD},
  397.   {0x02CE,0x02CE,0x02CE},  {0x02CF,0x02CF,0x02CF},
  398.   {0x02D0,0x02D0,0x02D0},  {0x02D1,0x02D1,0x02D1},
  399.   {0x02D2,0x02D2,0x02D2},  {0x02D3,0x02D3,0x02D3},
  400.   {0x02D4,0x02D4,0x02D4},  {0x02D5,0x02D5,0x02D5},
  401.   {0x02D6,0x02D6,0x02D6},  {0x02D7,0x02D7,0x02D7},
  402.   {0x02D8,0x02D8,0x02D8},  {0x02D9,0x02D9,0x02D9},
  403.   {0x02DA,0x02DA,0x02DA},  {0x02DB,0x02DB,0x02DB},
  404.   {0x02DC,0x02DC,0x02DC},  {0x02DD,0x02DD,0x02DD},
  405.   {0x02DE,0x02DE,0x02DE},  {0x02DF,0x02DF,0x02DF},
  406.   {0x02E0,0x02E0,0x02E0},  {0x02E1,0x02E1,0x02E1},
  407.   {0x02E2,0x02E2,0x02E2},  {0x02E3,0x02E3,0x02E3},
  408.   {0x02E4,0x02E4,0x02E4},  {0x02E5,0x02E5,0x02E5},
  409.   {0x02E6,0x02E6,0x02E6},  {0x02E7,0x02E7,0x02E7},
  410.   {0x02E8,0x02E8,0x02E8},  {0x02E9,0x02E9,0x02E9},
  411.   {0x02EA,0x02EA,0x02EA},  {0x02EB,0x02EB,0x02EB},
  412.   {0x02EC,0x02EC,0x02EC},  {0x02ED,0x02ED,0x02ED},
  413.   {0x02EE,0x02EE,0x02EE},  {0x02EF,0x02EF,0x02EF},
  414.   {0x02F0,0x02F0,0x02F0},  {0x02F1,0x02F1,0x02F1},
  415.   {0x02F2,0x02F2,0x02F2},  {0x02F3,0x02F3,0x02F3},
  416.   {0x02F4,0x02F4,0x02F4},  {0x02F5,0x02F5,0x02F5},
  417.   {0x02F6,0x02F6,0x02F6},  {0x02F7,0x02F7,0x02F7},
  418.   {0x02F8,0x02F8,0x02F8},  {0x02F9,0x02F9,0x02F9},
  419.   {0x02FA,0x02FA,0x02FA},  {0x02FB,0x02FB,0x02FB},
  420.   {0x02FC,0x02FC,0x02FC},  {0x02FD,0x02FD,0x02FD},
  421.   {0x02FE,0x02FE,0x02FE},  {0x02FF,0x02FF,0x02FF}
  422. };
  423. static MY_UNICASE_INFO plane03[]={
  424.   {0x0300,0x0300,0x0300},  {0x0301,0x0301,0x0301},
  425.   {0x0302,0x0302,0x0302},  {0x0303,0x0303,0x0303},
  426.   {0x0304,0x0304,0x0304},  {0x0305,0x0305,0x0305},
  427.   {0x0306,0x0306,0x0306},  {0x0307,0x0307,0x0307},
  428.   {0x0308,0x0308,0x0308},  {0x0309,0x0309,0x0309},
  429.   {0x030A,0x030A,0x030A},  {0x030B,0x030B,0x030B},
  430.   {0x030C,0x030C,0x030C},  {0x030D,0x030D,0x030D},
  431.   {0x030E,0x030E,0x030E},  {0x030F,0x030F,0x030F},
  432.   {0x0310,0x0310,0x0310},  {0x0311,0x0311,0x0311},
  433.   {0x0312,0x0312,0x0312},  {0x0313,0x0313,0x0313},
  434.   {0x0314,0x0314,0x0314},  {0x0315,0x0315,0x0315},
  435.   {0x0316,0x0316,0x0316},  {0x0317,0x0317,0x0317},
  436.   {0x0318,0x0318,0x0318},  {0x0319,0x0319,0x0319},
  437.   {0x031A,0x031A,0x031A},  {0x031B,0x031B,0x031B},
  438.   {0x031C,0x031C,0x031C},  {0x031D,0x031D,0x031D},
  439.   {0x031E,0x031E,0x031E},  {0x031F,0x031F,0x031F},
  440.   {0x0320,0x0320,0x0320},  {0x0321,0x0321,0x0321},
  441.   {0x0322,0x0322,0x0322},  {0x0323,0x0323,0x0323},
  442.   {0x0324,0x0324,0x0324},  {0x0325,0x0325,0x0325},
  443.   {0x0326,0x0326,0x0326},  {0x0327,0x0327,0x0327},
  444.   {0x0328,0x0328,0x0328},  {0x0329,0x0329,0x0329},
  445.   {0x032A,0x032A,0x032A},  {0x032B,0x032B,0x032B},
  446.   {0x032C,0x032C,0x032C},  {0x032D,0x032D,0x032D},
  447.   {0x032E,0x032E,0x032E},  {0x032F,0x032F,0x032F},
  448.   {0x0330,0x0330,0x0330},  {0x0331,0x0331,0x0331},
  449.   {0x0332,0x0332,0x0332},  {0x0333,0x0333,0x0333},
  450.   {0x0334,0x0334,0x0334},  {0x0335,0x0335,0x0335},
  451.   {0x0336,0x0336,0x0336},  {0x0337,0x0337,0x0337},
  452.   {0x0338,0x0338,0x0338},  {0x0339,0x0339,0x0339},
  453.   {0x033A,0x033A,0x033A},  {0x033B,0x033B,0x033B},
  454.   {0x033C,0x033C,0x033C},  {0x033D,0x033D,0x033D},
  455.   {0x033E,0x033E,0x033E},  {0x033F,0x033F,0x033F},
  456.   {0x0340,0x0340,0x0340},  {0x0341,0x0341,0x0341},
  457.   {0x0342,0x0342,0x0342},  {0x0343,0x0343,0x0343},
  458.   {0x0344,0x0344,0x0344},  {0x0399,0x0345,0x0399},
  459.   {0x0346,0x0346,0x0346},  {0x0347,0x0347,0x0347},
  460.   {0x0348,0x0348,0x0348},  {0x0349,0x0349,0x0349},
  461.   {0x034A,0x034A,0x034A},  {0x034B,0x034B,0x034B},
  462.   {0x034C,0x034C,0x034C},  {0x034D,0x034D,0x034D},
  463.   {0x034E,0x034E,0x034E},  {0x034F,0x034F,0x034F},
  464.   {0x0350,0x0350,0x0350},  {0x0351,0x0351,0x0351},
  465.   {0x0352,0x0352,0x0352},  {0x0353,0x0353,0x0353},
  466.   {0x0354,0x0354,0x0354},  {0x0355,0x0355,0x0355},
  467.   {0x0356,0x0356,0x0356},  {0x0357,0x0357,0x0357},
  468.   {0x0358,0x0358,0x0358},  {0x0359,0x0359,0x0359},
  469.   {0x035A,0x035A,0x035A},  {0x035B,0x035B,0x035B},
  470.   {0x035C,0x035C,0x035C},  {0x035D,0x035D,0x035D},
  471.   {0x035E,0x035E,0x035E},  {0x035F,0x035F,0x035F},
  472.   {0x0360,0x0360,0x0360},  {0x0361,0x0361,0x0361},
  473.   {0x0362,0x0362,0x0362},  {0x0363,0x0363,0x0363},
  474.   {0x0364,0x0364,0x0364},  {0x0365,0x0365,0x0365},
  475.   {0x0366,0x0366,0x0366},  {0x0367,0x0367,0x0367},
  476.   {0x0368,0x0368,0x0368},  {0x0369,0x0369,0x0369},
  477.   {0x036A,0x036A,0x036A},  {0x036B,0x036B,0x036B},
  478.   {0x036C,0x036C,0x036C},  {0x036D,0x036D,0x036D},
  479.   {0x036E,0x036E,0x036E},  {0x036F,0x036F,0x036F},
  480.   {0x0370,0x0370,0x0370},  {0x0371,0x0371,0x0371},
  481.   {0x0372,0x0372,0x0372},  {0x0373,0x0373,0x0373},
  482.   {0x0374,0x0374,0x0374},  {0x0375,0x0375,0x0375},
  483.   {0x0376,0x0376,0x0376},  {0x0377,0x0377,0x0377},
  484.   {0x0378,0x0378,0x0378},  {0x0379,0x0379,0x0379},
  485.   {0x037A,0x037A,0x037A},  {0x037B,0x037B,0x037B},
  486.   {0x037C,0x037C,0x037C},  {0x037D,0x037D,0x037D},
  487.   {0x037E,0x037E,0x037E},  {0x037F,0x037F,0x037F},
  488.   {0x0380,0x0380,0x0380},  {0x0381,0x0381,0x0381},
  489.   {0x0382,0x0382,0x0382},  {0x0383,0x0383,0x0383},
  490.   {0x0384,0x0384,0x0384},  {0x0385,0x0385,0x0385},
  491.   {0x0386,0x03AC,0x0391},  {0x0387,0x0387,0x0387},
  492.   {0x0388,0x03AD,0x0395},  {0x0389,0x03AE,0x0397},
  493.   {0x038A,0x03AF,0x0399},  {0x038B,0x038B,0x038B},
  494.   {0x038C,0x03CC,0x039F},  {0x038D,0x038D,0x038D},
  495.   {0x038E,0x03CD,0x03A5},  {0x038F,0x03CE,0x03A9},
  496.   {0x0390,0x0390,0x0399},  {0x0391,0x03B1,0x0391},
  497.   {0x0392,0x03B2,0x0392},  {0x0393,0x03B3,0x0393},
  498.   {0x0394,0x03B4,0x0394},  {0x0395,0x03B5,0x0395},
  499.   {0x0396,0x03B6,0x0396},  {0x0397,0x03B7,0x0397},
  500.   {0x0398,0x03B8,0x0398},  {0x0399,0x03B9,0x0399},
  501.   {0x039A,0x03BA,0x039A},  {0x039B,0x03BB,0x039B},
  502.   {0x039C,0x03BC,0x039C},  {0x039D,0x03BD,0x039D},
  503.   {0x039E,0x03BE,0x039E},  {0x039F,0x03BF,0x039F},
  504.   {0x03A0,0x03C0,0x03A0},  {0x03A1,0x03C1,0x03A1},
  505.   {0x03A2,0x03A2,0x03A2},  {0x03A3,0x03C3,0x03A3},
  506.   {0x03A4,0x03C4,0x03A4},  {0x03A5,0x03C5,0x03A5},
  507.   {0x03A6,0x03C6,0x03A6},  {0x03A7,0x03C7,0x03A7},
  508.   {0x03A8,0x03C8,0x03A8},  {0x03A9,0x03C9,0x03A9},
  509.   {0x03AA,0x03CA,0x0399},  {0x03AB,0x03CB,0x03A5},
  510.   {0x0386,0x03AC,0x0391},  {0x0388,0x03AD,0x0395},
  511.   {0x0389,0x03AE,0x0397},  {0x038A,0x03AF,0x0399},
  512.   {0x03B0,0x03B0,0x03A5},  {0x0391,0x03B1,0x0391},
  513.   {0x0392,0x03B2,0x0392},  {0x0393,0x03B3,0x0393},
  514.   {0x0394,0x03B4,0x0394},  {0x0395,0x03B5,0x0395},
  515.   {0x0396,0x03B6,0x0396},  {0x0397,0x03B7,0x0397},
  516.   {0x0398,0x03B8,0x0398},  {0x0399,0x03B9,0x0399},
  517.   {0x039A,0x03BA,0x039A},  {0x039B,0x03BB,0x039B},
  518.   {0x039C,0x03BC,0x039C},  {0x039D,0x03BD,0x039D},
  519.   {0x039E,0x03BE,0x039E},  {0x039F,0x03BF,0x039F},
  520.   {0x03A0,0x03C0,0x03A0},  {0x03A1,0x03C1,0x03A1},
  521.   {0x03A3,0x03C2,0x03A3},  {0x03A3,0x03C3,0x03A3},
  522.   {0x03A4,0x03C4,0x03A4},  {0x03A5,0x03C5,0x03A5},
  523.   {0x03A6,0x03C6,0x03A6},  {0x03A7,0x03C7,0x03A7},
  524.   {0x03A8,0x03C8,0x03A8},  {0x03A9,0x03C9,0x03A9},
  525.   {0x03AA,0x03CA,0x0399},  {0x03AB,0x03CB,0x03A5},
  526.   {0x038C,0x03CC,0x039F},  {0x038E,0x03CD,0x03A5},
  527.   {0x038F,0x03CE,0x03A9},  {0x03CF,0x03CF,0x03CF},
  528.   {0x0392,0x03D0,0x0392},  {0x0398,0x03D1,0x0398},
  529.   {0x03D2,0x03D2,0x03D2},  {0x03D3,0x03D3,0x03D2},
  530.   {0x03D4,0x03D4,0x03D2},  {0x03A6,0x03D5,0x03A6},
  531.   {0x03A0,0x03D6,0x03A0},  {0x03D7,0x03D7,0x03D7},
  532.   {0x03D8,0x03D8,0x03D8},  {0x03D9,0x03D9,0x03D9},
  533.   {0x03DA,0x03DB,0x03DA},  {0x03DA,0x03DB,0x03DA},
  534.   {0x03DC,0x03DD,0x03DC},  {0x03DC,0x03DD,0x03DC},
  535.   {0x03DE,0x03DF,0x03DE},  {0x03DE,0x03DF,0x03DE},
  536.   {0x03E0,0x03E1,0x03E0},  {0x03E0,0x03E1,0x03E0},
  537.   {0x03E2,0x03E3,0x03E2},  {0x03E2,0x03E3,0x03E2},
  538.   {0x03E4,0x03E5,0x03E4},  {0x03E4,0x03E5,0x03E4},
  539.   {0x03E6,0x03E7,0x03E6},  {0x03E6,0x03E7,0x03E6},
  540.   {0x03E8,0x03E9,0x03E8},  {0x03E8,0x03E9,0x03E8},
  541.   {0x03EA,0x03EB,0x03EA},  {0x03EA,0x03EB,0x03EA},
  542.   {0x03EC,0x03ED,0x03EC},  {0x03EC,0x03ED,0x03EC},
  543.   {0x03EE,0x03EF,0x03EE},  {0x03EE,0x03EF,0x03EE},
  544.   {0x039A,0x03F0,0x039A},  {0x03A1,0x03F1,0x03A1},
  545.   {0x03A3,0x03F2,0x03A3},  {0x03F3,0x03F3,0x03F3},
  546.   {0x03F4,0x03F4,0x03F4},  {0x03F5,0x03F5,0x03F5},
  547.   {0x03F6,0x03F6,0x03F6},  {0x03F7,0x03F7,0x03F7},
  548.   {0x03F8,0x03F8,0x03F8},  {0x03F9,0x03F9,0x03F9},
  549.   {0x03FA,0x03FA,0x03FA},  {0x03FB,0x03FB,0x03FB},
  550.   {0x03FC,0x03FC,0x03FC},  {0x03FD,0x03FD,0x03FD},
  551.   {0x03FE,0x03FE,0x03FE},  {0x03FF,0x03FF,0x03FF}
  552. };
  553. static MY_UNICASE_INFO plane04[]={
  554.   {0x0400,0x0450,0x0415},  {0x0401,0x0451,0x0415},
  555.   {0x0402,0x0452,0x0402},  {0x0403,0x0453,0x0413},
  556.   {0x0404,0x0454,0x0404},  {0x0405,0x0455,0x0405},
  557.   {0x0406,0x0456,0x0406},  {0x0407,0x0457,0x0406},
  558.   {0x0408,0x0458,0x0408},  {0x0409,0x0459,0x0409},
  559.   {0x040A,0x045A,0x040A},  {0x040B,0x045B,0x040B},
  560.   {0x040C,0x045C,0x041A},  {0x040D,0x045D,0x0418},
  561.   {0x040E,0x045E,0x0423},  {0x040F,0x045F,0x040F},
  562.   {0x0410,0x0430,0x0410},  {0x0411,0x0431,0x0411},
  563.   {0x0412,0x0432,0x0412},  {0x0413,0x0433,0x0413},
  564.   {0x0414,0x0434,0x0414},  {0x0415,0x0435,0x0415},
  565.   {0x0416,0x0436,0x0416},  {0x0417,0x0437,0x0417},
  566.   {0x0418,0x0438,0x0418},  {0x0419,0x0439,0x0419},
  567.   {0x041A,0x043A,0x041A},  {0x041B,0x043B,0x041B},
  568.   {0x041C,0x043C,0x041C},  {0x041D,0x043D,0x041D},
  569.   {0x041E,0x043E,0x041E},  {0x041F,0x043F,0x041F},
  570.   {0x0420,0x0440,0x0420},  {0x0421,0x0441,0x0421},
  571.   {0x0422,0x0442,0x0422},  {0x0423,0x0443,0x0423},
  572.   {0x0424,0x0444,0x0424},  {0x0425,0x0445,0x0425},
  573.   {0x0426,0x0446,0x0426},  {0x0427,0x0447,0x0427},
  574.   {0x0428,0x0448,0x0428},  {0x0429,0x0449,0x0429},
  575.   {0x042A,0x044A,0x042A},  {0x042B,0x044B,0x042B},
  576.   {0x042C,0x044C,0x042C},  {0x042D,0x044D,0x042D},
  577.   {0x042E,0x044E,0x042E},  {0x042F,0x044F,0x042F},
  578.   {0x0410,0x0430,0x0410},  {0x0411,0x0431,0x0411},
  579.   {0x0412,0x0432,0x0412},  {0x0413,0x0433,0x0413},
  580.   {0x0414,0x0434,0x0414},  {0x0415,0x0435,0x0415},
  581.   {0x0416,0x0436,0x0416},  {0x0417,0x0437,0x0417},
  582.   {0x0418,0x0438,0x0418},  {0x0419,0x0439,0x0419},
  583.   {0x041A,0x043A,0x041A},  {0x041B,0x043B,0x041B},
  584.   {0x041C,0x043C,0x041C},  {0x041D,0x043D,0x041D},
  585.   {0x041E,0x043E,0x041E},  {0x041F,0x043F,0x041F},
  586.   {0x0420,0x0440,0x0420},  {0x0421,0x0441,0x0421},
  587.   {0x0422,0x0442,0x0422},  {0x0423,0x0443,0x0423},
  588.   {0x0424,0x0444,0x0424},  {0x0425,0x0445,0x0425},
  589.   {0x0426,0x0446,0x0426},  {0x0427,0x0447,0x0427},
  590.   {0x0428,0x0448,0x0428},  {0x0429,0x0449,0x0429},
  591.   {0x042A,0x044A,0x042A},  {0x042B,0x044B,0x042B},
  592.   {0x042C,0x044C,0x042C},  {0x042D,0x044D,0x042D},
  593.   {0x042E,0x044E,0x042E},  {0x042F,0x044F,0x042F},
  594.   {0x0400,0x0450,0x0415},  {0x0401,0x0451,0x0415},
  595.   {0x0402,0x0452,0x0402},  {0x0403,0x0453,0x0413},
  596.   {0x0404,0x0454,0x0404},  {0x0405,0x0455,0x0405},
  597.   {0x0406,0x0456,0x0406},  {0x0407,0x0457,0x0406},
  598.   {0x0408,0x0458,0x0408},  {0x0409,0x0459,0x0409},
  599.   {0x040A,0x045A,0x040A},  {0x040B,0x045B,0x040B},
  600.   {0x040C,0x045C,0x041A},  {0x040D,0x045D,0x0418},
  601.   {0x040E,0x045E,0x0423},  {0x040F,0x045F,0x040F},
  602.   {0x0460,0x0461,0x0460},  {0x0460,0x0461,0x0460},
  603.   {0x0462,0x0463,0x0462},  {0x0462,0x0463,0x0462},
  604.   {0x0464,0x0465,0x0464},  {0x0464,0x0465,0x0464},
  605.   {0x0466,0x0467,0x0466},  {0x0466,0x0467,0x0466},
  606.   {0x0468,0x0469,0x0468},  {0x0468,0x0469,0x0468},
  607.   {0x046A,0x046B,0x046A},  {0x046A,0x046B,0x046A},
  608.   {0x046C,0x046D,0x046C},  {0x046C,0x046D,0x046C},
  609.   {0x046E,0x046F,0x046E},  {0x046E,0x046F,0x046E},
  610.   {0x0470,0x0471,0x0470},  {0x0470,0x0471,0x0470},
  611.   {0x0472,0x0473,0x0472},  {0x0472,0x0473,0x0472},
  612.   {0x0474,0x0475,0x0474},  {0x0474,0x0475,0x0474},
  613.   {0x0476,0x0477,0x0474},  {0x0476,0x0477,0x0474},
  614.   {0x0478,0x0479,0x0478},  {0x0478,0x0479,0x0478},
  615.   {0x047A,0x047B,0x047A},  {0x047A,0x047B,0x047A},
  616.   {0x047C,0x047D,0x047C},  {0x047C,0x047D,0x047C},
  617.   {0x047E,0x047F,0x047E},  {0x047E,0x047F,0x047E},
  618.   {0x0480,0x0481,0x0480},  {0x0480,0x0481,0x0480},
  619.   {0x0482,0x0482,0x0482},  {0x0483,0x0483,0x0483},
  620.   {0x0484,0x0484,0x0484},  {0x0485,0x0485,0x0485},
  621.   {0x0486,0x0486,0x0486},  {0x0487,0x0487,0x0487},
  622.   {0x0488,0x0488,0x0488},  {0x0489,0x0489,0x0489},
  623.   {0x048A,0x048A,0x048A},  {0x048B,0x048B,0x048B},
  624.   {0x048C,0x048D,0x048C},  {0x048C,0x048D,0x048C},
  625.   {0x048E,0x048F,0x048E},  {0x048E,0x048F,0x048E},
  626.   {0x0490,0x0491,0x0490},  {0x0490,0x0491,0x0490},
  627.   {0x0492,0x0493,0x0492},  {0x0492,0x0493,0x0492},
  628.   {0x0494,0x0495,0x0494},  {0x0494,0x0495,0x0494},
  629.   {0x0496,0x0497,0x0496},  {0x0496,0x0497,0x0496},
  630.   {0x0498,0x0499,0x0498},  {0x0498,0x0499,0x0498},
  631.   {0x049A,0x049B,0x049A},  {0x049A,0x049B,0x049A},
  632.   {0x049C,0x049D,0x049C},  {0x049C,0x049D,0x049C},
  633.   {0x049E,0x049F,0x049E},  {0x049E,0x049F,0x049E},
  634.   {0x04A0,0x04A1,0x04A0},  {0x04A0,0x04A1,0x04A0},
  635.   {0x04A2,0x04A3,0x04A2},  {0x04A2,0x04A3,0x04A2},
  636.   {0x04A4,0x04A5,0x04A4},  {0x04A4,0x04A5,0x04A4},
  637.   {0x04A6,0x04A7,0x04A6},  {0x04A6,0x04A7,0x04A6},
  638.   {0x04A8,0x04A9,0x04A8},  {0x04A8,0x04A9,0x04A8},
  639.   {0x04AA,0x04AB,0x04AA},  {0x04AA,0x04AB,0x04AA},
  640.   {0x04AC,0x04AD,0x04AC},  {0x04AC,0x04AD,0x04AC},
  641.   {0x04AE,0x04AF,0x04AE},  {0x04AE,0x04AF,0x04AE},
  642.   {0x04B0,0x04B1,0x04B0},  {0x04B0,0x04B1,0x04B0},
  643.   {0x04B2,0x04B3,0x04B2},  {0x04B2,0x04B3,0x04B2},
  644.   {0x04B4,0x04B5,0x04B4},  {0x04B4,0x04B5,0x04B4},
  645.   {0x04B6,0x04B7,0x04B6},  {0x04B6,0x04B7,0x04B6},
  646.   {0x04B8,0x04B9,0x04B8},  {0x04B8,0x04B9,0x04B8},
  647.   {0x04BA,0x04BB,0x04BA},  {0x04BA,0x04BB,0x04BA},
  648.   {0x04BC,0x04BD,0x04BC},  {0x04BC,0x04BD,0x04BC},
  649.   {0x04BE,0x04BF,0x04BE},  {0x04BE,0x04BF,0x04BE},
  650.   {0x04C0,0x04C0,0x04C0},  {0x04C1,0x04C2,0x0416},
  651.   {0x04C1,0x04C2,0x0416},  {0x04C3,0x04C4,0x04C3},
  652.   {0x04C3,0x04C4,0x04C3},  {0x04C5,0x04C5,0x04C5},
  653.   {0x04C6,0x04C6,0x04C6},  {0x04C7,0x04C8,0x04C7},
  654.   {0x04C7,0x04C8,0x04C7},  {0x04C9,0x04C9,0x04C9},
  655.   {0x04CA,0x04CA,0x04CA},  {0x04CB,0x04CC,0x04CB},
  656.   {0x04CB,0x04CC,0x04CB},  {0x04CD,0x04CD,0x04CD},
  657.   {0x04CE,0x04CE,0x04CE},  {0x04CF,0x04CF,0x04CF},
  658.   {0x04D0,0x04D1,0x0410},  {0x04D0,0x04D1,0x0410},
  659.   {0x04D2,0x04D3,0x0410},  {0x04D2,0x04D3,0x0410},
  660.   {0x04D4,0x04D5,0x04D4},  {0x04D4,0x04D5,0x04D4},
  661.   {0x04D6,0x04D7,0x0415},  {0x04D6,0x04D7,0x0415},
  662.   {0x04D8,0x04D9,0x04D8},  {0x04D8,0x04D9,0x04D8},
  663.   {0x04DA,0x04DB,0x04D8},  {0x04DA,0x04DB,0x04D8},
  664.   {0x04DC,0x04DD,0x0416},  {0x04DC,0x04DD,0x0416},
  665.   {0x04DE,0x04DF,0x0417},  {0x04DE,0x04DF,0x0417},
  666.   {0x04E0,0x04E1,0x04E0},  {0x04E0,0x04E1,0x04E0},
  667.   {0x04E2,0x04E3,0x0418},  {0x04E2,0x04E3,0x0418},
  668.   {0x04E4,0x04E5,0x0418},  {0x04E4,0x04E5,0x0418},
  669.   {0x04E6,0x04E7,0x041E},  {0x04E6,0x04E7,0x041E},
  670.   {0x04E8,0x04E9,0x04E8},  {0x04E8,0x04E9,0x04E8},
  671.   {0x04EA,0x04EB,0x04E8},  {0x04EA,0x04EB,0x04E8},
  672.   {0x04EC,0x04ED,0x042D},  {0x04EC,0x04ED,0x042D},
  673.   {0x04EE,0x04EF,0x0423},  {0x04EE,0x04EF,0x0423},
  674.   {0x04F0,0x04F1,0x0423},  {0x04F0,0x04F1,0x0423},
  675.   {0x04F2,0x04F3,0x0423},  {0x04F2,0x04F3,0x0423},
  676.   {0x04F4,0x04F5,0x0427},  {0x04F4,0x04F5,0x0427},
  677.   {0x04F6,0x04F6,0x04F6},  {0x04F7,0x04F7,0x04F7},
  678.   {0x04F8,0x04F9,0x042B},  {0x04F8,0x04F9,0x042B},
  679.   {0x04FA,0x04FA,0x04FA},  {0x04FB,0x04FB,0x04FB},
  680.   {0x04FC,0x04FC,0x04FC},  {0x04FD,0x04FD,0x04FD},
  681.   {0x04FE,0x04FE,0x04FE},  {0x04FF,0x04FF,0x04FF}
  682. };
  683. static MY_UNICASE_INFO plane05[]={
  684.   {0x0500,0x0500,0x0500},  {0x0501,0x0501,0x0501},
  685.   {0x0502,0x0502,0x0502},  {0x0503,0x0503,0x0503},
  686.   {0x0504,0x0504,0x0504},  {0x0505,0x0505,0x0505},
  687.   {0x0506,0x0506,0x0506},  {0x0507,0x0507,0x0507},
  688.   {0x0508,0x0508,0x0508},  {0x0509,0x0509,0x0509},
  689.   {0x050A,0x050A,0x050A},  {0x050B,0x050B,0x050B},
  690.   {0x050C,0x050C,0x050C},  {0x050D,0x050D,0x050D},
  691.   {0x050E,0x050E,0x050E},  {0x050F,0x050F,0x050F},
  692.   {0x0510,0x0510,0x0510},  {0x0511,0x0511,0x0511},
  693.   {0x0512,0x0512,0x0512},  {0x0513,0x0513,0x0513},
  694.   {0x0514,0x0514,0x0514},  {0x0515,0x0515,0x0515},
  695.   {0x0516,0x0516,0x0516},  {0x0517,0x0517,0x0517},
  696.   {0x0518,0x0518,0x0518},  {0x0519,0x0519,0x0519},
  697.   {0x051A,0x051A,0x051A},  {0x051B,0x051B,0x051B},
  698.   {0x051C,0x051C,0x051C},  {0x051D,0x051D,0x051D},
  699.   {0x051E,0x051E,0x051E},  {0x051F,0x051F,0x051F},
  700.   {0x0520,0x0520,0x0520},  {0x0521,0x0521,0x0521},
  701.   {0x0522,0x0522,0x0522},  {0x0523,0x0523,0x0523},
  702.   {0x0524,0x0524,0x0524},  {0x0525,0x0525,0x0525},
  703.   {0x0526,0x0526,0x0526},  {0x0527,0x0527,0x0527},
  704.   {0x0528,0x0528,0x0528},  {0x0529,0x0529,0x0529},
  705.   {0x052A,0x052A,0x052A},  {0x052B,0x052B,0x052B},
  706.   {0x052C,0x052C,0x052C},  {0x052D,0x052D,0x052D},
  707.   {0x052E,0x052E,0x052E},  {0x052F,0x052F,0x052F},
  708.   {0x0530,0x0530,0x0530},  {0x0531,0x0561,0x0531},
  709.   {0x0532,0x0562,0x0532},  {0x0533,0x0563,0x0533},
  710.   {0x0534,0x0564,0x0534},  {0x0535,0x0565,0x0535},
  711.   {0x0536,0x0566,0x0536},  {0x0537,0x0567,0x0537},
  712.   {0x0538,0x0568,0x0538},  {0x0539,0x0569,0x0539},
  713.   {0x053A,0x056A,0x053A},  {0x053B,0x056B,0x053B},
  714.   {0x053C,0x056C,0x053C},  {0x053D,0x056D,0x053D},
  715.   {0x053E,0x056E,0x053E},  {0x053F,0x056F,0x053F},
  716.   {0x0540,0x0570,0x0540},  {0x0541,0x0571,0x0541},
  717.   {0x0542,0x0572,0x0542},  {0x0543,0x0573,0x0543},
  718.   {0x0544,0x0574,0x0544},  {0x0545,0x0575,0x0545},
  719.   {0x0546,0x0576,0x0546},  {0x0547,0x0577,0x0547},
  720.   {0x0548,0x0578,0x0548},  {0x0549,0x0579,0x0549},
  721.   {0x054A,0x057A,0x054A},  {0x054B,0x057B,0x054B},
  722.   {0x054C,0x057C,0x054C},  {0x054D,0x057D,0x054D},
  723.   {0x054E,0x057E,0x054E},  {0x054F,0x057F,0x054F},
  724.   {0x0550,0x0580,0x0550},  {0x0551,0x0581,0x0551},
  725.   {0x0552,0x0582,0x0552},  {0x0553,0x0583,0x0553},
  726.   {0x0554,0x0584,0x0554},  {0x0555,0x0585,0x0555},
  727.   {0x0556,0x0586,0x0556},  {0x0557,0x0557,0x0557},
  728.   {0x0558,0x0558,0x0558},  {0x0559,0x0559,0x0559},
  729.   {0x055A,0x055A,0x055A},  {0x055B,0x055B,0x055B},
  730.   {0x055C,0x055C,0x055C},  {0x055D,0x055D,0x055D},
  731.   {0x055E,0x055E,0x055E},  {0x055F,0x055F,0x055F},
  732.   {0x0560,0x0560,0x0560},  {0x0531,0x0561,0x0531},
  733.   {0x0532,0x0562,0x0532},  {0x0533,0x0563,0x0533},
  734.   {0x0534,0x0564,0x0534},  {0x0535,0x0565,0x0535},
  735.   {0x0536,0x0566,0x0536},  {0x0537,0x0567,0x0537},
  736.   {0x0538,0x0568,0x0538},  {0x0539,0x0569,0x0539},
  737.   {0x053A,0x056A,0x053A},  {0x053B,0x056B,0x053B},
  738.   {0x053C,0x056C,0x053C},  {0x053D,0x056D,0x053D},
  739.   {0x053E,0x056E,0x053E},  {0x053F,0x056F,0x053F},
  740.   {0x0540,0x0570,0x0540},  {0x0541,0x0571,0x0541},
  741.   {0x0542,0x0572,0x0542},  {0x0543,0x0573,0x0543},
  742.   {0x0544,0x0574,0x0544},  {0x0545,0x0575,0x0545},
  743.   {0x0546,0x0576,0x0546},  {0x0547,0x0577,0x0547},
  744.   {0x0548,0x0578,0x0548},  {0x0549,0x0579,0x0549},
  745.   {0x054A,0x057A,0x054A},  {0x054B,0x057B,0x054B},
  746.   {0x054C,0x057C,0x054C},  {0x054D,0x057D,0x054D},
  747.   {0x054E,0x057E,0x054E},  {0x054F,0x057F,0x054F},
  748.   {0x0550,0x0580,0x0550},  {0x0551,0x0581,0x0551},
  749.   {0x0552,0x0582,0x0552},  {0x0553,0x0583,0x0553},
  750.   {0x0554,0x0584,0x0554},  {0x0555,0x0585,0x0555},
  751.   {0x0556,0x0586,0x0556},  {0x0587,0x0587,0x0587},
  752.   {0x0588,0x0588,0x0588},  {0x0589,0x0589,0x0589},
  753.   {0x058A,0x058A,0x058A},  {0x058B,0x058B,0x058B},
  754.   {0x058C,0x058C,0x058C},  {0x058D,0x058D,0x058D},
  755.   {0x058E,0x058E,0x058E},  {0x058F,0x058F,0x058F},
  756.   {0x0590,0x0590,0x0590},  {0x0591,0x0591,0x0591},
  757.   {0x0592,0x0592,0x0592},  {0x0593,0x0593,0x0593},
  758.   {0x0594,0x0594,0x0594},  {0x0595,0x0595,0x0595},
  759.   {0x0596,0x0596,0x0596},  {0x0597,0x0597,0x0597},
  760.   {0x0598,0x0598,0x0598},  {0x0599,0x0599,0x0599},
  761.   {0x059A,0x059A,0x059A},  {0x059B,0x059B,0x059B},
  762.   {0x059C,0x059C,0x059C},  {0x059D,0x059D,0x059D},
  763.   {0x059E,0x059E,0x059E},  {0x059F,0x059F,0x059F},
  764.   {0x05A0,0x05A0,0x05A0},  {0x05A1,0x05A1,0x05A1},
  765.   {0x05A2,0x05A2,0x05A2},  {0x05A3,0x05A3,0x05A3},
  766.   {0x05A4,0x05A4,0x05A4},  {0x05A5,0x05A5,0x05A5},
  767.   {0x05A6,0x05A6,0x05A6},  {0x05A7,0x05A7,0x05A7},
  768.   {0x05A8,0x05A8,0x05A8},  {0x05A9,0x05A9,0x05A9},
  769.   {0x05AA,0x05AA,0x05AA},  {0x05AB,0x05AB,0x05AB},
  770.   {0x05AC,0x05AC,0x05AC},  {0x05AD,0x05AD,0x05AD},
  771.   {0x05AE,0x05AE,0x05AE},  {0x05AF,0x05AF,0x05AF},
  772.   {0x05B0,0x05B0,0x05B0},  {0x05B1,0x05B1,0x05B1},
  773.   {0x05B2,0x05B2,0x05B2},  {0x05B3,0x05B3,0x05B3},
  774.   {0x05B4,0x05B4,0x05B4},  {0x05B5,0x05B5,0x05B5},
  775.   {0x05B6,0x05B6,0x05B6},  {0x05B7,0x05B7,0x05B7},
  776.   {0x05B8,0x05B8,0x05B8},  {0x05B9,0x05B9,0x05B9},
  777.   {0x05BA,0x05BA,0x05BA},  {0x05BB,0x05BB,0x05BB},
  778.   {0x05BC,0x05BC,0x05BC},  {0x05BD,0x05BD,0x05BD},
  779.   {0x05BE,0x05BE,0x05BE},  {0x05BF,0x05BF,0x05BF},
  780.   {0x05C0,0x05C0,0x05C0},  {0x05C1,0x05C1,0x05C1},
  781.   {0x05C2,0x05C2,0x05C2},  {0x05C3,0x05C3,0x05C3},
  782.   {0x05C4,0x05C4,0x05C4},  {0x05C5,0x05C5,0x05C5},
  783.   {0x05C6,0x05C6,0x05C6},  {0x05C7,0x05C7,0x05C7},
  784.   {0x05C8,0x05C8,0x05C8},  {0x05C9,0x05C9,0x05C9},
  785.   {0x05CA,0x05CA,0x05CA},  {0x05CB,0x05CB,0x05CB},
  786.   {0x05CC,0x05CC,0x05CC},  {0x05CD,0x05CD,0x05CD},
  787.   {0x05CE,0x05CE,0x05CE},  {0x05CF,0x05CF,0x05CF},
  788.   {0x05D0,0x05D0,0x05D0},  {0x05D1,0x05D1,0x05D1},
  789.   {0x05D2,0x05D2,0x05D2},  {0x05D3,0x05D3,0x05D3},
  790.   {0x05D4,0x05D4,0x05D4},  {0x05D5,0x05D5,0x05D5},
  791.   {0x05D6,0x05D6,0x05D6},  {0x05D7,0x05D7,0x05D7},
  792.   {0x05D8,0x05D8,0x05D8},  {0x05D9,0x05D9,0x05D9},
  793.   {0x05DA,0x05DA,0x05DA},  {0x05DB,0x05DB,0x05DB},
  794.   {0x05DC,0x05DC,0x05DC},  {0x05DD,0x05DD,0x05DD},
  795.   {0x05DE,0x05DE,0x05DE},  {0x05DF,0x05DF,0x05DF},
  796.   {0x05E0,0x05E0,0x05E0},  {0x05E1,0x05E1,0x05E1},
  797.   {0x05E2,0x05E2,0x05E2},  {0x05E3,0x05E3,0x05E3},
  798.   {0x05E4,0x05E4,0x05E4},  {0x05E5,0x05E5,0x05E5},
  799.   {0x05E6,0x05E6,0x05E6},  {0x05E7,0x05E7,0x05E7},
  800.   {0x05E8,0x05E8,0x05E8},  {0x05E9,0x05E9,0x05E9},
  801.   {0x05EA,0x05EA,0x05EA},  {0x05EB,0x05EB,0x05EB},
  802.   {0x05EC,0x05EC,0x05EC},  {0x05ED,0x05ED,0x05ED},
  803.   {0x05EE,0x05EE,0x05EE},  {0x05EF,0x05EF,0x05EF},
  804.   {0x05F0,0x05F0,0x05F0},  {0x05F1,0x05F1,0x05F1},
  805.   {0x05F2,0x05F2,0x05F2},  {0x05F3,0x05F3,0x05F3},
  806.   {0x05F4,0x05F4,0x05F4},  {0x05F5,0x05F5,0x05F5},
  807.   {0x05F6,0x05F6,0x05F6},  {0x05F7,0x05F7,0x05F7},
  808.   {0x05F8,0x05F8,0x05F8},  {0x05F9,0x05F9,0x05F9},
  809.   {0x05FA,0x05FA,0x05FA},  {0x05FB,0x05FB,0x05FB},
  810.   {0x05FC,0x05FC,0x05FC},  {0x05FD,0x05FD,0x05FD},
  811.   {0x05FE,0x05FE,0x05FE},  {0x05FF,0x05FF,0x05FF}
  812. };
  813. static MY_UNICASE_INFO plane1E[]={
  814.   {0x1E00,0x1E01,0x0041},  {0x1E00,0x1E01,0x0041},
  815.   {0x1E02,0x1E03,0x0042},  {0x1E02,0x1E03,0x0042},
  816.   {0x1E04,0x1E05,0x0042},  {0x1E04,0x1E05,0x0042},
  817.   {0x1E06,0x1E07,0x0042},  {0x1E06,0x1E07,0x0042},
  818.   {0x1E08,0x1E09,0x0043},  {0x1E08,0x1E09,0x0043},
  819.   {0x1E0A,0x1E0B,0x0044},  {0x1E0A,0x1E0B,0x0044},
  820.   {0x1E0C,0x1E0D,0x0044},  {0x1E0C,0x1E0D,0x0044},
  821.   {0x1E0E,0x1E0F,0x0044},  {0x1E0E,0x1E0F,0x0044},
  822.   {0x1E10,0x1E11,0x0044},  {0x1E10,0x1E11,0x0044},
  823.   {0x1E12,0x1E13,0x0044},  {0x1E12,0x1E13,0x0044},
  824.   {0x1E14,0x1E15,0x0045},  {0x1E14,0x1E15,0x0045},
  825.   {0x1E16,0x1E17,0x0045},  {0x1E16,0x1E17,0x0045},
  826.   {0x1E18,0x1E19,0x0045},  {0x1E18,0x1E19,0x0045},
  827.   {0x1E1A,0x1E1B,0x0045},  {0x1E1A,0x1E1B,0x0045},
  828.   {0x1E1C,0x1E1D,0x0045},  {0x1E1C,0x1E1D,0x0045},
  829.   {0x1E1E,0x1E1F,0x0046},  {0x1E1E,0x1E1F,0x0046},
  830.   {0x1E20,0x1E21,0x0047},  {0x1E20,0x1E21,0x0047},
  831.   {0x1E22,0x1E23,0x0048},  {0x1E22,0x1E23,0x0048},
  832.   {0x1E24,0x1E25,0x0048},  {0x1E24,0x1E25,0x0048},
  833.   {0x1E26,0x1E27,0x0048},  {0x1E26,0x1E27,0x0048},
  834.   {0x1E28,0x1E29,0x0048},  {0x1E28,0x1E29,0x0048},
  835.   {0x1E2A,0x1E2B,0x0048},  {0x1E2A,0x1E2B,0x0048},
  836.   {0x1E2C,0x1E2D,0x0049},  {0x1E2C,0x1E2D,0x0049},
  837.   {0x1E2E,0x1E2F,0x0049},  {0x1E2E,0x1E2F,0x0049},
  838.   {0x1E30,0x1E31,0x004B},  {0x1E30,0x1E31,0x004B},
  839.   {0x1E32,0x1E33,0x004B},  {0x1E32,0x1E33,0x004B},
  840.   {0x1E34,0x1E35,0x004B},  {0x1E34,0x1E35,0x004B},
  841.   {0x1E36,0x1E37,0x004C},  {0x1E36,0x1E37,0x004C},
  842.   {0x1E38,0x1E39,0x004C},  {0x1E38,0x1E39,0x004C},
  843.   {0x1E3A,0x1E3B,0x004C},  {0x1E3A,0x1E3B,0x004C},
  844.   {0x1E3C,0x1E3D,0x004C},  {0x1E3C,0x1E3D,0x004C},
  845.   {0x1E3E,0x1E3F,0x004D},  {0x1E3E,0x1E3F,0x004D},
  846.   {0x1E40,0x1E41,0x004D},  {0x1E40,0x1E41,0x004D},
  847.   {0x1E42,0x1E43,0x004D},  {0x1E42,0x1E43,0x004D},
  848.   {0x1E44,0x1E45,0x004E},  {0x1E44,0x1E45,0x004E},
  849.   {0x1E46,0x1E47,0x004E},  {0x1E46,0x1E47,0x004E},
  850.   {0x1E48,0x1E49,0x004E},  {0x1E48,0x1E49,0x004E},
  851.   {0x1E4A,0x1E4B,0x004E},  {0x1E4A,0x1E4B,0x004E},
  852.   {0x1E4C,0x1E4D,0x004F},  {0x1E4C,0x1E4D,0x004F},
  853.   {0x1E4E,0x1E4F,0x004F},  {0x1E4E,0x1E4F,0x004F},
  854.   {0x1E50,0x1E51,0x004F},  {0x1E50,0x1E51,0x004F},
  855.   {0x1E52,0x1E53,0x004F},  {0x1E52,0x1E53,0x004F},
  856.   {0x1E54,0x1E55,0x0050},  {0x1E54,0x1E55,0x0050},
  857.   {0x1E56,0x1E57,0x0050},  {0x1E56,0x1E57,0x0050},
  858.   {0x1E58,0x1E59,0x0052},  {0x1E58,0x1E59,0x0052},
  859.   {0x1E5A,0x1E5B,0x0052},  {0x1E5A,0x1E5B,0x0052},
  860.   {0x1E5C,0x1E5D,0x0052},  {0x1E5C,0x1E5D,0x0052},
  861.   {0x1E5E,0x1E5F,0x0052},  {0x1E5E,0x1E5F,0x0052},
  862.   {0x1E60,0x1E61,0x0053},  {0x1E60,0x1E61,0x0053},
  863.   {0x1E62,0x1E63,0x0053},  {0x1E62,0x1E63,0x0053},
  864.   {0x1E64,0x1E65,0x0053},  {0x1E64,0x1E65,0x0053},
  865.   {0x1E66,0x1E67,0x0053},  {0x1E66,0x1E67,0x0053},
  866.   {0x1E68,0x1E69,0x0053},  {0x1E68,0x1E69,0x0053},
  867.   {0x1E6A,0x1E6B,0x0054},  {0x1E6A,0x1E6B,0x0054},
  868.   {0x1E6C,0x1E6D,0x0054},  {0x1E6C,0x1E6D,0x0054},
  869.   {0x1E6E,0x1E6F,0x0054},  {0x1E6E,0x1E6F,0x0054},
  870.   {0x1E70,0x1E71,0x0054},  {0x1E70,0x1E71,0x0054},
  871.   {0x1E72,0x1E73,0x0055},  {0x1E72,0x1E73,0x0055},
  872.   {0x1E74,0x1E75,0x0055},  {0x1E74,0x1E75,0x0055},
  873.   {0x1E76,0x1E77,0x0055},  {0x1E76,0x1E77,0x0055},
  874.   {0x1E78,0x1E79,0x0055},  {0x1E78,0x1E79,0x0055},
  875.   {0x1E7A,0x1E7B,0x0055},  {0x1E7A,0x1E7B,0x0055},
  876.   {0x1E7C,0x1E7D,0x0056},  {0x1E7C,0x1E7D,0x0056},
  877.   {0x1E7E,0x1E7F,0x0056},  {0x1E7E,0x1E7F,0x0056},
  878.   {0x1E80,0x1E81,0x0057},  {0x1E80,0x1E81,0x0057},
  879.   {0x1E82,0x1E83,0x0057},  {0x1E82,0x1E83,0x0057},
  880.   {0x1E84,0x1E85,0x0057},  {0x1E84,0x1E85,0x0057},
  881.   {0x1E86,0x1E87,0x0057},  {0x1E86,0x1E87,0x0057},
  882.   {0x1E88,0x1E89,0x0057},  {0x1E88,0x1E89,0x0057},
  883.   {0x1E8A,0x1E8B,0x0058},  {0x1E8A,0x1E8B,0x0058},
  884.   {0x1E8C,0x1E8D,0x0058},  {0x1E8C,0x1E8D,0x0058},
  885.   {0x1E8E,0x1E8F,0x0059},  {0x1E8E,0x1E8F,0x0059},
  886.   {0x1E90,0x1E91,0x005A},  {0x1E90,0x1E91,0x005A},
  887.   {0x1E92,0x1E93,0x005A},  {0x1E92,0x1E93,0x005A},
  888.   {0x1E94,0x1E95,0x005A},  {0x1E94,0x1E95,0x005A},
  889.   {0x1E96,0x1E96,0x0048},  {0x1E97,0x1E97,0x0054},
  890.   {0x1E98,0x1E98,0x0057},  {0x1E99,0x1E99,0x0059},
  891.   {0x1E9A,0x1E9A,0x1E9A},  {0x1E60,0x1E9B,0x0053},
  892.   {0x1E9C,0x1E9C,0x1E9C},  {0x1E9D,0x1E9D,0x1E9D},
  893.   {0x1E9E,0x1E9E,0x1E9E},  {0x1E9F,0x1E9F,0x1E9F},
  894.   {0x1EA0,0x1EA1,0x0041},  {0x1EA0,0x1EA1,0x0041},
  895.   {0x1EA2,0x1EA3,0x0041},  {0x1EA2,0x1EA3,0x0041},
  896.   {0x1EA4,0x1EA5,0x0041},  {0x1EA4,0x1EA5,0x0041},
  897.   {0x1EA6,0x1EA7,0x0041},  {0x1EA6,0x1EA7,0x0041},
  898.   {0x1EA8,0x1EA9,0x0041},  {0x1EA8,0x1EA9,0x0041},
  899.   {0x1EAA,0x1EAB,0x0041},  {0x1EAA,0x1EAB,0x0041},
  900.   {0x1EAC,0x1EAD,0x0041},  {0x1EAC,0x1EAD,0x0041},
  901.   {0x1EAE,0x1EAF,0x0041},  {0x1EAE,0x1EAF,0x0041},
  902.   {0x1EB0,0x1EB1,0x0041},  {0x1EB0,0x1EB1,0x0041},
  903.   {0x1EB2,0x1EB3,0x0041},  {0x1EB2,0x1EB3,0x0041},
  904.   {0x1EB4,0x1EB5,0x0041},  {0x1EB4,0x1EB5,0x0041},
  905.   {0x1EB6,0x1EB7,0x0041},  {0x1EB6,0x1EB7,0x0041},
  906.   {0x1EB8,0x1EB9,0x0045},  {0x1EB8,0x1EB9,0x0045},
  907.   {0x1EBA,0x1EBB,0x0045},  {0x1EBA,0x1EBB,0x0045},
  908.   {0x1EBC,0x1EBD,0x0045},  {0x1EBC,0x1EBD,0x0045},
  909.   {0x1EBE,0x1EBF,0x0045},  {0x1EBE,0x1EBF,0x0045},
  910.   {0x1EC0,0x1EC1,0x0045},  {0x1EC0,0x1EC1,0x0045},
  911.   {0x1EC2,0x1EC3,0x0045},  {0x1EC2,0x1EC3,0x0045},
  912.   {0x1EC4,0x1EC5,0x0045},  {0x1EC4,0x1EC5,0x0045},
  913.   {0x1EC6,0x1EC7,0x0045},  {0x1EC6,0x1EC7,0x0045},
  914.   {0x1EC8,0x1EC9,0x0049},  {0x1EC8,0x1EC9,0x0049},
  915.   {0x1ECA,0x1ECB,0x0049},  {0x1ECA,0x1ECB,0x0049},
  916.   {0x1ECC,0x1ECD,0x004F},  {0x1ECC,0x1ECD,0x004F},
  917.   {0x1ECE,0x1ECF,0x004F},  {0x1ECE,0x1ECF,0x004F},
  918.   {0x1ED0,0x1ED1,0x004F},  {0x1ED0,0x1ED1,0x004F},
  919.   {0x1ED2,0x1ED3,0x004F},  {0x1ED2,0x1ED3,0x004F},
  920.   {0x1ED4,0x1ED5,0x004F},  {0x1ED4,0x1ED5,0x004F},
  921.   {0x1ED6,0x1ED7,0x004F},  {0x1ED6,0x1ED7,0x004F},
  922.   {0x1ED8,0x1ED9,0x004F},  {0x1ED8,0x1ED9,0x004F},
  923.   {0x1EDA,0x1EDB,0x004F},  {0x1EDA,0x1EDB,0x004F},
  924.   {0x1EDC,0x1EDD,0x004F},  {0x1EDC,0x1EDD,0x004F},
  925.   {0x1EDE,0x1EDF,0x004F},  {0x1EDE,0x1EDF,0x004F},
  926.   {0x1EE0,0x1EE1,0x004F},  {0x1EE0,0x1EE1,0x004F},
  927.   {0x1EE2,0x1EE3,0x004F},  {0x1EE2,0x1EE3,0x004F},
  928.   {0x1EE4,0x1EE5,0x0055},  {0x1EE4,0x1EE5,0x0055},
  929.   {0x1EE6,0x1EE7,0x0055},  {0x1EE6,0x1EE7,0x0055},
  930.   {0x1EE8,0x1EE9,0x0055},  {0x1EE8,0x1EE9,0x0055},
  931.   {0x1EEA,0x1EEB,0x0055},  {0x1EEA,0x1EEB,0x0055},
  932.   {0x1EEC,0x1EED,0x0055},  {0x1EEC,0x1EED,0x0055},
  933.   {0x1EEE,0x1EEF,0x0055},  {0x1EEE,0x1EEF,0x0055},
  934.   {0x1EF0,0x1EF1,0x0055},  {0x1EF0,0x1EF1,0x0055},
  935.   {0x1EF2,0x1EF3,0x0059},  {0x1EF2,0x1EF3,0x0059},
  936.   {0x1EF4,0x1EF5,0x0059},  {0x1EF4,0x1EF5,0x0059},
  937.   {0x1EF6,0x1EF7,0x0059},  {0x1EF6,0x1EF7,0x0059},
  938.   {0x1EF8,0x1EF9,0x0059},  {0x1EF8,0x1EF9,0x0059},
  939.   {0x1EFA,0x1EFA,0x1EFA},  {0x1EFB,0x1EFB,0x1EFB},
  940.   {0x1EFC,0x1EFC,0x1EFC},  {0x1EFD,0x1EFD,0x1EFD},
  941.   {0x1EFE,0x1EFE,0x1EFE},  {0x1EFF,0x1EFF,0x1EFF}
  942. };
  943. static MY_UNICASE_INFO plane1F[]={
  944.   {0x1F08,0x1F00,0x0391},  {0x1F09,0x1F01,0x0391},
  945.   {0x1F0A,0x1F02,0x0391},  {0x1F0B,0x1F03,0x0391},
  946.   {0x1F0C,0x1F04,0x0391},  {0x1F0D,0x1F05,0x0391},
  947.   {0x1F0E,0x1F06,0x0391},  {0x1F0F,0x1F07,0x0391},
  948.   {0x1F08,0x1F00,0x0391},  {0x1F09,0x1F01,0x0391},
  949.   {0x1F0A,0x1F02,0x0391},  {0x1F0B,0x1F03,0x0391},
  950.   {0x1F0C,0x1F04,0x0391},  {0x1F0D,0x1F05,0x0391},
  951.   {0x1F0E,0x1F06,0x0391},  {0x1F0F,0x1F07,0x0391},
  952.   {0x1F18,0x1F10,0x0395},  {0x1F19,0x1F11,0x0395},
  953.   {0x1F1A,0x1F12,0x0395},  {0x1F1B,0x1F13,0x0395},
  954.   {0x1F1C,0x1F14,0x0395},  {0x1F1D,0x1F15,0x0395},
  955.   {0x1F16,0x1F16,0x1F16},  {0x1F17,0x1F17,0x1F17},
  956.   {0x1F18,0x1F10,0x0395},  {0x1F19,0x1F11,0x0395},
  957.   {0x1F1A,0x1F12,0x0395},  {0x1F1B,0x1F13,0x0395},
  958.   {0x1F1C,0x1F14,0x0395},  {0x1F1D,0x1F15,0x0395},
  959.   {0x1F1E,0x1F1E,0x1F1E},  {0x1F1F,0x1F1F,0x1F1F},
  960.   {0x1F28,0x1F20,0x0397},  {0x1F29,0x1F21,0x0397},
  961.   {0x1F2A,0x1F22,0x0397},  {0x1F2B,0x1F23,0x0397},
  962.   {0x1F2C,0x1F24,0x0397},  {0x1F2D,0x1F25,0x0397},
  963.   {0x1F2E,0x1F26,0x0397},  {0x1F2F,0x1F27,0x0397},
  964.   {0x1F28,0x1F20,0x0397},  {0x1F29,0x1F21,0x0397},
  965.   {0x1F2A,0x1F22,0x0397},  {0x1F2B,0x1F23,0x0397},
  966.   {0x1F2C,0x1F24,0x0397},  {0x1F2D,0x1F25,0x0397},
  967.   {0x1F2E,0x1F26,0x0397},  {0x1F2F,0x1F27,0x0397},
  968.   {0x1F38,0x1F30,0x0399},  {0x1F39,0x1F31,0x0399},
  969.   {0x1F3A,0x1F32,0x0399},  {0x1F3B,0x1F33,0x0399},
  970.   {0x1F3C,0x1F34,0x0399},  {0x1F3D,0x1F35,0x0399},
  971.   {0x1F3E,0x1F36,0x0399},  {0x1F3F,0x1F37,0x0399},
  972.   {0x1F38,0x1F30,0x0399},  {0x1F39,0x1F31,0x0399},
  973.   {0x1F3A,0x1F32,0x0399},  {0x1F3B,0x1F33,0x0399},
  974.   {0x1F3C,0x1F34,0x0399},  {0x1F3D,0x1F35,0x0399},
  975.   {0x1F3E,0x1F36,0x0399},  {0x1F3F,0x1F37,0x0399},
  976.   {0x1F48,0x1F40,0x039F},  {0x1F49,0x1F41,0x039F},
  977.   {0x1F4A,0x1F42,0x039F},  {0x1F4B,0x1F43,0x039F},
  978.   {0x1F4C,0x1F44,0x039F},  {0x1F4D,0x1F45,0x039F},
  979.   {0x1F46,0x1F46,0x1F46},  {0x1F47,0x1F47,0x1F47},
  980.   {0x1F48,0x1F40,0x039F},  {0x1F49,0x1F41,0x039F},
  981.   {0x1F4A,0x1F42,0x039F},  {0x1F4B,0x1F43,0x039F},
  982.   {0x1F4C,0x1F44,0x039F},  {0x1F4D,0x1F45,0x039F},
  983.   {0x1F4E,0x1F4E,0x1F4E},  {0x1F4F,0x1F4F,0x1F4F},
  984.   {0x1F50,0x1F50,0x03A5},  {0x1F59,0x1F51,0x03A5},
  985.   {0x1F52,0x1F52,0x03A5},  {0x1F5B,0x1F53,0x03A5},
  986.   {0x1F54,0x1F54,0x03A5},  {0x1F5D,0x1F55,0x03A5},
  987.   {0x1F56,0x1F56,0x03A5},  {0x1F5F,0x1F57,0x03A5},
  988.   {0x1F58,0x1F58,0x1F58},  {0x1F59,0x1F51,0x03A5},
  989.   {0x1F5A,0x1F5A,0x1F5A},  {0x1F5B,0x1F53,0x03A5},
  990.   {0x1F5C,0x1F5C,0x1F5C},  {0x1F5D,0x1F55,0x03A5},
  991.   {0x1F5E,0x1F5E,0x1F5E},  {0x1F5F,0x1F57,0x03A5},
  992.   {0x1F68,0x1F60,0x03A9},  {0x1F69,0x1F61,0x03A9},
  993.   {0x1F6A,0x1F62,0x03A9},  {0x1F6B,0x1F63,0x03A9},
  994.   {0x1F6C,0x1F64,0x03A9},  {0x1F6D,0x1F65,0x03A9},
  995.   {0x1F6E,0x1F66,0x03A9},  {0x1F6F,0x1F67,0x03A9},
  996.   {0x1F68,0x1F60,0x03A9},  {0x1F69,0x1F61,0x03A9},
  997.   {0x1F6A,0x1F62,0x03A9},  {0x1F6B,0x1F63,0x03A9},
  998.   {0x1F6C,0x1F64,0x03A9},  {0x1F6D,0x1F65,0x03A9},
  999.   {0x1F6E,0x1F66,0x03A9},  {0x1F6F,0x1F67,0x03A9},
  1000.   {0x1FBA,0x1F70,0x0391},  {0x1FBB,0x1F71,0x1FBB},
  1001.   {0x1FC8,0x1F72,0x0395},  {0x1FC9,0x1F73,0x1FC9},
  1002.   {0x1FCA,0x1F74,0x0397},  {0x1FCB,0x1F75,0x1FCB},
  1003.   {0x1FDA,0x1F76,0x0399},  {0x1FDB,0x1F77,0x1FDB},
  1004.   {0x1FF8,0x1F78,0x039F},  {0x1FF9,0x1F79,0x1FF9},
  1005.   {0x1FEA,0x1F7A,0x03A5},  {0x1FEB,0x1F7B,0x1FEB},
  1006.   {0x1FFA,0x1F7C,0x03A9},  {0x1FFB,0x1F7D,0x1FFB},
  1007.   {0x1F7E,0x1F7E,0x1F7E},  {0x1F7F,0x1F7F,0x1F7F},
  1008.   {0x1F88,0x1F80,0x0391},  {0x1F89,0x1F81,0x0391},
  1009.   {0x1F8A,0x1F82,0x0391},  {0x1F8B,0x1F83,0x0391},
  1010.   {0x1F8C,0x1F84,0x0391},  {0x1F8D,0x1F85,0x0391},
  1011.   {0x1F8E,0x1F86,0x0391},  {0x1F8F,0x1F87,0x0391},
  1012.   {0x1F88,0x1F80,0x0391},  {0x1F89,0x1F81,0x0391},
  1013.   {0x1F8A,0x1F82,0x0391},  {0x1F8B,0x1F83,0x0391},
  1014.   {0x1F8C,0x1F84,0x0391},  {0x1F8D,0x1F85,0x0391},
  1015.   {0x1F8E,0x1F86,0x0391},  {0x1F8F,0x1F87,0x0391},
  1016.   {0x1F98,0x1F90,0x0397},  {0x1F99,0x1F91,0x0397},
  1017.   {0x1F9A,0x1F92,0x0397},  {0x1F9B,0x1F93,0x0397},
  1018.   {0x1F9C,0x1F94,0x0397},  {0x1F9D,0x1F95,0x0397},
  1019.   {0x1F9E,0x1F96,0x0397},  {0x1F9F,0x1F97,0x0397},
  1020.   {0x1F98,0x1F90,0x0397},  {0x1F99,0x1F91,0x0397},
  1021.   {0x1F9A,0x1F92,0x0397},  {0x1F9B,0x1F93,0x0397},
  1022.   {0x1F9C,0x1F94,0x0397},  {0x1F9D,0x1F95,0x0397},
  1023.   {0x1F9E,0x1F96,0x0397},  {0x1F9F,0x1F97,0x0397},
  1024.   {0x1FA8,0x1FA0,0x03A9},  {0x1FA9,0x1FA1,0x03A9},
  1025.   {0x1FAA,0x1FA2,0x03A9},  {0x1FAB,0x1FA3,0x03A9},
  1026.   {0x1FAC,0x1FA4,0x03A9},  {0x1FAD,0x1FA5,0x03A9},
  1027.   {0x1FAE,0x1FA6,0x03A9},  {0x1FAF,0x1FA7,0x03A9},
  1028.   {0x1FA8,0x1FA0,0x03A9},  {0x1FA9,0x1FA1,0x03A9},
  1029.   {0x1FAA,0x1FA2,0x03A9},  {0x1FAB,0x1FA3,0x03A9},
  1030.   {0x1FAC,0x1FA4,0x03A9},  {0x1FAD,0x1FA5,0x03A9},
  1031.   {0x1FAE,0x1FA6,0x03A9},  {0x1FAF,0x1FA7,0x03A9},
  1032.   {0x1FB8,0x1FB0,0x0391},  {0x1FB9,0x1FB1,0x0391},
  1033.   {0x1FB2,0x1FB2,0x0391},  {0x1FBC,0x1FB3,0x0391},
  1034.   {0x1FB4,0x1FB4,0x0391},  {0x1FB5,0x1FB5,0x1FB5},
  1035.   {0x1FB6,0x1FB6,0x0391},  {0x1FB7,0x1FB7,0x0391},
  1036.   {0x1FB8,0x1FB0,0x0391},  {0x1FB9,0x1FB1,0x0391},
  1037.   {0x1FBA,0x1F70,0x0391},  {0x1FBB,0x1F71,0x1FBB},
  1038.   {0x1FBC,0x1FB3,0x0391},  {0x1FBD,0x1FBD,0x1FBD},
  1039.   {0x0399,0x1FBE,0x0399},  {0x1FBF,0x1FBF,0x1FBF},
  1040.   {0x1FC0,0x1FC0,0x1FC0},  {0x1FC1,0x1FC1,0x1FC1},
  1041.   {0x1FC2,0x1FC2,0x0397},  {0x1FCC,0x1FC3,0x0397},
  1042.   {0x1FC4,0x1FC4,0x0397},  {0x1FC5,0x1FC5,0x1FC5},
  1043.   {0x1FC6,0x1FC6,0x0397},  {0x1FC7,0x1FC7,0x0397},
  1044.   {0x1FC8,0x1F72,0x0395},  {0x1FC9,0x1F73,0x1FC9},
  1045.   {0x1FCA,0x1F74,0x0397},  {0x1FCB,0x1F75,0x1FCB},
  1046.   {0x1FCC,0x1FC3,0x0397},  {0x1FCD,0x1FCD,0x1FCD},
  1047.   {0x1FCE,0x1FCE,0x1FCE},  {0x1FCF,0x1FCF,0x1FCF},
  1048.   {0x1FD8,0x1FD0,0x0399},  {0x1FD9,0x1FD1,0x0399},
  1049.   {0x1FD2,0x1FD2,0x0399},  {0x1FD3,0x1FD3,0x1FD3},
  1050.   {0x1FD4,0x1FD4,0x1FD4},  {0x1FD5,0x1FD5,0x1FD5},
  1051.   {0x1FD6,0x1FD6,0x0399},  {0x1FD7,0x1FD7,0x0399},
  1052.   {0x1FD8,0x1FD0,0x0399},  {0x1FD9,0x1FD1,0x0399},
  1053.   {0x1FDA,0x1F76,0x0399},  {0x1FDB,0x1F77,0x1FDB},
  1054.   {0x1FDC,0x1FDC,0x1FDC},  {0x1FDD,0x1FDD,0x1FDD},
  1055.   {0x1FDE,0x1FDE,0x1FDE},  {0x1FDF,0x1FDF,0x1FDF},
  1056.   {0x1FE8,0x1FE0,0x03A5},  {0x1FE9,0x1FE1,0x03A5},
  1057.   {0x1FE2,0x1FE2,0x03A5},  {0x1FE3,0x1FE3,0x1FE3},
  1058.   {0x1FE4,0x1FE4,0x03A1},  {0x1FEC,0x1FE5,0x03A1},
  1059.   {0x1FE6,0x1FE6,0x03A5},  {0x1FE7,0x1FE7,0x03A5},
  1060.   {0x1FE8,0x1FE0,0x03A5},  {0x1FE9,0x1FE1,0x03A5},
  1061.   {0x1FEA,0x1F7A,0x03A5},  {0x1FEB,0x1F7B,0x1FEB},
  1062.   {0x1FEC,0x1FE5,0x03A1},  {0x1FED,0x1FED,0x1FED},
  1063.   {0x1FEE,0x1FEE,0x1FEE},  {0x1FEF,0x1FEF,0x1FEF},
  1064.   {0x1FF0,0x1FF0,0x1FF0},  {0x1FF1,0x1FF1,0x1FF1},
  1065.   {0x1FF2,0x1FF2,0x03A9},  {0x1FFC,0x1FF3,0x03A9},
  1066.   {0x1FF4,0x1FF4,0x03A9},  {0x1FF5,0x1FF5,0x1FF5},
  1067.   {0x1FF6,0x1FF6,0x03A9},  {0x1FF7,0x1FF7,0x03A9},
  1068.   {0x1FF8,0x1F78,0x039F},  {0x1FF9,0x1F79,0x1FF9},
  1069.   {0x1FFA,0x1F7C,0x03A9},  {0x1FFB,0x1F7D,0x1FFB},
  1070.   {0x1FFC,0x1FF3,0x03A9},  {0x1FFD,0x1FFD,0x1FFD},
  1071.   {0x1FFE,0x1FFE,0x1FFE},  {0x1FFF,0x1FFF,0x1FFF}
  1072. };
  1073. static MY_UNICASE_INFO plane21[]={
  1074.   {0x2100,0x2100,0x2100},  {0x2101,0x2101,0x2101},
  1075.   {0x2102,0x2102,0x2102},  {0x2103,0x2103,0x2103},
  1076.   {0x2104,0x2104,0x2104},  {0x2105,0x2105,0x2105},
  1077.   {0x2106,0x2106,0x2106},  {0x2107,0x2107,0x2107},
  1078.   {0x2108,0x2108,0x2108},  {0x2109,0x2109,0x2109},
  1079.   {0x210A,0x210A,0x210A},  {0x210B,0x210B,0x210B},
  1080.   {0x210C,0x210C,0x210C},  {0x210D,0x210D,0x210D},
  1081.   {0x210E,0x210E,0x210E},  {0x210F,0x210F,0x210F},
  1082.   {0x2110,0x2110,0x2110},  {0x2111,0x2111,0x2111},
  1083.   {0x2112,0x2112,0x2112},  {0x2113,0x2113,0x2113},
  1084.   {0x2114,0x2114,0x2114},  {0x2115,0x2115,0x2115},
  1085.   {0x2116,0x2116,0x2116},  {0x2117,0x2117,0x2117},
  1086.   {0x2118,0x2118,0x2118},  {0x2119,0x2119,0x2119},
  1087.   {0x211A,0x211A,0x211A},  {0x211B,0x211B,0x211B},
  1088.   {0x211C,0x211C,0x211C},  {0x211D,0x211D,0x211D},
  1089.   {0x211E,0x211E,0x211E},  {0x211F,0x211F,0x211F},
  1090.   {0x2120,0x2120,0x2120},  {0x2121,0x2121,0x2121},
  1091.   {0x2122,0x2122,0x2122},  {0x2123,0x2123,0x2123},
  1092.   {0x2124,0x2124,0x2124},  {0x2125,0x2125,0x2125},
  1093.   {0x2126,0x03C9,0x2126},  {0x2127,0x2127,0x2127},
  1094.   {0x2128,0x2128,0x2128},  {0x2129,0x2129,0x2129},
  1095.   {0x212A,0x006B,0x212A},  {0x212B,0x00E5,0x212B},
  1096.   {0x212C,0x212C,0x212C},  {0x212D,0x212D,0x212D},
  1097.   {0x212E,0x212E,0x212E},  {0x212F,0x212F,0x212F},
  1098.   {0x2130,0x2130,0x2130},  {0x2131,0x2131,0x2131},
  1099.   {0x2132,0x2132,0x2132},  {0x2133,0x2133,0x2133},
  1100.   {0x2134,0x2134,0x2134},  {0x2135,0x2135,0x2135},
  1101.   {0x2136,0x2136,0x2136},  {0x2137,0x2137,0x2137},
  1102.   {0x2138,0x2138,0x2138},  {0x2139,0x2139,0x2139},
  1103.   {0x213A,0x213A,0x213A},  {0x213B,0x213B,0x213B},
  1104.   {0x213C,0x213C,0x213C},  {0x213D,0x213D,0x213D},
  1105.   {0x213E,0x213E,0x213E},  {0x213F,0x213F,0x213F},
  1106.   {0x2140,0x2140,0x2140},  {0x2141,0x2141,0x2141},
  1107.   {0x2142,0x2142,0x2142},  {0x2143,0x2143,0x2143},
  1108.   {0x2144,0x2144,0x2144},  {0x2145,0x2145,0x2145},
  1109.   {0x2146,0x2146,0x2146},  {0x2147,0x2147,0x2147},
  1110.   {0x2148,0x2148,0x2148},  {0x2149,0x2149,0x2149},
  1111.   {0x214A,0x214A,0x214A},  {0x214B,0x214B,0x214B},
  1112.   {0x214C,0x214C,0x214C},  {0x214D,0x214D,0x214D},
  1113.   {0x214E,0x214E,0x214E},  {0x214F,0x214F,0x214F},
  1114.   {0x2150,0x2150,0x2150},  {0x2151,0x2151,0x2151},
  1115.   {0x2152,0x2152,0x2152},  {0x2153,0x2153,0x2153},
  1116.   {0x2154,0x2154,0x2154},  {0x2155,0x2155,0x2155},
  1117.   {0x2156,0x2156,0x2156},  {0x2157,0x2157,0x2157},
  1118.   {0x2158,0x2158,0x2158},  {0x2159,0x2159,0x2159},
  1119.   {0x215A,0x215A,0x215A},  {0x215B,0x215B,0x215B},
  1120.   {0x215C,0x215C,0x215C},  {0x215D,0x215D,0x215D},
  1121.   {0x215E,0x215E,0x215E},  {0x215F,0x215F,0x215F},
  1122.   {0x2160,0x2170,0x2160},  {0x2161,0x2171,0x2161},
  1123.   {0x2162,0x2172,0x2162},  {0x2163,0x2173,0x2163},
  1124.   {0x2164,0x2174,0x2164},  {0x2165,0x2175,0x2165},
  1125.   {0x2166,0x2176,0x2166},  {0x2167,0x2177,0x2167},
  1126.   {0x2168,0x2178,0x2168},  {0x2169,0x2179,0x2169},
  1127.   {0x216A,0x217A,0x216A},  {0x216B,0x217B,0x216B},
  1128.   {0x216C,0x217C,0x216C},  {0x216D,0x217D,0x216D},
  1129.   {0x216E,0x217E,0x216E},  {0x216F,0x217F,0x216F},
  1130.   {0x2160,0x2170,0x2160},  {0x2161,0x2171,0x2161},
  1131.   {0x2162,0x2172,0x2162},  {0x2163,0x2173,0x2163},
  1132.   {0x2164,0x2174,0x2164},  {0x2165,0x2175,0x2165},
  1133.   {0x2166,0x2176,0x2166},  {0x2167,0x2177,0x2167},
  1134.   {0x2168,0x2178,0x2168},  {0x2169,0x2179,0x2169},
  1135.   {0x216A,0x217A,0x216A},  {0x216B,0x217B,0x216B},
  1136.   {0x216C,0x217C,0x216C},  {0x216D,0x217D,0x216D},
  1137.   {0x216E,0x217E,0x216E},  {0x216F,0x217F,0x216F},
  1138.   {0x2180,0x2180,0x2180},  {0x2181,0x2181,0x2181},
  1139.   {0x2182,0x2182,0x2182},  {0x2183,0x2183,0x2183},
  1140.   {0x2184,0x2184,0x2184},  {0x2185,0x2185,0x2185},
  1141.   {0x2186,0x2186,0x2186},  {0x2187,0x2187,0x2187},
  1142.   {0x2188,0x2188,0x2188},  {0x2189,0x2189,0x2189},
  1143.   {0x218A,0x218A,0x218A},  {0x218B,0x218B,0x218B},
  1144.   {0x218C,0x218C,0x218C},  {0x218D,0x218D,0x218D},
  1145.   {0x218E,0x218E,0x218E},  {0x218F,0x218F,0x218F},
  1146.   {0x2190,0x2190,0x2190},  {0x2191,0x2191,0x2191},
  1147.   {0x2192,0x2192,0x2192},  {0x2193,0x2193,0x2193},
  1148.   {0x2194,0x2194,0x2194},  {0x2195,0x2195,0x2195},
  1149.   {0x2196,0x2196,0x2196},  {0x2197,0x2197,0x2197},
  1150.   {0x2198,0x2198,0x2198},  {0x2199,0x2199,0x2199},
  1151.   {0x219A,0x219A,0x219A},  {0x219B,0x219B,0x219B},
  1152.   {0x219C,0x219C,0x219C},  {0x219D,0x219D,0x219D},
  1153.   {0x219E,0x219E,0x219E},  {0x219F,0x219F,0x219F},
  1154.   {0x21A0,0x21A0,0x21A0},  {0x21A1,0x21A1,0x21A1},
  1155.   {0x21A2,0x21A2,0x21A2},  {0x21A3,0x21A3,0x21A3},
  1156.   {0x21A4,0x21A4,0x21A4},  {0x21A5,0x21A5,0x21A5},
  1157.   {0x21A6,0x21A6,0x21A6},  {0x21A7,0x21A7,0x21A7},
  1158.   {0x21A8,0x21A8,0x21A8},  {0x21A9,0x21A9,0x21A9},
  1159.   {0x21AA,0x21AA,0x21AA},  {0x21AB,0x21AB,0x21AB},
  1160.   {0x21AC,0x21AC,0x21AC},  {0x21AD,0x21AD,0x21AD},
  1161.   {0x21AE,0x21AE,0x21AE},  {0x21AF,0x21AF,0x21AF},
  1162.   {0x21B0,0x21B0,0x21B0},  {0x21B1,0x21B1,0x21B1},
  1163.   {0x21B2,0x21B2,0x21B2},  {0x21B3,0x21B3,0x21B3},
  1164.   {0x21B4,0x21B4,0x21B4},  {0x21B5,0x21B5,0x21B5},
  1165.   {0x21B6,0x21B6,0x21B6},  {0x21B7,0x21B7,0x21B7},
  1166.   {0x21B8,0x21B8,0x21B8},  {0x21B9,0x21B9,0x21B9},
  1167.   {0x21BA,0x21BA,0x21BA},  {0x21BB,0x21BB,0x21BB},
  1168.   {0x21BC,0x21BC,0x21BC},  {0x21BD,0x21BD,0x21BD},
  1169.   {0x21BE,0x21BE,0x21BE},  {0x21BF,0x21BF,0x21BF},
  1170.   {0x21C0,0x21C0,0x21C0},  {0x21C1,0x21C1,0x21C1},
  1171.   {0x21C2,0x21C2,0x21C2},  {0x21C3,0x21C3,0x21C3},
  1172.   {0x21C4,0x21C4,0x21C4},  {0x21C5,0x21C5,0x21C5},
  1173.   {0x21C6,0x21C6,0x21C6},  {0x21C7,0x21C7,0x21C7},
  1174.   {0x21C8,0x21C8,0x21C8},  {0x21C9,0x21C9,0x21C9},
  1175.   {0x21CA,0x21CA,0x21CA},  {0x21CB,0x21CB,0x21CB},
  1176.   {0x21CC,0x21CC,0x21CC},  {0x21CD,0x21CD,0x21CD},
  1177.   {0x21CE,0x21CE,0x21CE},  {0x21CF,0x21CF,0x21CF},
  1178.   {0x21D0,0x21D0,0x21D0},  {0x21D1,0x21D1,0x21D1},
  1179.   {0x21D2,0x21D2,0x21D2},  {0x21D3,0x21D3,0x21D3},
  1180.   {0x21D4,0x21D4,0x21D4},  {0x21D5,0x21D5,0x21D5},
  1181.   {0x21D6,0x21D6,0x21D6},  {0x21D7,0x21D7,0x21D7},
  1182.   {0x21D8,0x21D8,0x21D8},  {0x21D9,0x21D9,0x21D9},
  1183.   {0x21DA,0x21DA,0x21DA},  {0x21DB,0x21DB,0x21DB},
  1184.   {0x21DC,0x21DC,0x21DC},  {0x21DD,0x21DD,0x21DD},
  1185.   {0x21DE,0x21DE,0x21DE},  {0x21DF,0x21DF,0x21DF},
  1186.   {0x21E0,0x21E0,0x21E0},  {0x21E1,0x21E1,0x21E1},
  1187.   {0x21E2,0x21E2,0x21E2},  {0x21E3,0x21E3,0x21E3},
  1188.   {0x21E4,0x21E4,0x21E4},  {0x21E5,0x21E5,0x21E5},
  1189.   {0x21E6,0x21E6,0x21E6},  {0x21E7,0x21E7,0x21E7},
  1190.   {0x21E8,0x21E8,0x21E8},  {0x21E9,0x21E9,0x21E9},
  1191.   {0x21EA,0x21EA,0x21EA},  {0x21EB,0x21EB,0x21EB},
  1192.   {0x21EC,0x21EC,0x21EC},  {0x21ED,0x21ED,0x21ED},
  1193.   {0x21EE,0x21EE,0x21EE},  {0x21EF,0x21EF,0x21EF},
  1194.   {0x21F0,0x21F0,0x21F0},  {0x21F1,0x21F1,0x21F1},
  1195.   {0x21F2,0x21F2,0x21F2},  {0x21F3,0x21F3,0x21F3},
  1196.   {0x21F4,0x21F4,0x21F4},  {0x21F5,0x21F5,0x21F5},
  1197.   {0x21F6,0x21F6,0x21F6},  {0x21F7,0x21F7,0x21F7},
  1198.   {0x21F8,0x21F8,0x21F8},  {0x21F9,0x21F9,0x21F9},
  1199.   {0x21FA,0x21FA,0x21FA},  {0x21FB,0x21FB,0x21FB},
  1200.   {0x21FC,0x21FC,0x21FC},  {0x21FD,0x21FD,0x21FD},
  1201.   {0x21FE,0x21FE,0x21FE},  {0x21FF,0x21FF,0x21FF}
  1202. };
  1203. static MY_UNICASE_INFO plane24[]={
  1204.   {0x2400,0x2400,0x2400},  {0x2401,0x2401,0x2401},
  1205.   {0x2402,0x2402,0x2402},  {0x2403,0x2403,0x2403},
  1206.   {0x2404,0x2404,0x2404},  {0x2405,0x2405,0x2405},
  1207.   {0x2406,0x2406,0x2406},  {0x2407,0x2407,0x2407},
  1208.   {0x2408,0x2408,0x2408},  {0x2409,0x2409,0x2409},
  1209.   {0x240A,0x240A,0x240A},  {0x240B,0x240B,0x240B},
  1210.   {0x240C,0x240C,0x240C},  {0x240D,0x240D,0x240D},
  1211.   {0x240E,0x240E,0x240E},  {0x240F,0x240F,0x240F},
  1212.   {0x2410,0x2410,0x2410},  {0x2411,0x2411,0x2411},
  1213.   {0x2412,0x2412,0x2412},  {0x2413,0x2413,0x2413},
  1214.   {0x2414,0x2414,0x2414},  {0x2415,0x2415,0x2415},
  1215.   {0x2416,0x2416,0x2416},  {0x2417,0x2417,0x2417},
  1216.   {0x2418,0x2418,0x2418},  {0x2419,0x2419,0x2419},
  1217.   {0x241A,0x241A,0x241A},  {0x241B,0x241B,0x241B},
  1218.   {0x241C,0x241C,0x241C},  {0x241D,0x241D,0x241D},
  1219.   {0x241E,0x241E,0x241E},  {0x241F,0x241F,0x241F},
  1220.   {0x2420,0x2420,0x2420},  {0x2421,0x2421,0x2421},
  1221.   {0x2422,0x2422,0x2422},  {0x2423,0x2423,0x2423},
  1222.   {0x2424,0x2424,0x2424},  {0x2425,0x2425,0x2425},
  1223.   {0x2426,0x2426,0x2426},  {0x2427,0x2427,0x2427},
  1224.   {0x2428,0x2428,0x2428},  {0x2429,0x2429,0x2429},
  1225.   {0x242A,0x242A,0x242A},  {0x242B,0x242B,0x242B},
  1226.   {0x242C,0x242C,0x242C},  {0x242D,0x242D,0x242D},
  1227.   {0x242E,0x242E,0x242E},  {0x242F,0x242F,0x242F},
  1228.   {0x2430,0x2430,0x2430},  {0x2431,0x2431,0x2431},
  1229.   {0x2432,0x2432,0x2432},  {0x2433,0x2433,0x2433},
  1230.   {0x2434,0x2434,0x2434},  {0x2435,0x2435,0x2435},
  1231.   {0x2436,0x2436,0x2436},  {0x2437,0x2437,0x2437},
  1232.   {0x2438,0x2438,0x2438},  {0x2439,0x2439,0x2439},
  1233.   {0x243A,0x243A,0x243A},  {0x243B,0x243B,0x243B},
  1234.   {0x243C,0x243C,0x243C},  {0x243D,0x243D,0x243D},
  1235.   {0x243E,0x243E,0x243E},  {0x243F,0x243F,0x243F},
  1236.   {0x2440,0x2440,0x2440},  {0x2441,0x2441,0x2441},
  1237.   {0x2442,0x2442,0x2442},  {0x2443,0x2443,0x2443},
  1238.   {0x2444,0x2444,0x2444},  {0x2445,0x2445,0x2445},
  1239.   {0x2446,0x2446,0x2446},  {0x2447,0x2447,0x2447},
  1240.   {0x2448,0x2448,0x2448},  {0x2449,0x2449,0x2449},
  1241.   {0x244A,0x244A,0x244A},  {0x244B,0x244B,0x244B},
  1242.   {0x244C,0x244C,0x244C},  {0x244D,0x244D,0x244D},
  1243.   {0x244E,0x244E,0x244E},  {0x244F,0x244F,0x244F},
  1244.   {0x2450,0x2450,0x2450},  {0x2451,0x2451,0x2451},
  1245.   {0x2452,0x2452,0x2452},  {0x2453,0x2453,0x2453},
  1246.   {0x2454,0x2454,0x2454},  {0x2455,0x2455,0x2455},
  1247.   {0x2456,0x2456,0x2456},  {0x2457,0x2457,0x2457},
  1248.   {0x2458,0x2458,0x2458},  {0x2459,0x2459,0x2459},
  1249.   {0x245A,0x245A,0x245A},  {0x245B,0x245B,0x245B},
  1250.   {0x245C,0x245C,0x245C},  {0x245D,0x245D,0x245D},
  1251.   {0x245E,0x245E,0x245E},  {0x245F,0x245F,0x245F},
  1252.   {0x2460,0x2460,0x2460},  {0x2461,0x2461,0x2461},
  1253.   {0x2462,0x2462,0x2462},  {0x2463,0x2463,0x2463},
  1254.   {0x2464,0x2464,0x2464},  {0x2465,0x2465,0x2465},
  1255.   {0x2466,0x2466,0x2466},  {0x2467,0x2467,0x2467},
  1256.   {0x2468,0x2468,0x2468},  {0x2469,0x2469,0x2469},
  1257.   {0x246A,0x246A,0x246A},  {0x246B,0x246B,0x246B},
  1258.   {0x246C,0x246C,0x246C},  {0x246D,0x246D,0x246D},
  1259.   {0x246E,0x246E,0x246E},  {0x246F,0x246F,0x246F},
  1260.   {0x2470,0x2470,0x2470},  {0x2471,0x2471,0x2471},
  1261.   {0x2472,0x2472,0x2472},  {0x2473,0x2473,0x2473},
  1262.   {0x2474,0x2474,0x2474},  {0x2475,0x2475,0x2475},
  1263.   {0x2476,0x2476,0x2476},  {0x2477,0x2477,0x2477},
  1264.   {0x2478,0x2478,0x2478},  {0x2479,0x2479,0x2479},
  1265.   {0x247A,0x247A,0x247A},  {0x247B,0x247B,0x247B},
  1266.   {0x247C,0x247C,0x247C},  {0x247D,0x247D,0x247D},
  1267.   {0x247E,0x247E,0x247E},  {0x247F,0x247F,0x247F},
  1268.   {0x2480,0x2480,0x2480},  {0x2481,0x2481,0x2481},
  1269.   {0x2482,0x2482,0x2482},  {0x2483,0x2483,0x2483},
  1270.   {0x2484,0x2484,0x2484},  {0x2485,0x2485,0x2485},
  1271.   {0x2486,0x2486,0x2486},  {0x2487,0x2487,0x2487},
  1272.   {0x2488,0x2488,0x2488},  {0x2489,0x2489,0x2489},
  1273.   {0x248A,0x248A,0x248A},  {0x248B,0x248B,0x248B},
  1274.   {0x248C,0x248C,0x248C},  {0x248D,0x248D,0x248D},
  1275.   {0x248E,0x248E,0x248E},  {0x248F,0x248F,0x248F},
  1276.   {0x2490,0x2490,0x2490},  {0x2491,0x2491,0x2491},
  1277.   {0x2492,0x2492,0x2492},  {0x2493,0x2493,0x2493},
  1278.   {0x2494,0x2494,0x2494},  {0x2495,0x2495,0x2495},
  1279.   {0x2496,0x2496,0x2496},  {0x2497,0x2497,0x2497},
  1280.   {0x2498,0x2498,0x2498},  {0x2499,0x2499,0x2499},
  1281.   {0x249A,0x249A,0x249A},  {0x249B,0x249B,0x249B},
  1282.   {0x249C,0x249C,0x249C},  {0x249D,0x249D,0x249D},
  1283.   {0x249E,0x249E,0x249E},  {0x249F,0x249F,0x249F},
  1284.   {0x24A0,0x24A0,0x24A0},  {0x24A1,0x24A1,0x24A1},
  1285.   {0x24A2,0x24A2,0x24A2},  {0x24A3,0x24A3,0x24A3},
  1286.   {0x24A4,0x24A4,0x24A4},  {0x24A5,0x24A5,0x24A5},
  1287.   {0x24A6,0x24A6,0x24A6},  {0x24A7,0x24A7,0x24A7},
  1288.   {0x24A8,0x24A8,0x24A8},  {0x24A9,0x24A9,0x24A9},
  1289.   {0x24AA,0x24AA,0x24AA},  {0x24AB,0x24AB,0x24AB},
  1290.   {0x24AC,0x24AC,0x24AC},  {0x24AD,0x24AD,0x24AD},
  1291.   {0x24AE,0x24AE,0x24AE},  {0x24AF,0x24AF,0x24AF},
  1292.   {0x24B0,0x24B0,0x24B0},  {0x24B1,0x24B1,0x24B1},
  1293.   {0x24B2,0x24B2,0x24B2},  {0x24B3,0x24B3,0x24B3},
  1294.   {0x24B4,0x24B4,0x24B4},  {0x24B5,0x24B5,0x24B5},
  1295.   {0x24B6,0x24D0,0x24B6},  {0x24B7,0x24D1,0x24B7},
  1296.   {0x24B8,0x24D2,0x24B8},  {0x24B9,0x24D3,0x24B9},
  1297.   {0x24BA,0x24D4,0x24BA},  {0x24BB,0x24D5,0x24BB},
  1298.   {0x24BC,0x24D6,0x24BC},  {0x24BD,0x24D7,0x24BD},
  1299.   {0x24BE,0x24D8,0x24BE},  {0x24BF,0x24D9,0x24BF},
  1300.   {0x24C0,0x24DA,0x24C0},  {0x24C1,0x24DB,0x24C1},
  1301.   {0x24C2,0x24DC,0x24C2},  {0x24C3,0x24DD,0x24C3},
  1302.   {0x24C4,0x24DE,0x24C4},  {0x24C5,0x24DF,0x24C5},
  1303.   {0x24C6,0x24E0,0x24C6},  {0x24C7,0x24E1,0x24C7},
  1304.   {0x24C8,0x24E2,0x24C8},  {0x24C9,0x24E3,0x24C9},
  1305.   {0x24CA,0x24E4,0x24CA},  {0x24CB,0x24E5,0x24CB},
  1306.   {0x24CC,0x24E6,0x24CC},  {0x24CD,0x24E7,0x24CD},
  1307.   {0x24CE,0x24E8,0x24CE},  {0x24CF,0x24E9,0x24CF},
  1308.   {0x24B6,0x24D0,0x24B6},  {0x24B7,0x24D1,0x24B7},
  1309.   {0x24B8,0x24D2,0x24B8},  {0x24B9,0x24D3,0x24B9},
  1310.   {0x24BA,0x24D4,0x24BA},  {0x24BB,0x24D5,0x24BB},
  1311.   {0x24BC,0x24D6,0x24BC},  {0x24BD,0x24D7,0x24BD},
  1312.   {0x24BE,0x24D8,0x24BE},  {0x24BF,0x24D9,0x24BF},
  1313.   {0x24C0,0x24DA,0x24C0},  {0x24C1,0x24DB,0x24C1},
  1314.   {0x24C2,0x24DC,0x24C2},  {0x24C3,0x24DD,0x24C3},
  1315.   {0x24C4,0x24DE,0x24C4},  {0x24C5,0x24DF,0x24C5},
  1316.   {0x24C6,0x24E0,0x24C6},  {0x24C7,0x24E1,0x24C7},
  1317.   {0x24C8,0x24E2,0x24C8},  {0x24C9,0x24E3,0x24C9},
  1318.   {0x24CA,0x24E4,0x24CA},  {0x24CB,0x24E5,0x24CB},
  1319.   {0x24CC,0x24E6,0x24CC},  {0x24CD,0x24E7,0x24CD},
  1320.   {0x24CE,0x24E8,0x24CE},  {0x24CF,0x24E9,0x24CF},
  1321.   {0x24EA,0x24EA,0x24EA},  {0x24EB,0x24EB,0x24EB},
  1322.   {0x24EC,0x24EC,0x24EC},  {0x24ED,0x24ED,0x24ED},
  1323.   {0x24EE,0x24EE,0x24EE},  {0x24EF,0x24EF,0x24EF},
  1324.   {0x24F0,0x24F0,0x24F0},  {0x24F1,0x24F1,0x24F1},
  1325.   {0x24F2,0x24F2,0x24F2},  {0x24F3,0x24F3,0x24F3},
  1326.   {0x24F4,0x24F4,0x24F4},  {0x24F5,0x24F5,0x24F5},
  1327.   {0x24F6,0x24F6,0x24F6},  {0x24F7,0x24F7,0x24F7},
  1328.   {0x24F8,0x24F8,0x24F8},  {0x24F9,0x24F9,0x24F9},
  1329.   {0x24FA,0x24FA,0x24FA},  {0x24FB,0x24FB,0x24FB},
  1330.   {0x24FC,0x24FC,0x24FC},  {0x24FD,0x24FD,0x24FD},
  1331.   {0x24FE,0x24FE,0x24FE},  {0x24FF,0x24FF,0x24FF}
  1332. };
  1333. static MY_UNICASE_INFO planeFF[]={
  1334.   {0xFF00,0xFF00,0xFF00},  {0xFF01,0xFF01,0xFF01},
  1335.   {0xFF02,0xFF02,0xFF02},  {0xFF03,0xFF03,0xFF03},
  1336.   {0xFF04,0xFF04,0xFF04},  {0xFF05,0xFF05,0xFF05},
  1337.   {0xFF06,0xFF06,0xFF06},  {0xFF07,0xFF07,0xFF07},
  1338.   {0xFF08,0xFF08,0xFF08},  {0xFF09,0xFF09,0xFF09},
  1339.   {0xFF0A,0xFF0A,0xFF0A},  {0xFF0B,0xFF0B,0xFF0B},
  1340.   {0xFF0C,0xFF0C,0xFF0C},  {0xFF0D,0xFF0D,0xFF0D},
  1341.   {0xFF0E,0xFF0E,0xFF0E},  {0xFF0F,0xFF0F,0xFF0F},
  1342.   {0xFF10,0xFF10,0xFF10},  {0xFF11,0xFF11,0xFF11},
  1343.   {0xFF12,0xFF12,0xFF12},  {0xFF13,0xFF13,0xFF13},
  1344.   {0xFF14,0xFF14,0xFF14},  {0xFF15,0xFF15,0xFF15},
  1345.   {0xFF16,0xFF16,0xFF16},  {0xFF17,0xFF17,0xFF17},
  1346.   {0xFF18,0xFF18,0xFF18},  {0xFF19,0xFF19,0xFF19},
  1347.   {0xFF1A,0xFF1A,0xFF1A},  {0xFF1B,0xFF1B,0xFF1B},
  1348.   {0xFF1C,0xFF1C,0xFF1C},  {0xFF1D,0xFF1D,0xFF1D},
  1349.   {0xFF1E,0xFF1E,0xFF1E},  {0xFF1F,0xFF1F,0xFF1F},
  1350.   {0xFF20,0xFF20,0xFF20},  {0xFF21,0xFF41,0xFF21},
  1351.   {0xFF22,0xFF42,0xFF22},  {0xFF23,0xFF43,0xFF23},
  1352.   {0xFF24,0xFF44,0xFF24},  {0xFF25,0xFF45,0xFF25},
  1353.   {0xFF26,0xFF46,0xFF26},  {0xFF27,0xFF47,0xFF27},
  1354.   {0xFF28,0xFF48,0xFF28},  {0xFF29,0xFF49,0xFF29},
  1355.   {0xFF2A,0xFF4A,0xFF2A},  {0xFF2B,0xFF4B,0xFF2B},
  1356.   {0xFF2C,0xFF4C,0xFF2C},  {0xFF2D,0xFF4D,0xFF2D},
  1357.   {0xFF2E,0xFF4E,0xFF2E},  {0xFF2F,0xFF4F,0xFF2F},
  1358.   {0xFF30,0xFF50,0xFF30},  {0xFF31,0xFF51,0xFF31},
  1359.   {0xFF32,0xFF52,0xFF32},  {0xFF33,0xFF53,0xFF33},
  1360.   {0xFF34,0xFF54,0xFF34},  {0xFF35,0xFF55,0xFF35},
  1361.   {0xFF36,0xFF56,0xFF36},  {0xFF37,0xFF57,0xFF37},
  1362.   {0xFF38,0xFF58,0xFF38},  {0xFF39,0xFF59,0xFF39},
  1363.   {0xFF3A,0xFF5A,0xFF3A},  {0xFF3B,0xFF3B,0xFF3B},
  1364.   {0xFF3C,0xFF3C,0xFF3C},  {0xFF3D,0xFF3D,0xFF3D},
  1365.   {0xFF3E,0xFF3E,0xFF3E},  {0xFF3F,0xFF3F,0xFF3F},
  1366.   {0xFF40,0xFF40,0xFF40},  {0xFF21,0xFF41,0xFF21},
  1367.   {0xFF22,0xFF42,0xFF22},  {0xFF23,0xFF43,0xFF23},
  1368.   {0xFF24,0xFF44,0xFF24},  {0xFF25,0xFF45,0xFF25},
  1369.   {0xFF26,0xFF46,0xFF26},  {0xFF27,0xFF47,0xFF27},
  1370.   {0xFF28,0xFF48,0xFF28},  {0xFF29,0xFF49,0xFF29},
  1371.   {0xFF2A,0xFF4A,0xFF2A},  {0xFF2B,0xFF4B,0xFF2B},
  1372.   {0xFF2C,0xFF4C,0xFF2C},  {0xFF2D,0xFF4D,0xFF2D},
  1373.   {0xFF2E,0xFF4E,0xFF2E},  {0xFF2F,0xFF4F,0xFF2F},
  1374.   {0xFF30,0xFF50,0xFF30},  {0xFF31,0xFF51,0xFF31},
  1375.   {0xFF32,0xFF52,0xFF32},  {0xFF33,0xFF53,0xFF33},
  1376.   {0xFF34,0xFF54,0xFF34},  {0xFF35,0xFF55,0xFF35},
  1377.   {0xFF36,0xFF56,0xFF36},  {0xFF37,0xFF57,0xFF37},
  1378.   {0xFF38,0xFF58,0xFF38},  {0xFF39,0xFF59,0xFF39},
  1379.   {0xFF3A,0xFF5A,0xFF3A},  {0xFF5B,0xFF5B,0xFF5B},
  1380.   {0xFF5C,0xFF5C,0xFF5C},  {0xFF5D,0xFF5D,0xFF5D},
  1381.   {0xFF5E,0xFF5E,0xFF5E},  {0xFF5F,0xFF5F,0xFF5F},
  1382.   {0xFF60,0xFF60,0xFF60},  {0xFF61,0xFF61,0xFF61},
  1383.   {0xFF62,0xFF62,0xFF62},  {0xFF63,0xFF63,0xFF63},
  1384.   {0xFF64,0xFF64,0xFF64},  {0xFF65,0xFF65,0xFF65},
  1385.   {0xFF66,0xFF66,0xFF66},  {0xFF67,0xFF67,0xFF67},
  1386.   {0xFF68,0xFF68,0xFF68},  {0xFF69,0xFF69,0xFF69},
  1387.   {0xFF6A,0xFF6A,0xFF6A},  {0xFF6B,0xFF6B,0xFF6B},
  1388.   {0xFF6C,0xFF6C,0xFF6C},  {0xFF6D,0xFF6D,0xFF6D},
  1389.   {0xFF6E,0xFF6E,0xFF6E},  {0xFF6F,0xFF6F,0xFF6F},
  1390.   {0xFF70,0xFF70,0xFF70},  {0xFF71,0xFF71,0xFF71},
  1391.   {0xFF72,0xFF72,0xFF72},  {0xFF73,0xFF73,0xFF73},
  1392.   {0xFF74,0xFF74,0xFF74},  {0xFF75,0xFF75,0xFF75},
  1393.   {0xFF76,0xFF76,0xFF76},  {0xFF77,0xFF77,0xFF77},
  1394.   {0xFF78,0xFF78,0xFF78},  {0xFF79,0xFF79,0xFF79},
  1395.   {0xFF7A,0xFF7A,0xFF7A},  {0xFF7B,0xFF7B,0xFF7B},
  1396.   {0xFF7C,0xFF7C,0xFF7C},  {0xFF7D,0xFF7D,0xFF7D},
  1397.   {0xFF7E,0xFF7E,0xFF7E},  {0xFF7F,0xFF7F,0xFF7F},
  1398.   {0xFF80,0xFF80,0xFF80},  {0xFF81,0xFF81,0xFF81},
  1399.   {0xFF82,0xFF82,0xFF82},  {0xFF83,0xFF83,0xFF83},
  1400.   {0xFF84,0xFF84,0xFF84},  {0xFF85,0xFF85,0xFF85},
  1401.   {0xFF86,0xFF86,0xFF86},  {0xFF87,0xFF87,0xFF87},
  1402.   {0xFF88,0xFF88,0xFF88},  {0xFF89,0xFF89,0xFF89},
  1403.   {0xFF8A,0xFF8A,0xFF8A},  {0xFF8B,0xFF8B,0xFF8B},
  1404.   {0xFF8C,0xFF8C,0xFF8C},  {0xFF8D,0xFF8D,0xFF8D},
  1405.   {0xFF8E,0xFF8E,0xFF8E},  {0xFF8F,0xFF8F,0xFF8F},
  1406.   {0xFF90,0xFF90,0xFF90},  {0xFF91,0xFF91,0xFF91},
  1407.   {0xFF92,0xFF92,0xFF92},  {0xFF93,0xFF93,0xFF93},
  1408.   {0xFF94,0xFF94,0xFF94},  {0xFF95,0xFF95,0xFF95},
  1409.   {0xFF96,0xFF96,0xFF96},  {0xFF97,0xFF97,0xFF97},
  1410.   {0xFF98,0xFF98,0xFF98},  {0xFF99,0xFF99,0xFF99},
  1411.   {0xFF9A,0xFF9A,0xFF9A},  {0xFF9B,0xFF9B,0xFF9B},
  1412.   {0xFF9C,0xFF9C,0xFF9C},  {0xFF9D,0xFF9D,0xFF9D},
  1413.   {0xFF9E,0xFF9E,0xFF9E},  {0xFF9F,0xFF9F,0xFF9F},
  1414.   {0xFFA0,0xFFA0,0xFFA0},  {0xFFA1,0xFFA1,0xFFA1},
  1415.   {0xFFA2,0xFFA2,0xFFA2},  {0xFFA3,0xFFA3,0xFFA3},
  1416.   {0xFFA4,0xFFA4,0xFFA4},  {0xFFA5,0xFFA5,0xFFA5},
  1417.   {0xFFA6,0xFFA6,0xFFA6},  {0xFFA7,0xFFA7,0xFFA7},
  1418.   {0xFFA8,0xFFA8,0xFFA8},  {0xFFA9,0xFFA9,0xFFA9},
  1419.   {0xFFAA,0xFFAA,0xFFAA},  {0xFFAB,0xFFAB,0xFFAB},
  1420.   {0xFFAC,0xFFAC,0xFFAC},  {0xFFAD,0xFFAD,0xFFAD},
  1421.   {0xFFAE,0xFFAE,0xFFAE},  {0xFFAF,0xFFAF,0xFFAF},
  1422.   {0xFFB0,0xFFB0,0xFFB0},  {0xFFB1,0xFFB1,0xFFB1},
  1423.   {0xFFB2,0xFFB2,0xFFB2},  {0xFFB3,0xFFB3,0xFFB3},
  1424.   {0xFFB4,0xFFB4,0xFFB4},  {0xFFB5,0xFFB5,0xFFB5},
  1425.   {0xFFB6,0xFFB6,0xFFB6},  {0xFFB7,0xFFB7,0xFFB7},
  1426.   {0xFFB8,0xFFB8,0xFFB8},  {0xFFB9,0xFFB9,0xFFB9},
  1427.   {0xFFBA,0xFFBA,0xFFBA},  {0xFFBB,0xFFBB,0xFFBB},
  1428.   {0xFFBC,0xFFBC,0xFFBC},  {0xFFBD,0xFFBD,0xFFBD},
  1429.   {0xFFBE,0xFFBE,0xFFBE},  {0xFFBF,0xFFBF,0xFFBF},
  1430.   {0xFFC0,0xFFC0,0xFFC0},  {0xFFC1,0xFFC1,0xFFC1},
  1431.   {0xFFC2,0xFFC2,0xFFC2},  {0xFFC3,0xFFC3,0xFFC3},
  1432.   {0xFFC4,0xFFC4,0xFFC4},  {0xFFC5,0xFFC5,0xFFC5},
  1433.   {0xFFC6,0xFFC6,0xFFC6},  {0xFFC7,0xFFC7,0xFFC7},
  1434.   {0xFFC8,0xFFC8,0xFFC8},  {0xFFC9,0xFFC9,0xFFC9},
  1435.   {0xFFCA,0xFFCA,0xFFCA},  {0xFFCB,0xFFCB,0xFFCB},
  1436.   {0xFFCC,0xFFCC,0xFFCC},  {0xFFCD,0xFFCD,0xFFCD},
  1437.   {0xFFCE,0xFFCE,0xFFCE},  {0xFFCF,0xFFCF,0xFFCF},
  1438.   {0xFFD0,0xFFD0,0xFFD0},  {0xFFD1,0xFFD1,0xFFD1},
  1439.   {0xFFD2,0xFFD2,0xFFD2},  {0xFFD3,0xFFD3,0xFFD3},
  1440.   {0xFFD4,0xFFD4,0xFFD4},  {0xFFD5,0xFFD5,0xFFD5},
  1441.   {0xFFD6,0xFFD6,0xFFD6},  {0xFFD7,0xFFD7,0xFFD7},
  1442.   {0xFFD8,0xFFD8,0xFFD8},  {0xFFD9,0xFFD9,0xFFD9},
  1443.   {0xFFDA,0xFFDA,0xFFDA},  {0xFFDB,0xFFDB,0xFFDB},
  1444.   {0xFFDC,0xFFDC,0xFFDC},  {0xFFDD,0xFFDD,0xFFDD},
  1445.   {0xFFDE,0xFFDE,0xFFDE},  {0xFFDF,0xFFDF,0xFFDF},
  1446.   {0xFFE0,0xFFE0,0xFFE0},  {0xFFE1,0xFFE1,0xFFE1},
  1447.   {0xFFE2,0xFFE2,0xFFE2},  {0xFFE3,0xFFE3,0xFFE3},
  1448.   {0xFFE4,0xFFE4,0xFFE4},  {0xFFE5,0xFFE5,0xFFE5},
  1449.   {0xFFE6,0xFFE6,0xFFE6},  {0xFFE7,0xFFE7,0xFFE7},
  1450.   {0xFFE8,0xFFE8,0xFFE8},  {0xFFE9,0xFFE9,0xFFE9},
  1451.   {0xFFEA,0xFFEA,0xFFEA},  {0xFFEB,0xFFEB,0xFFEB},
  1452.   {0xFFEC,0xFFEC,0xFFEC},  {0xFFED,0xFFED,0xFFED},
  1453.   {0xFFEE,0xFFEE,0xFFEE},  {0xFFEF,0xFFEF,0xFFEF},
  1454.   {0xFFF0,0xFFF0,0xFFF0},  {0xFFF1,0xFFF1,0xFFF1},
  1455.   {0xFFF2,0xFFF2,0xFFF2},  {0xFFF3,0xFFF3,0xFFF3},
  1456.   {0xFFF4,0xFFF4,0xFFF4},  {0xFFF5,0xFFF5,0xFFF5},
  1457.   {0xFFF6,0xFFF6,0xFFF6},  {0xFFF7,0xFFF7,0xFFF7},
  1458.   {0xFFF8,0xFFF8,0xFFF8},  {0xFFF9,0xFFF9,0xFFF9},
  1459.   {0xFFFA,0xFFFA,0xFFFA},  {0xFFFB,0xFFFB,0xFFFB},
  1460.   {0xFFFC,0xFFFC,0xFFFC},  {0xFFFD,0xFFFD,0xFFFD},
  1461.   {0xFFFE,0xFFFE,0xFFFE},  {0xFFFF,0xFFFF,0xFFFF}
  1462. };
  1463. MY_UNICASE_INFO *uni_plane[256]={
  1464.  plane00, plane01, plane02, plane03, plane04, plane05,    NULL,    NULL,
  1465.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1466.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1467.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL, plane1E, plane1F,
  1468.     NULL, plane21,    NULL,    NULL, plane24,    NULL,    NULL,    NULL,
  1469.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1470.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1471.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1472.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1473.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1474.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1475.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1476.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1477.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1478.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1479.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1480.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1481.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1482.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1483.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1484.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1485.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1486.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1487.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1488.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1489.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1490.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1491.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1492.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1493.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1494.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,
  1495.     NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL, planeFF
  1496. };
  1497. /*
  1498. ** Compare string against string with wildcard
  1499. ** This function is used in UTF8 and UCS2
  1500. **
  1501. ** 0 if matched
  1502. ** -1 if not matched with wildcard
  1503. **  1 if matched with wildcard
  1504. */
  1505. int my_wildcmp_unicode(CHARSET_INFO *cs,
  1506.        const char *str,const char *str_end,
  1507.        const char *wildstr,const char *wildend,
  1508.        int escape, int w_one, int w_many,
  1509.        MY_UNICASE_INFO **weights)
  1510. {
  1511.   int result= -1; /* Not found, using wildcards */
  1512.   my_wc_t s_wc, w_wc;
  1513.   int scan, plane;
  1514.   int (*mb_wc)(struct charset_info_st *cs, my_wc_t *wc,
  1515.                const unsigned char *s,const unsigned char *e);
  1516.   mb_wc= cs->cset->mb_wc;
  1517.   
  1518.   while (wildstr != wildend)
  1519.   {
  1520.     while (1)
  1521.     {
  1522.       my_bool escaped= 0;
  1523.       if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr,
  1524.                        (const uchar*)wildend)) <= 0)
  1525.         return 1;
  1526.       if (w_wc == (my_wc_t)w_many)
  1527.       {
  1528.         result= 1; /* Found an anchor char */
  1529.         break;
  1530.       }
  1531.       wildstr+= scan;
  1532.       if (w_wc ==  (my_wc_t)escape && wildstr < wildend)
  1533.       {
  1534.         if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr,
  1535.                          (const uchar*)wildend)) <= 0)
  1536.           return 1;
  1537.         wildstr+= scan;
  1538.         escaped= 1;
  1539.       }
  1540.       
  1541.       if ((scan= mb_wc(cs, &s_wc, (const uchar*)str,
  1542.                        (const uchar*)str_end)) <= 0)
  1543.         return 1;
  1544.       str+= scan;
  1545.       
  1546.       if (!escaped && w_wc == (my_wc_t)w_one)
  1547.       {
  1548.         result= 1; /* Found an anchor char */
  1549.       }
  1550.       else
  1551.       {
  1552.         if (weights)
  1553.         {
  1554.           plane=(s_wc>>8) & 0xFF;
  1555.           s_wc = weights[plane] ? weights[plane][s_wc & 0xFF].sort : s_wc;
  1556.           plane=(w_wc>>8) & 0xFF;
  1557.           w_wc = weights[plane] ? weights[plane][w_wc & 0xFF].sort : w_wc;
  1558.         }
  1559.         if (s_wc != w_wc)
  1560.           return 1; /* No match */
  1561.       }
  1562.       if (wildstr == wildend)
  1563. return (str != str_end); /* Match if both are at end */
  1564.     }
  1565.     
  1566.     
  1567.     if (w_wc == (my_wc_t)w_many)
  1568.     { /* Found w_many */
  1569.     
  1570.       /* Remove any '%' and '_' from the wild search string */
  1571.       for ( ; wildstr != wildend ; )
  1572.       {
  1573.         if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr,
  1574.                          (const uchar*)wildend)) <= 0)
  1575.           return 1;
  1576.         
  1577. if (w_wc == (my_wc_t)w_many)
  1578. {
  1579.   wildstr+= scan;
  1580.   continue;
  1581. if (w_wc == (my_wc_t)w_one)
  1582. {
  1583.   wildstr+= scan;
  1584.           if ((scan= mb_wc(cs, &s_wc, (const uchar*)str,
  1585.                            (const uchar*)str_end)) <=0)
  1586.             return 1;
  1587.           str+= scan;
  1588.   continue;
  1589. }
  1590. break; /* Not a wild character */
  1591.       }
  1592.       
  1593.       if (wildstr == wildend)
  1594. return 0; /* Ok if w_many is last */
  1595.       
  1596.       if (str == str_end)
  1597. return -1;
  1598.       
  1599.       if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr,
  1600.                        (const uchar*)wildend)) <=0)
  1601.         return 1;
  1602.       wildstr+= scan;
  1603.       
  1604.       if (w_wc ==  (my_wc_t)escape)
  1605.       {
  1606.         if (wildstr < wildend)
  1607.         {
  1608.           if ((scan= mb_wc(cs, &w_wc, (const uchar*)wildstr,
  1609.                            (const uchar*)wildend)) <=0)
  1610.             return 1;
  1611.           wildstr+= scan;
  1612.         }
  1613.       }
  1614.       
  1615.       while (1)
  1616.       {
  1617.         /* Skip until the first character from wildstr is found */
  1618.         while (str != str_end)
  1619.         {
  1620.           if ((scan= mb_wc(cs, &s_wc, (const uchar*)str,
  1621.                            (const uchar*)str_end)) <=0)
  1622.             return 1;
  1623.           if (weights)
  1624.           {
  1625.             plane=(s_wc>>8) & 0xFF;
  1626.             s_wc = weights[plane] ? weights[plane][s_wc & 0xFF].sort : s_wc;
  1627.             plane=(w_wc>>8) & 0xFF;
  1628.             w_wc = weights[plane] ? weights[plane][w_wc & 0xFF].sort : w_wc;
  1629.           }
  1630.           
  1631.           if (s_wc == w_wc)
  1632.             break;
  1633.           str+= scan;
  1634.         }
  1635.         if (str == str_end)
  1636.           return -1;
  1637.         
  1638.         str+= scan;
  1639.         result= my_wildcmp_unicode(cs, str, str_end, wildstr, wildend,
  1640.                                    escape, w_one, w_many,
  1641.                                    weights);
  1642.         if (result <= 0)
  1643.           return result;
  1644.       } 
  1645.     }
  1646.   }
  1647.   return (str != str_end ? 1 : 0);
  1648. }
  1649. #endif
  1650. #ifdef HAVE_CHARSET_utf8
  1651. /*
  1652.   We consider bytes with code more than 127 as a letter.
  1653.   This garantees that word boundaries work fine with regular
  1654.   expressions. Note, there is no need to mark byte 255  as a
  1655.   letter, it is illegal byte in UTF8.
  1656. */
  1657. static uchar ctype_utf8[] = {
  1658.     0,
  1659.    32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32,
  1660.    32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
  1661.    72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  1662.   132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16,
  1663.    16,129,129,129,129,129,129,  1,  1,  1,  1,  1,  1,  1,  1,  1,
  1664.     1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 16, 16, 16, 16, 16,
  1665.    16,130,130,130,130,130,130,  2,  2,  2,  2,  2,  2,  2,  2,  2,
  1666.     2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 16, 16, 16, 16, 32,
  1667.     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
  1668.     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
  1669.     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
  1670.     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
  1671.     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
  1672.     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
  1673.     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
  1674.     3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  0
  1675. };
  1676. /* The below are taken from usa7 implementation */
  1677. static uchar to_lower_utf8[] = {
  1678.     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
  1679.    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
  1680.    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
  1681.    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
  1682.    64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
  1683.   112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95,
  1684.    96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
  1685.   112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
  1686.   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
  1687.   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
  1688.   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
  1689.   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
  1690.   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
  1691.   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
  1692.   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
  1693.   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
  1694. };
  1695. static uchar to_upper_utf8[] = {
  1696.     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
  1697.    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
  1698.    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
  1699.    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
  1700.    64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
  1701.    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
  1702.    96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
  1703.    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127,
  1704.   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
  1705.   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
  1706.   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
  1707.   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
  1708.   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
  1709.   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
  1710.   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
  1711.   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
  1712. };
  1713. static inline int bincmp(const uchar *s, const uchar *se,
  1714.                          const uchar *t, const uchar *te)
  1715. {
  1716.   int slen=se-s, tlen=te-t;
  1717.   int len=min(slen,tlen);
  1718.   int cmp= memcmp(s,t,len);
  1719.   return cmp ? cmp : slen-tlen;
  1720. }
  1721. static int my_utf8_uni(CHARSET_INFO *cs __attribute__((unused)),
  1722.                        my_wc_t * pwc, const uchar *s, const uchar *e)
  1723. {
  1724.   unsigned char c;
  1725.   if (s >= e)
  1726.     return MY_CS_TOOFEW(0);
  1727.   c= s[0];
  1728.   if (c < 0x80)
  1729.   {
  1730.     *pwc = c;
  1731.     return 1;
  1732.   }
  1733.   else if (c < 0xc2)
  1734.     return MY_CS_ILSEQ;
  1735.   else if (c < 0xe0)
  1736.   {
  1737.     if (s+2 > e) /* We need 2 characters */
  1738.       return MY_CS_TOOFEW(0);
  1739.     if (!((s[1] ^ 0x80) < 0x40))
  1740.       return MY_CS_ILSEQ;
  1741.     *pwc = ((my_wc_t) (c & 0x1f) << 6) | (my_wc_t) (s[1] ^ 0x80);
  1742.     return 2;
  1743.   }
  1744.   else if (c < 0xf0)
  1745.   {
  1746.     if (s+3 > e) /* We need 3 characters */
  1747.       return MY_CS_TOOFEW(0);
  1748.     if (!((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (c >= 0xe1 || s[1] >= 0xa0)))
  1749.       return MY_CS_ILSEQ;
  1750.     *pwc = ((my_wc_t) (c & 0x0f) << 12)   |
  1751.            ((my_wc_t) (s[1] ^ 0x80) << 6) |
  1752.             (my_wc_t) (s[2] ^ 0x80);
  1753.     return 3;
  1754.   }
  1755. #ifdef UNICODE_32BIT
  1756.   else if (c < 0xf8 && sizeof(my_wc_t)*8 >= 32)
  1757.   {
  1758.     if (s+4 > e) /* We need 4 characters */
  1759.       return MY_CS_TOOFEW(0);
  1760.     if (!((s[1] ^ 0x80) < 0x40 &&
  1761.           (s[2] ^ 0x80) < 0x40 &&
  1762.           (s[3] ^ 0x80) < 0x40 &&
  1763.           (c >= 0xf1 || s[1] >= 0x90)))
  1764.       return MY_CS_ILSEQ;
  1765.     *pwc = ((my_wc_t) (c & 0x07) << 18)    |
  1766.            ((my_wc_t) (s[1] ^ 0x80) << 12) |
  1767.            ((my_wc_t) (s[2] ^ 0x80) << 6)  |
  1768.             (my_wc_t) (s[3] ^ 0x80);
  1769.     return 4;
  1770.   }
  1771.    else if (c < 0xfc && sizeof(my_wc_t)*8 >= 32)
  1772.   {
  1773.     if (s+5 >e) /* We need 5 characters */
  1774.       return MY_CS_TOOFEW(0);
  1775.     if (!((s[1] ^ 0x80) < 0x40 &&
  1776.           (s[2] ^ 0x80) < 0x40 &&
  1777.           (s[3] ^ 0x80) < 0x40 &&
  1778.           (s[4] ^ 0x80) < 0x40 &&
  1779.           (c >= 0xf9 || s[1] >= 0x88)))
  1780.       return MY_CS_ILSEQ;
  1781.     *pwc = ((my_wc_t) (c & 0x03) << 24) |
  1782.            ((my_wc_t) (s[1] ^ 0x80) << 18) |
  1783.            ((my_wc_t) (s[2] ^ 0x80) << 12) |
  1784.            ((my_wc_t) (s[3] ^ 0x80) << 6) |
  1785.             (my_wc_t) (s[4] ^ 0x80);
  1786.     return 5;
  1787.   }
  1788.   else if (c < 0xfe && sizeof(my_wc_t)*8 >= 32)
  1789.   {
  1790.     if ( s+6 >e ) /* We need 6 characters */
  1791.       return MY_CS_TOOFEW(0);
  1792.     if (!((s[1] ^ 0x80) < 0x40   &&
  1793.           (s[2] ^ 0x80) < 0x40   &&
  1794.           (s[3] ^ 0x80) < 0x40   &&
  1795.           (s[4] ^ 0x80) < 0x40   &&
  1796.           (s[5] ^ 0x80) < 0x40   &&
  1797.           (c >= 0xfd || s[1] >= 0x84)))
  1798.       return MY_CS_ILSEQ;
  1799.     *pwc = ((my_wc_t) (c & 0x01) << 30)
  1800.       | ((my_wc_t) (s[1] ^ 0x80) << 24)
  1801.       | ((my_wc_t) (s[2] ^ 0x80) << 18)
  1802.       | ((my_wc_t) (s[3] ^ 0x80) << 12)
  1803.       | ((my_wc_t) (s[4] ^ 0x80) << 6)
  1804.       | (my_wc_t) (s[5] ^ 0x80);
  1805.     return 6;
  1806.   }
  1807. #endif
  1808.   return MY_CS_ILSEQ;
  1809. }
  1810. static int my_uni_utf8 (CHARSET_INFO *cs __attribute__((unused)) ,
  1811.                  my_wc_t wc, uchar *r, uchar *e)
  1812. {
  1813.   int count;
  1814.   if (r >= e)
  1815.     return MY_CS_TOOSMALL;
  1816.   if (wc < 0x80)
  1817.     count = 1;
  1818.   else if (wc < 0x800)
  1819.     count = 2;
  1820.   else if (wc < 0x10000)
  1821.     count = 3;
  1822. #ifdef UNICODE_32BIT
  1823.   else if (wc < 0x200000)
  1824.     count = 4;
  1825.   else if (wc < 0x4000000)
  1826.     count = 5;
  1827.   else if (wc <= 0x7fffffff)
  1828.     count = 6;
  1829. #endif
  1830.     else return MY_CS_ILUNI;
  1831.   /*
  1832.     e is a character after the string r, not the last character of it.
  1833.     Because of it (r+count > e), not (r+count-1 >e )
  1834.    */
  1835.   if ( r+count > e )
  1836.     return MY_CS_TOOSMALL;
  1837.   switch (count) {
  1838.     /* Fall through all cases!!! */
  1839. #ifdef UNICODE_32BIT
  1840.     case 6: r[5] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x4000000;
  1841.     case 5: r[4] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x200000;
  1842.     case 4: r[3] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x10000;
  1843. #endif
  1844.     case 3: r[2] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x800;
  1845.     case 2: r[1] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0xc0;
  1846.     case 1: r[0] = (uchar) wc;
  1847.   }
  1848.   return count;
  1849. }
  1850. static void my_caseup_utf8(CHARSET_INFO *cs, char *s, uint slen)
  1851. {
  1852.   my_wc_t wc;
  1853.   int res;
  1854.   char *e=s+slen;
  1855.   while ((s < e) && (res=my_utf8_uni(cs,&wc, (uchar *)s, (uchar*)e))>0 )
  1856.   {
  1857.     int plane = (wc>>8) & 0xFF;
  1858.     wc = uni_plane[plane] ? uni_plane[plane][wc & 0xFF].toupper : wc;
  1859.     if (res != my_uni_utf8(cs,wc,(uchar*)s,(uchar*)e))
  1860.       break;
  1861.     s+=res;
  1862.   }
  1863. }
  1864. static void my_hash_sort_utf8(CHARSET_INFO *cs, const uchar *s, uint slen, ulong *n1, ulong *n2)
  1865. {
  1866.   my_wc_t wc;
  1867.   int res;
  1868.   const uchar *e=s+slen;
  1869.   while ((s < e) && (res=my_utf8_uni(cs,&wc, (uchar *)s, (uchar*)e))>0 )
  1870.   {
  1871.     int plane = (wc>>8) & 0xFF;
  1872.     wc = uni_plane[plane] ? uni_plane[plane][wc & 0xFF].sort : wc;
  1873.     n1[0]^= (((n1[0] & 63)+n2[0])*(wc & 0xFF))+ (n1[0] << 8);
  1874.     n2[0]+=3;
  1875.     n1[0]^= (((n1[0] & 63)+n2[0])*(wc >> 8))+ (n1[0] << 8);
  1876.     n2[0]+=3;
  1877.     s+=res;
  1878.   }
  1879. }
  1880. static void my_caseup_str_utf8(CHARSET_INFO * cs, char * s)
  1881. {
  1882.   my_caseup_utf8(cs, s, strlen(s));
  1883. }
  1884. static void my_casedn_utf8(CHARSET_INFO *cs, char *s, uint slen)
  1885. {
  1886.   my_wc_t wc;
  1887.   int res;
  1888.   char *e=s+slen;
  1889.   while ((s < e) && (res=my_utf8_uni(cs, &wc, (uchar*)s, (uchar*)e))>0)
  1890.   {
  1891.     int plane = (wc>>8) & 0xFF;
  1892.     wc = uni_plane[plane] ? uni_plane[plane][wc & 0xFF].tolower : wc;
  1893.     if (res != my_uni_utf8(cs, wc, (uchar*)s, (uchar*)e))
  1894.     {
  1895.       break;
  1896.     }
  1897.     s+=res;
  1898.   }
  1899. }
  1900. static void my_casedn_str_utf8(CHARSET_INFO *cs, char * s)
  1901. {
  1902.   my_casedn_utf8(cs, s, strlen(s));
  1903. }
  1904. static int my_strnncoll_utf8(CHARSET_INFO *cs,
  1905.                              const uchar *s, uint slen,
  1906.                              const uchar *t, uint tlen,
  1907.                              my_bool t_is_prefix)
  1908. {
  1909.   int s_res,t_res;
  1910.   my_wc_t s_wc,t_wc;
  1911.   const uchar *se=s+slen;
  1912.   const uchar *te=t+tlen;
  1913.   while ( s < se && t < te )
  1914.   {
  1915.     int plane;
  1916.     s_res=my_utf8_uni(cs,&s_wc, s, se);
  1917.     t_res=my_utf8_uni(cs,&t_wc, t, te);
  1918.     if ( s_res <= 0 || t_res <= 0 )
  1919.     {
  1920.       /* Incorrect string, compare byte by byte value */
  1921.       return bincmp(s, se, t, te);
  1922.     }
  1923.     plane=(s_wc>>8) & 0xFF;
  1924.     s_wc = uni_plane[plane] ? uni_plane[plane][s_wc & 0xFF].sort : s_wc;
  1925.     plane=(t_wc>>8) & 0xFF;
  1926.     t_wc = uni_plane[plane] ? uni_plane[plane][t_wc & 0xFF].sort : t_wc;
  1927.     if ( s_wc != t_wc )
  1928.     {
  1929.       return  s_wc > t_wc ? 1 : -1;
  1930.     }
  1931.     s+=s_res;
  1932.     t+=t_res;
  1933.   }
  1934.   return t_is_prefix ? (int) (t-te) : (int) ((se-s) - (te-t));
  1935. }
  1936. /*
  1937.   Compare strings, discarding end space
  1938.   SYNOPSIS
  1939.     my_strnncollsp_utf8()
  1940.     cs                  character set handler
  1941.     a                   First string to compare
  1942.     a_length            Length of 'a'
  1943.     b                   Second string to compare
  1944.     b_length            Length of 'b'
  1945.   IMPLEMENTATION
  1946.     If one string is shorter as the other, then we space extend the other
  1947.     so that the strings have equal length.
  1948.     This will ensure that the following things hold:
  1949.     "a"  == "a "
  1950.     "a" < "a"
  1951.     "a" < "a "
  1952.   RETURN
  1953.     < 0  a <  b
  1954.     = 0  a == b
  1955.     > 0  a > b
  1956. */
  1957. static int my_strnncollsp_utf8(CHARSET_INFO *cs,
  1958.                              const uchar *s, uint slen,
  1959.                              const uchar *t, uint tlen)
  1960. {
  1961.   int s_res,t_res;
  1962.   my_wc_t s_wc,t_wc;
  1963.   const uchar *se= s+slen;
  1964.   const uchar *te= t+tlen;
  1965.   while ( s < se && t < te )
  1966.   {
  1967.     int plane;
  1968.     s_res=my_utf8_uni(cs,&s_wc, s, se);
  1969.     t_res=my_utf8_uni(cs,&t_wc, t, te);
  1970.     if ( s_res <= 0 || t_res <= 0 )
  1971.     {
  1972.       /* Incorrect string, compare byte by byte value */
  1973.       return bincmp(s, se, t, te);
  1974.     }
  1975.     plane=(s_wc>>8) & 0xFF;
  1976.     s_wc = uni_plane[plane] ? uni_plane[plane][s_wc & 0xFF].sort : s_wc;
  1977.     plane=(t_wc>>8) & 0xFF;
  1978.     t_wc = uni_plane[plane] ? uni_plane[plane][t_wc & 0xFF].sort : t_wc;
  1979.     if ( s_wc != t_wc )
  1980.     {
  1981.       return  s_wc > t_wc ? 1 : -1;
  1982.     }
  1983.     s+=s_res;
  1984.     t+=t_res;
  1985.   }
  1986.   slen= se-s;
  1987.   tlen= te-t;
  1988.   if (slen != tlen)
  1989.   {
  1990.     int swap= 1;
  1991.     if (slen < tlen)
  1992.     {
  1993.       slen= tlen;
  1994.       s= t;
  1995.       se= te;
  1996.       swap= -1;
  1997.     }
  1998.     /*
  1999.       This following loop uses the fact that in UTF-8
  2000.       all multibyte characters are greater than space,
  2001.       and all multibyte head characters are greater than
  2002.       space. It means if we meet a character greater
  2003.       than space, it always means that the longer string
  2004.       is greater. So we can reuse the same loop from the
  2005.       8bit version, without having to process full multibute
  2006.       sequences.
  2007.     */
  2008.     for ( ; s < se; s++)
  2009.     {
  2010.       if (*s != ' ')
  2011. return (*s < ' ') ? -swap : swap;
  2012.     }
  2013.   }
  2014.   return 0;
  2015. }
  2016. /*
  2017.   Compare 0-terminated UTF8 strings.
  2018.   SYNOPSIS
  2019.     my_strcasecmp_utf8()
  2020.     cs                  character set handler
  2021.     s                   First 0-terminated string to compare
  2022.     t                   Second 0-terminated string to compare
  2023.   IMPLEMENTATION
  2024.   RETURN
  2025.     - negative number if s < t
  2026.     - positive number if s > t
  2027.     - 0 is the strings are equal
  2028. */
  2029. static
  2030. int my_strcasecmp_utf8(CHARSET_INFO *cs, const char *s, const char *t)
  2031. {
  2032.   while (s[0] && t[0])
  2033.   {
  2034.     my_wc_t s_wc,t_wc;
  2035.     
  2036.     if ((uchar) s[0] < 128)
  2037.     {
  2038.       /* 
  2039.         s[0] is between 0 and 127.
  2040.         It represents a single byte character.
  2041.         Convert it into weight according to collation.
  2042.       */
  2043.       s_wc= plane00[(uchar) s[0]].tolower;
  2044.       s++;
  2045.     }
  2046.     else
  2047.     {
  2048.       int plane, res;
  2049.       
  2050.       /*
  2051.         Scan a multibyte character.
  2052.         In the future it is worth to write a special version of my_utf8_uni()
  2053.         for 0-terminated strings which will not take in account length. Now
  2054.         we call the regular version of my_utf8_uni() with s+3 in the
  2055.         last argument. s+3 is enough to scan any multibyte sequence.
  2056.         Calling the regular version of my_utf8_uni is safe for 0-terminated
  2057.         strings: we will never lose the end of the string:
  2058.         If we have 0 character in the middle of a multibyte sequence,
  2059.         then my_utf8_uni will always return a negative number, so the
  2060.         loop with finish.
  2061.       */
  2062.       
  2063.       res= my_utf8_uni(cs,&s_wc, (const uchar*)s, (const uchar*) s + 3);
  2064.       
  2065.       /* 
  2066.          In the case of wrong multibyte sequence we will
  2067.          call strcmp() for byte-to-byte comparison.
  2068.       */
  2069.       if (res <= 0)
  2070.         return strcmp(s, t);
  2071.       s+= res;
  2072.       
  2073.       /* Convert Unicode code into weight according to collation */
  2074.       plane=(s_wc>>8) & 0xFF;
  2075.       s_wc = uni_plane[plane] ? uni_plane[plane][s_wc & 0xFF].tolower : s_wc;
  2076.     }
  2077.     
  2078.     
  2079.     /* Do the same for the second string */
  2080.     
  2081.     if ((uchar) t[0] < 128)
  2082.     {
  2083.       /* Convert single byte character into weight */
  2084.       t_wc= plane00[(uchar) t[0]].tolower;
  2085.       t++;
  2086.     }
  2087.     else
  2088.     {
  2089.       int plane;
  2090.       int res=my_utf8_uni(cs,&t_wc, (const uchar*)t, (const uchar*) t + 3);
  2091.       if (res <= 0)
  2092.         return strcmp(s, t);
  2093.       t+= res;
  2094.       
  2095.       /* Convert code into weight */
  2096.       plane=(t_wc>>8) & 0xFF;
  2097.       t_wc = uni_plane[plane] ? uni_plane[plane][t_wc & 0xFF].tolower : t_wc;
  2098.     }
  2099.     
  2100.     /* Now we have two weights, let's compare them */
  2101.     if ( s_wc != t_wc )
  2102.       return  ((int) s_wc) - ((int) t_wc);
  2103.   }
  2104.   return ((int)(uchar)s[0]) - ((int) (uchar) t[0]);
  2105. }
  2106. static
  2107. int my_wildcmp_utf8(CHARSET_INFO *cs,
  2108.     const char *str,const char *str_end,
  2109.     const char *wildstr,const char *wildend,
  2110.     int escape, int w_one, int w_many)
  2111. {
  2112.   return my_wildcmp_unicode(cs,str,str_end,wildstr,wildend,
  2113.                             escape,w_one,w_many,uni_plane); 
  2114. }
  2115. static int my_strnxfrm_utf8(CHARSET_INFO *cs,
  2116.                             uchar *dst, uint dstlen,
  2117.                             const uchar *src, uint srclen)
  2118. {
  2119.   my_wc_t wc;
  2120.   int res;
  2121.   int plane;
  2122.   uchar *de = dst + dstlen;
  2123.   const uchar *se = src + srclen;
  2124.   while( src < se && dst < de )
  2125.   {
  2126.     if ((res=my_utf8_uni(cs,&wc, src, se))<0)
  2127.     {
  2128.       break;
  2129.     }
  2130.     src+=res;
  2131.     srclen-=res;
  2132.     plane=(wc>>8) & 0xFF;
  2133.     wc = uni_plane[plane] ? uni_plane[plane][wc & 0xFF].sort : wc;
  2134.     if ((res=my_uni_utf8(cs,wc,dst,de)) <0)
  2135.     {
  2136.       break;
  2137.     }
  2138.     dst+=res;
  2139.   }
  2140.   if (dst < de)
  2141.     bfill(dst, de - dst, ' ');
  2142.   return dstlen;
  2143. }
  2144. static int my_ismbchar_utf8(CHARSET_INFO *cs,const char *b, const char *e)
  2145. {
  2146.   my_wc_t wc;
  2147.   int  res=my_utf8_uni(cs,&wc, (const uchar*)b, (const uchar*)e);
  2148.   return (res>1) ? res : 0;
  2149. }
  2150. static int my_mbcharlen_utf8(CHARSET_INFO *cs  __attribute__((unused)) , uint c)
  2151. {
  2152.   if (c < 0x80)
  2153.     return 1;
  2154.   else if (c < 0xc2)
  2155.     return 0; /* Illegal mb head */
  2156.   else if (c < 0xe0)
  2157.     return 2;
  2158.   else if (c < 0xf0)
  2159.     return 3;
  2160. #ifdef UNICODE_32BIT
  2161.   else if (c < 0xf8)
  2162.     return 4;
  2163.   else if (c < 0xfc)
  2164.     return 5;
  2165.   else if (c < 0xfe)
  2166.     return 6;
  2167. #endif
  2168.   return 0; /* Illegal mb head */;
  2169. }
  2170. static MY_COLLATION_HANDLER my_collation_ci_handler =
  2171. {
  2172.     NULL,               /* init */
  2173.     my_strnncoll_utf8,
  2174.     my_strnncollsp_utf8,
  2175.     my_strnxfrm_utf8,
  2176.     my_like_range_mb,
  2177.     my_wildcmp_utf8,
  2178.     my_strcasecmp_utf8,
  2179.     my_instr_mb,
  2180.     my_hash_sort_utf8
  2181. };
  2182. MY_CHARSET_HANDLER my_charset_utf8_handler=
  2183. {
  2184.     NULL,               /* init */
  2185.     my_ismbchar_utf8,
  2186.     my_mbcharlen_utf8,
  2187.     my_numchars_mb,
  2188.     my_charpos_mb,
  2189.     my_well_formed_len_mb,
  2190.     my_lengthsp_8bit,
  2191.     my_numcells_mb,
  2192.     my_utf8_uni,
  2193.     my_uni_utf8,
  2194.     my_caseup_str_utf8,
  2195.     my_casedn_str_utf8,
  2196.     my_caseup_utf8,
  2197.     my_casedn_utf8,
  2198.     my_snprintf_8bit,
  2199.     my_long10_to_str_8bit,
  2200.     my_longlong10_to_str_8bit,
  2201.     my_fill_8bit,
  2202.     my_strntol_8bit,
  2203.     my_strntoul_8bit,
  2204.     my_strntoll_8bit,
  2205.     my_strntoull_8bit,
  2206.     my_strntod_8bit,
  2207.     my_strtoll10_8bit,
  2208.     my_scan_8bit
  2209. };
  2210. CHARSET_INFO my_charset_utf8_general_ci=
  2211. {
  2212.     33,0,0,             /* number       */
  2213.     MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE,  /* state  */
  2214.     "utf8",             /* cs name      */
  2215.     "utf8_general_ci",  /* name         */
  2216.     "",                 /* comment      */
  2217.     NULL,               /* tailoring    */
  2218.     ctype_utf8,         /* ctype        */
  2219.     to_lower_utf8,      /* to_lower     */
  2220.     to_upper_utf8,      /* to_upper     */
  2221.     to_upper_utf8,      /* sort_order   */
  2222.     NULL,               /* contractions */
  2223.     NULL,               /* sort_order_big*/
  2224.     NULL,               /* tab_to_uni   */
  2225.     NULL,               /* tab_from_uni */
  2226.     NULL,               /* state_map    */
  2227.     NULL,               /* ident_map    */
  2228.     1,                  /* strxfrm_multiply */
  2229.     1,                  /* mbminlen     */
  2230.     3,                  /* mbmaxlen     */
  2231.     0,                  /* min_sort_char */
  2232.     0xFFFF,             /* max_sort_char */
  2233.     0,                  /* escape_with_backslash_is_dangerous */
  2234.     &my_charset_utf8_handler,
  2235.     &my_collation_ci_handler
  2236. };
  2237. CHARSET_INFO my_charset_utf8_bin=
  2238. {
  2239.     83,0,0,             /* number       */
  2240.     MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_UNICODE, /* state  */
  2241.     "utf8",             /* cs name      */
  2242.     "utf8_bin",         /* name         */
  2243.     "",                 /* comment      */
  2244.     NULL,               /* tailoring    */
  2245.     ctype_utf8,         /* ctype        */
  2246.     to_lower_utf8,      /* to_lower     */
  2247.     to_upper_utf8,      /* to_upper     */
  2248.     NULL,               /* sort_order   */
  2249.     NULL,               /* contractions */
  2250.     NULL,               /* sort_order_big*/
  2251.     NULL,               /* tab_to_uni   */
  2252.     NULL,               /* tab_from_uni */
  2253.     NULL,               /* state_map    */
  2254.     NULL,               /* ident_map    */
  2255.     1,                  /* strxfrm_multiply */
  2256.     1,                  /* mbminlen     */
  2257.     3,                  /* mbmaxlen     */
  2258.     0,                  /* min_sort_char */
  2259.     255,                /* max_sort_char */
  2260.     0,                  /* escape_with_backslash_is_dangerous */
  2261.     &my_charset_utf8_handler,
  2262.     &my_collation_mb_bin_handler
  2263. };
  2264. #ifdef HAVE_UTF8_GENERAL_CS
  2265. /*
  2266.  * These functions bacically do the same as their original, except
  2267.  * that they return 0 only when two comparing unicode strings are
  2268.  * strictly the same in case-sensitive way.  See "save_diff" local
  2269.  * variable to what they actually do.
  2270.  */
  2271. static int my_strnncoll_utf8_cs(CHARSET_INFO *cs, 
  2272.                                 const uchar *s, uint slen,
  2273.                                 const uchar *t, uint tlen,
  2274.                                 my_bool t_is_prefix)
  2275. {
  2276.   int s_res,t_res;
  2277.   my_wc_t s_wc,t_wc;
  2278.   const uchar *se=s+slen;
  2279.   const uchar *te=t+tlen;
  2280.   int save_diff = 0;
  2281.   int diff;
  2282.   while ( s < se && t < te )
  2283.   {
  2284.     int plane;
  2285.     s_res=my_utf8_uni(cs,&s_wc, s, se);
  2286.     t_res=my_utf8_uni(cs,&t_wc, t, te);
  2287.     
  2288.     if ( s_res <= 0 || t_res <= 0 )
  2289.     {
  2290.       /* Incorrect string, compare by char value */
  2291.       return ((int)s[0]-(int)t[0]); 
  2292.     }
  2293.     
  2294.     if ( save_diff == 0 )
  2295.     {
  2296.       save_diff = ((int)s_wc) - ((int)t_wc);
  2297.     }
  2298.     plane=(s_wc>>8) & 0xFF;
  2299.     s_wc = uni_plane[plane] ? uni_plane[plane][s_wc & 0xFF].sort : s_wc;
  2300.     plane=(t_wc>>8) & 0xFF;
  2301.     t_wc = uni_plane[plane] ? uni_plane[plane][t_wc & 0xFF].sort : t_wc;
  2302.     if ( s_wc != t_wc )
  2303.     {
  2304.       return  ((int) s_wc) - ((int) t_wc);
  2305.     }
  2306.     
  2307.     s+=s_res;
  2308.     t+=t_res;
  2309.   }
  2310.   diff = ( (se-s) - (te-t) );
  2311.   return t_is_prefix ? t-te : ((diff == 0) ? save_diff : diff);
  2312. }
  2313. static int my_strnncollsp_utf8_cs(CHARSET_INFO *cs, 
  2314.                                   const uchar *s, uint slen,
  2315.                                   const uchar *t, uint tlen)
  2316. {
  2317.   int s_res,t_res;
  2318.   my_wc_t s_wc,t_wc;
  2319.   const uchar *se= s+slen;
  2320.   const uchar *te= t+tlen;
  2321.   int save_diff = 0;
  2322.   
  2323.   while ( s < se && t < te )
  2324.   {
  2325.     int plane;
  2326.     s_res=my_utf8_uni(cs,&s_wc, s, se);
  2327.     t_res=my_utf8_uni(cs,&t_wc, t, te);
  2328.     
  2329.     if ( s_res <= 0 || t_res <= 0 )
  2330.     {
  2331.       /* Incorrect string, compare by char value */
  2332.       return ((int)s[0]-(int)t[0]); 
  2333.     }
  2334.     
  2335.     if ( save_diff == 0 )
  2336.     {
  2337.       save_diff = ((int)s_wc) - ((int)t_wc);
  2338.     }
  2339.     plane=(s_wc>>8) & 0xFF;
  2340.     s_wc = uni_plane[plane] ? uni_plane[plane][s_wc & 0xFF].sort : s_wc;
  2341.     plane=(t_wc>>8) & 0xFF;
  2342.     t_wc = uni_plane[plane] ? uni_plane[plane][t_wc & 0xFF].sort : t_wc;
  2343.     if ( s_wc != t_wc )
  2344.     {
  2345.       return  ((int) s_wc) - ((int) t_wc);
  2346.     }
  2347.     
  2348.     s+=s_res;
  2349.     t+=t_res;
  2350.   }
  2351.   
  2352.   slen= se-s;
  2353.   tlen= te-t;
  2354.   
  2355.   if (slen != tlen)
  2356.   {
  2357.     int swap= 0;
  2358.     if (slen < tlen)
  2359.     {
  2360.       slen= tlen;
  2361.       s= t;
  2362.       se= te;
  2363.       swap= -1;
  2364.     }
  2365.     /*
  2366.       This following loop uses the fact that in UTF-8
  2367.       all multibyte characters are greater than space,
  2368.       and all multibyte head characters are greater than
  2369.       space. It means if we meet a character greater
  2370.       than space, it always means that the longer string
  2371.       is greater. So we can reuse the same loop from the
  2372.       8bit version, without having to process full multibute
  2373.       sequences.
  2374.     */
  2375.     for ( ; s < se; s++)
  2376.     {
  2377.       if (*s != ' ')
  2378.         return ((int)*s -  (int) ' ') ^ swap;
  2379.     }
  2380.   }
  2381.   return save_diff;
  2382. }
  2383. static MY_COLLATION_HANDLER my_collation_cs_handler =
  2384. {
  2385.     NULL, /* init */
  2386.     my_strnncoll_utf8_cs,
  2387.     my_strnncollsp_utf8_cs,
  2388.     my_strnxfrm_utf8,
  2389.     my_like_range_simple,
  2390.     my_wildcmp_mb,
  2391.     my_strcasecmp_utf8,
  2392.     my_instr_mb,
  2393.     my_hash_sort_utf8
  2394. };
  2395. CHARSET_INFO my_charset_utf8_general_cs=
  2396. {
  2397.     254,0,0, /* number       */
  2398.     MY_CS_COMPILED|MY_CS_UNICODE, /* state  */
  2399.     "utf8", /* cs name      */
  2400.     "utf8_general_cs", /* name         */
  2401.     "", /* comment      */
  2402.     NULL, /* tailoring    */
  2403.     ctype_utf8, /* ctype        */
  2404.     to_lower_utf8, /* to_lower     */
  2405.     to_upper_utf8, /* to_upper     */
  2406.     to_upper_utf8, /* sort_order   */
  2407.     NULL, /* contractions */
  2408.     NULL, /* sort_order_big*/
  2409.     NULL, /* tab_to_uni   */
  2410.     NULL, /* tab_from_uni */
  2411.     NULL, /* state_map    */
  2412.     NULL, /* ident_map    */
  2413.     1, /* strxfrm_multiply */
  2414.     1, /* mbminlen     */
  2415.     3, /* mbmaxlen     */
  2416.     0, /* min_sort_char */
  2417.     255, /* max_sort_char */
  2418.     0,                  /* escape_with_backslash_is_dangerous */
  2419.     &my_charset_utf8_handler,
  2420.     &my_collation_cs_handler
  2421. };
  2422. #endif /* Cybozu Hack */
  2423. #ifdef MY_TEST_UTF8
  2424. #include <stdio.h>
  2425. static void test_mb(CHARSET_INFO *cs, uchar *s)
  2426. {
  2427.   while(*s)
  2428.   {
  2429.     if(my_ismbhead_utf8(cs,*s))
  2430.     {
  2431.       int len=my_mbcharlen_utf8(cs,*s);
  2432.       while(len--)
  2433.       {
  2434.         printf("%c",*s);
  2435.         s++;
  2436.       }
  2437.       printf("n");
  2438.     }
  2439.     else
  2440.     {
  2441.       printf("%cn",*s);
  2442.       s++;
  2443.     }
  2444.   }
  2445. }
  2446. int main()
  2447. {
  2448.   char str[1024]=" utf8 test проба ПЕРА по-РУССКИ";
  2449.   CHARSET_INFO *cs;
  2450.   test_mb(cs,(uchar*)str);
  2451.   printf("orig      :'%s'n",str);
  2452.   my_caseup_utf8(cs,str,15);
  2453.   printf("caseup    :'%s'n",str);
  2454.   my_caseup_str_utf8(cs,str);
  2455.   printf("caseup_str:'%s'n",str);
  2456.   my_casedn_utf8(cs,str,15);
  2457.   printf("casedn    :'%s'n",str);
  2458.   my_casedn_str_utf8(cs,str);
  2459.   printf("casedn_str:'%s'n",str);
  2460.   return 0;
  2461. }
  2462. #endif
  2463. #endif /* HAVE_CHARSET_UTF8 */