/* AbiSource Program Utilities * Copyright (C) 2001 Tomas Frydrych * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef UT_CASE_H #define UT_CASE_H // this file is to be included in ut_string.cpp only !!! #ifndef UT_STRING_CPP #error !!! This file can only be included in ut_string.cpp !!! #endif struct case_entry { UT_UCSChar code; UT_Byte type; UT_UCSChar other; }; /* the following structure works this way: low indicates lower boundary, and high upper boundary of a range that is to be treated in the same way, depending on type if type is Lu/Ll, then the character is Upper/Lowecase and the other can be found by adding the diff if type is Lu_even, then all even characters in this range are Upper-, while odd characters are Lower-case; a lowecase character is obtained by adding diff while uppercase character is obtained by subtracting diff. if type is Lu_odd, the all odd characters in this range are Upper-, while even characters are Lower-case; a lowercase character is obtained by adding the diff, while uppercase character is obtained by subtracting diff. */ #if 0 struct case_entry2 { UT_UCSChar low; UT_UCSChar high; UT_Byte type; UT_sint32 diff; } case_entry2 case_table2[] = { {0x0041, 0x005a, Lu, 0x0020}, {0x0061, 0x007a, Ll, -0x0020}, {0x00b5, 0x00b5, Ll, 0x02e7}, {0x00c0, 0x00d6, Lu, 0x0020}, {0x00d8, 0x00de, Lu, 0x0020}, {0x00e0, 0x00f6, Ll, -0x0020}, {0x00f8, 0x00fe, Ll, -0x0020}, {0x00ff, 0x00ff, Ll, 0x0079}, {0x0100, 0x012f, Lu_even, 0x0001}, {0x0130, 0x0130, Lu, -0x00c7}, {0x0131, 0x0131, Ll, -0x00e8}, {0x0132, 0x0137, Lu_even, 0x0001}, {0x0139, 0x0148, Lu_odd, 0x0001}, {0x014A, 0x0177, Lu_even, 0x0001}, {0x0178, 0x0178, Ll, -0x0079}, {0x0179, 0x017e, Lu_odd, 0x0001}, {0x017f, 0x017f, Ll, -0x0125}, {0x0181, 0x0181, Lu, 0x00d2}, {0x0182, 0x0188, Lu_even, 0x0001}, {0x2c80, 0x2ce3, Lu_even, 0x0001}, /* Coptic */ } #endif #define Lu 1 #define Ll 0 static int s_cmp_case(const void * c1, const void * c2) { const UT_UCSChar * C1 = (const UT_UCSChar *) c1; const case_entry * C2 = (const case_entry *) c2; return *C1 - C2->code; } // must stay sorted !!! case_entry case_table[] = { {0x0041, Lu, 0x0061}, {0x0042, Lu, 0x0062}, {0x0043, Lu, 0x0063}, {0x0044, Lu, 0x0064}, {0x0045, Lu, 0x0065}, {0x0046, Lu, 0x0066}, {0x0047, Lu, 0x0067}, {0x0048, Lu, 0x0068}, {0x0049, Lu, 0x0069}, {0x004A, Lu, 0x006A}, {0x004B, Lu, 0x006B}, {0x004C, Lu, 0x006C}, {0x004D, Lu, 0x006D}, {0x004E, Lu, 0x006E}, {0x004F, Lu, 0x006F}, {0x0050, Lu, 0x0070}, {0x0051, Lu, 0x0071}, {0x0052, Lu, 0x0072}, {0x0053, Lu, 0x0073}, {0x0054, Lu, 0x0074}, {0x0055, Lu, 0x0075}, {0x0056, Lu, 0x0076}, {0x0057, Lu, 0x0077}, {0x0058, Lu, 0x0078}, {0x0059, Lu, 0x0079}, {0x005A, Lu, 0x007A}, {0x0061, Ll, 0x0041}, {0x0062, Ll, 0x0042}, {0x0063, Ll, 0x0043}, {0x0064, Ll, 0x0044}, {0x0065, Ll, 0x0045}, {0x0066, Ll, 0x0046}, {0x0067, Ll, 0x0047}, {0x0068, Ll, 0x0048}, {0x0069, Ll, 0x0049}, {0x006A, Ll, 0x004A}, {0x006B, Ll, 0x004B}, {0x006C, Ll, 0x004C}, {0x006D, Ll, 0x004D}, {0x006E, Ll, 0x004E}, {0x006F, Ll, 0x004F}, {0x0070, Ll, 0x0050}, {0x0071, Ll, 0x0051}, {0x0072, Ll, 0x0052}, {0x0073, Ll, 0x0053}, {0x0074, Ll, 0x0054}, {0x0075, Ll, 0x0055}, {0x0076, Ll, 0x0056}, {0x0077, Ll, 0x0057}, {0x0078, Ll, 0x0058}, {0x0079, Ll, 0x0059}, {0x007A, Ll, 0x005A}, {0x00B5, Ll, 0x039C}, {0x00C0, Lu, 0x00E0}, {0x00C1, Lu, 0x00E1}, {0x00C2, Lu, 0x00E2}, {0x00C3, Lu, 0x00E3}, {0x00C4, Lu, 0x00E4}, {0x00C5, Lu, 0x00E5}, {0x00C6, Lu, 0x00E6}, {0x00C7, Lu, 0x00E7}, {0x00C8, Lu, 0x00E8}, {0x00C9, Lu, 0x00E9}, {0x00CA, Lu, 0x00EA}, {0x00CB, Lu, 0x00EB}, {0x00CC, Lu, 0x00EC}, {0x00CD, Lu, 0x00ED}, {0x00CE, Lu, 0x00EE}, {0x00CF, Lu, 0x00EF}, {0x00D0, Lu, 0x00F0}, {0x00D1, Lu, 0x00F1}, {0x00D2, Lu, 0x00F2}, {0x00D3, Lu, 0x00F3}, {0x00D4, Lu, 0x00F4}, {0x00D5, Lu, 0x00F5}, {0x00D6, Lu, 0x00F6}, {0x00D8, Lu, 0x00F8}, {0x00D9, Lu, 0x00F9}, {0x00DA, Lu, 0x00FA}, {0x00DB, Lu, 0x00FB}, {0x00DC, Lu, 0x00FC}, {0x00DD, Lu, 0x00FD}, {0x00DE, Lu, 0x00FE}, {0x00E0, Ll, 0x00C0}, {0x00E1, Ll, 0x00C1}, {0x00E2, Ll, 0x00C2}, {0x00E3, Ll, 0x00C3}, {0x00E4, Ll, 0x00C4}, {0x00E5, Ll, 0x00C5}, {0x00E6, Ll, 0x00C6}, {0x00E7, Ll, 0x00C7}, {0x00E8, Ll, 0x00C8}, {0x00E9, Ll, 0x00C9}, {0x00EA, Ll, 0x00CA}, {0x00EB, Ll, 0x00CB}, {0x00EC, Ll, 0x00CC}, {0x00ED, Ll, 0x00CD}, {0x00EE, Ll, 0x00CE}, {0x00EF, Ll, 0x00CF}, {0x00F0, Ll, 0x00D0}, {0x00F1, Ll, 0x00D1}, {0x00F2, Ll, 0x00D2}, {0x00F3, Ll, 0x00D3}, {0x00F4, Ll, 0x00D4}, {0x00F5, Ll, 0x00D5}, {0x00F6, Ll, 0x00D6}, {0x00F8, Ll, 0x00D8}, {0x00F9, Ll, 0x00D9}, {0x00FA, Ll, 0x00DA}, {0x00FB, Ll, 0x00DB}, {0x00FC, Ll, 0x00DC}, {0x00FD, Ll, 0x00DD}, {0x00FE, Ll, 0x00DE}, {0x00FF, Ll, 0x0178}, {0x0100, Lu, 0x0101}, {0x0101, Ll, 0x0100}, {0x0102, Lu, 0x0103}, {0x0103, Ll, 0x0102}, {0x0104, Lu, 0x0105}, {0x0105, Ll, 0x0104}, {0x0106, Lu, 0x0107}, {0x0107, Ll, 0x0106}, {0x0108, Lu, 0x0109}, {0x0109, Ll, 0x0108}, {0x010A, Lu, 0x010B}, {0x010B, Ll, 0x010A}, {0x010C, Lu, 0x010D}, {0x010D, Ll, 0x010C}, {0x010E, Lu, 0x010F}, {0x010F, Ll, 0x010E}, {0x0110, Lu, 0x0111}, {0x0111, Ll, 0x0110}, {0x0112, Lu, 0x0113}, {0x0113, Ll, 0x0112}, {0x0114, Lu, 0x0115}, {0x0115, Ll, 0x0114}, {0x0116, Lu, 0x0117}, {0x0117, Ll, 0x0116}, {0x0118, Lu, 0x0119}, {0x0119, Ll, 0x0118}, {0x011A, Lu, 0x011B}, {0x011B, Ll, 0x011A}, {0x011C, Lu, 0x011D}, {0x011D, Ll, 0x011C}, {0x011E, Lu, 0x011F}, {0x011F, Ll, 0x011E}, {0x0120, Lu, 0x0121}, {0x0121, Ll, 0x0120}, {0x0122, Lu, 0x0123}, {0x0123, Ll, 0x0122}, {0x0124, Lu, 0x0125}, {0x0125, Ll, 0x0124}, {0x0126, Lu, 0x0127}, {0x0127, Ll, 0x0126}, {0x0128, Lu, 0x0129}, {0x0129, Ll, 0x0128}, {0x012A, Lu, 0x012B}, {0x012B, Ll, 0x012A}, {0x012C, Lu, 0x012D}, {0x012D, Ll, 0x012C}, {0x012E, Lu, 0x012F}, {0x012F, Ll, 0x012E}, {0x0130, Lu, 0x0069}, {0x0131, Ll, 0x0049}, {0x0132, Lu, 0x0133}, {0x0133, Ll, 0x0132}, {0x0134, Lu, 0x0135}, {0x0135, Ll, 0x0134}, {0x0136, Lu, 0x0137}, {0x0137, Ll, 0x0136}, {0x0139, Lu, 0x013A}, {0x013A, Ll, 0x0139}, {0x013B, Lu, 0x013C}, {0x013C, Ll, 0x013B}, {0x013D, Lu, 0x013E}, {0x013E, Ll, 0x013D}, {0x013F, Lu, 0x0140}, {0x0140, Ll, 0x013F}, {0x0141, Lu, 0x0142}, {0x0142, Ll, 0x0141}, {0x0143, Lu, 0x0144}, {0x0144, Ll, 0x0143}, {0x0145, Lu, 0x0146}, {0x0146, Ll, 0x0145}, {0x0147, Lu, 0x0148}, {0x0148, Ll, 0x0147}, {0x014A, Lu, 0x014B}, {0x014B, Ll, 0x014A}, {0x014C, Lu, 0x014D}, {0x014D, Ll, 0x014C}, {0x014E, Lu, 0x014F}, {0x014F, Ll, 0x014E}, {0x0150, Lu, 0x0151}, {0x0151, Ll, 0x0150}, {0x0152, Lu, 0x0153}, {0x0153, Ll, 0x0152}, {0x0154, Lu, 0x0155}, {0x0155, Ll, 0x0154}, {0x0156, Lu, 0x0157}, {0x0157, Ll, 0x0156}, {0x0158, Lu, 0x0159}, {0x0159, Ll, 0x0158}, {0x015A, Lu, 0x015B}, {0x015B, Ll, 0x015A}, {0x015C, Lu, 0x015D}, {0x015D, Ll, 0x015C}, {0x015E, Lu, 0x015F}, {0x015F, Ll, 0x015E}, {0x0160, Lu, 0x0161}, {0x0161, Ll, 0x0160}, {0x0162, Lu, 0x0163}, {0x0163, Ll, 0x0162}, {0x0164, Lu, 0x0165}, {0x0165, Ll, 0x0164}, {0x0166, Lu, 0x0167}, {0x0167, Ll, 0x0166}, {0x0168, Lu, 0x0169}, {0x0169, Ll, 0x0168}, {0x016A, Lu, 0x016B}, {0x016B, Ll, 0x016A}, {0x016C, Lu, 0x016D}, {0x016D, Ll, 0x016C}, {0x016E, Lu, 0x016F}, {0x016F, Ll, 0x016E}, {0x0170, Lu, 0x0171}, {0x0171, Ll, 0x0170}, {0x0172, Lu, 0x0173}, {0x0173, Ll, 0x0172}, {0x0174, Lu, 0x0175}, {0x0175, Ll, 0x0174}, {0x0176, Lu, 0x0177}, {0x0177, Ll, 0x0176}, {0x0178, Lu, 0x00FF}, {0x0179, Lu, 0x017A}, {0x017A, Ll, 0x0179}, {0x017B, Lu, 0x017C}, {0x017C, Ll, 0x017B}, {0x017D, Lu, 0x017E}, {0x017E, Ll, 0x017D}, {0x017F, Ll, 0x0053}, {0x0181, Lu, 0x0253}, {0x0182, Lu, 0x0183}, {0x0183, Ll, 0x0182}, {0x0184, Lu, 0x0185}, {0x0185, Ll, 0x0184}, {0x0186, Lu, 0x0254}, {0x0187, Lu, 0x0188}, {0x0188, Ll, 0x0187}, {0x0189, Lu, 0x0256}, {0x018A, Lu, 0x0257}, {0x018B, Lu, 0x018C}, {0x018C, Ll, 0x018B}, {0x018E, Lu, 0x01DD}, {0x018F, Lu, 0x0259}, {0x0190, Lu, 0x025B}, {0x0191, Lu, 0x0192}, {0x0192, Ll, 0x0191}, {0x0193, Lu, 0x0260}, {0x0194, Lu, 0x0263}, {0x0195, Ll, 0x01F6}, {0x0196, Lu, 0x0269}, {0x0197, Lu, 0x0268}, {0x0198, Lu, 0x0199}, {0x0199, Ll, 0x0198}, {0x019C, Lu, 0x026F}, {0x019D, Lu, 0x0272}, {0x019F, Lu, 0x0275}, {0x01A0, Lu, 0x01A1}, {0x01A1, Ll, 0x01A0}, {0x01A2, Lu, 0x01A3}, {0x01A3, Ll, 0x01A2}, {0x01A4, Lu, 0x01A5}, {0x01A5, Ll, 0x01A4}, {0x01A6, Lu, 0x0280}, {0x01A7, Lu, 0x01A8}, {0x01A8, Ll, 0x01A7}, {0x01A9, Lu, 0x0283}, {0x01AC, Lu, 0x01AD}, {0x01AD, Ll, 0x01AC}, {0x01AE, Lu, 0x0288}, {0x01AF, Lu, 0x01B0}, {0x01B0, Ll, 0x01AF}, {0x01B1, Lu, 0x028A}, {0x01B2, Lu, 0x028B}, {0x01B3, Lu, 0x01B4}, {0x01B4, Ll, 0x01B3}, {0x01B5, Lu, 0x01B6}, {0x01B6, Ll, 0x01B5}, {0x01B7, Lu, 0x0292}, {0x01B8, Lu, 0x01B9}, {0x01B9, Ll, 0x01B8}, {0x01BC, Lu, 0x01BD}, {0x01BD, Ll, 0x01BC}, {0x01BF, Ll, 0x01F7}, {0x01C4, Lu, 0x01C6}, {0x01C6, Ll, 0x01C5}, {0x01C7, Lu, 0x01C9}, {0x01C9, Ll, 0x01C8}, {0x01CA, Lu, 0x01CC}, {0x01CC, Ll, 0x01CB}, {0x01CD, Lu, 0x01CE}, {0x01CE, Ll, 0x01CD}, {0x01CF, Lu, 0x01D0}, {0x01D0, Ll, 0x01CF}, {0x01D1, Lu, 0x01D2}, {0x01D2, Ll, 0x01D1}, {0x01D3, Lu, 0x01D4}, {0x01D4, Ll, 0x01D3}, {0x01D5, Lu, 0x01D6}, {0x01D6, Ll, 0x01D5}, {0x01D7, Lu, 0x01D8}, {0x01D8, Ll, 0x01D7}, {0x01D9, Lu, 0x01DA}, {0x01DA, Ll, 0x01D9}, {0x01DB, Lu, 0x01DC}, {0x01DC, Ll, 0x01DB}, {0x01DD, Ll, 0x018E}, {0x01DE, Lu, 0x01DF}, {0x01DF, Ll, 0x01DE}, {0x01E0, Lu, 0x01E1}, {0x01E1, Ll, 0x01E0}, {0x01E2, Lu, 0x01E3}, {0x01E3, Ll, 0x01E2}, {0x01E4, Lu, 0x01E5}, {0x01E5, Ll, 0x01E4}, {0x01E6, Lu, 0x01E7}, {0x01E7, Ll, 0x01E6}, {0x01E8, Lu, 0x01E9}, {0x01E9, Ll, 0x01E8}, {0x01EA, Lu, 0x01EB}, {0x01EB, Ll, 0x01EA}, {0x01EC, Lu, 0x01ED}, {0x01ED, Ll, 0x01EC}, {0x01EE, Lu, 0x01EF}, {0x01EF, Ll, 0x01EE}, {0x01F1, Lu, 0x01F3}, {0x01F3, Ll, 0x01F2}, {0x01F4, Lu, 0x01F5}, {0x01F5, Ll, 0x01F4}, {0x01F6, Lu, 0x0195}, {0x01F7, Lu, 0x01BF}, {0x01F8, Lu, 0x01F9}, {0x01F9, Ll, 0x01F8}, {0x01FA, Lu, 0x01FB}, {0x01FB, Ll, 0x01FA}, {0x01FC, Lu, 0x01FD}, {0x01FD, Ll, 0x01FC}, {0x01FE, Lu, 0x01FF}, {0x01FF, Ll, 0x01FE}, {0x0200, Lu, 0x0201}, {0x0201, Ll, 0x0200}, {0x0202, Lu, 0x0203}, {0x0203, Ll, 0x0202}, {0x0204, Lu, 0x0205}, {0x0205, Ll, 0x0204}, {0x0206, Lu, 0x0207}, {0x0207, Ll, 0x0206}, {0x0208, Lu, 0x0209}, {0x0209, Ll, 0x0208}, {0x020A, Lu, 0x020B}, {0x020B, Ll, 0x020A}, {0x020C, Lu, 0x020D}, {0x020D, Ll, 0x020C}, {0x020E, Lu, 0x020F}, {0x020F, Ll, 0x020E}, {0x0210, Lu, 0x0211}, {0x0211, Ll, 0x0210}, {0x0212, Lu, 0x0213}, {0x0213, Ll, 0x0212}, {0x0214, Lu, 0x0215}, {0x0215, Ll, 0x0214}, {0x0216, Lu, 0x0217}, {0x0217, Ll, 0x0216}, {0x0218, Lu, 0x0219}, {0x0219, Ll, 0x0218}, {0x021A, Lu, 0x021B}, {0x021B, Ll, 0x021A}, {0x021C, Lu, 0x021D}, {0x021D, Ll, 0x021C}, {0x021E, Lu, 0x021F}, {0x021F, Ll, 0x021E}, {0x0222, Lu, 0x0223}, {0x0223, Ll, 0x0222}, {0x0224, Lu, 0x0225}, {0x0225, Ll, 0x0224}, {0x0226, Lu, 0x0227}, {0x0227, Ll, 0x0226}, {0x0228, Lu, 0x0229}, {0x0229, Ll, 0x0228}, {0x022A, Lu, 0x022B}, {0x022B, Ll, 0x022A}, {0x022C, Lu, 0x022D}, {0x022D, Ll, 0x022C}, {0x022E, Lu, 0x022F}, {0x022F, Ll, 0x022E}, {0x0230, Lu, 0x0231}, {0x0231, Ll, 0x0230}, {0x0232, Lu, 0x0233}, {0x0233, Ll, 0x0232}, {0x0253, Ll, 0x0181}, {0x0254, Ll, 0x0186}, {0x0256, Ll, 0x0189}, {0x0257, Ll, 0x018A}, {0x0259, Ll, 0x018F}, {0x025B, Ll, 0x0190}, {0x0260, Ll, 0x0193}, {0x0263, Ll, 0x0194}, {0x0268, Ll, 0x0197}, {0x0269, Ll, 0x0196}, {0x026F, Ll, 0x019C}, {0x0272, Ll, 0x019D}, {0x0275, Ll, 0x019F}, {0x0280, Ll, 0x01A6}, {0x0283, Ll, 0x01A9}, {0x0288, Ll, 0x01AE}, {0x028A, Ll, 0x01B1}, {0x028B, Ll, 0x01B2}, {0x0292, Ll, 0x01B7}, {0x0386, Lu, 0x03AC}, {0x0388, Lu, 0x03AD}, {0x0389, Lu, 0x03AE}, {0x038A, Lu, 0x03AF}, {0x038C, Lu, 0x03CC}, {0x038E, Lu, 0x03CD}, {0x038F, Lu, 0x03CE}, {0x0391, Lu, 0x03B1}, {0x0392, Lu, 0x03B2}, {0x0393, Lu, 0x03B3}, {0x0394, Lu, 0x03B4}, {0x0395, Lu, 0x03B5}, {0x0396, Lu, 0x03B6}, {0x0397, Lu, 0x03B7}, {0x0398, Lu, 0x03B8}, {0x0399, Lu, 0x03B9}, {0x039A, Lu, 0x03BA}, {0x039B, Lu, 0x03BB}, {0x039C, Lu, 0x03BC}, {0x039D, Lu, 0x03BD}, {0x039E, Lu, 0x03BE}, {0x039F, Lu, 0x03BF}, {0x03A0, Lu, 0x03C0}, {0x03A1, Lu, 0x03C1}, {0x03A3, Lu, 0x03C3}, {0x03A4, Lu, 0x03C4}, {0x03A5, Lu, 0x03C5}, {0x03A6, Lu, 0x03C6}, {0x03A7, Lu, 0x03C7}, {0x03A8, Lu, 0x03C8}, {0x03A9, Lu, 0x03C9}, {0x03AA, Lu, 0x03CA}, {0x03AB, Lu, 0x03CB}, {0x03AC, Ll, 0x0386}, {0x03AD, Ll, 0x0388}, {0x03AE, Ll, 0x0389}, {0x03AF, Ll, 0x038A}, {0x03B1, Ll, 0x0391}, {0x03B2, Ll, 0x0392}, {0x03B3, Ll, 0x0393}, {0x03B4, Ll, 0x0394}, {0x03B5, Ll, 0x0395}, {0x03B6, Ll, 0x0396}, {0x03B7, Ll, 0x0397}, {0x03B8, Ll, 0x0398}, {0x03B9, Ll, 0x0399}, {0x03BA, Ll, 0x039A}, {0x03BB, Ll, 0x039B}, {0x03BC, Ll, 0x039C}, {0x03BD, Ll, 0x039D}, {0x03BE, Ll, 0x039E}, {0x03BF, Ll, 0x039F}, {0x03C0, Ll, 0x03A0}, {0x03C1, Ll, 0x03A1}, {0x03C2, Ll, 0x03A3}, {0x03C3, Ll, 0x03A3}, {0x03C4, Ll, 0x03A4}, {0x03C5, Ll, 0x03A5}, {0x03C6, Ll, 0x03A6}, {0x03C7, Ll, 0x03A7}, {0x03C8, Ll, 0x03A8}, {0x03C9, Ll, 0x03A9}, {0x03CA, Ll, 0x03AA}, {0x03CB, Ll, 0x03AB}, {0x03CC, Ll, 0x038C}, {0x03CD, Ll, 0x038E}, {0x03CE, Ll, 0x038F}, {0x03D0, Ll, 0x0392}, {0x03D1, Ll, 0x0398}, {0x03D5, Ll, 0x03A6}, {0x03D6, Ll, 0x03A0}, {0x03DA, Lu, 0x03DB}, {0x03DB, Ll, 0x03DA}, {0x03DC, Lu, 0x03DD}, {0x03DD, Ll, 0x03DC}, {0x03DE, Lu, 0x03DF}, {0x03DF, Ll, 0x03DE}, {0x03E0, Lu, 0x03E1}, {0x03E1, Ll, 0x03E0}, {0x03E2, Lu, 0x03E3}, {0x03E3, Ll, 0x03E2}, {0x03E4, Lu, 0x03E5}, {0x03E5, Ll, 0x03E4}, {0x03E6, Lu, 0x03E7}, {0x03E7, Ll, 0x03E6}, {0x03E8, Lu, 0x03E9}, {0x03E9, Ll, 0x03E8}, {0x03EA, Lu, 0x03EB}, {0x03EB, Ll, 0x03EA}, {0x03EC, Lu, 0x03ED}, {0x03ED, Ll, 0x03EC}, {0x03EE, Lu, 0x03EF}, {0x03EF, Ll, 0x03EE}, {0x03F0, Ll, 0x039A}, {0x03F1, Ll, 0x03A1}, {0x03F2, Ll, 0x03A3}, {0x03F4, Lu, 0x03B8}, {0x03F5, Ll, 0x0395}, {0x0400, Lu, 0x0450}, {0x0401, Lu, 0x0451}, {0x0402, Lu, 0x0452}, {0x0403, Lu, 0x0453}, {0x0404, Lu, 0x0454}, {0x0405, Lu, 0x0455}, {0x0406, Lu, 0x0456}, {0x0407, Lu, 0x0457}, {0x0408, Lu, 0x0458}, {0x0409, Lu, 0x0459}, {0x040A, Lu, 0x045A}, {0x040B, Lu, 0x045B}, {0x040C, Lu, 0x045C}, {0x040D, Lu, 0x045D}, {0x040E, Lu, 0x045E}, {0x040F, Lu, 0x045F}, {0x0410, Lu, 0x0430}, {0x0411, Lu, 0x0431}, {0x0412, Lu, 0x0432}, {0x0413, Lu, 0x0433}, {0x0414, Lu, 0x0434}, {0x0415, Lu, 0x0435}, {0x0416, Lu, 0x0436}, {0x0417, Lu, 0x0437}, {0x0418, Lu, 0x0438}, {0x0419, Lu, 0x0439}, {0x041A, Lu, 0x043A}, {0x041B, Lu, 0x043B}, {0x041C, Lu, 0x043C}, {0x041D, Lu, 0x043D}, {0x041E, Lu, 0x043E}, {0x041F, Lu, 0x043F}, {0x0420, Lu, 0x0440}, {0x0421, Lu, 0x0441}, {0x0422, Lu, 0x0442}, {0x0423, Lu, 0x0443}, {0x0424, Lu, 0x0444}, {0x0425, Lu, 0x0445}, {0x0426, Lu, 0x0446}, {0x0427, Lu, 0x0447}, {0x0428, Lu, 0x0448}, {0x0429, Lu, 0x0449}, {0x042A, Lu, 0x044A}, {0x042B, Lu, 0x044B}, {0x042C, Lu, 0x044C}, {0x042D, Lu, 0x044D}, {0x042E, Lu, 0x044E}, {0x042F, Lu, 0x044F}, {0x0430, Ll, 0x0410}, {0x0431, Ll, 0x0411}, {0x0432, Ll, 0x0412}, {0x0433, Ll, 0x0413}, {0x0434, Ll, 0x0414}, {0x0435, Ll, 0x0415}, {0x0436, Ll, 0x0416}, {0x0437, Ll, 0x0417}, {0x0438, Ll, 0x0418}, {0x0439, Ll, 0x0419}, {0x043A, Ll, 0x041A}, {0x043B, Ll, 0x041B}, {0x043C, Ll, 0x041C}, {0x043D, Ll, 0x041D}, {0x043E, Ll, 0x041E}, {0x043F, Ll, 0x041F}, {0x0440, Ll, 0x0420}, {0x0441, Ll, 0x0421}, {0x0442, Ll, 0x0422}, {0x0443, Ll, 0x0423}, {0x0444, Ll, 0x0424}, {0x0445, Ll, 0x0425}, {0x0446, Ll, 0x0426}, {0x0447, Ll, 0x0427}, {0x0448, Ll, 0x0428}, {0x0449, Ll, 0x0429}, {0x044A, Ll, 0x042A}, {0x044B, Ll, 0x042B}, {0x044C, Ll, 0x042C}, {0x044D, Ll, 0x042D}, {0x044E, Ll, 0x042E}, {0x044F, Ll, 0x042F}, {0x0450, Ll, 0x0400}, {0x0451, Ll, 0x0401}, {0x0452, Ll, 0x0402}, {0x0453, Ll, 0x0403}, {0x0454, Ll, 0x0404}, {0x0455, Ll, 0x0405}, {0x0456, Ll, 0x0406}, {0x0457, Ll, 0x0407}, {0x0458, Ll, 0x0408}, {0x0459, Ll, 0x0409}, {0x045A, Ll, 0x040A}, {0x045B, Ll, 0x040B}, {0x045C, Ll, 0x040C}, {0x045D, Ll, 0x040D}, {0x045E, Ll, 0x040E}, {0x045F, Ll, 0x040F}, {0x0460, Lu, 0x0461}, {0x0461, Ll, 0x0460}, {0x0462, Lu, 0x0463}, {0x0463, Ll, 0x0462}, {0x0464, Lu, 0x0465}, {0x0465, Ll, 0x0464}, {0x0466, Lu, 0x0467}, {0x0467, Ll, 0x0466}, {0x0468, Lu, 0x0469}, {0x0469, Ll, 0x0468}, {0x046A, Lu, 0x046B}, {0x046B, Ll, 0x046A}, {0x046C, Lu, 0x046D}, {0x046D, Ll, 0x046C}, {0x046E, Lu, 0x046F}, {0x046F, Ll, 0x046E}, {0x0470, Lu, 0x0471}, {0x0471, Ll, 0x0470}, {0x0472, Lu, 0x0473}, {0x0473, Ll, 0x0472}, {0x0474, Lu, 0x0475}, {0x0475, Ll, 0x0474}, {0x0476, Lu, 0x0477}, {0x0477, Ll, 0x0476}, {0x0478, Lu, 0x0479}, {0x0479, Ll, 0x0478}, {0x047A, Lu, 0x047B}, {0x047B, Ll, 0x047A}, {0x047C, Lu, 0x047D}, {0x047D, Ll, 0x047C}, {0x047E, Lu, 0x047F}, {0x047F, Ll, 0x047E}, {0x0480, Lu, 0x0481}, {0x0481, Ll, 0x0480}, {0x048C, Lu, 0x048D}, {0x048D, Ll, 0x048C}, {0x048E, Lu, 0x048F}, {0x048F, Ll, 0x048E}, {0x0490, Lu, 0x0491}, {0x0491, Ll, 0x0490}, {0x0492, Lu, 0x0493}, {0x0493, Ll, 0x0492}, {0x0494, Lu, 0x0495}, {0x0495, Ll, 0x0494}, {0x0496, Lu, 0x0497}, {0x0497, Ll, 0x0496}, {0x0498, Lu, 0x0499}, {0x0499, Ll, 0x0498}, {0x049A, Lu, 0x049B}, {0x049B, Ll, 0x049A}, {0x049C, Lu, 0x049D}, {0x049D, Ll, 0x049C}, {0x049E, Lu, 0x049F}, {0x049F, Ll, 0x049E}, {0x04A0, Lu, 0x04A1}, {0x04A1, Ll, 0x04A0}, {0x04A2, Lu, 0x04A3}, {0x04A3, Ll, 0x04A2}, {0x04A4, Lu, 0x04A5}, {0x04A5, Ll, 0x04A4}, {0x04A6, Lu, 0x04A7}, {0x04A7, Ll, 0x04A6}, {0x04A8, Lu, 0x04A9}, {0x04A9, Ll, 0x04A8}, {0x04AA, Lu, 0x04AB}, {0x04AB, Ll, 0x04AA}, {0x04AC, Lu, 0x04AD}, {0x04AD, Ll, 0x04AC}, {0x04AE, Lu, 0x04AF}, {0x04AF, Ll, 0x04AE}, {0x04B0, Lu, 0x04B1}, {0x04B1, Ll, 0x04B0}, {0x04B2, Lu, 0x04B3}, {0x04B3, Ll, 0x04B2}, {0x04B4, Lu, 0x04B5}, {0x04B5, Ll, 0x04B4}, {0x04B6, Lu, 0x04B7}, {0x04B7, Ll, 0x04B6}, {0x04B8, Lu, 0x04B9}, {0x04B9, Ll, 0x04B8}, {0x04BA, Lu, 0x04BB}, {0x04BB, Ll, 0x04BA}, {0x04BC, Lu, 0x04BD}, {0x04BD, Ll, 0x04BC}, {0x04BE, Lu, 0x04BF}, {0x04BF, Ll, 0x04BE}, {0x04C1, Lu, 0x04C2}, {0x04C2, Ll, 0x04C1}, {0x04C3, Lu, 0x04C4}, {0x04C4, Ll, 0x04C3}, {0x04C7, Lu, 0x04C8}, {0x04C8, Ll, 0x04C7}, {0x04CB, Lu, 0x04CC}, {0x04CC, Ll, 0x04CB}, {0x04D0, Lu, 0x04D1}, {0x04D1, Ll, 0x04D0}, {0x04D2, Lu, 0x04D3}, {0x04D3, Ll, 0x04D2}, {0x04D4, Lu, 0x04D5}, {0x04D5, Ll, 0x04D4}, {0x04D6, Lu, 0x04D7}, {0x04D7, Ll, 0x04D6}, {0x04D8, Lu, 0x04D9}, {0x04D9, Ll, 0x04D8}, {0x04DA, Lu, 0x04DB}, {0x04DB, Ll, 0x04DA}, {0x04DC, Lu, 0x04DD}, {0x04DD, Ll, 0x04DC}, {0x04DE, Lu, 0x04DF}, {0x04DF, Ll, 0x04DE}, {0x04E0, Lu, 0x04E1}, {0x04E1, Ll, 0x04E0}, {0x04E2, Lu, 0x04E3}, {0x04E3, Ll, 0x04E2}, {0x04E4, Lu, 0x04E5}, {0x04E5, Ll, 0x04E4}, {0x04E6, Lu, 0x04E7}, {0x04E7, Ll, 0x04E6}, {0x04E8, Lu, 0x04E9}, {0x04E9, Ll, 0x04E8}, {0x04EA, Lu, 0x04EB}, {0x04EB, Ll, 0x04EA}, {0x04EC, Lu, 0x04ED}, {0x04ED, Ll, 0x04EC}, {0x04EE, Lu, 0x04EF}, {0x04EF, Ll, 0x04EE}, {0x04F0, Lu, 0x04F1}, {0x04F1, Ll, 0x04F0}, {0x04F2, Lu, 0x04F3}, {0x04F3, Ll, 0x04F2}, {0x04F4, Lu, 0x04F5}, {0x04F5, Ll, 0x04F4}, {0x04F8, Lu, 0x04F9}, {0x04F9, Ll, 0x04F8}, {0x0531, Lu, 0x0561}, {0x0532, Lu, 0x0562}, {0x0533, Lu, 0x0563}, {0x0534, Lu, 0x0564}, {0x0535, Lu, 0x0565}, {0x0536, Lu, 0x0566}, {0x0537, Lu, 0x0567}, {0x0538, Lu, 0x0568}, {0x0539, Lu, 0x0569}, {0x053A, Lu, 0x056A}, {0x053B, Lu, 0x056B}, {0x053C, Lu, 0x056C}, {0x053D, Lu, 0x056D}, {0x053E, Lu, 0x056E}, {0x053F, Lu, 0x056F}, {0x0540, Lu, 0x0570}, {0x0541, Lu, 0x0571}, {0x0542, Lu, 0x0572}, {0x0543, Lu, 0x0573}, {0x0544, Lu, 0x0574}, {0x0545, Lu, 0x0575}, {0x0546, Lu, 0x0576}, {0x0547, Lu, 0x0577}, {0x0548, Lu, 0x0578}, {0x0549, Lu, 0x0579}, {0x054A, Lu, 0x057A}, {0x054B, Lu, 0x057B}, {0x054C, Lu, 0x057C}, {0x054D, Lu, 0x057D}, {0x054E, Lu, 0x057E}, {0x054F, Lu, 0x057F}, {0x0550, Lu, 0x0580}, {0x0551, Lu, 0x0581}, {0x0552, Lu, 0x0582}, {0x0553, Lu, 0x0583}, {0x0554, Lu, 0x0584}, {0x0555, Lu, 0x0585}, {0x0556, Lu, 0x0586}, {0x0561, Ll, 0x0531}, {0x0562, Ll, 0x0532}, {0x0563, Ll, 0x0533}, {0x0564, Ll, 0x0534}, {0x0565, Ll, 0x0535}, {0x0566, Ll, 0x0536}, {0x0567, Ll, 0x0537}, {0x0568, Ll, 0x0538}, {0x0569, Ll, 0x0539}, {0x056A, Ll, 0x053A}, {0x056B, Ll, 0x053B}, {0x056C, Ll, 0x053C}, {0x056D, Ll, 0x053D}, {0x056E, Ll, 0x053E}, {0x056F, Ll, 0x053F}, {0x0570, Ll, 0x0540}, {0x0571, Ll, 0x0541}, {0x0572, Ll, 0x0542}, {0x0573, Ll, 0x0543}, {0x0574, Ll, 0x0544}, {0x0575, Ll, 0x0545}, {0x0576, Ll, 0x0546}, {0x0577, Ll, 0x0547}, {0x0578, Ll, 0x0548}, {0x0579, Ll, 0x0549}, {0x057A, Ll, 0x054A}, {0x057B, Ll, 0x054B}, {0x057C, Ll, 0x054C}, {0x057D, Ll, 0x054D}, {0x057E, Ll, 0x054E}, {0x057F, Ll, 0x054F}, {0x0580, Ll, 0x0550}, {0x0581, Ll, 0x0551}, {0x0582, Ll, 0x0552}, {0x0583, Ll, 0x0553}, {0x0584, Ll, 0x0554}, {0x0585, Ll, 0x0555}, {0x0586, Ll, 0x0556}, /* Coptic */ {0x2C80, Lu, 0x2C81}, {0x2C81, Ll, 0x2C80}, {0x2C82, Lu, 0x2C83}, {0x2C83, Ll, 0x2C82}, {0x2C84, Lu, 0x2C85}, {0x2C85, Ll, 0x2C84}, {0x2C86, Lu, 0x2C87}, {0x2C87, Ll, 0x2C86}, {0x2C88, Lu, 0x2C89}, {0x2C89, Ll, 0x2C88}, {0x2C8A, Lu, 0x2C8B}, {0x2C8B, Ll, 0x2C8A}, {0x2C8C, Lu, 0x2C8D}, {0x2C8D, Ll, 0x2C8C}, {0x2C8E, Lu, 0x2C8F}, {0x2C8F, Ll, 0x2C8E}, {0x2C90, Lu, 0x2C91}, {0x2C91, Ll, 0x2C90}, {0x2C92, Lu, 0x2C93}, {0x2C93, Ll, 0x2C92}, {0x2C94, Lu, 0x2C95}, {0x2C95, Ll, 0x2C94}, {0x2C96, Lu, 0x2C97}, {0x2C97, Ll, 0x2C96}, {0x2C98, Lu, 0x2C99}, {0x2C99, Ll, 0x2C98}, {0x2C9A, Lu, 0x2C9B}, {0x2C9B, Ll, 0x2C9A}, {0x2C9C, Lu, 0x2C9D}, {0x2C9D, Ll, 0x2C9C}, {0x2C9E, Lu, 0x2C9F}, {0x2C9F, Ll, 0x2C9E}, {0x2CA0, Lu, 0x2CA1}, {0x2CA1, Ll, 0x2CA0}, {0x2CA2, Lu, 0x2CA3}, {0x2CA3, Ll, 0x2CA2}, {0x2CA4, Lu, 0x2CA5}, {0x2CA5, Ll, 0x2CA4}, {0x2CA6, Lu, 0x2CA7}, {0x2CA7, Ll, 0x2CA6}, {0x2CA8, Lu, 0x2CA9}, {0x2CA9, Ll, 0x2CA8}, {0x2CAA, Lu, 0x2CAB}, {0x2CAB, Ll, 0x2CAA}, {0x2CAC, Lu, 0x2CAD}, {0x2CAD, Ll, 0x2CAC}, {0x2CAE, Lu, 0x2CAF}, {0x2CAF, Ll, 0x2CAE}, {0x2CB0, Lu, 0x2CB1}, {0x2CB1, Ll, 0x2CB0}, {0x1E00, Lu, 0x1E01}, {0x1E01, Ll, 0x1E00}, {0x1E02, Lu, 0x1E03}, {0x1E03, Ll, 0x1E02}, {0x1E04, Lu, 0x1E05}, {0x1E05, Ll, 0x1E04}, {0x1E06, Lu, 0x1E07}, {0x1E07, Ll, 0x1E06}, {0x1E08, Lu, 0x1E09}, {0x1E09, Ll, 0x1E08}, {0x1E0A, Lu, 0x1E0B}, {0x1E0B, Ll, 0x1E0A}, {0x1E0C, Lu, 0x1E0D}, {0x1E0D, Ll, 0x1E0C}, {0x1E0E, Lu, 0x1E0F}, {0x1E0F, Ll, 0x1E0E}, {0x1E10, Lu, 0x1E11}, {0x1E11, Ll, 0x1E10}, {0x1E12, Lu, 0x1E13}, {0x1E13, Ll, 0x1E12}, {0x1E14, Lu, 0x1E15}, {0x1E15, Ll, 0x1E14}, {0x1E16, Lu, 0x1E17}, {0x1E17, Ll, 0x1E16}, {0x1E18, Lu, 0x1E19}, {0x1E19, Ll, 0x1E18}, {0x1E1A, Lu, 0x1E1B}, {0x1E1B, Ll, 0x1E1A}, {0x1E1C, Lu, 0x1E1D}, {0x1E1D, Ll, 0x1E1C}, {0x1E1E, Lu, 0x1E1F}, {0x1E1F, Ll, 0x1E1E}, {0x1E20, Lu, 0x1E21}, {0x1E21, Ll, 0x1E20}, {0x1E22, Lu, 0x1E23}, {0x1E23, Ll, 0x1E22}, {0x1E24, Lu, 0x1E25}, {0x1E25, Ll, 0x1E24}, {0x1E26, Lu, 0x1E27}, {0x1E27, Ll, 0x1E26}, {0x1E28, Lu, 0x1E29}, {0x1E29, Ll, 0x1E28}, {0x1E2A, Lu, 0x1E2B}, {0x1E2B, Ll, 0x1E2A}, {0x1E2C, Lu, 0x1E2D}, {0x1E2D, Ll, 0x1E2C}, {0x1E2E, Lu, 0x1E2F}, {0x1E2F, Ll, 0x1E2E}, {0x1E30, Lu, 0x1E31}, {0x1E31, Ll, 0x1E30}, {0x1E32, Lu, 0x1E33}, {0x1E33, Ll, 0x1E32}, {0x1E34, Lu, 0x1E35}, {0x1E35, Ll, 0x1E34}, {0x1E36, Lu, 0x1E37}, {0x1E37, Ll, 0x1E36}, {0x1E38, Lu, 0x1E39}, {0x1E39, Ll, 0x1E38}, {0x1E3A, Lu, 0x1E3B}, {0x1E3B, Ll, 0x1E3A}, {0x1E3C, Lu, 0x1E3D}, {0x1E3D, Ll, 0x1E3C}, {0x1E3E, Lu, 0x1E3F}, {0x1E3F, Ll, 0x1E3E}, {0x1E40, Lu, 0x1E41}, {0x1E41, Ll, 0x1E40}, {0x1E42, Lu, 0x1E43}, {0x1E43, Ll, 0x1E42}, {0x1E44, Lu, 0x1E45}, {0x1E45, Ll, 0x1E44}, {0x1E46, Lu, 0x1E47}, {0x1E47, Ll, 0x1E46}, {0x1E48, Lu, 0x1E49}, {0x1E49, Ll, 0x1E48}, {0x1E4A, Lu, 0x1E4B}, {0x1E4B, Ll, 0x1E4A}, {0x1E4C, Lu, 0x1E4D}, {0x1E4D, Ll, 0x1E4C}, {0x1E4E, Lu, 0x1E4F}, {0x1E4F, Ll, 0x1E4E}, {0x1E50, Lu, 0x1E51}, {0x1E51, Ll, 0x1E50}, {0x1E52, Lu, 0x1E53}, {0x1E53, Ll, 0x1E52}, {0x1E54, Lu, 0x1E55}, {0x1E55, Ll, 0x1E54}, {0x1E56, Lu, 0x1E57}, {0x1E57, Ll, 0x1E56}, {0x1E58, Lu, 0x1E59}, {0x1E59, Ll, 0x1E58}, {0x1E5A, Lu, 0x1E5B}, {0x1E5B, Ll, 0x1E5A}, {0x1E5C, Lu, 0x1E5D}, {0x1E5D, Ll, 0x1E5C}, {0x1E5E, Lu, 0x1E5F}, {0x1E5F, Ll, 0x1E5E}, {0x1E60, Lu, 0x1E61}, {0x1E61, Ll, 0x1E60}, {0x1E62, Lu, 0x1E63}, {0x1E63, Ll, 0x1E62}, {0x1E64, Lu, 0x1E65}, {0x1E65, Ll, 0x1E64}, {0x1E66, Lu, 0x1E67}, {0x1E67, Ll, 0x1E66}, {0x1E68, Lu, 0x1E69}, {0x1E69, Ll, 0x1E68}, {0x1E6A, Lu, 0x1E6B}, {0x1E6B, Ll, 0x1E6A}, {0x1E6C, Lu, 0x1E6D}, {0x1E6D, Ll, 0x1E6C}, {0x1E6E, Lu, 0x1E6F}, {0x1E6F, Ll, 0x1E6E}, {0x1E70, Lu, 0x1E71}, {0x1E71, Ll, 0x1E70}, {0x1E72, Lu, 0x1E73}, {0x1E73, Ll, 0x1E72}, {0x1E74, Lu, 0x1E75}, {0x1E75, Ll, 0x1E74}, {0x1E76, Lu, 0x1E77}, {0x1E77, Ll, 0x1E76}, {0x1E78, Lu, 0x1E79}, {0x1E79, Ll, 0x1E78}, {0x1E7A, Lu, 0x1E7B}, {0x1E7B, Ll, 0x1E7A}, {0x1E7C, Lu, 0x1E7D}, {0x1E7D, Ll, 0x1E7C}, {0x1E7E, Lu, 0x1E7F}, {0x1E7F, Ll, 0x1E7E}, {0x1E80, Lu, 0x1E81}, {0x1E81, Ll, 0x1E80}, {0x1E82, Lu, 0x1E83}, {0x1E83, Ll, 0x1E82}, {0x1E84, Lu, 0x1E85}, {0x1E85, Ll, 0x1E84}, {0x1E86, Lu, 0x1E87}, {0x1E87, Ll, 0x1E86}, {0x1E88, Lu, 0x1E89}, {0x1E89, Ll, 0x1E88}, {0x1E8A, Lu, 0x1E8B}, {0x1E8B, Ll, 0x1E8A}, {0x1E8C, Lu, 0x1E8D}, {0x1E8D, Ll, 0x1E8C}, {0x1E8E, Lu, 0x1E8F}, {0x1E8F, Ll, 0x1E8E}, {0x1E90, Lu, 0x1E91}, {0x1E91, Ll, 0x1E90}, {0x1E92, Lu, 0x1E93}, {0x1E93, Ll, 0x1E92}, {0x1E94, Lu, 0x1E95}, {0x1E95, Ll, 0x1E94}, {0x1E9B, Ll, 0x1E60}, {0x1EA0, Lu, 0x1EA1}, {0x1EA1, Ll, 0x1EA0}, {0x1EA2, Lu, 0x1EA3}, {0x1EA3, Ll, 0x1EA2}, {0x1EA4, Lu, 0x1EA5}, {0x1EA5, Ll, 0x1EA4}, {0x1EA6, Lu, 0x1EA7}, {0x1EA7, Ll, 0x1EA6}, {0x1EA8, Lu, 0x1EA9}, {0x1EA9, Ll, 0x1EA8}, {0x1EAA, Lu, 0x1EAB}, {0x1EAB, Ll, 0x1EAA}, {0x1EAC, Lu, 0x1EAD}, {0x1EAD, Ll, 0x1EAC}, {0x1EAE, Lu, 0x1EAF}, {0x1EAF, Ll, 0x1EAE}, {0x1EB0, Lu, 0x1EB1}, {0x1EB1, Ll, 0x1EB0}, {0x1EB2, Lu, 0x1EB3}, {0x1EB3, Ll, 0x1EB2}, {0x1EB4, Lu, 0x1EB5}, {0x1EB5, Ll, 0x1EB4}, {0x1EB6, Lu, 0x1EB7}, {0x1EB7, Ll, 0x1EB6}, {0x1EB8, Lu, 0x1EB9}, {0x1EB9, Ll, 0x1EB8}, {0x1EBA, Lu, 0x1EBB}, {0x1EBB, Ll, 0x1EBA}, {0x1EBC, Lu, 0x1EBD}, {0x1EBD, Ll, 0x1EBC}, {0x1EBE, Lu, 0x1EBF}, {0x1EBF, Ll, 0x1EBE}, {0x1EC0, Lu, 0x1EC1}, {0x1EC1, Ll, 0x1EC0}, {0x1EC2, Lu, 0x1EC3}, {0x1EC3, Ll, 0x1EC2}, {0x1EC4, Lu, 0x1EC5}, {0x1EC5, Ll, 0x1EC4}, {0x1EC6, Lu, 0x1EC7}, {0x1EC7, Ll, 0x1EC6}, {0x1EC8, Lu, 0x1EC9}, {0x1EC9, Ll, 0x1EC8}, {0x1ECA, Lu, 0x1ECB}, {0x1ECB, Ll, 0x1ECA}, {0x1ECC, Lu, 0x1ECD}, {0x1ECD, Ll, 0x1ECC}, {0x1ECE, Lu, 0x1ECF}, {0x1ECF, Ll, 0x1ECE}, {0x1ED0, Lu, 0x1ED1}, {0x1ED1, Ll, 0x1ED0}, {0x1ED2, Lu, 0x1ED3}, {0x1ED3, Ll, 0x1ED2}, {0x1ED4, Lu, 0x1ED5}, {0x1ED5, Ll, 0x1ED4}, {0x1ED6, Lu, 0x1ED7}, {0x1ED7, Ll, 0x1ED6}, {0x1ED8, Lu, 0x1ED9}, {0x1ED9, Ll, 0x1ED8}, {0x1EDA, Lu, 0x1EDB}, {0x1EDB, Ll, 0x1EDA}, {0x1EDC, Lu, 0x1EDD}, {0x1EDD, Ll, 0x1EDC}, {0x1EDE, Lu, 0x1EDF}, {0x1EDF, Ll, 0x1EDE}, {0x1EE0, Lu, 0x1EE1}, {0x1EE1, Ll, 0x1EE0}, {0x1EE2, Lu, 0x1EE3}, {0x1EE3, Ll, 0x1EE2}, {0x1EE4, Lu, 0x1EE5}, {0x1EE5, Ll, 0x1EE4}, {0x1EE6, Lu, 0x1EE7}, {0x1EE7, Ll, 0x1EE6}, {0x1EE8, Lu, 0x1EE9}, {0x1EE9, Ll, 0x1EE8}, {0x1EEA, Lu, 0x1EEB}, {0x1EEB, Ll, 0x1EEA}, {0x1EEC, Lu, 0x1EED}, {0x1EED, Ll, 0x1EEC}, {0x1EEE, Lu, 0x1EEF}, {0x1EEF, Ll, 0x1EEE}, {0x1EF0, Lu, 0x1EF1}, {0x1EF1, Ll, 0x1EF0}, {0x1EF2, Lu, 0x1EF3}, {0x1EF3, Ll, 0x1EF2}, {0x1EF4, Lu, 0x1EF5}, {0x1EF5, Ll, 0x1EF4}, {0x1EF6, Lu, 0x1EF7}, {0x1EF7, Ll, 0x1EF6}, {0x1EF8, Lu, 0x1EF9}, {0x1EF9, Ll, 0x1EF8}, {0x1F00, Ll, 0x1F08}, {0x1F01, Ll, 0x1F09}, {0x1F02, Ll, 0x1F0A}, {0x1F03, Ll, 0x1F0B}, {0x1F04, Ll, 0x1F0C}, {0x1F05, Ll, 0x1F0D}, {0x1F06, Ll, 0x1F0E}, {0x1F07, Ll, 0x1F0F}, {0x1F08, Lu, 0x1F00}, {0x1F09, Lu, 0x1F01}, {0x1F0A, Lu, 0x1F02}, {0x1F0B, Lu, 0x1F03}, {0x1F0C, Lu, 0x1F04}, {0x1F0D, Lu, 0x1F05}, {0x1F0E, Lu, 0x1F06}, {0x1F0F, Lu, 0x1F07}, {0x1F10, Ll, 0x1F18}, {0x1F11, Ll, 0x1F19}, {0x1F12, Ll, 0x1F1A}, {0x1F13, Ll, 0x1F1B}, {0x1F14, Ll, 0x1F1C}, {0x1F15, Ll, 0x1F1D}, {0x1F18, Lu, 0x1F10}, {0x1F19, Lu, 0x1F11}, {0x1F1A, Lu, 0x1F12}, {0x1F1B, Lu, 0x1F13}, {0x1F1C, Lu, 0x1F14}, {0x1F1D, Lu, 0x1F15}, {0x1F20, Ll, 0x1F28}, {0x1F21, Ll, 0x1F29}, {0x1F22, Ll, 0x1F2A}, {0x1F23, Ll, 0x1F2B}, {0x1F24, Ll, 0x1F2C}, {0x1F25, Ll, 0x1F2D}, {0x1F26, Ll, 0x1F2E}, {0x1F27, Ll, 0x1F2F}, {0x1F28, Lu, 0x1F20}, {0x1F29, Lu, 0x1F21}, {0x1F2A, Lu, 0x1F22}, {0x1F2B, Lu, 0x1F23}, {0x1F2C, Lu, 0x1F24}, {0x1F2D, Lu, 0x1F25}, {0x1F2E, Lu, 0x1F26}, {0x1F2F, Lu, 0x1F27}, {0x1F30, Ll, 0x1F38}, {0x1F31, Ll, 0x1F39}, {0x1F32, Ll, 0x1F3A}, {0x1F33, Ll, 0x1F3B}, {0x1F34, Ll, 0x1F3C}, {0x1F35, Ll, 0x1F3D}, {0x1F36, Ll, 0x1F3E}, {0x1F37, Ll, 0x1F3F}, {0x1F38, Lu, 0x1F30}, {0x1F39, Lu, 0x1F31}, {0x1F3A, Lu, 0x1F32}, {0x1F3B, Lu, 0x1F33}, {0x1F3C, Lu, 0x1F34}, {0x1F3D, Lu, 0x1F35}, {0x1F3E, Lu, 0x1F36}, {0x1F3F, Lu, 0x1F37}, {0x1F40, Ll, 0x1F48}, {0x1F41, Ll, 0x1F49}, {0x1F42, Ll, 0x1F4A}, {0x1F43, Ll, 0x1F4B}, {0x1F44, Ll, 0x1F4C}, {0x1F45, Ll, 0x1F4D}, {0x1F48, Lu, 0x1F40}, {0x1F49, Lu, 0x1F41}, {0x1F4A, Lu, 0x1F42}, {0x1F4B, Lu, 0x1F43}, {0x1F4C, Lu, 0x1F44}, {0x1F4D, Lu, 0x1F45}, {0x1F51, Ll, 0x1F59}, {0x1F53, Ll, 0x1F5B}, {0x1F55, Ll, 0x1F5D}, {0x1F57, Ll, 0x1F5F}, {0x1F59, Lu, 0x1F51}, {0x1F5B, Lu, 0x1F53}, {0x1F5D, Lu, 0x1F55}, {0x1F5F, Lu, 0x1F57}, {0x1F60, Ll, 0x1F68}, {0x1F61, Ll, 0x1F69}, {0x1F62, Ll, 0x1F6A}, {0x1F63, Ll, 0x1F6B}, {0x1F64, Ll, 0x1F6C}, {0x1F65, Ll, 0x1F6D}, {0x1F66, Ll, 0x1F6E}, {0x1F67, Ll, 0x1F6F}, {0x1F68, Lu, 0x1F60}, {0x1F69, Lu, 0x1F61}, {0x1F6A, Lu, 0x1F62}, {0x1F6B, Lu, 0x1F63}, {0x1F6C, Lu, 0x1F64}, {0x1F6D, Lu, 0x1F65}, {0x1F6E, Lu, 0x1F66}, {0x1F6F, Lu, 0x1F67}, {0x1F70, Ll, 0x1FBA}, {0x1F71, Ll, 0x1FBB}, {0x1F72, Ll, 0x1FC8}, {0x1F73, Ll, 0x1FC9}, {0x1F74, Ll, 0x1FCA}, {0x1F75, Ll, 0x1FCB}, {0x1F76, Ll, 0x1FDA}, {0x1F77, Ll, 0x1FDB}, {0x1F78, Ll, 0x1FF8}, {0x1F79, Ll, 0x1FF9}, {0x1F7A, Ll, 0x1FEA}, {0x1F7B, Ll, 0x1FEB}, {0x1F7C, Ll, 0x1FFA}, {0x1F7D, Ll, 0x1FFB}, {0x1F80, Ll, 0x1F88}, {0x1F81, Ll, 0x1F89}, {0x1F82, Ll, 0x1F8A}, {0x1F83, Ll, 0x1F8B}, {0x1F84, Ll, 0x1F8C}, {0x1F85, Ll, 0x1F8D}, {0x1F86, Ll, 0x1F8E}, {0x1F87, Ll, 0x1F8F}, {0x1F90, Ll, 0x1F98}, {0x1F91, Ll, 0x1F99}, {0x1F92, Ll, 0x1F9A}, {0x1F93, Ll, 0x1F9B}, {0x1F94, Ll, 0x1F9C}, {0x1F95, Ll, 0x1F9D}, {0x1F96, Ll, 0x1F9E}, {0x1F97, Ll, 0x1F9F}, {0x1FA0, Ll, 0x1FA8}, {0x1FA1, Ll, 0x1FA9}, {0x1FA2, Ll, 0x1FAA}, {0x1FA3, Ll, 0x1FAB}, {0x1FA4, Ll, 0x1FAC}, {0x1FA5, Ll, 0x1FAD}, {0x1FA6, Ll, 0x1FAE}, {0x1FA7, Ll, 0x1FAF}, {0x1FB0, Ll, 0x1FB8}, {0x1FB1, Ll, 0x1FB9}, {0x1FB3, Ll, 0x1FBC}, {0x1FB8, Lu, 0x1FB0}, {0x1FB9, Lu, 0x1FB1}, {0x1FBA, Lu, 0x1F70}, {0x1FBB, Lu, 0x1F71}, {0x1FBE, Ll, 0x0399}, {0x1FC3, Ll, 0x1FCC}, {0x1FC8, Lu, 0x1F72}, {0x1FC9, Lu, 0x1F73}, {0x1FCA, Lu, 0x1F74}, {0x1FCB, Lu, 0x1F75}, {0x1FD0, Ll, 0x1FD8}, {0x1FD1, Ll, 0x1FD9}, {0x1FD8, Lu, 0x1FD0}, {0x1FD9, Lu, 0x1FD1}, {0x1FDA, Lu, 0x1F76}, {0x1FDB, Lu, 0x1F77}, {0x1FE0, Ll, 0x1FE8}, {0x1FE1, Ll, 0x1FE9}, {0x1FE5, Ll, 0x1FEC}, {0x1FE8, Lu, 0x1FE0}, {0x1FE9, Lu, 0x1FE1}, {0x1FEA, Lu, 0x1F7A}, {0x1FEB, Lu, 0x1F7B}, {0x1FEC, Lu, 0x1FE5}, {0x1FF3, Ll, 0x1FFC}, {0x1FF8, Lu, 0x1F78}, {0x1FF9, Lu, 0x1F79}, {0x1FFA, Lu, 0x1F7C}, {0x1FFB, Lu, 0x1F7D}, {0x2126, Lu, 0x03C9}, {0x212A, Lu, 0x006B}, {0x212B, Lu, 0x00E5}, {0xFF21, Lu, 0xFF41}, {0xFF22, Lu, 0xFF42}, {0xFF23, Lu, 0xFF43}, {0xFF24, Lu, 0xFF44}, {0xFF25, Lu, 0xFF45}, {0xFF26, Lu, 0xFF46}, {0xFF27, Lu, 0xFF47}, {0xFF28, Lu, 0xFF48}, {0xFF29, Lu, 0xFF49}, {0xFF2A, Lu, 0xFF4A}, {0xFF2B, Lu, 0xFF4B}, {0xFF2C, Lu, 0xFF4C}, {0xFF2D, Lu, 0xFF4D}, {0xFF2E, Lu, 0xFF4E}, {0xFF2F, Lu, 0xFF4F}, {0xFF30, Lu, 0xFF50}, {0xFF31, Lu, 0xFF51}, {0xFF32, Lu, 0xFF52}, {0xFF33, Lu, 0xFF53}, {0xFF34, Lu, 0xFF54}, {0xFF35, Lu, 0xFF55}, {0xFF36, Lu, 0xFF56}, {0xFF37, Lu, 0xFF57}, {0xFF38, Lu, 0xFF58}, {0xFF39, Lu, 0xFF59}, {0xFF3A, Lu, 0xFF5A}, {0xFF41, Ll, 0xFF21}, {0xFF42, Ll, 0xFF22}, {0xFF43, Ll, 0xFF23}, {0xFF44, Ll, 0xFF24}, {0xFF45, Ll, 0xFF25}, {0xFF46, Ll, 0xFF26}, {0xFF47, Ll, 0xFF27}, {0xFF48, Ll, 0xFF28}, {0xFF49, Ll, 0xFF29}, {0xFF4A, Ll, 0xFF2A}, {0xFF4B, Ll, 0xFF2B}, {0xFF4C, Ll, 0xFF2C}, {0xFF4D, Ll, 0xFF2D}, {0xFF4E, Ll, 0xFF2E}, {0xFF4F, Ll, 0xFF2F}, {0xFF50, Ll, 0xFF30}, {0xFF51, Ll, 0xFF31}, {0xFF52, Ll, 0xFF32}, {0xFF53, Ll, 0xFF33}, {0xFF54, Ll, 0xFF34}, {0xFF55, Ll, 0xFF35}, {0xFF56, Ll, 0xFF36}, {0xFF57, Ll, 0xFF37}, {0xFF58, Ll, 0xFF38}, {0xFF59, Ll, 0xFF39}, {0xFF5A, Ll, 0xFF3A} }; #undef Lu #undef Ll struct ucs_range { UT_UCSChar low; UT_UCSChar high; }; ucs_range whitespace_table[] = { {0x0009, 0x000d}, {0x001c, 0x0020}, {0x0085, 0x0085}, {0x00A0, 0x00A0}, // had to add this by hand, for some reason in Unicode 3.1 it is marked as CS, not WS {0x1680, 0x1680}, {0x2000, 0x200a}, {0x2028, 0x2029}, {0x202f, 0x202f}, {0x3000, 0x3000} }; #endif