From 52207c4223eb0c6e58e93907ff61b611b99f627e Mon Sep 17 00:00:00 2001 From: adam Date: Wed, 7 Nov 2012 22:31:42 +0700 Subject: [PATCH] #3 --- binding.gyp | 1 + tcejdb/Makefile.in | 5 + tcejdb/chacu.h | 45 ++ tcejdb/chartables.c | 1480 ++++++++++++++++++++++++++++++++++++++++++++++++++ tcejdb/chartables.h | 63 +++ tcejdb/configure | 5 +- tcejdb/configure.in | 5 +- tcejdb/stringutils.c | 192 +++++++ tcejdb/stringutils.h | 81 +++ tcejdb/translators.c | 312 +++++++++++ tcejdb/translators.h | 82 +++ 11 files changed, 2267 insertions(+), 4 deletions(-) create mode 100644 tcejdb/chacu.h create mode 100644 tcejdb/chartables.c create mode 100644 tcejdb/chartables.h create mode 100644 tcejdb/stringutils.c create mode 100644 tcejdb/stringutils.h create mode 100644 tcejdb/translators.c create mode 100644 tcejdb/translators.h diff --git a/binding.gyp b/binding.gyp index 25f658c..ace4298 100644 --- a/binding.gyp +++ b/binding.gyp @@ -19,6 +19,7 @@ '_LARGEFILE_SOURCE', '_FILE_OFFSET_BITS=64', '_GNU_SOURCE', + '_UNICODE', '_GLIBCXX_PERMIT_BACKWARD_HASH', ], }], diff --git a/tcejdb/Makefile.in b/tcejdb/Makefile.in index c5513bc..1c248d3 100644 --- a/tcejdb/Makefile.in +++ b/tcejdb/Makefile.in @@ -826,6 +826,11 @@ ejdb.o : myconf.h ejdb.h ejdb_private.h ejdbutl.h bson.o : myconf.h bson.h +chartables.o : chartables.h + +stringutils.o : chartables.h translators.h stringutils.h + +translators.o : chartables.h translators.h tokyocabinet_all.c : myconf.c tcutil.c md5.c tchdb.c tcbdb.c tcfdb.c tctdb.c tcadb.c cat myconf.c tcutil.c md5.c tchdb.c tcbdb.c tcfdb.c tctdb.c tcadb.c > $@ diff --git a/tcejdb/chacu.h b/tcejdb/chacu.h new file mode 100644 index 0000000..6892870 --- /dev/null +++ b/tcejdb/chacu.h @@ -0,0 +1,45 @@ +/*- + * Copyright (c) 2008 - 2010 CAS Dev Team + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the CAS Dev. Team nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * chacu.h + * + * $CAS$ + */ +#ifndef _CHACU_H__ +#define _CHACU_H__ 1 + +/* + @file chartables.h + @brief CHAracter Conversion/manipulation Utility +*/ + +#include "chartables.h" +#include "translators.h" +#include "stringutils.h" + +#endif /* _CHACU_H__ */ +/* End. */ diff --git a/tcejdb/chartables.c b/tcejdb/chartables.c new file mode 100644 index 0000000..43c6580 --- /dev/null +++ b/tcejdb/chartables.c @@ -0,0 +1,1480 @@ +/*- + * Copyright (c) 2008 - 2010 CAS Dev Team + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the CAS Dev. Team nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * chartables.c + * + * $CAS$ + */ + +#include "chartables.h" + +/* + @file chartables.c + @brief Character translation tables & accessors + + Unicode uppercase to lowercase conversion mapping table + http://publib.boulder.ibm.com/infocenter/systems/index.jsp?topic=/nls/rbagslowtoupmaptable.htm&tocNode=int_39939 + + Unicode lowercase to uppercase conversion mapping table + http://publib.boulder.ibm.com/infocenter/systems/index.jsp?topic=/nls/rbagslowtoupmaptable.htm&tocNode=int_39940 +*/ + +typedef struct UCSTransMap +{ + /** Source character */ + unsigned int sc; + /** Destination character */ + unsigned int dc; + /** Source character description */ + char * desc_sc; + /** Destination character description */ + char * desc_dc; +} UCSTransMap; + +/* Uppercase code point, Lowercase code point, Uppercase character description, Lowercase character description*/ +static UCSTransMap mUCSU2L[] = +{ + { 0x0041, 0x0061, "LATIN CAPITAL LETTER A", "LATIN SMALL LETTER A" }, + { 0x0042, 0x0062, "LATIN CAPITAL LETTER B", "LATIN SMALL LETTER B" }, + { 0x0043, 0x0063, "LATIN CAPITAL LETTER C", "LATIN SMALL LETTER C" }, + { 0x0044, 0x0064, "LATIN CAPITAL LETTER D", "LATIN SMALL LETTER D" }, + { 0x0045, 0x0065, "LATIN CAPITAL LETTER E", "LATIN SMALL LETTER E" }, + { 0x0046, 0x0066, "LATIN CAPITAL LETTER F", "LATIN SMALL LETTER F" }, + { 0x0047, 0x0067, "LATIN CAPITAL LETTER G", "LATIN SMALL LETTER G" }, + { 0x0048, 0x0068, "LATIN CAPITAL LETTER H", "LATIN SMALL LETTER H" }, + { 0x0049, 0x0069, "LATIN CAPITAL LETTER I", "LATIN SMALL LETTER I" }, + { 0x004A, 0x006A, "LATIN CAPITAL LETTER J", "LATIN SMALL LETTER J" }, + { 0x004B, 0x006B, "LATIN CAPITAL LETTER K", "LATIN SMALL LETTER K" }, + { 0x004C, 0x006C, "LATIN CAPITAL LETTER L", "LATIN SMALL LETTER L" }, + { 0x004D, 0x006D, "LATIN CAPITAL LETTER M", "LATIN SMALL LETTER M" }, + { 0x004E, 0x006E, "LATIN CAPITAL LETTER N", "LATIN SMALL LETTER N" }, + { 0x004F, 0x006F, "LATIN CAPITAL LETTER O", "LATIN SMALL LETTER O" }, + { 0x0050, 0x0070, "LATIN CAPITAL LETTER P", "LATIN SMALL LETTER P" }, + { 0x0051, 0x0071, "LATIN CAPITAL LETTER Q", "LATIN SMALL LETTER Q" }, + { 0x0052, 0x0072, "LATIN CAPITAL LETTER R", "LATIN SMALL LETTER R" }, + { 0x0053, 0x0073, "LATIN CAPITAL LETTER S", "LATIN SMALL LETTER S" }, + { 0x0054, 0x0074, "LATIN CAPITAL LETTER T", "LATIN SMALL LETTER T" }, + { 0x0055, 0x0075, "LATIN CAPITAL LETTER U", "LATIN SMALL LETTER U" }, + { 0x0056, 0x0076, "LATIN CAPITAL LETTER V", "LATIN SMALL LETTER V" }, + { 0x0057, 0x0077, "LATIN CAPITAL LETTER W", "LATIN SMALL LETTER W" }, + { 0x0058, 0x0078, "LATIN CAPITAL LETTER X", "LATIN SMALL LETTER X" }, + { 0x0059, 0x0079, "LATIN CAPITAL LETTER Y", "LATIN SMALL LETTER Y" }, + { 0x005A, 0x007A, "LATIN CAPITAL LETTER Z", "LATIN SMALL LETTER Z" }, + { 0x00C0, 0x00E0, "LATIN CAPITAL LETTER A GRAVE", "LATIN SMALL LETTER A GRAVE" }, + { 0x00C1, 0x00E1, "LATIN CAPITAL LETTER A ACUTE", "LATIN SMALL LETTER A GRAVE" }, + { 0x00C2, 0x00E2, "LATIN CAPITAL LETTER A CIRCUMFLEX", "LATIN SMALL LETTER A GRAVE" }, + { 0x00C3, 0x00E3, "LATIN CAPITAL LETTER A TILDE", "LATIN SMALL LETTER A GRAVE" }, + { 0x00C4, 0x00E4, "LATIN CAPITAL LETTER A DIAERESIS", "LATIN SMALL LETTER A GRAVE" }, + { 0x00C5, 0x00E5, "LATIN CAPITAL LETTER A RING", "LATIN SMALL LETTER A GRAVE" }, + { 0x00C6, 0x00E6, "LATIN CAPITAL LETTER A E", "LATIN SMALL LETTER A GRAVE" }, + { 0x00C7, 0x00E7, "LATIN CAPITAL LETTER C CEDILLA", "LATIN SMALL LETTER A GRAVE" }, + { 0x00C8, 0x00E8, "LATIN CAPITAL LETTER E GRAVE", "LATIN SMALL LETTER A GRAVE" }, + { 0x00C9, 0x00E9, "LATIN CAPITAL LETTER E ACUTE", "LATIN SMALL LETTER A GRAVE" }, + { 0x00CA, 0x00EA, "LATIN CAPITAL LETTER E CIRCUMFLEX", "LATIN SMALL LETTER E CIRCUMFLEX" }, + { 0x00CB, 0x00EB, "LATIN CAPITAL LETTER E DIAERESIS", "LATIN SMALL LETTER E DIAERESIS" }, + { 0x00CC, 0x00EC, "LATIN CAPITAL LETTER I GRAVE", "LATIN SMALL LETTER I GRAVE" }, + { 0x00CD, 0x00ED, "LATIN CAPITAL LETTER I ACUTE", "LATIN SMALL LETTER I ACUTE" }, + { 0x00CE, 0x00EE, "LATIN CAPITAL LETTER I CIRCUMFLEX", "LATIN SMALL LETTER I CIRCUMFLEX" }, + { 0x00CF, 0x00EF, "LATIN CAPITAL LETTER I DIAERESIS", "LATIN SMALL LETTER I DIAERESIS" }, + { 0x00D0, 0x00F0, "LATIN CAPITAL LETTER ETH", "LATIN SMALL LETTER ETH" }, + { 0x00D1, 0x00F1, "LATIN CAPITAL LETTER N TILDE", "LATIN SMALL LETTER N TILDE" }, + { 0x00D2, 0x00F2, "LATIN CAPITAL LETTER O GRAVE", "LATIN SMALL LETTER O GRAVE" }, + { 0x00D3, 0x00F3, "LATIN CAPITAL LETTER O ACUTE", "LATIN SMALL LETTER O ACUTE" }, + { 0x00D4, 0x00F4, "LATIN CAPITAL LETTER O CIRCUMFLEX", "LATIN SMALL LETTER O CIRCUMFLEX" }, + { 0x00D5, 0x00F5, "LATIN CAPITAL LETTER O TILDE", "LATIN SMALL LETTER O TILDE" }, + { 0x00D6, 0x00F6, "LATIN CAPITAL LETTER O DIAERESIS", "LATIN SMALL LETTER O DIAERESIS" }, + { 0x00D8, 0x00F8, "LATIN CAPITAL LETTER O SLASH", "LATIN SMALL LETTER O SLASH" }, + { 0x00D9, 0x00F9, "LATIN CAPITAL LETTER U GRAVE", "LATIN SMALL LETTER U GRAVE" }, + { 0x00DA, 0x00FA, "LATIN CAPITAL LETTER U ACUTE", "LATIN SMALL LETTER U ACUTE" }, + { 0x00DB, 0x00FB, "LATIN CAPITAL LETTER U CIRCUMFLEX", "LATIN SMALL LETTER U CIRCUMFLEX" }, + { 0x00DC, 0x00FC, "LATIN CAPITAL LETTER U DIAERESIS", "LATIN SMALL LETTER U DIAERESIS" }, + { 0x00DD, 0x00FD, "LATIN CAPITAL LETTER Y ACUTE", "LATIN SMALL LETTER Y ACUTE" }, + { 0x00DE, 0x00FE, "LATIN CAPITAL LETTER THORN", "LATIN SMALL LETTER THORN" }, + { 0x0100, 0x0101, "LATIN CAPITAL LETTER A WITH MACRON", "LATIN SMALL LETTER A WITH MACRON" }, + { 0x0102, 0x0103, "LATIN CAPITAL LETTER A WITH BREVE", "LATIN SMALL LETTER A WITH BREVE" }, + { 0x0104, 0x0105, "LATIN CAPITAL LETTER A WITH OGONEK", "LATIN SMALL LETTER A WITH OGONEK" }, + { 0x0106, 0x0107, "LATIN CAPITAL LETTER C WITH ACUTE", "LATIN SMALL LETTER C WITH ACUTE" }, + { 0x0108, 0x0109, "LATIN CAPITAL LETTER C WITH CIRCUMFLEX", "LATIN SMALL LETTER C WITH CIRCUMFLEX" }, + { 0x010A, 0x010B, "LATIN CAPITAL LETTER C WITH DOT ABOVE", "LATIN SMALL LETTER C WITH DOT ABOVE" }, + { 0x010C, 0x010D, "LATIN CAPITAL LETTER C WITH CARON", "LATIN SMALL LETTER C WITH CARON" }, + { 0x010E, 0x010F, "LATIN CAPITAL LETTER D WITH CARON", "LATIN SMALL LETTER D WITH CARON" }, + { 0x0110, 0x0111, "LATIN CAPITAL LETTER D WITH STROKE", "LATIN SMALL LETTER D WITH STROKE" }, + { 0x0112, 0x0113, "LATIN CAPITAL LETTER E WITH MACRON", "LATIN SMALL LETTER E WITH MACRON" }, + { 0x0114, 0x0115, "LATIN CAPITAL LETTER E WITH BREVE", "LATIN SMALL LETTER E WITH BREVE" }, + { 0x0116, 0x0117, "LATIN CAPITAL LETTER E WITH DOT ABOVE", "LATIN SMALL LETTER E WITH DOT ABOVE" }, + { 0x0118, 0x0119, "LATIN CAPITAL LETTER E WITH OGONEK", "LATIN SMALL LETTER E WITH OGONEK" }, + { 0x011A, 0x011B, "LATIN CAPITAL LETTER E WITH CARON", "LATIN SMALL LETTER E WITH CARON" }, + { 0x011C, 0x011D, "LATIN CAPITAL LETTER G WITH CIRCUMFLEX", "LATIN SMALL LETTER G WITH CIRCUMFLEX" }, + { 0x011E, 0x011F, "LATIN CAPITAL LETTER G WITH BREVE", "LATIN SMALL LETTER G WITH BREVE" }, + { 0x0120, 0x0121, "LATIN CAPITAL LETTER G WITH DOT ABOVE", "LATIN SMALL LETTER G WITH DOT ABOVE" }, + { 0x0122, 0x0123, "LATIN CAPITAL LETTER G WITH CEDILLA", "LATIN SMALL LETTER G WITH CEDILLA" }, + { 0x0124, 0x0125, "LATIN CAPITAL LETTER H WITH CIRCUMFLEX", "LATIN SMALL LETTER H WITH CIRCUMFLEX" }, + { 0x0126, 0x0127, "LATIN CAPITAL LETTER H WITH STROKE", "LATIN SMALL LETTER H WITH STROKE" }, + { 0x0128, 0x0129, "LATIN CAPITAL LETTER I WITH TILDE", "LATIN SMALL LETTER I WITH TILDE" }, + { 0x012A, 0x012B, "LATIN CAPITAL LETTER I WITH MACRON", "LATIN SMALL LETTER I WITH MACRON" }, + { 0x012C, 0x012D, "LATIN CAPITAL LETTER I WITH BREVE", "LATIN SMALL LETTER I WITH BREVE" }, + { 0x012E, 0x012F, "LATIN CAPITAL LETTER I WITH OGONEK", "LATIN SMALL LETTER I WITH OGONEK" }, + { 0x0130, 0x0069, "LATIN CAPITAL LETTER I WITH DOT ABOVE", "LATIN SMALL LETTER I" }, + { 0x0132, 0x0133, "LATIN CAPITAL LIGATURE IJ", "LATIN SMALL LIGATURE IJ" }, + { 0x0134, 0x0135, "LATIN CAPITAL LETTER J WITH CIRCUMFLEX", "LATIN SMALL LETTER J WITH CIRCUMFLEX" }, + { 0x0136, 0x0137, "LATIN CAPITAL LETTER K WITH CEDILLA", "LATIN SMALL LETTER K WITH CEDILLA" }, + { 0x0139, 0x013A, "LATIN CAPITAL LETTER L WITH ACUTE", "LATIN SMALL LETTER L WITH ACUTE" }, + { 0x013B, 0x013C, "LATIN CAPITAL LETTER L WITH CEDILLA", "LATIN SMALL LETTER L WITH CEDILLA" }, + { 0x013D, 0x013E, "LATIN CAPITAL LETTER L WITH CARON", "LATIN SMALL LETTER L WITH CARON" }, + { 0x013F, 0x0140, "LATIN CAPITAL LETTER L WITH MIDDLE DOT", "LATIN SMALL LETTER L WITH MIDDLE DOT" }, + { 0x0141, 0x0142, "LATIN CAPITAL LETTER L WITH STROKE", "LATIN SMALL LETTER L WITH STROKE" }, + { 0x0143, 0x0144, "LATIN CAPITAL LETTER N WITH ACUTE", "LATIN SMALL LETTER N WITH ACUTE" }, + { 0x0145, 0x0146, "LATIN CAPITAL LETTER N WITH CEDILLA", "LATIN SMALL LETTER N WITH CEDILLA" }, + { 0x0147, 0x0148, "LATIN CAPITAL LETTER N WITH CARON", "LATIN SMALL LETTER N WITH CARON" }, + { 0x014A, 0x014B, "LATIN CAPITAL LETTER ENG (SAMI)", "LATIN SMALL LETTER ENG (SAMI)" }, + { 0x014C, 0x014D, "LATIN CAPITAL LETTER O WITH MACRON", "LATIN SMALL LETTER O WITH MACRON" }, + { 0x014E, 0x014F, "LATIN CAPITAL LETTER O WITH BREVE", "LATIN SMALL LETTER O WITH BREVE" }, + { 0x0150, 0x0151, "LATIN CAPITAL LETTER O WITH DOUBLE ACUTE", "LATIN SMALL LETTER O WITH DOUBLE ACUTE" }, + { 0x0152, 0x0153, "LATIN CAPITAL LIGATURE OE", "LATIN SMALL LIGATURE OE" }, + { 0x0154, 0x0155, "LATIN CAPITAL LETTER R WITH ACUTE", "LATIN SMALL LETTER R WITH ACUTE" }, + { 0x0156, 0x0157, "LATIN CAPITAL LETTER R WITH CEDILLA", "LATIN SMALL LETTER R WITH CEDILLA" }, + { 0x0158, 0x0159, "LATIN CAPITAL LETTER R WITH CARON", "LATIN SMALL LETTER R WITH CARON" }, + { 0x015A, 0x015B, "LATIN CAPITAL LETTER S WITH ACUTE", "LATIN SMALL LETTER S WITH ACUTE" }, + { 0x015C, 0x015D, "LATIN CAPITAL LETTER S WITH CIRCUMFLEX", "LATIN SMALL LETTER S WITH CIRCUMFLEX" }, + { 0x015E, 0x015F, "LATIN CAPITAL LETTER S WITH CEDILLA", "LATIN SMALL LETTER S WITH CEDILLA" }, + { 0x0160, 0x0161, "LATIN CAPITAL LETTER S WITH CARON", "LATIN SMALL LETTER S WITH CARON" }, + { 0x0162, 0x0163, "LATIN CAPITAL LETTER T WITH CEDILLA", "LATIN SMALL LETTER T WITH CEDILLA" }, + { 0x0164, 0x0165, "LATIN CAPITAL LETTER T WITH CARON", "LATIN SMALL LETTER T WITH CARON" }, + { 0x0166, 0x0167, "LATIN CAPITAL LETTER T WITH STROKE", "LATIN SMALL LETTER T WITH STROKE" }, + { 0x0168, 0x0169, "LATIN CAPITAL LETTER U WITH TILDE", "LATIN SMALL LETTER U WITH TILDE" }, + { 0x016A, 0x016B, "LATIN CAPITAL LETTER U WITH MACRON", "LATIN SMALL LETTER U WITH MACRON" }, + { 0x016C, 0x016D, "LATIN CAPITAL LETTER U WITH BREVE", "LATIN SMALL LETTER U WITH BREVE" }, + { 0x016E, 0x016F, "LATIN CAPITAL LETTER U WITH RING ABOVE", "LATIN SMALL LETTER U WITH RING ABOVE" }, + { 0x0170, 0x0171, "LATIN CAPITAL LETTER U WITH DOUBLE ACUTE", "LATIN SMALL LETTER U WITH DOUBLE ACUTE" }, + { 0x0172, 0x0173, "LATIN CAPITAL LETTER U WITH OGONEK", "LATIN SMALL LETTER U WITH OGONEK" }, + { 0x0174, 0x0175, "LATIN CAPITAL LETTER W WITH CIRCUMFLEX", "LATIN SMALL LETTER W WITH CIRCUMFLEX" }, + { 0x0176, 0x0177, "LATIN CAPITAL LETTER Y WITH CIRCUMFLEX", "LATIN SMALL LETTER Y WITH CIRCUMFLEX" }, + { 0x0178, 0x00FF, "LATIN CAPITAL LETTER Y WITH DIAERESIS", "LATIN SMALL LETTER Y DIAERESIS" }, + { 0x0179, 0x017A, "LATIN CAPITAL LETTER Z WITH ACUTE", "LATIN SMALL LETTER Z WITH ACUTE" }, + { 0x017B, 0x017C, "LATIN CAPITAL LETTER Z WITH DOT ABOVE", "LATIN SMALL LETTER Z WITH DOT ABOVE" }, + { 0x017D, 0x017E, "LATIN CAPITAL LETTER Z WITH CARON", "LATIN SMALL LETTER Z WITH CARON" }, + { 0x0181, 0x0253, "LATIN CAPITAL LETTER B WITH HOOK", "LATIN SMALL LETTER B WITH HOOK" }, + { 0x0182, 0x0183, "LATIN CAPITAL LETTER B WITH TOPBAR", "LATIN SMALL LETTER B WITH TOPBAR" }, + { 0x0184, 0x0185, "LATIN CAPITAL LETTER TONE SIX", "LATIN SMALL LETTER TONE SIX" }, + { 0x0186, 0x0254, "LATIN CAPITAL LETTER OPEN O", "LATIN SMALL LETTER OPEN O" }, + { 0x0187, 0x0188, "LATIN CAPITAL LETTER C WITH HOOK", "LATIN SMALL LETTER C WITH HOOK" }, + { 0x018A, 0x0257, "LATIN CAPITAL LETTER D WITH HOOK", "LATIN SMALL LETTER D WITH HOOK" }, + { 0x018B, 0x018C, "LATIN CAPITAL LETTER D WITH TOPBAR", "LATIN SMALL LETTER D WITH TOPBAR" }, + { 0x018E, 0x0258, "LATIN CAPITAL LETTER REVERSED E", "LATIN SMALL LETTER REVERSED E" }, + { 0x018F, 0x0259, "LATIN CAPITAL LETTER SCHWA", "LATIN SMALL LETTER SCHWA" }, + { 0x0190, 0x025B, "LATIN CAPITAL LETTER OPEN E", "LATIN SMALL LETTER OPEN E" }, + { 0x0191, 0x0192, "LATIN CAPITAL LETTER F WITH HOOK", "LATIN SMALL LETTER F WITH HOOK" }, + { 0x0193, 0x0260, "LATIN CAPITAL LETTER G WITH HOOK", "LATIN SMALL LETTER G WITH HOOK" }, + { 0x0194, 0x0263, "LATIN CAPITAL LETTER GAMMA", "LATIN SMALL LETTER GAMMA" }, + { 0x0196, 0x0269, "LATIN CAPITAL LETTER IOTA", "LATIN SMALL LETTER IOTA" }, + { 0x0197, 0x0268, "LATIN CAPITAL LETTER I WITH STROKE", "LATIN SMALL LETTER I WITH STROKE" }, + { 0x0198, 0x0199, "LATIN CAPITAL LETTER K WITH HOOK", "LATIN SMALL LETTER K WITH HOOK" }, + { 0x019C, 0x026f, "LATIN CAPITAL LETTER TURNED M", "LATIN SMALL LETTER TURNED M" }, + { 0x019D, 0x0272, "LATIN CAPITAL LETTER N WITH LEFT HOOK", "LATIN SMALL LETTER N WITH LEFT HOOK" }, + { 0x019F, 0x0275, "LATIN CAPITAL LETTER O WITH MIDDLE TILDE", "LATIN SMALL LETTER BARRED O" }, + { 0x01A0, 0x01A1, "LATIN CAPITAL LETTER O WITH HORN", "LATIN SMALL LETTER O WITH HORN" }, + { 0x01A2, 0x01A3, "LATIN CAPITAL LETTER OI", "LATIN SMALL LETTER OI" }, + { 0x01A4, 0x01A5, "LATIN CAPITAL LETTER P WITH HOOK", "LATIN SMALL LETTER P WITH HOOK" }, + { 0x01A7, 0x01A8, "LATIN CAPITAL LETTER TONE TWO", "LATIN SMALL LETTER TONE TWO" }, + { 0x01A9, 0x0283, "LATIN CAPITAL LETTER ESH", "LATIN SMALL LETTER ESH" }, + { 0x01AC, 0x01AD, "LATIN CAPITAL LETTER T WITH HOOK", "LATIN SMALL LETTER T WITH HOOK" }, + { 0x01AE, 0x0288, "LATIN CAPITAL LETTER T WITH RETROFLEX HOOK", "LATIN SMALL LETTER T WITH RETROFLEX HOOK" }, + { 0x01AF, 0x01B0, "LATIN CAPITAL LETTER U WITH HORN", "LATIN SMALL LETTER U WITH HORN" }, + { 0x01B1, 0x028A, "LATIN CAPITAL LETTER UPSILON", "LATIN SMALL LETTER UPSILON" }, + { 0x01B2, 0x028B, "LATIN CAPITAL LETTER V WITH HOOK", "LATIN SMALL LETTER V WITH HOOK" }, + { 0x01B3, 0x01B4, "LATIN CAPITAL LETTER Y WITH HOOK", "LATIN SMALL LETTER Y WITH HOOK" }, + { 0x01B5, 0x01B6, "LATIN CAPITAL LETTER Z WITH STROKE", "LATIN SMALL LETTER Z WITH STROKE" }, + { 0x01B7, 0x0292, "LATIN CAPITAL LETTER EZH", "LATIN SMALL LETTER EZH" }, + { 0x01B8, 0x01B9, "LATIN CAPITAL LETTER EZH REVERSED", "LATIN SMALL LETTER EZH REVERSED" }, + { 0x01BC, 0x01BD, "LATIN CAPITAL LETTER TONE FIVE", "LATIN SMALL LETTER TONE FIVE" }, + { 0x01C4, 0x01C6, "LATIN CAPITAL LETTER DZ WITH CARON", "LATIN SMALL LETTER DZ WITH CARON" }, + { 0x01C5, 0x01C6, "LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON", "LATIN SMALL LETTER DZ WITH CARON" }, + { 0x01C7, 0x01C9, "LATIN CAPITAL LETTER LJ", "LATIN SMALL LETTER LJ" }, + { 0x01C8, 0x01C9, "LATIN CAPITAL LETTER L WITH SMALL LETTER J", "LATIN SMALL LETTER LJ" }, + { 0x01CA, 0x01CC, "LATIN CAPITAL LETTER NJ", "LATIN SMALL LETTER NJ" }, + { 0x01CB, 0x01CC, "LATIN CAPITAL LETTER N WITH SMALL LETTER J", "LATIN SMALL LETTER NJ" }, + { 0x01CD, 0x01CE, "LATIN CAPITAL LETTER A WITH CARON", "LATIN SMALL LETTER A WITH CARON" }, + { 0x01CF, 0x01D0, "LATIN CAPITAL LETTER I WITH CARON", "LATIN SMALL LETTER I WITH CARON" }, + { 0x01D1, 0x01D2, "LATIN CAPITAL LETTER O WITH CARON", "LATIN SMALL LETTER O WITH CARON" }, + { 0x01D3, 0x01D4, "LATIN CAPITAL LETTER U WITH CARON", "LATIN SMALL LETTER U WITH CARON" }, + { 0x01D5, 0x01D6, "LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON", "LATIN SMALL LETTER U WITH DIAERESIS AND MACRON" }, + { 0x01D7, 0x01D8, "LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE", "LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE" }, + { 0x01D9, 0x01DA, "LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON", "LATIN SMALL LETTER U WITH DIAERESIS AND CARON" }, + { 0x01DB, 0x01DC, "LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE", "LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE" }, + { 0x01DE, 0x01DF, "LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON", "LATIN SMALL LETTER A WITH DIAERESIS AND MACRON" }, + { 0x01E0, 0x01E1, "LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON", "LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON" }, + { 0x01E2, 0x01E3, "LATIN CAPITAL LIGATURE AE WITH MACRON", "LATIN SMALL LIGATURE AE WITH MACRON" }, + { 0x01E4, 0x01E5, "LATIN CAPITAL LETTER G WITH STROKE", "LATIN SMALL LETTER G WITH STROKE" }, + { 0x01E6, 0x01E7, "LATIN CAPITAL LETTER G WITH CARON", "LATIN SMALL LETTER G WITH CARON" }, + { 0x01E8, 0x01E9, "LATIN CAPITAL LETTER K WITH CARON", "LATIN SMALL LETTER K WITH CARON" }, + { 0x01EA, 0x01EB, "LATIN CAPITAL LETTER O WITH OGONEK", "LATIN SMALL LETTER O WITH OGONEK" }, + { 0x01EC, 0x01ED, "LATIN CAPITAL LETTER O WITH OGONEK AND MACRON", "LATIN SMALL LETTER O WITH OGONEK AND MACRON" }, + { 0x01EE, 0x01EF, "LATIN CAPITAL LETTER EZH WITH CARON", "LATIN SMALL LETTER EZH WITH CARON" }, + { 0x01F1, 0x01F3, "LATIN CAPITAL LETTER DZ", "LATIN SMALL LETTER DZ" }, + { 0x01F4, 0x01F5, "LATIN CAPITAL LETTER G WITH ACUTE", "LATIN SMALL LETTER G WITH ACUTE" }, + { 0x01FA, 0x01FB, "LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE", "LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE" }, + { 0x01FC, 0x01FD, "LATIN CAPITAL LIGATURE AE WITH ACUTE", "LATIN SMALL LIGATURE AE WITH ACUTE" }, + { 0x01FE, 0x01FF, "LATIN CAPITAL LETTER O WITH STROKE AND ACUTE", "LATIN SMALL LETTER O WITH STROKE AND ACUTE" }, + { 0x0200, 0x0201, "LATIN CAPITAL LETTER A WITH DOUBLE GRAVE", "LATIN SMALL LETTER A WITH DOUBLE GRAVE" }, + { 0x0202, 0x0203, "LATIN CAPITAL LETTER A WITH INVERTED BREVE", "LATIN SMALL LETTER A WITH INVERTED BREVE" }, + { 0x0204, 0x0205, "LATIN CAPITAL LETTER E WITH DOUBLE GRAVE", "LATIN SMALL LETTER E WITH DOUBLE GRAVE" }, + { 0x0206, 0x0207, "LATIN CAPITAL LETTER E WITH INVERTED BREVE", "LATIN SMALL LETTER E WITH INVERTED BREVE" }, + { 0x0208, 0x0209, "LATIN CAPITAL LETTER I WITH DOUBLE GRAVE", "LATIN SMALL LETTER I WITH DOUBLE GRAVE" }, + { 0x020A, 0x020B, "LATIN CAPITAL LETTER I WITH INVERTED BREVE", "LATIN SMALL LETTER I WITH INVERTED BREVE" }, + { 0x020C, 0x020D, "LATIN CAPITAL LETTER O WITH DOUBLE GRAVE", "LATIN SMALL LETTER O WITH DOUBLE GRAVE" }, + { 0x020E, 0x020F, "LATIN CAPITAL LETTER O WITH INVERTED BREVE", "LATIN SMALL LETTER O WITH INVERTED BREVE" }, + { 0x0210, 0x0211, "LATIN CAPITAL LETTER R WITH DOUBLE GRAVE", "LATIN SMALL LETTER R WITH DOUBLE GRAVE" }, + { 0x0212, 0x0213, "LATIN CAPITAL LETTER R WITH INVERTED BREVE", "LATIN SMALL LETTER R WITH INVERTED BREVE" }, + { 0x0214, 0x0215, "LATIN CAPITAL LETTER U WITH DOUBLE GRAVE", "LATIN SMALL LETTER U WITH DOUBLE GRAVE" }, + { 0x0216, 0x0217, "LATIN CAPITAL LETTER U WITH INVERTED BREVE", "LATIN SMALL LETTER U WITH INVERTED BREVE" }, + { 0x0386, 0x03AC, "GREEK CAPITAL LETTER ALPHA WITH TONOS", "GREEK SMALL LETTER ALPHA WITH TONOS" }, + { 0x0388, 0x03AD, "GREEK CAPITAL LETTER EPSILON WITH TONOS", "GREEK SMALL LETTER EPSILON WITH TONOS" }, + { 0x0389, 0x03AE, "GREEK CAPITAL LETTER ETA WITH TONOS", "GREEK SMALL LETTER ETA WITH TONOS" }, + { 0x038A, 0x03AF, "GREEK CAPITAL LETTER IOTA WITH TONOS", "GREEK SMALL LETTER IOTA WITH TONOS" }, + { 0x038C, 0x03CC, "GREEK CAPITAL LETTER OMICRON WITH TONOS", "GREEK SMALL LETTER OMICRON WITH TONOS" }, + { 0x038E, 0x03CD, "GREEK CAPITAL LETTER UPSILON WITH TONOS", "GREEK SMALL LETTER UPSILON WITH TONOS" }, + { 0x038F, 0x03CE, "GREEK CAPITAL LETTER OMEGA WITH TONOS", "GREEK SMALL LETTER OMEGA WITH TONOS" }, + { 0x0391, 0x03B1, "GREEK CAPITAL LETTER ALPHA", "GREEK SMALL LETTER ALPHA" }, + { 0x0392, 0x03B2, "GREEK CAPITAL LETTER BETA", "GREEK SMALL LETTER BETA" }, + { 0x0393, 0x03B3, "GREEK CAPITAL LETTER GAMMA", "GREEK SMALL LETTER GAMMA" }, + { 0x0394, 0x03B4, "GREEK CAPITAL LETTER DELTA", "GREEK SMALL LETTER DELTA" }, + { 0x0395, 0x03B5, "GREEK CAPITAL LETTER EPSILON", "GREEK SMALL LETTER EPSILON" }, + { 0x0396, 0x03B6, "GREEK CAPITAL LETTER ZETA", "GREEK SMALL LETTER ZETA" }, + { 0x0397, 0x03B7, "GREEK CAPITAL LETTER ETA", "GREEK SMALL LETTER ETA" }, + { 0x0398, 0x03B8, "GREEK CAPITAL LETTER THETA", "GREEK SMALL LETTER THETA" }, + { 0x0399, 0x03B9, "GREEK CAPITAL LETTER IOTA", "GREEK SMALL LETTER IOTA" }, + { 0x039A, 0x03BA, "GREEK CAPITAL LETTER KAPPA", "GREEK SMALL LETTER KAPPA" }, + { 0x039B, 0x03BB, "GREEK CAPITAL LETTER LAMDA", "GREEK SMALL LETTER LAMDA" }, + { 0x039C, 0x03BC, "GREEK CAPITAL LETTER MU", "GREEK SMALL LETTER MU" }, + { 0x039D, 0x03BD, "GREEK CAPITAL LETTER NU", "GREEK SMALL LETTER NU" }, + { 0x039E, 0x03BE, "GREEK CAPITAL LETTER XI", "GREEK SMALL LETTER XI" }, + { 0x039F, 0x03BF, "GREEK CAPITAL LETTER OMICRON", "GREEK SMALL LETTER OMICRON" }, + { 0x03A0, 0x03C0, "GREEK CAPITAL LETTER PI", "GREEK SMALL LETTER PI" }, + { 0x03A1, 0x03C1, "GREEK CAPITAL LETTER RHO", "GREEK SMALL LETTER RHO" }, + { 0x03A3, 0x03C3, "GREEK CAPITAL LETTER SIGMA", "GREEK SMALL LETTER SIGMA" }, + { 0x03A4, 0x03C4, "GREEK CAPITAL LETTER TAU", "GREEK SMALL LETTER TAU" }, + { 0x03A5, 0x03C5, "GREEK CAPITAL LETTER UPSILON", "GREEK SMALL LETTER UPSILON" }, + { 0x03A6, 0x03C6, "GREEK CAPITAL LETTER PHI", "GREEK SMALL LETTER PHI" }, + { 0x03A7, 0x03C7, "GREEK CAPITAL LETTER CHI", "GREEK SMALL LETTER CHI" }, + { 0x03A8, 0x03C8, "GREEK CAPITAL LETTER PSI", "GREEK SMALL LETTER PSI" }, + { 0x03A9, 0x03C9, "GREEK CAPITAL LETTER OMEGA", "GREEK SMALL LETTER OMEGA" }, + { 0x03AA, 0x03CA, "GREEK CAPITAL LETTER IOTA WITH DIALYTIKA", "GREEK SMALL LETTER IOTA WITH DIALYTIKA" }, + { 0x03AB, 0x03CB, "GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA", "GREEK SMALL LETTER UPSILON WITH DIALYTIKA" }, + { 0x03E2, 0x03E3, "COPTIC CAPITAL LETTER SHEI", "COPTIC SMALL LETTER SHEI" }, + { 0x03E4, 0x03E5, "COPTIC CAPITAL LETTER FEI", "COPTIC SMALL LETTER FEI" }, + { 0x03E6, 0x03E7, "COPTIC CAPITAL LETTER KHEI", "COPTIC SMALL LETTER KHEI" }, + { 0x03E8, 0x03E9, "COPTIC CAPITAL LETTER HORI", "COPTIC SMALL LETTER HORI" }, + { 0x03EA, 0x03EB, "COPTIC CAPITAL LETTER GANGIA", "COPTIC SMALL LETTER GANGIA" }, + { 0x03EC, 0x03ED, "COPTIC CAPITAL LETTER SHIMA", "COPTIC SMALL LETTER SHIMA" }, + { 0x03EE, 0x03EF, "COPTIC CAPITAL LETTER DEI", "COPTIC SMALL LETTER DEI" }, + { 0x0401, 0x0451, "CYRILLIC CAPITAL LETTER IO", "CYRILLIC SMALL LETTER IO" }, + { 0x0402, 0x0452, "CYRILLIC CAPITAL LETTER DJE (SERBOCROATIAN)", "CYRILLIC SMALL LETTER DJE (SERBOCROATIAN)" }, + { 0x0403, 0x0453, "CYRILLIC CAPITAL LETTER GJE", "CYRILLIC SMALL LETTER GJE" }, + { 0x0404, 0x0454, "CYRILLIC CAPITAL LETTER UKRAINIAN IE", "CYRILLIC SMALL LETTER UKRAINIAN IE" }, + { 0x0405, 0x0455, "CYRILLIC CAPITAL LETTER DZE", "CYRILLIC SMALL LETTER DZE" }, + { 0x0406, 0x0456, "CYRILLIC CAPITAL LETTER BYELORUSSIAN_UKRAINIAN I", "CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I" }, + { 0x0407, 0x0457, "CYRILLIC CAPITAL LETTER YI (UKRAINIAN)", "CYRILLIC SMALL LETTER YI (UKRAINIAN)" }, + { 0x0408, 0x0458, "CYRILLIC CAPITAL LETTER JE", "CYRILLIC SMALL LETTER JE" }, + { 0x0409, 0x0459, "CYRILLIC CAPITAL LETTER LJE", "CYRILLIC SMALL LETTER LJE" }, + { 0x040A, 0x045A, "CYRILLIC CAPITAL LETTER NJE", "CYRILLIC SMALL LETTER NJE" }, + { 0x040B, 0x045B, "CYRILLIC CAPITAL LETTER TSHE (SERBOCROATIAN)", "CYRILLIC SMALL LETTER TSHE (SERBOCROATIAN)" }, + { 0x040C, 0x045C, "CYRILLIC CAPITAL LETTER KJE", "CYRILLIC SMALL LETTER KJE" }, + { 0x040E, 0x045E, "CYRILLIC CAPITAL LETTER SHORT U (BYELORUSSIAN)", "CYRILLIC SMALL LETTER SHORT U (BYELORUSSIAN)" }, + { 0x040F, 0x045F, "CYRILLIC CAPITAL LETTER DZHE", "CYRILLIC SMALL LETTER DZHE" }, + { 0x0410, 0x0430, "CYRILLIC CAPITAL LETTER A", "CYRILLIC SMALL LETTER A" }, + { 0x0411, 0x0431, "CYRILLIC CAPITAL LETTER BE", "CYRILLIC SMALL LETTER BE" }, + { 0x0412, 0x0432, "CYRILLIC CAPITAL LETTER VE", "CYRILLIC SMALL LETTER VE" }, + { 0x0413, 0x0433, "CYRILLIC CAPITAL LETTER GHE", "CYRILLIC SMALL LETTER GHE" }, + { 0x0414, 0x0434, "CYRILLIC CAPITAL LETTER DE", "CYRILLIC SMALL LETTER DE" }, + { 0x0415, 0x0435, "CYRILLIC CAPITAL LETTER IE", "CYRILLIC SMALL LETTER IE" }, + { 0x0416, 0x0436, "CYRILLIC CAPITAL LETTER ZHE", "CYRILLIC SMALL LETTER ZHE" }, + { 0x0417, 0x0437, "CYRILLIC CAPITAL LETTER ZE", "CYRILLIC SMALL LETTER ZE" }, + { 0x0418, 0x0438, "CYRILLIC CAPITAL LETTER I", "CYRILLIC SMALL LETTER I" }, + { 0x0419, 0x0439, "CYRILLIC CAPITAL LETTER SHORT I", "CYRILLIC SMALL LETTER SHORT I" }, + { 0x041A, 0x043A, "CYRILLIC CAPITAL LETTER KA", "CYRILLIC SMALL LETTER KA" }, + { 0x041B, 0x043B, "CYRILLIC CAPITAL LETTER EL", "CYRILLIC SMALL LETTER EL" }, + { 0x041C, 0x043C, "CYRILLIC CAPITAL LETTER EM", "CYRILLIC SMALL LETTER EM" }, + { 0x041D, 0x043D, "CYRILLIC CAPITAL LETTER EN", "CYRILLIC SMALL LETTER EN" }, + { 0x041E, 0x043E, "CYRILLIC CAPITAL LETTER O", "CYRILLIC SMALL LETTER O" }, + { 0x041F, 0x043F, "CYRILLIC CAPITAL LETTER PE", "CYRILLIC SMALL LETTER PE" }, + { 0x0420, 0x0440, "CYRILLIC CAPITAL LETTER ER", "CYRILLIC SMALL LETTER ER" }, + { 0x0421, 0x0441, "CYRILLIC CAPITAL LETTER ES", "CYRILLIC SMALL LETTER ES" }, + { 0x0422, 0x0442, "CYRILLIC CAPITAL LETTER TE", "CYRILLIC SMALL LETTER TE" }, + { 0x0423, 0x0443, "CYRILLIC CAPITAL LETTER U", "CYRILLIC SMALL LETTER U" }, + { 0x0424, 0x0444, "CYRILLIC CAPITAL LETTER EF", "CYRILLIC SMALL LETTER EF" }, + { 0x0425, 0x0445, "CYRILLIC CAPITAL LETTER HA", "CYRILLIC SMALL LETTER HA" }, + { 0x0426, 0x0446, "CYRILLIC CAPITAL LETTER TSE", "CYRILLIC SMALL LETTER TSE" }, + { 0x0427, 0x0447, "CYRILLIC CAPITAL LETTER CHE", "CYRILLIC SMALL LETTER CHE" }, + { 0x0428, 0x0448, "CYRILLIC CAPITAL LETTER SHA", "CYRILLIC SMALL LETTER SHA" }, + { 0x0429, 0x0449, "CYRILLIC CAPITAL LETTER SHCHA", "CYRILLIC SMALL LETTER SHCHA" }, + { 0x042A, 0x044A, "CYRILLIC CAPITAL LETTER HARD SIGN", "CYRILLIC SMALL LETTER HARD SIGN" }, + { 0x042B, 0x044B, "CYRILLIC CAPITAL LETTER YERU", "CYRILLIC SMALL LETTER YERU" }, + { 0x042C, 0x044C, "CYRILLIC CAPITAL LETTER SOFT SIGN", "CYRILLIC SMALL LETTER SOFT SIGN" }, + { 0x042D, 0x044D, "CYRILLIC CAPITAL LETTER E", "CYRILLIC SMALL LETTER E" }, + { 0x042E, 0x044E, "CYRILLIC CAPITAL LETTER YU", "CYRILLIC SMALL LETTER YU" }, + { 0x042F, 0x044F, "CYRILLIC CAPITAL LETTER YA", "CYRILLIC SMALL LETTER YA" }, + { 0x0460, 0x0461, "CYRILLIC CAPITAL LETTER OMEGA", "CYRILLIC SMALL LETTER OMEGA" }, + { 0x0462, 0x0463, "CYRILLIC CAPITAL LETTER YAT", "CYRILLIC SMALL LETTER YAT" }, + { 0x0464, 0x0465, "CYRILLIC CAPITAL LETTER IOTIFIED E", "CYRILLIC SMALL LETTER IOTIFIED E" }, + { 0x0466, 0x0467, "CYRILLIC CAPITAL LETTER LITTLE YUS", "CYRILLIC SMALL LETTER LITTLE YUS" }, + { 0x0468, 0x0469, "CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS", "CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS" }, + { 0x046A, 0x046B, "CYRILLIC CAPITAL LETTER BIG YUS", "CYRILLIC SMALL LETTER BIG YUS" }, + { 0x046C, 0x046D, "CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS", "CYRILLIC SMALL LETTER IOTIFIED BIG YUS" }, + { 0x046E, 0x046F, "CYRILLIC CAPITAL LETTER KSI", "CYRILLIC SMALL LETTER KSI" }, + { 0x0470, 0x0471, "CYRILLIC CAPITAL LETTER PSI", "CYRILLIC SMALL LETTER PSI" }, + { 0x0472, 0x0473, "CYRILLIC CAPITAL LETTER FITA", "CYRILLIC SMALL LETTER FITA" }, + { 0x0474, 0x0475, "CYRILLIC CAPITAL LETTER IZHITSA", "CYRILLIC SMALL LETTER IZHITSA" }, + { 0x0476, 0x0477, "CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT", "CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT" }, + { 0x0478, 0x0479, "CYRILLIC CAPITAL LETTER UK", "CYRILLIC SMALL LETTER UK" }, + { 0x047A, 0x047B, "CYRILLIC CAPITAL LETTER ROUND OMEGA", "CYRILLIC SMALL LETTER ROUND OMEGA" }, + { 0x047C, 0x047D, "CYRILLIC CAPITAL LETTER OMEGA WITH TITLO", "CYRILLIC SMALL LETTER OMEGA WITH TITLO" }, + { 0x047E, 0x047F, "CYRILLIC CAPITAL LETTER OT", "CYRILLIC SMALL LETTER OT" }, + { 0x0480, 0x0481, "CYRILLIC CAPITAL LETTER KOPPA", "CYRILLIC SMALL LETTER KOPPA" }, + { 0x0490, 0x0491, "CYRILLIC CAPITAL LETTER GHE WITH UPTURN", "CYRILLIC SMALL LETTER GHE WITH UPTURN" }, + { 0x0492, 0x0493, "CYRILLIC CAPITAL LETTER GHE WITH STROKE", "CYRILLIC SMALL LETTER GHE WITH STROKE" }, + { 0x0494, 0x0495, "CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK", "CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK" }, + { 0x0496, 0x0497, "CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER", "CYRILLIC SMALL LETTER ZHE WITH DESCENDER" }, + { 0x0498, 0x0499, "CYRILLIC CAPITAL LETTER ZE WITH DESCENDER", "CYRILLIC SMALL LETTER ZE WITH DESCENDER" }, + { 0x049A, 0x049B, "CYRILLIC CAPITAL LETTER KA WITH DESCENDER", "CYRILLIC SMALL LETTER KA WITH DESCENDER" }, + { 0x049C, 0x049D, "CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE", "CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE" }, + { 0x049E, 0x049F, "CYRILLIC CAPITAL LETTER KA WITH STROKE", "CYRILLIC SMALL LETTER KA WITH STROKE" }, + { 0x04A0, 0x04A1, "CYRILLIC CAPITAL LETTER BASHKIR KA", "CYRILLIC SMALL LETTER EASHKIR KA" }, + { 0x04A2, 0x04A3, "CYRILLIC CAPITAL LETTER EN WITH DESCENDER", "CYRILLIC SMALL LETTER EN WITH DESCENDER" }, + { 0x04A4, 0x04A5, "CYRILLIC CAPITAL LIGATURE EN GHF", "CYRILLIC SMALL LIGATURE EN GHE" }, + { 0x04A6, 0x04A7, "CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK (ABKHASIAN)", "CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK (ABKHASIAN)" }, + { 0x04A8, 0x04A9, "CYRILLIC CAPITAL LETTER ABKHASIAN HA", "CYRILLIC SMALL LETTER ABKHASIAN HA" }, + { 0x04AA, 0x04AB, "CYRILLIC CAPITAL LETTER ES WITH DESCENDER", "CYRILLIC SMALL LETTER ES WITH DESCENDER" }, + { 0x04AC, 0x04AD, "CYRILLIC CAPITAL LETTER TE WITH DESCENDER", "CYRILLIC SMALL LETTER TE WITH DESCENDER" }, + { 0x04AE, 0x04AF, "CYRILLIC CAPITAL LETTER STRAIGHT U", "CYRILLIC SMALL LETTER STRAIGHT U" }, + { 0x04B0, 0x04B1, "CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE", "CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE" }, + { 0x04B2, 0x04B3, "CYRILLIC CAPITAL LETTER HA WITH DESCENDER", "CYRILLIC SMALL LETTER HA WITH DESCENDER" }, + { 0x04B4, 0x04B5, "CYRILLIC CAPITAL LIGATURE TE TSE (ABKHASIAN)", "CYRILLIC SMALL LIGATURE TE TSE (ABKHASIAN)" }, + { 0x04B6, 0x04B7, "CYRILLIC CAPITAL LETTER CHE WITH DESCENDER", "CYRILLIC SMALL LETTER CHE WITH DESCENDER" }, + { 0x04B8, 0x04B9, "CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE", "CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE" }, + { 0x04BA, 0x04BB, "CYRILLIC CAPITAL LETTER SHHA", "CYRILLIC SMALL LETTER SHHA" }, + { 0x04BC, 0x04BD, "CYRILLIC CAPITAL LETTER ABKHASIAN CHE", "CYRILLIC SMALL LETTER ABKHASIAN CHE" }, + { 0x04BE, 0x04BF, "CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER", "CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER" }, + { 0x04C1, 0x04C2, "CYRILLIC CAPITAL LETTER ZHE WITH BREVE", "CYRILLIC SMALL LETTER ZHE WITH BREVE" }, + { 0x04C3, 0x04C4, "CYRILLIC CAPITAL LETTER KA WITH HOOK", "CYRILLIC SMALL LETTER KA WITH HOOK" }, + { 0x04C7, 0x04C8, "CYRILLIC CAPITAL LETTER EN WITH HOOK", "CYRILLIC SMALL LETTER EN WITH HOOK" }, + { 0x04CB, 0x04CC, "CYRILLIC CAPITAL LETTER KHAKASSIAN CHE", "CYRILLIC SMALL LETTER KHAKASSIAN CHE" }, + { 0x04D0, 0x04D1, "CYRILLIC CAPITAL LETTER A WITH BREVE", "CYRILLIC SMALL LETTER A WITH BREVE" }, + { 0x04D2, 0x04D3, "CYRILLIC CAPITAL LETTER A WITH DIAERESIS", "CYRILLIC SMALL LETTER A WITH DIAERESIS" }, + { 0x04D4, 0x04D5, "CYRILLIC CAPITAL LIGATURE A IE", "CYRILLIC SMALL LIGATURE A IE" }, + { 0x04D6, 0x04D7, "CYRILLIC CAPITAL LETTER IE WITH BREVE", "CYRILLIC SMALL LETTER IE WITH BREVE" }, + { 0x04D8, 0x04D9, "CYRILLIC CAPITAL LETTER SCHWA", "CYRILLIC SMALL LETTER SCHWA" }, + { 0x04DA, 0x04DB, "CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS", "CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS" }, + { 0x04DC, 0x04DD, "CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS", "CYRILLIC SMALL LETTER ZHE WITH DIAERESIS" }, + { 0x04DE, 0x04DF, "CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS", "CYRILLIC SMALL LETTER ZE WITH DIAERESIS" }, + { 0x04E0, 0x04E1, "CYRILLIC CAPITAL LETTER ABKHASIAN DZE", "CYRILLIC SMALL LETTER ABKHASIAN DZE" }, + { 0x04E2, 0x04E3, "CYRILLIC CAPITAL LETTER I WITH MACRON", "CYRILLIC SMALL LETTER I WITH MACRON" }, + { 0x04E4, 0x04E5, "CYRILLIC CAPITAL LETTER I WITH DIAERESIS", "CYRILLIC SMALL LETTER I WITH DIAERESIS" }, + { 0x04E6, 0x04E7, "CYRILLIC CAPITAL LETTER O WITH DIAERESIS", "CYRILLIC SMALL LETTER O WITH DIAERESIS" }, + { 0x04E8, 0x04E9, "CYRILLIC CAPITAL LETTER BARRED O", "CYRILLIC SMALL LETTER BARRED O" }, + { 0x04EA, 0x04EB, "CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS", "CYRILLIC SMALL LETTER BARRED 0 WITH DIAERESIS" }, + { 0x04EE, 0x04EF, "CYRILLIC CAPITAL LETTER U WITH MACRON", "CYRILLIC SMALL LETTER U WITH MACRON" }, + { 0x04F0, 0x04F1, "CYRILLIC CAPITAL LETTER U WITH DIAERESIS", "CYRILLIC SMALL LETTER U WITH DIAERESIS" }, + { 0x04F2, 0x04F3, "CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE", "CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE" }, + { 0x04F4, 0x04F5, "CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS", "CYRILLIC SMALL LETTER CHE WITH DIAERESIS" }, + { 0x04F8, 0x04F9, "CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS", "CYRILLIC SMALL LETTER YERU WITH DIAERESIS" }, + { 0x0531, 0x0561, "ARMENIAN CAPITAL LETTER AYB", "ARMENIAN SMALL LETTER AYB" }, + { 0x0532, 0x0562, "ARMENIAN CAPITAL LETTER BEN", "ARMENIAN SMALL LETTER BEN" }, + { 0x0533, 0x0563, "ARMENIAN CAPITAL LETTER GIM", "ARMENIAN SMALL LETTER GIM" }, + { 0x0534, 0x0564, "ARMENIAN CAPITAL LETTER DA", "ARMENIAN SMALL LETTER DA" }, + { 0x0535, 0x0565, "ARMENIAN CAPITAL LETTER ECH", "ARMENIAN SMALL LETTER ECH" }, + { 0x0536, 0x0566, "ARMENIAN CAPITAL LETTER ZA", "ARMENIAN SMALL LETTER ZA" }, + { 0x0537, 0x0567, "ARMENIAN CAPITAL LETTER EH", "ARMENIAN SMALL LETTER EH" }, + { 0x0538, 0x0568, "ARMENIAN CAPITAL LETTER ET", "ARMENIAN SMALL LETTER ET" }, + { 0x0539, 0x0569, "ARMENIAN CAPITAL LETTER TO", "ARMENIAN SMALL LETTER TO" }, + { 0x053A, 0x056A, "ARMENIAN CAPITAL LETTER ZHE", "ARMENIAN SMALL LETTER ZHE" }, + { 0x053B, 0x056B, "ARMENIAN CAPITAL LETTER INI", "ARMENIAN SMALL LETTER INI" }, + { 0x053C, 0x056C, "ARMENIAN CAPITAL LETTER LIWN", "ARMENIAN SMALL LETTER LIWN" }, + { 0x053D, 0x056D, "ARMENIAN CAPITAL LETTER XEH", "ARMENIAN SMALL LETTER XEH" }, + { 0x053E, 0x056E, "ARMENIAN CAPITAL LETTER CA", "ARMENIAN SMALL LETTER CA" }, + { 0x053F, 0x056F, "ARMENIAN CAPITAL LETTER KEN", "ARMENIAN SMALL LETTER KEN" }, + { 0x0540, 0x0570, "ARMENIAN CAPITAL LETTER HO", "ARMENIAN SMALL LETTER HO" }, + { 0x0541, 0x0571, "ARMENIAN CAPITAL LETTER JA", "ARMENIAN SMALL LETTER JA" }, + { 0x0542, 0x0572, "ARMENIAN CAPITAL LETTER GHAD", "ARMENIAN SMALL LETTER GHAD" }, + { 0x0543, 0x0573, "ARMENIAN CAPITAL LETTER CHEH", "ARMENIAN SMALL LETTER CHEH" }, + { 0x0544, 0x0574, "ARMENIAN CAPITAL LETTER MEN", "ARMENIAN SMALL LETTER MEN" }, + { 0x0545, 0x0575, "ARMENIAN CAPITAL LETTER YI", "ARMENIAN SMALL LETTER YI" }, + { 0x0546, 0x0576, "ARMENIAN CAPITAL LETTER NOW", "ARMENIAN SMALL LETTER NOW" }, + { 0x0547, 0x0577, "ARMENIAN CAPITAL LETTER SHA", "ARMENIAN SMALL LETTER SNA" }, + { 0x0548, 0x0578, "ARMENIAN CAPITAL LETTER VO", "ARMENIAN SMALL LETTER VO" }, + { 0x0549, 0x0579, "ARMENIAN CAPITAL LETTER CHA", "ARMENIAN SMALL LETTER CHA" }, + { 0x054A, 0x057A, "ARMENIAN CAPITAL LETTER PEH", "ARMENIAN SMALL LETTER PEH" }, + { 0x054B, 0x057B, "ARMENIAN CAPITAL LETTER JHEH", "ARMENIAN SMALL LETTER JHEH" }, + { 0x054C, 0x057C, "ARMENIAN CAPITAL LETTER RA", "ARMENIAN SMALL LETTER RA" }, + { 0x054D, 0x057D, "ARMENIAN CAPITAL LETTER SEH", "ARMENIAN SMALL LETTER SEH" }, + { 0x054E, 0x057E, "ARMENIAN CAPITAL LETTER VEW", "ARMENIAN SMALL LETTER VEW" }, + { 0x054F, 0x057F, "ARMENIAN CAPITAL LETTER TIWN", "ARMENIAN SMALL LETTER TIWN" }, + { 0x0550, 0x0580, "ARMENIAN CAPITAL LETTER REH", "ARMENIAN SMALL LETTER REH" }, + { 0x0551, 0x0581, "ARMENIAN CAPITAL LETTER CO", "ARMENIAN SMALL LETTER CO" }, + { 0x0552, 0x0582, "ARMENIAN CAPITAL LETTER YIWN", "ARMENIAN SMALL LETTER YIWN" }, + { 0x0553, 0x0583, "ARMENIAN CAPITAL LETTER PIWR", "ARMENIAN SMALL LETTER PIWP" }, + { 0x0554, 0x0584, "ARMENIAN CAPITAL LETTER KEH", "ARMENIAN SMALL LETTER KEH" }, + { 0x0555, 0x0585, "ARMENIAN CAPITAL LETTER OH", "ARMENIAN SMALL LETTER OH" }, + { 0x0556, 0x0586, "ARMENIAN CAPITAL LETTER FEH", "ARMENIAN SMALL LETTER FEH" }, + { 0x10A0, 0x10D0, "GEORGIAN CAPITAL LETTER AN (KHUTSURI)", "GEORGIAN LETTER AN" }, + { 0x10A1, 0x10D1, "GEORGIAN CAPITAL LETTER BAN (KHUTSURI)", "GEORGIAN LETTER BAN" }, + { 0x10A2, 0x10D2, "GEORGIAN CAPITAL LETTER GAN (KHUTSURI)", "GEORGIAN LETTER GAN" }, + { 0x10A3, 0x10D3, "GEORGIAN CAPITAL LETTER DON (KHUTSURI)", "GEORGIAN LETTER DON" }, + { 0x10A4, 0x10D4, "GEORGIAN CAPITAL LETTER EN (KHUTSURI)", "GEORGIAN LETTER EN" }, + { 0x10A5, 0x10D5, "GEORGIAN CAPITAL LETTER VIN (KHUTSURI)", "GEORGIAN LETTER VIN" }, + { 0x10A6, 0x10D6, "GEORGIAN CAPITAL LETTER ZEN (KHUTSURI)", "GEORGIAN LETTER ZEN" }, + { 0x10A7, 0x10D7, "GEORGIAN CAPITAL LETTER TAN (KHUTSURI)", "GEORGIAN LETTER TAN" }, + { 0x10A8, 0x10D8, "GEORGIAN CAPITAL LETTER IN (KHUTSURI)", "GEORGIAN LETTER IN" }, + { 0x10A9, 0x10D9, "GEORGIAN CAPITAL LETTER KAN (KHUTSURI)", "GEORGIAN LETTER KAN" }, + { 0x10AA, 0x10DA, "GEORGIAN CAPITAL LETTER LAS (KHUTSURI)", "GEORGIAN LETTER LAS" }, + { 0x10AB, 0x10DB, "GEORGIAN CAPITAL LETTER MAN (KHUTSURI)", "GEORGIAN LETTER MAN" }, + { 0x10AC, 0x10DC, "GEORGIAN CAPITAL LETTER NAR (KHUTSURI)", "GEORGIAN LETTER NAR" }, + { 0x10AD, 0x10DD, "GEORGIAN CAPITAL LETTER ON (KHUTSURI)", "GEORGIAN LETTER ON" }, + { 0x10AE, 0x10DE, "GEORGIAN CAPITAL LETTER PAR (KHUTSURI)", "GEORGIAN LETTER PAR" }, + { 0x10AF, 0x10DF, "GEORGIAN CAPITAL LETTER ZHAR (KHUTSURI)", "GEORGIAN LETTER ZHAR" }, + { 0x10B0, 0x10E0, "GEORGIAN CAPITAL LETTER RAE (KHUTSURI)", "GEORGIAN LETTER RAE" }, + { 0x10B1, 0x10E1, "GEORGIAN CAPITAL LETTER SAN (KHUTSURI)", "GEORGIAN LETTER SAN" }, + { 0x10B2, 0x10E2, "GEORGIAN CAPITAL LETTER TAR (KHUTSURI)", "GEORGIAN LETTER TAR" }, + { 0x10B3, 0x10E3, "GEORGIAN CAPITAL LETTER UN (KHUTSURI)", "GEORGIAN LETTER UN" }, + { 0x10B4, 0x10E4, "GEORGIAN CAPITAL LETTER PHAR (KHUTSURI)", "GEORGIAN LETTER PHAR" }, + { 0x10B5, 0x10E5, "GEORGIAN CAPITAL LETTER KHAR (KHUTSURI)", "GEORGIAN LETTER KHAR" }, + { 0x10B6, 0x10E6, "GEORGIAN CAPITAL LETTER GHAN (KHUTSURI)", "GEORGIAN LETTER GHAN" }, + { 0x10B7, 0x10E7, "GEORGIAN CAPITAL LETTER QAR (KHUTSURI)", "GEORGIAN LETTER QAR" }, + { 0x10B8, 0x10E8, "GEORGIAN CAPITAL LETTER SHIN (KHUTSURI)", "GEORGIAN LETTER SHIN" }, + { 0x10B9, 0x10E9, "GEORGIAN CAPITAL LETTER CHIN (KHUTSURI)", "GEORGIAN LETTER CHIN" }, + { 0x10BA, 0x10EA, "GEORGIAN CAPITAL LETTER CAN (KHUTSURI)", "GEORGIAN LETTER CAN" }, + { 0x10BB, 0x10EB, "GEORGIAN CAPITAL LETTER JIL (KHUTSURI)", "GEORGIAN LETTER JIL" }, + { 0x10BC, 0x10EC, "GEORGIAN CAPITAL LETTER CIL (KHUTSURI)", "GEORGIAN LETTER CIL" }, + { 0x10BD, 0x10ED, "GEORGIAN CAPITAL LETTER CHAR (KHUTSURI)", "GEORGIAN LETTER CHAR" }, + { 0x10BE, 0x10EE, "GEORGIAN CAPITAL LETTER XAN (KHUTSURI)", "GEORGIAN LETTER XAN" }, + { 0x10BF, 0x10EF, "GEORGIAN CAPITAL LETTER JHAN (KHUTSURI)", "GEORGIAN LETTER JHAN" }, + { 0x10C0, 0x10F0, "GEORGIAN CAPITAL LETTER HAE (KHUTSURI)", "GEORGIAN LETTER HAE" }, + { 0x10C1, 0x10F1, "GEORGIAN CAPITAL LETTER HE (KHUTSURI)", "GEORGIAN LETTER HE" }, + { 0x10C2, 0x10F2, "GEORGIAN CAPITAL LETTER HIE (KHUTSURI)", "GEORGIAN LETTER HIE" }, + { 0x10C3, 0x10F3, "GEORGIAN CAPITAL LETTER WE (KHUTSURI)", "GEORGIAN LETTER WE" }, + { 0x10C4, 0x10F4, "GEORGIAN CAPITAL LETTER HAR (KHUTSURI)", "GEORGIAN LETTER HAR" }, + { 0x10C5, 0x10F5, "GEORGIAN CAPITAL LETTER HOE (KHUTSURI)", "GEORGIAN LETTER HOE" }, + { 0x1E00, 0x1E01, "LATIN CAPITAL LETTER A WITH RING BELOW", "LATIN SMALL LETTER A WITH RING BELOW" }, + { 0x1E02, 0x1E03, "LATIN CAPITAL LETTER B WITH DOT ABOVE", "LATIN SMALL LETTER B WITH DOT ABOVE" }, + { 0x1E04, 0x1E05, "LATIN CAPITAL LETTER B WITH DOT BELOW", "LATIN SMALL LETTER B WITH DOT BELOW" }, + { 0x1E06, 0x1E07, "LATIN CAPITAL LETTER B WITH LINE BELOW", "LATIN SMALL LETTER B WITH LINE BELOW" }, + { 0x1E08, 0x1E09, "LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE", "LATIN SMALL LETTER C WITH CEDILLA AND ACUTE" }, + { 0x1E0A, 0x1E0B, "LATIN CAPITAL LETTER D WITH DOT ABOVE", "LATIN SMALL LETTER D WITH DOT ABOVE" }, + { 0x1E0C, 0x1E0D, "LATIN CAPITAL LETTER D WITH DOT BELOW", "LATIN SMALL LETTER D WITH DOT BELOW" }, + { 0x1E0E, 0x1E0F, "LATIN CAPITAL LETTER D WITH LINE BELOW", "LATIN SMALL LETTER D WITH LINE BELOW" }, + { 0x1E10, 0x1E11, "LATIN CAPITAL LETTER D WITH CEDILLA", "LATIN SMALL LETTER D WITH CEDILLA" }, + { 0x1E12, 0x1E13, "LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW", "LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW" }, + { 0x1E14, 0x1E15, "LATIN CAPITAL LETTER E WITH MACRON AND GRAVE", "LATIN SMALL LETTER E WITH MACRON AND GRAVE" }, + { 0x1E16, 0x1E17, "LATIN CAPITAL LETTER E WITH MACRON AND ACUTE", "LATIN SMALL LETTER E WITH MACRON AND ACUTE" }, + { 0x1E18, 0x1E19, "LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW", "LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW" }, + { 0x1E1A, 0x1E1B, "LATIN CAPITAL LETTER E WITH TILDE BELOW", "LATIN SMALL LETTER E WITH TILDE BELOW" }, + { 0x1E1C, 0x1E1D, "LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE", "LATIN SMALL LETTER E WITH CEDILLA AND BREVE" }, + { 0x1E1E, 0x1E1F, "LATIN CAPITAL LETTER F WITH DOT ABOVE", "LATIN SMALL LETTER F WITH DOT ABOVE" }, + { 0x1E20, 0x1E21, "LATIN CAPITAL LETTER G WITH MACRON", "LATIN SMALL LETTER G WITH MACRON" }, + { 0x1E22, 0x1E23, "LATIN CAPITAL LETTER H WITH DOT ABOVE", "LATIN SMALL LETTER H WITH DOT ABOVE" }, + { 0x1E24, 0x1E25, "LATIN CAPITAL LETTER H WITH DOT BELOW", "LATIN SMALL LETTER H WITH DOT BELOW" }, + { 0x1E26, 0x1E27, "LATIN CAPITAL LETTER H WITH DIAERESIS", "LATIN SMALL LETTER H WITH DIAERESIS" }, + { 0x1E28, 0x1E29, "LATIN CAPITAL LETTER H WITH CEDILLA", "LATIN SMALL LETTER H WITH CEDILLA" }, + { 0x1E2A, 0x1E2B, "LATIN CAPITAL LETTER H WITH BREVE BELOW", "LATIN SMALL LETTER H WITH BREVE BELOW" }, + { 0x1E2C, 0x1E2D, "LATIN CAPITAL LETTER I WITH TILDE BELOW", "LATIN SMALL LETTER I WITH TILDE BELOW" }, + { 0x1E2E, 0x1E2F, "LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE", "LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE" }, + { 0x1E30, 0x1E31, "LATIN CAPITAL LETTER K WITH ACUTE", "LATIN SMALL LETTER K WITH ACUTE" }, + { 0x1E32, 0x1E33, "LATIN CAPITAL LETTER K WITH DOT BELOW", "LATIN SMALL LETTER K WITH DOT BELOW" }, + { 0x1E34, 0x1E35, "LATIN CAPITAL LETTER K WITH LINE BELOW", "LATIN SMALL LETTER K WITH LINE BELOW" }, + { 0x1E36, 0x1E37, "LATIN CAPITAL LETTER L WITH DOT BELOW", "LATIN SMALL LETTER L WITH DOT BELOW" }, + { 0x1E38, 0x1E39, "LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON", "LATIN SMALL LETTER L WITH DOT BELOW AND MACRON" }, + { 0x1E3A, 0x1E3B, "LATIN CAPITAL LETTER L WITH LINE BELOW", "LATIN SMALL LETTER L WITH LINE BELOW" }, + { 0x1E3C, 0x1E3D, "LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW", "LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW" }, + { 0x1E3E, 0x1E3F, "LATIN CAPITAL LETTER M WITH ACUTE", "LATIN SMALL LETTER M WITH ACUTE" }, + { 0x1E40, 0x1E41, "LATIN CAPITAL LETTER M WITH DOT ABOVE", "LATIN SMALL LETTER M WITH DOT ABOVE" }, + { 0x1E42, 0x1E43, "LATIN CAPITAL LETTER M WITH DOT BELOW", "LATIN SMALL LETTER M WITH DOT BELOW" }, + { 0x1E44, 0x1E45, "LATIN CAPITAL LETTER N WITH DOT ABOVE", "LATIN SMALL LETTER N WITH DOT ABOVE" }, + { 0x1E46, 0x1E47, "LATIN CAPITAL LETTER N WITH DOT BELOW", "LATIN SMALL LETTER N WITH DOT BELOW" }, + { 0x1E48, 0x1E49, "LATIN CAPITAL LETTER N WITH LINE BELOW", "LATIN SMALL LETTER N WITH LINE BELOW" }, + { 0x1E4A, 0x1E4B, "LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW", "LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW" }, + { 0x1E4C, 0x1E4D, "LATIN CAPITAL LETTER O WITH TILDE AND ACUTE", "LATIN SMALL LETTER O WITH TILDE AND ACUTE" }, + { 0x1E4E, 0x1E4F, "LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS", "LATIN SMALL LETTER O WITH TILDE AND DIAERESIS" }, + { 0x1E50, 0x1E51, "LATIN CAPITAL LETTER O WITH MACRON AND GRAVE", "LATIN SMALL LETTER O WITH MACRON AND GRAVE" }, + { 0x1E52, 0x1E53, "LATIN CAPITAL LETTER O WITH MACRON AND ACUTE", "LATIN SMALL LETTER O WITH MACRON AND ACUTE" }, + { 0x1E54, 0x1E55, "LATIN CAPITAL LETTER P WITH ACUTE", "LATIN SMALL LETTER P WITH ACUTE" }, + { 0x1E56, 0x1E57, "LATIN CAPITAL LETTER P WITH DOT ABOVE", "LATIN SMALL LETTER P WITH DOT ABOVE" }, + { 0x1E58, 0x1E59, "LATIN CAPITAL LETTER R WITH DOT ABOVE", "LATIN SMALL LETTER R WITH DOT ABOVE" }, + { 0x1E5A, 0x1E5B, "LATIN CAPITAL LETTER R WITH DOT BELOW", "LATIN SMALL LETTER R WITH DOT BELOW" }, + { 0x1E5C, 0x1E5D, "LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON", "LATIN SMALL LETTER R WITH DOT BELOW AND MACRON" }, + { 0x1E5E, 0x1E5F, "LATIN CAPITAL LETTER R WITH LINE BELOW", "LATIN SMALL LETTER R WITH LINE BELOW" }, + { 0x1E60, 0x1E61, "LATIN CAPITAL LETTER S WITH DOT ABOVE", "LATIN SMALL LETTER S WITH DOT ABOVE" }, + { 0x1E62, 0x1E63, "LATIN CAPITAL LETTER S WITH DOT BELOW", "LATIN SMALL LETTER S WITH DOT BELOW" }, + { 0x1E64, 0x1E65, "LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE", "LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE" }, + { 0x1E66, 0x1E67, "LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE", "LATIN SMALL LETTER S WITH CARON AND DOT ABOVE" }, + { 0x1E68, 0x1E69, "LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE", "LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE" }, + { 0x1E6A, 0x1E6B, "LATIN CAPITAL LETTER T WITH DOT ABOVE", "LATIN SMALL LETTER T WITH DOT ABOVE" }, + { 0x1E6C, 0x1E6D, "LATIN CAPITAL LETTER T WITH DOT BELOW", "LATIN SMALL LETTER T WITH DOT BELOW" }, + { 0x1E6E, 0x1E6F, "LATIN CAPITAL LETTER T WITH LINE BELOW", "LATIN SMALL LETTER T WITH LINE BELOW" }, + { 0x1E70, 0x1E71, "LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW", "LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW" }, + { 0x1E72, 0x1E73, "LATIN CAPITAL LETTER U WITH DIAERESIS BELOW", "LATIN SMALL LETTER U WITH DIAERESIS BELOW" }, + { 0x1E74, 0x1E75, "LATIN CAPITAL LETTER U WITH TILDE BELOW", "LATIN SMALL LETTER U WITH TILDE BELOW" }, + { 0x1E76, 0x1E77, "LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW", "LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW" }, + { 0x1E78, 0x1E79, "LATIN CAPITAL LETTER U WITH TILDE AND ACUTE", "LATIN SMALL LETTER U WITH TILDE AND ACUTE" }, + { 0x1E7A, 0x1E7B, "LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS", "LATIN SMALL LETTER U WITH MACRON AND DIAERESIS" }, + { 0x1E7C, 0x1E7D, "LATIN CAPITAL LETTER V WITH TILDE", "LATIN SMALL LETTER V WITH TILDE" }, + { 0x1E7E, 0x1E7F, "LATIN CAPITAL LETTER V WITH DOT BELOW", "LATIN SMALL LETTER V WITH DOT BELOW" }, + { 0x1E80, 0x1E81, "LATIN CAPITAL LETTER W WITH GRAVE", "LATIN SMALL LETTER W WITH GRAVE" }, + { 0x1E82, 0x1E83, "LATIN CAPITAL LETTER W WITH ACUTE", "LATIN SMALL LETTER W WITH ACUTE" }, + { 0x1E84, 0x1E85, "LATIN CAPITAL LETTER W WITH DIAERESIS", "LATIN SMALL LETTER W WITH DIAERESIS" }, + { 0x1E86, 0x1E87, "LATIN CAPITAL LETTER W WITH DOT ABOVE", "LATIN SMALL LETTER W WITH DOT ABOVE" }, + { 0x1E88, 0x1E89, "LATIN CAPITAL LETTER W WITH DOT BELOW", "LATIN SMALL LETTER W WITH DOT BELOW" }, + { 0x1E8A, 0x1E8B, "LATIN CAPITAL LETTER X WITH DOT ABOVE", "LATIN SMALL LETTER X WITH DOT ABOVE" }, + { 0x1E8C, 0x1E8D, "LATIN CAPITAL LETTER X5 WITH DIAERESIS", "LATIN SMALL LETTER X WITH DIAERESIS" }, + { 0x1E8E, 0x1E8F, "LATIN CAPITAL LETTER Y WITH DOT ABOVE", "LATIN SMALL LETTER Y WITH DOT ABOVE" }, + { 0x1E90, 0x1E91, "LATIN CAPITAL LETTER Z WITH CIRCUMFLEX", "LATIN SMALL LETTER Z WITH CIRCUMFLEX" }, + { 0x1E92, 0x1E93, "LATIN CAPITAL LETTER Z WITH DOT BELOW", "LATIN SMALL LETTER Z WITH DOT BELOW" }, + { 0x1E94, 0x1E95, "LATIN CAPITAL LETTER Z WITH LINE BELOW", "LATIN SMALL LETTER Z WITH LINE BELOW" }, + { 0x1EA0, 0x1EA1, "LATIN CAPITAL LETTER A WITH DOT BELOW", "LATIN SMALL LETTER A WITH DOT BELOW" }, + { 0x1EA2, 0x1EA3, "LATIN CAPITAL LETTER A WITH HOOK ABOVE", "LATIN SMALL LETTER A WITH HOOK ABOVE" }, + { 0x1EA4, 0x1EA5, "LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE", "LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE" }, + { 0x1EA6, 0x1EA7, "LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE", "LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE" }, + { 0x1EA8, 0x1EA9, "LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE", "LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE" }, + { 0x1EAA, 0x1EAB, "LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE", "LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE" }, + { 0x1EAC, 0x1EAD, "LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW", "LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW" }, + { 0x1EAE, 0x1EAF, "LATIN CAPITAL LETTER A WITH BREVE AND ACUTE", "LATIN SMALL LETTER A WITH BREVE AND ACUTE" }, + { 0x1EB0, 0x1EB1, "LATIN CAPITAL LETTER A WITH BREVE AND GRAVE", "LATIN SMALL LETTER A WITH BREVE AND GRAVE" }, + { 0x1EB2, 0x1EB3, "LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE", "LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE" }, + { 0x1EB4, 0x1EB5, "LATIN CAPITAL LETTER A WITH BREVE AND TILDE", "LATIN SMALL LETTER A WITH BREVE AND TILDE" }, + { 0x1EB6, 0x1EB7, "LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW", "LATIN SMALL LETTER A WITH BREVE AND DOT BELOW" }, + { 0x1EB8, 0x1EB9, "LATIN CAPITAL LETTER E WITH DOT BELOW", "LATIN SMALL LETTER E WITH DOT BELOW" }, + { 0x1EBA, 0x1EBB, "LATIN CAPITAL LETTER E WITH HOOK ABOVE", "LATIN SMALL LETTER E WITH HOOK ABOVE" }, + { 0x1EBC, 0x1EBD, "LATIN CAPITAL LETTER E WITH TILDE", "LATIN SMALL LETTER E WITH TILDE" }, + { 0x1EBE, 0x1EBF, "LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE", "LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE" }, + { 0x1EC0, 0x1EC1, "LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE", "LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE" }, + { 0x1EC2, 0x1EC3, "LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE", "LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE" }, + { 0x1EC4, 0x1EC5, "LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE", "LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE" }, + { 0x1EC6, 0x1EC7, "LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW", "LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW" }, + { 0x1EC8, 0x1EC9, "LATIN CAPITAL LETTER I WITH HOOK ABOVE", "LATIN SMALL LETTER I WITH HOOK ABOVE" }, + { 0x1ECA, 0x1ECB, "LATIN CAPITAL LETTER I WITH DOT BELOW", "LATIN SMALL LETTER I WITH DOT BELOW" }, + { 0x1ECC, 0x1ECD, "LATIN CAPITAL LETTER O WITH DOT BELOW", "LATIN SMALL LETTER O WITH DOT BELOW" }, + { 0x1ECE, 0x1ECF, "LATIN CAPITAL LETTER O WITH HOOK ABOVE", "LATIN SMALL LETTER O WITH HOOK ABOVE" }, + { 0x1ED0, 0x1ED1, "LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE", "LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE" }, + { 0x1ED2, 0x1ED3, "LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE", "LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE" }, + { 0x1ED4, 0x1ED5, "LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE", "LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE" }, + { 0x1ED6, 0x1ED7, "LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE", "LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE" }, + { 0x1ED8, 0x1ED9, "LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW", "LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW" }, + { 0x1EDA, 0x1EDB, "LATIN CAPITAL LETTER O WITH HORN AND ACUTE", "LATIN SMALL LETTER O WITH HORN AND ACUTE" }, + { 0x1EDC, 0x1EDD, "LATIN CAPITAL LETTER O WITH HORN AND GRAVE", "LATIN SMALL LETTER O WITH HORN AND GRAVE" }, + { 0x1EDE, 0x1EDF, "LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE", "LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE" }, + { 0x1EE0, 0x1EE1, "LATIN CAPITAL LETTER O WITH HORN AND TILDE", "LATIN SMALL LETTER O WITH HORN AND TILDE" }, + { 0x1EE2, 0x1EE3, "LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW", "LATIN SMALL LETTER O WITH HORN AND DOT BELOW" }, + { 0x1EE4, 0x1EE5, "LATIN CAPITAL LETTER U WITH DOT BELOW", "LATIN SMALL LETTER U WITH DOT BELOW" }, + { 0x1EE6, 0x1EE7, "LATIN CAPITAL LETTER U WITH HOOK ABOVE", "LATIN SMALL LETTER U WITH HOOK ABOVE" }, + { 0x1EE8, 0x1EE9, "LATIN CAPITAL LETTER U WITH HORN AND ACUTE", "LATIN SMALL LETTER U WITH HORN AND ACUTE" }, + { 0x1EEA, 0x1EEB, "LATIN CAPITAL LETTER U WITH HORN AND GRAVE", "LATIN SMALL LETTER U WITH HORN AND GRAVE" }, + { 0x1EEC, 0x1EED, "LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE", "LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE" }, + { 0x1EEE, 0x1EEF, "LATIN CAPITAL LETTER U WITH HORN AND TILDE", "LATIN SMALL LETTER U WITH HORN AND TILDE" }, + { 0x1EF0, 0x1EF1, "LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW", "LATIN SMALL LETTER U WITH HORN AND DOT BELOW" }, + { 0x1EF2, 0x1EF3, "LATIN CAPITAL LETTER Y WITH GRAVE", "LATIN SMALL LETTER Y WITH GRAVE" }, + { 0x1EF4, 0x1EF5, "LATIN CAPITAL LETTER Y WITH DOT BELOW", "LATIN SMALL LETTER Y WITH DOT BELOW" }, + { 0x1EF6, 0x1EF7, "LATIN CAPITAL LETTER Y WITH HOOK ABOVE", "LATIN SMALL LETTER Y WITH HOOK ABOVE" }, + { 0x1EF8, 0x1EF9, "LATIN CAPITAL LETTER Y WITH TILDE", "LATIN SMALL LETTER Y WITH TILDE" }, + { 0x1F08, 0x1F00, "GREEK CAPITAL LETTER ALPHA WITH PSILI", "GREEK SMALL LETTER ALPHA WITH PSILI" }, + { 0x1F09, 0x1F01, "GREEK CAPITAL LETTER ALPHA WITH DASIA", "GREEK SMALL LETTER ALPHA WITH DASIA" }, + { 0x1F0A, 0x1F02, "GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA", "GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA" }, + { 0x1F0B, 0x1F03, "GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA", "GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA" }, + { 0x1F0C, 0x1F04, "GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA", "GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA" }, + { 0x1F0D, 0x1F05, "GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA", "GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA" }, + { 0x1F0E, 0x1F06, "GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI", "GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI" }, + { 0x1F0F, 0x1F07, "GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI", "GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI" }, + { 0x1F18, 0x1F10, "GREEK CAPITAL LETTER EPSILON WITH PSILI", "GREEK SMALL LETTER EPSILON WITH PSILI" }, + { 0x1F19, 0x1F11, "GREEK CAPITAL LETTER EPSILON WITH DASIA", "GREEK SMALL LETTER EPSILON WITH DASIA" }, + { 0x1F1A, 0x1F12, "GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA", "GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA" }, + { 0x1F1B, 0x1F13, "GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA", "GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA" }, + { 0x1F1C, 0x1F14, "GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA", "GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA" }, + { 0x1F1D, 0x1F15, "GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA", "GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA" }, + { 0x1F28, 0x1F20, "GREEK CAPITAL LETTER ETA WITH PSILI", "GREEK SMALL LETTER ETA WITH PSILI" }, + { 0x1F29, 0x1F21, "GREEK CAPITAL LETTER ETA WITH DASIA", "GREEK SMALL LETTER ETA WITH DASIA" }, + { 0x1F2A, 0x1F22, "GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA", "GREEK SMALL LETTER ETA WITH PSILI AND VARIA" }, + { 0x1F2B, 0x1F23, "GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA", "GREEK SMALL LETTER ETA WITH DASIA AND VARIA" }, + { 0x1F2C, 0x1F24, "GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA", "GREEK SMALL LETTER ETA WITH PSILI AND OXIA" }, + { 0x1F2D, 0x1F25, "GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA", "GREEK SMALL LETTER ETA WITH DASIA AND OXIA" }, + { 0x1F2E, 0x1F26, "GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI", "GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI" }, + { 0x1F2F, 0x1F27, "GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI", "GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI" }, + { 0x1F38, 0x1F30, "GREEK CAPITAL LETTER IOTA WITH PSILI", "GREEK SMALL LETTER IOTA WITH PSILI" }, + { 0x1F39, 0x1F31, "GREEK CAPITAL LETTER IOTA WITH DASIA", "GREEK SMALL LETTER IOTA WITH DASIA" }, + { 0x1F3A, 0x1F32, "GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA", "GREEK SMALL LETTER IOTA WITH PSILI AND VARIA" }, + { 0x1F3B, 0x1F33, "GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA", "GREEK SMALL LETTER IOTA WITH DASIA AND VARIA" }, + { 0x1F3C, 0x1F34, "GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA", "GREEK SMALL LETTER IOTA WITH PSILI AND OXIA" }, + { 0x1F3D, 0x1F35, "GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA", "GREEK SMALL LETTER IOTA WITH DASIA AND OXIA" }, + { 0x1F3E, 0x1F36, "GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI", "GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI" }, + { 0x1F3F, 0x1F37, "GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI", "GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI" }, + { 0x1F48, 0x1F40, "GREEK CAPITAL LETTER OMICRON WITH PSILI", "GREEK SMALL LETTER OMICRON WITH PSILI" }, + { 0x1F49, 0x1F41, "GREEK CAPITAL LETTER OMICRON WITH DASIA", "GREEK SMALL LETTER OMICRON WITH DASIA" }, + { 0x1F4A, 0x1F42, "GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA", "GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA" }, + { 0x1F4B, 0x1F43, "GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA", "GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA" }, + { 0x1F4C, 0x1F44, "GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA", "GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA" }, + { 0x1F4D, 0x1F45, "GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA", "GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA" }, + { 0x1F59, 0x1F51, "GREEK CAPITAL LETTER UPSILON WITH OASIS", "GREEK SMALL LETTER UPSILON WITH DASIA" }, + { 0x1F5B, 0x1F53, "GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA", "GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA" }, + { 0x1F5D, 0x1F55, "GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA", "GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA" }, + { 0x1F5F, 0x1F57, "GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI", "GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI" }, + { 0x1F68, 0x1F60, "GREEK CAPITAL LETTER OMEGA WITH PSILI", "GREEK SMALL LETTER OMEGA WITH PSILI" }, + { 0x1F69, 0x1F61, "GREEK CAPITAL LETTER OMEGA WITH DASIA", "GREEK SMALL LETTER OMEGA WITH DASIA" }, + { 0x1F6A, 0x1F62, "GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA", "GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA" }, + { 0x1F6B, 0x1F63, "GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA", "GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA" }, + { 0x1F6C, 0x1F64, "GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA", "GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA" }, + { 0x1F6D, 0x1F65, "GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA", "GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA" }, + { 0x1F6E, 0x1F66, "GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI", "GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI" }, + { 0x1F6F, 0x1F67, "GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI", "GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI" }, + { 0x1F88, 0x1F80, "GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI", "GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI" }, + { 0x1F89, 0x1F81, "GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI", "GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI" }, + { 0x1F8A, 0x1F82, "GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI", "GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI" }, + { 0x1F8B, 0x1F83, "GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI", "GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI" }, + { 0x1F8C, 0x1F84, "GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMEN", "GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI" }, + { 0x1F8D, 0x1F85, "GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMEN", "GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI" }, + { 0x1F8E, 0x1F86, "GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI", "GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI" }, + { 0x1F8F, 0x1F87, "GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI", "GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI" }, + { 0x1F98, 0x1F90, "GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI", "GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI" }, + { 0x1F99, 0x1F91, "GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI", "GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI" }, + { 0x1F9A, 0x1F92, "GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI", "GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI" }, + { 0x1F9B, 0x1F93, "GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI", "GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI" }, + { 0x1F9C, 0x1F94, "GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI", "GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI" }, + { 0x1F9D, 0x1F95, "GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI", "GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI" }, + { 0x1F9E, 0x1F96, "GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI", "GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI" }, + { 0x1F9F, 0x1F97, "GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI", "GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI" }, + { 0x1FA8, 0x1FA0, "GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI", "GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI" }, + { 0x1FA9, 0x1FA1, "GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI", "GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI" }, + { 0x1FAA, 0x1FA2, "GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI", "GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI" }, + { 0x1FAB, 0x1FA3, "GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI", "GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI" }, + { 0x1FAC, 0x1FA4, "GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI", "GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI" }, + { 0x1FAD, 0x1FA5, "GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI", "GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI" }, + { 0x1FAE, 0x1FA6, "GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI", "GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI" }, + { 0x1FAF, 0x1FA7, "GREEK CAPITAL LETTER OMECA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI", "GREEK SMALL LETTER OMEGA WITH DASIA AND PEPISPOMENI AND YPOGEGRAMMENI" }, + { 0x1FB8, 0x1FB0, "GREEK CAPITAL LETTER ALPHA WITH VRACHY", "GREEK SMALL LETTER ALPHA WITH VRACHY" }, + { 0x1FB9, 0x1FB1, "GREEK CAPITAL LETTER ALPHA WITH MACRON", "GREEK SMALL LETTER ALPHA WITH MACRON" }, + { 0x1FD8, 0x1FD0, "GREEK CAPITAL LETTER IOTA WITH VRACHY", "GREEK SMALL LETTER IOTA WITH VRACHY" }, + { 0x1FD9, 0x1FD1, "GREEK CAPITAL LETTER IOTA WITH MACRON", "GREEK SMALL LETTER IOTA WITH MACRON" }, + { 0x1FE8, 0x1FE0, "GREEK CAPITAL LETTER UPSILON WITH VRACHY", "GREEK SMALL LETTER UPSILON WITH VRACHY" }, + { 0x1FE9, 0x1FE1, "GREEK CAPITAL LETTER UPSILON WITH MACRON", "GREEK SMALL LETTER UPSILON WITH MACRON" }, + { 0x24B6, 0x24D0, "CIRCLED LATIN CAPITAL LETTER A", "CIRCLED LATIN SMALL LETTER A" }, + { 0x24B7, 0x24D1, "CIRCLED LATIN CAPITAL LETTER B", "CIRCLED LATIN SMALL LETTER B" }, + { 0x24B8, 0x24D2, "CIRCLED LATIN CAPITAL LETTER C", "CIRCLED LATIN SMALL LETTER C" }, + { 0x24B9, 0x24D3, "CIRCLED LATIN CAPITAL LETTER D", "CIRCLED LATIN SMALL LETTER D" }, + { 0x24BA, 0x24D4, "CIRCLED LATIN CAPITAL LETTER E", "CIRCLED LATIN SMALL LETTER E" }, + { 0x24BB, 0x24D5, "CIRCLED LATIN CAPITAL LETTER F", "CIRCLED LATIN SMALL LETTER F" }, + { 0x24BC, 0x24D6, "CIRCLED LATIN CAPITAL LETTER G", "CIRCLED LATIN SMALL LETTER G" }, + { 0x24BD, 0x24D7, "CIRCLED LATIN CAPITAL LETTER H", "CIRCLED LATIN SMALL LETTER H" }, + { 0x24BE, 0x24D8, "CIRCLED LATIN CAPITAL LETTER I", "CIRCLED LATIN SMALL LETTER I" }, + { 0x24BF, 0x24D9, "CIRCLED LATIN CAPITAL LETTER J", "CIRCLED LATIN SMALL LETTER J" }, + { 0x24C0, 0x24DA, "CIRCLED LATIN CAPITAL LETTER K", "CIRCLED LATIN SMALL LETTER K" }, + { 0x24C1, 0x24DB, "CIRCLED LATIN CAPITAL LETTER L", "CIRCLED LATIN SMALL LETTER L" }, + { 0x24C2, 0x24DC, "CIRCLED LATIN CAPITAL LETTER M", "CIRCLED LATIN SMALL LETTER M" }, + { 0x24C3, 0x24DD, "CIRCLED LATIN CAPITAL LETTER N", "CIRCLED LATIN SMALL LETTER N" }, + { 0x24C4, 0x24DE, "CIRCLED LATIN CAPITAL LETTER O", "CIRCLED LATIN SMALL LETTER O" }, + { 0x24C5, 0x24DF, "CIRCLED LATIN CAPITAL LETTER P", "CIRCLED LATIN SMALL LETTER P" }, + { 0x24C6, 0x24E0, "CIRCLED LATIN CAPITAL LETTER Q", "CIRCLED LATIN SMALL LETTER Q" }, + { 0x24C7, 0x24E1, "CIRCLED LATIN CAPITAL LETTER R", "CIRCLED LATIN SMALL LETTER R" }, + { 0x24C8, 0x24E2, "CIRCLED LATIN CAPITAL LETTER S", "CIRCLED LATIN SMALL LETTER S" }, + { 0x24C9, 0x24E3, "CIRCLED LATIN CAPITAL LETTER T", "CIRCLED LATIN SMALL LETTER T" }, + { 0x24CA, 0x24E4, "CIRCLED LATIN CAPITAL LETTER U", "CIRCLED LATIN SMALL LETTER U" }, + { 0x24CB, 0x24E5, "CIRCLED LATIN CAPITAL LETTER V", "CIRCLED LATIN SMALL LETTER V" }, + { 0x24CC, 0x24E6, "CIRCLED LATIN CAPITAL LETTER W", "CIRCLED LATIN SMALL LETTER W" }, + { 0x24CD, 0x24E7, "CIRCLED LATIN CAPITAL LETTER X", "CIRCLED LATIN SMALL LETTER X" }, + { 0x24CE, 0x24E8, "CIRCLED LATIN CAPITAL LETTER Y", "CIRCLED LATIN SMALL LETTER Y" }, + { 0x24CF, 0x24E9, "CIRCLED LATIN CAPITAL LETTER Z", "CIRCLED LATIN SMALL LETTER Z" }, + { 0xFF21, 0xFF41, "FULLWIDTH LATIN CAPITAL LETTER A", "FULLWIDTH LATIN SMALL LETTER A" }, + { 0xFF22, 0xFF42, "FULLWIDTH LATIN CAPITAL LETTER B", "FULLWIDTH LATIN SMALL LETTER B" }, + { 0xFF23, 0xFF43, "FULLWIDTH LATIN CAPITAL LETTER C", "FULLWIDTH LATIN SMALL LETTER C" }, + { 0xFF24, 0xFF44, "FULLWIDTH LATIN CAPITAL LETTER D", "FULLWIDTH LATIN SMALL LETTER D" }, + { 0xFF25, 0xFF45, "FULLWIDTH LATIN CAPITAL LETTER E", "FULLWIDTH LATIN SMALL LETTER E" }, + { 0xFF26, 0xFF46, "FULLWIDTH LATIN CAPITAL LETTER F", "FULLWIDTH LATIN SMALL LETTER F" }, + { 0xFF27, 0xFF47, "FULLWIDTH LATIN CAPITAL LETTER G", "FULLWIDTH LATIN SMALL LETTER G" }, + { 0xFF28, 0xFF48, "FULLWIDTH LATIN CAPITAL LETTER H", "FULLWIDTH LATIN SMALL LETTER H" }, + { 0xFF29, 0xFF49, "FULLWIDTH LATIN CAPITAL LETTER I", "FULLWIDTH LATIN SMALL LETTER I" }, + { 0xFF2A, 0xFF4A, "FULLWIDTH LATIN CAPITAL LETTER J", "FULLWIDTH LATIN SMALL LETTER J" }, + { 0xFF2B, 0xFF4B, "FULLWIDTH LATIN CAPITAL LETTER K", "FULLWIDTH LATIN SMALL LETTER K" }, + { 0xFF2C, 0xFF4C, "FULLWIDTH LATIN CAPITAL LETTER L", "FULLWIDTH LATIN SMALL LETTER L" }, + { 0xFF2D, 0xFF4D, "FULLWIDTH LATIN CAPITAL LETTER M", "FULLWIDTH LATIN SMALL LETTER M" }, + { 0xFF2E, 0xFF4E, "FULLWIDTH LATIN CAPITAL LETTER N", "FULLWIDTH LATIN SMALL LETTER N" }, + { 0xFF2F, 0xFF4F, "FULLWIDTH LATIN CAPITAL LETTER O", "FULLWIDTH LATIN SMALL LETTER O" }, + { 0xFF30, 0xFF50, "FULLWIDTH LATIN CAPITAL LETTER P", "FULLWIDTH LATIN SMALL LETTER P" }, + { 0xFF31, 0xFF51, "FULLWIDTH LATIN CAPITAL LETTER Q", "FULLWIDTH LATIN SMALL LETTER Q" }, + { 0xFF32, 0xFF52, "FULLWIDTH LATIN CAPITAL LETTER R", "FULLWIDTH LATIN SMALL LETTER R" }, + { 0xFF33, 0xFF53, "FULLWIDTH LATIN CAPITAL LETTER S", "FULLWIDTH LATIN SMALL LETTER S" }, + { 0xFF34, 0xFF54, "FULLWIDTH LATIN CAPITAL LETTER T", "FULLWIDTH LATIN SMALL LETTER T" }, + { 0xFF35, 0xFF55, "FULLWIDTH LATIN CAPITAL LETTER U", "FULLWIDTH LATIN SMALL LETTER U" }, + { 0xFF36, 0xFF56, "FULLWIDTH LATIN CAPITAL LETTER V", "FULLWIDTH LATIN SMALL LETTER V" }, + { 0xFF37, 0xFF57, "FULLWIDTH LATIN CAPITAL LETTER W", "FULLWIDTH LATIN SMALL LETTER W" }, + { 0xFF38, 0xFF58, "FULLWIDTH LATIN CAPITAL LETTER X", "FULLWIDTH LATIN SMALL LETTER X" }, + { 0xFF39, 0xFF59, "FULLWIDTH LATIN CAPITAL LETTER Y", "FULLWIDTH LATIN SMALL LETTER Y" }, + { 0xFF3A, 0xFF5A, "FULLWIDTH LATIN CAPITAL LETTER Z", "FULLWIDTH LATIN SMALL LETTER Z" }, +}; + + +/* Lowercase code point, Uppercase code point, Lowercase character description, Uppercase character description */ +static UCSTransMap mUCSL2U[] = +{ + { 0x0061, 0x0041, "LATIN SMALL LETTER A", "LATIN CAPITAL LETTER A"}, + { 0x0062, 0x0042, "LATIN SMALL LETTER B", "LATIN CAPITAL LETTER B"}, + { 0x0063, 0x0043, "LATIN SMALL LETTER C", "LATIN CAPITAL LETTER C"}, + { 0x0064, 0x0044, "LATIN SMALL LETTER D", "LATIN CAPITAL LETTER D"}, + { 0x0065, 0x0045, "LATIN SMALL LETTER E", "LATIN CAPITAL LETTER E"}, + { 0x0066, 0x0046, "LATIN SMALL LETTER F", "LATIN CAPITAL LETTER F"}, + { 0x0067, 0x0047, "LATIN SMALL LETTER G", "LATIN CAPITAL LETTER G"}, + { 0x0068, 0x0048, "LATIN SMALL LETTER H", "LATIN CAPITAL LETTER H"}, + { 0x0069, 0x0049, "LATIN SMALL LETTER I", "LATIN CAPITAL LETTER I"}, + { 0x006A, 0x004A, "LATIN SMALL LETTER J", "LATIN CAPITAL LETTER J"}, + { 0x006B, 0x004B, "LATIN SMALL LETTER K", "LATIN CAPITAL LETTER K"}, + { 0x006C, 0x004C, "LATIN SMALL LETTER L", "LATIN CAPITAL LETTER L"}, + { 0x006D, 0x004D, "LATIN SMALL LETTER M", "LATIN CAPITAL LETTER M"}, + { 0x006E, 0x004E, "LATIN SMALL LETTER N", "LATIN CAPITAL LETTER N"}, + { 0x006F, 0x004F, "LATIN SMALL LETTER O", "LATIN CAPITAL LETTER O"}, + { 0x0070, 0x0050, "LATIN SMALL LETTER P", "LATIN CAPITAL LETTER P"}, + { 0x0071, 0x0051, "LATIN SMALL LETTER Q", "LATIN CAPITAL LETTER Q"}, + { 0x0072, 0x0052, "LATIN SMALL LETTER R", "LATIN CAPITAL LETTER R"}, + { 0x0073, 0x0053, "LATIN SMALL LETTER S", "LATIN CAPITAL LETTER S"}, + { 0x0074, 0x0054, "LATIN SMALL LETTER T", "LATIN CAPITAL LETTER T"}, + { 0x0075, 0x0055, "LATIN SMALL LETTER U", "LATIN CAPITAL LETTER U"}, + { 0x0076, 0x0056, "LATIN SMALL LETTER V", "LATIN CAPITAL LETTER V"}, + { 0x0077, 0x0057, "LATIN SMALL LETTER W", "LATIN CAPITAL LETTER W"}, + { 0x0078, 0x0058, "LATIN SMALL LETTER X", "LATIN CAPITAL LETTER X"}, + { 0x0079, 0x0059, "LATIN SMALL LETTER Y", "LATIN CAPITAL LETTER Y"}, + { 0x007A, 0x005A, "LATIN SMALL LETTER Z", "LATIN CAPITAL LETTER Z"}, + { 0x00E0, 0x00C0, "LATIN SMALL LETTER A GRAVE", "LATIN CAPITAL LETTER A GRAVE"}, + { 0x00E1, 0x00C1, "LATIN SMALL LETTER A GRAVE", "LATIN CAPITAL LETTER A ACUTE"}, + { 0x00E2, 0x00C2, "LATIN SMALL LETTER A GRAVE", "LATIN CAPITAL LETTER A CIRCUMFLEX"}, + { 0x00E3, 0x00C3, "LATIN SMALL LETTER A GRAVE", "LATIN CAPITAL LETTER A TILDE"}, + { 0x00E4, 0x00C4, "LATIN SMALL LETTER A GRAVE", "LATIN CAPITAL LETTER A DIAERESIS"}, + { 0x00E5, 0x00C5, "LATIN SMALL LETTER A GRAVE", "LATIN CAPITAL LETTER A RING"}, + { 0x00E6, 0x00C6, "LATIN SMALL LETTER A GRAVE", "LATIN CAPITAL LETTER A E"}, + { 0x00E7, 0x00C7, "LATIN SMALL LETTER A GRAVE", "LATIN CAPITAL LETTER C CEDILLA"}, + { 0x00E8, 0x00C8, "LATIN SMALL LETTER A GRAVE", "LATIN CAPITAL LETTER E GRAVE"}, + { 0x00E9, 0x00C9, "LATIN SMALL LETTER A GRAVE", "LATIN CAPITAL LETTER E ACUTE"}, + { 0x00EA, 0x00CA, "LATIN SMALL LETTER E CIRCUMFLEX", "LATIN CAPITAL LETTER E CIRCUMFLEX"}, + { 0x00EB, 0x00CB, "LATIN SMALL LETTER E DIAERESIS", "LATIN CAPITAL LETTER E DIAERESIS"}, + { 0x00EC, 0x00CC, "LATIN SMALL LETTER I GRAVE", "LATIN CAPITAL LETTER I GRAVE"}, + { 0x00ED, 0x00CD, "LATIN SMALL LETTER I ACUTE", "LATIN CAPITAL LETTER I ACUTE"}, + { 0x00EE, 0x00CE, "LATIN SMALL LETTER I CIRCUMFLEX", "LATIN CAPITAL LETTER I CIRCUMFLEX"}, + { 0x00EF, 0x00CF, "LATIN SMALL LETTER I DIAERESIS", "LATIN CAPITAL LETTER I DIAERESIS"}, + { 0x00F0, 0x00D0, "LATIN SMALL LETTER ETH", "LATIN CAPITAL LETTER ETH"}, + { 0x00F1, 0x00D1, "LATIN SMALL LETTER N TILDE", "LATIN CAPITAL LETTER N TILDE"}, + { 0x00F2, 0x00D2, "LATIN SMALL LETTER O GRAVE", "LATIN CAPITAL LETTER O GRAVE"}, + { 0x00F3, 0x00D3, "LATIN SMALL LETTER O ACUTE", "LATIN CAPITAL LETTER O ACUTE"}, + { 0x00F4, 0x00D4, "LATIN SMALL LETTER O CIRCUMFLEX", "LATIN CAPITAL LETTER O CIRCUMFLEX"}, + { 0x00F5, 0x00D5, "LATIN SMALL LETTER O TILDE", "LATIN CAPITAL LETTER O TILDE"}, + { 0x00F6, 0x00D6, "LATIN SMALL LETTER O DIAERESIS", "LATIN CAPITAL LETTER O DIAERESIS"}, + { 0x00F8, 0x00D8, "LATIN SMALL LETTER O SLASH", "LATIN CAPITAL LETTER O SLASH"}, + { 0x00F9, 0x00D9, "LATIN SMALL LETTER U GRAVE", "LATIN CAPITAL LETTER U GRAVE"}, + { 0x00FA, 0x00DA, "LATIN SMALL LETTER U ACUTE", "LATIN CAPITAL LETTER U ACUTE"}, + { 0x00FB, 0x00DB, "LATIN SMALL LETTER U CIRCUMFLEX", "LATIN CAPITAL LETTER U CIRCUMFLEX"}, + { 0x00FC, 0x00DC, "LATIN SMALL LETTER U DIAERESIS", "LATIN CAPITAL LETTER U DIAERESIS"}, + { 0x00FD, 0x00DD, "LATIN SMALL LETTER Y ACUTE", "LATIN CAPITAL LETTER Y ACUTE"}, + { 0x00FE, 0x00DE, "LATIN SMALL LETTER THORN", "LATIN CAPITAL LETTER THORN"}, + { 0x00FF, 0x0178, "LATIN SMALL LETTER Y DIAERESIS", "LATIN CAPITAL LETTER Y WITH DIAERESIS"}, + { 0x0101, 0x0100, "LATIN SMALL LETTER A WITH MACRON", "LATIN CAPITAL LETTER A WITH MACRON"}, + { 0x0103, 0x0102, "LATIN SMALL LETTER A WITH BREVE", "LATIN CAPITAL LETTER A WITH BREVE"}, + { 0x0105, 0x0104, "LATIN SMALL LETTER A WITH OGONEK", "LATIN CAPITAL LETTER A WITH OGONEK"}, + { 0x0107, 0x0106, "LATIN SMALL LETTER C WITH ACUTE", "LATIN CAPITAL LETTER C WITH ACUTE"}, + { 0x0109, 0x0108, "LATIN SMALL LETTER C WITH CIRCUMFLEX", "LATIN CAPITAL LETTER C WITH CIRCUMFLEX"}, + { 0x010B, 0x010A, "LATIN SMALL LETTER C WITH DOT ABOVE", "LATIN CAPITAL LETTER C WITH DOT ABOVE"}, + { 0x010D, 0x010C, "LATIN SMALL LETTER C WITH CARON", "LATIN CAPITAL LETTER C WITH CARON"}, + { 0x010F, 0x010E, "LATIN SMALL LETTER D WITH CARON", "LATIN CAPITAL LETTER D WITH CARON"}, + { 0x0111, 0x0110, "LATIN SMALL LETTER D WITH STROKE", "LATIN CAPITAL LETTER D WITH STROKE"}, + { 0x0113, 0x0112, "LATIN SMALL LETTER E WITH MACRON", "LATIN CAPITAL LETTER E WITH MACRON"}, + { 0x0115, 0x0114, "LATIN SMALL LETTER E WITH BREVE", "LATIN CAPITAL LETTER E WITH BREVE"}, + { 0x0117, 0x0116, "LATIN SMALL LETTER E WITH DOT ABOVE", "LATIN CAPITAL LETTER E WITH DOT ABOVE"}, + { 0x0119, 0x0118, "LATIN SMALL LETTER E WITH OGONEK", "LATIN CAPITAL LETTER E WITH OGONEK"}, + { 0x011B, 0x011A, "LATIN SMALL LETTER E WITH CARON", "LATIN CAPITAL LETTER E WITH CARON"}, + { 0x011D, 0x011C, "LATIN SMALL LETTER G WITH CIRCUMFLEX", "LATIN CAPITAL LETTER G WITH CIRCUMFLEX"}, + { 0x011F, 0x011E, "LATIN SMALL LETTER G WITH BREVE", "LATIN CAPITAL LETTER G WITH BREVE"}, + { 0x0121, 0x0120, "LATIN SMALL LETTER G WITH DOT ABOVE", "LATIN CAPITAL LETTER G WITH DOT ABOVE"}, + { 0x0123, 0x0122, "LATIN SMALL LETTER G WITH CEDILLA", "LATIN CAPITAL LETTER G WITH CEDILLA"}, + { 0x0125, 0x0124, "LATIN SMALL LETTER H WITH CIRCUMFLEX", "LATIN CAPITAL LETTER H WITH CIRCUMFLEX"}, + { 0x0127, 0x0126, "LATIN SMALL LETTER H WITH STROKE", "LATIN CAPITAL LETTER H WITH STROKE"}, + { 0x0129, 0x0128, "LATIN SMALL LETTER I WITH TILDE", "LATIN CAPITAL LETTER I WITH TILDE"}, + { 0x012B, 0x012A, "LATIN SMALL LETTER I WITH MACRON", "LATIN CAPITAL LETTER I WITH MACRON"}, + { 0x012D, 0x012C, "LATIN SMALL LETTER I WITH BREVE", "LATIN CAPITAL LETTER I WITH BREVE"}, + { 0x012F, 0x012E, "LATIN SMALL LETTER I WITH OGONEK", "LATIN CAPITAL LETTER I WITH OGONEK"}, + { 0x0131, 0x0049, "LATIN SMALL LETTER DOTLESS I", "LATIN CAPITAL LETTER I"}, + { 0x0133, 0x0132, "LATIN SMALL LIGATURE IJ", "LATIN CAPITAL LIGATURE IJ"}, + { 0x0135, 0x0134, "LATIN SMALL LETTER J WITH CIRCUMFLEX", "LATIN CAPITAL LETTER J WITH CIRCUMFLEX"}, + { 0x0137, 0x0136, "LATIN SMALL LETTER K WITH CEDILLA", "LATIN CAPITAL LETTER K WITH CEDILLA"}, + { 0x013A, 0x0139, "LATIN SMALL LETTER L WITH ACUTE", "LATIN CAPITAL LETTER L WITH ACUTE"}, + { 0x013C, 0x013B, "LATIN SMALL LETTER L WITH CEDILLA", "LATIN CAPITAL LETTER L WITH CEDILLA"}, + { 0x013E, 0x013D, "LATIN SMALL LETTER L WITH CARON", "LATIN CAPITAL LETTER L WITH CARON"}, + { 0x0140, 0x013F, "LATIN SMALL LETTER L WITH MIDDLE DOT", "LATIN CAPITAL LETTER L WITH MIDDLE DOT"}, + { 0x0142, 0x0141, "LATIN SMALL LETTER L WITH STROKE", "LATIN CAPITAL LETTER L WITH STROKE"}, + { 0x0144, 0x0143, "LATIN SMALL LETTER N WITH ACUTE", "LATIN CAPITAL LETTER N WITH ACUTE"}, + { 0x0146, 0x0145, "LATIN SMALL LETTER N WITH CEDILLA", "LATIN CAPITAL LETTER N WITH CEDILLA"}, + { 0x0148, 0x0147, "LATIN SMALL LETTER N WITH CARON", "LATIN CAPITAL LETTER N WITH CARON"}, + { 0x014B, 0x014A, "LATIN SMALL LETTER ENG (SAMI)", "LATIN CAPITAL LETTER ENG (SAMI)"}, + { 0x014D, 0x014C, "LATIN SMALL LETTER O WITH MACRON", "LATIN CAPITAL LETTER O WITH MACRON"}, + { 0x014F, 0x014E, "LATIN SMALL LETTER O WITH BREVE", "LATIN CAPITAL LETTER O WITH BREVE"}, + { 0x0151, 0x0150, "LATIN SMALL LETTER O WITH DOUBLE ACUTE", "LATIN CAPITAL LETTER O WITH DOUBLE ACUTE"}, + { 0x0153, 0x0152, "LATIN SMALL LIGATURE OE", "LATIN CAPITAL LIGATURE OE"}, + { 0x0155, 0x0154, "LATIN SMALL LETTER R WITH ACUTE", "LATIN CAPITAL LETTER R WITH ACUTE"}, + { 0x0157, 0x0156, "LATIN SMALL LETTER R WITH CEDILLA", "LATIN CAPITAL LETTER R WITH CEDILLA"}, + { 0x0159, 0x0158, "LATIN SMALL LETTER R WITH CARON", "LATIN CAPITAL LETTER R WITH CARON"}, + { 0x015B, 0x015A, "LATIN SMALL LETTER S WITH ACUTE", "LATIN CAPITAL LETTER S WITH ACUTE"}, + { 0x015D, 0x015C, "LATIN SMALL LETTER S WITH CIRCUMFLEX", "LATIN CAPITAL LETTER S WITH CIRCUMFLEX"}, + { 0x015F, 0x015E, "LATIN SMALL LETTER S WITH CEDILLA", "LATIN CAPITAL LETTER S WITH CEDILLA"}, + { 0x0161, 0x0160, "LATIN SMALL LETTER S WITH CARON", "LATIN CAPITAL LETTER S WITH CARON"}, + { 0x0163, 0x0162, "LATIN SMALL LETTER T WITH CEDILLA", "LATIN CAPITAL LETTER T WITH CEDILLA"}, + { 0x0165, 0x0164, "LATIN SMALL LETTER T WITH CARON", "LATIN CAPITAL LETTER T WITH CARON"}, + { 0x0167, 0x0166, "LATIN SMALL LETTER T WITH STROKE", "LATIN CAPITAL LETTER T WITH STROKE"}, + { 0x0169, 0x0168, "LATIN SMALL LETTER U WITH TILDE", "LATIN CAPITAL LETTER U WITH TILDE"}, + { 0x016B, 0x016A, "LATIN SMALL LETTER U WITH MACRON", "LATIN CAPITAL LETTER U WITH MACRON"}, + { 0x016D, 0x016C, "LATIN SMALL LETTER U WITH BREVE", "LATIN CAPITAL LETTER U WITH BREVE"}, + { 0x016F, 0x016E, "LATIN SMALL LETTER U WITH RING ABOVE", "LATIN CAPITAL LETTER U WITH RING ABOVE"}, + { 0x0171, 0x0170, "LATIN SMALL LETTER U WITH DOUBLE ACUTE", "LATIN CAPITAL LETTER U WITH DOUBLE ACUTE"}, + { 0x0173, 0x0172, "LATIN SMALL LETTER U WITH OGONEK", "LATIN CAPITAL LETTER U WITH OGONEK"}, + { 0x0175, 0x0174, "LATIN SMALL LETTER W WITH CIRCUMFLEX", "LATIN CAPITAL LETTER W WITH CIRCUMFLEX"}, + { 0x0177, 0x0176, "LATIN SMALL LETTER Y WITH CIRCUMFLEX", "LATIN CAPITAL LETTER Y WITH CIRCUMFLEX"}, + { 0x017A, 0x0179, "LATIN SMALL LETTER Z WITH ACUTE", "LATIN CAPITAL LETTER Z WITH ACUTE"}, + { 0x017C, 0x017B, "LATIN SMALL LETTER Z WITH DOT ABOVE", "LATIN CAPITAL LETTER Z WITH DOT ABOVE"}, + { 0x017E, 0x017D, "LATIN SMALL LETTER Z WITH CARON", "LATIN CAPITAL LETTER Z WITH CARON"}, + { 0x0183, 0x0182, "LATIN SMALL LETTER B WITH TOPBAR", "LATIN CAPITAL LETTER B WITH TOPBAR"}, + { 0x0185, 0x0184, "LATIN SMALL LETTER TONE SIX", "LATIN CAPITAL LETTER TONE SIX"}, + { 0x0188, 0x0187, "LATIN SMALL LETTER C WITH HOOK", "LATIN CAPITAL LETTER C WITH HOOK"}, + { 0x018C, 0x018B, "LATIN SMALL LETTER D WITH TOPBAR", "LATIN CAPITAL LETTER D WITH TOPBAR"}, + { 0x0192, 0x0191, "LATIN SMALL LETTER F WITH HOOK", "LATIN CAPITAL LETTER F WITH HOOK"}, + { 0x0199, 0x0198, "LATIN SMALL LETTER K WITH HOOK", "LATIN CAPITAL LETTER K WITH HOOK"}, + { 0x01A1, 0x01A0, "LATIN SMALL LETTER O WITH HORN", "LATIN CAPITAL LETTER O WITH HORN"}, + { 0x01A3, 0x01A2, "LATIN SMALL LETTER OI", "LATIN CAPITAL LETTER OI"}, + { 0x01A5, 0x01A4, "LATIN SMALL LETTER P WITH HOOK", "LATIN CAPITAL LETTER P WITH HOOK"}, + { 0x01A8, 0x01A7, "LATIN SMALL LETTER TONE TWO", "LATIN CAPITAL LETTER TONE TWO"}, + { 0x01AD, 0x01AC, "LATIN SMALL LETTER T WITH HOOK", "LATIN CAPITAL LETTER T WITH HOOK"}, + { 0x01B0, 0x01AF, "LATIN SMALL LETTER U WITH HORN", "LATIN CAPITAL LETTER U WITH HORN"}, + { 0x01B4, 0x01B3, "LATIN SMALL LETTER Y WITH HOOK", "LATIN CAPITAL LETTER Y WITH HOOK"}, + { 0x01B6, 0x01B5, "LATIN SMALL LETTER Z WITH STROKE", "LATIN CAPITAL LETTER Z WITH STROKE"}, + { 0x01B9, 0x01B8, "LATIN SMALL LETTER EZH REVERSED", "LATIN CAPITAL LETTER EZH REVERSED"}, + { 0x01BD, 0x01BC, "LATIN SMALL LETTER TONE FIVE", "LATIN CAPITAL LETTER TONE FIVE"}, + { 0x01C6, 0x01C4, "LATIN SMALL LETTER DZ WITH CARON", "LATIN CAPITAL LETTER DZ WITH CARON"}, + { 0x01C9, 0x01C7, "LATIN SMALL LETTER LJ", "LATIN CAPITAL LETTER LJ"}, + { 0x01CC, 0x01CA, "LATIN SMALL LETTER NJ", "LATIN CAPITAL LETTER NJ"}, + { 0x01CE, 0x01CD, "LATIN SMALL LETTER A WITH CARON", "LATIN CAPITAL LETTER A WITH CARON"}, + { 0x01D0, 0x01CF, "LATIN SMALL LETTER I WITH CARON", "LATIN CAPITAL LETTER I WITH CARON"}, + { 0x01D2, 0x01D1, "LATIN SMALL LETTER O WITH CARON", "LATIN CAPITAL LETTER O WITH CARON"}, + { 0x01D4, 0x01D3, "LATIN SMALL LETTER U WITH CARON", "LATIN CAPITAL LETTER U WITH CARON"}, + { 0x01D6, 0x01D5, "LATIN SMALL LETTER U WITH DIAERESIS AND MACRON", "LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON"}, + { 0x01D8, 0x01D7, "LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE", "LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE"}, + { 0x01DA, 0x01D9, "LATIN SMALL LETTER U WITH DIAERESIS AND CARON", "LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON"}, + { 0x01DC, 0x01DB, "LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE", "LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE"}, + { 0x01DF, 0x01DE, "LATIN SMALL LETTER A WITH DIAERESIS AND MACRON", "LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON"}, + { 0x01E1, 0x01E0, "LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON", "LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON"}, + { 0x01E3, 0x01E2, "LATIN SMALL LIGATURE AE WITH MACRON", "LATIN CAPITAL LIGATURE AE MTH MACRON"}, + { 0x01E5, 0x01E4, "LATIN SMALL LETTER G WITH STROKE", "LATIN CAPITAL LETTER G WITH STROKE"}, + { 0x01E7, 0x01E6, "LATIN SMALL LETTER G WITH CARON", "LATIN CAPITAL LETTER G WITH CARON"}, + { 0x01E9, 0x01E8, "LATIN SMALL LETTER K WITH CARON", "LATIN CAPITAL LETTER K WITH CARON"}, + { 0x01EB, 0x01EA, "LATIN SMALL LETTER O WITH OGONEK", "LATIN CAPITAL LETTER O WITH OGONEK"}, + { 0x01ED, 0x01EC, "LATIN SMALL LETTER O WITH OGONEK AND MACRON", "LATIN CAPITAL LETTER O WITH OGONEK AND MACRON"}, + { 0x01EF, 0x01EE, "LATIN SMALL LETTER EZH WITH CARON", "LATIN CAPITAL LETTER EZH WITH CARON"}, + { 0x01F3, 0x01F1, "LATIN SMALL LETTER DZ", "LATIN CAPITAL LETTER DZ"}, + { 0x01F5, 0x01F4, "LATIN SMALL LETTER G WITH ACUTE", "LATIN CAPITAL LETTER G WITH ACUTE"}, + { 0x01FB, 0x01FA, "LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE", "LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE"}, + { 0x01FD, 0x01FC, "LATIN SMALL LIGATURE AE WITH ACUTE", "LATIN CAPITAL LIGATURE AE WITH ACUTE"}, + { 0x01FF, 0x01FE, "LATIN SMALL LETTER O WITH STROKE AND ACUTE", "LATIN CAPITAL LETTER O WITH STROKE AND ACUTE"}, + { 0x0201, 0x0200, "LATIN SMALL LETTER A WITH DOUBLE GRAVE", "LATIN CAPITAL LETTER A WITH DOUBLE GRAVE"}, + { 0x0203, 0x0202, "LATIN SMALL LETTER A WITH INVERTED BREVE", "LATIN CAPITAL LETTER A WITH INVERTED BREVE"}, + { 0x0205, 0x0204, "LATIN SMALL LETTER E WITH DOUBLE GRAVE", "LATIN CAPITAL LETTER E WITH DOUBLE GRAVE"}, + { 0x0207, 0x0206, "LATIN SMALL LETTER E WITH INVERTED BREVE", "LATIN CAPITAL LETTER E WITH INVERTED BREVE"}, + { 0x0209, 0x0208, "LATIN SMALL LETTER I WITH DOUBLE GRAVE", "LATIN CAPITAL LETTER I WITH DOUBLE GRAVE"}, + { 0x020B, 0x020A, "LATIN SMALL LETTER I WITH INVERTED BREVE", "LATIN CAPITAL LETTER I WITH INVERTED BREVE"}, + { 0x020D, 0x020C, "LATIN SMALL LETTER O WITH DOUBLE GRAVE", "LATIN CAPITAL LETTER O WITH DOUBLE GRAVE"}, + { 0x020F, 0x020E, "LATIN SMALL LETTER O WITH INVERTED BREVE", "LATIN CAPITAL LETTER O WITH INVERTED BREVE"}, + { 0x0211, 0x0210, "LATIN SMALL LETTER R WITH DOUBLE GRAVE", "LATIN CAPITAL LETTER R WITH DOUBLE GRAVE"}, + { 0x0213, 0x0212, "LATIN SMALL LETTER R WITH INVERTED BREVE", "LATIN CAPITAL LETTER R WITH INVERTED BREVE"}, + { 0x0215, 0x0214, "LATIN SMALL LETTER U WITH DOUBLE GRAVE", "LATIN CAPITAL LETTER U WITH DOUBLE GRAVE"}, + { 0x0217, 0x0216, "LATIN SMALL LETTER U WITH INVERTED BREVE", "LATIN CAPITAL LETTER U WITH INVERTED BREVE"}, + { 0x0253, 0x0181, "LATIN SMALL LETTER B WITH HOOK", "LATIN CAPITAL LETTER B WITH HOOK"}, + { 0x0254, 0x0186, "LATIN SMALL LETTER OPEN O", "LATIN CAPITAL LETTER OPEN O"}, + { 0x0257, 0x018A, "LATIN SMALL LETTER D WITH HOOK", "LATIN CAPITAL LETTER D WITH HOOK"}, + { 0x0258, 0x018E, "LATIN SMALL LETTER REVERSED E", "LATIN CAPITAL LETTER REVERSED E"}, + { 0x0259, 0x018F, "LATIN SMALL LETTER SCHWA", "LATIN CAPITAL LETTER SCHWA"}, + { 0x025B, 0x0190, "LATIN SMALL LETTER OPEN E", "LATIN CAPITAL LETTER OPEN E"}, + { 0x0260, 0x0193, "LATIN SMALL LETTER G WITH HOOK", "LATIN CAPITAL LETTER G WITH HOOK"}, + { 0x0263, 0x0194, "LATIN SMALL LETTER GAMMA", "LATIN CAPITAL LETTER GAMMA"}, + { 0x0268, 0x0197, "LATIN SMALL LETTER I WITH STROKE", "LATIN CAPITAL LETTER I WITH STROKE"}, + { 0x0269, 0x0196, "LATIN SMALL LETTER IOTA", "LATIN CAPITAL LETTER IOTA"}, + { 0x026F, 0x019C, "LATIN SMALL LETTER TURNED M", "LATIN CAPITAL LETTER TURNED M"}, + { 0x0272, 0x019D, "LATIN SMALL LETTER N WITH LEFT HOOK", "LATIN CAPITAL LETTER N WITH LEFT HOOK"}, + { 0x0275, 0x019F, "LATIN SMALL LETTER BARRED O", "LATIN CAPITAL LETTER O WITH MIDDLE TILDE"}, + { 0x0283, 0x01A9, "LATIN SMALL LETTER ESH", "LATIN CAPITAL LETTER ESH"}, + { 0x0288, 0x01AE, "LATIN SMALL LETTER T WITH RETROFLEX HOOK", "LATIN CAPITAL LETTER T WITH RETROFLEX HOOK"}, + { 0x028A, 0x01B1, "LATIN SMALL LETTER UPSILON", "LATIN CAPITAL LETTER UPSILON"}, + { 0x028B, 0x01B2, "LATIN SMALL LETTER V WITH HOOK", "LATIN CAPITAL LETTER V WITH HOOK"}, + { 0x0292, 0x01B7, "LATIN SMALL LETTER EZH", "LATIN CAPITAL LETTER EZH"}, + { 0x03AC, 0x0386, "GREEK SMALL LETTER ALPHA WITH TONOS", "GREEK CAPITAL LETTER ALPHA WITH TONOS"}, + { 0x03AD, 0x0388, "GREEK SMALL LETTER EPSILON WITH TONOS", "GREEK CAPITAL LETTER EPSILON WITH TONOS"}, + { 0x03AE, 0x0389, "GREEK SMALL LETTER ETA WITH TONOS", "GREEK CAPITAL LETTER ETA WITH TONOS"}, + { 0x03AF, 0x038A, "GREEK SMALL LETTER IOTA WITH TONOS", "GREEK CAPITAL LETTER IOTA WITH TONOS"}, + { 0x03B1, 0x0391, "GREEK SMALL LETTER ALPHA", "GREEK CAPITAL LETTER ALPHA"}, + { 0x03B2, 0x0392, "GREEK SMALL LETTER BETA", "GREEK CAPITAL LETTER BETA"}, + { 0x03B3, 0x0393, "GREEK SMALL LETTER GAMMA", "GREEK CAPITAL LETTER GAMMA"}, + { 0x03B4, 0x0394, "GREEK SMALL LETTER DELTA", "GREEK CAPITAL LETTER DELTA"}, + { 0x03B5, 0x0395, "GREEK SMALL LETTER EPSILON", "GREEK CAPITAL LETTER EPSILON"}, + { 0x03B6, 0x0396, "GREEK SMALL LETTER ZETA", "GREEK CAPITAL LETTER ZETA"}, + { 0x03B7, 0x0397, "GREEK SMALL LETTER ETA", "GREEK CAPITAL LETTER ETA"}, + { 0x03B8, 0x0398, "GREEK SMALL LETTER THETA", "GREEK CAPITAL LETTER THETA"}, + { 0x03B9, 0x0399, "GREEK SMALL LETTER IOTA", "GREEK CAPITAL LETTER IOTA"}, + { 0x03BA, 0x039A, "GREEK SMALL LETTER KAPPA", "GREEK CAPITAL LETTER KAPPA"}, + { 0x03BB, 0x039B, "GREEK SMALL LETTER LAMDA", "GREEK CAPITAL LETTER LAMDA"}, + { 0x03BC, 0x039C, "GREEK SMALL LETTER MU", "GREEK CAPITAL LETTER MU"}, + { 0x03BD, 0x039D, "GREEK SMALL LETTER NU", "GREEK CAPITAL LETTER NU"}, + { 0x03BE, 0x039E, "GREEK SMALL LETTER XI", "GREEK CAPITAL LETTER XI"}, + { 0x03BF, 0x039F, "GREEK SMALL LETTER OMICRON", "GREEK CAPITAL LETTER OMICRON"}, + { 0x03C0, 0x03A0, "GREEK SMALL LETTER PI", "GREEK CAPITAL LETTER PI"}, + { 0x03C1, 0x03A1, "GREEK SMALL LETTER RHO", "GREEK CAPITAL LETTER RHO"}, + { 0x03C3, 0x03A3, "GREEK SMALL LETTER SIGMA", "GREEK CAPITAL LETTER SIGMA"}, + { 0x03C4, 0x03A4, "GREEK SMALL LETTER TAU", "GREEK CAPITAL LETTER TAU"}, + { 0x03C5, 0x03A5, "GREEK SMALL LETTER UPSILON", "GREEK CAPITAL LETTER UPSILON"}, + { 0x03C6, 0x03A6, "GREEK SMALL LETTER PHI", "GREEK CAPITAL LETTER PHI"}, + { 0x03C7, 0x03A7, "GREEK SMALL LETTER CHI", "GREEK CAPITAL LETTER CHI"}, + { 0x03C8, 0x03A8, "GREEK SMALL LETTER PSI", "GREEK CAPITAL LETTER PSI"}, + { 0x03C9, 0x03A9, "GREEK SMALL LETTER OMEGA", "GREEK CAPITAL LETTER OMEGA"}, + { 0x03CA, 0x03AA, "GREEK SMALL LETTER IOTA WITH DIALYTIKA", "GREEK CAPITAL LETTER IOTA WITH DIALYTIKA"}, + { 0x03CB, 0x03AB, "GREEK SMALL LETTER UPSILON WITH DIALYTIKA", "GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA"}, + { 0x03CC, 0x038C, "GREEK SMALL LETTER OMICRON WITH TONOS", "GREEK CAPITAL LETTER OMICRON WITH TONOS"}, + { 0x03CD, 0x038E, "GREEK SMALL LETTER UPSILON WITH TONOS", "GREEK CAPITAL LETTER UPSILON WITH TONOS"}, + { 0x03CE, 0x038F, "GREEK SMALL LETTER OMEGA WITH TONOS", "GREEK CAPITAL LETTER OMEGA WITH TONOS"}, + { 0x03E3, 0x03E2, "COPTIC SMALL LETTER SHEI", "COPTIC CAPITAL LETTER SHEI"}, + { 0x03E5, 0x03E4, "COPTIC SMALL LETTER FEI", "COPTIC CAPITAL LETTER FEI"}, + { 0x03E7, 0x03E6, "COPTIC SMALL LETTER KHEI", "COPTIC CAPITAL LETTER KHEI"}, + { 0x03E9, 0x03E8, "COPTIC SMALL LETTER HORI", "COPTIC CAPITAL LETTER HORI"}, + { 0x03EB, 0x03EA, "COPTIC SMALL LETTER GANGIA", "COPTIC CAPITAL LETTER GANGIA"}, + { 0x03ED, 0x03EC, "COPTIC SMALL LETTER SHIMA", "COPTIC CAPITAL LETTER SHIMA"}, + { 0x03EF, 0x03EE, "COPTIC SMALL LETTER DEI", "COPTIC CAPITAL LETTER DEI"}, + { 0x0430, 0x0410, "CYRILLIC SMALL LETTER A", "CYRILLIC CAPITAL LETTER A"}, + { 0x0431, 0x0411, "CYRILLIC SMALL LETTER BE", "CYRILLIC CAPITAL LETTER BE"}, + { 0x0432, 0x0412, "CYRILLIC SMALL LETTER VE", "CYRILLIC CAPITAL LETTER VE"}, + { 0x0433, 0x0413, "CYRILLIC SMALL LETTER GHE", "CYRILLIC CAPITAL LETTER GHE"}, + { 0x0434, 0x0414, "CYRILLIC SMALL LETTER DE", "CYRILLIC CAPITAL LETTER DE"}, + { 0x0435, 0x0415, "CYRILLIC SMALL LETTER IE", "CYRILLIC CAPITAL LETTER IE"}, + { 0x0436, 0x0416, "CYRILLIC SMALL LETTER ZHE", "CYRILLIC CAPITAL LETTER ZHE"}, + { 0x0437, 0x0417, "CYRILLIC SMALL LETTER ZE", "CYRILLIC CAPITAL LETTER ZE"}, + { 0x0438, 0x0418, "CYRILLIC SMALL LETTER I", "CYRILLIC CAPITAL LETTER I"}, + { 0x0439, 0x0419, "CYRILLIC SMALL LETTER SHORT I", "CYRILLIC CAPITAL LETTER SHORT I"}, + { 0x043A, 0x041A, "CYRILLIC SMALL LETTER KA", "CYRILLIC CAPITAL LETTER KA"}, + { 0x043B, 0x041B, "CYRILLIC SMALL LETTER EL", "CYRILLIC CAPITAL LETTER EL"}, + { 0x043C, 0x041C, "CYRILLIC SMALL LETTER EM", "CYRILLIC CAPITAL LETTER EM"}, + { 0x043D, 0x041D, "CYRILLIC SMALL LETTER EN", "CYRILLIC CAPITAL LETTER EN"}, + { 0x043E, 0x041E, "CYRILLIC SMALL LETTER O", "CYRILLIC CAPITAL LETTER O"}, + { 0x043F, 0x041F, "CYRILLIC SMALL LETTER PE", "CYRILLIC CAPITAL LETTER PE"}, + { 0x0440, 0x0420, "CYRILLIC SMALL LETTER ER", "CYRILLIC CAPITAL LETTER ER"}, + { 0x0441, 0x0421, "CYRILLIC SMALL LETTER ES", "CYRILLIC CAPITAL LETTER ES"}, + { 0x0442, 0x0422, "CYRILLIC SMALL LETTER TE", "CYRILLIC CAPITAL LETTER TE"}, + { 0x0443, 0x0423, "CYRILLIC SMALL LETTER U", "CYRILLIC CAPITAL LETTER U"}, + { 0x0444, 0x0424, "CYRILLIC SMALL LETTER EF", "CYRILLIC CAPITAL LETTER EF"}, + { 0x0445, 0x0425, "CYRILLIC SMALL LETTER HA", "CYRILLIC CAPITAL LETTER HA"}, + { 0x0446, 0x0426, "CYRILLIC SMALL LETTER TSE", "CYRILLIC CAPITAL LETTER TSE"}, + { 0x0447, 0x0427, "CYRILLIC SMALL LETTER CHE", "CYRILLIC CAPITAL LETTER CHE"}, + { 0x0448, 0x0428, "CYRILLIC SMALL LETTER SHA", "CYRILLIC CAPITAL LETTER SHA"}, + { 0x0449, 0x0429, "CYRILLIC SMALL LETTER SHCHA", "CYRILLIC CAPITAL LETTER SHCHA"}, + { 0x044A, 0x042A, "CYRILLIC SMALL LETTER HARD SIGN", "CYRILLIC CAPITAL LETTER HARD SIGN"}, + { 0x044B, 0x042B, "CYRILLIC SMALL LETTER YERU", "CYRILLIC CAPITAL LETTER YERU"}, + { 0x044C, 0x042C, "CYRILLIC SMALL LETTER SOFT SIGN", "CYRILLIC CAPITAL LETTER SOFT SIGN"}, + { 0x044D, 0x042D, "CYRILLIC SMALL LETTER E", "CYRILLIC CAPITAL LETTER E"}, + { 0x044E, 0x042E, "CYRILLIC SMALL LETTER YU", "CYRILLIC CAPITAL LETTER YU"}, + { 0x044F, 0x042F, "CYRILLIC SMALL LETTER YA", "CYRILLIC CAPITAL LETTER YA"}, + { 0x0451, 0x0401, "CYRILLIC SMALL LETTER IO", "CYRILLIC CAPITAL LETTER IO"}, + { 0x0452, 0x0402, "CYRILLIC SMALL LETTER DJE (SERBOCROATIAN)", "CYRILLIC CAPITAL LETTER DJE (SERBOCROATIAN)"}, + { 0x0453, 0x0403, "CYRILLIC SMALL LETTER GJE", "CYRILLIC CAPITAL LETTER GJE"}, + { 0x0454, 0x0404, "CYRILLIC SMALL LETTER UKRAINIAN IE", "CYRILLIC CAPITAL LETTER UKRAINIAN IE"}, + { 0x0455, 0x0405, "CYRILLIC SMALL LETTER DZE", "CYRILLIC CAPITAL LETTER DZE"}, + { 0x0456, 0x0406, "CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I", "CYRILLIC CAPITAL LETTER BYELORUSSIAN_UKRAINIAN I"}, + { 0x0457, 0x0407, "CYRILLIC SMALL LETTER YI (UKRAINIAN)", "CYRILLIC CAPITAL LETTER YI (UKRAINIAN)"}, + { 0x0458, 0x0408, "CYRILLIC SMALL LETTER JE", "CYRILLIC CAPITAL LETTER JE"}, + { 0x0459, 0x0409, "CYRILLIC SMALL LETTER LJE", "CYRILLIC CAPITAL LETTER LJE"}, + { 0x045A, 0x040A, "CYRILLIC SMALL LETTER NJE", "CYRILLIC CAPITAL LETTER NJE"}, + { 0x045B, 0x040B, "CYRILLIC SMALL LETTER TSHE (SERBOCROATIAN)", "CYRILLIC CAPITAL LETTER TSHE (SERBOCROATIAN)"}, + { 0x045C, 0x040C, "CYRILLIC SMALL LETTER KJE", "CYRILLIC CAPITAL LETTER KJE"}, + { 0x045E, 0x040E, "CYRILLIC SMALL LETTER SHORT U (BYELORUSSIAN)", "CYRILLIC CAPITAL LETTER SHORT U (BYELORUSSIAN)"}, + { 0x045F, 0x040F, "CYRILLIC SMALL LETTER DZHE", "CYRILLIC CAPITAL LETTER DZHE"}, + { 0x0461, 0x0460, "CYRILLIC SMALL LETTER OMEGA", "CYRILLIC CAPITAL LETTER OMEGA"}, + { 0x0463, 0x0462, "CYRILLIC SMALL LETTER YAT", "CYRILLIC CAPITAL LETTER YAT"}, + { 0x0465, 0x0464, "CYRILLIC SMALL LETTER IOTIFIED E", "CYRILLIC CAPITAL LETTER IOTIFIED E"}, + { 0x0467, 0x0466, "CYRILLIC SMALL LETTER LITTLE YUS", "CYRILLIC CAPITAL LETTER LITTLE YUS"}, + { 0x0469, 0x0468, "CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS", "CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS"}, + { 0x046B, 0x046A, "CYRILLIC SMALL LETTER BIG YUS", "CYRILLIC CAPITAL LETTER BIG YUS"}, + { 0x046D, 0x046C, "CYRILLIC SMALL LETTER IOTIFIED BIG YUS", "CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS"}, + { 0x046F, 0x046E, "CYRILLIC SMALL LETTER KSI", "CYRILLIC CAPITAL LETTER KSI"}, + { 0x0471, 0x0470, "CYRILLIC SMALL LETTER PSI", "CYRILLIC CAPITAL LETTER PSI"}, + { 0x0473, 0x0472, "CYRILLIC SMALL LETTER FITA", "CYRILLIC CAPITAL LETTER FITA"}, + { 0x0475, 0x0474, "CYRILLIC SMALL LETTER IZHITSA", "CYRILLIC CAPITAL LETTER IZHITSA"}, + { 0x0477, 0x0476, "CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT", "CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT"}, + { 0x0479, 0x0478, "CYRILLIC SMALL LETTER UK", "CYRILLIC CAPITAL LETTER UK"}, + { 0x047B, 0x047A, "CYRILLIC SMALL LETTER ROUND OMEGA", "CYRILLIC CAPITAL LETTER ROUND OMEGA"}, + { 0x047D, 0x047C, "CYRILLIC SMALL LETTER OMEGA WITH TITLO", "CYRILLIC CAPITAL LETTER OMEGA WITH TITLO"}, + { 0x047F, 0x047E, "CYRILLIC SMALL LETTER OT", "CYRILLIC CAPITAL LETTER OT"}, + { 0x0481, 0x0480, "CYRILLIC SMALL LETTER KOPPA", "CYRILLIC CAPITAL LETTER KOPPA"}, + { 0x0491, 0x0490, "CYRILLIC SMALL LETTER GHE WITH UPTURN", "CYRILLIC CAPITAL LETTER GHE WITH UPTURN"}, + { 0x0493, 0x0492, "CYRILLIC SMALL LETTER GHE WITH STROKE", "CYRILLIC CAPITAL LETTER GHE WITH STROKE"}, + { 0x0495, 0x0494, "CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK", "CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK"}, + { 0x0497, 0x0496, "CYRILLIC SMALL LETTER ZHE WITH DESCENDER", "CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER"}, + { 0x0499, 0x0498, "CYRILLIC SMALL LETTER ZE WITH DESCENDER", "CYRILLIC CAPITAL LETTER ZE WITH DESCENDER"}, + { 0x049B, 0x049A, "CYRILLIC SMALL LETTER KA WITH DESCENDER", "CYRILLIC CAPITAL LETTER KA WITH DESCENDER"}, + { 0x049D, 0x049C, "CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE", "CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE"}, + { 0x049F, 0x049E, "CYRILLIC SMALL LETTER KA WITH STROKE", "CYRILLIC CAPITAL LETTER KA WITH STROKE"}, + { 0x04A1, 0x04A0, "CYRILLIC SMALL LETTER EASHKIR KA", "CYRILLIC CAPITAL LETTER BASHKIR KA"}, + { 0x04A3, 0x04A2, "CYRILLIC SMALL LETTER EN WITH DESCENOER", "CYRILLIC CAPITAL LETTER EN WITH DESCENDER"}, + { 0x04A5, 0x04A4, "CYRILLIC SMALL LIGATURE EN GHE", "CYRILLIC CAPITAL LIGATURE EN GHF"}, + { 0x04A7, 0x04A6, "CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK (ABKHASIAN)", "CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK (ABKHASIAN)"}, + { 0x04A9, 0x04A8, "CYRILLIC SMALL LETTER ABKHASIAN HA", "CYRILLIC CAPITAL LETTER ABKHASIAN HA"}, + { 0x04AB, 0x04AA, "CYRILLIC SMALL LETTER ES WITH DESCENDER", "CYRILLIC CAPITAL LETTER ES WITH DESCENDER"}, + { 0x04AD, 0x04AC, "CYRILLIC SMALL LETTER TE WITH DESCENDER", "CYRILLIC CAPITAL LETTER TE WITH DESCENDER"}, + { 0x04AF, 0x04AE, "CYRILLIC SMALL LETTER STRAIGHT U", "CYRILLIC CAPITAL LETTER STRAIGHT U"}, + { 0x04B1, 0x04B0, "CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE", "CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE"}, + { 0x04B3, 0x04B2, "CYRILLIC SMALL LETTER HA WITH DESCENDER", "CYRILLIC CAPITAL LETTER HA WITH DESCENDER"}, + { 0x04B5, 0x04B4, "CYRILLIC SMALL LIGATURE TE TSE (ABKHASIAN)", "CYRILLIC CAPITAL LIGATURE TE TSE (ABKHASIAN)"}, + { 0x04B7, 0x04B6, "CYRILLIC SMALL LETTER CHE WITH DESCENDER", "CYRILLIC CAPITAL LETTER CHE WITH DESCENDER"}, + { 0x04B9, 0x04B8, "CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE", "CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE"}, + { 0x04BB, 0x04BA, "CYRILLIC SMALL LETTER SHHA", "CYRILLIC CAPITAL LETTER SHHA"}, + { 0x04BD, 0x04BC, "CYRILLIC SMALL LETTER ABKHASIAN CHE", "CYRILLIC CAPITAL LETTER ABKHASIAN CHE"}, + { 0x04BF, 0x04BE, "CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER", "CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER"}, + { 0x04C2, 0x04C1, "CYRILLIC SMALL LETTER ZHE WITH BREVE", "CYRILLIC CAPITAL LETTER ZHE WITH BREVE"}, + { 0x04C4, 0x04C3, "CYRILLIC SMALL LETTER KA WITH HOOK", "CYRILLIC CAPITAL LETTER KA WITH HOOK"}, + { 0x04C8, 0x04C7, "CYRILLIC SMALL LETTER EN WITH HOOK", "CYRILLIC CAPITAL LETTER EN WITH HOOK"}, + { 0x04CC, 0x04CB, "CYRILLIC SMALL LETTER KHAKASSIAN CHE", "CYRILLIC CAPITAL LETTER KHAKASSIAN CHE"}, + { 0x04D1, 0x04D0, "CYRILLIC SMALL LETTER A WITH BREVE", "CYRILLIC CAPITAL LETTER A WITH BREVE"}, + { 0x04D3, 0x04D2, "CYRILLIC SMALL LETTER A WITH DIAERESIS", "CYRILLIC CAPITAL LETTER A WITH DIAERESIS"}, + { 0x04D5, 0x04D4, "CYRILLIC SMALL LIGATURE A IE", "CYRILLIC CAPITAL LIGATURE A IE"}, + { 0x04D7, 0x04D6, "CYRILLIC SMALL LETTER IE WITH BREVE", "CYRILLIC CAPITAL LETTER IE WITH BREVE"}, + { 0x04D9, 0x04D8, "CYRILLIC SMALL LETTER SCHWA", "CYRILLIC CAPITAL LETTER SCHWA"}, + { 0x04DB, 0x04DA, "CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS", "CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS"}, + { 0x04DD, 0x04DC, "CYRILLIC SMALL LETTER ZHE WITH DIAERESIS", "CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS"}, + { 0x04DF, 0x04DE, "CYRILLIC SMALL LETTER ZE WITH DIAERESIS", "CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS"}, + { 0x04E1, 0x04E0, "CYRILLIC SMALL LETTER ABKHASIAN DZE", "CYRILLIC CAPITAL LETTER ABKHASIAN DZE"}, + { 0x04E3, 0x04E2, "CYRILLIC SMALL LETTER I WITH MACRON", "CYRILLIC CAPITAL LETTER I WITH MACRON"}, + { 0x04E5, 0x04E4, "CYRILLIC SMALL LETTER I WITH DIAERESIS", "CYRILLIC CAPITAL LETTER I WITH DIAERESIS"}, + { 0x04E7, 0x04E6, "CYRILLIC SMALL LETTER O WITH DIAERESIS", "CYRILLIC CAPITAL LETTER O WITH DIAERESIS"}, + { 0x04E9, 0x04E8, "CYRILLIC SMALL LETTER BARRED O", "CYRILLIC CAPITAL LETTER BARRED O"}, + { 0x04EB, 0x04EA, "CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS", "CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS"}, + { 0x04EF, 0x04EE, "CYRILLIC SMALL LETTER U WITH MACRON", "CYRILLIC CAPITAL LETTER U WITH MACRON"}, + { 0x04F1, 0x04F0, "CYRILLIC SMALL LETTER U WITH DIAERESIS", "CYRILLIC CAPITAL LETTER U WITH DIAERESIS"}, + { 0x04F3, 0x04F2, "CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE", "CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE"}, + { 0x04F5, 0x04F4, "CYRILLIC SMALL LETTER CHE AITH DIAERESIS", "CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS"}, + { 0x04F9, 0x04F8, "CYRILLIC SMALL LETTER YERU WITH DIAERESIS", "CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS"}, + { 0x0561, 0x0531, "ARMENIAN SMALL LETTER AYB", "ARMENIAN CAPITAL LETTER AYB"}, + { 0x0562, 0x0532, "ARMENIAN SMALL LETTER BEN", "ARMENIAN CAPITAL LETTER BEN"}, + { 0x0563, 0x0533, "ARMENIAN SMALL LETTER GIM", "ARMENIAN CAPITAL LETTER GIM"}, + { 0x0564, 0x0534, "ARMENIAN SMALL LETTER DA", "ARMENIAN CAPITAL LETTER DA"}, + { 0x0565, 0x0535, "ARMENIAN SMALL LETTER ECH", "ARMENIAN CAPITAL LETTER ECH"}, + { 0x0566, 0x0536, "ARMENIAN SMALL LETTER ZA", "ARMENIAN CAPITAL LETTER ZA"}, + { 0x0567, 0x0537, "ARMENIAN SMALL LETTER EH", "ARMENIAN CAPITAL LETTER EH"}, + { 0x0568, 0x0538, "ARMENIAN SMALL LETTER ET", "ARMENIAN CAPITAL LETTER ET"}, + { 0x0569, 0x0539, "ARMENIAN SMALL LETTER TO", "ARMENIAN CAPITAL LETTER TO"}, + { 0x056A, 0x053A, "ARMENIAN SMALL LETTER ZHE", "ARMENIAN CAPITAL LETTER ZHE"}, + { 0x056B, 0x053B, "ARMENIAN SMALL LETTER INI", "ARMENIAN CAPITAL LETTER INI"}, + { 0x056C, 0x053C, "ARMENIAN SMALL LETTER LIWN", "ARMENIAN CAPITAL LETTER LIWN"}, + { 0x056D, 0x053D, "ARMENIAN SMALL LETTER XEH", "ARMENIAN CAPITAL LETTER XEH"}, + { 0x056E, 0x053E, "ARMENIAN SMALL LETTER CA", "ARMENIAN CAPITAL LETTER CA"}, + { 0x056F, 0x053F, "ARMENIAN SMALL LETTER KEN", "ARMENIAN CAPITAL LETTER KEN"}, + { 0x0570, 0x0540, "ARMENIAN SMALL LETTER HO", "ARMENIAN CAPITAL LETTER HO"}, + { 0x0571, 0x0541, "ARMENIAN SMALL LETTER JA", "ARMENIAN CAPITAL LETTER JA"}, + { 0x0572, 0x0542, "ARMENIAN SMALL LETTER GHAD", "ARMENIAN CAPITAL LETTER GHAD"}, + { 0x0573, 0x0543, "ARMENIAN SMALL LETTER CHEH", "ARMENIAN CAPITAL LETTER CHEH"}, + { 0x0574, 0x0544, "ARMENIAN SMALL LETTER MEN", "ARMENIAN CAPITAL LETTER MEN"}, + { 0x0575, 0x0545, "ARMENIAN SMALL LETTER YI", "ARMENIAN CAPITAL LETTER YI"}, + { 0x0576, 0x0546, "ARMENIAN SMALL LETTER NOW", "ARMENIAN CAPITAL LETTER NOW"}, + { 0x0577, 0x0547, "ARMENIAN SMALL LETTER SNA", "ARMENIAN CAPITAL LETTER SHA"}, + { 0x0578, 0x0548, "ARMENIAN SMALL LETTER VO", "ARMENIAN CAPITAL LETTER VO"}, + { 0x0579, 0x0549, "ARMENIAN SMALL LETTER CHA", "ARMENIAN CAPITAL LETTER CHA"}, + { 0x057A, 0x054A, "ARMENIAN SMALL LETTER PEH", "ARMENIAN CAPITAL LETTER PEH"}, + { 0x057B, 0x054B, "ARMENIAN SMALL LETTER JHEH", "ARMENIAN CAPITAL LETTER JHEH"}, + { 0x057C, 0x054C, "ARMENIAN SMALL LETTER RA", "ARMENIAN CAPITAL LETTER RA"}, + { 0x057D, 0x054D, "ARMENIAN SMALL LETTER SEH", "ARMENIAN CAPITAL LETTER SEH"}, + { 0x057E, 0x054E, "ARMENIAN SMALL LETTER VEW", "ARMENIAN CAPITAL LETTER VEW"}, + { 0x057F, 0x054F, "ARMENIAN SMALL LETTER TIWN", "ARMENIAN CAPITAL LETTER TIWN"}, + { 0x0580, 0x0550, "ARMENIAN SMALL LETTER REH", "ARMENIAN CAPITAL LETTER REH"}, + { 0x0581, 0x0551, "ARMENIAN SMALL LETTER CO", "ARMENIAN CAPITAL LETTER CO"}, + { 0x0582, 0x0552, "ARMENIAN SMALL LETTER YIWN", "ARMENIAN CAPITAL LETTER YIWN"}, + { 0x0583, 0x0553, "ARMENIAN SMALL LETTER PIWP", "ARMENIAN CAPITAL LETTER PIWR"}, + { 0x0584, 0x0554, "ARMENIAN SMALL LETTER KEH", "ARMENIAN CAPITAL LETTER KEH"}, + { 0x0585, 0x0555, "ARMENIAN SMALL LETTER OH", "ARMENIAN CAPITAL LETTER OH"}, + { 0x0586, 0x0556, "ARMENIAN SMALL LETTER FEH", "ARMENIAN CAPITAL LETTER FEH"}, + { 0x10D0, 0x10A0, "GEORGIAN LETTER AN", "GEORGIAN CAPITAL LETTER AN (KHUTSURI)"}, + { 0x10D1, 0x10A1, "GEORGIAN LETTER BAN", "GEORGIAN CAPITAL LETTER BAN (KHUTSURI)"}, + { 0x10D2, 0x10A2, "GEORGIAN LETTER GAN", "GEORGIAN CAPITAL LETTER GAN (KHUTSURI)"}, + { 0x10D3, 0x10A3, "GEORGIAN LETTER DON", "GEORGIAN CAPITAL LETTER DON (KHUTSURI)"}, + { 0x10D4, 0x10A4, "GEORGIAN LETTER EN", "GEORGIAN CAPITAL LETTER EN (KHUTSURI)"}, + { 0x10D5, 0x10A5, "GEORGIAN LETTER VIN", "GEORGIAN CAPITAL LETTER VIN (KHUTSURI)"}, + { 0x10D6, 0x10A6, "GEORGIAN LETTER ZEN", "GEORGIAN CAPITAL LETTER ZEN (KHUTSURI)"}, + { 0x10D7, 0x10A7, "GEORGIAN LETTER TAN", "GEORGIAN CAPITAL LETTER TAN (KHUTSURI)"}, + { 0x10D8, 0x10A8, "GEORGIAN LETTER IN", "GEORGIAN CAPITAL LETTER IN (KHUTSURI)"}, + { 0x10D9, 0x10A9, "GEORGIAN LETTER KAN", "GEORGIAN CAPITAL LETTER KAN (KHUTSURI)"}, + { 0x10DA, 0x10AA, "GEORGIAN LETTER LAS", "GEORGIAN CAPITAL LETTER LAS (KHUTSURI)"}, + { 0x10DB, 0x10AB, "GEORGIAN LETTER MAN", "GEORGIAN CAPITAL LETTER MAN (KHUTSURI)"}, + { 0x10DC, 0x10AC, "GEORGIAN LETTER NAR", "GEORGIAN CAPITAL LETTER NAR (KHUTSURI)"}, + { 0x10DD, 0x10AD, "GEORGIAN LETTER ON", "GEORGIAN CAPITAL LETTER ON (KHUTSURI)"}, + { 0x10DE, 0x10AE, "GEORGIAN LETTER PAR", "GEORGIAN CAPITAL LETTER PAR (KHUTSURI)"}, + { 0x10DF, 0x10AF, "GEORGIAN LETTER ZHAR", "GEORGIAN CAPITAL LETTER ZHAR (KHUTSURI)"}, + { 0x10E0, 0x10B0, "GEORGIAN LETTER RAE", "GEORGIAN CAPITAL LETTER RAE (KHUTSURI)"}, + { 0x10E1, 0x10B1, "GEORGIAN LETTER SAN", "GEORGIAN CAPITAL LETTER SAN (KHUTSURI)"}, + { 0x10E2, 0x10B2, "GEORGIAN LETTER TAR", "GEORGIAN CAPITAL LETTER TAR (KHUTSURI)"}, + { 0x10E3, 0x10B3, "GEORGIAN LETTER UN", "GEORGIAN CAPITAL LETTER UN (KHUTSURI)"}, + { 0x10E4, 0x10B4, "GEORGIAN LETTER PHAR", "GEORGIAN CAPITAL LETTER PHAR (KHUTSURI)"}, + { 0x10E5, 0x10B5, "GEORGIAN LETTER KHAR", "GEORGIAN CAPITAL LETTER KHAR (KHUTSURI)"}, + { 0x10E6, 0x10B6, "GEORGIAN LETTER GHAN", "GEORGIAN CAPITAL LETTER GHAN (KHUTSURI)"}, + { 0x10E7, 0x10B7, "GEORGIAN LETTER QAR", "GEORGIAN CAPITAL LETTER QAR (KHUTSURI)"}, + { 0x10E8, 0x10B8, "GEORGIAN LETTER SHIN", "GEORGIAN CAPITAL LETTER SHIN (KHUTSURI)"}, + { 0x10E9, 0x10B9, "GEORGIAN LETTER CHIN", "GEORGIAN CAPITAL LETTER CHIN (KHUTSURI)"}, + { 0x10EA, 0x10BA, "GEORGIAN LETTER CAN", "GEORGIAN CAPITAL LETTER CAN (KHUTSURI)"}, + { 0x10EB, 0x10BB, "GEORGIAN LETTER JIL", "GEORGIAN CAPITAL LETTER JIL (KHUTSURI)"}, + { 0x10EC, 0x10BC, "GEORGIAN LETTER CIL", "GEORGIAN CAPITAL LETTER CIL (KHUTSURI)"}, + { 0x10ED, 0x10BD, "GEORGIAN LETTER CHAR", "GEORGIAN CAPITAL LETTER CHAR (KHUTSURI)"}, + { 0x10EE, 0x10BE, "GEORGIAN LETTER XAN", "GEORGIAN CAPITAL LETTER XAN (KHUTSURI)"}, + { 0x10EF, 0x10BF, "GEORGIAN LETTER JHAN", "GEORGIAN CAPITAL LETTER JHAN (KHUTSURI)"}, + { 0x10F0, 0x10C0, "GEORGIAN LETTER HAE", "GEORGIAN CAPITAL LETTER HAE (KHUTSURI)"}, + { 0x10F1, 0x10C1, "GEORGIAN LETTER HE", "GEORGIAN CAPITAL LETTER HE (KHUTSURI)"}, + { 0x10F2, 0x10C2, "GEORGIAN LETTER HIE", "GEORGIAN CAPITAL LETTER HIE (KHUTSURI)"}, + { 0x10F3, 0x10C3, "GEORGIAN LETTER WE", "GEORGIAN CAPITAL LETTER WE (KHUTSURI)"}, + { 0x10F4, 0x10C4, "GEORGIAN LETTER HAR", "GEORGIAN CAPITAL LETTER HAR (KHUTSURI)"}, + { 0x10F5, 0x10C5, "GEORGIAN LETTER HOE", "GEORGIAN CAPITAL LETTER HOE (KHUTSURI)"}, + { 0x1E01, 0x1E00, "LATIN SMALL LETTER A WITH RING BELOW", "LATIN CAPITAL LETTER A WITH RING BELOW"}, + { 0x1E03, 0x1E02, "LATIN SMALL LETTER B WITH DOT ABOVE", "LATIN CAPITAL LETTER B WITH DOT ABOVE"}, + { 0x1E05, 0x1E04, "LATIN SMALL LETTER B WITH DOT BELOW", "LATIN CAPITAL LETTER B WITH DOT BELOW"}, + { 0x1E07, 0x1E06, "LATIN SMALL LETTER B WITH LINE BELOW", "LATIN CAPITAL LETTER B WITH LINE BELOW"}, + { 0x1E09, 0x1E08, "LATIN SMALL LETTER C WITH CEDILLA AND ACUTE", "LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE"}, + { 0x1E0B, 0x1E0A, "LATIN SMALL LETTER D WITH DOT ABOVE", "LATIN CAPITAL LETTER D WITH DOT ABOVE"}, + { 0x1E0D, 0x1E0C, "LATIN SMALL LETTER D WITH DOT BELOW", "LATIN CAPITAL LETTER D WITH DOT BELOW"}, + { 0x1E0F, 0x1E0E, "LATIN SMALL LETTER D WITH LINE BELOW", "LATIN CAPITAL LETTER D WITH LINE BELOW"}, + { 0x1E11, 0x1E10, "LATIN SMALL LETTER D WITH CEDILLA", "LATIN CAPITAL LETTER D WITH CEDILLA"}, + { 0x1E13, 0x1E12, "LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW", "LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW"}, + { 0x1E15, 0x1E14, "LATIN SMALL LETTER E WITH MACRON AND GRAVE", "LATIN CAPITAL LETTER E WITH MACRON AND GRAVE"}, + { 0x1E17, 0x1E16, "LATIN SMALL LETTER E WITH MACRON AND ACUTE", "LATIN CAPITAL LETTER E WITH MACRON AND ACUTE"}, + { 0x1E19, 0x1E18, "LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW", "LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW"}, + { 0x1E1B, 0x1E1A, "LATIN SMALL LETTER E WITH TILDE BELOW", "LATIN CAPITAL LETTER E WITH TILDE BELOW"}, + { 0x1E1D, 0x1E1C, "LATIN SMALL LETTER E WITH CEDILLA AND BREVE", "LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE"}, + { 0x1E1F, 0x1E1E, "LATIN SMALL LETTER F WITH DOT ABOVE", "LATIN CAPITAL LETTER F WITH DOT ABOVE"}, + { 0x1E21, 0x1E20, "LATIN SMALL LETTER G WITH MACRON", "LATIN CAPITAL LETTER G WITH MACRON"}, + { 0x1E23, 0x1E22, "LATIN SMALL LETTER H WITH DOT ABOVE", "LATIN CAPITAL LETTER H WITH DOT ABOVE"}, + { 0x1E25, 0x1E24, "LATIN SMALL LETTER H WITH DOT BELOW", "LATIN CAPITAL LETTER H WITH DOT BELOW"}, + { 0x1E27, 0x1E26, "LATIN SMALL LETTER H WITH DIAERESIS", "LATIN CAPITAL LETTER H WITH DIAERESIS"}, + { 0x1E29, 0x1E28, "LATIN SMALL LETTER H WITH CEDILLA", "LATIN CAPITAL LETTER H WITH CEDILLA"}, + { 0x1E2B, 0x1E2A, "LATIN SMALL LETTER H WITH BREVE BELOW", "LATIN CAPITAL LETTER H WITH BREVE BELOW"}, + { 0x1E2D, 0x1E2C, "LATIN SMALL LETTER I WITH TILDE BELOW", "LATIN CAPITAL LETTER I WITH TILDE BELOW"}, + { 0x1E2F, 0x1E2E, "LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE", "LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE"}, + { 0x1E31, 0x1E30, "LATIN SMALL LETTER K WITH ACUTE", "LATIN CAPITAL LETTER K WITH ACUTE"}, + { 0x1E33, 0x1E32, "LATIN SMALL LETTER K WITH DOT BELOW", "LATIN CAPITAL LETTER K WITH DOT BELOW"}, + { 0x1E35, 0x1E34, "LATIN SMALL LETTER K WITH LINE BELOW", "LATIN CAPITAL LETTER K WITH LINE BELOW"}, + { 0x1E37, 0x1E36, "LATIN SMALL LETTER L WITH DOT BELOW", "LATIN CAPITAL LETTER L WITH DOT BELOW"}, + { 0x1E39, 0x1E38, "LATIN SMALL LETTER L WITH DOT BELOW AND MACRON", "LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON"}, + { 0x1E3B, 0x1E3A, "LATIN SMALL LETTER L WITH LINE BELOW", "LATIN CAPITAL LETTER L WITH LINE BELOW"}, + { 0x1E3D, 0x1E3C, "LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW", "LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW"}, + { 0x1E3F, 0x1E3E, "LATIN SMALL LETTER M WITH ACUTE", "LATIN CAPITAL LETTER M WITH ACUTE"}, + { 0x1E41, 0x1E40, "LATIN SMALL LETTER M WITH DOT ABOVE", "LATIN CAPITAL LETTER M WITH DOT ABOVE"}, + { 0x1E43, 0x1E42, "LATIN SMALL LETTER M WITH DOT BELOW", "LATIN CAPITAL LETTER M WITH DOT BELOW"}, + { 0x1E45, 0x1E44, "LATIN SMALL LETTER N WITH DOT ABOVE", "LATIN CAPITAL LETTER N WITH DOT ABOVE"}, + { 0x1E47, 0x1E46, "LATIN SMALL LETTER N WITH DOT BELOW", "LATIN CAPITAL LETTER N WITH DOT BELOW"}, + { 0x1E49, 0x1E48, "LATIN SMALL LETTER N WITH LINE BELOW", "LATIN CAPITAL LETTER N WITH LINE BELOW"}, + { 0x1E4B, 0x1E4A, "LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW", "LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW"}, + { 0x1E4D, 0x1E4C, "LATIN SMALL LETTER O WITH TILDE AND ACUTE", "LATIN CAPITAL LETTER O WITH TILDE AND ACUTE"}, + { 0x1E4F, 0x1E4E, "LATIN SMALL LETTER O WITH TlLDE AND DIAERESIS", "LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS"}, + { 0x1E51, 0x1E50, "LATIN SMALL LETTER O WITH MACRON AND GRAVE", "LATIN CAPITAL LETTER O WITH MACRON AND GRAVE"}, + { 0x1E53, 0x1E52, "LATIN SMALL LETTER O WITH MACRON AND ACUTE", "LATIN CAPITAL LETTER O WITH MACRON AND ACUTE"}, + { 0x1E55, 0x1E54, "LATIN SMALL LETTER P WITH ACUTE", "LATIN CAPITAL LETTER P WITH ACUTE"}, + { 0x1E57, 0x1E56, "LATIN SMALL LETTER P WITH DOT ABOVE", "LATIN CAPITAL LETTER P WITH DOT ABOVE"}, + { 0x1E59, 0x1E58, "LATIN SMALL LETTER R WITH DOT ABOVE", "LATIN CAPITAL LETTER R WITH DOT ABOVE"}, + { 0x1E5B, 0x1E5A, "LATIN SMALL LETTER R WITH DOT BELOW", "LATIN CAPITAL LETTER R WITH DOT BELOW"}, + { 0x1E5D, 0x1E5C, "LATIN SMALL LETTER R WITH DOT BELOW AND MACRON", "LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON"}, + { 0x1E5F, 0x1E5E, "LATIN SMALL LETTER R WITH LINE BELOW", "LATIN CAPITAL LETTER R WITH LINE BELOW"}, + { 0x1E61, 0x1E60, "LATIN SMALL LETTER S WITH DOT ABOVE", "LATIN CAPITAL LETTER S WITH DOT ABOVE"}, + { 0x1E63, 0x1E62, "LATIN SMALL LETTER S WITH DOT BELOW", "LATIN CAPITAL LETTER S WITH DOT BELOW"}, + { 0x1E65, 0x1E64, "LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE", "LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE"}, + { 0x1E67, 0x1E66, "LATIN SMALL LETTER S WITH CARON AND DOT ABOVE", "LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE"}, + { 0x1E69, 0x1E68, "LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE", "LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE"}, + { 0x1E6B, 0x1E6A, "LATIN SMALL LETTER T WITH DOT ABOVE", "LATIN CAPITAL LETTER T WITH DOT ABOVE"}, + { 0x1E6D, 0x1E6C, "LATIN SMALL LETTER T WITH DOT BELOW", "LATIN CAPITAL LETTER T WITH DOT BELOW"}, + { 0x1E6F, 0x1E6E, "LATIN SMALL LETTER T WITH LINE BELOW", "LATIN CAPITAL LETTER T WITH LINE BELOW"}, + { 0x1E71, 0x1E70, "LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW", "LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW"}, + { 0x1E73, 0x1E72, "LATIN SMALL LETTER U WITH DIAERESIS BELOW", "LATIN CAPITAL LETTER U WITH DIAERESIS BELOW"}, + { 0x1E75, 0x1E74, "LATIN SMALL LETTER U WITH TILDE BELOW", "LATIN CAPITAL LETTER U WITH TILDE BELOW"}, + { 0x1E77, 0x1E76, "LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW", "LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW"}, + { 0x1E79, 0x1E78, "LATIN SMALL LETTER U WITH TILDE AND ACUTE", "LATIN CAPITAL LETTER U WITH TILDE AND ACUTE"}, + { 0x1E7B, 0x1E7A, "LATIN SMALL LETTER U WITH MACRON AND DIAERESIS", "LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS"}, + { 0x1E7D, 0x1E7C, "LATIN SMALL LETTER V WITH TILDE", "LATIN CAPITAL LETTER V WITH TILDE"}, + { 0x1E7F, 0x1E7E, "LATIN SMALL LETTER V WITH DOT BELOW", "LATIN CAPITAL LETTER V WITH DOT BELOW"}, + { 0x1E81, 0x1E80, "LATIN SMALL LETTER W WITH GRAVE", "LATIN CAPITAL LETTER W WITH GRAVE"}, + { 0x1E83, 0x1E82, "LATIN SMALL LETTER W WITH ACUTE", "LATIN CAPITAL LETTER W WITH ACUTE"}, + { 0x1E85, 0x1E84, "LATIN SMALL LETTER W WITH DIAERESIS", "LATIN CAPITAL LETTER W WITH DIAERESIS"}, + { 0x1E87, 0x1E86, "LATIN SMALL LETTER W WITH DOT ABOVE", "LATIN CAPITAL LETTER W WITH DOT ABOVE"}, + { 0x1E89, 0x1E88, "LATIN SMALL LETTER W WITH DOT BELOW", "LATIN CAPITAL LETTER W WITH DOT BELOW"}, + { 0x1E8B, 0x1E8A, "LATIN SMALL LETTER X WITH DOT ABOVE", "LATIN CAPITAL LETTER X WITH DOT ABOVE"}, + { 0x1E8D, 0x1E8C, "LATIN SMALL LETTER X WITH DIAERESIS", "LATIN CAPITAL LETTER X5 WITH DIAERESIS"}, + { 0x1E8F, 0x1E8E, "LATIN SMALL LETTER Y WITH DOT ABOVE", "LATIN CAPITAL LETTER Y WITH DOT ABOVE"}, + { 0x1E91, 0x1E90, "LATIN SMALL LETTER Z WITH CIRCUMFLEX", "LATIN CAPITAL LETTER Z WITH CIRCUMFLEX"}, + { 0x1E93, 0x1E92, "LATIN SMALL LETTER Z WITH DOT BELOW", "LATIN CAPITAL LETTER Z WITH DOT BELOW"}, + { 0x1E95, 0x1E94, "LATIN SMALL LETTER Z WITH LINE BELOW", "LATIN CAPITAL LETTER Z WITH LINE BELOW"}, + { 0x1EA1, 0x1EA0, "LATIN SMALL LETTER A WITH DOT BELOW", "LATIN CAPITAL LETTER A WITH DOT BELOW"}, + { 0x1EA3, 0x1EA2, "LATIN SMALL LETTER A WITH HOOK ABOVE", "LATIN CAPITAL LETTER A WITH HOOK ABOVE"}, + { 0x1EA5, 0x1EA4, "LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE", "LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE"}, + { 0x1EA7, 0x1EA6, "LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE", "LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE"}, + { 0x1EA9, 0x1EA8, "LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE", "LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE"}, + { 0x1EAB, 0x1EAA, "LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE", "LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE"}, + { 0x1EAD, 0x1EAC, "LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW", "LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW"}, + { 0x1EAF, 0x1EAE, "LATIN SMALL LETTER A WITH BREVE AND ACUTE", "LATIN CAPITAL LETTER A WITH BREVE AND ACUTE"}, + { 0x1EB1, 0x1EB0, "LATIN SMALL LETTER A WITH BREVE AND GRAVE", "LATIN CAPITAL LETTER A WITH BREVE AND GRAVE"}, + { 0x1EB3, 0x1EB2, "LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE", "LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE"}, + { 0x1EB5, 0x1EB4, "LATIN SMALL LETTER A WITH BREVE AND TILDE", "LATIN CAPITAL LETTER A WITH BREVE AND TILDE"}, + { 0x1EB7, 0x1EB6, "LATIN SMALL LETTER A WITH BREVE AND DOT BELOW", "LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW"}, + { 0x1EB9, 0x1EB8, "LATIN SMALL LETTER E WITH DOT BELOW", "LATIN CAPITAL LETTER E WITH DOT BELOW"}, + { 0x1EBB, 0x1EBA, "LATIN SMALL LETTER E WITH HOOK ABOVE", "LATIN CAPITAL LETTER E WITH HOOK ABOVE"}, + { 0x1EBD, 0x1EBC, "LATIN SMALL LETTER E WITH TILDE", "LATIN CAPITAL LETTER E WITH TILDE"}, + { 0x1EBF, 0x1EBE, "LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE", "LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE"}, + { 0x1EC1, 0x1EC0, "LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE", "LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE"}, + { 0x1EC3, 0x1EC2, "LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE", "LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE"}, + { 0x1EC5, 0x1EC4, "LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE", "LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE"}, + { 0x1EC7, 0x1EC6, "LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW", "LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW"}, + { 0x1EC9, 0x1EC8, "LATIN SMALL LETTER I WITH HOOK ABOVE", "LATIN CAPITAL LETTER I WITH HOOK ABOVE"}, + { 0x1ECB, 0x1ECA, "LATIN SMALL LETTER I WITH DOT BELOW", "LATIN CAPITAL LETTER I WITH DOT BELOW"}, + { 0x1ECD, 0x1ECC, "LATIN SMALL LETTER O WITH DOT BELOW", "LATIN CAPITAL LETTER O WITH DOT BELOW"}, + { 0x1ECF, 0x1ECE, "LATIN SMALL LETTER O WITH HOOK ABOVE", "LATIN CAPITAL LETTER O WITH HOOK ABOVE"}, + { 0x1ED1, 0x1ED0, "LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE", "LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE"}, + { 0x1ED3, 0x1ED2, "LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE", "LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE"}, + { 0x1ED5, 0x1ED4, "LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE", "LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE"}, + { 0x1ED7, 0x1ED6, "LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE", "LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE"}, + { 0x1ED9, 0x1ED8, "LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW", "LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW"}, + { 0x1EDB, 0x1EDA, "LATIN SMALL LETTER O WITH HORN AND ACUTE", "LATIN CAPITAL LETTER O WITH HORN AND ACUTE"}, + { 0x1EDD, 0x1EDC, "LATIN SMALL LETTER O WITH HORN AND GRAVE", "LATIN CAPITAL LETTER O WITH HORN AND GRAVE"}, + { 0x1EDF, 0x1EDE, "LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE", "LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE"}, + { 0x1EE1, 0x1EE0, "LATIN SMALL LETTER O WITH HORN AND TILDE", "LATIN CAPITAL LETTER O WITH HORN AND TILDE"}, + { 0x1EE3, 0x1EE2, "LATIN SMALL LETTER O WITH HORN AND DOT BELOW", "LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW"}, + { 0x1EE5, 0x1EE4, "LATIN SMALL LETTER U WITH DOT BELOW", "LATIN CAPITAL LETTER U WITH DOT BELOW"}, + { 0x1EE7, 0x1EE6, "LATIN SMALL LETTER U WITH HOOK ABOVE", "LATIN CAPITAL LETTER U WITH HOOK ABOVE"}, + { 0x1EE9, 0x1EE8, "LATIN SMALL LETTER U WITH HORN AND ACUTE", "LATIN CAPITAL LETTER U WITH HORN AND ACUTE"}, + { 0x1EEB, 0x1EEA, "LATIN SMALL LETTER U WITH HORN AND GRAVE", "LATIN CAPITAL LETTER U WITH HORN AND GRAVE"}, + { 0x1EED, 0x1EEC, "LATIN SMALL LETTER U WITH HORN AND HOCK ABOVE", "LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE"}, + { 0x1EEF, 0x1EEE, "LATIN SMALL LETTER U WITH HORN AND TILDE", "LATIN CAPITAL LETTER U WITH HORN AND TILDE"}, + { 0x1EF1, 0x1EF0, "LATIN SMALL LETTER U WITH HORN AND DOT BELOW", "LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW"}, + { 0x1EF3, 0x1EF2, "LATIN SMALL LETTER Y WITH GRAVE", "LATIN CAPITAL LETTER Y WITH GRAVE"}, + { 0x1EF5, 0x1EF4, "LATIN SMALL LETTER Y WITH DOT BELOW", "LATIN CAPITAL LETTER Y WITH DOT BELOW"}, + { 0x1EF7, 0x1EF6, "LATIN SMALL LETTER Y WITH HOOK ABOVE", "LATIN CAPITAL LETTER Y WITH HOOK ABOVE"}, + { 0x1EF9, 0x1EF8, "LATIN SMALL LETTER Y WITH TILDE", "LATIN CAPITAL LETTER Y WITH TILDE"}, + { 0x1F00, 0x1F08, "GREEK SMALL LETTER ALPHA WITH PSILI", "GREEK CAPITAL LETTER ALPHA WITH PSILI"}, + { 0x1F01, 0x1F09, "GREEK SMALL LETTER ALPHA WITH DASIA", "GREEK CAPITAL LETTER ALPHA WITH DASIA"}, + { 0x1F02, 0x1F0A, "GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA", "GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA"}, + { 0x1F03, 0x1F0B, "GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA", "GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA"}, + { 0x1F04, 0x1F0C, "GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA", "GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA"}, + { 0x1F05, 0x1F0D, "GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA", "GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA"}, + { 0x1F06, 0x1F0E, "GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI", "GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI"}, + { 0x1F07, 0x1F0F, "GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI", "GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI"}, + { 0x1F10, 0x1F18, "GREEK SMALL LETTER EPSILON WITH PSILI", "GREEK CAPITAL LETTER EPSILON WITH PSILI"}, + { 0x1F11, 0x1F19, "GREEK SMALL LETTER EPSILON WITH DASIA", "GREEK CAPITAL LETTER EPSILON WITH DASIA"}, + { 0x1F12, 0x1F1A, "GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA", "GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA"}, + { 0x1F13, 0x1F1B, "GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA", "GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA"}, + { 0x1F14, 0x1F1C, "GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA", "GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA"}, + { 0x1F15, 0x1F1D, "GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA", "GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA"}, + { 0x1F20, 0x1F28, "GREEK SMALL LETTER ETA WITH PSILI", "GREEK CAPITAL LETTER ETA WITH PSILI"}, + { 0x1F21, 0x1F29, "GREEK SMALL LETTER ETA WITH DASIA", "GREEK CAPITAL LETTER ETA WITH DASIA"}, + { 0x1F22, 0x1F2A, "GREEK SMALL LETTER ETA WITH PSILI AND VARIA", "GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA"}, + { 0x1F23, 0x1F2B, "GREEK SMALL LETTER ETA WITH DASIA AND VARIA", "GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA"}, + { 0x1F24, 0x1F2C, "GREEK SMALL LETTER ETA WITH PSILI AND OXIA", "GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA"}, + { 0x1F25, 0x1F2D, "GREEK SMALL LETTER ETA WITH DASIA AND OXIA", "GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA"}, + { 0x1F26, 0x1F2E, "GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI", "GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI"}, + { 0x1F27, 0x1F2F, "GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI", "GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI"}, + { 0x1F30, 0x1F38, "GREEK SMALL LETTER IOTA WITH PSILI", "GREEK CAPITAL LETTER IOTA WITH PSILI"}, + { 0x1F31, 0x1F39, "GREEK SMALL LETTER IOTA WITH DASIA", "GREEK CAPITAL LETTER IOTA WITH DASIA"}, + { 0x1F32, 0x1F3A, "GREEK SMALL LETTER IOTA WITH PSILI AND VARIA", "GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA"}, + { 0x1F33, 0x1F3B, "GREEK SMALL LETTER IOTA WITH DASIA AND VARIA", "GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA"}, + { 0x1F34, 0x1F3C, "GREEK SMALL LETTER IOTA WITH PSILI AND OXIA", "GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA"}, + { 0x1F35, 0x1F3D, "GREEK SMALL LETTER IOTA WITH DASIA AND OXIA", "GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA"}, + { 0x1F36, 0x1F3E, "GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI", "GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI"}, + { 0x1F37, 0x1F3F, "GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI", "GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI"}, + { 0x1F40, 0x1F48, "GREEK SMALL LETTER OMICRON WITH PSILI", "GREEK CAPITAL LETTER OMICRON WITH PSILI"}, + { 0x1F41, 0x1F49, "GREEK SMALL LETTER OMICRON WITH DASIA", "GREEK CAPITAL LETTER OMICRON WITH DASIA"}, + { 0x1F42, 0x1F4A, "GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA", "GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA"}, + { 0x1F43, 0x1F4B, "GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA", "GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA"}, + { 0x1F44, 0x1F4C, "GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA", "GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA"}, + { 0x1F45, 0x1F4D, "GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA", "GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA"}, + { 0x1F51, 0x1F59, "GREEK SMALL LETTER UPSILON WITH DASIA", "GREEK CAPITAL LETTER UPSILON WITH OASIS"}, + { 0x1F53, 0x1F5B, "GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA", "GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA"}, + { 0x1F55, 0x1F5D, "GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA", "GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA"}, + { 0x1F57, 0x1F5F, "GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI", "GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI"}, + { 0x1F60, 0x1F68, "GREEK SMALL LETTER OMEGA WITh PSILI", "GREEK CAPITAL LETTER OMEGA WITH PSILI"}, + { 0x1F61, 0x1F69, "GREEK SMALL LETTER OMEGA WITH DASIA", "GREEK CAPITAL LETTER OMEGA WITH DASIA"}, + { 0x1F62, 0x1F6A, "GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA", "GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA"}, + { 0x1F63, 0x1F6B, "GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA", "GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA"}, + { 0x1F64, 0x1F6C, "GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA", "GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA"}, + { 0x1F65, 0x1F6D, "GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA", "GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA"}, + { 0x1F66, 0x1F6E, "GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI", "GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI"}, + { 0x1F67, 0x1F6F, "GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI", "GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI"}, + { 0x1F80, 0x1F88, "GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER ALPHA WITh PSILI AND PROSGEGRAMMENI"}, + { 0x1F81, 0x1F89, "GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI"}, + { 0x1F82, 0x1F8A, "GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI"}, + { 0x1F83, 0x1F8B, "GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI"}, + { 0x1F84, 0x1F8C, "GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMEN"}, + { 0x1F85, 0x1F8D, "GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMEN"}, + { 0x1F86, 0x1F8E, "GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI"}, + { 0x1F87, 0x1F8F, "GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI"}, + { 0x1F90, 0x1F98, "GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI"}, + { 0x1F91, 0x1F99, "GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI"}, + { 0x1F92, 0x1F9A, "GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI"}, + { 0x1F93, 0x1F9B, "GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI"}, + { 0x1F94, 0x1F9C, "GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI"}, + { 0x1F95, 0x1F9D, "GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI"}, + { 0x1F96, 0x1F9E, "GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI"}, + { 0x1F97, 0x1F9F, "GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI"}, + { 0x1FA0, 0x1FA8, "GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI"}, + { 0x1FA1, 0x1FA9, "GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI"}, + { 0x1FA2, 0x1FAA, "GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI"}, + { 0x1FA3, 0x1FAB, "GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI"}, + { 0x1FA4, 0x1FAC, "GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI"}, + { 0x1FA5, 0x1FAD, "GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI"}, + { 0x1FA6, 0x1FAE, "GREEK SMALL LETTER OMEGA WITh PSILI AND PERISPOMENI AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI"}, + { 0x1FA7, 0x1FAF, "GREEK SMALL LETTER OMEGA WITH DASIA AND PEPISPOMENI AND YPOGEGRAMMENI", "GREEK CAPITAL LETTER OMECA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI"}, + { 0x1FB0, 0x1FB8, "GREEK SMALL LETTER ALPHA WITH VRACHY", "GREEK CAPITAL LETTER ALPHA WITH VRACHY"}, + { 0x1FB1, 0x1FB9, "GREEK SMALL LETTER ALPHA WITH MACRON", "GREEK CAPITAL LETTER ALPHA WITH MACRON"}, + { 0x1FD0, 0x1FD8, "GREEK SMALL LETTER IOTA WITH VRACHY", "GREEK CAPITAL LETTER IOTA WITH VRACHY"}, + { 0x1FD1, 0x1FD9, "GREEK SMALL LETTER IOTA WITH MACRON", "GREEK CAPITAL LETTER IOTA WITH MACRON"}, + { 0x1FE0, 0x1FE8, "GREEK SMALL LETTER UPSILON WITH VRACHY", "GREEK CAPITAL LETTER UPSILON WITH VRACHY"}, + { 0x1FE1, 0x1FE9, "GREEK SMALL LETTER UPSILON WITH MACRON", "GREEK CAPITAL LETTER UPSILON WITH MACRON"}, + { 0x24D0, 0x24B6, "CIRCLED LATIN SMALL LETTER A", "CIRCLED LATIN CAPITAL LETTER A"}, + { 0x24D1, 0x24B7, "CIRCLED LATIN SMALL LETTER B", "CIRCLED LATIN CAPITAL LETTER B"}, + { 0x24D2, 0x24B8, "CIRCLED LATIN SMALL LETTER C", "CIRCLED LATIN CAPITAL LETTER C"}, + { 0x24D3, 0x24B9, "CIRCLED LATIN SMALL LETTER D", "CIRCLED LATIN CAPITAL LETTER D"}, + { 0x24D4, 0x24BA, "CIRCLED LATIN SMALL LETTER E", "CIRCLED LATIN CAPITAL LETTER E"}, + { 0x24D5, 0x24BB, "CIRCLED LATIN SMALL LETTER F", "CIRCLED LATIN CAPITAL LETTER F"}, + { 0x24D6, 0x24BC, "CIRCLED LATIN SMALL LETTER G", "CIRCLED LATIN CAPITAL LETTER G"}, + { 0x24D7, 0x24BD, "CIRCLED LATIN SMALL LETTER H", "CIRCLED LATIN CAPITAL LETTER H"}, + { 0x24D8, 0x24BE, "CIRCLED LATIN SMALL LETTER I", "CIRCLED LATIN CAPITAL LETTER I"}, + { 0x24D9, 0x24BF, "CIRCLED LATIN SMALL LETTER J", "CIRCLED LATIN CAPITAL LETTER J"}, + { 0x24DA, 0x24C0, "CIRCLED LATIN SMALL LETTER K", "CIRCLED LATIN CAPITAL LETTER K"}, + { 0x24DB, 0x24C1, "CIRCLED LATIN SMALL LETTER L", "CIRCLED LATIN CAPITAL LETTER L"}, + { 0x24DC, 0x24C2, "CIRCLED LATIN SMALL LETTER M", "CIRCLED LATIN CAPITAL LETTER M"}, + { 0x24DD, 0x24C3, "CIRCLED LATIN SMALL LETTER N", "CIRCLED LATIN CAPITAL LETTER N"}, + { 0x24DE, 0x24C4, "CIRCLED LATIN SMALL LETTER O", "CIRCLED LATIN CAPITAL LETTER O"}, + { 0x24DF, 0x24C5, "CIRCLED LATIN SMALL LETTER P", "CIRCLED LATIN CAPITAL LETTER P"}, + { 0x24E0, 0x24C6, "CIRCLED LATIN SMALL LETTER Q", "CIRCLED LATIN CAPITAL LETTER Q"}, + { 0x24E1, 0x24C7, "CIRCLED LATIN SMALL LETTER R", "CIRCLED LATIN CAPITAL LETTER R"}, + { 0x24E2, 0x24C8, "CIRCLED LATIN SMALL LETTER S", "CIRCLED LATIN CAPITAL LETTER S"}, + { 0x24E3, 0x24C9, "CIRCLED LATIN SMALL LETTER T", "CIRCLED LATIN CAPITAL LETTER T"}, + { 0x24E4, 0x24CA, "CIRCLED LATIN SMALL LETTER U", "CIRCLED LATIN CAPITAL LETTER U"}, + { 0x24E5, 0x24CB, "CIRCLED LATIN SMALL LETTER V", "CIRCLED LATIN CAPITAL LETTER V"}, + { 0x24E6, 0x24CC, "CIRCLED LATIN SMALL LETTER W", "CIRCLED LATIN CAPITAL LETTER W"}, + { 0x24E7, 0x24CD, "CIRCLED LATIN SMALL LETTER X", "CIRCLED LATIN CAPITAL LETTER X"}, + { 0x24E8, 0x24CE, "CIRCLED LATIN SMALL LETTER Y", "CIRCLED LATIN CAPITAL LETTER Y"}, + { 0x24E9, 0x24CF, "CIRCLED LATIN SMALL LETTER Z", "CIRCLED LATIN CAPITAL LETTER Z"}, + { 0xFF41, 0xFF21, "FULLWIDTH LATIN SMALL LETTER A", "FULLWIDTH LATIN CAPITAL LETTER A"}, + { 0xFF42, 0xFF22, "FULLWIDTH LATIN SMALL LETTER B", "FULLWIDTH LATIN CAPITAL LETTER B"}, + { 0xFF43, 0xFF23, "FULLWIDTH LATIN SMALL LETTER C", "FULLWIDTH LATIN CAPITAL LETTER C"}, + { 0xFF44, 0xFF24, "FULLWIDTH LATIN SMALL LETTER D", "FULLWIDTH LATIN CAPITAL LETTER D"}, + { 0xFF45, 0xFF25, "FULLWIDTH LATIN SMALL LETTER E", "FULLWIDTH LATIN CAPITAL LETTER E"}, + { 0xFF46, 0xFF26, "FULLWIDTH LATIN SMALL LETTER F", "FULLWIDTH LATIN CAPITAL LETTER F"}, + { 0xFF47, 0xFF27, "FULLWIDTH LATIN SMALL LETTER G", "FULLWIDTH LATIN CAPITAL LETTER G"}, + { 0xFF48, 0xFF28, "FULLWIDTH LATIN SMALL LETTER H", "FULLWIDTH LATIN CAPITAL LETTER H"}, + { 0xFF49, 0xFF29, "FULLWIDTH LATIN SMALL LETTER I", "FULLWIDTH LATIN CAPITAL LETTER I"}, + { 0xFF4A, 0xFF2A, "FULLWIDTH LATIN SMALL LETTER J", "FULLWIDTH LATIN CAPITAL LETTER J"}, + { 0xFF4B, 0xFF2B, "FULLWIDTH LATIN SMALL LETTER K", "FULLWIDTH LATIN CAPITAL LETTER K"}, + { 0xFF4C, 0xFF2C, "FULLWIDTH LATIN SMALL LETTER L", "FULLWIDTH LATIN CAPITAL LETTER L"}, + { 0xFF4D, 0xFF2D, "FULLWIDTH LATIN SMALL LETTER M", "FULLWIDTH LATIN CAPITAL LETTER M"}, + { 0xFF4E, 0xFF2E, "FULLWIDTH LATIN SMALL LETTER N", "FULLWIDTH LATIN CAPITAL LETTER N"}, + { 0xFF4F, 0xFF2F, "FULLWIDTH LATIN SMALL LETTER O", "FULLWIDTH LATIN CAPITAL LETTER O"}, + { 0xFF50, 0xFF30, "FULLWIDTH LATIN SMALL LETTER P", "FULLWIDTH LATIN CAPITAL LETTER P"}, + { 0xFF51, 0xFF31, "FULLWIDTH LATIN SMALL LETTER Q", "FULLWIDTH LATIN CAPITAL LETTER Q"}, + { 0xFF52, 0xFF32, "FULLWIDTH LATIN SMALL LETTER R", "FULLWIDTH LATIN CAPITAL LETTER R"}, + { 0xFF53, 0xFF33, "FULLWIDTH LATIN SMALL LETTER S", "FULLWIDTH LATIN CAPITAL LETTER S"}, + { 0xFF54, 0xFF34, "FULLWIDTH LATIN SMALL LETTER T", "FULLWIDTH LATIN CAPITAL LETTER T"}, + { 0xFF55, 0xFF35, "FULLWIDTH LATIN SMALL LETTER U", "FULLWIDTH LATIN CAPITAL LETTER U"}, + { 0xFF56, 0xFF36, "FULLWIDTH LATIN SMALL LETTER V", "FULLWIDTH LATIN CAPITAL LETTER V"}, + { 0xFF57, 0xFF37, "FULLWIDTH LATIN SMALL LETTER W", "FULLWIDTH LATIN CAPITAL LETTER W"}, + { 0xFF58, 0xFF38, "FULLWIDTH LATIN SMALL LETTER X", "FULLWIDTH LATIN CAPITAL LETTER X"}, + { 0xFF59, 0xFF39, "FULLWIDTH LATIN SMALL LETTER Y", "FULLWIDTH LATIN CAPITAL LETTER Y"}, + { 0xFF5A, 0xFF3A, "FULLWIDTH LATIN SMALL LETTER Z", "FULLWIDTH LATIN CAPITAL LETTER Z"} +}; + +/* + * Convert an upper-case letter to the corresponding lower-case letter. + */ +unsigned int wlc(unsigned int iChar) +{ + /* Number of elements */ + int iLBound = 0; + int iRBound = sizeof(mUCSU2L) / sizeof(UCSTransMap) - 1; + unsigned int iUC; + int iPos; + + /* Binary search */ + for(;;) + { + /* Calculate new position */ + iPos = (iRBound + iLBound) >> 1; + iUC = mUCSU2L[iPos].sc; + + /* Search in left half */ + if (iUC > iChar) { iRBound = iPos; } + /* Search in right half */ + else if (iUC < iChar) { iLBound = iPos; } + /* Found symbol */ + else { return mUCSU2L[iPos].dc; } + + /* Nothing found */ + if (iRBound - iLBound <= 1) + { + if (iChar == mUCSU2L[iRBound].sc) { return mUCSU2L[iRBound].dc; } + if (iChar == mUCSU2L[iLBound].sc) { return mUCSU2L[iLBound].dc; } + + return iChar; + } + } +/* Make compiler happy */ +return 0; +} + +/* + * Convert an lower-case letter to the corresponding upper-case letter. + */ +unsigned int wuc(unsigned int iChar) +{ + /* Number of elements */ + int iLBound = 0; + int iRBound = sizeof(mUCSL2U) / sizeof(UCSTransMap) - 1; + unsigned int iUC; + int iPos; + + /* Binary search */ + for(;;) + { + /* Calculate new position */ + iPos = (iRBound + iLBound) >> 1; + iUC = mUCSL2U[iPos].sc; + + /* Search in left half */ + if (iUC > iChar) { iRBound = iPos; } + /* Search in right half */ + else if (iUC < iChar) { iLBound = iPos; } + /* Found symbol */ + else { return mUCSL2U[iPos].dc; } + + /* Nothing found */ + if (iRBound - iLBound <= 1) + { + if (iChar == mUCSL2U[iRBound].sc) { return mUCSL2U[iRBound].dc; } + if (iChar == mUCSL2U[iLBound].sc) { return mUCSL2U[iLBound].dc; } + + return iChar; + } + } +/* Make compiler happy */ +return 0; +} + +/* End. */ diff --git a/tcejdb/chartables.h b/tcejdb/chartables.h new file mode 100644 index 0000000..08306e1 --- /dev/null +++ b/tcejdb/chartables.h @@ -0,0 +1,63 @@ +/*- + * Copyright (c) 2008 - 2010 CAS Dev Team + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the CAS Dev. Team nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * chartables.h + * + * $CAS$ + */ +#ifndef _CHARTABLES_H__ +#define _CHARTABLES_H__ 1 + +/* + @file chartables.h + @brief Character translation tables & accessors, header file + + Unicode uppercase to lowercase conversion mapping table + http://publib.boulder.ibm.com/infocenter/systems/index.jsp?topic=/nls/rbagslowtoupmaptable.htm&tocNode=int_39939 + + Unicode lowercase to uppercase conversion mapping table + http://publib.boulder.ibm.com/infocenter/systems/index.jsp?topic=/nls/rbagslowtoupmaptable.htm&tocNode=int_39940 +*/ + +/** + @fn unsigned int wlc(unsigned int iChar); + @brief Convert an upper-case letter to the corresponding lower-case letter. + @param iChar - UCS character + @return lowercase character if found in translation table or intouched character otherwise +*/ +unsigned int wlc(unsigned int iChar); + +/** + @fn unsigned int wuc(unsigned int iChar) + @brief Convert an lower-case letter to the corresponding upper-case letter. + @param iChar - UCS character + @return uppercase character if found in translation table or intouched character otherwise +*/ +unsigned int wuc(unsigned int iChar); + +#endif /* _CHARTABLES_H__ */ +/* End. */ diff --git a/tcejdb/configure b/tcejdb/configure index 74b3f32..1b6765f 100755 --- a/tcejdb/configure +++ b/tcejdb/configure @@ -2079,7 +2079,8 @@ MYFORMATVER="1.0" # Targets MYHEADERFILES="tcutil.h tchdb.h tcbdb.h tcfdb.h tctdb.h tcadb.h ejdb.h ejdefs.h bson.h" MYLIBRARYFILES="libtcejdb.a" -MYLIBOBJFILES="tcutil.o tchdb.o tcbdb.o tcfdb.o tctdb.o tcadb.o myconf.o md5.o ejdb.o bson.o timsort.o numbers.o encoding.o" +MYLIBOBJFILES="tcutil.o tchdb.o tcbdb.o tcfdb.o tctdb.o tcadb.o myconf.o md5.o ejdb.o \ +bson.o timsort.o numbers.o encoding.o translators.o stringutils.o chartables.o" MYCOMMANDFILES="tcutest tcumttest tcucodec tchtest tchmttest tchmgr" MYCOMMANDFILES="$MYCOMMANDFILES tcbtest tcbmttest tcbmgr tcftest tcfmttest tcfmgr" MYCOMMANDFILES="$MYCOMMANDFILES tcttest tctmttest tctmgr tcatest tcamttest tcamgr" @@ -2096,7 +2097,7 @@ MYPCFILES="tcejdb.pc" # Building flags MYCFLAGS="$MYCFLAGS -std=c99 -Wall -fPIC -fsigned-char -O2" MYCPPFLAGS="-I. -I\$(INCLUDEDIR) -I$HOME/include -I/usr/local/include" -MYCPPFLAGS="$MYCPPFLAGS -DNDEBUG -D_GNU_SOURCE=1 -D_REENTRANT -D__EXTENSIONS__" +MYCPPFLAGS="$MYCPPFLAGS -D_UNICODE -DNDEBUG -D_GNU_SOURCE=1 -D_REENTRANT -D__EXTENSIONS__" MYLDFLAGS="-L. -L\$(LIBDIR) -L$HOME/lib -L/usr/local/lib" MYCMDLDFLAGS="" MYRUNPATH="\$(LIBDIR)" diff --git a/tcejdb/configure.in b/tcejdb/configure.in index a3b2679..d39b216 100644 --- a/tcejdb/configure.in +++ b/tcejdb/configure.in @@ -21,7 +21,8 @@ MYFORMATVER="1.0" # Targets MYHEADERFILES="tcutil.h tchdb.h tcbdb.h tcfdb.h tctdb.h tcadb.h ejdb.h ejdefs.h bson.h" MYLIBRARYFILES="libtcejdb.a" -MYLIBOBJFILES="tcutil.o tchdb.o tcbdb.o tcfdb.o tctdb.o tcadb.o myconf.o md5.o ejdb.o bson.o timsort.o numbers.o encoding.o" +MYLIBOBJFILES="tcutil.o tchdb.o tcbdb.o tcfdb.o tctdb.o tcadb.o myconf.o md5.o ejdb.o \ +bson.o timsort.o numbers.o encoding.o translators.o stringutils.o chartables.o" MYCOMMANDFILES="tcutest tcumttest tcucodec tchtest tchmttest tchmgr" MYCOMMANDFILES="$MYCOMMANDFILES tcbtest tcbmttest tcbmgr tcftest tcfmttest tcfmgr" MYCOMMANDFILES="$MYCOMMANDFILES tcttest tctmttest tctmgr tcatest tcamttest tcamgr" @@ -38,7 +39,7 @@ MYPCFILES="tcejdb.pc" # Building flags MYCFLAGS="$MYCFLAGS -std=c99 -Wall -fPIC -fsigned-char -O2" MYCPPFLAGS="-I. -I\$(INCLUDEDIR) -I$HOME/include -I/usr/local/include" -MYCPPFLAGS="$MYCPPFLAGS -DNDEBUG -D_GNU_SOURCE=1 -D_REENTRANT -D__EXTENSIONS__" +MYCPPFLAGS="$MYCPPFLAGS -D_UNICODE -DNDEBUG -D_GNU_SOURCE=1 -D_REENTRANT -D__EXTENSIONS__" MYLDFLAGS="-L. -L\$(LIBDIR) -L$HOME/lib -L/usr/local/lib" MYCMDLDFLAGS="" MYRUNPATH="\$(LIBDIR)" diff --git a/tcejdb/stringutils.c b/tcejdb/stringutils.c new file mode 100644 index 0000000..29b2585 --- /dev/null +++ b/tcejdb/stringutils.c @@ -0,0 +1,192 @@ +/*- + * Copyright (c) 2008 - 2010 CAS Dev Team + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the CAS Dev. Team nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * translators.c + * + * $CAS$ + */ + +#include "translators.h" +#include "chartables.h" + +#include +#include + +/* + * Find length of NULL-terminated UTF8 string + */ +int utf8strlen(const char * szSrc) +{ + int iCharacters = 0; + int iProcessedSrc = 0; + + for(;;) + { + unsigned int iUCS = 0; + /* Exit condition */ + if (*szSrc == '\0') { break; } + + /* Convert symbol from UTF8 to UCS */ + iProcessedSrc = utf8tow(szSrc, 6, &iUCS); + + /* Incorrect input character */ + if (iProcessedSrc == -1) { return -1; } + + szSrc += iProcessedSrc; + + ++iCharacters; + } + +return iCharacters; +} + +/* + * Find length of UTF8 string, check not more than iSrcLen bytes. + */ +int utf8strnlen(const char * szSrc, int iSrcLen) +{ + int iCharacters = 0; + int iProcessedSrc = 0; + + for(;;) + { + unsigned int iUCS = 0; + /* Convert symbol from UTF8 to UCS */ + iProcessedSrc = utf8tow(szSrc, iSrcLen, &iUCS); + + /* Incorrect input character */ + if (iProcessedSrc == -1) { return -1; } + + szSrc += iProcessedSrc; + iSrcLen -= iProcessedSrc; + if (iUCS == 0 && iSrcLen == 0) { break; } + + ++iCharacters; + + /* Exit condition */ + if (iSrcLen == 0) { break; } + } + +return iCharacters; +} + +/* + * Compare two utf-8 strings + */ +int utf8strncmp(const char * szSrc1, int iSrc1Len, const char * szSrc2, int iSrc2Len) +{ + int iProcessedSrc1 = 0; + int iProcessedSrc2 = 0; + + unsigned int iUCS1 = 0; + unsigned int iUCS2 = 0; + for(;;) + { + /* Convert symbol from UTF8 to UCS */ + iProcessedSrc1 = utf8tow(szSrc1, iSrc1Len, &iUCS1); + /* Incorrect input character in first string */ + if (iProcessedSrc1 == -1) { return -2; } + + szSrc1 += iProcessedSrc1; + iSrc1Len -= iProcessedSrc1; + + /* Convert symbol from UTF8 to UCS */ + iProcessedSrc2 = utf8tow(szSrc2, iSrc2Len, &iUCS2); + /* Incorrect input character in second string */ + if (iProcessedSrc2 == -1) { return 2; } + + szSrc2 += iProcessedSrc2; + iSrc2Len -= iProcessedSrc2; + + /* + * In Modified UTF-8, the null character (U+0000) is encoded as 0xC0,0x80 + * rather than 0x00, which is not valid UTF-8 + */ + if (iUCS1 != iUCS2 || + iUCS1 == 0 || + iUCS2 == 0 || + iSrc1Len == 0 || + iSrc2Len == 0) { break; } + } + + if (iUCS1 > iUCS2) { return 1; } + if (iUCS1 < iUCS2) { return -1; } + +return 0; +} + +/* + *Compare two utf-8 strings, ignoring case + */ +int utf8strncasecmp(const char * szSrc1, int iSrc1Len, const char * szSrc2, int iSrc2Len) +{ + int iProcessedSrc1 = 0; + int iProcessedSrc2 = 0; + + unsigned int iUCS1 = 0; + unsigned int iUCS2 = 0; + for(;;) + { + /* Convert symbol from UTF8 to UCS */ + iProcessedSrc1 = utf8tow(szSrc1, iSrc1Len, &iUCS1); + /* Incorrect input character in first string */ + if (iProcessedSrc1 == -1) { return -2; } + + szSrc1 += iProcessedSrc1; + iSrc1Len -= iProcessedSrc1; + + /* Convert symbol from UTF8 to UCS */ + iProcessedSrc2 = utf8tow(szSrc2, iSrc2Len, &iUCS2); + /* Incorrect input character in second string */ + if (iProcessedSrc2 == -1) { return 2; } + + szSrc2 += iProcessedSrc2; + iSrc2Len -= iProcessedSrc2; + + /* Change case */ + iUCS1 = wlc(iUCS1); + /* Change case */ + iUCS2 = wlc(iUCS2); + + /* + * In Modified UTF-8, the null character (U+0000) is encoded as 0xC0,0x80 + * rather than 0x00, which is not valid UTF-8 + */ + if (iUCS1 != iUCS2 || + iUCS1 == 0 || + iUCS2 == 0 || + iSrc1Len == 0 || + iSrc2Len == 0) { break; } + } + + if (iUCS1 > iUCS2) { return 1; } + if (iUCS1 < iUCS2) { return -1; } + +return 0; +} + +/* End. */ diff --git a/tcejdb/stringutils.h b/tcejdb/stringutils.h new file mode 100644 index 0000000..4cc23dd --- /dev/null +++ b/tcejdb/stringutils.h @@ -0,0 +1,81 @@ +/*- + * Copyright (c) 2008 - 2010 CAS Dev Team + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the CAS Dev. Team nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * stringutils.h + * + * $CAS$ + */ +#ifndef _STRINGUTILS_H__ +#define _STRINGUTILS_H__ 1 + +/* + @file stringutils.h + @brief UTF8 strings functions +*/ + +/** + @fn int utf8strlen(const char * szSrc); + @brief Find length of NULL-terminated UTF8 string + @param szSrc - Source UTF8 string + @param iSrcLen - Source string length + @return >0 (number of utf8 characters) if success, -1 - if incorrect input character found +*/ +int utf8strlen(const char * szSrc); + +/** + @fn int utf8strlen(const char * szSrc, int iSrcLen); + @brief Find length of UTF8 string, check not more than iSrcLen bytes. + @param szSrc - Source UTF8 string + @param iSrcLen - Source string length + @return >0 (number of utf8 characters) if success, -1 - if incorrect input character found +*/ +int utf8strnlen(const char * szSrc, int iSrcLen); + +/** + @fn int utf8strncmp(const char * szSrc1, int iSrc1Len, const char * szSrc2, int iSrc2Len); + @brief Compare two utf-8 strings + @param szSrc1 - First UTF8 string + @param iSrc1Len - First string length + @param szSrc2 - Second UTF8 string + @param iSrc2Len - Second string length + @return +1, 0, -1 according as szSrc1 is lexicographically greater than, equal to, or less than szSrc2. If function return +2 or -2 it means that first or second string contains incorrct UTF8 characters +*/ +int utf8strncmp(const char * szSrc1, int iSrc1Len, const char * szSrc2, int iSrc2Len); + +/** + @fn int utf8strncasecmp(const char * szSrc1, int iSrc1Len, const char * szSrc2, int iSrc2Len); + @brief Compare two utf-8 strings, ignoring case + @param szSrc1 - First UTF8 string + @param iSrc1Len - First string length + @param szSrc2 - Second UTF8 string + @param iSrc2Len - Second string length + @return +1, 0, -1 according as szSrc1 is lexicographically greater than, equal to, or less than szSrc2 after translation of each corresponding character to lower-case. If function return -2 or +2 it means that first or second string contains incorrect UTF8 characters +*/ +int utf8strncasecmp(const char * szSrc1, int iSrc1Len, const char * szSrc2, int iSrc2Len); + +#endif /* _STRINGUTILS_H__ */ +/* End. */ diff --git a/tcejdb/translators.c b/tcejdb/translators.c new file mode 100644 index 0000000..945db95 --- /dev/null +++ b/tcejdb/translators.c @@ -0,0 +1,312 @@ +/*- + * Copyright (c) 2008 - 2010 CAS Dev Team + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the CAS Dev. Team nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * translators.c + * + * $CAS$ + */ + +#include "translators.h" +#include "chartables.h" + +#include +#include + +/** + @var typedef unsigned int ((*CaseFn)(unsigned int)); +*/ +typedef unsigned int ((*CaseFn)(unsigned int)); + +/* + * Convert UTF8 character to wide + */ +int wtoutf8(unsigned int iUCS, char * sUTF8) +{ + int iPos = 0; + int iCharLength = 0; + unsigned char sUTF8Prefix = 0; + + /* ASCII characters. */ + if ((iUCS & ~0x0000007F) == 0) + { + /* Modified UTF-8, special case */ + if (iUCS == 0) + { + sUTF8[0] = (char) 0xC0; + sUTF8[1] = (char) 0x80; + return 2; + } + + sUTF8[0] = (char)iUCS; + return 1; + } +/* + * Does not need here, but let it be + if ((iUCS & ~0x0000007F) == 0) + { + sUTF8Prefix = 0x00; // 11000000b + iCharLength = 1; + } else +*/ + + if ((iUCS & ~0x000007FF) == 0) + { + sUTF8Prefix = 0xC0; // 11000000b + iCharLength = 2; + } + else if ((iUCS & ~0x0000FFFF) == 0) + { + sUTF8Prefix = 0xE0; // 11100000b + iCharLength = 3; + } + else if ((iUCS & ~0x001FFFFF) == 0) + { + sUTF8Prefix = 0xF0; // 11110000b + iCharLength = 4; + } + else if ((iUCS & ~0x03FFFFFF) == 0) + { + sUTF8Prefix = 0xF8; // 11111000b + iCharLength = 5; + } + else if ((iUCS & ~0x7FFFFFFF) == 0) + { + sUTF8Prefix = 0xFC; // 11111100b + iCharLength = 6; + } + /* Incorrect multibyte character */ + else { return -1; } + + /* + * Convert UCS character to UTF8. Split value in 6-bit chunks and + * move to UTF8 string + */ + for (iPos = iCharLength - 1; iPos > 0; --iPos) + { + sUTF8[iPos] = (iUCS & 0x0000003F) | 0x80; + iUCS >>= 6; + } + + /* UTF8 prefix, special case */ + sUTF8[0] = (iUCS & 0x000000FF) | sUTF8Prefix; + +/* Return size of UTF8 character */ +return iCharLength; +} + +/* + * Convert character to UTF8 + */ +int utf8tow(const char * sUTF8, int iUTF8Length, unsigned int * iUCSResult) +{ + unsigned int iUCS = 0; + int iPos = 0; + int iCharLength = 0; + unsigned char ucPrefix = 0; + unsigned int uBoundary = 0; + + /* Incorrect multibyte sequence */ + if (iUTF8Length == 0 || sUTF8 == NULL) { return -1; } + + /* + Determine size of UTF8 character & check "shortest form" of char + */ + ucPrefix = (unsigned char)(*sUTF8); + + /* 10000000b & 00000000b */ + if ((ucPrefix & 0x80) == 0) + { + ucPrefix = 0x7F; + iCharLength = 1; + uBoundary = 0; + } + /* 11100000b & 11000000b */ + else if ((ucPrefix & 0xE0) == 0xC0) + { + ucPrefix = 0x1F; + iCharLength = 2; + uBoundary = 0x80; + } + /* 11110000b & 11100000b */ + else if ((ucPrefix & 0xF0) == 0xE0) + { + ucPrefix = 0x0F; + iCharLength = 3; + uBoundary = 0x00000800; + } + /* 11111000b & 11110000b */ + else if ((ucPrefix & 0xF8) == 0xF0) + { + ucPrefix = 0x07; + iCharLength = 4; + uBoundary = 0x00010000; + } + /* 11111100b & 11111000b */ + else if ((ucPrefix & 0xFC) == 0xF8) + { + ucPrefix = 0x03; + iCharLength = 5; + uBoundary = 0x00200000; + } + /* 11111110b & 11111100b */ + else if ((ucPrefix & 0xFE) == 0xFC) + { + ucPrefix = 0x01; + iCharLength = 6; + uBoundary = 0x04000000; + } + /* Invalid UTF8 sequence */ + else { return -1; } + + /* Invalid UTF8 sequence */ + if (iUTF8Length < iCharLength) { return -1; } + + /* Special case for first character */ + iUCS = (unsigned char)(*sUTF8) & ucPrefix; + ++sUTF8; + for (iPos = 1; iPos < iCharLength; ++iPos) + { + /* Incorect characters in middle of string */ + if (((*sUTF8) & 0xC0) != 0x80) { return -1; } + + /* Join value from 6-bit chunks */ + iUCS <<= 6; + iUCS |= (*sUTF8) & 0x3F; + ++sUTF8; + } + + /* Check boundary */ + if (iUCS < uBoundary) + { + /* Modified UTF-8, special case */ + if (!(iUCS == 0 && uBoundary == 0x80)) + { + /* Not a "shortest form" of char */ + return -1; + } + } + + *iUCSResult = iUCS; + +return iCharLength; +} + +/* + * Make a UTF8 string upper or lowercase + */ +int changeutf8case(const char * szSrc, int iSrcLen, char ** szDst, int * iDstLen, CaseFn pCaseFn) +{ + int iAllocated = iSrcLen; + char * szTMPDst = (char*) malloc(sizeof(char) * iAllocated); + int iRealDstLen = 0; + + int iProcessedSrc = 0; + int iProcessedDst = 0; + int iChars = 0; + + for(;;) + { + unsigned int iUCS = 0; + /* Convert symbol from UTF8 to UCS */ + iProcessedSrc = utf8tow(szSrc, iSrcLen, &iUCS); + /* Incorrect input character */ + if (iProcessedSrc == -1) + { + free(szTMPDst); + return -1; + } + + szSrc += iProcessedSrc; + iSrcLen -= iProcessedSrc; + + /* Modifies UTF-8. Special case for end-of-string */ + if (iSrcLen == 0 && iUCS == 0) + { + szTMPDst[iRealDstLen] = 0; + break; + } + + /* Change case */ + iUCS = ((*pCaseFn)(iUCS)); + + /* Convert symbol from UCS to UTF8 */ + iProcessedDst = wtoutf8(iUCS, szTMPDst + iRealDstLen); + /* Incorrect lowercase character; I hope, this should NEVER happened */ + if (iProcessedDst == -1) + { + free(szTMPDst); + return -2; + } + /* Store processed size */ + iRealDstLen += iProcessedDst; + + /* Check free memory in destination buffer */ + if (iRealDstLen + 6 > iAllocated) + { + char * szReallocated = NULL; + + /* Reallocate buffer to 1.5 sizes of original */ + iAllocated = iAllocated + iAllocated / 2; + szReallocated = realloc(szTMPDst, iAllocated * sizeof(char)); + /* Cannot reallocate memory */ + if (szReallocated == NULL) + { + free(szTMPDst); + return -3; + } + szTMPDst = szReallocated; + } + + /* Exit condition */ + if (iSrcLen == 0) { break; } + + + ++iChars; + } + + *iDstLen = iChars; + *szDst = szTMPDst; +return 0; +} + +/* + * Make a UTF8 string lowercase + */ +int utf8lcstr(const char * szSrc, int iSrcLen, char ** szDst, int * iDstLen) +{ + return changeutf8case(szSrc, iSrcLen, szDst, iDstLen, wlc); +} + +/* + * Make a UTF8 string uppercase + */ +int utf8ucstr(const char * szSrc, int iSrcLen, char ** szDst, int * iDstLen) +{ + return changeutf8case(szSrc, iSrcLen, szDst, iDstLen, wuc); +} + +/* End. */ diff --git a/tcejdb/translators.h b/tcejdb/translators.h new file mode 100644 index 0000000..e029d47 --- /dev/null +++ b/tcejdb/translators.h @@ -0,0 +1,82 @@ +/*- + * Copyright (c) 2008 - 2010 CAS Dev Team + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the CAS Dev. Team nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * translators.h + * + * $CAS$ + */ +#ifndef _TRANSLATORS_H__ +#define _TRANSLATORS_H__ 1 + +/* + @file translatros.h + @brief Uppercase/lowercase manipulation functions +*/ + +/** + @fn int wtoutf8(unsigned int iUCS, char * sUTF8); + @brief convert UTF8 character to wide + @param iUCS - UCS character + @param sUTF8 - UTF8 string, at least 6 bytes length + @return size of UTF8 character if success or -1 otherwise +*/ +int wtoutf8(unsigned int iUCS, char * sUTF8); + +/** + @fn int utf8tow(const char * sUTF8, int iUTF8Length, unsigned int * iUCSResult); + @brief convert character to UTF8 + @param sUTF8 - String with UTF8 characters + @param iUTF8Length - max. string length + @param iUCSResult - UCS character + @return size of UTF8 character if success or -1 otherwise +*/ +int utf8tow(const char * sUTF8, int iUTF8Length, unsigned int * iUCSResult); + +/** + @fn int utf8lcstr(const char * szSrc, int iSrcLen, char ** szDst, int * iDstLen); + @brief Make a UTF8 string lowercase + @param szSrc - Source UTF8 string + @param iSrcLen - Source string length + @param szDst - Destination UTF8 string + @param iDstLen - Destination string length + @return 0 - if success, -1 - if incorrect input character found, -2 - if incorrect lowercase character found in translation table ; -3 - if can't reallocate memory. +*/ +int utf8lcstr(const char * szSrc, int iSrcLen, char ** szDst, int * iDstLen); + +/** + @fn int utf8ucstr(const char * szSrc, int iSrcLen, char ** szDst, int * iDstLen); + @brief Make a UTF8 string uppercase + @param szSrc - Source UTF8 string + @param iSrcLen - Source string length + @param szDst - Destination UTF8 string + @param iDstLen - Destination string length + @return 0 - if success, -1 - if incorrect input character found, -2 - if incorrect lowercase character found in translation table ; -3 - if can't reallocate memory. +*/ +int utf8ucstr(const char * szSrc, int iSrcLen, char ** szDst, int * iDstLen); + +#endif /* _TRANSLATORS_H__ */ +/* End. */ -- 2.7.4