create an analogue to rune/compose. this is ment to be useful when interacting with other systems. Reference: /n/atom/patch/applied2013/runedecomp Date: Fri Jun 14 17:18:55 CES 2013 Signed-off-by: quanstro@quanstro.net --- /sys/src/libc/port/mkfile Fri Jun 14 17:17:40 2013 +++ /sys/src/libc/port/mkfile Fri Jun 14 17:17:41 2013 @@ -63,6 +63,7 @@ rune.c\ runecompose.c\ runeclass.c\ + runedecompose.c\ runestrcat.c\ runestrchr.c\ runestrcmp.c\ --- /sys/src/cmd/runetype/mkfile Fri Jun 14 17:17:42 2013 +++ /sys/src/cmd/runetype/mkfile Fri Jun 14 17:17:42 2013 @@ -13,6 +13,7 @@ tobaserune.h\ runeclass.h\ runecompose.h\ + runedecompose.h\ L=unicode\ @@ -20,6 +21,7 @@ block\ case\ compose\ + decompose\ fold\ unfold\ type\ --- /sys/man/1/rune Fri Jun 14 17:17:43 2013 +++ /sys/man/1/rune Fri Jun 14 17:17:43 2013 @@ -17,6 +17,13 @@ .I file ... ] .br +.B rune/decompose +[ +.B -u +] [ +.I file ... +] +.br .B rune/fold [ .B -i @@ -61,6 +68,15 @@ .I compose combines base codepoints with any following combining codepoints. +.I Decompose +is its inverse. The +.B -u +flag emits the combining characters with +.B "\\\\u" +or +.B "\\\\U" +escapes, suitable for conversion with +.IR uconv . .I Fold converts codepoints to their base codepoint, esentially stripping combining characters while --- /sys/man/2/runeclass Fri Jun 14 17:17:44 2013 +++ /sys/man/2/runeclass Fri Jun 14 17:17:45 2013 @@ -1,6 +1,6 @@ .TH RUNECLASS 2 .SH NAME -runeclass, runecompose \- Unicode character equivalence +runeclass, runecompose. runedecompose\- Unicode character equivalence .SH SYNOPSIS .B #include .br @@ -11,9 +11,12 @@ .PP .B int runecompose(Rune base, Rune combiner) +.PP +.B +int runedecompose(Rune base, Rune *decomp) .SH DESCRIPTION These routines use codepoint properties from the Unicode standard to -combine and determine sets of characters with the same base character. +combine, decompose and determine sets of characters with the same base character. The set of codepoints with the same base codepoint are a generalization of the equivilence between various cases such as title, lower an upper: .I runeclass @@ -25,7 +28,19 @@ For example .IP .EX - echo e\\u0308 | rune/uconv | rune/compose +echo e\\u0308 | rune/uconv | rune/compose +.EE +.PP +Conversely, +.I runedecompose +returns 0 and the base codepoint and the first combining codepoint. +If there is no further decomposition, -1 is returned. +Multiple calls may be necessary for a full decomposition. +For example, codepoint 1e65 is “latin small letter s with acute and dot above” +.IP +.EX +; unicode 0x1e65 | rune/decompose -u +s\\u0301\\u0307 .EE .SH "SEE ALSO .IR grep (1) , --- /sys/src/libc/port/runedecompose.c Thu Jan 1 00:00:00 1970 +++ /sys/src/libc/port/runedecompose.c Fri Jun 14 17:17:45 2013 @@ -0,0 +1,66 @@ +#include +#include +#include "runedecompose.h" + +static uint* +bsearch32(uint c, uint *t, int n, int ne) +{ + uint *p; + int m; + + while(n > 1) { + m = n/2; + p = t + m*ne; + if(c >= p[0]) { + t = p; + n = n-m; + } else + n = m; + } + if(n && c == t[0]) + return t; + return 0; +} + +static uvlong* +bsearch64(uvlong c, uvlong *t, int n, int ne) +{ + uvlong *p; + int m; + + while(n > 1) { + m = n/2; + p = t + m*ne; + if(c >= p[0]) { + t = p; + n = n-m; + } else + n = m; + } + if(n && c == t[0]) + return t; + return 0; +} + +int +runedecompose(Rune a, Rune *d) +{ + uint *p; + uvlong *q; + + if(a <= 0xffff){ + p = bsearch32(a, __decompose2, nelem(__decompose2)/2, 2); + if(p){ + d[0] = p[1] >> 16; + d[1] = p[1] & 0xffff; + return 0; + } + } + q = bsearch64(a, __decompose264, nelem(__decompose264)/2, 2); + if(q){ + d[0] = q[1] >> 32; + d[1] = q[1] & 0xfffffff; + return 0; + } + return -1; +} --- /sys/src/libc/port/runedecompose.h Thu Jan 1 00:00:00 1970 +++ /sys/src/libc/port/runedecompose.h Fri Jun 14 17:17:47 2013 @@ -0,0 +1,1028 @@ +static +uint __decompose2[] = +{ + 0x00c0, 0x00410300, /* À -> A 0300 */ + 0x00c1, 0x00410301, /* Á -> A 0301 */ + 0x00c2, 0x00410302, /* Â -> A 0302 */ + 0x00c3, 0x00410303, /* Ã -> A 0303 */ + 0x00c4, 0x00410308, /* Ä -> A 0308 */ + 0x00c5, 0x0041030a, /* Å -> A 030a */ + 0x00c7, 0x00430327, /* Ç -> C 0327 */ + 0x00c8, 0x00450300, /* È -> E 0300 */ + 0x00c9, 0x00450301, /* É -> E 0301 */ + 0x00ca, 0x00450302, /* Ê -> E 0302 */ + 0x00cb, 0x00450308, /* Ë -> E 0308 */ + 0x00cc, 0x00490300, /* Ì -> I 0300 */ + 0x00cd, 0x00490301, /* Í -> I 0301 */ + 0x00ce, 0x00490302, /* Î -> I 0302 */ + 0x00cf, 0x00490308, /* Ï -> I 0308 */ + 0x00d1, 0x004e0303, /* Ñ -> N 0303 */ + 0x00d2, 0x004f0300, /* Ò -> O 0300 */ + 0x00d3, 0x004f0301, /* Ó -> O 0301 */ + 0x00d4, 0x004f0302, /* Ô -> O 0302 */ + 0x00d5, 0x004f0303, /* Õ -> O 0303 */ + 0x00d6, 0x004f0308, /* Ö -> O 0308 */ + 0x00d9, 0x00550300, /* Ù -> U 0300 */ + 0x00da, 0x00550301, /* Ú -> U 0301 */ + 0x00db, 0x00550302, /* Û -> U 0302 */ + 0x00dc, 0x00550308, /* Ü -> U 0308 */ + 0x00dd, 0x00590301, /* Ý -> Y 0301 */ + 0x00e0, 0x00610300, /* à -> a 0300 */ + 0x00e1, 0x00610301, /* á -> a 0301 */ + 0x00e2, 0x00610302, /* â -> a 0302 */ + 0x00e3, 0x00610303, /* ã -> a 0303 */ + 0x00e4, 0x00610308, /* ä -> a 0308 */ + 0x00e5, 0x0061030a, /* å -> a 030a */ + 0x00e7, 0x00630327, /* ç -> c 0327 */ + 0x00e8, 0x00650300, /* è -> e 0300 */ + 0x00e9, 0x00650301, /* é -> e 0301 */ + 0x00ea, 0x00650302, /* ê -> e 0302 */ + 0x00eb, 0x00650308, /* ë -> e 0308 */ + 0x00ec, 0x00690300, /* ì -> i 0300 */ + 0x00ed, 0x00690301, /* í -> i 0301 */ + 0x00ee, 0x00690302, /* î -> i 0302 */ + 0x00ef, 0x00690308, /* ï -> i 0308 */ + 0x00f1, 0x006e0303, /* ñ -> n 0303 */ + 0x00f2, 0x006f0300, /* ò -> o 0300 */ + 0x00f3, 0x006f0301, /* ó -> o 0301 */ + 0x00f4, 0x006f0302, /* ô -> o 0302 */ + 0x00f5, 0x006f0303, /* õ -> o 0303 */ + 0x00f6, 0x006f0308, /* ö -> o 0308 */ + 0x00f9, 0x00750300, /* ù -> u 0300 */ + 0x00fa, 0x00750301, /* ú -> u 0301 */ + 0x00fb, 0x00750302, /* û -> u 0302 */ + 0x00fc, 0x00750308, /* ü -> u 0308 */ + 0x00fd, 0x00790301, /* ý -> y 0301 */ + 0x00ff, 0x00790308, /* ÿ -> y 0308 */ + 0x0100, 0x00410304, /* Ā -> A 0304 */ + 0x0101, 0x00610304, /* ā -> a 0304 */ + 0x0102, 0x00410306, /* Ă -> A 0306 */ + 0x0103, 0x00610306, /* ă -> a 0306 */ + 0x0104, 0x00410328, /* Ą -> A 0328 */ + 0x0105, 0x00610328, /* ą -> a 0328 */ + 0x0106, 0x00430301, /* Ć -> C 0301 */ + 0x0107, 0x00630301, /* ć -> c 0301 */ + 0x0108, 0x00430302, /* Ĉ -> C 0302 */ + 0x0109, 0x00630302, /* ĉ -> c 0302 */ + 0x010a, 0x00430307, /* Ċ -> C 0307 */ + 0x010b, 0x00630307, /* ċ -> c 0307 */ + 0x010c, 0x0043030c, /* Č -> C 030c */ + 0x010d, 0x0063030c, /* č -> c 030c */ + 0x010e, 0x0044030c, /* Ď -> D 030c */ + 0x010f, 0x0064030c, /* ď -> d 030c */ + 0x0112, 0x00450304, /* Ē -> E 0304 */ + 0x0113, 0x00650304, /* ē -> e 0304 */ + 0x0114, 0x00450306, /* Ĕ -> E 0306 */ + 0x0115, 0x00650306, /* ĕ -> e 0306 */ + 0x0116, 0x00450307, /* Ė -> E 0307 */ + 0x0117, 0x00650307, /* ė -> e 0307 */ + 0x0118, 0x00450328, /* Ę -> E 0328 */ + 0x0119, 0x00650328, /* ę -> e 0328 */ + 0x011a, 0x0045030c, /* Ě -> E 030c */ + 0x011b, 0x0065030c, /* ě -> e 030c */ + 0x011c, 0x00470302, /* Ĝ -> G 0302 */ + 0x011d, 0x00670302, /* ĝ -> g 0302 */ + 0x011e, 0x00470306, /* Ğ -> G 0306 */ + 0x011f, 0x00670306, /* ğ -> g 0306 */ + 0x0120, 0x00470307, /* Ġ -> G 0307 */ + 0x0121, 0x00670307, /* ġ -> g 0307 */ + 0x0122, 0x00470327, /* Ģ -> G 0327 */ + 0x0123, 0x00670327, /* ģ -> g 0327 */ + 0x0124, 0x00480302, /* Ĥ -> H 0302 */ + 0x0125, 0x00680302, /* ĥ -> h 0302 */ + 0x0128, 0x00490303, /* Ĩ -> I 0303 */ + 0x0129, 0x00690303, /* ĩ -> i 0303 */ + 0x012a, 0x00490304, /* Ī -> I 0304 */ + 0x012b, 0x00690304, /* ī -> i 0304 */ + 0x012c, 0x00490306, /* Ĭ -> I 0306 */ + 0x012d, 0x00690306, /* ĭ -> i 0306 */ + 0x012e, 0x00490328, /* Į -> I 0328 */ + 0x012f, 0x00690328, /* į -> i 0328 */ + 0x0130, 0x00490307, /* İ -> I 0307 */ + 0x0134, 0x004a0302, /* Ĵ -> J 0302 */ + 0x0135, 0x006a0302, /* ĵ -> j 0302 */ + 0x0136, 0x004b0327, /* Ķ -> K 0327 */ + 0x0137, 0x006b0327, /* ķ -> k 0327 */ + 0x0139, 0x004c0301, /* Ĺ -> L 0301 */ + 0x013a, 0x006c0301, /* ĺ -> l 0301 */ + 0x013b, 0x004c0327, /* Ļ -> L 0327 */ + 0x013c, 0x006c0327, /* ļ -> l 0327 */ + 0x013d, 0x004c030c, /* Ľ -> L 030c */ + 0x013e, 0x006c030c, /* ľ -> l 030c */ + 0x0143, 0x004e0301, /* Ń -> N 0301 */ + 0x0144, 0x006e0301, /* ń -> n 0301 */ + 0x0145, 0x004e0327, /* Ņ -> N 0327 */ + 0x0146, 0x006e0327, /* ņ -> n 0327 */ + 0x0147, 0x004e030c, /* Ň -> N 030c */ + 0x0148, 0x006e030c, /* ň -> n 030c */ + 0x014c, 0x004f0304, /* Ō -> O 0304 */ + 0x014d, 0x006f0304, /* ō -> o 0304 */ + 0x014e, 0x004f0306, /* Ŏ -> O 0306 */ + 0x014f, 0x006f0306, /* ŏ -> o 0306 */ + 0x0150, 0x004f030b, /* Ő -> O 030b */ + 0x0151, 0x006f030b, /* ő -> o 030b */ + 0x0154, 0x00520301, /* Ŕ -> R 0301 */ + 0x0155, 0x00720301, /* ŕ -> r 0301 */ + 0x0156, 0x00520327, /* Ŗ -> R 0327 */ + 0x0157, 0x00720327, /* ŗ -> r 0327 */ + 0x0158, 0x0052030c, /* Ř -> R 030c */ + 0x0159, 0x0072030c, /* ř -> r 030c */ + 0x015a, 0x00530301, /* Ś -> S 0301 */ + 0x015b, 0x00730301, /* ś -> s 0301 */ + 0x015c, 0x00530302, /* Ŝ -> S 0302 */ + 0x015d, 0x00730302, /* ŝ -> s 0302 */ + 0x015e, 0x00530327, /* Ş -> S 0327 */ + 0x015f, 0x00730327, /* ş -> s 0327 */ + 0x0160, 0x0053030c, /* Š -> S 030c */ + 0x0161, 0x0073030c, /* š -> s 030c */ + 0x0162, 0x00540327, /* Ţ -> T 0327 */ + 0x0163, 0x00740327, /* ţ -> t 0327 */ + 0x0164, 0x0054030c, /* Ť -> T 030c */ + 0x0165, 0x0074030c, /* ť -> t 030c */ + 0x0168, 0x00550303, /* Ũ -> U 0303 */ + 0x0169, 0x00750303, /* ũ -> u 0303 */ + 0x016a, 0x00550304, /* Ū -> U 0304 */ + 0x016b, 0x00750304, /* ū -> u 0304 */ + 0x016c, 0x00550306, /* Ŭ -> U 0306 */ + 0x016d, 0x00750306, /* ŭ -> u 0306 */ + 0x016e, 0x0055030a, /* Ů -> U 030a */ + 0x016f, 0x0075030a, /* ů -> u 030a */ + 0x0170, 0x0055030b, /* Ű -> U 030b */ + 0x0171, 0x0075030b, /* ű -> u 030b */ + 0x0172, 0x00550328, /* Ų -> U 0328 */ + 0x0173, 0x00750328, /* ų -> u 0328 */ + 0x0174, 0x00570302, /* Ŵ -> W 0302 */ + 0x0175, 0x00770302, /* ŵ -> w 0302 */ + 0x0176, 0x00590302, /* Ŷ -> Y 0302 */ + 0x0177, 0x00790302, /* ŷ -> y 0302 */ + 0x0178, 0x00590308, /* Ÿ -> Y 0308 */ + 0x0179, 0x005a0301, /* Ź -> Z 0301 */ + 0x017a, 0x007a0301, /* ź -> z 0301 */ + 0x017b, 0x005a0307, /* Ż -> Z 0307 */ + 0x017c, 0x007a0307, /* ż -> z 0307 */ + 0x017d, 0x005a030c, /* Ž -> Z 030c */ + 0x017e, 0x007a030c, /* ž -> z 030c */ + 0x01a0, 0x004f031b, /* Ơ -> O 031b */ + 0x01a1, 0x006f031b, /* ơ -> o 031b */ + 0x01af, 0x0055031b, /* Ư -> U 031b */ + 0x01b0, 0x0075031b, /* ư -> u 031b */ + 0x01cd, 0x0041030c, /* Ǎ -> A 030c */ + 0x01ce, 0x0061030c, /* ǎ -> a 030c */ + 0x01cf, 0x0049030c, /* Ǐ -> I 030c */ + 0x01d0, 0x0069030c, /* ǐ -> i 030c */ + 0x01d1, 0x004f030c, /* Ǒ -> O 030c */ + 0x01d2, 0x006f030c, /* ǒ -> o 030c */ + 0x01d3, 0x0055030c, /* Ǔ -> U 030c */ + 0x01d4, 0x0075030c, /* ǔ -> u 030c */ + 0x01d5, 0x00dc0304, /* Ǖ -> Ü 0304 */ + 0x01d6, 0x00fc0304, /* ǖ -> ü 0304 */ + 0x01d7, 0x00dc0301, /* Ǘ -> Ü 0301 */ + 0x01d8, 0x00fc0301, /* ǘ -> ü 0301 */ + 0x01d9, 0x00dc030c, /* Ǚ -> Ü 030c */ + 0x01da, 0x00fc030c, /* ǚ -> ü 030c */ + 0x01db, 0x00dc0300, /* Ǜ -> Ü 0300 */ + 0x01dc, 0x00fc0300, /* ǜ -> ü 0300 */ + 0x01de, 0x00c40304, /* Ǟ -> Ä 0304 */ + 0x01df, 0x00e40304, /* ǟ -> ä 0304 */ + 0x01e0, 0x02260304, /* Ǡ -> Ȧ 0304 */ + 0x01e1, 0x02270304, /* ǡ -> ȧ 0304 */ + 0x01e2, 0x00c60304, /* Ǣ -> Æ 0304 */ + 0x01e3, 0x00e60304, /* ǣ -> æ 0304 */ + 0x01e6, 0x0047030c, /* Ǧ -> G 030c */ + 0x01e7, 0x0067030c, /* ǧ -> g 030c */ + 0x01e8, 0x004b030c, /* Ǩ -> K 030c */ + 0x01e9, 0x006b030c, /* ǩ -> k 030c */ + 0x01ea, 0x004f0328, /* Ǫ -> O 0328 */ + 0x01eb, 0x006f0328, /* ǫ -> o 0328 */ + 0x01ec, 0x01ea0304, /* Ǭ -> Ǫ 0304 */ + 0x01ed, 0x01eb0304, /* ǭ -> ǫ 0304 */ + 0x01ee, 0x01b7030c, /* Ǯ -> Ʒ 030c */ + 0x01ef, 0x0292030c, /* ǯ -> ʒ 030c */ + 0x01f0, 0x006a030c, /* ǰ -> j 030c */ + 0x01f4, 0x00470301, /* Ǵ -> G 0301 */ + 0x01f5, 0x00670301, /* ǵ -> g 0301 */ + 0x01f8, 0x004e0300, /* Ǹ -> N 0300 */ + 0x01f9, 0x006e0300, /* ǹ -> n 0300 */ + 0x01fa, 0x00c50301, /* Ǻ -> Å 0301 */ + 0x01fb, 0x00e50301, /* ǻ -> å 0301 */ + 0x01fc, 0x00c60301, /* Ǽ -> Æ 0301 */ + 0x01fd, 0x00e60301, /* ǽ -> æ 0301 */ + 0x01fe, 0x00d80301, /* Ǿ -> Ø 0301 */ + 0x01ff, 0x00f80301, /* ǿ -> ø 0301 */ + 0x0200, 0x0041030f, /* Ȁ -> A 030f */ + 0x0201, 0x0061030f, /* ȁ -> a 030f */ + 0x0202, 0x00410311, /* Ȃ -> A 0311 */ + 0x0203, 0x00610311, /* ȃ -> a 0311 */ + 0x0204, 0x0045030f, /* Ȅ -> E 030f */ + 0x0205, 0x0065030f, /* ȅ -> e 030f */ + 0x0206, 0x00450311, /* Ȇ -> E 0311 */ + 0x0207, 0x00650311, /* ȇ -> e 0311 */ + 0x0208, 0x0049030f, /* Ȉ -> I 030f */ + 0x0209, 0x0069030f, /* ȉ -> i 030f */ + 0x020a, 0x00490311, /* Ȋ -> I 0311 */ + 0x020b, 0x00690311, /* ȋ -> i 0311 */ + 0x020c, 0x004f030f, /* Ȍ -> O 030f */ + 0x020d, 0x006f030f, /* ȍ -> o 030f */ + 0x020e, 0x004f0311, /* Ȏ -> O 0311 */ + 0x020f, 0x006f0311, /* ȏ -> o 0311 */ + 0x0210, 0x0052030f, /* Ȑ -> R 030f */ + 0x0211, 0x0072030f, /* ȑ -> r 030f */ + 0x0212, 0x00520311, /* Ȓ -> R 0311 */ + 0x0213, 0x00720311, /* ȓ -> r 0311 */ + 0x0214, 0x0055030f, /* Ȕ -> U 030f */ + 0x0215, 0x0075030f, /* ȕ -> u 030f */ + 0x0216, 0x00550311, /* Ȗ -> U 0311 */ + 0x0217, 0x00750311, /* ȗ -> u 0311 */ + 0x0218, 0x00530326, /* Ș -> S 0326 */ + 0x0219, 0x00730326, /* ș -> s 0326 */ + 0x021a, 0x00540326, /* Ț -> T 0326 */ + 0x021b, 0x00740326, /* ț -> t 0326 */ + 0x021e, 0x0048030c, /* Ȟ -> H 030c */ + 0x021f, 0x0068030c, /* ȟ -> h 030c */ + 0x0226, 0x00410307, /* Ȧ -> A 0307 */ + 0x0227, 0x00610307, /* ȧ -> a 0307 */ + 0x0228, 0x00450327, /* Ȩ -> E 0327 */ + 0x0229, 0x00650327, /* ȩ -> e 0327 */ + 0x022a, 0x00d60304, /* Ȫ -> Ö 0304 */ + 0x022b, 0x00f60304, /* ȫ -> ö 0304 */ + 0x022c, 0x00d50304, /* Ȭ -> Õ 0304 */ + 0x022d, 0x00f50304, /* ȭ -> õ 0304 */ + 0x022e, 0x004f0307, /* Ȯ -> O 0307 */ + 0x022f, 0x006f0307, /* ȯ -> o 0307 */ + 0x0230, 0x022e0304, /* Ȱ -> Ȯ 0304 */ + 0x0231, 0x022f0304, /* ȱ -> ȯ 0304 */ + 0x0232, 0x00590304, /* Ȳ -> Y 0304 */ + 0x0233, 0x00790304, /* ȳ -> y 0304 */ + 0x0344, 0x03080301, /* ̈́ -> ̈ 0301 */ + 0x0385, 0x00a80301, /* ΅ -> ¨ 0301 */ + 0x0386, 0x03910301, /* Ά -> Α 0301 */ + 0x0388, 0x03950301, /* Έ -> Ε 0301 */ + 0x0389, 0x03970301, /* Ή -> Η 0301 */ + 0x038a, 0x03990301, /* Ί -> Ι 0301 */ + 0x038c, 0x039f0301, /* Ό -> Ο 0301 */ + 0x038e, 0x03a50301, /* Ύ -> Υ 0301 */ + 0x038f, 0x03a90301, /* Ώ -> Ω 0301 */ + 0x0390, 0x03ca0301, /* ΐ -> ϊ 0301 */ + 0x03aa, 0x03990308, /* Ϊ -> Ι 0308 */ + 0x03ab, 0x03a50308, /* Ϋ -> Υ 0308 */ + 0x03ac, 0x03b10301, /* ά -> α 0301 */ + 0x03ad, 0x03b50301, /* έ -> ε 0301 */ + 0x03ae, 0x03b70301, /* ή -> η 0301 */ + 0x03af, 0x03b90301, /* ί -> ι 0301 */ + 0x03b0, 0x03cb0301, /* ΰ -> ϋ 0301 */ + 0x03ca, 0x03b90308, /* ϊ -> ι 0308 */ + 0x03cb, 0x03c50308, /* ϋ -> υ 0308 */ + 0x03cc, 0x03bf0301, /* ό -> ο 0301 */ + 0x03cd, 0x03c50301, /* ύ -> υ 0301 */ + 0x03ce, 0x03c90301, /* ώ -> ω 0301 */ + 0x03d3, 0x03d20301, /* ϓ -> ϒ 0301 */ + 0x03d4, 0x03d20308, /* ϔ -> ϒ 0308 */ + 0x0400, 0x04150300, /* Ѐ -> Е 0300 */ + 0x0401, 0x04150308, /* Ё -> Е 0308 */ + 0x0403, 0x04130301, /* Ѓ -> Г 0301 */ + 0x0407, 0x04060308, /* Ї -> І 0308 */ + 0x040c, 0x041a0301, /* Ќ -> К 0301 */ + 0x040d, 0x04180300, /* Ѝ -> И 0300 */ + 0x040e, 0x04230306, /* Ў -> У 0306 */ + 0x0419, 0x04180306, /* Й -> И 0306 */ + 0x0439, 0x04380306, /* й -> и 0306 */ + 0x0450, 0x04350300, /* ѐ -> е 0300 */ + 0x0451, 0x04350308, /* ё -> е 0308 */ + 0x0453, 0x04330301, /* ѓ -> г 0301 */ + 0x0457, 0x04560308, /* ї -> і 0308 */ + 0x045c, 0x043a0301, /* ќ -> к 0301 */ + 0x045d, 0x04380300, /* ѝ -> и 0300 */ + 0x045e, 0x04430306, /* ў -> у 0306 */ + 0x0476, 0x0474030f, /* Ѷ -> Ѵ 030f */ + 0x0477, 0x0475030f, /* ѷ -> ѵ 030f */ + 0x04c1, 0x04160306, /* Ӂ -> Ж 0306 */ + 0x04c2, 0x04360306, /* ӂ -> ж 0306 */ + 0x04d0, 0x04100306, /* Ӑ -> А 0306 */ + 0x04d1, 0x04300306, /* ӑ -> а 0306 */ + 0x04d2, 0x04100308, /* Ӓ -> А 0308 */ + 0x04d3, 0x04300308, /* ӓ -> а 0308 */ + 0x04d6, 0x04150306, /* Ӗ -> Е 0306 */ + 0x04d7, 0x04350306, /* ӗ -> е 0306 */ + 0x04da, 0x04d80308, /* Ӛ -> Ә 0308 */ + 0x04db, 0x04d90308, /* ӛ -> ә 0308 */ + 0x04dc, 0x04160308, /* Ӝ -> Ж 0308 */ + 0x04dd, 0x04360308, /* ӝ -> ж 0308 */ + 0x04de, 0x04170308, /* Ӟ -> З 0308 */ + 0x04df, 0x04370308, /* ӟ -> з 0308 */ + 0x04e2, 0x04180304, /* Ӣ -> И 0304 */ + 0x04e3, 0x04380304, /* ӣ -> и 0304 */ + 0x04e4, 0x04180308, /* Ӥ -> И 0308 */ + 0x04e5, 0x04380308, /* ӥ -> и 0308 */ + 0x04e6, 0x041e0308, /* Ӧ -> О 0308 */ + 0x04e7, 0x043e0308, /* ӧ -> о 0308 */ + 0x04ea, 0x04e80308, /* Ӫ -> Ө 0308 */ + 0x04eb, 0x04e90308, /* ӫ -> ө 0308 */ + 0x04ec, 0x042d0308, /* Ӭ -> Э 0308 */ + 0x04ed, 0x044d0308, /* ӭ -> э 0308 */ + 0x04ee, 0x04230304, /* Ӯ -> У 0304 */ + 0x04ef, 0x04430304, /* ӯ -> у 0304 */ + 0x04f0, 0x04230308, /* Ӱ -> У 0308 */ + 0x04f1, 0x04430308, /* ӱ -> у 0308 */ + 0x04f2, 0x0423030b, /* Ӳ -> У 030b */ + 0x04f3, 0x0443030b, /* ӳ -> у 030b */ + 0x04f4, 0x04270308, /* Ӵ -> Ч 0308 */ + 0x04f5, 0x04470308, /* ӵ -> ч 0308 */ + 0x04f8, 0x042b0308, /* Ӹ -> Ы 0308 */ + 0x04f9, 0x044b0308, /* ӹ -> ы 0308 */ + 0x0622, 0x06270653, /* آ -> ا 0653 */ + 0x0623, 0x06270654, /* أ -> ا 0654 */ + 0x0624, 0x06480654, /* ؤ -> و 0654 */ + 0x0625, 0x06270655, /* إ -> ا 0655 */ + 0x0626, 0x064a0654, /* ئ -> ي 0654 */ + 0x06c0, 0x06d50654, /* ۀ -> ە 0654 */ + 0x06c2, 0x06c10654, /* ۂ -> ہ 0654 */ + 0x06d3, 0x06d20654, /* ۓ -> ے 0654 */ + 0x0929, 0x0928093c, /* ऩ -> न 093c */ + 0x0931, 0x0930093c, /* ऱ -> र 093c */ + 0x0934, 0x0933093c, /* ऴ -> ळ 093c */ + 0x0958, 0x0915093c, /* क़ -> क 093c */ + 0x0959, 0x0916093c, /* ख़ -> ख 093c */ + 0x095a, 0x0917093c, /* ग़ -> ग 093c */ + 0x095b, 0x091c093c, /* ज़ -> ज 093c */ + 0x095c, 0x0921093c, /* ड़ -> ड 093c */ + 0x095d, 0x0922093c, /* ढ़ -> ढ 093c */ + 0x095e, 0x092b093c, /* फ़ -> फ 093c */ + 0x095f, 0x092f093c, /* य़ -> य 093c */ + 0x09cb, 0x09c709be, /* ো -> ে 09be */ + 0x09cc, 0x09c709d7, /* ৌ -> ে 09d7 */ + 0x09dc, 0x09a109bc, /* ড় -> ড 09bc */ + 0x09dd, 0x09a209bc, /* ঢ় -> ঢ 09bc */ + 0x09df, 0x09af09bc, /* য় -> য 09bc */ + 0x0a33, 0x0a320a3c, /* ਲ਼ -> ਲ 0a3c */ + 0x0a36, 0x0a380a3c, /* ਸ਼ -> ਸ 0a3c */ + 0x0a59, 0x0a160a3c, /* ਖ਼ -> ਖ 0a3c */ + 0x0a5a, 0x0a170a3c, /* ਗ਼ -> ਗ 0a3c */ + 0x0a5b, 0x0a1c0a3c, /* ਜ਼ -> ਜ 0a3c */ + 0x0a5e, 0x0a2b0a3c, /* ਫ਼ -> ਫ 0a3c */ + 0x0b48, 0x0b470b56, /* ୈ -> େ 0b56 */ + 0x0b4b, 0x0b470b3e, /* ୋ -> େ 0b3e */ + 0x0b4c, 0x0b470b57, /* ୌ -> େ 0b57 */ + 0x0b5c, 0x0b210b3c, /* ଡ଼ -> ଡ 0b3c */ + 0x0b5d, 0x0b220b3c, /* ଢ଼ -> ଢ 0b3c */ + 0x0b94, 0x0b920bd7, /* ஔ -> ஒ 0bd7 */ + 0x0bca, 0x0bc60bbe, /* ொ -> ெ 0bbe */ + 0x0bcb, 0x0bc70bbe, /* ோ -> ே 0bbe */ + 0x0bcc, 0x0bc60bd7, /* ௌ -> ெ 0bd7 */ + 0x0c48, 0x0c460c56, /* ై -> ె 0c56 */ + 0x0cc0, 0x0cbf0cd5, /* ೀ -> ಿ 0cd5 */ + 0x0cc7, 0x0cc60cd5, /* ೇ -> ೆ 0cd5 */ + 0x0cc8, 0x0cc60cd6, /* ೈ -> ೆ 0cd6 */ + 0x0cca, 0x0cc60cc2, /* ೊ -> ೆ 0cc2 */ + 0x0ccb, 0x0cca0cd5, /* ೋ -> ೊ 0cd5 */ + 0x0d4a, 0x0d460d3e, /* ൊ -> െ 0d3e */ + 0x0d4b, 0x0d470d3e, /* ോ -> േ 0d3e */ + 0x0d4c, 0x0d460d57, /* ൌ -> െ 0d57 */ + 0x0dda, 0x0dd90dca, /* ේ -> ෙ 0dca */ + 0x0ddc, 0x0dd90dcf, /* ො -> ෙ 0dcf */ + 0x0ddd, 0x0ddc0dca, /* ෝ -> ො 0dca */ + 0x0dde, 0x0dd90ddf, /* ෞ -> ෙ 0ddf */ + 0x0f43, 0x0f420fb7, /* གྷ -> ག 0fb7 */ + 0x0f4d, 0x0f4c0fb7, /* ཌྷ -> ཌ 0fb7 */ + 0x0f52, 0x0f510fb7, /* དྷ -> ད 0fb7 */ + 0x0f57, 0x0f560fb7, /* བྷ -> བ 0fb7 */ + 0x0f5c, 0x0f5b0fb7, /* ཛྷ -> ཛ 0fb7 */ + 0x0f69, 0x0f400fb5, /* ཀྵ -> ཀ 0fb5 */ + 0x0f73, 0x0f710f72, /* ཱི -> ཱ 0f72 */ + 0x0f75, 0x0f710f74, /* ཱུ -> ཱ 0f74 */ + 0x0f76, 0x0fb20f80, /* ྲྀ -> ྲ 0f80 */ + 0x0f78, 0x0fb30f80, /* ླྀ -> ླ 0f80 */ + 0x0f81, 0x0f710f80, /* ཱྀ -> ཱ 0f80 */ + 0x0f93, 0x0f920fb7, /* ྒྷ -> ྒ 0fb7 */ + 0x0f9d, 0x0f9c0fb7, /* ྜྷ -> ྜ 0fb7 */ + 0x0fa2, 0x0fa10fb7, /* ྡྷ -> ྡ 0fb7 */ + 0x0fa7, 0x0fa60fb7, /* ྦྷ -> ྦ 0fb7 */ + 0x0fac, 0x0fab0fb7, /* ྫྷ -> ྫ 0fb7 */ + 0x0fb9, 0x0f900fb5, /* ྐྵ -> ྐ 0fb5 */ + 0x1026, 0x1025102e, /* ဦ -> ဥ 102e */ + 0x1b06, 0x1b051b35, /* ᬆ -> ᬅ 1b35 */ + 0x1b08, 0x1b071b35, /* ᬈ -> ᬇ 1b35 */ + 0x1b0a, 0x1b091b35, /* ᬊ -> ᬉ 1b35 */ + 0x1b0c, 0x1b0b1b35, /* ᬌ -> ᬋ 1b35 */ + 0x1b0e, 0x1b0d1b35, /* ᬎ -> ᬍ 1b35 */ + 0x1b12, 0x1b111b35, /* ᬒ -> ᬑ 1b35 */ + 0x1b3b, 0x1b3a1b35, /* ᬻ -> ᬺ 1b35 */ + 0x1b3d, 0x1b3c1b35, /* ᬽ -> ᬼ 1b35 */ + 0x1b40, 0x1b3e1b35, /* ᭀ -> ᬾ 1b35 */ + 0x1b41, 0x1b3f1b35, /* ᭁ -> ᬿ 1b35 */ + 0x1b43, 0x1b421b35, /* ᭃ -> ᭂ 1b35 */ + 0x1e00, 0x00410325, /* Ḁ -> A 0325 */ + 0x1e01, 0x00610325, /* ḁ -> a 0325 */ + 0x1e02, 0x00420307, /* Ḃ -> B 0307 */ + 0x1e03, 0x00620307, /* ḃ -> b 0307 */ + 0x1e04, 0x00420323, /* Ḅ -> B 0323 */ + 0x1e05, 0x00620323, /* ḅ -> b 0323 */ + 0x1e06, 0x00420331, /* Ḇ -> B 0331 */ + 0x1e07, 0x00620331, /* ḇ -> b 0331 */ + 0x1e08, 0x00c70301, /* Ḉ -> Ç 0301 */ + 0x1e09, 0x00e70301, /* ḉ -> ç 0301 */ + 0x1e0a, 0x00440307, /* Ḋ -> D 0307 */ + 0x1e0b, 0x00640307, /* ḋ -> d 0307 */ + 0x1e0c, 0x00440323, /* Ḍ -> D 0323 */ + 0x1e0d, 0x00640323, /* ḍ -> d 0323 */ + 0x1e0e, 0x00440331, /* Ḏ -> D 0331 */ + 0x1e0f, 0x00640331, /* ḏ -> d 0331 */ + 0x1e10, 0x00440327, /* Ḑ -> D 0327 */ + 0x1e11, 0x00640327, /* ḑ -> d 0327 */ + 0x1e12, 0x0044032d, /* Ḓ -> D 032d */ + 0x1e13, 0x0064032d, /* ḓ -> d 032d */ + 0x1e14, 0x01120300, /* Ḕ -> Ē 0300 */ + 0x1e15, 0x01130300, /* ḕ -> ē 0300 */ + 0x1e16, 0x01120301, /* Ḗ -> Ē 0301 */ + 0x1e17, 0x01130301, /* ḗ -> ē 0301 */ + 0x1e18, 0x0045032d, /* Ḙ -> E 032d */ + 0x1e19, 0x0065032d, /* ḙ -> e 032d */ + 0x1e1a, 0x00450330, /* Ḛ -> E 0330 */ + 0x1e1b, 0x00650330, /* ḛ -> e 0330 */ + 0x1e1c, 0x02280306, /* Ḝ -> Ȩ 0306 */ + 0x1e1d, 0x02290306, /* ḝ -> ȩ 0306 */ + 0x1e1e, 0x00460307, /* Ḟ -> F 0307 */ + 0x1e1f, 0x00660307, /* ḟ -> f 0307 */ + 0x1e20, 0x00470304, /* Ḡ -> G 0304 */ + 0x1e21, 0x00670304, /* ḡ -> g 0304 */ + 0x1e22, 0x00480307, /* Ḣ -> H 0307 */ + 0x1e23, 0x00680307, /* ḣ -> h 0307 */ + 0x1e24, 0x00480323, /* Ḥ -> H 0323 */ + 0x1e25, 0x00680323, /* ḥ -> h 0323 */ + 0x1e26, 0x00480308, /* Ḧ -> H 0308 */ + 0x1e27, 0x00680308, /* ḧ -> h 0308 */ + 0x1e28, 0x00480327, /* Ḩ -> H 0327 */ + 0x1e29, 0x00680327, /* ḩ -> h 0327 */ + 0x1e2a, 0x0048032e, /* Ḫ -> H 032e */ + 0x1e2b, 0x0068032e, /* ḫ -> h 032e */ + 0x1e2c, 0x00490330, /* Ḭ -> I 0330 */ + 0x1e2d, 0x00690330, /* ḭ -> i 0330 */ + 0x1e2e, 0x00cf0301, /* Ḯ -> Ï 0301 */ + 0x1e2f, 0x00ef0301, /* ḯ -> ï 0301 */ + 0x1e30, 0x004b0301, /* Ḱ -> K 0301 */ + 0x1e31, 0x006b0301, /* ḱ -> k 0301 */ + 0x1e32, 0x004b0323, /* Ḳ -> K 0323 */ + 0x1e33, 0x006b0323, /* ḳ -> k 0323 */ + 0x1e34, 0x004b0331, /* Ḵ -> K 0331 */ + 0x1e35, 0x006b0331, /* ḵ -> k 0331 */ + 0x1e36, 0x004c0323, /* Ḷ -> L 0323 */ + 0x1e37, 0x006c0323, /* ḷ -> l 0323 */ + 0x1e38, 0x1e360304, /* Ḹ -> Ḷ 0304 */ + 0x1e39, 0x1e370304, /* ḹ -> ḷ 0304 */ + 0x1e3a, 0x004c0331, /* Ḻ -> L 0331 */ + 0x1e3b, 0x006c0331, /* ḻ -> l 0331 */ + 0x1e3c, 0x004c032d, /* Ḽ -> L 032d */ + 0x1e3d, 0x006c032d, /* ḽ -> l 032d */ + 0x1e3e, 0x004d0301, /* Ḿ -> M 0301 */ + 0x1e3f, 0x006d0301, /* ḿ -> m 0301 */ + 0x1e40, 0x004d0307, /* Ṁ -> M 0307 */ + 0x1e41, 0x006d0307, /* ṁ -> m 0307 */ + 0x1e42, 0x004d0323, /* Ṃ -> M 0323 */ + 0x1e43, 0x006d0323, /* ṃ -> m 0323 */ + 0x1e44, 0x004e0307, /* Ṅ -> N 0307 */ + 0x1e45, 0x006e0307, /* ṅ -> n 0307 */ + 0x1e46, 0x004e0323, /* Ṇ -> N 0323 */ + 0x1e47, 0x006e0323, /* ṇ -> n 0323 */ + 0x1e48, 0x004e0331, /* Ṉ -> N 0331 */ + 0x1e49, 0x006e0331, /* ṉ -> n 0331 */ + 0x1e4a, 0x004e032d, /* Ṋ -> N 032d */ + 0x1e4b, 0x006e032d, /* ṋ -> n 032d */ + 0x1e4c, 0x00d50301, /* Ṍ -> Õ 0301 */ + 0x1e4d, 0x00f50301, /* ṍ -> õ 0301 */ + 0x1e4e, 0x00d50308, /* Ṏ -> Õ 0308 */ + 0x1e4f, 0x00f50308, /* ṏ -> õ 0308 */ + 0x1e50, 0x014c0300, /* Ṑ -> Ō 0300 */ + 0x1e51, 0x014d0300, /* ṑ -> ō 0300 */ + 0x1e52, 0x014c0301, /* Ṓ -> Ō 0301 */ + 0x1e53, 0x014d0301, /* ṓ -> ō 0301 */ + 0x1e54, 0x00500301, /* Ṕ -> P 0301 */ + 0x1e55, 0x00700301, /* ṕ -> p 0301 */ + 0x1e56, 0x00500307, /* Ṗ -> P 0307 */ + 0x1e57, 0x00700307, /* ṗ -> p 0307 */ + 0x1e58, 0x00520307, /* Ṙ -> R 0307 */ + 0x1e59, 0x00720307, /* ṙ -> r 0307 */ + 0x1e5a, 0x00520323, /* Ṛ -> R 0323 */ + 0x1e5b, 0x00720323, /* ṛ -> r 0323 */ + 0x1e5c, 0x1e5a0304, /* Ṝ -> Ṛ 0304 */ + 0x1e5d, 0x1e5b0304, /* ṝ -> ṛ 0304 */ + 0x1e5e, 0x00520331, /* Ṟ -> R 0331 */ + 0x1e5f, 0x00720331, /* ṟ -> r 0331 */ + 0x1e60, 0x00530307, /* Ṡ -> S 0307 */ + 0x1e61, 0x00730307, /* ṡ -> s 0307 */ + 0x1e62, 0x00530323, /* Ṣ -> S 0323 */ + 0x1e63, 0x00730323, /* ṣ -> s 0323 */ + 0x1e64, 0x015a0307, /* Ṥ -> Ś 0307 */ + 0x1e65, 0x015b0307, /* ṥ -> ś 0307 */ + 0x1e66, 0x01600307, /* Ṧ -> Š 0307 */ + 0x1e67, 0x01610307, /* ṧ -> š 0307 */ + 0x1e68, 0x1e620307, /* Ṩ -> Ṣ 0307 */ + 0x1e69, 0x1e630307, /* ṩ -> ṣ 0307 */ + 0x1e6a, 0x00540307, /* Ṫ -> T 0307 */ + 0x1e6b, 0x00740307, /* ṫ -> t 0307 */ + 0x1e6c, 0x00540323, /* Ṭ -> T 0323 */ + 0x1e6d, 0x00740323, /* ṭ -> t 0323 */ + 0x1e6e, 0x00540331, /* Ṯ -> T 0331 */ + 0x1e6f, 0x00740331, /* ṯ -> t 0331 */ + 0x1e70, 0x0054032d, /* Ṱ -> T 032d */ + 0x1e71, 0x0074032d, /* ṱ -> t 032d */ + 0x1e72, 0x00550324, /* Ṳ -> U 0324 */ + 0x1e73, 0x00750324, /* ṳ -> u 0324 */ + 0x1e74, 0x00550330, /* Ṵ -> U 0330 */ + 0x1e75, 0x00750330, /* ṵ -> u 0330 */ + 0x1e76, 0x0055032d, /* Ṷ -> U 032d */ + 0x1e77, 0x0075032d, /* ṷ -> u 032d */ + 0x1e78, 0x01680301, /* Ṹ -> Ũ 0301 */ + 0x1e79, 0x01690301, /* ṹ -> ũ 0301 */ + 0x1e7a, 0x016a0308, /* Ṻ -> Ū 0308 */ + 0x1e7b, 0x016b0308, /* ṻ -> ū 0308 */ + 0x1e7c, 0x00560303, /* Ṽ -> V 0303 */ + 0x1e7d, 0x00760303, /* ṽ -> v 0303 */ + 0x1e7e, 0x00560323, /* Ṿ -> V 0323 */ + 0x1e7f, 0x00760323, /* ṿ -> v 0323 */ + 0x1e80, 0x00570300, /* Ẁ -> W 0300 */ + 0x1e81, 0x00770300, /* ẁ -> w 0300 */ + 0x1e82, 0x00570301, /* Ẃ -> W 0301 */ + 0x1e83, 0x00770301, /* ẃ -> w 0301 */ + 0x1e84, 0x00570308, /* Ẅ -> W 0308 */ + 0x1e85, 0x00770308, /* ẅ -> w 0308 */ + 0x1e86, 0x00570307, /* Ẇ -> W 0307 */ + 0x1e87, 0x00770307, /* ẇ -> w 0307 */ + 0x1e88, 0x00570323, /* Ẉ -> W 0323 */ + 0x1e89, 0x00770323, /* ẉ -> w 0323 */ + 0x1e8a, 0x00580307, /* Ẋ -> X 0307 */ + 0x1e8b, 0x00780307, /* ẋ -> x 0307 */ + 0x1e8c, 0x00580308, /* Ẍ -> X 0308 */ + 0x1e8d, 0x00780308, /* ẍ -> x 0308 */ + 0x1e8e, 0x00590307, /* Ẏ -> Y 0307 */ + 0x1e8f, 0x00790307, /* ẏ -> y 0307 */ + 0x1e90, 0x005a0302, /* Ẑ -> Z 0302 */ + 0x1e91, 0x007a0302, /* ẑ -> z 0302 */ + 0x1e92, 0x005a0323, /* Ẓ -> Z 0323 */ + 0x1e93, 0x007a0323, /* ẓ -> z 0323 */ + 0x1e94, 0x005a0331, /* Ẕ -> Z 0331 */ + 0x1e95, 0x007a0331, /* ẕ -> z 0331 */ + 0x1e96, 0x00680331, /* ẖ -> h 0331 */ + 0x1e97, 0x00740308, /* ẗ -> t 0308 */ + 0x1e98, 0x0077030a, /* ẘ -> w 030a */ + 0x1e99, 0x0079030a, /* ẙ -> y 030a */ + 0x1e9b, 0x017f0307, /* ẛ -> ſ 0307 */ + 0x1ea0, 0x00410323, /* Ạ -> A 0323 */ + 0x1ea1, 0x00610323, /* ạ -> a 0323 */ + 0x1ea2, 0x00410309, /* Ả -> A 0309 */ + 0x1ea3, 0x00610309, /* ả -> a 0309 */ + 0x1ea4, 0x00c20301, /* Ấ -> Â 0301 */ + 0x1ea5, 0x00e20301, /* ấ -> â 0301 */ + 0x1ea6, 0x00c20300, /* Ầ -> Â 0300 */ + 0x1ea7, 0x00e20300, /* ầ -> â 0300 */ + 0x1ea8, 0x00c20309, /* Ẩ -> Â 0309 */ + 0x1ea9, 0x00e20309, /* ẩ -> â 0309 */ + 0x1eaa, 0x00c20303, /* Ẫ -> Â 0303 */ + 0x1eab, 0x00e20303, /* ẫ -> â 0303 */ + 0x1eac, 0x1ea00302, /* Ậ -> Ạ 0302 */ + 0x1ead, 0x1ea10302, /* ậ -> ạ 0302 */ + 0x1eae, 0x01020301, /* Ắ -> Ă 0301 */ + 0x1eaf, 0x01030301, /* ắ -> ă 0301 */ + 0x1eb0, 0x01020300, /* Ằ -> Ă 0300 */ + 0x1eb1, 0x01030300, /* ằ -> ă 0300 */ + 0x1eb2, 0x01020309, /* Ẳ -> Ă 0309 */ + 0x1eb3, 0x01030309, /* ẳ -> ă 0309 */ + 0x1eb4, 0x01020303, /* Ẵ -> Ă 0303 */ + 0x1eb5, 0x01030303, /* ẵ -> ă 0303 */ + 0x1eb6, 0x1ea00306, /* Ặ -> Ạ 0306 */ + 0x1eb7, 0x1ea10306, /* ặ -> ạ 0306 */ + 0x1eb8, 0x00450323, /* Ẹ -> E 0323 */ + 0x1eb9, 0x00650323, /* ẹ -> e 0323 */ + 0x1eba, 0x00450309, /* Ẻ -> E 0309 */ + 0x1ebb, 0x00650309, /* ẻ -> e 0309 */ + 0x1ebc, 0x00450303, /* Ẽ -> E 0303 */ + 0x1ebd, 0x00650303, /* ẽ -> e 0303 */ + 0x1ebe, 0x00ca0301, /* Ế -> Ê 0301 */ + 0x1ebf, 0x00ea0301, /* ế -> ê 0301 */ + 0x1ec0, 0x00ca0300, /* Ề -> Ê 0300 */ + 0x1ec1, 0x00ea0300, /* ề -> ê 0300 */ + 0x1ec2, 0x00ca0309, /* Ể -> Ê 0309 */ + 0x1ec3, 0x00ea0309, /* ể -> ê 0309 */ + 0x1ec4, 0x00ca0303, /* Ễ -> Ê 0303 */ + 0x1ec5, 0x00ea0303, /* ễ -> ê 0303 */ + 0x1ec6, 0x1eb80302, /* Ệ -> Ẹ 0302 */ + 0x1ec7, 0x1eb90302, /* ệ -> ẹ 0302 */ + 0x1ec8, 0x00490309, /* Ỉ -> I 0309 */ + 0x1ec9, 0x00690309, /* ỉ -> i 0309 */ + 0x1eca, 0x00490323, /* Ị -> I 0323 */ + 0x1ecb, 0x00690323, /* ị -> i 0323 */ + 0x1ecc, 0x004f0323, /* Ọ -> O 0323 */ + 0x1ecd, 0x006f0323, /* ọ -> o 0323 */ + 0x1ece, 0x004f0309, /* Ỏ -> O 0309 */ + 0x1ecf, 0x006f0309, /* ỏ -> o 0309 */ + 0x1ed0, 0x00d40301, /* Ố -> Ô 0301 */ + 0x1ed1, 0x00f40301, /* ố -> ô 0301 */ + 0x1ed2, 0x00d40300, /* Ồ -> Ô 0300 */ + 0x1ed3, 0x00f40300, /* ồ -> ô 0300 */ + 0x1ed4, 0x00d40309, /* Ổ -> Ô 0309 */ + 0x1ed5, 0x00f40309, /* ổ -> ô 0309 */ + 0x1ed6, 0x00d40303, /* Ỗ -> Ô 0303 */ + 0x1ed7, 0x00f40303, /* ỗ -> ô 0303 */ + 0x1ed8, 0x1ecc0302, /* Ộ -> Ọ 0302 */ + 0x1ed9, 0x1ecd0302, /* ộ -> ọ 0302 */ + 0x1eda, 0x01a00301, /* Ớ -> Ơ 0301 */ + 0x1edb, 0x01a10301, /* ớ -> ơ 0301 */ + 0x1edc, 0x01a00300, /* Ờ -> Ơ 0300 */ + 0x1edd, 0x01a10300, /* ờ -> ơ 0300 */ + 0x1ede, 0x01a00309, /* Ở -> Ơ 0309 */ + 0x1edf, 0x01a10309, /* ở -> ơ 0309 */ + 0x1ee0, 0x01a00303, /* Ỡ -> Ơ 0303 */ + 0x1ee1, 0x01a10303, /* ỡ -> ơ 0303 */ + 0x1ee2, 0x01a00323, /* Ợ -> Ơ 0323 */ + 0x1ee3, 0x01a10323, /* ợ -> ơ 0323 */ + 0x1ee4, 0x00550323, /* Ụ -> U 0323 */ + 0x1ee5, 0x00750323, /* ụ -> u 0323 */ + 0x1ee6, 0x00550309, /* Ủ -> U 0309 */ + 0x1ee7, 0x00750309, /* ủ -> u 0309 */ + 0x1ee8, 0x01af0301, /* Ứ -> Ư 0301 */ + 0x1ee9, 0x01b00301, /* ứ -> ư 0301 */ + 0x1eea, 0x01af0300, /* Ừ -> Ư 0300 */ + 0x1eeb, 0x01b00300, /* ừ -> ư 0300 */ + 0x1eec, 0x01af0309, /* Ử -> Ư 0309 */ + 0x1eed, 0x01b00309, /* ử -> ư 0309 */ + 0x1eee, 0x01af0303, /* Ữ -> Ư 0303 */ + 0x1eef, 0x01b00303, /* ữ -> ư 0303 */ + 0x1ef0, 0x01af0323, /* Ự -> Ư 0323 */ + 0x1ef1, 0x01b00323, /* ự -> ư 0323 */ + 0x1ef2, 0x00590300, /* Ỳ -> Y 0300 */ + 0x1ef3, 0x00790300, /* ỳ -> y 0300 */ + 0x1ef4, 0x00590323, /* Ỵ -> Y 0323 */ + 0x1ef5, 0x00790323, /* ỵ -> y 0323 */ + 0x1ef6, 0x00590309, /* Ỷ -> Y 0309 */ + 0x1ef7, 0x00790309, /* ỷ -> y 0309 */ + 0x1ef8, 0x00590303, /* Ỹ -> Y 0303 */ + 0x1ef9, 0x00790303, /* ỹ -> y 0303 */ + 0x1f00, 0x03b10313, /* ἀ -> α 0313 */ + 0x1f01, 0x03b10314, /* ἁ -> α 0314 */ + 0x1f02, 0x1f000300, /* ἂ -> ἀ 0300 */ + 0x1f03, 0x1f010300, /* ἃ -> ἁ 0300 */ + 0x1f04, 0x1f000301, /* ἄ -> ἀ 0301 */ + 0x1f05, 0x1f010301, /* ἅ -> ἁ 0301 */ + 0x1f06, 0x1f000342, /* ἆ -> ἀ 0342 */ + 0x1f07, 0x1f010342, /* ἇ -> ἁ 0342 */ + 0x1f08, 0x03910313, /* Ἀ -> Α 0313 */ + 0x1f09, 0x03910314, /* Ἁ -> Α 0314 */ + 0x1f0a, 0x1f080300, /* Ἂ -> Ἀ 0300 */ + 0x1f0b, 0x1f090300, /* Ἃ -> Ἁ 0300 */ + 0x1f0c, 0x1f080301, /* Ἄ -> Ἀ 0301 */ + 0x1f0d, 0x1f090301, /* Ἅ -> Ἁ 0301 */ + 0x1f0e, 0x1f080342, /* Ἆ -> Ἀ 0342 */ + 0x1f0f, 0x1f090342, /* Ἇ -> Ἁ 0342 */ + 0x1f10, 0x03b50313, /* ἐ -> ε 0313 */ + 0x1f11, 0x03b50314, /* ἑ -> ε 0314 */ + 0x1f12, 0x1f100300, /* ἒ -> ἐ 0300 */ + 0x1f13, 0x1f110300, /* ἓ -> ἑ 0300 */ + 0x1f14, 0x1f100301, /* ἔ -> ἐ 0301 */ + 0x1f15, 0x1f110301, /* ἕ -> ἑ 0301 */ + 0x1f18, 0x03950313, /* Ἐ -> Ε 0313 */ + 0x1f19, 0x03950314, /* Ἑ -> Ε 0314 */ + 0x1f1a, 0x1f180300, /* Ἒ -> Ἐ 0300 */ + 0x1f1b, 0x1f190300, /* Ἓ -> Ἑ 0300 */ + 0x1f1c, 0x1f180301, /* Ἔ -> Ἐ 0301 */ + 0x1f1d, 0x1f190301, /* Ἕ -> Ἑ 0301 */ + 0x1f20, 0x03b70313, /* ἠ -> η 0313 */ + 0x1f21, 0x03b70314, /* ἡ -> η 0314 */ + 0x1f22, 0x1f200300, /* ἢ -> ἠ 0300 */ + 0x1f23, 0x1f210300, /* ἣ -> ἡ 0300 */ + 0x1f24, 0x1f200301, /* ἤ -> ἠ 0301 */ + 0x1f25, 0x1f210301, /* ἥ -> ἡ 0301 */ + 0x1f26, 0x1f200342, /* ἦ -> ἠ 0342 */ + 0x1f27, 0x1f210342, /* ἧ -> ἡ 0342 */ + 0x1f28, 0x03970313, /* Ἠ -> Η 0313 */ + 0x1f29, 0x03970314, /* Ἡ -> Η 0314 */ + 0x1f2a, 0x1f280300, /* Ἢ -> Ἠ 0300 */ + 0x1f2b, 0x1f290300, /* Ἣ -> Ἡ 0300 */ + 0x1f2c, 0x1f280301, /* Ἤ -> Ἠ 0301 */ + 0x1f2d, 0x1f290301, /* Ἥ -> Ἡ 0301 */ + 0x1f2e, 0x1f280342, /* Ἦ -> Ἠ 0342 */ + 0x1f2f, 0x1f290342, /* Ἧ -> Ἡ 0342 */ + 0x1f30, 0x03b90313, /* ἰ -> ι 0313 */ + 0x1f31, 0x03b90314, /* ἱ -> ι 0314 */ + 0x1f32, 0x1f300300, /* ἲ -> ἰ 0300 */ + 0x1f33, 0x1f310300, /* ἳ -> ἱ 0300 */ + 0x1f34, 0x1f300301, /* ἴ -> ἰ 0301 */ + 0x1f35, 0x1f310301, /* ἵ -> ἱ 0301 */ + 0x1f36, 0x1f300342, /* ἶ -> ἰ 0342 */ + 0x1f37, 0x1f310342, /* ἷ -> ἱ 0342 */ + 0x1f38, 0x03990313, /* Ἰ -> Ι 0313 */ + 0x1f39, 0x03990314, /* Ἱ -> Ι 0314 */ + 0x1f3a, 0x1f380300, /* Ἲ -> Ἰ 0300 */ + 0x1f3b, 0x1f390300, /* Ἳ -> Ἱ 0300 */ + 0x1f3c, 0x1f380301, /* Ἴ -> Ἰ 0301 */ + 0x1f3d, 0x1f390301, /* Ἵ -> Ἱ 0301 */ + 0x1f3e, 0x1f380342, /* Ἶ -> Ἰ 0342 */ + 0x1f3f, 0x1f390342, /* Ἷ -> Ἱ 0342 */ + 0x1f40, 0x03bf0313, /* ὀ -> ο 0313 */ + 0x1f41, 0x03bf0314, /* ὁ -> ο 0314 */ + 0x1f42, 0x1f400300, /* ὂ -> ὀ 0300 */ + 0x1f43, 0x1f410300, /* ὃ -> ὁ 0300 */ + 0x1f44, 0x1f400301, /* ὄ -> ὀ 0301 */ + 0x1f45, 0x1f410301, /* ὅ -> ὁ 0301 */ + 0x1f48, 0x039f0313, /* Ὀ -> Ο 0313 */ + 0x1f49, 0x039f0314, /* Ὁ -> Ο 0314 */ + 0x1f4a, 0x1f480300, /* Ὂ -> Ὀ 0300 */ + 0x1f4b, 0x1f490300, /* Ὃ -> Ὁ 0300 */ + 0x1f4c, 0x1f480301, /* Ὄ -> Ὀ 0301 */ + 0x1f4d, 0x1f490301, /* Ὅ -> Ὁ 0301 */ + 0x1f50, 0x03c50313, /* ὐ -> υ 0313 */ + 0x1f51, 0x03c50314, /* ὑ -> υ 0314 */ + 0x1f52, 0x1f500300, /* ὒ -> ὐ 0300 */ + 0x1f53, 0x1f510300, /* ὓ -> ὑ 0300 */ + 0x1f54, 0x1f500301, /* ὔ -> ὐ 0301 */ + 0x1f55, 0x1f510301, /* ὕ -> ὑ 0301 */ + 0x1f56, 0x1f500342, /* ὖ -> ὐ 0342 */ + 0x1f57, 0x1f510342, /* ὗ -> ὑ 0342 */ + 0x1f59, 0x03a50314, /* Ὑ -> Υ 0314 */ + 0x1f5b, 0x1f590300, /* Ὓ -> Ὑ 0300 */ + 0x1f5d, 0x1f590301, /* Ὕ -> Ὑ 0301 */ + 0x1f5f, 0x1f590342, /* Ὗ -> Ὑ 0342 */ + 0x1f60, 0x03c90313, /* ὠ -> ω 0313 */ + 0x1f61, 0x03c90314, /* ὡ -> ω 0314 */ + 0x1f62, 0x1f600300, /* ὢ -> ὠ 0300 */ + 0x1f63, 0x1f610300, /* ὣ -> ὡ 0300 */ + 0x1f64, 0x1f600301, /* ὤ -> ὠ 0301 */ + 0x1f65, 0x1f610301, /* ὥ -> ὡ 0301 */ + 0x1f66, 0x1f600342, /* ὦ -> ὠ 0342 */ + 0x1f67, 0x1f610342, /* ὧ -> ὡ 0342 */ + 0x1f68, 0x03a90313, /* Ὠ -> Ω 0313 */ + 0x1f69, 0x03a90314, /* Ὡ -> Ω 0314 */ + 0x1f6a, 0x1f680300, /* Ὢ -> Ὠ 0300 */ + 0x1f6b, 0x1f690300, /* Ὣ -> Ὡ 0300 */ + 0x1f6c, 0x1f680301, /* Ὤ -> Ὠ 0301 */ + 0x1f6d, 0x1f690301, /* Ὥ -> Ὡ 0301 */ + 0x1f6e, 0x1f680342, /* Ὦ -> Ὠ 0342 */ + 0x1f6f, 0x1f690342, /* Ὧ -> Ὡ 0342 */ + 0x1f70, 0x03b10300, /* ὰ -> α 0300 */ + 0x1f72, 0x03b50300, /* ὲ -> ε 0300 */ + 0x1f74, 0x03b70300, /* ὴ -> η 0300 */ + 0x1f76, 0x03b90300, /* ὶ -> ι 0300 */ + 0x1f78, 0x03bf0300, /* ὸ -> ο 0300 */ + 0x1f7a, 0x03c50300, /* ὺ -> υ 0300 */ + 0x1f7c, 0x03c90300, /* ὼ -> ω 0300 */ + 0x1f80, 0x1f000345, /* ᾀ -> ἀ 0345 */ + 0x1f81, 0x1f010345, /* ᾁ -> ἁ 0345 */ + 0x1f82, 0x1f020345, /* ᾂ -> ἂ 0345 */ + 0x1f83, 0x1f030345, /* ᾃ -> ἃ 0345 */ + 0x1f84, 0x1f040345, /* ᾄ -> ἄ 0345 */ + 0x1f85, 0x1f050345, /* ᾅ -> ἅ 0345 */ + 0x1f86, 0x1f060345, /* ᾆ -> ἆ 0345 */ + 0x1f87, 0x1f070345, /* ᾇ -> ἇ 0345 */ + 0x1f88, 0x1f080345, /* ᾈ -> Ἀ 0345 */ + 0x1f89, 0x1f090345, /* ᾉ -> Ἁ 0345 */ + 0x1f8a, 0x1f0a0345, /* ᾊ -> Ἂ 0345 */ + 0x1f8b, 0x1f0b0345, /* ᾋ -> Ἃ 0345 */ + 0x1f8c, 0x1f0c0345, /* ᾌ -> Ἄ 0345 */ + 0x1f8d, 0x1f0d0345, /* ᾍ -> Ἅ 0345 */ + 0x1f8e, 0x1f0e0345, /* ᾎ -> Ἆ 0345 */ + 0x1f8f, 0x1f0f0345, /* ᾏ -> Ἇ 0345 */ + 0x1f90, 0x1f200345, /* ᾐ -> ἠ 0345 */ + 0x1f91, 0x1f210345, /* ᾑ -> ἡ 0345 */ + 0x1f92, 0x1f220345, /* ᾒ -> ἢ 0345 */ + 0x1f93, 0x1f230345, /* ᾓ -> ἣ 0345 */ + 0x1f94, 0x1f240345, /* ᾔ -> ἤ 0345 */ + 0x1f95, 0x1f250345, /* ᾕ -> ἥ 0345 */ + 0x1f96, 0x1f260345, /* ᾖ -> ἦ 0345 */ + 0x1f97, 0x1f270345, /* ᾗ -> ἧ 0345 */ + 0x1f98, 0x1f280345, /* ᾘ -> Ἠ 0345 */ + 0x1f99, 0x1f290345, /* ᾙ -> Ἡ 0345 */ + 0x1f9a, 0x1f2a0345, /* ᾚ -> Ἢ 0345 */ + 0x1f9b, 0x1f2b0345, /* ᾛ -> Ἣ 0345 */ + 0x1f9c, 0x1f2c0345, /* ᾜ -> Ἤ 0345 */ + 0x1f9d, 0x1f2d0345, /* ᾝ -> Ἥ 0345 */ + 0x1f9e, 0x1f2e0345, /* ᾞ -> Ἦ 0345 */ + 0x1f9f, 0x1f2f0345, /* ᾟ -> Ἧ 0345 */ + 0x1fa0, 0x1f600345, /* ᾠ -> ὠ 0345 */ + 0x1fa1, 0x1f610345, /* ᾡ -> ὡ 0345 */ + 0x1fa2, 0x1f620345, /* ᾢ -> ὢ 0345 */ + 0x1fa3, 0x1f630345, /* ᾣ -> ὣ 0345 */ + 0x1fa4, 0x1f640345, /* ᾤ -> ὤ 0345 */ + 0x1fa5, 0x1f650345, /* ᾥ -> ὥ 0345 */ + 0x1fa6, 0x1f660345, /* ᾦ -> ὦ 0345 */ + 0x1fa7, 0x1f670345, /* ᾧ -> ὧ 0345 */ + 0x1fa8, 0x1f680345, /* ᾨ -> Ὠ 0345 */ + 0x1fa9, 0x1f690345, /* ᾩ -> Ὡ 0345 */ + 0x1faa, 0x1f6a0345, /* ᾪ -> Ὢ 0345 */ + 0x1fab, 0x1f6b0345, /* ᾫ -> Ὣ 0345 */ + 0x1fac, 0x1f6c0345, /* ᾬ -> Ὤ 0345 */ + 0x1fad, 0x1f6d0345, /* ᾭ -> Ὥ 0345 */ + 0x1fae, 0x1f6e0345, /* ᾮ -> Ὦ 0345 */ + 0x1faf, 0x1f6f0345, /* ᾯ -> Ὧ 0345 */ + 0x1fb0, 0x03b10306, /* ᾰ -> α 0306 */ + 0x1fb1, 0x03b10304, /* ᾱ -> α 0304 */ + 0x1fb2, 0x1f700345, /* ᾲ -> ὰ 0345 */ + 0x1fb3, 0x03b10345, /* ᾳ -> α 0345 */ + 0x1fb4, 0x03ac0345, /* ᾴ -> ά 0345 */ + 0x1fb6, 0x03b10342, /* ᾶ -> α 0342 */ + 0x1fb7, 0x1fb60345, /* ᾷ -> ᾶ 0345 */ + 0x1fb8, 0x03910306, /* Ᾰ -> Α 0306 */ + 0x1fb9, 0x03910304, /* Ᾱ -> Α 0304 */ + 0x1fba, 0x03910300, /* Ὰ -> Α 0300 */ + 0x1fbc, 0x03910345, /* ᾼ -> Α 0345 */ + 0x1fc1, 0x00a80342, /* ῁ -> ¨ 0342 */ + 0x1fc2, 0x1f740345, /* ῂ -> ὴ 0345 */ + 0x1fc3, 0x03b70345, /* ῃ -> η 0345 */ + 0x1fc4, 0x03ae0345, /* ῄ -> ή 0345 */ + 0x1fc6, 0x03b70342, /* ῆ -> η 0342 */ + 0x1fc7, 0x1fc60345, /* ῇ -> ῆ 0345 */ + 0x1fc8, 0x03950300, /* Ὲ -> Ε 0300 */ + 0x1fca, 0x03970300, /* Ὴ -> Η 0300 */ + 0x1fcc, 0x03970345, /* ῌ -> Η 0345 */ + 0x1fcd, 0x1fbf0300, /* ῍ -> ᾿ 0300 */ + 0x1fce, 0x1fbf0301, /* ῎ -> ᾿ 0301 */ + 0x1fcf, 0x1fbf0342, /* ῏ -> ᾿ 0342 */ + 0x1fd0, 0x03b90306, /* ῐ -> ι 0306 */ + 0x1fd1, 0x03b90304, /* ῑ -> ι 0304 */ + 0x1fd2, 0x03ca0300, /* ῒ -> ϊ 0300 */ + 0x1fd6, 0x03b90342, /* ῖ -> ι 0342 */ + 0x1fd7, 0x03ca0342, /* ῗ -> ϊ 0342 */ + 0x1fd8, 0x03990306, /* Ῐ -> Ι 0306 */ + 0x1fd9, 0x03990304, /* Ῑ -> Ι 0304 */ + 0x1fda, 0x03990300, /* Ὶ -> Ι 0300 */ + 0x1fdd, 0x1ffe0300, /* ῝ -> ῾ 0300 */ + 0x1fde, 0x1ffe0301, /* ῞ -> ῾ 0301 */ + 0x1fdf, 0x1ffe0342, /* ῟ -> ῾ 0342 */ + 0x1fe0, 0x03c50306, /* ῠ -> υ 0306 */ + 0x1fe1, 0x03c50304, /* ῡ -> υ 0304 */ + 0x1fe2, 0x03cb0300, /* ῢ -> ϋ 0300 */ + 0x1fe4, 0x03c10313, /* ῤ -> ρ 0313 */ + 0x1fe5, 0x03c10314, /* ῥ -> ρ 0314 */ + 0x1fe6, 0x03c50342, /* ῦ -> υ 0342 */ + 0x1fe7, 0x03cb0342, /* ῧ -> ϋ 0342 */ + 0x1fe8, 0x03a50306, /* Ῠ -> Υ 0306 */ + 0x1fe9, 0x03a50304, /* Ῡ -> Υ 0304 */ + 0x1fea, 0x03a50300, /* Ὺ -> Υ 0300 */ + 0x1fec, 0x03a10314, /* Ῥ -> Ρ 0314 */ + 0x1fed, 0x00a80300, /* ῭ -> ¨ 0300 */ + 0x1ff2, 0x1f7c0345, /* ῲ -> ὼ 0345 */ + 0x1ff3, 0x03c90345, /* ῳ -> ω 0345 */ + 0x1ff4, 0x03ce0345, /* ῴ -> ώ 0345 */ + 0x1ff6, 0x03c90342, /* ῶ -> ω 0342 */ + 0x1ff7, 0x1ff60345, /* ῷ -> ῶ 0345 */ + 0x1ff8, 0x039f0300, /* Ὸ -> Ο 0300 */ + 0x1ffa, 0x03a90300, /* Ὼ -> Ω 0300 */ + 0x1ffc, 0x03a90345, /* ῼ -> Ω 0345 */ + 0x219a, 0x21900338, /* ↚ -> ← 0338 */ + 0x219b, 0x21920338, /* ↛ -> → 0338 */ + 0x21ae, 0x21940338, /* ↮ -> ↔ 0338 */ + 0x21cd, 0x21d00338, /* ⇍ -> ⇐ 0338 */ + 0x21ce, 0x21d40338, /* ⇎ -> ⇔ 0338 */ + 0x21cf, 0x21d20338, /* ⇏ -> ⇒ 0338 */ + 0x2204, 0x22030338, /* ∄ -> ∃ 0338 */ + 0x2209, 0x22080338, /* ∉ -> ∈ 0338 */ + 0x220c, 0x220b0338, /* ∌ -> ∋ 0338 */ + 0x2224, 0x22230338, /* ∤ -> ∣ 0338 */ + 0x2226, 0x22250338, /* ∦ -> ∥ 0338 */ + 0x2241, 0x223c0338, /* ≁ -> ∼ 0338 */ + 0x2244, 0x22430338, /* ≄ -> ≃ 0338 */ + 0x2247, 0x22450338, /* ≇ -> ≅ 0338 */ + 0x2249, 0x22480338, /* ≉ -> ≈ 0338 */ + 0x2260, 0x003d0338, /* ≠ -> = 0338 */ + 0x2262, 0x22610338, /* ≢ -> ≡ 0338 */ + 0x226d, 0x224d0338, /* ≭ -> ≍ 0338 */ + 0x226e, 0x003c0338, /* ≮ -> < 0338 */ + 0x226f, 0x003e0338, /* ≯ -> > 0338 */ + 0x2270, 0x22640338, /* ≰ -> ≤ 0338 */ + 0x2271, 0x22650338, /* ≱ -> ≥ 0338 */ + 0x2274, 0x22720338, /* ≴ -> ≲ 0338 */ + 0x2275, 0x22730338, /* ≵ -> ≳ 0338 */ + 0x2278, 0x22760338, /* ≸ -> ≶ 0338 */ + 0x2279, 0x22770338, /* ≹ -> ≷ 0338 */ + 0x2280, 0x227a0338, /* ⊀ -> ≺ 0338 */ + 0x2281, 0x227b0338, /* ⊁ -> ≻ 0338 */ + 0x2284, 0x22820338, /* ⊄ -> ⊂ 0338 */ + 0x2285, 0x22830338, /* ⊅ -> ⊃ 0338 */ + 0x2288, 0x22860338, /* ⊈ -> ⊆ 0338 */ + 0x2289, 0x22870338, /* ⊉ -> ⊇ 0338 */ + 0x22ac, 0x22a20338, /* ⊬ -> ⊢ 0338 */ + 0x22ad, 0x22a80338, /* ⊭ -> ⊨ 0338 */ + 0x22ae, 0x22a90338, /* ⊮ -> ⊩ 0338 */ + 0x22af, 0x22ab0338, /* ⊯ -> ⊫ 0338 */ + 0x22e0, 0x227c0338, /* ⋠ -> ≼ 0338 */ + 0x22e1, 0x227d0338, /* ⋡ -> ≽ 0338 */ + 0x22e2, 0x22910338, /* ⋢ -> ⊑ 0338 */ + 0x22e3, 0x22920338, /* ⋣ -> ⊒ 0338 */ + 0x22ea, 0x22b20338, /* ⋪ -> ⊲ 0338 */ + 0x22eb, 0x22b30338, /* ⋫ -> ⊳ 0338 */ + 0x22ec, 0x22b40338, /* ⋬ -> ⊴ 0338 */ + 0x22ed, 0x22b50338, /* ⋭ -> ⊵ 0338 */ + 0x2adc, 0x2add0338, /* ⫝̸ -> ⫝ 0338 */ + 0x304c, 0x304b3099, /* が -> か 3099 */ + 0x304e, 0x304d3099, /* ぎ -> き 3099 */ + 0x3050, 0x304f3099, /* ぐ -> く 3099 */ + 0x3052, 0x30513099, /* げ -> け 3099 */ + 0x3054, 0x30533099, /* ご -> こ 3099 */ + 0x3056, 0x30553099, /* ざ -> さ 3099 */ + 0x3058, 0x30573099, /* じ -> し 3099 */ + 0x305a, 0x30593099, /* ず -> す 3099 */ + 0x305c, 0x305b3099, /* ぜ -> せ 3099 */ + 0x305e, 0x305d3099, /* ぞ -> そ 3099 */ + 0x3060, 0x305f3099, /* だ -> た 3099 */ + 0x3062, 0x30613099, /* ぢ -> ち 3099 */ + 0x3065, 0x30643099, /* づ -> つ 3099 */ + 0x3067, 0x30663099, /* で -> て 3099 */ + 0x3069, 0x30683099, /* ど -> と 3099 */ + 0x3070, 0x306f3099, /* ば -> は 3099 */ + 0x3071, 0x306f309a, /* ぱ -> は 309a */ + 0x3073, 0x30723099, /* び -> ひ 3099 */ + 0x3074, 0x3072309a, /* ぴ -> ひ 309a */ + 0x3076, 0x30753099, /* ぶ -> ふ 3099 */ + 0x3077, 0x3075309a, /* ぷ -> ふ 309a */ + 0x3079, 0x30783099, /* べ -> へ 3099 */ + 0x307a, 0x3078309a, /* ぺ -> へ 309a */ + 0x307c, 0x307b3099, /* ぼ -> ほ 3099 */ + 0x307d, 0x307b309a, /* ぽ -> ほ 309a */ + 0x3094, 0x30463099, /* ゔ -> う 3099 */ + 0x309e, 0x309d3099, /* ゞ -> ゝ 3099 */ + 0x30ac, 0x30ab3099, /* ガ -> カ 3099 */ + 0x30ae, 0x30ad3099, /* ギ -> キ 3099 */ + 0x30b0, 0x30af3099, /* グ -> ク 3099 */ + 0x30b2, 0x30b13099, /* ゲ -> ケ 3099 */ + 0x30b4, 0x30b33099, /* ゴ -> コ 3099 */ + 0x30b6, 0x30b53099, /* ザ -> サ 3099 */ + 0x30b8, 0x30b73099, /* ジ -> シ 3099 */ + 0x30ba, 0x30b93099, /* ズ -> ス 3099 */ + 0x30bc, 0x30bb3099, /* ゼ -> セ 3099 */ + 0x30be, 0x30bd3099, /* ゾ -> ソ 3099 */ + 0x30c0, 0x30bf3099, /* ダ -> タ 3099 */ + 0x30c2, 0x30c13099, /* ヂ -> チ 3099 */ + 0x30c5, 0x30c43099, /* ヅ -> ツ 3099 */ + 0x30c7, 0x30c63099, /* デ -> テ 3099 */ + 0x30c9, 0x30c83099, /* ド -> ト 3099 */ + 0x30d0, 0x30cf3099, /* バ -> ハ 3099 */ + 0x30d1, 0x30cf309a, /* パ -> ハ 309a */ + 0x30d3, 0x30d23099, /* ビ -> ヒ 3099 */ + 0x30d4, 0x30d2309a, /* ピ -> ヒ 309a */ + 0x30d6, 0x30d53099, /* ブ -> フ 3099 */ + 0x30d7, 0x30d5309a, /* プ -> フ 309a */ + 0x30d9, 0x30d83099, /* ベ -> ヘ 3099 */ + 0x30da, 0x30d8309a, /* ペ -> ヘ 309a */ + 0x30dc, 0x30db3099, /* ボ -> ホ 3099 */ + 0x30dd, 0x30db309a, /* ポ -> ホ 309a */ + 0x30f4, 0x30a63099, /* ヴ -> ウ 3099 */ + 0x30f7, 0x30ef3099, /* ヷ -> ワ 3099 */ + 0x30f8, 0x30f03099, /* ヸ -> ヰ 3099 */ + 0x30f9, 0x30f13099, /* ヹ -> ヱ 3099 */ + 0x30fa, 0x30f23099, /* ヺ -> ヲ 3099 */ + 0x30fe, 0x30fd3099, /* ヾ -> ヽ 3099 */ + 0xfb1d, 0x05d905b4, /* יִ -> י 05b4 */ + 0xfb1f, 0x05f205b7, /* ײַ -> ײ 05b7 */ + 0xfb2a, 0x05e905c1, /* שׁ -> ש 05c1 */ + 0xfb2b, 0x05e905c2, /* שׂ -> ש 05c2 */ + 0xfb2c, 0xfb4905c1, /* שּׁ -> שּ 05c1 */ + 0xfb2d, 0xfb4905c2, /* שּׂ -> שּ 05c2 */ + 0xfb2e, 0x05d005b7, /* אַ -> א 05b7 */ + 0xfb2f, 0x05d005b8, /* אָ -> א 05b8 */ + 0xfb30, 0x05d005bc, /* אּ -> א 05bc */ + 0xfb31, 0x05d105bc, /* בּ -> ב 05bc */ + 0xfb32, 0x05d205bc, /* גּ -> ג 05bc */ + 0xfb33, 0x05d305bc, /* דּ -> ד 05bc */ + 0xfb34, 0x05d405bc, /* הּ -> ה 05bc */ + 0xfb35, 0x05d505bc, /* וּ -> ו 05bc */ + 0xfb36, 0x05d605bc, /* זּ -> ז 05bc */ + 0xfb38, 0x05d805bc, /* טּ -> ט 05bc */ + 0xfb39, 0x05d905bc, /* יּ -> י 05bc */ + 0xfb3a, 0x05da05bc, /* ךּ -> ך 05bc */ + 0xfb3b, 0x05db05bc, /* כּ -> כ 05bc */ + 0xfb3c, 0x05dc05bc, /* לּ -> ל 05bc */ + 0xfb3e, 0x05de05bc, /* מּ -> מ 05bc */ + 0xfb40, 0x05e005bc, /* נּ -> נ 05bc */ + 0xfb41, 0x05e105bc, /* סּ -> ס 05bc */ + 0xfb43, 0x05e305bc, /* ףּ -> ף 05bc */ + 0xfb44, 0x05e405bc, /* פּ -> פ 05bc */ + 0xfb46, 0x05e605bc, /* צּ -> צ 05bc */ + 0xfb47, 0x05e705bc, /* קּ -> ק 05bc */ + 0xfb48, 0x05e805bc, /* רּ -> ר 05bc */ + 0xfb49, 0x05e905bc, /* שּ -> ש 05bc */ + 0xfb4a, 0x05ea05bc, /* תּ -> ת 05bc */ + 0xfb4b, 0x05d505b9, /* וֹ -> ו 05b9 */ + 0xfb4c, 0x05d105bf, /* בֿ -> ב 05bf */ + 0xfb4d, 0x05db05bf, /* כֿ -> כ 05bf */ + 0xfb4e, 0x05e405bf, /* פֿ -> פ 05bf */ +}; + +static +uvlong __decompose264[] = +{ + 0x1109a, 0x11099110baull, /* 𑂚 -> 𑂙 + 110ba */ + 0x1109c, 0x1109b110baull, /* 𑂜 -> 𑂛 + 110ba */ + 0x110ab, 0x110a5110baull, /* 𑂫 -> 𑂥 + 110ba */ + 0x1112e, 0x1113111127ull, /* 𑄮 -> 𑄱 + 11127 */ + 0x1112f, 0x1113211127ull, /* 𑄯 -> 𑄲 + 11127 */ + 0x1d15e, 0x1d1571d165ull, /* 𝅗𝅥 -> 𝅗 + 1d165 */ + 0x1d15f, 0x1d1581d165ull, /* 𝅘𝅥 -> 𝅘 + 1d165 */ + 0x1d160, 0x1d15f1d16eull, /* 𝅘𝅥𝅮 -> 𝅘𝅥 + 1d16e */ + 0x1d161, 0x1d15f1d16full, /* 𝅘𝅥𝅯 -> 𝅘𝅥 + 1d16f */ + 0x1d162, 0x1d15f1d170ull, /* 𝅘𝅥𝅰 -> 𝅘𝅥 + 1d170 */ + 0x1d163, 0x1d15f1d171ull, /* 𝅘𝅥𝅱 -> 𝅘𝅥 + 1d171 */ + 0x1d164, 0x1d15f1d172ull, /* 𝅘𝅥𝅲 -> 𝅘𝅥 + 1d172 */ + 0x1d1bb, 0x1d1b91d165ull, /* 𝆹𝅥 -> 𝆹 + 1d165 */ + 0x1d1bc, 0x1d1ba1d165ull, /* 𝆺𝅥 -> 𝆺 + 1d165 */ + 0x1d1bd, 0x1d1bb1d16eull, /* 𝆹𝅥𝅮 -> 𝆹𝅥 + 1d16e */ + 0x1d1be, 0x1d1bc1d16eull, /* 𝆺𝅥𝅮 -> 𝆺𝅥 + 1d16e */ + 0x1d1bf, 0x1d1bb1d16full, /* 𝆹𝅥𝅯 -> 𝆹𝅥 + 1d16f */ + 0x1d1c0, 0x1d1bc1d16full, /* 𝆺𝅥𝅯 -> 𝆺𝅥 + 1d16f */ +}; + --- /sys/include/libc.h Fri Jun 14 17:17:48 2013 +++ /sys/include/libc.h Fri Jun 14 17:17:49 2013 @@ -89,6 +89,7 @@ extern int digitrunevalue(Rune); extern int runecompose(Rune, Rune); +extern int runedecompose(Rune, Rune*); extern Rune* runeclass(Rune); /* --- /sys/src/cmd/runetype/runedecompose.rc Thu Jan 1 00:00:00 1970 +++ /sys/src/cmd/runetype/runedecompose.rc Fri Jun 14 17:17:49 2013 @@ -0,0 +1,50 @@ +#!/bin/rc +rfork e +. common.rc +awk '-F;' ' +' ^ $hex ^ ' + +BEGIN { +} + +length($6)>0 && $6 !~ /^ \\u%04x %04x */\n", + tab[i], i, tab[i], i/65536, i%65536 | "sort" + } + close "sort" + print "};" + print "" + + if(ENVIRON["rdigits"] == 6){ + print "static"; + print "uvlong\t__decompose264[] ="; + print "{"; + + for(i in tab64){ + printf "\t" "0x%s," "\t" "0x%sull," "\t /* \\u%s -> \\u%s + %s */\n", + tab64[i], i, tab64[i], substr(i, 1, 5), substr(i, 6, 5) | "sort" + } + close "sort" + print "};" + print "" + } +} ' <{Unicode} | tr 'A-Z' 'a-z' | Sprint --- /sys/src/cmd/runetype/decompose.c Thu Jan 1 00:00:00 1970 +++ /sys/src/cmd/runetype/decompose.c Fri Jun 14 17:17:50 2013 @@ -0,0 +1,76 @@ +#include +#include +#include + +int flagu; + +void +decompose(Biobuf *in, Biobuf *o) +{ + int r, i; + Rune d[2], c[10]; + + for(;;){ + r = Bgetrune(in); + if(r == Beof) + return; + if(runedecompose(r, d) == -1){ + Bputrune(o, r); + continue; + } + for(i = nelem(c)-1; i >= 0; i--){ + r = d[0]; + c[i] = d[1]; + if(runedecompose(r, d) == -1) + break; + } + Bputrune(o, r); + if(flagu){ + for(; i < nelem(c); i++) + if(c[i] <= 0xffff) + Bprint(o, "\\u%.4ux", c[i]); + else + Bprint(o, "\\U%.6ux", c[i]); + }else + for(; i < nelem(c); i++) + Bputrune(o, c[i]); + } +} + +void +usage(void) +{ + fprint(2, "usage: decompose [-u] ...\n"); + exits("usage"); +} + +void +main(int argc, char **argv) +{ + int i, fd; + Biobuf b, o; + + ARGBEGIN{ + case 'u': + flagu = 1; + break; + default: + usage(); + }ARGEND + Binit(&b, 1, OWRITE); + for(i = 0; i < argc; i++){ + fd = open(argv[i], OREAD); + if(fd == -1) + sysfatal("open: %r"); + Binit(&o, fd, OREAD); + decompose(&o, &b); + close(fd); + } + if(argc == 0){ + Binit(&o, 0, OREAD); + decompose(&o, &b); + } + Bterm(&o); + Bterm(&b); + exits(""); +}