#include "studiox_includes.h" extern "C"{ #include "gx_utility.h" } static GX_CANONICAL_COMBINING_CLASS gx_studio_canonical_combining_class_table[] = { { 0x0300, 230 }, { 0x0301, 230 }, { 0x0302, 230 }, { 0x0303, 230 }, { 0x0304, 230 }, { 0x0305, 230 }, { 0x0306, 230 }, { 0x0307, 230 }, { 0x0308, 230 }, { 0x0309, 230 }, { 0x030A, 230 }, { 0x030B, 230 }, { 0x030C, 230 }, { 0x030D, 230 }, { 0x030E, 230 }, { 0x030F, 230 }, { 0x0310, 230 }, { 0x0311, 230 }, { 0x0312, 230 }, { 0x0313, 230 }, { 0x0314, 230 }, { 0x0315, 232 }, { 0x0316, 220 }, { 0x0317, 220 }, { 0x0318, 220 }, { 0x0319, 220 }, { 0x031A, 232 }, { 0x031B, 216 }, { 0x031C, 220 }, { 0x031D, 220 }, { 0x031E, 220 }, { 0x031F, 220 }, { 0x0320, 220 }, { 0x0321, 202 }, { 0x0322, 202 }, { 0x0323, 220 }, { 0x0324, 220 }, { 0x0325, 220 }, { 0x0326, 220 }, { 0x0327, 202 }, { 0x0328, 202 }, { 0x0329, 220 }, { 0x032A, 220 }, { 0x032B, 220 }, { 0x032C, 220 }, { 0x032D, 220 }, { 0x032E, 220 }, { 0x032F, 220 }, { 0x0330, 220 }, { 0x0331, 220 }, { 0x0332, 220 }, { 0x0333, 220 }, { 0x0334, 1 }, { 0x0335, 1 }, { 0x0336, 1 }, { 0x0337, 1 }, { 0x0338, 1 }, { 0x0339, 220 }, { 0x033A, 220 }, { 0x033B, 220 }, { 0x033C, 220 }, { 0x033D, 230 }, { 0x033E, 230 }, { 0x033F, 230 }, { 0x0340, 230 }, { 0x0341, 230 }, { 0x0342, 230 }, { 0x0343, 230 }, { 0x0344, 230 }, { 0x0345, 240 }, { 0x0346, 230 }, { 0x0347, 220 }, { 0x0348, 220 }, { 0x0349, 220 }, { 0x034A, 230 }, { 0x034B, 230 }, { 0x034C, 230 }, { 0x034D, 220 }, { 0x034E, 220 }, { 0x0350, 230 }, { 0x0351, 230 }, { 0x0352, 230 }, { 0x0353, 220 }, { 0x0354, 220 }, { 0x0355, 220 }, { 0x0356, 220 }, { 0x0357, 230 }, { 0x0358, 232 }, { 0x0359, 220 }, { 0x035A, 220 }, { 0x035B, 230 }, { 0x035C, 233 }, { 0x035D, 234 }, { 0x035E, 234 }, { 0x035F, 233 }, { 0x0360, 234 }, { 0x0361, 234 }, { 0x0362, 233 }, { 0x0363, 230 }, { 0x0364, 230 }, { 0x0365, 230 }, { 0x0366, 230 }, { 0x0367, 230 }, { 0x0368, 230 }, { 0x0369, 230 }, { 0x036A, 230 }, { 0x036B, 230 }, { 0x036C, 230 }, { 0x036D, 230 }, { 0x036E, 230 }, { 0x036F, 230 }, { 0x0483, 230 }, { 0x0484, 230 }, { 0x0485, 230 }, { 0x0486, 230 }, { 0x0487, 230 }, { 0x0591, 220 }, { 0x0592, 230 }, { 0x0593, 230 }, { 0x0594, 230 }, { 0x0595, 230 }, { 0x0596, 220 }, { 0x0597, 230 }, { 0x0598, 230 }, { 0x0599, 230 }, { 0x059A, 222 }, { 0x059B, 220 }, { 0x059C, 230 }, { 0x059D, 230 }, { 0x059E, 230 }, { 0x059F, 230 }, { 0x05A0, 230 }, { 0x05A1, 230 }, { 0x05A2, 220 }, { 0x05A3, 220 }, { 0x05A4, 220 }, { 0x05A5, 220 }, { 0x05A6, 220 }, { 0x05A7, 220 }, { 0x05A8, 230 }, { 0x05A9, 230 }, { 0x05AA, 220 }, { 0x05AB, 230 }, { 0x05AC, 230 }, { 0x05AD, 222 }, { 0x05AE, 228 }, { 0x05AF, 230 }, { 0x05B0, 10 }, { 0x05B1, 11 }, { 0x05B2, 12 }, { 0x05B3, 13 }, { 0x05B4, 14 }, { 0x05B5, 15 }, { 0x05B6, 16 }, { 0x05B7, 17 }, { 0x05B8, 18 }, { 0x05B9, 19 }, { 0x05BA, 19 }, { 0x05BB, 20 }, { 0x05BC, 21 }, { 0x05BD, 22 }, { 0x05BF, 23 }, { 0x05C1, 24 }, { 0x05C2, 25 }, { 0x05C4, 230 }, { 0x05C5, 220 }, { 0x05C7, 18 }, { 0x0610, 230 }, { 0x0611, 230 }, { 0x0612, 230 }, { 0x0613, 230 }, { 0x0614, 230 }, { 0x0615, 230 }, { 0x0616, 230 }, { 0x0617, 230 }, { 0x0618, 30 }, { 0x0619, 31 }, { 0x061A, 32 }, { 0x064B, 27 }, { 0x064C, 28 }, { 0x064D, 29 }, { 0x064E, 30 }, { 0x064F, 31 }, { 0x0650, 32 }, { 0x0651, 33 }, { 0x0652, 34 }, { 0x0653, 230 }, { 0x0654, 230 }, { 0x0655, 220 }, { 0x0656, 220 }, { 0x0657, 230 }, { 0x0658, 230 }, { 0x0659, 230 }, { 0x065A, 230 }, { 0x065B, 230 }, { 0x065C, 220 }, { 0x065D, 230 }, { 0x065E, 230 }, { 0x065F, 220 }, { 0x0670, 35 }, { 0x06D6, 230 }, { 0x06D7, 230 }, { 0x06D8, 230 }, { 0x06D9, 230 }, { 0x06DA, 230 }, { 0x06DB, 230 }, { 0x06DC, 230 }, { 0x06DF, 230 }, { 0x06E0, 230 }, { 0x06E1, 230 }, { 0x06E2, 230 }, { 0x06E3, 220 }, { 0x06E4, 230 }, { 0x06E7, 230 }, { 0x06E8, 230 }, { 0x06EA, 220 }, { 0x06EB, 230 }, { 0x06EC, 230 }, { 0x06ED, 220 }, { 0x0711, 36 }, { 0x0730, 230 }, { 0x0731, 220 }, { 0x0732, 230 }, { 0x0733, 230 }, { 0x0734, 220 }, { 0x0735, 230 }, { 0x0736, 230 }, { 0x0737, 220 }, { 0x0738, 220 }, { 0x0739, 220 }, { 0x073A, 230 }, { 0x073B, 220 }, { 0x073C, 220 }, { 0x073D, 230 }, { 0x073E, 220 }, { 0x073F, 230 }, { 0x0740, 230 }, { 0x0741, 230 }, { 0x0742, 220 }, { 0x0743, 230 }, { 0x0744, 220 }, { 0x0745, 230 }, { 0x0746, 220 }, { 0x0747, 230 }, { 0x0748, 220 }, { 0x0749, 230 }, { 0x074A, 230 }, { 0x07EB, 230 }, { 0x07EC, 230 }, { 0x07ED, 230 }, { 0x07EE, 230 }, { 0x07EF, 230 }, { 0x07F0, 230 }, { 0x07F1, 230 }, { 0x07F2, 220 }, { 0x07F3, 230 }, { 0x07FD, 220 }, { 0x0816, 230 }, { 0x0817, 230 }, { 0x0818, 230 }, { 0x0819, 230 }, { 0x081B, 230 }, { 0x081C, 230 }, { 0x081D, 230 }, { 0x081E, 230 }, { 0x081F, 230 }, { 0x0820, 230 }, { 0x0821, 230 }, { 0x0822, 230 }, { 0x0823, 230 }, { 0x0825, 230 }, { 0x0826, 230 }, { 0x0827, 230 }, { 0x0829, 230 }, { 0x082A, 230 }, { 0x082B, 230 }, { 0x082C, 230 }, { 0x082D, 230 }, { 0x0859, 220 }, { 0x085A, 220 }, { 0x085B, 220 }, { 0x08D3, 220 }, { 0x08D4, 230 }, { 0x08D5, 230 }, { 0x08D6, 230 }, { 0x08D7, 230 }, { 0x08D8, 230 }, { 0x08D9, 230 }, { 0x08DA, 230 }, { 0x08DB, 230 }, { 0x08DC, 230 }, { 0x08DD, 230 }, { 0x08DE, 230 }, { 0x08DF, 230 }, { 0x08E0, 230 }, { 0x08E1, 230 }, { 0x08E3, 220 }, { 0x08E4, 230 }, { 0x08E5, 230 }, { 0x08E6, 220 }, { 0x08E7, 230 }, { 0x08E8, 230 }, { 0x08E9, 220 }, { 0x08EA, 230 }, { 0x08EB, 230 }, { 0x08EC, 230 }, { 0x08ED, 220 }, { 0x08EE, 220 }, { 0x08EF, 220 }, { 0x08F0, 27 }, { 0x08F1, 28 }, { 0x08F2, 29 }, { 0x08F3, 230 }, { 0x08F4, 230 }, { 0x08F5, 230 }, { 0x08F6, 220 }, { 0x08F7, 230 }, { 0x08F8, 230 }, { 0x08F9, 220 }, { 0x08FA, 220 }, { 0x08FB, 230 }, { 0x08FC, 230 }, { 0x08FD, 230 }, { 0x08FE, 230 }, { 0x08FF, 230 }, { 0x093C, 7 }, { 0x094D, 9 }, { 0x0951, 230 }, { 0x0952, 220 }, { 0x0953, 230 }, { 0x0954, 230 }, { 0x09BC, 7 }, { 0x09CD, 9 }, { 0x09FE, 230 }, { 0x0A3C, 7 }, { 0x0A4D, 9 }, { 0x0ABC, 7 }, { 0x0ACD, 9 }, { 0x0B3C, 7 }, { 0x0B4D, 9 }, { 0x0BCD, 9 }, { 0x0C4D, 9 }, { 0x0C55, 84 }, { 0x0C56, 91 }, { 0x0CBC, 7 }, { 0x0CCD, 9 }, { 0x0D3B, 9 }, { 0x0D3C, 9 }, { 0x0D4D, 9 }, { 0x0DCA, 9 }, { 0x0E38, 103 }, { 0x0E39, 103 }, { 0x0E3A, 9 }, { 0x0E48, 107 }, { 0x0E49, 107 }, { 0x0E4A, 107 }, { 0x0E4B, 107 }, { 0x0EB8, 118 }, { 0x0EB9, 118 }, { 0x0EC8, 122 }, { 0x0EC9, 122 }, { 0x0ECA, 122 }, { 0x0ECB, 122 }, { 0x0F18, 220 }, { 0x0F19, 220 }, { 0x0F35, 220 }, { 0x0F37, 220 }, { 0x0F39, 216 }, { 0x0F71, 129 }, { 0x0F72, 130 }, { 0x0F74, 132 }, { 0x0F7A, 130 }, { 0x0F7B, 130 }, { 0x0F7C, 130 }, { 0x0F7D, 130 }, { 0x0F80, 130 }, { 0x0F82, 230 }, { 0x0F83, 230 }, { 0x0F84, 9 }, { 0x0F86, 230 }, { 0x0F87, 230 }, { 0x0FC6, 220 }, { 0x1037, 7 }, { 0x1039, 9 }, { 0x103A, 9 }, { 0x108D, 220 }, { 0x135D, 230 }, { 0x135E, 230 }, { 0x135F, 230 }, { 0x1714, 9 }, { 0x1734, 9 }, { 0x17D2, 9 }, { 0x17DD, 230 }, { 0x18A9, 228 }, { 0x1939, 222 }, { 0x193A, 230 }, { 0x193B, 220 }, { 0x1A17, 230 }, { 0x1A18, 220 }, { 0x1A60, 9 }, { 0x1A75, 230 }, { 0x1A76, 230 }, { 0x1A77, 230 }, { 0x1A78, 230 }, { 0x1A79, 230 }, { 0x1A7A, 230 }, { 0x1A7B, 230 }, { 0x1A7C, 230 }, { 0x1A7F, 220 }, { 0x1AB0, 230 }, { 0x1AB1, 230 }, { 0x1AB2, 230 }, { 0x1AB3, 230 }, { 0x1AB4, 230 }, { 0x1AB5, 220 }, { 0x1AB6, 220 }, { 0x1AB7, 220 }, { 0x1AB8, 220 }, { 0x1AB9, 220 }, { 0x1ABA, 220 }, { 0x1ABB, 230 }, { 0x1ABC, 230 }, { 0x1ABD, 220 }, { 0x1B34, 7 }, { 0x1B44, 9 }, { 0x1B6B, 230 }, { 0x1B6C, 220 }, { 0x1B6D, 230 }, { 0x1B6E, 230 }, { 0x1B6F, 230 }, { 0x1B70, 230 }, { 0x1B71, 230 }, { 0x1B72, 230 }, { 0x1B73, 230 }, { 0x1BAA, 9 }, { 0x1BAB, 9 }, { 0x1BE6, 7 }, { 0x1BF2, 9 }, { 0x1BF3, 9 }, { 0x1C37, 7 }, { 0x1CD0, 230 }, { 0x1CD1, 230 }, { 0x1CD2, 230 }, { 0x1CD4, 1 }, { 0x1CD5, 220 }, { 0x1CD6, 220 }, { 0x1CD7, 220 }, { 0x1CD8, 220 }, { 0x1CD9, 220 }, { 0x1CDA, 230 }, { 0x1CDB, 230 }, { 0x1CDC, 220 }, { 0x1CDD, 220 }, { 0x1CDE, 220 }, { 0x1CDF, 220 }, { 0x1CE0, 230 }, { 0x1CE2, 1 }, { 0x1CE3, 1 }, { 0x1CE4, 1 }, { 0x1CE5, 1 }, { 0x1CE6, 1 }, { 0x1CE7, 1 }, { 0x1CE8, 1 }, { 0x1CED, 220 }, { 0x1CF4, 230 }, { 0x1CF8, 230 }, { 0x1CF9, 230 }, { 0x1DC0, 230 }, { 0x1DC1, 230 }, { 0x1DC2, 220 }, { 0x1DC3, 230 }, { 0x1DC4, 230 }, { 0x1DC5, 230 }, { 0x1DC6, 230 }, { 0x1DC7, 230 }, { 0x1DC8, 230 }, { 0x1DC9, 230 }, { 0x1DCA, 220 }, { 0x1DCB, 230 }, { 0x1DCC, 230 }, { 0x1DCD, 234 }, { 0x1DCE, 214 }, { 0x1DCF, 220 }, { 0x1DD0, 202 }, { 0x1DD1, 230 }, { 0x1DD2, 230 }, { 0x1DD3, 230 }, { 0x1DD4, 230 }, { 0x1DD5, 230 }, { 0x1DD6, 230 }, { 0x1DD7, 230 }, { 0x1DD8, 230 }, { 0x1DD9, 230 }, { 0x1DDA, 230 }, { 0x1DDB, 230 }, { 0x1DDC, 230 }, { 0x1DDD, 230 }, { 0x1DDE, 230 }, { 0x1DDF, 230 }, { 0x1DE0, 230 }, { 0x1DE1, 230 }, { 0x1DE2, 230 }, { 0x1DE3, 230 }, { 0x1DE4, 230 }, { 0x1DE5, 230 }, { 0x1DE6, 230 }, { 0x1DE7, 230 }, { 0x1DE8, 230 }, { 0x1DE9, 230 }, { 0x1DEA, 230 }, { 0x1DEB, 230 }, { 0x1DEC, 230 }, { 0x1DED, 230 }, { 0x1DEE, 230 }, { 0x1DEF, 230 }, { 0x1DF0, 230 }, { 0x1DF1, 230 }, { 0x1DF2, 230 }, { 0x1DF3, 230 }, { 0x1DF4, 230 }, { 0x1DF5, 230 }, { 0x1DF6, 232 }, { 0x1DF7, 228 }, { 0x1DF8, 228 }, { 0x1DF9, 220 }, { 0x1DFB, 230 }, { 0x1DFC, 233 }, { 0x1DFD, 220 }, { 0x1DFE, 230 }, { 0x1DFF, 220 }, { 0x20D0, 230 }, { 0x20D1, 230 }, { 0x20D2, 1 }, { 0x20D3, 1 }, { 0x20D4, 230 }, { 0x20D5, 230 }, { 0x20D6, 230 }, { 0x20D7, 230 }, { 0x20D8, 1 }, { 0x20D9, 1 }, { 0x20DA, 1 }, { 0x20DB, 230 }, { 0x20DC, 230 }, { 0x20E1, 230 }, { 0x20E5, 1 }, { 0x20E6, 1 }, { 0x20E7, 230 }, { 0x20E8, 220 }, { 0x20E9, 230 }, { 0x20EA, 1 }, { 0x20EB, 1 }, { 0x20EC, 220 }, { 0x20ED, 220 }, { 0x20EE, 220 }, { 0x20EF, 220 }, { 0x20F0, 230 }, { 0x2CEF, 230 }, { 0x2CF0, 230 }, { 0x2CF1, 230 }, { 0x2D7F, 9 }, { 0x2DE0, 230 }, { 0x2DE1, 230 }, { 0x2DE2, 230 }, { 0x2DE3, 230 }, { 0x2DE4, 230 }, { 0x2DE5, 230 }, { 0x2DE6, 230 }, { 0x2DE7, 230 }, { 0x2DE8, 230 }, { 0x2DE9, 230 }, { 0x2DEA, 230 }, { 0x2DEB, 230 }, { 0x2DEC, 230 }, { 0x2DED, 230 }, { 0x2DEE, 230 }, { 0x2DEF, 230 }, { 0x2DF0, 230 }, { 0x2DF1, 230 }, { 0x2DF2, 230 }, { 0x2DF3, 230 }, { 0x2DF4, 230 }, { 0x2DF5, 230 }, { 0x2DF6, 230 }, { 0x2DF7, 230 }, { 0x2DF8, 230 }, { 0x2DF9, 230 }, { 0x2DFA, 230 }, { 0x2DFB, 230 }, { 0x2DFC, 230 }, { 0x2DFD, 230 }, { 0x2DFE, 230 }, { 0x2DFF, 230 }, { 0x302A, 218 }, { 0x302B, 228 }, { 0x302C, 232 }, { 0x302D, 222 }, { 0x302E, 224 }, { 0x302F, 224 }, { 0x3099, 8 }, { 0x309A, 8 }, { 0xA66F, 230 }, { 0xA674, 230 }, { 0xA675, 230 }, { 0xA676, 230 }, { 0xA677, 230 }, { 0xA678, 230 }, { 0xA679, 230 }, { 0xA67A, 230 }, { 0xA67B, 230 }, { 0xA67C, 230 }, { 0xA67D, 230 }, { 0xA69E, 230 }, { 0xA69F, 230 }, { 0xA6F0, 230 }, { 0xA6F1, 230 }, { 0xA806, 9 }, { 0xA8C4, 9 }, { 0xA8E0, 230 }, { 0xA8E1, 230 }, { 0xA8E2, 230 }, { 0xA8E3, 230 }, { 0xA8E4, 230 }, { 0xA8E5, 230 }, { 0xA8E6, 230 }, { 0xA8E7, 230 }, { 0xA8E8, 230 }, { 0xA8E9, 230 }, { 0xA8EA, 230 }, { 0xA8EB, 230 }, { 0xA8EC, 230 }, { 0xA8ED, 230 }, { 0xA8EE, 230 }, { 0xA8EF, 230 }, { 0xA8F0, 230 }, { 0xA8F1, 230 }, { 0xA92B, 220 }, { 0xA92C, 220 }, { 0xA92D, 220 }, { 0xA953, 9 }, { 0xA9B3, 7 }, { 0xA9C0, 9 }, { 0xAAB0, 230 }, { 0xAAB2, 230 }, { 0xAAB3, 230 }, { 0xAAB4, 220 }, { 0xAAB7, 230 }, { 0xAAB8, 230 }, { 0xAABE, 230 }, { 0xAABF, 230 }, { 0xAAC1, 230 }, { 0xAAF6, 9 }, { 0xABED, 9 }, { 0xFB1E, 26 }, { 0xFE20, 230 }, { 0xFE21, 230 }, { 0xFE22, 230 }, { 0xFE23, 230 }, { 0xFE24, 230 }, { 0xFE25, 230 }, { 0xFE26, 230 }, { 0xFE27, 220 }, { 0xFE28, 220 }, { 0xFE29, 220 }, { 0xFE2A, 220 }, { 0xFE2B, 220 }, { 0xFE2C, 220 }, { 0xFE2D, 220 }, { 0xFE2E, 230 }, { 0xFE2F, 230 }, { 0x101FD, 220 }, { 0x102E0, 220 }, { 0x10376, 230 }, { 0x10377, 230 }, { 0x10378, 230 }, { 0x10379, 230 }, { 0x1037A, 230 }, { 0x10A0D, 220 }, { 0x10A0F, 230 }, { 0x10A38, 230 }, { 0x10A39, 1 }, { 0x10A3A, 220 }, { 0x10A3F, 9 }, { 0x10AE5, 230 }, { 0x10AE6, 220 }, { 0x10D24, 230 }, { 0x10D25, 230 }, { 0x10D26, 230 }, { 0x10D27, 230 }, { 0x10F46, 220 }, { 0x10F47, 220 }, { 0x10F48, 230 }, { 0x10F49, 230 }, { 0x10F4A, 230 }, { 0x10F4B, 220 }, { 0x10F4C, 230 }, { 0x10F4D, 220 }, { 0x10F4E, 220 }, { 0x10F4F, 220 }, { 0x10F50, 220 }, { 0x11046, 9 }, { 0x1107F, 9 }, { 0x110B9, 9 }, { 0x110BA, 7 }, { 0x11100, 230 }, { 0x11101, 230 }, { 0x11102, 230 }, { 0x11133, 9 }, { 0x11134, 9 }, { 0x11173, 7 }, { 0x111C0, 9 }, { 0x111CA, 7 }, { 0x11235, 9 }, { 0x11236, 7 }, { 0x112E9, 7 }, { 0x112EA, 9 }, { 0x1133B, 7 }, { 0x1133C, 7 }, { 0x1134D, 9 }, { 0x11366, 230 }, { 0x11367, 230 }, { 0x11368, 230 }, { 0x11369, 230 }, { 0x1136A, 230 }, { 0x1136B, 230 }, { 0x1136C, 230 }, { 0x11370, 230 }, { 0x11371, 230 }, { 0x11372, 230 }, { 0x11373, 230 }, { 0x11374, 230 }, { 0x11442, 9 }, { 0x11446, 7 }, { 0x1145E, 230 }, { 0x114C2, 9 }, { 0x114C3, 7 }, { 0x115BF, 9 }, { 0x115C0, 7 }, { 0x1163F, 9 }, { 0x116B6, 9 }, { 0x116B7, 7 }, { 0x1172B, 9 }, { 0x11839, 9 }, { 0x1183A, 7 }, { 0x11A34, 9 }, { 0x11A47, 9 }, { 0x11A99, 9 }, { 0x11C3F, 9 }, { 0x11D42, 7 }, { 0x11D44, 9 }, { 0x11D45, 9 }, { 0x11D97, 9 }, { 0x16AF0, 1 }, { 0x16AF1, 1 }, { 0x16AF2, 1 }, { 0x16AF3, 1 }, { 0x16AF4, 1 }, { 0x16B30, 230 }, { 0x16B31, 230 }, { 0x16B32, 230 }, { 0x16B33, 230 }, { 0x16B34, 230 }, { 0x16B35, 230 }, { 0x16B36, 230 }, { 0x1BC9E, 1 }, { 0x1D165, 216 }, { 0x1D166, 216 }, { 0x1D167, 1 }, { 0x1D168, 1 }, { 0x1D169, 1 }, { 0x1D16D, 226 }, { 0x1D16E, 216 }, { 0x1D16F, 216 }, { 0x1D170, 216 }, { 0x1D171, 216 }, { 0x1D172, 216 }, { 0x1D17B, 220 }, { 0x1D17C, 220 }, { 0x1D17D, 220 }, { 0x1D17E, 220 }, { 0x1D17F, 220 }, { 0x1D180, 220 }, { 0x1D181, 220 }, { 0x1D182, 220 }, { 0x1D185, 230 }, { 0x1D186, 230 }, { 0x1D187, 230 }, { 0x1D188, 230 }, { 0x1D189, 230 }, { 0x1D18A, 220 }, { 0x1D18B, 220 }, { 0x1D1AA, 230 }, { 0x1D1AB, 230 }, { 0x1D1AC, 230 }, { 0x1D1AD, 230 }, { 0x1D242, 230 }, { 0x1D243, 230 }, { 0x1D244, 230 }, { 0x1E000, 230 }, { 0x1E001, 230 }, { 0x1E002, 230 }, { 0x1E003, 230 }, { 0x1E004, 230 }, { 0x1E005, 230 }, { 0x1E006, 230 }, { 0x1E008, 230 }, { 0x1E009, 230 }, { 0x1E00A, 230 }, { 0x1E00B, 230 }, { 0x1E00C, 230 }, { 0x1E00D, 230 }, { 0x1E00E, 230 }, { 0x1E00F, 230 }, { 0x1E010, 230 }, { 0x1E011, 230 }, { 0x1E012, 230 }, { 0x1E013, 230 }, { 0x1E014, 230 }, { 0x1E015, 230 }, { 0x1E016, 230 }, { 0x1E017, 230 }, { 0x1E018, 230 }, { 0x1E01B, 230 }, { 0x1E01C, 230 }, { 0x1E01D, 230 }, { 0x1E01E, 230 }, { 0x1E01F, 230 }, { 0x1E020, 230 }, { 0x1E021, 230 }, { 0x1E023, 230 }, { 0x1E024, 230 }, { 0x1E026, 230 }, { 0x1E027, 230 }, { 0x1E028, 230 }, { 0x1E029, 230 }, { 0x1E02A, 230 }, { 0x1E8D0, 220 }, { 0x1E8D1, 220 }, { 0x1E8D2, 220 }, { 0x1E8D3, 220 }, { 0x1E8D4, 220 }, { 0x1E8D5, 220 }, { 0x1E8D6, 220 }, { 0x1E944, 230 }, { 0x1E945, 230 }, { 0x1E946, 230 }, { 0x1E947, 230 }, { 0x1E948, 230 }, { 0x1E949, 230 }, { 0x1E94A, 7 }, { 0, 0 } }; static GX_CANONICAL_DECOMPOSE_MAP gx_studio_canonical_decompose_maps[] = { {0x00C0, {0x0041, 0x0300}}, {0x00C1, {0x0041, 0x0301}}, {0x00C2, {0x0041, 0x0302}}, {0x00C3, {0x0041, 0x0303}}, {0x00C4, {0x0041, 0x0308}}, {0x00C5, {0x0041, 0x030A}}, {0x00C7, {0x0043, 0x0327}}, {0x00C8, {0x0045, 0x0300}}, {0x00C9, {0x0045, 0x0301}}, {0x00CA, {0x0045, 0x0302}}, {0x00CB, {0x0045, 0x0308}}, {0x00CC, {0x0049, 0x0300}}, {0x00CD, {0x0049, 0x0301}}, {0x00CE, {0x0049, 0x0302}}, {0x00CF, {0x0049, 0x0308}}, {0x00D1, {0x004E, 0x0303}}, {0x00D2, {0x004F, 0x0300}}, {0x00D3, {0x004F, 0x0301}}, {0x00D4, {0x004F, 0x0302}}, {0x00D5, {0x004F, 0x0303}}, { 0x00D6, { 0x004F, 0x0308 } }, { 0x00D9, { 0x0055, 0x0300 } }, { 0x00DA, { 0x0055, 0x0301 } }, { 0x00DB, { 0x0055, 0x0302 } }, { 0x00DC, { 0x0055, 0x0308 } }, { 0x00DD, { 0x0059, 0x0301 } }, { 0x00E0, { 0x0061, 0x0300 } }, { 0x00E1, { 0x0061, 0x0301 } }, { 0x00E2, { 0x0061, 0x0302 } }, { 0x00E3, { 0x0061, 0x0303 } }, { 0x00E4, { 0x0061, 0x0308 } }, { 0x00E5, { 0x0061, 0x030A } }, { 0x00E7, { 0x0063, 0x0327 } }, { 0x00E8, { 0x0065, 0x0300 } }, { 0x00E9, { 0x0065, 0x0301 } }, { 0x00EA, { 0x0065, 0x0302 } }, { 0x00EB, { 0x0065, 0x0308 } }, { 0x00EC, { 0x0069, 0x0300 } }, { 0x00ED, { 0x0069, 0x0301 } }, { 0x00EE, { 0x0069, 0x0302 } }, { 0x00EF, { 0x0069, 0x0308 } }, { 0x00F1, { 0x006E, 0x0303 } }, { 0x00F2, { 0x006F, 0x0300 } }, { 0x00F3, { 0x006F, 0x0301 } }, { 0x00F4, { 0x006F, 0x0302 } }, { 0x00F5, { 0x006F, 0x0303 } }, { 0x00F6, { 0x006F, 0x0308 } }, { 0x00F9, { 0x0075, 0x0300 } }, { 0x00FA, { 0x0075, 0x0301 } }, { 0x00FB, { 0x0075, 0x0302 } }, { 0x00FC, { 0x0075, 0x0308 } }, { 0x00FD, { 0x0079, 0x0301 } }, { 0x00FF, { 0x0079, 0x0308 } }, { 0x0100, { 0x0041, 0x0304 } }, { 0x0101, { 0x0061, 0x0304 } }, { 0x0102, { 0x0041, 0x0306 } }, { 0x0103, { 0x0061, 0x0306 } }, { 0x0104, { 0x0041, 0x0328 } }, { 0x0105, { 0x0061, 0x0328 } }, { 0x0106, { 0x0043, 0x0301 } }, { 0x0107, { 0x0063, 0x0301 } }, { 0x0108, { 0x0043, 0x0302 } }, { 0x0109, { 0x0063, 0x0302 } }, { 0x010A, { 0x0043, 0x0307 } }, { 0x010B, { 0x0063, 0x0307 } }, { 0x010C, { 0x0043, 0x030C } }, { 0x010D, { 0x0063, 0x030C } }, { 0x010E, { 0x0044, 0x030C } }, { 0x010F, { 0x0064, 0x030C } }, { 0x0112, { 0x0045, 0x0304 } }, { 0x0113, { 0x0065, 0x0304 } }, { 0x0114, { 0x0045, 0x0306 } }, { 0x0115, { 0x0065, 0x0306 } }, { 0x0116, { 0x0045, 0x0307 } }, { 0x0117, { 0x0065, 0x0307 } }, { 0x0118, { 0x0045, 0x0328 } }, { 0x0119, { 0x0065, 0x0328 } }, { 0x011A, { 0x0045, 0x030C } }, { 0x011B, { 0x0065, 0x030C } }, { 0x011C, { 0x0047, 0x0302 } }, { 0x011D, { 0x0067, 0x0302 } }, { 0x011E, { 0x0047, 0x0306 } }, { 0x011F, { 0x0067, 0x0306 } }, { 0x0120, { 0x0047, 0x0307 } }, { 0x0121, { 0x0067, 0x0307 } }, { 0x0122, { 0x0047, 0x0327 } }, { 0x0123, { 0x0067, 0x0327 } }, { 0x0124, { 0x0048, 0x0302 } }, { 0x0125, { 0x0068, 0x0302 } }, { 0x0128, { 0x0049, 0x0303 } }, { 0x0129, { 0x0069, 0x0303 } }, { 0x012A, { 0x0049, 0x0304 } }, { 0x012B, { 0x0069, 0x0304 } }, { 0x012C, { 0x0049, 0x0306 } }, { 0x012D, { 0x0069, 0x0306 } }, { 0x012E, { 0x0049, 0x0328 } }, { 0x012F, { 0x0069, 0x0328 } }, { 0x0130, { 0x0049, 0x0307 } }, { 0x0134, { 0x004A, 0x0302 } }, { 0x0135, { 0x006A, 0x0302 } }, { 0x0136, { 0x004B, 0x0327 } }, { 0x0137, { 0x006B, 0x0327 } }, { 0x0139, { 0x004C, 0x0301 } }, { 0x013A, { 0x006C, 0x0301 } }, { 0x013B, { 0x004C, 0x0327 } }, { 0x013C, { 0x006C, 0x0327 } }, { 0x013D, { 0x004C, 0x030C } }, { 0x013E, { 0x006C, 0x030C } }, { 0x0143, { 0x004E, 0x0301 } }, { 0x0144, { 0x006E, 0x0301 } }, { 0x0145, { 0x004E, 0x0327 } }, { 0x0146, { 0x006E, 0x0327 } }, { 0x0147, { 0x004E, 0x030C } }, { 0x0148, { 0x006E, 0x030C } }, { 0x014C, { 0x004F, 0x0304 } }, { 0x014D, { 0x006F, 0x0304 } }, { 0x014E, { 0x004F, 0x0306 } }, { 0x014F, { 0x006F, 0x0306 } }, { 0x0150, { 0x004F, 0x030B } }, { 0x0151, { 0x006F, 0x030B } }, { 0x0154, { 0x0052, 0x0301 } }, { 0x0155, { 0x0072, 0x0301 } }, { 0x0156, { 0x0052, 0x0327 } }, { 0x0157, { 0x0072, 0x0327 } }, { 0x0158, { 0x0052, 0x030C } }, { 0x0159, { 0x0072, 0x030C } }, { 0x015A, { 0x0053, 0x0301 } }, { 0x015B, { 0x0073, 0x0301 } }, { 0x015C, { 0x0053, 0x0302 } }, { 0x015D, { 0x0073, 0x0302 } }, { 0x015E, { 0x0053, 0x0327 } }, { 0x015F, { 0x0073, 0x0327 } }, { 0x0160, { 0x0053, 0x030C } }, { 0x0161, { 0x0073, 0x030C } }, { 0x0162, { 0x0054, 0x0327 } }, { 0x0163, { 0x0074, 0x0327 } }, { 0x0164, { 0x0054, 0x030C } }, { 0x0165, { 0x0074, 0x030C } }, { 0x0168, { 0x0055, 0x0303 } }, { 0x0169, { 0x0075, 0x0303 } }, { 0x016A, { 0x0055, 0x0304 } }, { 0x016B, { 0x0075, 0x0304 } }, { 0x016C, { 0x0055, 0x0306 } }, { 0x016D, { 0x0075, 0x0306 } }, { 0x016E, { 0x0055, 0x030A } }, { 0x016F, { 0x0075, 0x030A } }, { 0x0170, { 0x0055, 0x030B } }, { 0x0171, { 0x0075, 0x030B } }, { 0x0172, { 0x0055, 0x0328 } }, { 0x0173, { 0x0075, 0x0328 } }, { 0x0174, { 0x0057, 0x0302 } }, { 0x0175, { 0x0077, 0x0302 } }, { 0x0176, { 0x0059, 0x0302 } }, { 0x0177, { 0x0079, 0x0302 } }, { 0x0178, { 0x0059, 0x0308 } }, { 0x0179, { 0x005A, 0x0301 } }, { 0x017A, { 0x007A, 0x0301 } }, { 0x017B, { 0x005A, 0x0307 } }, { 0x017C, { 0x007A, 0x0307 } }, { 0x017D, { 0x005A, 0x030C } }, { 0x017E, { 0x007A, 0x030C } }, { 0x01A0, { 0x004F, 0x031B } }, { 0x01A1, { 0x006F, 0x031B } }, { 0x01AF, { 0x0055, 0x031B } }, { 0x01B0, { 0x0075, 0x031B } }, { 0x01CD, { 0x0041, 0x030C } }, { 0x01CE, { 0x0061, 0x030C } }, { 0x01CF, { 0x0049, 0x030C } }, { 0x01D0, { 0x0069, 0x030C } }, { 0x01D1, { 0x004F, 0x030C } }, { 0x01D2, { 0x006F, 0x030C } }, { 0x01D3, { 0x0055, 0x030C } }, { 0x01D4, { 0x0075, 0x030C } }, { 0x01D5, { 0x00DC, 0x0304 } }, { 0x01D6, { 0x00FC, 0x0304 } }, { 0x01D7, { 0x00DC, 0x0301 } }, { 0x01D8, { 0x00FC, 0x0301 } }, { 0x01D9, { 0x00DC, 0x030C } }, { 0x01DA, { 0x00FC, 0x030C } }, { 0x01DB, { 0x00DC, 0x0300 } }, { 0x01DC, { 0x00FC, 0x0300 } }, { 0x01DE, { 0x00C4, 0x0304 } }, { 0x01DF, { 0x00E4, 0x0304 } }, { 0x01E0, { 0x0226, 0x0304 } }, { 0x01E1, { 0x0227, 0x0304 } }, { 0x01E2, { 0x00C6, 0x0304 } }, { 0x01E3, { 0x00E6, 0x0304 } }, { 0x01E6, { 0x0047, 0x030C } }, { 0x01E7, { 0x0067, 0x030C } }, { 0x01E8, { 0x004B, 0x030C } }, { 0x01E9, { 0x006B, 0x030C } }, { 0x01EA, { 0x004F, 0x0328 } }, { 0x01EB, { 0x006F, 0x0328 } }, { 0x01EC, { 0x01EA, 0x0304 } }, { 0x01ED, { 0x01EB, 0x0304 } }, { 0x01EE, { 0x01B7, 0x030C } }, { 0x01EF, { 0x0292, 0x030C } }, { 0x01F0, { 0x006A, 0x030C } }, { 0x01F4, { 0x0047, 0x0301 } }, { 0x01F5, { 0x0067, 0x0301 } }, { 0x01F8, { 0x004E, 0x0300 } }, { 0x01F9, { 0x006E, 0x0300 } }, { 0x01FA, { 0x00C5, 0x0301 } }, { 0x01FB, { 0x00E5, 0x0301 } }, { 0x01FC, { 0x00C6, 0x0301 } }, { 0x01FD, { 0x00E6, 0x0301 } }, { 0x01FE, { 0x00D8, 0x0301 } }, { 0x01FF, { 0x00F8, 0x0301 } }, { 0x0200, { 0x0041, 0x030F } }, { 0x0201, { 0x0061, 0x030F } }, { 0x0202, { 0x0041, 0x0311 } }, { 0x0203, { 0x0061, 0x0311 } }, { 0x0204, { 0x0045, 0x030F } }, { 0x0205, { 0x0065, 0x030F } }, { 0x0206, { 0x0045, 0x0311 } }, { 0x0207, { 0x0065, 0x0311 } }, { 0x0208, { 0x0049, 0x030F } }, { 0x0209, { 0x0069, 0x030F } }, { 0x020A, { 0x0049, 0x0311 } }, { 0x020B, { 0x0069, 0x0311 } }, { 0x020C, { 0x004F, 0x030F } }, { 0x020D, { 0x006F, 0x030F } }, { 0x020E, { 0x004F, 0x0311 } }, { 0x020F, { 0x006F, 0x0311 } }, { 0x0210, { 0x0052, 0x030F } }, { 0x0211, { 0x0072, 0x030F } }, { 0x0212, { 0x0052, 0x0311 } }, { 0x0213, { 0x0072, 0x0311 } }, { 0x0214, { 0x0055, 0x030F } }, { 0x0215, { 0x0075, 0x030F } }, { 0x0216, { 0x0055, 0x0311 } }, { 0x0217, { 0x0075, 0x0311 } }, { 0x0218, { 0x0053, 0x0326 } }, { 0x0219, { 0x0073, 0x0326 } }, { 0x021A, { 0x0054, 0x0326 } }, { 0x021B, { 0x0074, 0x0326 } }, { 0x021E, { 0x0048, 0x030C } }, { 0x021F, { 0x0068, 0x030C } }, { 0x0226, { 0x0041, 0x0307 } }, { 0x0227, { 0x0061, 0x0307 } }, { 0x0228, { 0x0045, 0x0327 } }, { 0x0229, { 0x0065, 0x0327 } }, { 0x022A, { 0x00D6, 0x0304 } }, { 0x022B, { 0x00F6, 0x0304 } }, { 0x022C, { 0x00D5, 0x0304 } }, { 0x022D, { 0x00F5, 0x0304 } }, { 0x022E, { 0x004F, 0x0307 } }, { 0x022F, { 0x006F, 0x0307 } }, { 0x0230, { 0x022E, 0x0304 } }, { 0x0231, { 0x022F, 0x0304 } }, { 0x0232, { 0x0059, 0x0304 } }, { 0x0233, { 0x0079, 0x0304 } }, { 0x0340, { 0x0300, 0 } }, { 0x0341, { 0x0301, 0 } }, { 0x0343, { 0x0313, 0 } }, { 0x0344, { 0x0308, 0x0301 } }, { 0x0374, { 0x02B9, 0 } }, { 0x037E, { 0x003B, 0 } }, { 0x0385, { 0x00A8, 0x0301 } }, { 0x0386, { 0x0391, 0x0301 } }, { 0x0387, { 0x00B7, 0 } }, { 0x0388, { 0x0395, 0x0301 } }, { 0x0389, { 0x0397, 0x0301 } }, { 0x038A, { 0x0399, 0x0301 } }, { 0x038C, { 0x039F, 0x0301 } }, { 0x038E, { 0x03A5, 0x0301 } }, { 0x038F, { 0x03A9, 0x0301 } }, { 0x0390, { 0x03CA, 0x0301 } }, { 0x03AA, { 0x0399, 0x0308 } }, { 0x03AB, { 0x03A5, 0x0308 } }, { 0x03AC, { 0x03B1, 0x0301 } }, { 0x03AD, { 0x03B5, 0x0301 } }, { 0x03AE, { 0x03B7, 0x0301 } }, { 0x03AF, { 0x03B9, 0x0301 } }, { 0x03B0, { 0x03CB, 0x0301 } }, { 0x03CA, { 0x03B9, 0x0308 } }, { 0x03CB, { 0x03C5, 0x0308 } }, { 0x03CC, { 0x03BF, 0x0301 } }, { 0x03CD, { 0x03C5, 0x0301 } }, { 0x03CE, { 0x03C9, 0x0301 } }, { 0x03D3, { 0x03D2, 0x0301 } }, { 0x03D4, { 0x03D2, 0x0308 } }, { 0x0400, { 0x0415, 0x0300 } }, { 0x0401, { 0x0415, 0x0308 } }, { 0x0403, { 0x0413, 0x0301 } }, { 0x0407, { 0x0406, 0x0308 } }, { 0x040C, { 0x041A, 0x0301 } }, { 0x040D, { 0x0418, 0x0300 } }, { 0x040E, { 0x0423, 0x0306 } }, { 0x0419, { 0x0418, 0x0306 } }, { 0x0439, { 0x0438, 0x0306 } }, { 0x0450, { 0x0435, 0x0300 } }, { 0x0451, { 0x0435, 0x0308 } }, { 0x0453, { 0x0433, 0x0301 } }, { 0x0457, { 0x0456, 0x0308 } }, { 0x045C, { 0x043A, 0x0301 } }, { 0x045D, { 0x0438, 0x0300 } }, { 0x045E, { 0x0443, 0x0306 } }, { 0x0476, { 0x0474, 0x030F } }, { 0x0477, { 0x0475, 0x030F } }, { 0x04C1, { 0x0416, 0x0306 } }, { 0x04C2, { 0x0436, 0x0306 } }, { 0x04D0, { 0x0410, 0x0306 } }, { 0x04D1, { 0x0430, 0x0306 } }, { 0x04D2, { 0x0410, 0x0308 } }, { 0x04D3, { 0x0430, 0x0308 } }, { 0x04D6, { 0x0415, 0x0306 } }, { 0x04D7, { 0x0435, 0x0306 } }, { 0x04DA, { 0x04D8, 0x0308 } }, { 0x04DB, { 0x04D9, 0x0308 } }, { 0x04DC, { 0x0416, 0x0308 } }, { 0x04DD, { 0x0436, 0x0308 } }, { 0x04DE, { 0x0417, 0x0308 } }, { 0x04DF, { 0x0437, 0x0308 } }, { 0x04E2, { 0x0418, 0x0304 } }, { 0x04E3, { 0x0438, 0x0304 } }, { 0x04E4, { 0x0418, 0x0308 } }, { 0x04E5, { 0x0438, 0x0308 } }, { 0x04E6, { 0x041E, 0x0308 } }, { 0x04E7, { 0x043E, 0x0308 } }, { 0x04EA, { 0x04E8, 0x0308 } }, { 0x04EB, { 0x04E9, 0x0308 } }, { 0x04EC, { 0x042D, 0x0308 } }, { 0x04ED, { 0x044D, 0x0308 } }, { 0x04EE, { 0x0423, 0x0304 } }, { 0x04EF, { 0x0443, 0x0304 } }, { 0x04F0, { 0x0423, 0x0308 } }, { 0x04F1, { 0x0443, 0x0308 } }, { 0x04F2, { 0x0423, 0x030B } }, { 0x04F3, { 0x0443, 0x030B } }, { 0x04F4, { 0x0427, 0x0308 } }, { 0x04F5, { 0x0447, 0x0308 } }, { 0x04F8, { 0x042B, 0x0308 } }, { 0x04F9, { 0x044B, 0x0308 } }, { 0x0622, { 0x0627, 0x0653 } }, { 0x0623, { 0x0627, 0x0654 } }, { 0x0624, { 0x0648, 0x0654 } }, { 0x0625, { 0x0627, 0x0655 } }, { 0x0626, { 0x064A, 0x0654 } }, { 0x06C0, { 0x06D5, 0x0654 } }, { 0x06C2, { 0x06C1, 0x0654 } }, { 0x06D3, { 0x06D2, 0x0654 } }, { 0x0929, { 0x0928, 0x093C } }, { 0x0931, { 0x0930, 0x093C } }, { 0x0934, { 0x0933, 0x093C } }, { 0x0958, { 0x0915, 0x093C } }, { 0x0959, { 0x0916, 0x093C } }, { 0x095A, { 0x0917, 0x093C } }, { 0x095B, { 0x091C, 0x093C } }, { 0x095C, { 0x0921, 0x093C } }, { 0x095D, { 0x0922, 0x093C } }, { 0x095E, { 0x092B, 0x093C } }, { 0x095F, { 0x092F, 0x093C } }, { 0x09CB, { 0x09C7, 0x09BE } }, { 0x09CC, { 0x09C7, 0x09D7 } }, { 0x09DC, { 0x09A1, 0x09BC } }, { 0x09DD, { 0x09A2, 0x09BC } }, { 0x09DF, { 0x09AF, 0x09BC } }, { 0x0A33, { 0x0A32, 0x0A3C } }, { 0x0A36, { 0x0A38, 0x0A3C } }, { 0x0A59, { 0x0A16, 0x0A3C } }, { 0x0A5A, { 0x0A17, 0x0A3C } }, { 0x0A5B, { 0x0A1C, 0x0A3C } }, { 0x0A5E, { 0x0A2B, 0x0A3C } }, { 0x0B48, { 0x0B47, 0x0B56 } }, { 0x0B4B, { 0x0B47, 0x0B3E } }, { 0x0B4C, { 0x0B47, 0x0B57 } }, { 0x0B5C, { 0x0B21, 0x0B3C } }, { 0x0B5D, { 0x0B22, 0x0B3C } }, { 0x0B94, { 0x0B92, 0x0BD7 } }, { 0x0BCA, { 0x0BC6, 0x0BBE } }, { 0x0BCB, { 0x0BC7, 0x0BBE } }, { 0x0BCC, { 0x0BC6, 0x0BD7 } }, { 0x0C48, { 0x0C46, 0x0C56 } }, { 0x0CC0, { 0x0CBF, 0x0CD5 } }, { 0x0CC7, { 0x0CC6, 0x0CD5 } }, { 0x0CC8, { 0x0CC6, 0x0CD6 } }, { 0x0CCA, { 0x0CC6, 0x0CC2 } }, { 0x0CCB, { 0x0CCA, 0x0CD5 } }, { 0x0D4A, { 0x0D46, 0x0D3E } }, { 0x0D4B, { 0x0D47, 0x0D3E } }, { 0x0D4C, { 0x0D46, 0x0D57 } }, { 0x0DDA, { 0x0DD9, 0x0DCA } }, { 0x0DDC, { 0x0DD9, 0x0DCF } }, { 0x0DDD, { 0x0DDC, 0x0DCA } }, { 0x0DDE, { 0x0DD9, 0x0DDF } }, { 0x0F43, { 0x0F42, 0x0FB7 } }, { 0x0F4D, { 0x0F4C, 0x0FB7 } }, { 0x0F52, { 0x0F51, 0x0FB7 } }, { 0x0F57, { 0x0F56, 0x0FB7 } }, { 0x0F5C, { 0x0F5B, 0x0FB7 } }, { 0x0F69, { 0x0F40, 0x0FB5 } }, { 0x0F73, { 0x0F71, 0x0F72 } }, { 0x0F75, { 0x0F71, 0x0F74 } }, { 0x0F76, { 0x0FB2, 0x0F80 } }, { 0x0F78, { 0x0FB3, 0x0F80 } }, { 0x0F81, { 0x0F71, 0x0F80 } }, { 0x0F93, { 0x0F92, 0x0FB7 } }, { 0x0F9D, { 0x0F9C, 0x0FB7 } }, { 0x0FA2, { 0x0FA1, 0x0FB7 } }, { 0x0FA7, { 0x0FA6, 0x0FB7 } }, { 0x0FAC, { 0x0FAB, 0x0FB7 } }, { 0x0FB9, { 0x0F90, 0x0FB5 } }, { 0x1026, { 0x1025, 0x102E } }, { 0x1B06, { 0x1B05, 0x1B35 } }, { 0x1B08, { 0x1B07, 0x1B35 } }, { 0x1B0A, { 0x1B09, 0x1B35 } }, { 0x1B0C, { 0x1B0B, 0x1B35 } }, { 0x1B0E, { 0x1B0D, 0x1B35 } }, { 0x1B12, { 0x1B11, 0x1B35 } }, { 0x1B3B, { 0x1B3A, 0x1B35 } }, { 0x1B3D, { 0x1B3C, 0x1B35 } }, { 0x1B40, { 0x1B3E, 0x1B35 } }, { 0x1B41, { 0x1B3F, 0x1B35 } }, { 0x1B43, { 0x1B42, 0x1B35 } }, { 0x1E00, { 0x0041, 0x0325 } }, { 0x1E01, { 0x0061, 0x0325 } }, { 0x1E02, { 0x0042, 0x0307 } }, { 0x1E03, { 0x0062, 0x0307 } }, { 0x1E04, { 0x0042, 0x0323 } }, { 0x1E05, { 0x0062, 0x0323 } }, { 0x1E06, { 0x0042, 0x0331 } }, { 0x1E07, { 0x0062, 0x0331 } }, { 0x1E08, { 0x00C7, 0x0301 } }, { 0x1E09, { 0x00E7, 0x0301 } }, { 0x1E0A, { 0x0044, 0x0307 } }, { 0x1E0B, { 0x0064, 0x0307 } }, { 0x1E0C, { 0x0044, 0x0323 } }, { 0x1E0D, { 0x0064, 0x0323 } }, { 0x1E0E, { 0x0044, 0x0331 } }, { 0x1E0F, { 0x0064, 0x0331 } }, { 0x1E10, { 0x0044, 0x0327 } }, { 0x1E11, { 0x0064, 0x0327 } }, { 0x1E12, { 0x0044, 0x032D } }, { 0x1E13, { 0x0064, 0x032D } }, { 0x1E14, { 0x0112, 0x0300 } }, { 0x1E15, { 0x0113, 0x0300 } }, { 0x1E16, { 0x0112, 0x0301 } }, { 0x1E17, { 0x0113, 0x0301 } }, { 0x1E18, { 0x0045, 0x032D } }, { 0x1E19, { 0x0065, 0x032D } }, { 0x1E1A, { 0x0045, 0x0330 } }, { 0x1E1B, { 0x0065, 0x0330 } }, { 0x1E1C, { 0x0228, 0x0306 } }, { 0x1E1D, { 0x0229, 0x0306 } }, { 0x1E1E, { 0x0046, 0x0307 } }, { 0x1E1F, { 0x0066, 0x0307 } }, { 0x1E20, { 0x0047, 0x0304 } }, { 0x1E21, { 0x0067, 0x0304 } }, { 0x1E22, { 0x0048, 0x0307 } }, { 0x1E23, { 0x0068, 0x0307 } }, { 0x1E24, { 0x0048, 0x0323 } }, { 0x1E25, { 0x0068, 0x0323 } }, { 0x1E26, { 0x0048, 0x0308 } }, { 0x1E27, { 0x0068, 0x0308 } }, { 0x1E28, { 0x0048, 0x0327 } }, { 0x1E29, { 0x0068, 0x0327 } }, { 0x1E2A, { 0x0048, 0x032E } }, { 0x1E2B, { 0x0068, 0x032E } }, { 0x1E2C, { 0x0049, 0x0330 } }, { 0x1E2D, { 0x0069, 0x0330 } }, { 0x1E2E, { 0x00CF, 0x0301 } }, { 0x1E2F, { 0x00EF, 0x0301 } }, { 0x1E30, { 0x004B, 0x0301 } }, { 0x1E31, { 0x006B, 0x0301 } }, { 0x1E32, { 0x004B, 0x0323 } }, { 0x1E33, { 0x006B, 0x0323 } }, { 0x1E34, { 0x004B, 0x0331 } }, { 0x1E35, { 0x006B, 0x0331 } }, { 0x1E36, { 0x004C, 0x0323 } }, { 0x1E37, { 0x006C, 0x0323 } }, { 0x1E38, { 0x1E36, 0x0304 } }, { 0x1E39, { 0x1E37, 0x0304 } }, { 0x1E3A, { 0x004C, 0x0331 } }, { 0x1E3B, { 0x006C, 0x0331 } }, { 0x1E3C, { 0x004C, 0x032D } }, { 0x1E3D, { 0x006C, 0x032D } }, { 0x1E3E, { 0x004D, 0x0301 } }, { 0x1E3F, { 0x006D, 0x0301 } }, { 0x1E40, { 0x004D, 0x0307 } }, { 0x1E41, { 0x006D, 0x0307 } }, { 0x1E42, { 0x004D, 0x0323 } }, { 0x1E43, { 0x006D, 0x0323 } }, { 0x1E44, { 0x004E, 0x0307 } }, { 0x1E45, { 0x006E, 0x0307 } }, { 0x1E46, { 0x004E, 0x0323 } }, { 0x1E47, { 0x006E, 0x0323 } }, { 0x1E48, { 0x004E, 0x0331 } }, { 0x1E49, { 0x006E, 0x0331 } }, { 0x1E4A, { 0x004E, 0x032D } }, { 0x1E4B, { 0x006E, 0x032D } }, { 0x1E4C, { 0x00D5, 0x0301 } }, { 0x1E4D, { 0x00F5, 0x0301 } }, { 0x1E4E, { 0x00D5, 0x0308 } }, { 0x1E4F, { 0x00F5, 0x0308 } }, { 0x1E50, { 0x014C, 0x0300 } }, { 0x1E51, { 0x014D, 0x0300 } }, { 0x1E52, { 0x014C, 0x0301 } }, { 0x1E53, { 0x014D, 0x0301 } }, { 0x1E54, { 0x0050, 0x0301 } }, { 0x1E55, { 0x0070, 0x0301 } }, { 0x1E56, { 0x0050, 0x0307 } }, { 0x1E57, { 0x0070, 0x0307 } }, { 0x1E58, { 0x0052, 0x0307 } }, { 0x1E59, { 0x0072, 0x0307 } }, { 0x1E5A, { 0x0052, 0x0323 } }, { 0x1E5B, { 0x0072, 0x0323 } }, { 0x1E5C, { 0x1E5A, 0x0304 } }, { 0x1E5D, { 0x1E5B, 0x0304 } }, { 0x1E5E, { 0x0052, 0x0331 } }, { 0x1E5F, { 0x0072, 0x0331 } }, { 0x1E60, { 0x0053, 0x0307 } }, { 0x1E61, { 0x0073, 0x0307 } }, { 0x1E62, { 0x0053, 0x0323 } }, { 0x1E63, { 0x0073, 0x0323 } }, { 0x1E64, { 0x015A, 0x0307 } }, { 0x1E65, { 0x015B, 0x0307 } }, { 0x1E66, { 0x0160, 0x0307 } }, { 0x1E67, { 0x0161, 0x0307 } }, { 0x1E68, { 0x1E62, 0x0307 } }, { 0x1E69, { 0x1E63, 0x0307 } }, { 0x1E6A, { 0x0054, 0x0307 } }, { 0x1E6B, { 0x0074, 0x0307 } }, { 0x1E6C, { 0x0054, 0x0323 } }, { 0x1E6D, { 0x0074, 0x0323 } }, { 0x1E6E, { 0x0054, 0x0331 } }, { 0x1E6F, { 0x0074, 0x0331 } }, { 0x1E70, { 0x0054, 0x032D } }, { 0x1E71, { 0x0074, 0x032D } }, { 0x1E72, { 0x0055, 0x0324 } }, { 0x1E73, { 0x0075, 0x0324 } }, { 0x1E74, { 0x0055, 0x0330 } }, { 0x1E75, { 0x0075, 0x0330 } }, { 0x1E76, { 0x0055, 0x032D } }, { 0x1E77, { 0x0075, 0x032D } }, { 0x1E78, { 0x0168, 0x0301 } }, { 0x1E79, { 0x0169, 0x0301 } }, { 0x1E7A, { 0x016A, 0x0308 } }, { 0x1E7B, { 0x016B, 0x0308 } }, { 0x1E7C, { 0x0056, 0x0303 } }, { 0x1E7D, { 0x0076, 0x0303 } }, { 0x1E7E, { 0x0056, 0x0323 } }, { 0x1E7F, { 0x0076, 0x0323 } }, { 0x1E80, { 0x0057, 0x0300 } }, { 0x1E81, { 0x0077, 0x0300 } }, { 0x1E82, { 0x0057, 0x0301 } }, { 0x1E83, { 0x0077, 0x0301 } }, { 0x1E84, { 0x0057, 0x0308 } }, { 0x1E85, { 0x0077, 0x0308 } }, { 0x1E86, { 0x0057, 0x0307 } }, { 0x1E87, { 0x0077, 0x0307 } }, { 0x1E88, { 0x0057, 0x0323 } }, { 0x1E89, { 0x0077, 0x0323 } }, { 0x1E8A, { 0x0058, 0x0307 } }, { 0x1E8B, { 0x0078, 0x0307 } }, { 0x1E8C, { 0x0058, 0x0308 } }, { 0x1E8D, { 0x0078, 0x0308 } }, { 0x1E8E, { 0x0059, 0x0307 } }, { 0x1E8F, { 0x0079, 0x0307 } }, { 0x1E90, { 0x005A, 0x0302 } }, { 0x1E91, { 0x007A, 0x0302 } }, { 0x1E92, { 0x005A, 0x0323 } }, { 0x1E93, { 0x007A, 0x0323 } }, { 0x1E94, { 0x005A, 0x0331 } }, { 0x1E95, { 0x007A, 0x0331 } }, { 0x1E96, { 0x0068, 0x0331 } }, { 0x1E97, { 0x0074, 0x0308 } }, { 0x1E98, { 0x0077, 0x030A } }, { 0x1E99, { 0x0079, 0x030A } }, { 0x1E9B, { 0x017F, 0x0307 } }, { 0x1EA0, { 0x0041, 0x0323 } }, { 0x1EA1, { 0x0061, 0x0323 } }, { 0x1EA2, { 0x0041, 0x0309 } }, { 0x1EA3, { 0x0061, 0x0309 } }, { 0x1EA4, { 0x00C2, 0x0301 } }, { 0x1EA5, { 0x00E2, 0x0301 } }, { 0x1EA6, { 0x00C2, 0x0300 } }, { 0x1EA7, { 0x00E2, 0x0300 } }, { 0x1EA8, { 0x00C2, 0x0309 } }, { 0x1EA9, { 0x00E2, 0x0309 } }, { 0x1EAA, { 0x00C2, 0x0303 } }, { 0x1EAB, { 0x00E2, 0x0303 } }, { 0x1EAC, { 0x1EA0, 0x0302 } }, { 0x1EAD, { 0x1EA1, 0x0302 } }, { 0x1EAE, { 0x0102, 0x0301 } }, { 0x1EAF, { 0x0103, 0x0301 } }, { 0x1EB0, { 0x0102, 0x0300 } }, { 0x1EB1, { 0x0103, 0x0300 } }, { 0x1EB2, { 0x0102, 0x0309 } }, { 0x1EB3, { 0x0103, 0x0309 } }, { 0x1EB4, { 0x0102, 0x0303 } }, { 0x1EB5, { 0x0103, 0x0303 } }, { 0x1EB6, { 0x1EA0, 0x0306 } }, { 0x1EB7, { 0x1EA1, 0x0306 } }, { 0x1EB8, { 0x0045, 0x0323 } }, { 0x1EB9, { 0x0065, 0x0323 } }, { 0x1EBA, { 0x0045, 0x0309 } }, { 0x1EBB, { 0x0065, 0x0309 } }, { 0x1EBC, { 0x0045, 0x0303 } }, { 0x1EBD, { 0x0065, 0x0303 } }, { 0x1EBE, { 0x00CA, 0x0301 } }, { 0x1EBF, { 0x00EA, 0x0301 } }, { 0x1EC0, { 0x00CA, 0x0300 } }, { 0x1EC1, { 0x00EA, 0x0300 } }, { 0x1EC2, { 0x00CA, 0x0309 } }, { 0x1EC3, { 0x00EA, 0x0309 } }, { 0x1EC4, { 0x00CA, 0x0303 } }, { 0x1EC5, { 0x00EA, 0x0303 } }, { 0x1EC6, { 0x1EB8, 0x0302 } }, { 0x1EC7, { 0x1EB9, 0x0302 } }, { 0x1EC8, { 0x0049, 0x0309 } }, { 0x1EC9, { 0x0069, 0x0309 } }, { 0x1ECA, { 0x0049, 0x0323 } }, { 0x1ECB, { 0x0069, 0x0323 } }, { 0x1ECC, { 0x004F, 0x0323 } }, { 0x1ECD, { 0x006F, 0x0323 } }, { 0x1ECE, { 0x004F, 0x0309 } }, { 0x1ECF, { 0x006F, 0x0309 } }, { 0x1ED0, { 0x00D4, 0x0301 } }, { 0x1ED1, { 0x00F4, 0x0301 } }, { 0x1ED2, { 0x00D4, 0x0300 } }, { 0x1ED3, { 0x00F4, 0x0300 } }, { 0x1ED4, { 0x00D4, 0x0309 } }, { 0x1ED5, { 0x00F4, 0x0309 } }, { 0x1ED6, { 0x00D4, 0x0303 } }, { 0x1ED7, { 0x00F4, 0x0303 } }, { 0x1ED8, { 0x1ECC, 0x0302 } }, { 0x1ED9, { 0x1ECD, 0x0302 } }, { 0x1EDA, { 0x01A0, 0x0301 } }, { 0x1EDB, { 0x01A1, 0x0301 } }, { 0x1EDC, { 0x01A0, 0x0300 } }, { 0x1EDD, { 0x01A1, 0x0300 } }, { 0x1EDE, { 0x01A0, 0x0309 } }, { 0x1EDF, { 0x01A1, 0x0309 } }, { 0x1EE0, { 0x01A0, 0x0303 } }, { 0x1EE1, { 0x01A1, 0x0303 } }, { 0x1EE2, { 0x01A0, 0x0323 } }, { 0x1EE3, { 0x01A1, 0x0323 } }, { 0x1EE4, { 0x0055, 0x0323 } }, { 0x1EE5, { 0x0075, 0x0323 } }, { 0x1EE6, { 0x0055, 0x0309 } }, { 0x1EE7, { 0x0075, 0x0309 } }, { 0x1EE8, { 0x01AF, 0x0301 } }, { 0x1EE9, { 0x01B0, 0x0301 } }, { 0x1EEA, { 0x01AF, 0x0300 } }, { 0x1EEB, { 0x01B0, 0x0300 } }, { 0x1EEC, { 0x01AF, 0x0309 } }, { 0x1EED, { 0x01B0, 0x0309 } }, { 0x1EEE, { 0x01AF, 0x0303 } }, { 0x1EEF, { 0x01B0, 0x0303 } }, { 0x1EF0, { 0x01AF, 0x0323 } }, { 0x1EF1, { 0x01B0, 0x0323 } }, { 0x1EF2, { 0x0059, 0x0300 } }, { 0x1EF3, { 0x0079, 0x0300 } }, { 0x1EF4, { 0x0059, 0x0323 } }, { 0x1EF5, { 0x0079, 0x0323 } }, { 0x1EF6, { 0x0059, 0x0309 } }, { 0x1EF7, { 0x0079, 0x0309 } }, { 0x1EF8, { 0x0059, 0x0303 } }, { 0x1EF9, { 0x0079, 0x0303 } }, { 0x1F00, { 0x03B1, 0x0313 } }, { 0x1F01, { 0x03B1, 0x0314 } }, { 0x1F02, { 0x1F00, 0x0300 } }, { 0x1F03, { 0x1F01, 0x0300 } }, { 0x1F04, { 0x1F00, 0x0301 } }, { 0x1F05, { 0x1F01, 0x0301 } }, { 0x1F06, { 0x1F00, 0x0342 } }, { 0x1F07, { 0x1F01, 0x0342 } }, { 0x1F08, { 0x0391, 0x0313 } }, { 0x1F09, { 0x0391, 0x0314 } }, { 0x1F0A, { 0x1F08, 0x0300 } }, { 0x1F0B, { 0x1F09, 0x0300 } }, { 0x1F0C, { 0x1F08, 0x0301 } }, { 0x1F0D, { 0x1F09, 0x0301 } }, { 0x1F0E, { 0x1F08, 0x0342 } }, { 0x1F0F, { 0x1F09, 0x0342 } }, { 0x1F10, { 0x03B5, 0x0313 } }, { 0x1F11, { 0x03B5, 0x0314 } }, { 0x1F12, { 0x1F10, 0x0300 } }, { 0x1F13, { 0x1F11, 0x0300 } }, { 0x1F14, { 0x1F10, 0x0301 } }, { 0x1F15, { 0x1F11, 0x0301 } }, { 0x1F18, { 0x0395, 0x0313 } }, { 0x1F19, { 0x0395, 0x0314 } }, { 0x1F1A, { 0x1F18, 0x0300 } }, { 0x1F1B, { 0x1F19, 0x0300 } }, { 0x1F1C, { 0x1F18, 0x0301 } }, { 0x1F1D, { 0x1F19, 0x0301 } }, { 0x1F20, { 0x03B7, 0x0313 } }, { 0x1F21, { 0x03B7, 0x0314 } }, { 0x1F22, { 0x1F20, 0x0300 } }, { 0x1F23, { 0x1F21, 0x0300 } }, { 0x1F24, { 0x1F20, 0x0301 } }, { 0x1F25, { 0x1F21, 0x0301 } }, { 0x1F26, { 0x1F20, 0x0342 } }, { 0x1F27, { 0x1F21, 0x0342 } }, { 0x1F28, { 0x0397, 0x0313 } }, { 0x1F29, { 0x0397, 0x0314 } }, { 0x1F2A, { 0x1F28, 0x0300 } }, { 0x1F2B, { 0x1F29, 0x0300 } }, { 0x1F2C, { 0x1F28, 0x0301 } }, { 0x1F2D, { 0x1F29, 0x0301 } }, { 0x1F2E, { 0x1F28, 0x0342 } }, { 0x1F2F, { 0x1F29, 0x0342 } }, { 0x1F30, { 0x03B9, 0x0313 } }, { 0x1F31, { 0x03B9, 0x0314 } }, { 0x1F32, { 0x1F30, 0x0300 } }, { 0x1F33, { 0x1F31, 0x0300 } }, { 0x1F34, { 0x1F30, 0x0301 } }, { 0x1F35, { 0x1F31, 0x0301 } }, { 0x1F36, { 0x1F30, 0x0342 } }, { 0x1F37, { 0x1F31, 0x0342 } }, { 0x1F38, { 0x0399, 0x0313 } }, { 0x1F39, { 0x0399, 0x0314 } }, { 0x1F3A, { 0x1F38, 0x0300 } }, { 0x1F3B, { 0x1F39, 0x0300 } }, { 0x1F3C, { 0x1F38, 0x0301 } }, { 0x1F3D, { 0x1F39, 0x0301 } }, { 0x1F3E, { 0x1F38, 0x0342 } }, { 0x1F3F, { 0x1F39, 0x0342 } }, { 0x1F40, { 0x03BF, 0x0313 } }, { 0x1F41, { 0x03BF, 0x0314 } }, { 0x1F42, { 0x1F40, 0x0300 } }, { 0x1F43, { 0x1F41, 0x0300 } }, { 0x1F44, { 0x1F40, 0x0301 } }, { 0x1F45, { 0x1F41, 0x0301 } }, { 0x1F48, { 0x039F, 0x0313 } }, { 0x1F49, { 0x039F, 0x0314 } }, { 0x1F4A, { 0x1F48, 0x0300 } }, { 0x1F4B, { 0x1F49, 0x0300 } }, { 0x1F4C, { 0x1F48, 0x0301 } }, { 0x1F4D, { 0x1F49, 0x0301 } }, { 0x1F50, { 0x03C5, 0x0313 } }, { 0x1F51, { 0x03C5, 0x0314 } }, { 0x1F52, { 0x1F50, 0x0300 } }, { 0x1F53, { 0x1F51, 0x0300 } }, { 0x1F54, { 0x1F50, 0x0301 } }, { 0x1F55, { 0x1F51, 0x0301 } }, { 0x1F56, { 0x1F50, 0x0342 } }, { 0x1F57, { 0x1F51, 0x0342 } }, { 0x1F59, { 0x03A5, 0x0314 } }, { 0x1F5B, { 0x1F59, 0x0300 } }, { 0x1F5D, { 0x1F59, 0x0301 } }, { 0x1F5F, { 0x1F59, 0x0342 } }, { 0x1F60, { 0x03C9, 0x0313 } }, { 0x1F61, { 0x03C9, 0x0314 } }, { 0x1F62, { 0x1F60, 0x0300 } }, { 0x1F63, { 0x1F61, 0x0300 } }, { 0x1F64, { 0x1F60, 0x0301 } }, { 0x1F65, { 0x1F61, 0x0301 } }, { 0x1F66, { 0x1F60, 0x0342 } }, { 0x1F67, { 0x1F61, 0x0342 } }, { 0x1F68, { 0x03A9, 0x0313 } }, { 0x1F69, { 0x03A9, 0x0314 } }, { 0x1F6A, { 0x1F68, 0x0300 } }, { 0x1F6B, { 0x1F69, 0x0300 } }, { 0x1F6C, { 0x1F68, 0x0301 } }, { 0x1F6D, { 0x1F69, 0x0301 } }, { 0x1F6E, { 0x1F68, 0x0342 } }, { 0x1F6F, { 0x1F69, 0x0342 } }, { 0x1F70, { 0x03B1, 0x0300 } }, { 0x1F71, { 0x03AC, 0 } }, { 0x1F72, { 0x03B5, 0x0300 } }, { 0x1F73, { 0x03AD, 0 } }, { 0x1F74, { 0x03B7, 0x0300 } }, { 0x1F75, { 0x03AE, 0 } }, { 0x1F76, { 0x03B9, 0x0300 } }, { 0x1F77, { 0x03AF, 0 } }, { 0x1F78, { 0x03BF, 0x0300 } }, { 0x1F79, { 0x03CC, 0 } }, { 0x1F7A, { 0x03C5, 0x0300 } }, { 0x1F7B, { 0x03CD, 0 } }, { 0x1F7C, { 0x03C9, 0x0300 } }, { 0x1F7D, { 0x03CE, 0 } }, { 0x1F80, { 0x1F00, 0x0345 } }, { 0x1F81, { 0x1F01, 0x0345 } }, { 0x1F82, { 0x1F02, 0x0345 } }, { 0x1F83, { 0x1F03, 0x0345 } }, { 0x1F84, { 0x1F04, 0x0345 } }, { 0x1F85, { 0x1F05, 0x0345 } }, { 0x1F86, { 0x1F06, 0x0345 } }, { 0x1F87, { 0x1F07, 0x0345 } }, { 0x1F88, { 0x1F08, 0x0345 } }, { 0x1F89, { 0x1F09, 0x0345 } }, { 0x1F8A, { 0x1F0A, 0x0345 } }, { 0x1F8B, { 0x1F0B, 0x0345 } }, { 0x1F8C, { 0x1F0C, 0x0345 } }, { 0x1F8D, { 0x1F0D, 0x0345 } }, { 0x1F8E, { 0x1F0E, 0x0345 } }, { 0x1F8F, { 0x1F0F, 0x0345 } }, { 0x1F90, { 0x1F20, 0x0345 } }, { 0x1F91, { 0x1F21, 0x0345 } }, { 0x1F92, { 0x1F22, 0x0345 } }, { 0x1F93, { 0x1F23, 0x0345 } }, { 0x1F94, { 0x1F24, 0x0345 } }, { 0x1F95, { 0x1F25, 0x0345 } }, { 0x1F96, { 0x1F26, 0x0345 } }, { 0x1F97, { 0x1F27, 0x0345 } }, { 0x1F98, { 0x1F28, 0x0345 } }, { 0x1F99, { 0x1F29, 0x0345 } }, { 0x1F9A, { 0x1F2A, 0x0345 } }, { 0x1F9B, { 0x1F2B, 0x0345 } }, { 0x1F9C, { 0x1F2C, 0x0345 } }, { 0x1F9D, { 0x1F2D, 0x0345 } }, { 0x1F9E, { 0x1F2E, 0x0345 } }, { 0x1F9F, { 0x1F2F, 0x0345 } }, { 0x1FA0, { 0x1F60, 0x0345 } }, { 0x1FA1, { 0x1F61, 0x0345 } }, { 0x1FA2, { 0x1F62, 0x0345 } }, { 0x1FA3, { 0x1F63, 0x0345 } }, { 0x1FA4, { 0x1F64, 0x0345 } }, { 0x1FA5, { 0x1F65, 0x0345 } }, { 0x1FA6, { 0x1F66, 0x0345 } }, { 0x1FA7, { 0x1F67, 0x0345 } }, { 0x1FA8, { 0x1F68, 0x0345 } }, { 0x1FA9, { 0x1F69, 0x0345 } }, { 0x1FAA, { 0x1F6A, 0x0345 } }, { 0x1FAB, { 0x1F6B, 0x0345 } }, { 0x1FAC, { 0x1F6C, 0x0345 } }, { 0x1FAD, { 0x1F6D, 0x0345 } }, { 0x1FAE, { 0x1F6E, 0x0345 } }, { 0x1FAF, { 0x1F6F, 0x0345 } }, { 0x1FB0, { 0x03B1, 0x0306 } }, { 0x1FB1, { 0x03B1, 0x0304 } }, { 0x1FB2, { 0x1F70, 0x0345 } }, { 0x1FB3, { 0x03B1, 0x0345 } }, { 0x1FB4, { 0x03AC, 0x0345 } }, { 0x1FB6, { 0x03B1, 0x0342 } }, { 0x1FB7, { 0x1FB6, 0x0345 } }, { 0x1FB8, { 0x0391, 0x0306 } }, { 0x1FB9, { 0x0391, 0x0304 } }, { 0x1FBA, { 0x0391, 0x0300 } }, { 0x1FBB, { 0x0386, 0 } }, { 0x1FBC, { 0x0391, 0x0345 } }, { 0x1FBE, { 0x03B9, 0 } }, { 0x1FC1, { 0x00A8, 0x0342 } }, { 0x1FC2, { 0x1F74, 0x0345 } }, { 0x1FC3, { 0x03B7, 0x0345 } }, { 0x1FC4, { 0x03AE, 0x0345 } }, { 0x1FC6, { 0x03B7, 0x0342 } }, { 0x1FC7, { 0x1FC6, 0x0345 } }, { 0x1FC8, { 0x0395, 0x0300 } }, { 0x1FC9, { 0x0388, 0 } }, { 0x1FCA, { 0x0397, 0x0300 } }, { 0x1FCB, { 0x0389, 0 } }, { 0x1FCC, { 0x0397, 0x0345 } }, { 0x1FCD, { 0x1FBF, 0x0300 } }, { 0x1FCE, { 0x1FBF, 0x0301 } }, { 0x1FCF, { 0x1FBF, 0x0342 } }, { 0x1FD0, { 0x03B9, 0x0306 } }, { 0x1FD1, { 0x03B9, 0x0304 } }, { 0x1FD2, { 0x03CA, 0x0300 } }, { 0x1FD3, { 0x0390, 0 } }, { 0x1FD6, { 0x03B9, 0x0342 } }, { 0x1FD7, { 0x03CA, 0x0342 } }, { 0x1FD8, { 0x0399, 0x0306 } }, { 0x1FD9, { 0x0399, 0x0304 } }, { 0x1FDA, { 0x0399, 0x0300 } }, { 0x1FDB, { 0x038A, 0 } }, { 0x1FDD, { 0x1FFE, 0x0300 } }, { 0x1FDE, { 0x1FFE, 0x0301 } }, { 0x1FDF, { 0x1FFE, 0x0342 } }, { 0x1FE0, { 0x03C5, 0x0306 } }, { 0x1FE1, { 0x03C5, 0x0304 } }, { 0x1FE2, { 0x03CB, 0x0300 } }, { 0x1FE3, { 0x03B0, 0 } }, { 0x1FE4, { 0x03C1, 0x0313 } }, { 0x1FE5, { 0x03C1, 0x0314 } }, { 0x1FE6, { 0x03C5, 0x0342 } }, { 0x1FE7, { 0x03CB, 0x0342 } }, { 0x1FE8, { 0x03A5, 0x0306 } }, { 0x1FE9, { 0x03A5, 0x0304 } }, { 0x1FEA, { 0x03A5, 0x0300 } }, { 0x1FEB, { 0x038E, 0 } }, { 0x1FEC, { 0x03A1, 0x0314 } }, { 0x1FED, { 0x00A8, 0x0300 } }, { 0x1FEE, { 0x0385, 0 } }, { 0x1FEF, { 0x0060, 0 } }, { 0x1FF2, { 0x1F7C, 0x0345 } }, { 0x1FF3, { 0x03C9, 0x0345 } }, { 0x1FF4, { 0x03CE, 0x0345 } }, { 0x1FF6, { 0x03C9, 0x0342 } }, { 0x1FF7, { 0x1FF6, 0x0345 } }, { 0x1FF8, { 0x039F, 0x0300 } }, { 0x1FF9, { 0x038C, 0 } }, { 0x1FFA, { 0x03A9, 0x0300 } }, { 0x1FFB, { 0x038F, 0 } }, { 0x1FFC, { 0x03A9, 0x0345 } }, { 0x1FFD, { 0x00B4, 0 } }, { 0x2000, { 0x2002, 0 } }, { 0x2001, { 0x2003, 0 } }, { 0x2126, { 0x03A9, 0 } }, { 0x212A, { 0x004B, 0 } }, { 0x212B, { 0x00C5, 0 } }, { 0x219A, { 0x2190, 0x0338 } }, { 0x219B, { 0x2192, 0x0338 } }, { 0x21AE, { 0x2194, 0x0338 } }, { 0x21CD, { 0x21D0, 0x0338 } }, { 0x21CE, { 0x21D4, 0x0338 } }, { 0x21CF, { 0x21D2, 0x0338 } }, { 0x2204, { 0x2203, 0x0338 } }, { 0x2209, { 0x2208, 0x0338 } }, { 0x220C, { 0x220B, 0x0338 } }, { 0x2224, { 0x2223, 0x0338 } }, { 0x2226, { 0x2225, 0x0338 } }, { 0x2241, { 0x223C, 0x0338 } }, { 0x2244, { 0x2243, 0x0338 } }, { 0x2247, { 0x2245, 0x0338 } }, { 0x2249, { 0x2248, 0x0338 } }, { 0x2260, { 0x003D, 0x0338 } }, { 0x2262, { 0x2261, 0x0338 } }, { 0x226D, { 0x224D, 0x0338 } }, { 0x226E, { 0x003C, 0x0338 } }, { 0x226F, { 0x003E, 0x0338 } }, { 0x2270, { 0x2264, 0x0338 } }, { 0x2271, { 0x2265, 0x0338 } }, { 0x2274, { 0x2272, 0x0338 } }, { 0x2275, { 0x2273, 0x0338 } }, { 0x2278, { 0x2276, 0x0338 } }, { 0x2279, { 0x2277, 0x0338 } }, { 0x2280, { 0x227A, 0x0338 } }, { 0x2281, { 0x227B, 0x0338 } }, { 0x2284, { 0x2282, 0x0338 } }, { 0x2285, { 0x2283, 0x0338 } }, { 0x2288, { 0x2286, 0x0338 } }, { 0x2289, { 0x2287, 0x0338 } }, { 0x22AC, { 0x22A2, 0x0338 } }, { 0x22AD, { 0x22A8, 0x0338 } }, { 0x22AE, { 0x22A9, 0x0338 } }, { 0x22AF, { 0x22AB, 0x0338 } }, { 0x22E0, { 0x227C, 0x0338 } }, { 0x22E1, { 0x227D, 0x0338 } }, { 0x22E2, { 0x2291, 0x0338 } }, { 0x22E3, { 0x2292, 0x0338 } }, { 0x22EA, { 0x22B2, 0x0338 } }, { 0x22EB, { 0x22B3, 0x0338 } }, { 0x22EC, { 0x22B4, 0x0338 } }, { 0x22ED, { 0x22B5, 0x0338 } }, { 0x2329, { 0x3008, 0 } }, { 0x232A, { 0x3009, 0 } }, { 0x2ADC, { 0x2ADD, 0x0338 } }, { 0x304C, { 0x304B, 0x3099 } }, { 0x304E, { 0x304D, 0x3099 } }, { 0x3050, { 0x304F, 0x3099 } }, { 0x3052, { 0x3051, 0x3099 } }, { 0x3054, { 0x3053, 0x3099 } }, { 0x3056, { 0x3055, 0x3099 } }, { 0x3058, { 0x3057, 0x3099 } }, { 0x305A, { 0x3059, 0x3099 } }, { 0x305C, { 0x305B, 0x3099 } }, { 0x305E, { 0x305D, 0x3099 } }, { 0x3060, { 0x305F, 0x3099 } }, { 0x3062, { 0x3061, 0x3099 } }, { 0x3065, { 0x3064, 0x3099 } }, { 0x3067, { 0x3066, 0x3099 } }, { 0x3069, { 0x3068, 0x3099 } }, { 0x3070, { 0x306F, 0x3099 } }, { 0x3071, { 0x306F, 0x309A } }, { 0x3073, { 0x3072, 0x3099 } }, { 0x3074, { 0x3072, 0x309A } }, { 0x3076, { 0x3075, 0x3099 } }, { 0x3077, { 0x3075, 0x309A } }, { 0x3079, { 0x3078, 0x3099 } }, { 0x307A, { 0x3078, 0x309A } }, { 0x307C, { 0x307B, 0x3099 } }, { 0x307D, { 0x307B, 0x309A } }, { 0x3094, { 0x3046, 0x3099 } }, { 0x309E, { 0x309D, 0x3099 } }, { 0x30AC, { 0x30AB, 0x3099 } }, { 0x30AE, { 0x30AD, 0x3099 } }, { 0x30B0, { 0x30AF, 0x3099 } }, { 0x30B2, { 0x30B1, 0x3099 } }, { 0x30B4, { 0x30B3, 0x3099 } }, { 0x30B6, { 0x30B5, 0x3099 } }, { 0x30B8, { 0x30B7, 0x3099 } }, { 0x30BA, { 0x30B9, 0x3099 } }, { 0x30BC, { 0x30BB, 0x3099 } }, { 0x30BE, { 0x30BD, 0x3099 } }, { 0x30C0, { 0x30BF, 0x3099 } }, { 0x30C2, { 0x30C1, 0x3099 } }, { 0x30C5, { 0x30C4, 0x3099 } }, { 0x30C7, { 0x30C6, 0x3099 } }, { 0x30C9, { 0x30C8, 0x3099 } }, { 0x30D0, { 0x30CF, 0x3099 } }, { 0x30D1, { 0x30CF, 0x309A } }, { 0x30D3, { 0x30D2, 0x3099 } }, { 0x30D4, { 0x30D2, 0x309A } }, { 0x30D6, { 0x30D5, 0x3099 } }, { 0x30D7, { 0x30D5, 0x309A } }, { 0x30D9, { 0x30D8, 0x3099 } }, { 0x30DA, { 0x30D8, 0x309A } }, { 0x30DC, { 0x30DB, 0x3099 } }, { 0x30DD, { 0x30DB, 0x309A } }, { 0x30F4, { 0x30A6, 0x3099 } }, { 0x30F7, { 0x30EF, 0x3099 } }, { 0x30F8, { 0x30F0, 0x3099 } }, { 0x30F9, { 0x30F1, 0x3099 } }, { 0x30FA, { 0x30F2, 0x3099 } }, { 0x30FE, { 0x30FD, 0x3099 } }, { 0xF900, { 0x8C48, 0 } }, { 0xF901, { 0x66F4, 0 } }, { 0xF902, { 0x8ECA, 0 } }, { 0xF903, { 0x8CC8, 0 } }, { 0xF904, { 0x6ED1, 0 } }, { 0xF905, { 0x4E32, 0 } }, { 0xF906, { 0x53E5, 0 } }, { 0xF907, { 0x9F9C, 0 } }, { 0xF908, { 0x9F9C, 0 } }, { 0xF909, { 0x5951, 0 } }, { 0xF90A, { 0x91D1, 0 } }, { 0xF90B, { 0x5587, 0 } }, { 0xF90C, { 0x5948, 0 } }, { 0xF90D, { 0x61F6, 0 } }, { 0xF90E, { 0x7669, 0 } }, { 0xF90F, { 0x7F85, 0 } }, { 0xF910, { 0x863F, 0 } }, { 0xF911, { 0x87BA, 0 } }, { 0xF912, { 0x88F8, 0 } }, { 0xF913, { 0x908F, 0 } }, { 0xF914, { 0x6A02, 0 } }, { 0xF915, { 0x6D1B, 0 } }, { 0xF916, { 0x70D9, 0 } }, { 0xF917, { 0x73DE, 0 } }, { 0xF918, { 0x843D, 0 } }, { 0xF919, { 0x916A, 0 } }, { 0xF91A, { 0x99F1, 0 } }, { 0xF91B, { 0x4E82, 0 } }, { 0xF91C, { 0x5375, 0 } }, { 0xF91D, { 0x6B04, 0 } }, { 0xF91E, { 0x721B, 0 } }, { 0xF91F, { 0x862D, 0 } }, { 0xF920, { 0x9E1E, 0 } }, { 0xF921, { 0x5D50, 0 } }, { 0xF922, { 0x6FEB, 0 } }, { 0xF923, { 0x85CD, 0 } }, { 0xF924, { 0x8964, 0 } }, { 0xF925, { 0x62C9, 0 } }, { 0xF926, { 0x81D8, 0 } }, { 0xF927, { 0x881F, 0 } }, { 0xF928, { 0x5ECA, 0 } }, { 0xF929, { 0x6717, 0 } }, { 0xF92A, { 0x6D6A, 0 } }, { 0xF92B, { 0x72FC, 0 } }, { 0xF92C, { 0x90CE, 0 } }, { 0xF92D, { 0x4F86, 0 } }, { 0xF92E, { 0x51B7, 0 } }, { 0xF92F, { 0x52DE, 0 } }, { 0xF930, { 0x64C4, 0 } }, { 0xF931, { 0x6AD3, 0 } }, { 0xF932, { 0x7210, 0 } }, { 0xF933, { 0x76E7, 0 } }, { 0xF934, { 0x8001, 0 } }, { 0xF935, { 0x8606, 0 } }, { 0xF936, { 0x865C, 0 } }, { 0xF937, { 0x8DEF, 0 } }, { 0xF938, { 0x9732, 0 } }, { 0xF939, { 0x9B6F, 0 } }, { 0xF93A, { 0x9DFA, 0 } }, { 0xF93B, { 0x788C, 0 } }, { 0xF93C, { 0x797F, 0 } }, { 0xF93D, { 0x7DA0, 0 } }, { 0xF93E, { 0x83C9, 0 } }, { 0xF93F, { 0x9304, 0 } }, { 0xF940, { 0x9E7F, 0 } }, { 0xF941, { 0x8AD6, 0 } }, { 0xF942, { 0x58DF, 0 } }, { 0xF943, { 0x5F04, 0 } }, { 0xF944, { 0x7C60, 0 } }, { 0xF945, { 0x807E, 0 } }, { 0xF946, { 0x7262, 0 } }, { 0xF947, { 0x78CA, 0 } }, { 0xF948, { 0x8CC2, 0 } }, { 0xF949, { 0x96F7, 0 } }, { 0xF94A, { 0x58D8, 0 } }, { 0xF94B, { 0x5C62, 0 } }, { 0xF94C, { 0x6A13, 0 } }, { 0xF94D, { 0x6DDA, 0 } }, { 0xF94E, { 0x6F0F, 0 } }, { 0xF94F, { 0x7D2F, 0 } }, { 0xF950, { 0x7E37, 0 } }, { 0xF951, { 0x964B, 0 } }, { 0xF952, { 0x52D2, 0 } }, { 0xF953, { 0x808B, 0 } }, { 0xF954, { 0x51DC, 0 } }, { 0xF955, { 0x51CC, 0 } }, { 0xF956, { 0x7A1C, 0 } }, { 0xF957, { 0x7DBE, 0 } }, { 0xF958, { 0x83F1, 0 } }, { 0xF959, { 0x9675, 0 } }, { 0xF95A, { 0x8B80, 0 } }, { 0xF95B, { 0x62CF, 0 } }, { 0xF95C, { 0x6A02, 0 } }, { 0xF95D, { 0x8AFE, 0 } }, { 0xF95E, { 0x4E39, 0 } }, { 0xF95F, { 0x5BE7, 0 } }, { 0xF960, { 0x6012, 0 } }, { 0xF961, { 0x7387, 0 } }, { 0xF962, { 0x7570, 0 } }, { 0xF963, { 0x5317, 0 } }, { 0xF964, { 0x78FB, 0 } }, { 0xF965, { 0x4FBF, 0 } }, { 0xF966, { 0x5FA9, 0 } }, { 0xF967, { 0x4E0D, 0 } }, { 0xF968, { 0x6CCC, 0 } }, { 0xF969, { 0x6578, 0 } }, { 0xF96A, { 0x7D22, 0 } }, { 0xF96B, { 0x53C3, 0 } }, { 0xF96C, { 0x585E, 0 } }, { 0xF96D, { 0x7701, 0 } }, { 0xF96E, { 0x8449, 0 } }, { 0xF96F, { 0x8AAA, 0 } }, { 0xF970, { 0x6BBA, 0 } }, { 0xF971, { 0x8FB0, 0 } }, { 0xF972, { 0x6C88, 0 } }, { 0xF973, { 0x62FE, 0 } }, { 0xF974, { 0x82E5, 0 } }, { 0xF975, { 0x63A0, 0 } }, { 0xF976, { 0x7565, 0 } }, { 0xF977, { 0x4EAE, 0 } }, { 0xF978, { 0x5169, 0 } }, { 0xF979, { 0x51C9, 0 } }, { 0xF97A, { 0x6881, 0 } }, { 0xF97B, { 0x7CE7, 0 } }, { 0xF97C, { 0x826F, 0 } }, { 0xF97D, { 0x8AD2, 0 } }, { 0xF97E, { 0x91CF, 0 } }, { 0xF97F, { 0x52F5, 0 } }, { 0xF980, { 0x5442, 0 } }, { 0xF981, { 0x5973, 0 } }, { 0xF982, { 0x5EEC, 0 } }, { 0xF983, { 0x65C5, 0 } }, { 0xF984, { 0x6FFE, 0 } }, { 0xF985, { 0x792A, 0 } }, { 0xF986, { 0x95AD, 0 } }, { 0xF987, { 0x9A6A, 0 } }, { 0xF988, { 0x9E97, 0 } }, { 0xF989, { 0x9ECE, 0 } }, { 0xF98A, { 0x529B, 0 } }, { 0xF98B, { 0x66C6, 0 } }, { 0xF98C, { 0x6B77, 0 } }, { 0xF98D, { 0x8F62, 0 } }, { 0xF98E, { 0x5E74, 0 } }, { 0xF98F, { 0x6190, 0 } }, { 0xF990, { 0x6200, 0 } }, { 0xF991, { 0x649A, 0 } }, { 0xF992, { 0x6F23, 0 } }, { 0xF993, { 0x7149, 0 } }, { 0xF994, { 0x7489, 0 } }, { 0xF995, { 0x79CA, 0 } }, { 0xF996, { 0x7DF4, 0 } }, { 0xF997, { 0x806F, 0 } }, { 0xF998, { 0x8F26, 0 } }, { 0xF999, { 0x84EE, 0 } }, { 0xF99A, { 0x9023, 0 } }, { 0xF99B, { 0x934A, 0 } }, { 0xF99C, { 0x5217, 0 } }, { 0xF99D, { 0x52A3, 0 } }, { 0xF99E, { 0x54BD, 0 } }, { 0xF99F, { 0x70C8, 0 } }, { 0xF9A0, { 0x88C2, 0 } }, { 0xF9A1, { 0x8AAA, 0 } }, { 0xF9A2, { 0x5EC9, 0 } }, { 0xF9A3, { 0x5FF5, 0 } }, { 0xF9A4, { 0x637B, 0 } }, { 0xF9A5, { 0x6BAE, 0 } }, { 0xF9A6, { 0x7C3E, 0 } }, { 0xF9A7, { 0x7375, 0 } }, { 0xF9A8, { 0x4EE4, 0 } }, { 0xF9A9, { 0x56F9, 0 } }, { 0xF9AA, { 0x5BE7, 0 } }, { 0xF9AB, { 0x5DBA, 0 } }, { 0xF9AC, { 0x601C, 0 } }, { 0xF9AD, { 0x73B2, 0 } }, { 0xF9AE, { 0x7469, 0 } }, { 0xF9AF, { 0x7F9A, 0 } }, { 0xF9B0, { 0x8046, 0 } }, { 0xF9B1, { 0x9234, 0 } }, { 0xF9B2, { 0x96F6, 0 } }, { 0xF9B3, { 0x9748, 0 } }, { 0xF9B4, { 0x9818, 0 } }, { 0xF9B5, { 0x4F8B, 0 } }, { 0xF9B6, { 0x79AE, 0 } }, { 0xF9B7, { 0x91B4, 0 } }, { 0xF9B8, { 0x96B8, 0 } }, { 0xF9B9, { 0x60E1, 0 } }, { 0xF9BA, { 0x4E86, 0 } }, { 0xF9BB, { 0x50DA, 0 } }, { 0xF9BC, { 0x5BEE, 0 } }, { 0xF9BD, { 0x5C3F, 0 } }, { 0xF9BE, { 0x6599, 0 } }, { 0xF9BF, { 0x6A02, 0 } }, { 0xF9C0, { 0x71CE, 0 } }, { 0xF9C1, { 0x7642, 0 } }, { 0xF9C2, { 0x84FC, 0 } }, { 0xF9C3, { 0x907C, 0 } }, { 0xF9C4, { 0x9F8D, 0 } }, { 0xF9C5, { 0x6688, 0 } }, { 0xF9C6, { 0x962E, 0 } }, { 0xF9C7, { 0x5289, 0 } }, { 0xF9C8, { 0x677B, 0 } }, { 0xF9C9, { 0x67F3, 0 } }, { 0xF9CA, { 0x6D41, 0 } }, { 0xF9CB, { 0x6E9C, 0 } }, { 0xF9CC, { 0x7409, 0 } }, { 0xF9CD, { 0x7559, 0 } }, { 0xF9CE, { 0x786B, 0 } }, { 0xF9CF, { 0x7D10, 0 } }, { 0xF9D0, { 0x985E, 0 } }, { 0xF9D1, { 0x516D, 0 } }, { 0xF9D2, { 0x622E, 0 } }, { 0xF9D3, { 0x9678, 0 } }, { 0xF9D4, { 0x502B, 0 } }, { 0xF9D5, { 0x5D19, 0 } }, { 0xF9D6, { 0x6DEA, 0 } }, { 0xF9D7, { 0x8F2A, 0 } }, { 0xF9D8, { 0x5F8B, 0 } }, { 0xF9D9, { 0x6144, 0 } }, { 0xF9DA, { 0x6817, 0 } }, { 0xF9DB, { 0x7387, 0 } }, { 0xF9DC, { 0x9686, 0 } }, { 0xF9DD, { 0x5229, 0 } }, { 0xF9DE, { 0x540F, 0 } }, { 0xF9DF, { 0x5C65, 0 } }, { 0xF9E0, { 0x6613, 0 } }, { 0xF9E1, { 0x674E, 0 } }, { 0xF9E2, { 0x68A8, 0 } }, { 0xF9E3, { 0x6CE5, 0 } }, { 0xF9E4, { 0x7406, 0 } }, { 0xF9E5, { 0x75E2, 0 } }, { 0xF9E6, { 0x7F79, 0 } }, { 0xF9E7, { 0x88CF, 0 } }, { 0xF9E8, { 0x88E1, 0 } }, { 0xF9E9, { 0x91CC, 0 } }, { 0xF9EA, { 0x96E2, 0 } }, { 0xF9EB, { 0x533F, 0 } }, { 0xF9EC, { 0x6EBA, 0 } }, { 0xF9ED, { 0x541D, 0 } }, { 0xF9EE, { 0x71D0, 0 } }, { 0xF9EF, { 0x7498, 0 } }, { 0xF9F0, { 0x85FA, 0 } }, { 0xF9F1, { 0x96A3, 0 } }, { 0xF9F2, { 0x9C57, 0 } }, { 0xF9F3, { 0x9E9F, 0 } }, { 0xF9F4, { 0x6797, 0 } }, { 0xF9F5, { 0x6DCB, 0 } }, { 0xF9F6, { 0x81E8, 0 } }, { 0xF9F7, { 0x7ACB, 0 } }, { 0xF9F8, { 0x7B20, 0 } }, { 0xF9F9, { 0x7C92, 0 } }, { 0xF9FA, { 0x72C0, 0 } }, { 0xF9FB, { 0x7099, 0 } }, { 0xF9FC, { 0x8B58, 0 } }, { 0xF9FD, { 0x4EC0, 0 } }, { 0xF9FE, { 0x8336, 0 } }, { 0xF9FF, { 0x523A, 0 } }, { 0xFA00, { 0x5207, 0 } }, { 0xFA01, { 0x5EA6, 0 } }, { 0xFA02, { 0x62D3, 0 } }, { 0xFA03, { 0x7CD6, 0 } }, { 0xFA04, { 0x5B85, 0 } }, { 0xFA05, { 0x6D1E, 0 } }, { 0xFA06, { 0x66B4, 0 } }, { 0xFA07, { 0x8F3B, 0 } }, { 0xFA08, { 0x884C, 0 } }, { 0xFA09, { 0x964D, 0 } }, { 0xFA0A, { 0x898B, 0 } }, { 0xFA0B, { 0x5ED3, 0 } }, { 0xFA0C, { 0x5140, 0 } }, { 0xFA0D, { 0x55C0, 0 } }, { 0xFA10, { 0x585A, 0 } }, { 0xFA12, { 0x6674, 0 } }, { 0xFA15, { 0x51DE, 0 } }, { 0xFA16, { 0x732A, 0 } }, { 0xFA17, { 0x76CA, 0 } }, { 0xFA18, { 0x793C, 0 } }, { 0xFA19, { 0x795E, 0 } }, { 0xFA1A, { 0x7965, 0 } }, { 0xFA1B, { 0x798F, 0 } }, { 0xFA1C, { 0x9756, 0 } }, { 0xFA1D, { 0x7CBE, 0 } }, { 0xFA1E, { 0x7FBD, 0 } }, { 0xFA20, { 0x8612, 0 } }, { 0xFA22, { 0x8AF8, 0 } }, { 0xFA25, { 0x9038, 0 } }, { 0xFA26, { 0x90FD, 0 } }, { 0xFA2A, { 0x98EF, 0 } }, { 0xFA2B, { 0x98FC, 0 } }, { 0xFA2C, { 0x9928, 0 } }, { 0xFA2D, { 0x9DB4, 0 } }, { 0xFA2E, { 0x90DE, 0 } }, { 0xFA2F, { 0x96B7, 0 } }, { 0xFA30, { 0x4FAE, 0 } }, { 0xFA31, { 0x50E7, 0 } }, { 0xFA32, { 0x514D, 0 } }, { 0xFA33, { 0x52C9, 0 } }, { 0xFA34, { 0x52E4, 0 } }, { 0xFA35, { 0x5351, 0 } }, { 0xFA36, { 0x559D, 0 } }, { 0xFA37, { 0x5606, 0 } }, { 0xFA38, { 0x5668, 0 } }, { 0xFA39, { 0x5840, 0 } }, { 0xFA3A, { 0x58A8, 0 } }, { 0xFA3B, { 0x5C64, 0 } }, { 0xFA3C, { 0x5C6E, 0 } }, { 0xFA3D, { 0x6094, 0 } }, { 0xFA3E, { 0x6168, 0 } }, { 0xFA3F, { 0x618E, 0 } }, { 0xFA40, { 0x61F2, 0 } }, { 0xFA41, { 0x654F, 0 } }, { 0xFA42, { 0x65E2, 0 } }, { 0xFA43, { 0x6691, 0 } }, { 0xFA44, { 0x6885, 0 } }, { 0xFA45, { 0x6D77, 0 } }, { 0xFA46, { 0x6E1A, 0 } }, { 0xFA47, { 0x6F22, 0 } }, { 0xFA48, { 0x716E, 0 } }, { 0xFA49, { 0x722B, 0 } }, { 0xFA4A, { 0x7422, 0 } }, { 0xFA4B, { 0x7891, 0 } }, { 0xFA4C, { 0x793E, 0 } }, { 0xFA4D, { 0x7949, 0 } }, { 0xFA4E, { 0x7948, 0 } }, { 0xFA4F, { 0x7950, 0 } }, { 0xFA50, { 0x7956, 0 } }, { 0xFA51, { 0x795D, 0 } }, { 0xFA52, { 0x798D, 0 } }, { 0xFA53, { 0x798E, 0 } }, { 0xFA54, { 0x7A40, 0 } }, { 0xFA55, { 0x7A81, 0 } }, { 0xFA56, { 0x7BC0, 0 } }, { 0xFA57, { 0x7DF4, 0 } }, { 0xFA58, { 0x7E09, 0 } }, { 0xFA59, { 0x7E41, 0 } }, { 0xFA5A, { 0x7F72, 0 } }, { 0xFA5B, { 0x8005, 0 } }, { 0xFA5C, { 0x81ED, 0 } }, { 0xFA5D, { 0x8279, 0 } }, { 0xFA5E, { 0x8279, 0 } }, { 0xFA5F, { 0x8457, 0 } }, { 0xFA60, { 0x8910, 0 } }, { 0xFA61, { 0x8996, 0 } }, { 0xFA62, { 0x8B01, 0 } }, { 0xFA63, { 0x8B39, 0 } }, { 0xFA64, { 0x8CD3, 0 } }, { 0xFA65, { 0x8D08, 0 } }, { 0xFA66, { 0x8FB6, 0 } }, { 0xFA67, { 0x9038, 0 } }, { 0xFA68, { 0x96E3, 0 } }, { 0xFA69, { 0x97FF, 0 } }, { 0xFA6A, { 0x983B, 0 } }, { 0xFA6B, { 0x6075, 0 } }, { 0xFA6C, { 0x242EE, 0 } }, { 0xFA6D, { 0x8218, 0 } }, { 0xFA70, { 0x4E26, 0 } }, { 0xFA71, { 0x51B5, 0 } }, { 0xFA72, { 0x5168, 0 } }, { 0xFA73, { 0x4F80, 0 } }, { 0xFA74, { 0x5145, 0 } }, { 0xFA75, { 0x5180, 0 } }, { 0xFA76, { 0x52C7, 0 } }, { 0xFA77, { 0x52FA, 0 } }, { 0xFA78, { 0x559D, 0 } }, { 0xFA79, { 0x5555, 0 } }, { 0xFA7A, { 0x5599, 0 } }, { 0xFA7B, { 0x55E2, 0 } }, { 0xFA7C, { 0x585A, 0 } }, { 0xFA7D, { 0x58B3, 0 } }, { 0xFA7E, { 0x5944, 0 } }, { 0xFA7F, { 0x5954, 0 } }, { 0xFA80, { 0x5A62, 0 } }, { 0xFA81, { 0x5B28, 0 } }, { 0xFA82, { 0x5ED2, 0 } }, { 0xFA83, { 0x5ED9, 0 } }, { 0xFA84, { 0x5F69, 0 } }, { 0xFA85, { 0x5FAD, 0 } }, { 0xFA86, { 0x60D8, 0 } }, { 0xFA87, { 0x614E, 0 } }, { 0xFA88, { 0x6108, 0 } }, { 0xFA89, { 0x618E, 0 } }, { 0xFA8A, { 0x6160, 0 } }, { 0xFA8B, { 0x61F2, 0 } }, { 0xFA8C, { 0x6234, 0 } }, { 0xFA8D, { 0x63C4, 0 } }, { 0xFA8E, { 0x641C, 0 } }, { 0xFA8F, { 0x6452, 0 } }, { 0xFA90, { 0x6556, 0 } }, { 0xFA91, { 0x6674, 0 } }, { 0xFA92, { 0x6717, 0 } }, { 0xFA93, { 0x671B, 0 } }, { 0xFA94, { 0x6756, 0 } }, { 0xFA95, { 0x6B79, 0 } }, { 0xFA96, { 0x6BBA, 0 } }, { 0xFA97, { 0x6D41, 0 } }, { 0xFA98, { 0x6EDB, 0 } }, { 0xFA99, { 0x6ECB, 0 } }, { 0xFA9A, { 0x6F22, 0 } }, { 0xFA9B, { 0x701E, 0 } }, { 0xFA9C, { 0x716E, 0 } }, { 0xFA9D, { 0x77A7, 0 } }, { 0xFA9E, { 0x7235, 0 } }, { 0xFA9F, { 0x72AF, 0 } }, { 0xFAA0, { 0x732A, 0 } }, { 0xFAA1, { 0x7471, 0 } }, { 0xFAA2, { 0x7506, 0 } }, { 0xFAA3, { 0x753B, 0 } }, { 0xFAA4, { 0x761D, 0 } }, { 0xFAA5, { 0x761F, 0 } }, { 0xFAA6, { 0x76CA, 0 } }, { 0xFAA7, { 0x76DB, 0 } }, { 0xFAA8, { 0x76F4, 0 } }, { 0xFAA9, { 0x774A, 0 } }, { 0xFAAA, { 0x7740, 0 } }, { 0xFAAB, { 0x78CC, 0 } }, { 0xFAAC, { 0x7AB1, 0 } }, { 0xFAAD, { 0x7BC0, 0 } }, { 0xFAAE, { 0x7C7B, 0 } }, { 0xFAAF, { 0x7D5B, 0 } }, { 0xFAB0, { 0x7DF4, 0 } }, { 0xFAB1, { 0x7F3E, 0 } }, { 0xFAB2, { 0x8005, 0 } }, { 0xFAB3, { 0x8352, 0 } }, { 0xFAB4, { 0x83EF, 0 } }, { 0xFAB5, { 0x8779, 0 } }, { 0xFAB6, { 0x8941, 0 } }, { 0xFAB7, { 0x8986, 0 } }, { 0xFAB8, { 0x8996, 0 } }, { 0xFAB9, { 0x8ABF, 0 } }, { 0xFABA, { 0x8AF8, 0 } }, { 0xFABB, { 0x8ACB, 0 } }, { 0xFABC, { 0x8B01, 0 } }, { 0xFABD, { 0x8AFE, 0 } }, { 0xFABE, { 0x8AED, 0 } }, { 0xFABF, { 0x8B39, 0 } }, { 0xFAC0, { 0x8B8A, 0 } }, { 0xFAC1, { 0x8D08, 0 } }, { 0xFAC2, { 0x8F38, 0 } }, { 0xFAC3, { 0x9072, 0 } }, { 0xFAC4, { 0x9199, 0 } }, { 0xFAC5, { 0x9276, 0 } }, { 0xFAC6, { 0x967C, 0 } }, { 0xFAC7, { 0x96E3, 0 } }, { 0xFAC8, { 0x9756, 0 } }, { 0xFAC9, { 0x97DB, 0 } }, { 0xFACA, { 0x97FF, 0 } }, { 0xFACB, { 0x980B, 0 } }, { 0xFACC, { 0x983B, 0 } }, { 0xFACD, { 0x9B12, 0 } }, { 0xFACE, { 0x9F9C, 0 } }, { 0xFACF, { 0x2284A, 0 } }, { 0xFAD0, { 0x22844, 0 } }, { 0xFAD1, { 0x233D5, 0 } }, { 0xFAD2, { 0x3B9D, 0 } }, { 0xFAD3, { 0x4018, 0 } }, { 0xFAD4, { 0x4039, 0 } }, { 0xFAD5, { 0x25249, 0 } }, { 0xFAD6, { 0x25CD0, 0 } }, { 0xFAD7, { 0x27ED3, 0 } }, { 0xFAD8, { 0x9F43, 0 } }, { 0xFAD9, { 0x9F8E, 0 } }, { 0xFB1D, { 0x05D9, 0x05B4 } }, { 0xFB1F, { 0x05F2, 0x05B7 } }, { 0xFB2A, { 0x05E9, 0x05C1 } }, { 0xFB2B, { 0x05E9, 0x05C2 } }, { 0xFB2C, { 0xFB49, 0x05C1 } }, { 0xFB2D, { 0xFB49, 0x05C2 } }, { 0xFB2E, { 0x05D0, 0x05B7 } }, { 0xFB2F, { 0x05D0, 0x05B8 } }, { 0xFB30, { 0x05D0, 0x05BC } }, { 0xFB31, { 0x05D1, 0x05BC } }, { 0xFB32, { 0x05D2, 0x05BC } }, { 0xFB33, { 0x05D3, 0x05BC } }, { 0xFB34, { 0x05D4, 0x05BC } }, { 0xFB35, { 0x05D5, 0x05BC } }, { 0xFB36, { 0x05D6, 0x05BC } }, { 0xFB38, { 0x05D8, 0x05BC } }, { 0xFB39, { 0x05D9, 0x05BC } }, { 0xFB3A, { 0x05DA, 0x05BC } }, { 0xFB3B, { 0x05DB, 0x05BC } }, { 0xFB3C, { 0x05DC, 0x05BC } }, { 0xFB3E, { 0x05DE, 0x05BC } }, { 0xFB40, { 0x05E0, 0x05BC } }, { 0xFB41, { 0x05E1, 0x05BC } }, { 0xFB43, { 0x05E3, 0x05BC } }, { 0xFB44, { 0x05E4, 0x05BC } }, { 0xFB46, { 0x05E6, 0x05BC } }, { 0xFB47, { 0x05E7, 0x05BC } }, { 0xFB48, { 0x05E8, 0x05BC } }, { 0xFB49, { 0x05E9, 0x05BC } }, { 0xFB4A, { 0x05EA, 0x05BC } }, { 0xFB4B, { 0x05D5, 0x05B9 } }, { 0xFB4C, { 0x05D1, 0x05BF } }, { 0xFB4D, { 0x05DB, 0x05BF } }, { 0xFB4E, { 0x05E4, 0x05BF } }, { 0x1109A, { 0x11099, 0x110BA } }, { 0x1109C, { 0x1109B, 0x110BA } }, { 0x110AB, { 0x110A5, 0x110BA } }, { 0x1112E, { 0x11131, 0x11127 } }, { 0x1112F, { 0x11132, 0x11127 } }, { 0x1134B, { 0x11347, 0x1133E } }, { 0x1134C, { 0x11347, 0x11357 } }, { 0x114BB, { 0x114B9, 0x114BA } }, { 0x114BC, { 0x114B9, 0x114B0 } }, { 0x114BE, { 0x114B9, 0x114BD } }, { 0x115BA, { 0x115B8, 0x115AF } }, { 0x115BB, { 0x115B9, 0x115AF } }, { 0x1D15E, { 0x1D157, 0x1D165 } }, { 0x1D15F, { 0x1D158, 0x1D165 } }, { 0x1D160, { 0x1D15F, 0x1D16E } }, { 0x1D161, { 0x1D15F, 0x1D16F } }, { 0x1D162, { 0x1D15F, 0x1D170 } }, { 0x1D163, { 0x1D15F, 0x1D171 } }, { 0x1D164, { 0x1D15F, 0x1D172 } }, { 0x1D1BB, { 0x1D1B9, 0x1D165 } }, { 0x1D1BC, { 0x1D1BA, 0x1D165 } }, { 0x1D1BD, { 0x1D1BB, 0x1D16E } }, { 0x1D1BE, { 0x1D1BC, 0x1D16E } }, { 0x1D1BF, { 0x1D1BB, 0x1D16F } }, { 0x1D1C0, { 0x1D1BC, 0x1D16F } }, { 0x2F800, { 0x4E3D, 0 } }, { 0x2F801, { 0x4E38, 0 } }, { 0x2F802, { 0x4E41, 0 } }, { 0x2F803, { 0x20122, 0 } }, { 0x2F804, { 0x4F60, 0 } }, { 0x2F805, { 0x4FAE, 0 } }, { 0x2F806, { 0x4FBB, 0 } }, { 0x2F807, { 0x5002, 0 } }, { 0x2F808, { 0x507A, 0 } }, { 0x2F809, { 0x5099, 0 } }, { 0x2F80A, { 0x50E7, 0 } }, { 0x2F80B, { 0x50CF, 0 } }, { 0x2F80C, { 0x349E, 0 } }, { 0x2F80D, { 0x2063A, 0 } }, { 0x2F80E, { 0x514D, 0 } }, { 0x2F80F, { 0x5154, 0 } }, { 0x2F810, { 0x5164, 0 } }, { 0x2F811, { 0x5177, 0 } }, { 0x2F812, { 0x2051C, 0 } }, { 0x2F813, { 0x34B9, 0 } }, { 0x2F814, { 0x5167, 0 } }, { 0x2F815, { 0x518D, 0 } }, { 0x2F816, { 0x2054B, 0 } }, { 0x2F817, { 0x5197, 0 } }, { 0x2F818, { 0x51A4, 0 } }, { 0x2F819, { 0x4ECC, 0 } }, { 0x2F81A, { 0x51AC, 0 } }, { 0x2F81B, { 0x51B5, 0 } }, { 0x2F81C, { 0x291DF, 0 } }, { 0x2F81D, { 0x51F5, 0 } }, { 0x2F81E, { 0x5203, 0 } }, { 0x2F81F, { 0x34DF, 0 } }, { 0x2F820, { 0x523B, 0 } }, { 0x2F821, { 0x5246, 0 } }, { 0x2F822, { 0x5272, 0 } }, { 0x2F823, { 0x5277, 0 } }, { 0x2F824, { 0x3515, 0 } }, { 0x2F825, { 0x52C7, 0 } }, { 0x2F826, { 0x52C9, 0 } }, { 0x2F827, { 0x52E4, 0 } }, { 0x2F828, { 0x52FA, 0 } }, { 0x2F829, { 0x5305, 0 } }, { 0x2F82A, { 0x5306, 0 } }, { 0x2F82B, { 0x5317, 0 } }, { 0x2F82C, { 0x5349, 0 } }, { 0x2F82D, { 0x5351, 0 } }, { 0x2F82E, { 0x535A, 0 } }, { 0x2F82F, { 0x5373, 0 } }, { 0x2F830, { 0x537D, 0 } }, { 0x2F831, { 0x537F, 0 } }, { 0x2F832, { 0x537F, 0 } }, { 0x2F833, { 0x537F, 0 } }, { 0x2F834, { 0x20A2C, 0 } }, { 0x2F835, { 0x7070, 0 } }, { 0x2F836, { 0x53CA, 0 } }, { 0x2F837, { 0x53DF, 0 } }, { 0x2F838, { 0x20B63, 0 } }, { 0x2F839, { 0x53EB, 0 } }, { 0x2F83A, { 0x53F1, 0 } }, { 0x2F83B, { 0x5406, 0 } }, { 0x2F83C, { 0x549E, 0 } }, { 0x2F83D, { 0x5438, 0 } }, { 0x2F83E, { 0x5448, 0 } }, { 0x2F83F, { 0x5468, 0 } }, { 0x2F840, { 0x54A2, 0 } }, { 0x2F841, { 0x54F6, 0 } }, { 0x2F842, { 0x5510, 0 } }, { 0x2F843, { 0x5553, 0 } }, { 0x2F844, { 0x5563, 0 } }, { 0x2F845, { 0x5584, 0 } }, { 0x2F846, { 0x5584, 0 } }, { 0x2F847, { 0x5599, 0 } }, { 0x2F848, { 0x55AB, 0 } }, { 0x2F849, { 0x55B3, 0 } }, { 0x2F84A, { 0x55C2, 0 } }, { 0x2F84B, { 0x5716, 0 } }, { 0x2F84C, { 0x5606, 0 } }, { 0x2F84D, { 0x5717, 0 } }, { 0x2F84E, { 0x5651, 0 } }, { 0x2F84F, { 0x5674, 0 } }, { 0x2F850, { 0x5207, 0 } }, { 0x2F851, { 0x58EE, 0 } }, { 0x2F852, { 0x57CE, 0 } }, { 0x2F853, { 0x57F4, 0 } }, { 0x2F854, { 0x580D, 0 } }, { 0x2F855, { 0x578B, 0 } }, { 0x2F856, { 0x5832, 0 } }, { 0x2F857, { 0x5831, 0 } }, { 0x2F858, { 0x58AC, 0 } }, { 0x2F859, { 0x214E4, 0 } }, { 0x2F85A, { 0x58F2, 0 } }, { 0x2F85B, { 0x58F7, 0 } }, { 0x2F85C, { 0x5906, 0 } }, { 0x2F85D, { 0x591A, 0 } }, { 0x2F85E, { 0x5922, 0 } }, { 0x2F85F, { 0x5962, 0 } }, { 0x2F860, { 0x216A8, 0 } }, { 0x2F861, { 0x216EA, 0 } }, { 0x2F862, { 0x59EC, 0 } }, { 0x2F863, { 0x5A1B, 0 } }, { 0x2F864, { 0x5A27, 0 } }, { 0x2F865, { 0x59D8, 0 } }, { 0x2F866, { 0x5A66, 0 } }, { 0x2F867, { 0x36EE, 0 } }, { 0x2F868, { 0x36FC, 0 } }, { 0x2F869, { 0x5B08, 0 } }, { 0x2F86A, { 0x5B3E, 0 } }, { 0x2F86B, { 0x5B3E, 0 } }, { 0x2F86C, { 0x219C8, 0 } }, { 0x2F86D, { 0x5BC3, 0 } }, { 0x2F86E, { 0x5BD8, 0 } }, { 0x2F86F, { 0x5BE7, 0 } }, { 0x2F870, { 0x5BF3, 0 } }, { 0x2F871, { 0x21B18, 0 } }, { 0x2F872, { 0x5BFF, 0 } }, { 0x2F873, { 0x5C06, 0 } }, { 0x2F874, { 0x5F53, 0 } }, { 0x2F875, { 0x5C22, 0 } }, { 0x2F876, { 0x3781, 0 } }, { 0x2F877, { 0x5C60, 0 } }, { 0x2F878, { 0x5C6E, 0 } }, { 0x2F879, { 0x5CC0, 0 } }, { 0x2F87A, { 0x5C8D, 0 } }, { 0x2F87B, { 0x21DE4, 0 } }, { 0x2F87C, { 0x5D43, 0 } }, { 0x2F87D, { 0x21DE6, 0 } }, { 0x2F87E, { 0x5D6E, 0 } }, { 0x2F87F, { 0x5D6B, 0 } }, { 0x2F880, { 0x5D7C, 0 } }, { 0x2F881, { 0x5DE1, 0 } }, { 0x2F882, { 0x5DE2, 0 } }, { 0x2F883, { 0x382F, 0 } }, { 0x2F884, { 0x5DFD, 0 } }, { 0x2F885, { 0x5E28, 0 } }, { 0x2F886, { 0x5E3D, 0 } }, { 0x2F887, { 0x5E69, 0 } }, { 0x2F888, { 0x3862, 0 } }, { 0x2F889, { 0x22183, 0 } }, { 0x2F88A, { 0x387C, 0 } }, { 0x2F88B, { 0x5EB0, 0 } }, { 0x2F88C, { 0x5EB3, 0 } }, { 0x2F88D, { 0x5EB6, 0 } }, { 0x2F88E, { 0x5ECA, 0 } }, { 0x2F88F, { 0x2A392, 0 } }, { 0x2F890, { 0x5EFE, 0 } }, { 0x2F891, { 0x22331, 0 } }, { 0x2F892, { 0x22331, 0 } }, { 0x2F893, { 0x8201, 0 } }, { 0x2F894, { 0x5F22, 0 } }, { 0x2F895, { 0x5F22, 0 } }, { 0x2F896, { 0x38C7, 0 } }, { 0x2F897, { 0x232B8, 0 } }, { 0x2F898, { 0x261DA, 0 } }, { 0x2F899, { 0x5F62, 0 } }, { 0x2F89A, { 0x5F6B, 0 } }, { 0x2F89B, { 0x38E3, 0 } }, { 0x2F89C, { 0x5F9A, 0 } }, { 0x2F89D, { 0x5FCD, 0 } }, { 0x2F89E, { 0x5FD7, 0 } }, { 0x2F89F, { 0x5FF9, 0 } }, { 0x2F8A0, { 0x6081, 0 } }, { 0x2F8A1, { 0x393A, 0 } }, { 0x2F8A2, { 0x391C, 0 } }, { 0x2F8A3, { 0x6094, 0 } }, { 0x2F8A4, { 0x226D4, 0 } }, { 0x2F8A5, { 0x60C7, 0 } }, { 0x2F8A6, { 0x6148, 0 } }, { 0x2F8A7, { 0x614C, 0 } }, { 0x2F8A8, { 0x614E, 0 } }, { 0x2F8A9, { 0x614C, 0 } }, { 0x2F8AA, { 0x617A, 0 } }, { 0x2F8AB, { 0x618E, 0 } }, { 0x2F8AC, { 0x61B2, 0 } }, { 0x2F8AD, { 0x61A4, 0 } }, { 0x2F8AE, { 0x61AF, 0 } }, { 0x2F8AF, { 0x61DE, 0 } }, { 0x2F8B0, { 0x61F2, 0 } }, { 0x2F8B1, { 0x61F6, 0 } }, { 0x2F8B2, { 0x6210, 0 } }, { 0x2F8B3, { 0x621B, 0 } }, { 0x2F8B4, { 0x625D, 0 } }, { 0x2F8B5, { 0x62B1, 0 } }, { 0x2F8B6, { 0x62D4, 0 } }, { 0x2F8B7, { 0x6350, 0 } }, { 0x2F8B8, { 0x22B0C, 0 } }, { 0x2F8B9, { 0x633D, 0 } }, { 0x2F8BA, { 0x62FC, 0 } }, { 0x2F8BB, { 0x6368, 0 } }, { 0x2F8BC, { 0x6383, 0 } }, { 0x2F8BD, { 0x63E4, 0 } }, { 0x2F8BE, { 0x22BF1, 0 } }, { 0x2F8BF, { 0x6422, 0 } }, { 0x2F8C0, { 0x63C5, 0 } }, { 0x2F8C1, { 0x63A9, 0 } }, { 0x2F8C2, { 0x3A2E, 0 } }, { 0x2F8C3, { 0x6469, 0 } }, { 0x2F8C4, { 0x647E, 0 } }, { 0x2F8C5, { 0x649D, 0 } }, { 0x2F8C6, { 0x6477, 0 } }, { 0x2F8C7, { 0x3A6C, 0 } }, { 0x2F8C8, { 0x654F, 0 } }, { 0x2F8C9, { 0x656C, 0 } }, { 0x2F8CA, { 0x2300A, 0 } }, { 0x2F8CB, { 0x65E3, 0 } }, { 0x2F8CC, { 0x66F8, 0 } }, { 0x2F8CD, { 0x6649, 0 } }, { 0x2F8CE, { 0x3B19, 0 } }, { 0x2F8CF, { 0x6691, 0 } }, { 0x2F8D0, { 0x3B08, 0 } }, { 0x2F8D1, { 0x3AE4, 0 } }, { 0x2F8D2, { 0x5192, 0 } }, { 0x2F8D3, { 0x5195, 0 } }, { 0x2F8D4, { 0x6700, 0 } }, { 0x2F8D5, { 0x669C, 0 } }, { 0x2F8D6, { 0x80AD, 0 } }, { 0x2F8D7, { 0x43D9, 0 } }, { 0x2F8D8, { 0x6717, 0 } }, { 0x2F8D9, { 0x671B, 0 } }, { 0x2F8DA, { 0x6721, 0 } }, { 0x2F8DB, { 0x675E, 0 } }, { 0x2F8DC, { 0x6753, 0 } }, { 0x2F8DD, { 0x233C3, 0 } }, { 0x2F8DE, { 0x3B49, 0 } }, { 0x2F8DF, { 0x67FA, 0 } }, { 0x2F8E0, { 0x6785, 0 } }, { 0x2F8E1, { 0x6852, 0 } }, { 0x2F8E2, { 0x6885, 0 } }, { 0x2F8E3, { 0x2346D, 0 } }, { 0x2F8E4, { 0x688E, 0 } }, { 0x2F8E5, { 0x681F, 0 } }, { 0x2F8E6, { 0x6914, 0 } }, { 0x2F8E7, { 0x3B9D, 0 } }, { 0x2F8E8, { 0x6942, 0 } }, { 0x2F8E9, { 0x69A3, 0 } }, { 0x2F8EA, { 0x69EA, 0 } }, { 0x2F8EB, { 0x6AA8, 0 } }, { 0x2F8EC, { 0x236A3, 0 } }, { 0x2F8ED, { 0x6ADB, 0 } }, { 0x2F8EE, { 0x3C18, 0 } }, { 0x2F8EF, { 0x6B21, 0 } }, { 0x2F8F0, { 0x238A7, 0 } }, { 0x2F8F1, { 0x6B54, 0 } }, { 0x2F8F2, { 0x3C4E, 0 } }, { 0x2F8F3, { 0x6B72, 0 } }, { 0x2F8F4, { 0x6B9F, 0 } }, { 0x2F8F5, { 0x6BBA, 0 } }, { 0x2F8F6, { 0x6BBB, 0 } }, { 0x2F8F7, { 0x23A8D, 0 } }, { 0x2F8F8, { 0x21D0B, 0 } }, { 0x2F8F9, { 0x23AFA, 0 } }, { 0x2F8FA, { 0x6C4E, 0 } }, { 0x2F8FB, { 0x23CBC, 0 } }, { 0x2F8FC, { 0x6CBF, 0 } }, { 0x2F8FD, { 0x6CCD, 0 } }, { 0x2F8FE, { 0x6C67, 0 } }, { 0x2F8FF, { 0x6D16, 0 } }, { 0x2F900, { 0x6D3E, 0 } }, { 0x2F901, { 0x6D77, 0 } }, { 0x2F902, { 0x6D41, 0 } }, { 0x2F903, { 0x6D69, 0 } }, { 0x2F904, { 0x6D78, 0 } }, { 0x2F905, { 0x6D85, 0 } }, { 0x2F906, { 0x23D1E, 0 } }, { 0x2F907, { 0x6D34, 0 } }, { 0x2F908, { 0x6E2F, 0 } }, { 0x2F909, { 0x6E6E, 0 } }, { 0x2F90A, { 0x3D33, 0 } }, { 0x2F90B, { 0x6ECB, 0 } }, { 0x2F90C, { 0x6EC7, 0 } }, { 0x2F90D, { 0x23ED1, 0 } }, { 0x2F90E, { 0x6DF9, 0 } }, { 0x2F90F, { 0x6F6E, 0 } }, { 0x2F910, { 0x23F5E, 0 } }, { 0x2F911, { 0x23F8E, 0 } }, { 0x2F912, { 0x6FC6, 0 } }, { 0x2F913, { 0x7039, 0 } }, { 0x2F914, { 0x701E, 0 } }, { 0x2F915, { 0x701B, 0 } }, { 0x2F916, { 0x3D96, 0 } }, { 0x2F917, { 0x704A, 0 } }, { 0x2F918, { 0x707D, 0 } }, { 0x2F919, { 0x7077, 0 } }, { 0x2F91A, { 0x70AD, 0 } }, { 0x2F91B, { 0x20525, 0 } }, { 0x2F91C, { 0x7145, 0 } }, { 0x2F91D, { 0x24263, 0 } }, { 0x2F91E, { 0x719C, 0 } }, { 0x2F91F, { 0x243AB, 0 } }, { 0x2F920, { 0x7228, 0 } }, { 0x2F921, { 0x7235, 0 } }, { 0x2F922, { 0x7250, 0 } }, { 0x2F923, { 0x24608, 0 } }, { 0x2F924, { 0x7280, 0 } }, { 0x2F925, { 0x7295, 0 } }, { 0x2F926, { 0x24735, 0 } }, { 0x2F927, { 0x24814, 0 } }, { 0x2F928, { 0x737A, 0 } }, { 0x2F929, { 0x738B, 0 } }, { 0x2F92A, { 0x3EAC, 0 } }, { 0x2F92B, { 0x73A5, 0 } }, { 0x2F92C, { 0x3EB8, 0 } }, { 0x2F92D, { 0x3EB8, 0 } }, { 0x2F92E, { 0x7447, 0 } }, { 0x2F92F, { 0x745C, 0 } }, { 0x2F930, { 0x7471, 0 } }, { 0x2F931, { 0x7485, 0 } }, { 0x2F932, { 0x74CA, 0 } }, { 0x2F933, { 0x3F1B, 0 } }, { 0x2F934, { 0x7524, 0 } }, { 0x2F935, { 0x24C36, 0 } }, { 0x2F936, { 0x753E, 0 } }, { 0x2F937, { 0x24C92, 0 } }, { 0x2F938, { 0x7570, 0 } }, { 0x2F939, { 0x2219F, 0 } }, { 0x2F93A, { 0x7610, 0 } }, { 0x2F93B, { 0x24FA1, 0 } }, { 0x2F93C, { 0x24FB8, 0 } }, { 0x2F93D, { 0x25044, 0 } }, { 0x2F93E, { 0x3FFC, 0 } }, { 0x2F93F, { 0x4008, 0 } }, { 0x2F940, { 0x76F4, 0 } }, { 0x2F941, { 0x250F3, 0 } }, { 0x2F942, { 0x250F2, 0 } }, { 0x2F943, { 0x25119, 0 } }, { 0x2F944, { 0x25133, 0 } }, { 0x2F945, { 0x771E, 0 } }, { 0x2F946, { 0x771F, 0 } }, { 0x2F947, { 0x771F, 0 } }, { 0x2F948, { 0x774A, 0 } }, { 0x2F949, { 0x4039, 0 } }, { 0x2F94A, { 0x778B, 0 } }, { 0x2F94B, { 0x4046, 0 } }, { 0x2F94C, { 0x4096, 0 } }, { 0x2F94D, { 0x2541D, 0 } }, { 0x2F94E, { 0x784E, 0 } }, { 0x2F94F, { 0x788C, 0 } }, { 0x2F950, { 0x78CC, 0 } }, { 0x2F951, { 0x40E3, 0 } }, { 0x2F952, { 0x25626, 0 } }, { 0x2F953, { 0x7956, 0 } }, { 0x2F954, { 0x2569A, 0 } }, { 0x2F955, { 0x256C5, 0 } }, { 0x2F956, { 0x798F, 0 } }, { 0x2F957, { 0x79EB, 0 } }, { 0x2F958, { 0x412F, 0 } }, { 0x2F959, { 0x7A40, 0 } }, { 0x2F95A, { 0x7A4A, 0 } }, { 0x2F95B, { 0x7A4F, 0 } }, { 0x2F95C, { 0x2597C, 0 } }, { 0x2F95D, { 0x25AA7, 0 } }, { 0x2F95E, { 0x25AA7, 0 } }, { 0x2F95F, { 0x7AEE, 0 } }, { 0x2F960, { 0x4202, 0 } }, { 0x2F961, { 0x25BAB, 0 } }, { 0x2F962, { 0x7BC6, 0 } }, { 0x2F963, { 0x7BC9, 0 } }, { 0x2F964, { 0x4227, 0 } }, { 0x2F965, { 0x25C80, 0 } }, { 0x2F966, { 0x7CD2, 0 } }, { 0x2F967, { 0x42A0, 0 } }, { 0x2F968, { 0x7CE8, 0 } }, { 0x2F969, { 0x7CE3, 0 } }, { 0x2F96A, { 0x7D00, 0 } }, { 0x2F96B, { 0x25F86, 0 } }, { 0x2F96C, { 0x7D63, 0 } }, { 0x2F96D, { 0x4301, 0 } }, { 0x2F96E, { 0x7DC7, 0 } }, { 0x2F96F, { 0x7E02, 0 } }, { 0x2F970, { 0x7E45, 0 } }, { 0x2F971, { 0x4334, 0 } }, { 0x2F972, { 0x26228, 0 } }, { 0x2F973, { 0x26247, 0 } }, { 0x2F974, { 0x4359, 0 } }, { 0x2F975, { 0x262D9, 0 } }, { 0x2F976, { 0x7F7A, 0 } }, { 0x2F977, { 0x2633E, 0 } }, { 0x2F978, { 0x7F95, 0 } }, { 0x2F979, { 0x7FFA, 0 } }, { 0x2F97A, { 0x8005, 0 } }, { 0x2F97B, { 0x264DA, 0 } }, { 0x2F97C, { 0x26523, 0 } }, { 0x2F97D, { 0x8060, 0 } }, { 0x2F97E, { 0x265A8, 0 } }, { 0x2F97F, { 0x8070, 0 } }, { 0x2F980, { 0x2335F, 0 } }, { 0x2F981, { 0x43D5, 0 } }, { 0x2F982, { 0x80B2, 0 } }, { 0x2F983, { 0x8103, 0 } }, { 0x2F984, { 0x440B, 0 } }, { 0x2F985, { 0x813E, 0 } }, { 0x2F986, { 0x5AB5, 0 } }, { 0x2F987, { 0x267A7, 0 } }, { 0x2F988, { 0x267B5, 0 } }, { 0x2F989, { 0x23393, 0 } }, { 0x2F98A, { 0x2339C, 0 } }, { 0x2F98B, { 0x8201, 0 } }, { 0x2F98C, { 0x8204, 0 } }, { 0x2F98D, { 0x8F9E, 0 } }, { 0x2F98E, { 0x446B, 0 } }, { 0x2F98F, { 0x8291, 0 } }, { 0x2F990, { 0x828B, 0 } }, { 0x2F991, { 0x829D, 0 } }, { 0x2F992, { 0x52B3, 0 } }, { 0x2F993, { 0x82B1, 0 } }, { 0x2F994, { 0x82B3, 0 } }, { 0x2F995, { 0x82BD, 0 } }, { 0x2F996, { 0x82E6, 0 } }, { 0x2F997, { 0x26B3C, 0 } }, { 0x2F998, { 0x82E5, 0 } }, { 0x2F999, { 0x831D, 0 } }, { 0x2F99A, { 0x8363, 0 } }, { 0x2F99B, { 0x83AD, 0 } }, { 0x2F99C, { 0x8323, 0 } }, { 0x2F99D, { 0x83BD, 0 } }, { 0x2F99E, { 0x83E7, 0 } }, { 0x2F99F, { 0x8457, 0 } }, { 0x2F9A0, { 0x8353, 0 } }, { 0x2F9A1, { 0x83CA, 0 } }, { 0x2F9A2, { 0x83CC, 0 } }, { 0x2F9A3, { 0x83DC, 0 } }, { 0x2F9A4, { 0x26C36, 0 } }, { 0x2F9A5, { 0x26D6B, 0 } }, { 0x2F9A6, { 0x26CD5, 0 } }, { 0x2F9A7, { 0x452B, 0 } }, { 0x2F9A8, { 0x84F1, 0 } }, { 0x2F9A9, { 0x84F3, 0 } }, { 0x2F9AA, { 0x8516, 0 } }, { 0x2F9AB, { 0x273CA, 0 } }, { 0x2F9AC, { 0x8564, 0 } }, { 0x2F9AD, { 0x26F2C, 0 } }, { 0x2F9AE, { 0x455D, 0 } }, { 0x2F9AF, { 0x4561, 0 } }, { 0x2F9B0, { 0x26FB1, 0 } }, { 0x2F9B1, { 0x270D2, 0 } }, { 0x2F9B2, { 0x456B, 0 } }, { 0x2F9B3, { 0x8650, 0 } }, { 0x2F9B4, { 0x865C, 0 } }, { 0x2F9B5, { 0x8667, 0 } }, { 0x2F9B6, { 0x8669, 0 } }, { 0x2F9B7, { 0x86A9, 0 } }, { 0x2F9B8, { 0x8688, 0 } }, { 0x2F9B9, { 0x870E, 0 } }, { 0x2F9BA, { 0x86E2, 0 } }, { 0x2F9BB, { 0x8779, 0 } }, { 0x2F9BC, { 0x8728, 0 } }, { 0x2F9BD, { 0x876B, 0 } }, { 0x2F9BE, { 0x8786, 0 } }, { 0x2F9BF, { 0x45D7, 0 } }, { 0x2F9C0, { 0x87E1, 0 } }, { 0x2F9C1, { 0x8801, 0 } }, { 0x2F9C2, { 0x45F9, 0 } }, { 0x2F9C3, { 0x8860, 0 } }, { 0x2F9C4, { 0x8863, 0 } }, { 0x2F9C5, { 0x27667, 0 } }, { 0x2F9C6, { 0x88D7, 0 } }, { 0x2F9C7, { 0x88DE, 0 } }, { 0x2F9C8, { 0x4635, 0 } }, { 0x2F9C9, { 0x88FA, 0 } }, { 0x2F9CA, { 0x34BB, 0 } }, { 0x2F9CB, { 0x278AE, 0 } }, { 0x2F9CC, { 0x27966, 0 } }, { 0x2F9CD, { 0x46BE, 0 } }, { 0x2F9CE, { 0x46C7, 0 } }, { 0x2F9CF, { 0x8AA0, 0 } }, { 0x2F9D0, { 0x8AED, 0 } }, { 0x2F9D1, { 0x8B8A, 0 } }, { 0x2F9D2, { 0x8C55, 0 } }, { 0x2F9D3, { 0x27CA8, 0 } }, { 0x2F9D4, { 0x8CAB, 0 } }, { 0x2F9D5, { 0x8CC1, 0 } }, { 0x2F9D6, { 0x8D1B, 0 } }, { 0x2F9D7, { 0x8D77, 0 } }, { 0x2F9D8, { 0x27F2F, 0 } }, { 0x2F9D9, { 0x20804, 0 } }, { 0x2F9DA, { 0x8DCB, 0 } }, { 0x2F9DB, { 0x8DBC, 0 } }, { 0x2F9DC, { 0x8DF0, 0 } }, { 0x2F9DD, { 0x208DE, 0 } }, { 0x2F9DE, { 0x8ED4, 0 } }, { 0x2F9DF, { 0x8F38, 0 } }, { 0x2F9E0, { 0x285D2, 0 } }, { 0x2F9E1, { 0x285ED, 0 } }, { 0x2F9E2, { 0x9094, 0 } }, { 0x2F9E3, { 0x90F1, 0 } }, { 0x2F9E4, { 0x9111, 0 } }, { 0x2F9E5, { 0x2872E, 0 } }, { 0x2F9E6, { 0x911B, 0 } }, { 0x2F9E7, { 0x9238, 0 } }, { 0x2F9E8, { 0x92D7, 0 } }, { 0x2F9E9, { 0x92D8, 0 } }, { 0x2F9EA, { 0x927C, 0 } }, { 0x2F9EB, { 0x93F9, 0 } }, { 0x2F9EC, { 0x9415, 0 } }, { 0x2F9ED, { 0x28BFA, 0 } }, { 0x2F9EE, { 0x958B, 0 } }, { 0x2F9EF, { 0x4995, 0 } }, { 0x2F9F0, { 0x95B7, 0 } }, { 0x2F9F1, { 0x28D77, 0 } }, { 0x2F9F2, { 0x49E6, 0 } }, { 0x2F9F3, { 0x96C3, 0 } }, { 0x2F9F4, { 0x5DB2, 0 } }, { 0x2F9F5, { 0x9723, 0 } }, { 0x2F9F6, { 0x29145, 0 } }, { 0x2F9F7, { 0x2921A, 0 } }, { 0x2F9F8, { 0x4A6E, 0 } }, { 0x2F9F9, { 0x4A76, 0 } }, { 0x2F9FA, { 0x97E0, 0 } }, { 0x2F9FB, { 0x2940A, 0 } }, { 0x2F9FC, { 0x4AB2, 0 } }, { 0x2F9FD, { 0x29496, 0 } }, { 0x2F9FE, { 0x980B, 0 } }, { 0x2F9FF, { 0x980B, 0 } }, { 0x2FA00, { 0x9829, 0 } }, { 0x2FA01, { 0x295B6, 0 } }, { 0x2FA02, { 0x98E2, 0 } }, { 0x2FA03, { 0x4B33, 0 } }, { 0x2FA04, { 0x9929, 0 } }, { 0x2FA05, { 0x99A7, 0 } }, { 0x2FA06, { 0x99C2, 0 } }, { 0x2FA07, { 0x99FE, 0 } }, { 0x2FA08, { 0x4BCE, 0 } }, { 0x2FA09, { 0x29B30, 0 } }, { 0x2FA0A, { 0x9B12, 0 } }, { 0x2FA0B, { 0x9C40, 0 } }, { 0x2FA0C, { 0x9CFD, 0 } }, { 0x2FA0D, { 0x4CCE, 0 } }, { 0x2FA0E, { 0x4CED, 0 } }, { 0x2FA0F, { 0x9D67, 0 } }, { 0x2FA10, { 0x2A0CE, 0 } }, { 0x2FA11, { 0x4CF8, 0 } }, { 0x2FA12, { 0x2A105, 0 } }, { 0x2FA13, { 0x2A20E, 0 } }, { 0x2FA14, { 0x2A291, 0 } }, { 0x2FA15, { 0x9EBB, 0 } }, { 0x2FA16, { 0x4D56, 0 } }, { 0x2FA17, { 0x9EF9, 0 } }, { 0x2FA18, { 0x9EFE, 0 } }, { 0x2FA19, { 0x9F05, 0 } }, { 0x2FA1A, { 0x9F0F, 0 } }, { 0x2FA1B, { 0x9F16, 0 } }, { 0x2FA1C, { 0x9F3B, 0 } }, { 0x2FA1D, { 0x2A600, 0 } } }; static GX_UNICODE_RANGE gx_studio_nfc_quick_check_no_table[] = { { 0x0340, 0x0341 }, /* Mn[2] COMBINING GRAVE TONE MARK..COMBINING ACUTE TONE MARK */ { 0x0343, 0x0344 }, /* Mn[2] COMBINING GREEK KORONIS..COMBINING GREEK DIALYTIKA TONOS */ { 0x0374, 0x0374 }, /* Lm GREEK NUMERAL SIGN */ { 0x037E, 0x037E }, /* Po GREEK QUESTION MARK */ { 0x0387, 0x0387 }, /* Po GREEK ANO TELEIA */ { 0x0958, 0x095F }, /* Lo[8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA */ { 0x09DC, 0x09DD }, /* Lo[2] BENGALI LETTER RRA..BENGALI LETTER RHA */ { 0x09DF, 0x09DF }, /* Lo BENGALI LETTER YYA */ { 0x0A33, 0x0A33 }, /* Lo GURMUKHI LETTER LLA */ { 0x0A36, 0x0A36 }, /* Lo GURMUKHI LETTER SHA */ { 0x0A59, 0x0A5B }, /* Lo[3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA */ { 0x0A5E, 0x0A5E }, /* Lo GURMUKHI LETTER FA */ { 0x0B5C, 0x0B5D }, /* Lo[2] ORIYA LETTER RRA..ORIYA LETTER RHA */ { 0x0F43, 0x0F43 }, /* Lo TIBETAN LETTER GHA */ { 0x0F4D, 0x0F4D }, /* Lo TIBETAN LETTER DDHA */ { 0x0F52, 0x0F52 }, /* Lo TIBETAN LETTER DHA */ { 0x0F57, 0x0F57 }, /* Lo TIBETAN LETTER BHA */ { 0x0F5C, 0x0F5C }, /* Lo TIBETAN LETTER DZHA */ { 0x0F69, 0x0F69 }, /* Lo TIBETAN LETTER KSSA */ { 0x0F73, 0x0F73 }, /* Mn TIBETAN VOWEL SIGN II */ { 0x0F75, 0x0F76 }, /* Mn[2] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC R */ { 0x0F78, 0x0F78 }, /* Mn TIBETAN VOWEL SIGN VOCALIC L */ { 0x0F81, 0x0F81 }, /* Mn TIBETAN VOWEL SIGN REVERSED II */ { 0x0F93, 0x0F93 }, /* Mn TIBETAN SUBJOINED LETTER GHA */ { 0x0F9D, 0x0F9D }, /* Mn TIBETAN SUBJOINED LETTER DDHA */ { 0x0FA2, 0x0FA2 }, /* Mn TIBETAN SUBJOINED LETTER DHA */ { 0x0FA7, 0x0FA7 }, /* Mn TIBETAN SUBJOINED LETTER BHA */ { 0x0FAC, 0x0FAC }, /* Mn TIBETAN SUBJOINED LETTER DZHA */ { 0x0FB9, 0x0FB9 }, /* Mn TIBETAN SUBJOINED LETTER KSSA */ { 0x1F71, 0x1F71 }, /* L& GREEK SMALL LETTER ALPHA WITH OXIA */ { 0x1F73, 0x1F73 }, /* L& GREEK SMALL LETTER EPSILON WITH OXIA */ { 0x1F75, 0x1F75 }, /* L& GREEK SMALL LETTER ETA WITH OXIA */ { 0x1F77, 0x1F77 }, /* L& GREEK SMALL LETTER IOTA WITH OXIA */ { 0x1F79, 0x1F79 }, /* L& GREEK SMALL LETTER OMICRON WITH OXIA */ { 0x1F7B, 0x1F7B }, /* L& GREEK SMALL LETTER UPSILON WITH OXIA */ { 0x1F7D, 0x1F7D }, /* L& GREEK SMALL LETTER OMEGA WITH OXIA */ { 0x1FBB, 0x1FBB }, /* L& GREEK CAPITAL LETTER ALPHA WITH OXIA */ { 0x1FBE, 0x1FBE }, /* L& GREEK PROSGEGRAMMENI */ { 0x1FC9, 0x1FC9 }, /* L& GREEK CAPITAL LETTER EPSILON WITH OXIA */ { 0x1FCB, 0x1FCB }, /* L& GREEK CAPITAL LETTER ETA WITH OXIA */ { 0x1FD3, 0x1FD3 }, /* L& GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA */ { 0x1FDB, 0x1FDB }, /* L& GREEK CAPITAL LETTER IOTA WITH OXIA */ { 0x1FE3, 0x1FE3 }, /* L& GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA */ { 0x1FEB, 0x1FEB }, /* L& GREEK CAPITAL LETTER UPSILON WITH OXIA */ { 0x1FEE, 0x1FEF }, /* Sk[2] GREEK DIALYTIKA AND OXIA..GREEK VARIA */ { 0x1FF9, 0x1FF9 }, /* L& GREEK CAPITAL LETTER OMICRON WITH OXIA */ { 0x1FFB, 0x1FFB }, /* L& GREEK CAPITAL LETTER OMEGA WITH OXIA */ { 0x1FFD, 0x1FFD }, /* Sk GREEK OXIA */ { 0x2000, 0x2001 }, /* Zs[2] EN QUAD..EM QUAD */ { 0x2126, 0x2126 }, /* L& OHM SIGN */ { 0x212A, 0x212B }, /* L&[2] KELVIN SIGN..ANGSTROM SIGN */ { 0x2329, 0x2329 }, /* Ps LEFT - POINTING ANGLE BRACKET */ { 0x232A, 0x232A }, /* Pe RIGHT - POINTING ANGLE BRACKET */ { 0x2ADC, 0x2ADC }, /* Sm FORKING */ { 0xF900, 0xFA0D }, /* Lo[270] CJK COMPATIBILITY IDEOGRAPH - F900..CJK COMPATIBILITY IDEOGRAPH - FA0D */ { 0xFA10, 0xFA10 }, /* Lo CJK COMPATIBILITY IDEOGRAPH - FA10 */ { 0xFA12, 0xFA12 }, /* Lo CJK COMPATIBILITY IDEOGRAPH - FA12 */ { 0xFA15, 0xFA1E }, /* Lo[10] CJK COMPATIBILITY IDEOGRAPH - FA15..CJK COMPATIBILITY IDEOGRAPH - FA1E */ { 0xFA20, 0xFA20 }, /* Lo CJK COMPATIBILITY IDEOGRAPH - FA20 */ { 0xFA22, 0xFA22 }, /* Lo CJK COMPATIBILITY IDEOGRAPH - FA22 */ { 0xFA25, 0xFA26 }, /* Lo[2] CJK COMPATIBILITY IDEOGRAPH - FA25..CJK COMPATIBILITY IDEOGRAPH - FA26 */ { 0xFA2A, 0xFA6D }, /* Lo[68] CJK COMPATIBILITY IDEOGRAPH - FA2A..CJK COMPATIBILITY IDEOGRAPH - FA6D */ { 0xFA70, 0xFAD9 }, /* Lo[106] CJK COMPATIBILITY IDEOGRAPH - FA70..CJK COMPATIBILITY IDEOGRAPH - FAD9 */ { 0xFB1D, 0xFB1D }, /* Lo HEBREW LETTER YOD WITH HIRIQ */ { 0xFB1F, 0xFB1F }, /* Lo HEBREW LIGATURE YIDDISH YOD YOD PATAH */ { 0xFB2A, 0xFB36 }, /* Lo[13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH */ { 0xFB38, 0xFB3C }, /* Lo[5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH */ { 0xFB3E, 0xFB3E }, /* Lo HEBREW LETTER MEM WITH DAGESH */ { 0xFB40, 0xFB41 }, /* Lo[2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH */ { 0xFB43, 0xFB44 }, /* Lo[2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH */ { 0xFB46, 0xFB4E }, /* Lo[9] HEBREW LETTER TSADI WITH DAGESH..HEBREW LETTER PE WITH RAFE */ { 0x1D15E, 0x1D164 }, /* So[7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY - EIGHTH NOTE */ { 0x1D1BB, 0x1D1C0 }, /* So[6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK */ { 0x2F800, 0x2FA1D }, /* Lo[542] CJK COMPATIBILITY IDEOGRAPH - 2F800..CJK COMPATIBILITY IDEOGRAPH - 2FA1D */ { 0, 0 } }; static GX_UNICODE_RANGE gx_studio_nfc_quick_check_maye_table[] = { { 0x0300, 0x0304 }, /* Mn[5] COMBINING GRAVE ACCENT..COMBINING MACRON */ { 0x0306, 0x030C }, /* Mn[7] COMBINING BREVE..COMBINING CARON */ { 0x030F, 0x030F }, /* Mn COMBINING DOUBLE GRAVE ACCENT */ { 0x0311, 0x0311 }, /* Mn COMBINING INVERTED BREVE */ { 0x0313, 0x0314 }, /* Mn[2] COMBINING COMMA ABOVE..COMBINING REVERSED COMMA ABOVE */ { 0x031B, 0x031B }, /* Mn COMBINING HORN */ { 0x0323, 0x0328 }, /* Mn[6] COMBINING DOT BELOW..COMBINING OGONEK */ { 0x032D, 0x032E }, /* Mn[2] COMBINING CIRCUMFLEX ACCENT BELOW..COMBINING BREVE BELOW */ { 0x0330, 0x0331 }, /* Mn[2] COMBINING TILDE BELOW..COMBINING MACRON BELOW */ { 0x0338, 0x0338 }, /* Mn COMBINING LONG SOLIDUS OVERLAY */ { 0x0342, 0x0342 }, /* Mn COMBINING GREEK PERISPOMENI */ { 0x0345, 0x0345 }, /* Mn COMBINING GREEK YPOGEGRAMMENI */ { 0x0653, 0x0655 }, /* Mn[3] ARABIC MADDAH ABOVE..ARABIC HAMZA BELOW */ { 0x093C, 0x093C }, /* Mn DEVANAGARI SIGN NUKTA */ { 0x09BE, 0x09BE }, /* Mc BENGALI VOWEL SIGN AA */ { 0x09D7, 0x09D7 }, /* Mc BENGALI AU LENGTH MARK */ { 0x0B3E, 0x0B3E }, /* Mc ORIYA VOWEL SIGN AA */ { 0x0B56, 0x0B56 }, /* Mn ORIYA AI LENGTH MARK */ { 0x0B57, 0x0B57 }, /* Mc ORIYA AU LENGTH MARK */ { 0x0BBE, 0x0BBE }, /* Mc TAMIL VOWEL SIGN AA */ { 0x0BD7, 0x0BD7 }, /* Mc TAMIL AU LENGTH MARK */ { 0x0C56, 0x0C56 }, /* Mn TELUGU AI LENGTH MARK */ { 0x0CC2, 0x0CC2 }, /* Mc KANNADA VOWEL SIGN UU */ { 0x0CD5, 0x0CD6 }, /* Mc[2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK */ { 0x0D3E, 0x0D3E }, /* Mc MALAYALAM VOWEL SIGN AA */ { 0x0D57, 0x0D57 }, /* Mc MALAYALAM AU LENGTH MARK */ { 0x0DCA, 0x0DCA }, /* Mn SINHALA SIGN AL - LAKUNA */ { 0x0DCF, 0x0DCF }, /* Mc SINHALA VOWEL SIGN AELA - PILLA */ { 0x0DDF, 0x0DDF }, /* Mc SINHALA VOWEL SIGN GAYANUKITTA */ { 0x102E, 0x102E }, /* Mn MYANMAR VOWEL SIGN II */ { 0x1161, 0x1175 }, /* Lo[21] HANGUL JUNGSEONG A..HANGUL JUNGSEONG I */ { 0x11A8, 0x11C2 }, /* Lo[27] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG HIEUH */ { 0x1B35, 0x1B35 }, /* Mc BALINESE VOWEL SIGN TEDUNG */ { 0x3099, 0x309A }, /* Mn[2] COMBINING KATAKANA - HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA - HIRAGANA SEMI - VOICED SOUND MARK */ { 0x110BA, 0x110BA }, /* Mn KAITHI SIGN NUKTA */ { 0x11127, 0x11127 }, /* Mn CHAKMA VOWEL SIGN A */ { 0x1133E, 0x1133E }, /* Mc GRANTHA VOWEL SIGN AA */ { 0x11357, 0x11357 }, /* Mc GRANTHA AU LENGTH MARK */ { 0x114B0, 0x114B0 }, /* Mc TIRHUTA VOWEL SIGN AA */ { 0x114BA, 0x114BA }, /* Mn TIRHUTA VOWEL SIGN SHORT E */ { 0x114BD, 0x114BD }, /* Mc TIRHUTA VOWEL SIGN SHORT O */ { 0x115AF, 0x115AF }, /* Mc SIDDHAM VOWEL SIGN AA */ { 0, 0 } }; static GX_UNICODE_RANGE gx_studio_full_composition_exclusion_table[] = { { 0x0343, 0x0344 }, /* Full_Composition_Exclusion # Mn [2] COMBINING GREEK KORONIS..COMBINING GREEK DIALYTIKA TONOS */ { 0x0374, 0x0374 }, /* Full_Composition_Exclusion # Lm GREEK NUMERAL SIGN */ { 0x037E, 0x037E }, /* Full_Composition_Exclusion # Po GREEK QUESTION MARK */ { 0x0387, 0x0387 }, /* Full_Composition_Exclusion # Po GREEK ANO TELEIA */ { 0x0958, 0x095F }, /* Full_Composition_Exclusion # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA */ { 0x09DC, 0x09DD }, /* Full_Composition_Exclusion # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA */ { 0x09DF, 0x09DF }, /* Full_Composition_Exclusion # Lo BENGALI LETTER YYA */ { 0x0A33, 0x0A33 }, /* Full_Composition_Exclusion # Lo GURMUKHI LETTER LLA */ { 0x0A36, 0x0A36 }, /* Full_Composition_Exclusion # Lo GURMUKHI LETTER SHA */ { 0x0A59, 0x0A5B }, /* Full_Composition_Exclusion # Lo [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA */ { 0x0A5E, 0x0A5E }, /* Full_Composition_Exclusion # Lo GURMUKHI LETTER FA */ { 0x0B5C, 0x0B5D }, /* Full_Composition_Exclusion # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA */ { 0x0F43, 0x0F43 }, /* Full_Composition_Exclusion # Lo TIBETAN LETTER GHA */ { 0x0F4D, 0x0F4D }, /* Full_Composition_Exclusion # Lo TIBETAN LETTER DDHA */ { 0x0F52, 0x0F52 }, /* Full_Composition_Exclusion # Lo TIBETAN LETTER DHA */ { 0x0F57, 0x0F57 }, /* Full_Composition_Exclusion # Lo TIBETAN LETTER BHA */ { 0x0F5C, 0x0F5C }, /* Full_Composition_Exclusion # Lo TIBETAN LETTER DZHA */ { 0x0F69, 0x0F69 }, /* Full_Composition_Exclusion # Lo TIBETAN LETTER KSSA */ { 0x0F73, 0x0F73 }, /* Full_Composition_Exclusion # Mn TIBETAN VOWEL SIGN II */ { 0x0F75, 0x0F76 }, /* Full_Composition_Exclusion # Mn [2] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC R */ { 0x0F78, 0x0F78 }, /* Full_Composition_Exclusion # Mn TIBETAN VOWEL SIGN VOCALIC L */ { 0x0F81, 0x0F81 }, /* Full_Composition_Exclusion # Mn TIBETAN VOWEL SIGN REVERSED II */ { 0x0F93, 0x0F93 }, /* Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER GHA */ { 0x0F9D, 0x0F9D }, /* Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER DDHA */ { 0x0FA2, 0x0FA2 }, /* Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER DHA */ { 0x0FA7, 0x0FA7 }, /* Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER BHA */ { 0x0FAC, 0x0FAC }, /* Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER DZHA */ { 0x0FB9, 0x0FB9 }, /* Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER KSSA */ { 0x1F73, 0x1F73 }, /* Full_Composition_Exclusion # L& GREEK SMALL LETTER EPSILON WITH OXIA */ { 0x1F75, 0x1F75 }, /* Full_Composition_Exclusion # L& GREEK SMALL LETTER ETA WITH OXIA */ { 0x1F77, 0x1F77 }, /* Full_Composition_Exclusion # L& GREEK SMALL LETTER IOTA WITH OXIA */ { 0x1F79, 0x1F79 }, /* Full_Composition_Exclusion # L& GREEK SMALL LETTER OMICRON WITH OXIA */ { 0x1F7B, 0x1F7B }, /* Full_Composition_Exclusion # L& GREEK SMALL LETTER UPSILON WITH OXIA */ { 0x1F7D, 0x1F7D }, /* Full_Composition_Exclusion # L& GREEK SMALL LETTER OMEGA WITH OXIA */ { 0x1FBB, 0x1FBB }, /* Full_Composition_Exclusion # L& GREEK CAPITAL LETTER ALPHA WITH OXIA */ { 0x1FBE, 0x1FBE }, /* Full_Composition_Exclusion # L& GREEK PROSGEGRAMMENI */ { 0x1FC9, 0x1FC9 }, /* Full_Composition_Exclusion # L& GREEK CAPITAL LETTER EPSILON WITH OXIA */ { 0x1FCB, 0x1FCB }, /* Full_Composition_Exclusion # L& GREEK CAPITAL LETTER ETA WITH OXIA */ { 0x1FD3, 0x1FD3 }, /* Full_Composition_Exclusion # L& GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA */ { 0x1FDB, 0x1FDB }, /* Full_Composition_Exclusion # L& GREEK CAPITAL LETTER IOTA WITH OXIA */ { 0x1FE3, 0x1FE3 }, /* Full_Composition_Exclusion # L& GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA */ { 0x1FEB, 0x1FEB }, /* Full_Composition_Exclusion # L& GREEK CAPITAL LETTER UPSILON WITH OXIA */ { 0x1FEE, 0x1FEF }, /* Full_Composition_Exclusion # Sk [2] GREEK DIALYTIKA AND OXIA..GREEK VARIA */ { 0x1FF9, 0x1FF9 }, /* Full_Composition_Exclusion # L& GREEK CAPITAL LETTER OMICRON WITH OXIA */ { 0x1FFB, 0x1FFB }, /* Full_Composition_Exclusion # L& GREEK CAPITAL LETTER OMEGA WITH OXIA */ { 0x1FFD, 0x1FFD }, /* Full_Composition_Exclusion # Sk GREEK OXIA */ { 0x2000, 0x2001 }, /* Full_Composition_Exclusion # Zs [2] EN QUAD..EM QUAD */ { 0x2126, 0x2126 }, /* Full_Composition_Exclusion # L& OHM SIGN */ { 0x212A, 0x212B }, /* Full_Composition_Exclusion # L& [2] KELVIN SIGN..ANGSTROM SIGN */ { 0x2329, 0x2329 }, /* Full_Composition_Exclusion # Ps LEFT-POINTING ANGLE BRACKET */ { 0x232A, 0x232A }, /* Full_Composition_Exclusion # Pe RIGHT-POINTING ANGLE BRACKET */ { 0x2ADC, 0x2ADC }, /* Full_Composition_Exclusion # Sm FORKING */ { 0xF900, 0xFA0D }, /* Full_Composition_Exclusion # Lo [270] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA0D */ { 0xFA10, 0xFA10 }, /* Full_Composition_Exclusion # Lo CJK COMPATIBILITY IDEOGRAPH-FA10 */ { 0xFA12, 0xFA12 }, /* Full_Composition_Exclusion # Lo CJK COMPATIBILITY IDEOGRAPH-FA12 */ { 0xFA15, 0xFA1E }, /* Full_Composition_Exclusion # Lo [10] CJK COMPATIBILITY IDEOGRAPH-FA15..CJK COMPATIBILITY IDEOGRAPH-FA1E */ { 0xFA20, 0xFA20 }, /* Full_Composition_Exclusion # Lo CJK COMPATIBILITY IDEOGRAPH-FA20 */ { 0xFA22, 0xFA22 }, /* Full_Composition_Exclusion # Lo CJK COMPATIBILITY IDEOGRAPH-FA22 */ { 0xFA25, 0xFA26 }, /* Full_Composition_Exclusion # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA25..CJK COMPATIBILITY IDEOGRAPH-FA26 */ { 0xFA2A, 0xFA6D }, /* Full_Composition_Exclusion # Lo [68] CJK COMPATIBILITY IDEOGRAPH-FA2A..CJK COMPATIBILITY IDEOGRAPH-FA6D */ { 0xFA70, 0xFAD9 }, /* Full_Composition_Exclusion # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 */ { 0xFB1D, 0xFB1D }, /* Full_Composition_Exclusion # Lo HEBREW LETTER YOD WITH HIRIQ */ { 0xFB1F, 0xFB1F }, /* Full_Composition_Exclusion # Lo HEBREW LIGATURE YIDDISH YOD YOD PATAH */ { 0xFB2A, 0xFB36 }, /* Full_Composition_Exclusion # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH */ { 0xFB38, 0xFB3C }, /* Full_Composition_Exclusion # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH */ { 0xFB3E, 0xFB3E }, /* Full_Composition_Exclusion # Lo HEBREW LETTER MEM WITH DAGESH */ { 0xFB40, 0xFB41 }, /* Full_Composition_Exclusion # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH */ { 0xFB43, 0xFB44 }, /* Full_Composition_Exclusion # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH */ { 0xFB46, 0xFB4E }, /* Full_Composition_Exclusion # Lo [9] HEBREW LETTER TSADI WITH DAGESH..HEBREW LETTER PE WITH RAFE */ { 0x1D15E, 0x1D164 }, /* Full_Composition_Exclusion # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE */ { 0x1D1BB, 0x1D1C0 }, /* Full_Composition_Exclusion # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK */ { 0, 0 } }; /**************************************************************************/ /* This function tests if a code point is full composition exclusion. */ /**************************************************************************/ GX_BOOL gx_studio_full_composition_exclusion_test(ULONG unicode) { GX_UNICODE_RANGE *entry = gx_studio_full_composition_exclusion_table; while (entry->gx_unicode_range_start) { if ((unicode >= entry->gx_unicode_range_start) && (unicode <= entry->gx_unicode_range_end)) { return GX_TRUE; } entry++; } return GX_FALSE; } /**************************************************************************/ /* This function gets nfc quick check value for specified code point. */ /**************************************************************************/ static UINT gx_studio_nfc_quick_check(ULONG code_point, GX_UBYTE *return_type) { GX_UNICODE_RANGE *entry = gx_studio_nfc_quick_check_no_table; while (entry->gx_unicode_range_start) { if (code_point >= entry->gx_unicode_range_start && code_point <= entry->gx_unicode_range_end) { *return_type = GX_NORMALIZATION_FORM_NO; return GX_SUCCESS; } entry++; } entry = gx_studio_nfc_quick_check_maye_table; while (entry->gx_unicode_range_start) { if (code_point >= entry->gx_unicode_range_start && code_point <= entry->gx_unicode_range_end) { *return_type = GX_NORMALIZATION_FORM_MAYBE; return GX_SUCCESS; } entry++; } *return_type = GX_NORMALIZATION_FORM_YES; return GX_SUCCESS; } /**************************************************************************/ /* This function retrieves canonical decomposition map of specified */ /* code point. */ /**************************************************************************/ static UINT gx_studio_canonical_decompress_map_get(ULONG code_point, ULONG *maps) { GX_CANONICAL_DECOMPOSE_MAP *entry = gx_studio_canonical_decompose_maps; maps[0] = 0; maps[1] = 0; while (entry->gx_canonical_decompose_map_code) { if (code_point == entry->gx_canonical_decompose_map_code) { maps[0] = entry->gx_canonical_decompose_map[0]; maps[1] = entry->gx_canonical_decompose_map[1]; break; } else if (code_point < entry->gx_canonical_decompose_map_code) { break; } entry++; } return GX_SUCCESS; } /**************************************************************************/ /* This function retrieves the composed code point the specified */ /* decomposition map is correspond to. */ /**************************************************************************/ static UINT gx_studio_canonical_composed_code_get(ULONG map_a, ULONG map_b, ULONG *composed_code) { GX_CANONICAL_DECOMPOSE_MAP *entry = gx_studio_canonical_decompose_maps; while (entry->gx_canonical_decompose_map_code) { if (entry->gx_canonical_decompose_map[0] == map_a && entry->gx_canonical_decompose_map[1] == map_b) { *composed_code = entry->gx_canonical_decompose_map_code; return GX_SUCCESS; } entry++; } return GX_FAILURE; } /**************************************************************************/ /* This function retrieves canonical combining class of specified */ /* code point. */ /**************************************************************************/ static UINT gx_studio_canonical_combining_class_get(ULONG code_point, GX_UBYTE *class_value) { GX_CANONICAL_COMBINING_CLASS *entry = gx_studio_canonical_combining_class_table; *class_value = 0; while (entry->gx_canonical_combining_class_code) { if (code_point == entry->gx_canonical_combining_class_code) { *class_value = entry->gx_canonical_combining_class; break; } else if (code_point < entry->gx_canonical_combining_class_code) { break; } entry++; } return GX_SUCCESS; } /**************************************************************************/ /* This function quickly determines whether a string x is in a nfc */ /* normalization form. */ /**************************************************************************/ static UINT gx_studio_nfc_form_detect(GX_CONST GX_STRING *string, GX_UBYTE *return_code) { UINT ret; GX_CHAR_CODE code_point; GX_UBYTE last_canonical_class = 0; GX_UBYTE canonical_class; GX_UBYTE check; GX_STRING string_copy; *return_code = GX_NORMALIZATION_FORM_YES; string_copy = *string; while (string_copy.gx_string_length) { ret = _gx_utility_utf8_string_character_get(&string_copy, &code_point, GX_NULL); if ((ret != GX_SUCCESS) || (code_point == 0)) { return GX_FAILURE; } gx_studio_canonical_combining_class_get(code_point, &canonical_class); if (last_canonical_class > canonical_class && canonical_class != 0) { *return_code = GX_NORMALIZATION_FORM_NO; break; } gx_studio_nfc_quick_check(code_point, &check); if ((check == GX_NORMALIZATION_FORM_NO) || (check == GX_NORMALIZATION_FORM_MAYBE)) { *return_code = check; break; } last_canonical_class = canonical_class; } return GX_SUCCESS; } /**************************************************************************/ /* This function converts utf-8 string to unicode list. */ /**************************************************************************/ static UINT gx_studio_canonical_utf8_to_unicode(GX_CANONICAL_CONTEXT *context, GX_CONST GX_STRING *string) { GX_CHAR_CODE code_point; UINT ret; ULONG code_count = 0; GX_STRING string_copy = *string; while (string_copy.gx_string_length > 0) { ret = _gx_utility_utf8_string_character_get(&string_copy, &code_point, GX_NULL); if ((ret != GX_SUCCESS) || (code_point == 0)) { return GX_FAILURE; } code_count++; } context->gx_canonical_context_code_list = new ULONG[code_count]; if (!context->gx_canonical_context_code_list) { return GX_SYSTEM_MEMORY_ERROR; } context->gx_canonical_context_code_count = code_count; string_copy = *string; for (code_count = 0; code_count < context->gx_canonical_context_code_count; code_count++) { _gx_utility_utf8_string_character_get(&string_copy, &code_point, GX_NULL); context->gx_canonical_context_code_list[code_count] = code_point; } return GX_SUCCESS; } /**************************************************************************/ /* This function fully decomposes specified unicode list. */ /**************************************************************************/ static UINT gx_studio_unicode_canonical_decompress(GX_CANONICAL_CONTEXT *context, ULONG *code_list, UINT count, GX_BOOL testing) { UINT code_point; ULONG map[2]; UINT index; GX_CANONICAL_UNIT *unit; for (index = 0; index < count; index++) { code_point = code_list[index]; gx_studio_canonical_decompress_map_get(code_point, map); if (map[0]) { gx_studio_unicode_canonical_decompress(context, &map[0], 1, testing); if (map[1]) { gx_studio_unicode_canonical_decompress(context, &map[1], 1, testing); } } else { if (!testing) { unit = &context->gx_canonical_context_unit_list[context->gx_canonical_context_unit_count]; unit->gx_canonical_unit_code_point = code_point; gx_studio_canonical_combining_class_get(code_point, &unit->gx_canonical_unit_combining_class); } context->gx_canonical_context_unit_count++; } } return GX_SUCCESS; } /**************************************************************************/ /* This function fully decomposes the specified string. */ /**************************************************************************/ static UINT gx_studio_utf8_canonical_decompress(GX_CANONICAL_CONTEXT *context, GX_CONST GX_STRING *string) { UINT status; /* Convert utf8 string to unicode string. */ status = gx_studio_canonical_utf8_to_unicode(context, string); if (status == GX_SUCCESS) { /* Calculate the number of full decompressed unicode string. */ status = gx_studio_unicode_canonical_decompress(context, context->gx_canonical_context_code_list, context->gx_canonical_context_code_count, GX_TRUE); } if (status == GX_SUCCESS) { context->gx_canonical_context_unit_list = new GX_CANONICAL_UNIT[context->gx_canonical_context_unit_count]; if (!context->gx_canonical_context_unit_list) { status = GX_SYSTEM_MEMORY_ERROR; } } if (status == GX_SUCCESS) { context->gx_canonical_context_unit_count = 0; /* Process fully canonical decompress. */ status = gx_studio_unicode_canonical_decompress(context, context->gx_canonical_context_code_list, context->gx_canonical_context_code_count, GX_FALSE); } return status; } /**************************************************************************/ /* This function sorts the specified code list by combining class in */ /* ascending order. */ /**************************************************************************/ static UINT gx_studio_canonical_combining_class_sort(GX_CANONICAL_CONTEXT *context, UINT start_index, UINT end_index) { UINT index; GX_CANONICAL_UNIT temp; GX_CANONICAL_UNIT *unit_a; GX_CANONICAL_UNIT *unit_b; while (start_index < end_index) { for (index = start_index; index < end_index; index++) { unit_a = &context->gx_canonical_context_unit_list[index]; unit_b = &context->gx_canonical_context_unit_list[index + 1]; if (unit_a->gx_canonical_unit_combining_class > unit_b->gx_canonical_unit_combining_class) { /* swap reorderable pair. */ temp = *unit_a; *unit_a = *unit_b; *unit_b = temp; } } end_index--; } return GX_SUCCESS; } /**************************************************************************/ /* This function processes canonical ordering algorithm. */ /**************************************************************************/ static UINT gx_studio_canonical_ordering(GX_CANONICAL_CONTEXT *context) { UINT index; GX_CANONICAL_UNIT *unit; INT reorderable_count = 0; for (index = 0; index < context->gx_canonical_context_unit_count; index++) { unit = &context->gx_canonical_context_unit_list[index]; if (unit->gx_canonical_unit_combining_class) { reorderable_count++; } else { if (reorderable_count) { /* Reorder code point in ascending order. */ gx_studio_canonical_combining_class_sort(context, index - reorderable_count, index - 1); } reorderable_count = 0; } } if (reorderable_count) { /* Reorder code point in ascending order. */ gx_studio_canonical_combining_class_sort(context, index - reorderable_count, index - 1); } return GX_SUCCESS; } /**************************************************************************/ /* This function searches decomposition sequence that is equivalent to */ /* a primary composite, and replace the decomposition sequence with */ /* with the primary composition. */ /**************************************************************************/ static UINT gx_studio_canonical_equivalent_replace(GX_CANONICAL_CONTEXT *context, UINT C_index, UINT *L_index) { UINT index; GX_CANONICAL_UNIT *unit; GX_CANONICAL_UNIT *unit_C = &context->gx_canonical_context_unit_list[C_index]; ULONG replace_code; for (index = C_index - 1; index >= 0; index--) { unit = &context->gx_canonical_context_unit_list[index]; if (unit->gx_canonical_unit_combining_class == 0) { /* Seek back in the coded character sequence from the character C to find the last starter L preceding C in the character sequence. */ if (gx_studio_canonical_composed_code_get(unit->gx_canonical_unit_code_point, unit_C->gx_canonical_unit_code_point, &replace_code) == GX_SUCCESS) { /* If there is such and L, and C is not blocked from L. */ if (gx_studio_full_composition_exclusion_test(replace_code) == GX_FALSE) { /* If exists a primary composite P which is canonically equivalent to the sequence , replace L by P in the sequence and delete C from the sequence. */ unit->gx_canonical_unit_code_point = replace_code; if (C_index < context->gx_canonical_context_unit_count - 1) { memmove(context->gx_canonical_context_unit_list + C_index, context->gx_canonical_context_unit_list + C_index + 1, (context->gx_canonical_context_unit_count - C_index - 1) * sizeof(GX_CANONICAL_UNIT)); } context->gx_canonical_context_unit_count--; *L_index = index; return GX_SUCCESS; } } break; } else if (unit->gx_canonical_unit_combining_class >= unit_C->gx_canonical_unit_combining_class) { break; } } return GX_FAILURE; } /**************************************************************************/ /* This function processes canonical composition algorithm. */ /**************************************************************************/ UINT gx_studio_canonical_compose(GX_CANONICAL_CONTEXT *context) { UINT index; UINT L_index; GX_CANONICAL_UNIT *unit; for (index = 1; index < context->gx_canonical_context_unit_count; index++) { /* Start from the second character in the coded character sequence and proceeding sequentially to the final character. */ unit = &context->gx_canonical_context_unit_list[index]; if (gx_studio_canonical_equivalent_replace(context, index, &L_index) == GX_SUCCESS) { index = L_index; } } return GX_SUCCESS; } /**************************************************************************/ /* This function encodes normalized code point with UTF-8. */ /**************************************************************************/ static UINT gx_studio_unicode_string_to_utf8_string(GX_CANONICAL_CONTEXT *context, GX_STRING *normalized_string) { UINT index; UINT string_size = 0; UINT glyph_len; GX_UBYTE return_utf8_str[6]; GX_UBYTE *utf8_str; /* Calculate utf8 string size. */ for (index = 0; index < context->gx_canonical_context_unit_count; index++) { _gx_utility_unicode_to_utf8(context->gx_canonical_context_unit_list[index].gx_canonical_unit_code_point, return_utf8_str, &glyph_len); string_size += glyph_len; } utf8_str = new GX_UBYTE[string_size + 1]; string_size = 0; for (index = 0; index < context->gx_canonical_context_unit_count; index++) { _gx_utility_unicode_to_utf8(context->gx_canonical_context_unit_list[index].gx_canonical_unit_code_point, utf8_str + string_size, &glyph_len); string_size += glyph_len; } utf8_str[string_size] = '\0'; if (normalized_string) { normalized_string->gx_string_ptr = (GX_CONST GX_CHAR *)utf8_str; normalized_string->gx_string_length = string_size; } return GX_SUCCESS; } /**************************************************************************/ /* This function processes canonical composition after full canonical */ /* decomposition. */ /**************************************************************************/ UINT gx_studio_canonical_normalize(GX_CONST GX_STRING *string, GX_STRING *normalized_string) { UINT status = GX_SUCCESS; GX_CANONICAL_CONTEXT context; GX_UBYTE quick_check_result; memset(&context, 0, sizeof(GX_CANONICAL_CONTEXT)); status = gx_studio_nfc_form_detect(string, &quick_check_result); if (status == GX_SUCCESS) { if (quick_check_result == GX_NORMALIZATION_FORM_YES) { /* already in normalized form. */ return GX_NO_CHANGE; } /* Fully decompose the string. */ status = gx_studio_utf8_canonical_decompress(&context, string); } if (status == GX_SUCCESS) { /* Process canonical ordering algorithm. */ status = gx_studio_canonical_ordering(&context); } if (status == GX_SUCCESS) { /* Process canonical composition algorithm.*/ status = gx_studio_canonical_compose(&context); } if (status == GX_SUCCESS) { /* Convert unicode to utf8 string. */ status = gx_studio_unicode_string_to_utf8_string(&context, normalized_string); } if (context.gx_canonical_context_code_list) { delete []context.gx_canonical_context_code_list; } if (context.gx_canonical_context_unit_list) { delete []context.gx_canonical_context_unit_list; } return status; }