diff --git a/ape/ape.S b/ape/ape.S index e355ae63..b59b31da 100644 --- a/ape/ape.S +++ b/ape/ape.S @@ -1476,7 +1476,22 @@ kernel: movabs $ape_stack_vaddr,%rsp test %rax,%rax jz 1f movb $METAL,(%rax) -1: xor %eax,%eax +1: push $0 + mov %rsp,%rbp + mov .Lenv0(%rip),%rax + mov %rax,(%rbp) # envp[0][0] + push $0 # argv[0][0] + push $0 # auxv[1][1] + push $0 # auxv[1][0] + push %rbp # auxv[0][1] + push $31 # auxv[0][0] AT_EXECFN + push $0 # envp[1] + push $.Lenv0 # envp[0] + push $0 # argv[1] + push %rbp # argv[0] + push $1 # argc + xor %ebp,%ebp + xor %eax,%eax xor %ecx,%ecx xor %edx,%edx xor %edi,%edi @@ -1485,20 +1500,10 @@ kernel: movabs $ape_stack_vaddr,%rsp xor %r9d,%r9d xor %r10d,%r10d xor %r11d,%r11d - push $0 # auxv[1][1] - push $0 # auxv[1][0] - push $.Larg0 # auxv[0][1] - push $31 # auxv[0][0] AT_EXECFN - push $0 # envp[1] - push $.Lenv0 # envp[0] - push $0 # argv[1] - push $.Larg0 # argv[0] - push $1 # argc jmp _start .endfn kernel .rodata -.Larg0: .asciz "ape.com" .Lenv0: .asciz "METAL=1" .previous diff --git a/libc/runtime/getdosargv.c b/libc/runtime/getdosargv.c index 699f1d1a..d2111371 100644 --- a/libc/runtime/getdosargv.c +++ b/libc/runtime/getdosargv.c @@ -89,14 +89,16 @@ textwindows noasan int GetDosArgv(const char16_t *cmdline, char *buf, argc = 0; st.wc = DecodeDosArgv(&st.s); while (st.wc) { - while (st.wc && isspace(st.wc)) st.wc = DecodeDosArgv(&st.s); + while (st.wc && (st.wc == ' ' || st.wc == '\t')) { + st.wc = DecodeDosArgv(&st.s); + } if (!st.wc) break; if (++argc < max) { argv[argc - 1] = st.p < st.pe ? st.p : NULL; } inquote = false; while (st.wc) { - if (!inquote && isspace(st.wc)) break; + if (!inquote && (st.wc == ' ' || st.wc == '\t')) break; if (st.wc == '"' || st.wc == '\\') { slashes = 0; quotes = 0; diff --git a/libc/str/isspace.c b/libc/str/isspace.c index d9bcfb83..2c18305c 100644 --- a/libc/str/isspace.c +++ b/libc/str/isspace.c @@ -19,7 +19,8 @@ #include "libc/str/str.h" /** - * Returns true if c is space, \t, \r, \n, \f, or \v. + * Returns nonzero if c is space, \t, \r, \n, \f, or \v. + * @see isblank() */ int isspace(int c) { return c == ' ' || c == '\t' || c == '\r' || c == '\n' || c == '\f' || diff --git a/libc/str/iswalnum.c b/libc/str/iswalnum.c index e23c2acc..58e54da5 100644 --- a/libc/str/iswalnum.c +++ b/libc/str/iswalnum.c @@ -18,6 +18,9 @@ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/str/str.h" -int iswalnum(wint_t wc) { - return isalnum(wc); +/** + * Returns nonzero if c is lower, alpha, or digit. + */ +int iswalnum(wint_t c) { + return iswdigit(c) || iswalpha(c); } diff --git a/libc/str/iswalpha.c b/libc/str/iswalpha.c index 5a209d34..fa246056 100644 --- a/libc/str/iswalpha.c +++ b/libc/str/iswalpha.c @@ -18,6 +18,9 @@ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/str/str.h" -int iswalpha(wint_t wc) { - return isalpha(wc); +/** + * Returns nonzero if c is alphabetical. + */ +int iswalpha(wint_t c) { + return iswupper(c) || iswlower(c); } diff --git a/libc/str/iswblank.c b/libc/str/iswblank.c index f9340404..d3af4a1b 100644 --- a/libc/str/iswblank.c +++ b/libc/str/iswblank.c @@ -18,6 +18,9 @@ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/str/str.h" -int iswblank(wint_t wc) { - return isblank(wc); +/** + * Returns nonzero if c is space or tab. + */ +int iswblank(wint_t c) { + return c == ' ' || c == '\t'; } diff --git a/libc/str/iswcntrl.c b/libc/str/iswcntrl.c index a8167c2f..5ce225bc 100644 --- a/libc/str/iswcntrl.c +++ b/libc/str/iswcntrl.c @@ -19,8 +19,8 @@ #include "libc/str/str.h" /** - * Returns nonzero if wc is C0 or C1 control code. + * Returns nonzero if c is C0 or C1 control code. */ -int iswcntrl(wint_t wc) { - return (0x00 <= wc && wc <= 0x1F) || (0x7F <= wc && wc <= 0x9F); +int iswcntrl(wint_t c) { + return (0x00 <= c && c <= 0x1F) || (0x7F <= c && c <= 0x9F); } diff --git a/libc/str/iswctype.c b/libc/str/iswctype.c index 531f4022..39bfcf67 100644 --- a/libc/str/iswctype.c +++ b/libc/str/iswctype.c @@ -19,71 +19,30 @@ #include "libc/macros.internal.h" #include "libc/str/str.h" -#define ALNUM 1 -#define ALPHA 2 -#define BLANK 3 -#define CNTRL 4 -#define DIGIT 5 -#define GRAPH 6 -#define LOWER 7 -#define PRINT 8 -#define PUNCT 9 -#define SPACE 10 -#define UPPER 11 -#define XDIGIT 12 - -static const struct { - char name[7]; - char type; -} kWcTypes[] = { - {"alnum", ALNUM}, {"alpha", ALPHA}, {"blank", BLANK}, {"cntrl", CNTRL}, - {"digit", DIGIT}, {"graph", GRAPH}, {"lower", LOWER}, {"print", PRINT}, - {"punct", PUNCT}, {"space", SPACE}, {"upper", UPPER}, {"xdigit", XDIGIT}, +static const int (*const kWcTypeFuncs[])(wint_t) = { + iswalnum, // + iswalpha, // + iswblank, // + iswcntrl, // + iswdigit, // + iswgraph, // + iswlower, // + iswprint, // + iswpunct, // + iswspace, // + iswupper, // + iswxdigit, // }; -static int CompareStrings(const char *l, const char *r) { - size_t i = 0; - while (l[i] == r[i] && r[i]) ++i; - return (l[i] & 0xff) - (r[i] & 0xff); -} - -wctype_t wctype(const char *name) { - unsigned i; - for (i = 0; i < ARRAYLEN(kWcTypes); ++i) { - if (CompareStrings(name, kWcTypes[i].name) == 0) { - return kWcTypes[i].type; - } - } - return 0; -} - -int iswctype(wint_t wc, wctype_t type) { - switch (type) { - case ALNUM: - return iswalnum(wc); - case ALPHA: - return iswalpha(wc); - case BLANK: - return iswblank(wc); - case CNTRL: - return iswcntrl(wc); - case DIGIT: - return iswdigit(wc); - case GRAPH: - return iswgraph(wc); - case LOWER: - return iswlower(wc); - case PRINT: - return iswprint(wc); - case PUNCT: - return iswpunct(wc); - case SPACE: - return iswspace(wc); - case UPPER: - return iswupper(wc); - case XDIGIT: - return iswxdigit(wc); - default: - return 0; +/** + * Returns nonzero if c has property. + * + * @param t is number returned by wctype + */ +int iswctype(wint_t c, wctype_t t) { + if (1 <= t && t <= ARRAYLEN(kWcTypeFuncs)) { + return kWcTypeFuncs[t - 1](c); + } else { + return 0; } } diff --git a/libc/str/iswdigit.c b/libc/str/iswdigit.c index 9f65a2cf..9a008c42 100644 --- a/libc/str/iswdigit.c +++ b/libc/str/iswdigit.c @@ -18,6 +18,9 @@ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/str/str.h" -int iswdigit(wint_t wc) { - return isdigit(wc); +/** + * Returns nonzero if c is decimal digit. + */ +int iswdigit(wint_t c) { + return '0' <= c && c <= '9'; } diff --git a/libc/str/iswgraph.c b/libc/str/iswgraph.c index 51fd29bf..b4c740b0 100644 --- a/libc/str/iswgraph.c +++ b/libc/str/iswgraph.c @@ -18,6 +18,9 @@ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/str/str.h" -int iswgraph(wint_t wc) { - return isgraph(wc); +/** + * Returns nonzero if c is printable and not a space. + */ +int iswgraph(wint_t c) { + return iswprint(c) && !iswspace(c); } diff --git a/libc/str/iswlower.c b/libc/str/iswlower.c index 56e5f1ea..79adef12 100644 --- a/libc/str/iswlower.c +++ b/libc/str/iswlower.c @@ -18,6 +18,2141 @@ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/str/str.h" -int iswlower(wint_t wc) { - return islower(wc); +/** + * Returns nonzero if c is lowercase letter. + */ +int iswlower(wint_t c) { + if (isascii(c)) return islower(c); + switch (c) { + case u'µ': // MICRO SIGN (0x00b5) + case u'ß': // LATIN SMALL SHARP S (0x00df) + case u'à': // LATIN SMALL A W/ GRAVE (0x00e0) + case u'á': // LATIN SMALL A W/ ACUTE (0x00e1) + case u'â': // LATIN SMALL A W/ CIRCUMFLEX (0x00e2) + case u'ã': // LATIN SMALL A W/ TILDE (0x00e3) + case u'ä': // LATIN SMALL A W/ DIAERESIS (0x00e4) + case u'å': // LATIN SMALL A W/ RING ABOVE (0x00e5) + case u'æ': // LATIN SMALL AE (0x00e6) + case u'ç': // LATIN SMALL C W/ CEDILLA (0x00e7) + case u'è': // LATIN SMALL E W/ GRAVE (0x00e8) + case u'é': // LATIN SMALL E W/ ACUTE (0x00e9) + case u'ê': // LATIN SMALL E W/ CIRCUMFLEX (0x00ea) + case u'ë': // LATIN SMALL E W/ DIAERESIS (0x00eb) + case u'ì': // LATIN SMALL I W/ GRAVE (0x00ec) + case u'í': // LATIN SMALL I W/ ACUTE (0x00ed) + case u'î': // LATIN SMALL I W/ CIRCUMFLEX (0x00ee) + case u'ï': // LATIN SMALL I W/ DIAERESIS (0x00ef) + case u'ð': // LATIN SMALL ETH (0x00f0) + case u'ñ': // LATIN SMALL N W/ TILDE (0x00f1) + case u'ò': // LATIN SMALL O W/ GRAVE (0x00f2) + case u'ó': // LATIN SMALL O W/ ACUTE (0x00f3) + case u'ô': // LATIN SMALL O W/ CIRCUMFLEX (0x00f4) + case u'õ': // LATIN SMALL O W/ TILDE (0x00f5) + case u'ö': // LATIN SMALL O W/ DIAERESIS (0x00f6) + case u'ø': // LATIN SMALL O W/ STROKE (0x00f8) + case u'ù': // LATIN SMALL U W/ GRAVE (0x00f9) + case u'ú': // LATIN SMALL U W/ ACUTE (0x00fa) + case u'û': // LATIN SMALL U W/ CIRCUMFLEX (0x00fb) + case u'ü': // LATIN SMALL U W/ DIAERESIS (0x00fc) + case u'ý': // LATIN SMALL Y W/ ACUTE (0x00fd) + case u'þ': // LATIN SMALL THORN (0x00fe) + case u'ÿ': // LATIN SMALL Y W/ DIAERESIS (0x00ff) + case u'ā': // LATIN SMALL A W/ MACRON (0x0101) + case u'ă': // LATIN SMALL A W/ BREVE (0x0103) + case u'ą': // LATIN SMALL A W/ OGONEK (0x0105) + case u'ć': // LATIN SMALL C W/ ACUTE (0x0107) + case u'ĉ': // LATIN SMALL C W/ CIRCUMFLEX (0x0109) + case u'ċ': // LATIN SMALL C W/ DOT ABOVE (0x010b) + case u'č': // LATIN SMALL C W/ CARON (0x010d) + case u'ď': // LATIN SMALL D W/ CARON (0x010f) + case u'đ': // LATIN SMALL D W/ STROKE (0x0111) + case u'ē': // LATIN SMALL E W/ MACRON (0x0113) + case u'ĕ': // LATIN SMALL E W/ BREVE (0x0115) + case u'ė': // LATIN SMALL E W/ DOT ABOVE (0x0117) + case u'ę': // LATIN SMALL E W/ OGONEK (0x0119) + case u'ě': // LATIN SMALL E W/ CARON (0x011b) + case u'ĝ': // LATIN SMALL G W/ CIRCUMFLEX (0x011d) + case u'ğ': // LATIN SMALL G W/ BREVE (0x011f) + case u'ġ': // LATIN SMALL G W/ DOT ABOVE (0x0121) + case u'ģ': // LATIN SMALL G W/ CEDILLA (0x0123) + case u'ĥ': // LATIN SMALL H W/ CIRCUMFLEX (0x0125) + case u'ħ': // LATIN SMALL H W/ STROKE (0x0127) + case u'ĩ': // LATIN SMALL I W/ TILDE (0x0129) + case u'ī': // LATIN SMALL I W/ MACRON (0x012b) + case u'ĭ': // LATIN SMALL I W/ BREVE (0x012d) + case u'į': // LATIN SMALL I W/ OGONEK (0x012f) + case u'ı': // LATIN SMALL DOTLESS I (0x0131) + case u'ij': // LATIN SMALL LIGATURE IJ (0x0133) + case u'ĵ': // LATIN SMALL J W/ CIRCUMFLEX (0x0135) + case u'ķ': // LATIN SMALL K W/ CEDILLA (0x0137) + case u'ĸ': // LATIN SMALL KRA (0x0138) + case u'ĺ': // LATIN SMALL L W/ ACUTE (0x013a) + case u'ļ': // LATIN SMALL L W/ CEDILLA (0x013c) + case u'ľ': // LATIN SMALL L W/ CARON (0x013e) + case u'ŀ': // LATIN SMALL L W/ MIDDLE DOT (0x0140) + case u'ł': // LATIN SMALL L W/ STROKE (0x0142) + case u'ń': // LATIN SMALL N W/ ACUTE (0x0144) + case u'ņ': // LATIN SMALL N W/ CEDILLA (0x0146) + case u'ň': // LATIN SMALL N W/ CARON (0x0148) + case u'ʼn': // LATIN SMALL N PRECEDED BY APOSTROPHE (0x0149) + case u'ŋ': // LATIN SMALL ENG (0x014b) + case u'ō': // LATIN SMALL O W/ MACRON (0x014d) + case u'ŏ': // LATIN SMALL O W/ BREVE (0x014f) + case u'ő': // LATIN SMALL O W/ DOUBLE ACUTE (0x0151) + case u'œ': // LATIN SMALL LIGATURE OE (0x0153) + case u'ŕ': // LATIN SMALL R W/ ACUTE (0x0155) + case u'ŗ': // LATIN SMALL R W/ CEDILLA (0x0157) + case u'ř': // LATIN SMALL R W/ CARON (0x0159) + case u'ś': // LATIN SMALL S W/ ACUTE (0x015b) + case u'ŝ': // LATIN SMALL S W/ CIRCUMFLEX (0x015d) + case u'ş': // LATIN SMALL S W/ CEDILLA (0x015f) + case u'š': // LATIN SMALL S W/ CARON (0x0161) + case u'ţ': // LATIN SMALL T W/ CEDILLA (0x0163) + case u'ť': // LATIN SMALL T W/ CARON (0x0165) + case u'ŧ': // LATIN SMALL T W/ STROKE (0x0167) + case u'ũ': // LATIN SMALL U W/ TILDE (0x0169) + case u'ū': // LATIN SMALL U W/ MACRON (0x016b) + case u'ŭ': // LATIN SMALL U W/ BREVE (0x016d) + case u'ů': // LATIN SMALL U W/ RING ABOVE (0x016f) + case u'ű': // LATIN SMALL U W/ DOUBLE ACUTE (0x0171) + case u'ų': // LATIN SMALL U W/ OGONEK (0x0173) + case u'ŵ': // LATIN SMALL W W/ CIRCUMFLEX (0x0175) + case u'ŷ': // LATIN SMALL Y W/ CIRCUMFLEX (0x0177) + case u'ź': // LATIN SMALL Z W/ ACUTE (0x017a) + case u'ż': // LATIN SMALL Z W/ DOT ABOVE (0x017c) + case u'ž': // LATIN SMALL Z W/ CARON (0x017e) + case u'ſ': // LATIN SMALL LONG S (0x017f) + case u'ƀ': // LATIN SMALL B W/ STROKE (0x0180) + case u'ƃ': // LATIN SMALL B W/ TOPBAR (0x0183) + case u'ƅ': // LATIN SMALL TONE SIX (0x0185) + case u'ƈ': // LATIN SMALL C W/ HOOK (0x0188) + case u'ƌ': // LATIN SMALL D W/ TOPBAR (0x018c) + case u'ƍ': // LATIN SMALL TURNED DELTA (0x018d) + case u'ƒ': // LATIN SMALL F W/ HOOK (0x0192) + case u'ƕ': // LATIN SMALL HV (0x0195) + case u'ƙ': // LATIN SMALL K W/ HOOK (0x0199) + case u'ƚ': // LATIN SMALL L W/ BAR (0x019a) + case u'ƛ': // LATIN SMALL LAMBDA W/ STROKE (0x019b) + case u'ƞ': // LATIN SMALL N W/ LONG RIGHT LEG (0x019e) + case u'ơ': // LATIN SMALL O W/ HORN (0x01a1) + case u'ƣ': // LATIN SMALL OI (0x01a3) + case u'ƥ': // LATIN SMALL P W/ HOOK (0x01a5) + case u'ƨ': // LATIN SMALL TONE TWO (0x01a8) + case u'ƪ': // LATIN LETTER REVERSED ESH LOOP (0x01aa) + case u'ƫ': // LATIN SMALL T W/ PALATAL HOOK (0x01ab) + case u'ƭ': // LATIN SMALL T W/ HOOK (0x01ad) + case u'ư': // LATIN SMALL U W/ HORN (0x01b0) + case u'ƴ': // LATIN SMALL Y W/ HOOK (0x01b4) + case u'ƶ': // LATIN SMALL Z W/ STROKE (0x01b6) + case u'ƹ': // LATIN SMALL EZH REVERSED (0x01b9) + case u'ƺ': // LATIN SMALL EZH W/ TAIL (0x01ba) + case u'ƽ': // LATIN SMALL TONE FIVE (0x01bd) + case u'ƾ': // LATIN LETTER INVERTED GLOTTAL STOP W/ STROKE (0x01be) + case u'ƿ': // LATIN LETTER WYNN (0x01bf) + case u'dž': // LATIN SMALL DZ W/ CARON (0x01c6) + case u'lj': // LATIN SMALL LJ (0x01c9) + case u'nj': // LATIN SMALL NJ (0x01cc) + case u'ǎ': // LATIN SMALL A W/ CARON (0x01ce) + case u'ǐ': // LATIN SMALL I W/ CARON (0x01d0) + case u'ǒ': // LATIN SMALL O W/ CARON (0x01d2) + case u'ǔ': // LATIN SMALL U W/ CARON (0x01d4) + case u'ǖ': // LATIN SMALL U W/ DIAERESIS AND MACRON (0x01d6) + case u'ǘ': // LATIN SMALL U W/ DIAERESIS AND ACUTE (0x01d8) + case u'ǚ': // LATIN SMALL U W/ DIAERESIS AND CARON (0x01da) + case u'ǜ': // LATIN SMALL U W/ DIAERESIS AND GRAVE (0x01dc) + case u'ǝ': // LATIN SMALL TURNED E (0x01dd) + case u'ǟ': // LATIN SMALL A W/ DIAERESIS AND MACRON (0x01df) + case u'ǡ': // LATIN SMALL A W/ DOT ABOVE AND MACRON (0x01e1) + case u'ǣ': // LATIN SMALL AE W/ MACRON (0x01e3) + case u'ǥ': // LATIN SMALL G W/ STROKE (0x01e5) + case u'ǧ': // LATIN SMALL G W/ CARON (0x01e7) + case u'ǩ': // LATIN SMALL K W/ CARON (0x01e9) + case u'ǫ': // LATIN SMALL O W/ OGONEK (0x01eb) + case u'ǭ': // LATIN SMALL O W/ OGONEK AND MACRON (0x01ed) + case u'ǯ': // LATIN SMALL EZH W/ CARON (0x01ef) + case u'ǰ': // LATIN SMALL J W/ CARON (0x01f0) + case u'dz': // LATIN SMALL DZ (0x01f3) + case u'ǵ': // LATIN SMALL G W/ ACUTE (0x01f5) + case u'ǹ': // LATIN SMALL N W/ GRAVE (0x01f9) + case u'ǻ': // LATIN SMALL A W/ RING ABOVE AND ACUTE (0x01fb) + case u'ǽ': // LATIN SMALL AE W/ ACUTE (0x01fd) + case u'ǿ': // LATIN SMALL O W/ STROKE AND ACUTE (0x01ff) + case u'ȁ': // LATIN SMALL A W/ DOUBLE GRAVE (0x0201) + case u'ȃ': // LATIN SMALL A W/ INVERTED BREVE (0x0203) + case u'ȅ': // LATIN SMALL E W/ DOUBLE GRAVE (0x0205) + case u'ȇ': // LATIN SMALL E W/ INVERTED BREVE (0x0207) + case u'ȉ': // LATIN SMALL I W/ DOUBLE GRAVE (0x0209) + case u'ȋ': // LATIN SMALL I W/ INVERTED BREVE (0x020b) + case u'ȍ': // LATIN SMALL O W/ DOUBLE GRAVE (0x020d) + case u'ȏ': // LATIN SMALL O W/ INVERTED BREVE (0x020f) + case u'ȑ': // LATIN SMALL R W/ DOUBLE GRAVE (0x0211) + case u'ȓ': // LATIN SMALL R W/ INVERTED BREVE (0x0213) + case u'ȕ': // LATIN SMALL U W/ DOUBLE GRAVE (0x0215) + case u'ȗ': // LATIN SMALL U W/ INVERTED BREVE (0x0217) + case u'ș': // LATIN SMALL S W/ COMMA BELOW (0x0219) + case u'ț': // LATIN SMALL T W/ COMMA BELOW (0x021b) + case u'ȝ': // LATIN SMALL YOGH (0x021d) + case u'ȟ': // LATIN SMALL H W/ CARON (0x021f) + case u'ȡ': // LATIN SMALL D W/ CURL (0x0221) + case u'ȣ': // LATIN SMALL OU (0x0223) + case u'ȥ': // LATIN SMALL Z W/ HOOK (0x0225) + case u'ȧ': // LATIN SMALL A W/ DOT ABOVE (0x0227) + case u'ȩ': // LATIN SMALL E W/ CEDILLA (0x0229) + case u'ȫ': // LATIN SMALL O W/ DIAERESIS AND MACRON (0x022b) + case u'ȭ': // LATIN SMALL O W/ TILDE AND MACRON (0x022d) + case u'ȯ': // LATIN SMALL O W/ DOT ABOVE (0x022f) + case u'ȱ': // LATIN SMALL O W/ DOT ABOVE AND MACRON (0x0231) + case u'ȳ': // LATIN SMALL Y W/ MACRON (0x0233) + case u'ȴ': // LATIN SMALL L W/ CURL (0x0234) + case u'ȵ': // LATIN SMALL N W/ CURL (0x0235) + case u'ȶ': // LATIN SMALL T W/ CURL (0x0236) + case u'ȷ': // LATIN SMALL DOTLESS J (0x0237) + case u'ȸ': // LATIN SMALL DB DIGRAPH (0x0238) + case u'ȹ': // LATIN SMALL QP DIGRAPH (0x0239) + case u'ȼ': // LATIN SMALL C W/ STROKE (0x023c) + case u'ȿ': // LATIN SMALL S W/ SWASH TAIL (0x023f) + case u'ɀ': // LATIN SMALL Z W/ SWASH TAIL (0x0240) + case u'ɂ': // LATIN SMALL GLOTTAL STOP (0x0242) + case u'ɇ': // LATIN SMALL E W/ STROKE (0x0247) + case u'ɉ': // LATIN SMALL J W/ STROKE (0x0249) + case u'ɋ': // LATIN SMALL Q W/ HOOK TAIL (0x024b) + case u'ɍ': // LATIN SMALL R W/ STROKE (0x024d) + case u'ɏ': // LATIN SMALL Y W/ STROKE (0x024f) + case u'ɐ': // LATIN SMALL TURNED A (0x0250) + case u'ɑ': // LATIN SMALL ALPHA (0x0251) + case u'ɒ': // LATIN SMALL TURNED ALPHA (0x0252) + case u'ɓ': // LATIN SMALL B W/ HOOK (0x0253) + case u'ɔ': // LATIN SMALL OPEN O (0x0254) + case u'ɕ': // LATIN SMALL C W/ CURL (0x0255) + case u'ɖ': // LATIN SMALL D W/ TAIL (0x0256) + case u'ɗ': // LATIN SMALL D W/ HOOK (0x0257) + case u'ɘ': // LATIN SMALL REVERSED E (0x0258) + case u'ə': // LATIN SMALL SCHWA (0x0259) + case u'ɚ': // LATIN SMALL SCHWA W/ HOOK (0x025a) + case u'ɛ': // LATIN SMALL OPEN E (0x025b) + case u'ɜ': // LATIN SMALL REVERSED OPEN E (0x025c) + case u'ɝ': // LATIN SMALL REVERSED OPEN E W/ HOOK (0x025d) + case u'ɞ': // LATIN SMALL CLOSED REVERSED OPEN E (0x025e) + case u'ɟ': // LATIN SMALL DOTLESS J W/ STROKE (0x025f) + case u'ɠ': // LATIN SMALL G W/ HOOK (0x0260) + case u'ɡ': // LATIN SMALL SCRIPT G (0x0261) + case u'ɢ': // LATIN LETTER SMALL CAPITAL G (0x0262) + case u'ɣ': // LATIN SMALL GAMMA (0x0263) + case u'ɤ': // LATIN SMALL RAMS HORN (0x0264) + case u'ɥ': // LATIN SMALL TURNED H (0x0265) + case u'ɦ': // LATIN SMALL H W/ HOOK (0x0266) + case u'ɧ': // LATIN SMALL HENG W/ HOOK (0x0267) + case u'ɨ': // LATIN SMALL I W/ STROKE (0x0268) + case u'ɩ': // LATIN SMALL IOTA (0x0269) + case u'ɪ': // LATIN LETTER SMALL CAPITAL I (0x026a) + case u'ɫ': // LATIN SMALL L W/ MIDDLE TILDE (0x026b) + case u'ɬ': // LATIN SMALL L W/ BELT (0x026c) + case u'ɭ': // LATIN SMALL L W/ RETROFLEX HOOK (0x026d) + case u'ɮ': // LATIN SMALL LEZH (0x026e) + case u'ɯ': // LATIN SMALL TURNED M (0x026f) + case u'ɰ': // LATIN SMALL TURNED M W/ LONG LEG (0x0270) + case u'ɱ': // LATIN SMALL M W/ HOOK (0x0271) + case u'ɲ': // LATIN SMALL N W/ LEFT HOOK (0x0272) + case u'ɳ': // LATIN SMALL N W/ RETROFLEX HOOK (0x0273) + case u'ɴ': // LATIN LETTER SMALL CAPITAL N (0x0274) + case u'ɵ': // LATIN SMALL BARRED O (0x0275) + case u'ɶ': // LATIN LETTER SMALL CAPITAL OE (0x0276) + case u'ɷ': // LATIN SMALL CLOSED OMEGA (0x0277) + case u'ɸ': // LATIN SMALL PHI (0x0278) + case u'ɹ': // LATIN SMALL TURNED R (0x0279) + case u'ɺ': // LATIN SMALL TURNED R W/ LONG LEG (0x027a) + case u'ɻ': // LATIN SMALL TURNED R W/ HOOK (0x027b) + case u'ɼ': // LATIN SMALL R W/ LONG LEG (0x027c) + case u'ɽ': // LATIN SMALL R W/ TAIL (0x027d) + case u'ɾ': // LATIN SMALL R W/ FISHHOOK (0x027e) + case u'ɿ': // LATIN SMALL REVERSED R W/ FISHHOOK (0x027f) + case u'ʀ': // LATIN LETTER SMALL CAPITAL R (0x0280) + case u'ʁ': // LATIN LETTER SMALL CAPITAL INVERTED R (0x0281) + case u'ʂ': // LATIN SMALL S W/ HOOK (0x0282) + case u'ʃ': // LATIN SMALL ESH (0x0283) + case u'ʄ': // LATIN SMALL DOTLESS J W/ STROKE AND HOOK (0x0284) + case u'ʅ': // LATIN SMALL SQUAT REVERSED ESH (0x0285) + case u'ʆ': // LATIN SMALL ESH W/ CURL (0x0286) + case u'ʇ': // LATIN SMALL TURNED T (0x0287) + case u'ʈ': // LATIN SMALL T W/ RETROFLEX HOOK (0x0288) + case u'ʉ': // LATIN SMALL U BAR (0x0289) + case u'ʊ': // LATIN SMALL UPSILON (0x028a) + case u'ʋ': // LATIN SMALL V W/ HOOK (0x028b) + case u'ʌ': // LATIN SMALL TURNED V (0x028c) + case u'ʍ': // LATIN SMALL TURNED W (0x028d) + case u'ʎ': // LATIN SMALL TURNED Y (0x028e) + case u'ʏ': // LATIN LETTER SMALL CAPITAL Y (0x028f) + case u'ʐ': // LATIN SMALL Z W/ RETROFLEX HOOK (0x0290) + case u'ʑ': // LATIN SMALL Z W/ CURL (0x0291) + case u'ʒ': // LATIN SMALL EZH (0x0292) + case u'ʓ': // LATIN SMALL EZH W/ CURL (0x0293) + case u'ʕ': // LATIN LETTER PHARYNGEAL VOICED FRICATIVE (0x0295) + case u'ʖ': // LATIN LETTER INVERTED GLOTTAL STOP (0x0296) + case u'ʗ': // LATIN LETTER STRETCHED C (0x0297) + case u'ʘ': // LATIN LETTER BILABIAL CLICK (0x0298) + case u'ʙ': // LATIN LETTER SMALL CAPITAL B (0x0299) + case u'ʚ': // LATIN SMALL CLOSED OPEN E (0x029a) + case u'ʛ': // LATIN LETTER SMALL CAPITAL G W/ HOOK (0x029b) + case u'ʜ': // LATIN LETTER SMALL CAPITAL H (0x029c) + case u'ʝ': // LATIN SMALL J W/ CROSSED-TAIL (0x029d) + case u'ʞ': // LATIN SMALL TURNED K (0x029e) + case u'ʟ': // LATIN LETTER SMALL CAPITAL L (0x029f) + case u'ʠ': // LATIN SMALL Q W/ HOOK (0x02a0) + case u'ʡ': // LATIN LETTER GLOTTAL STOP W/ STROKE (0x02a1) + case u'ʢ': // LATIN LETTER REVERSED GLOTTAL STOP W/ STROKE (0x02a2) + case u'ʣ': // LATIN SMALL DZ DIGRAPH (0x02a3) + case u'ʤ': // LATIN SMALL DEZH DIGRAPH (0x02a4) + case u'ʥ': // LATIN SMALL DZ DIGRAPH W/ CURL (0x02a5) + case u'ʦ': // LATIN SMALL TS DIGRAPH (0x02a6) + case u'ʧ': // LATIN SMALL TESH DIGRAPH (0x02a7) + case u'ʨ': // LATIN SMALL TC DIGRAPH W/ CURL (0x02a8) + case u'ʩ': // LATIN SMALL FENG DIGRAPH (0x02a9) + case u'ʪ': // LATIN SMALL LS DIGRAPH (0x02aa) + case u'ʫ': // LATIN SMALL LZ DIGRAPH (0x02ab) + case u'ʬ': // LATIN LETTER BILABIAL PERCUSSIVE (0x02ac) + case u'ʭ': // LATIN LETTER BIDENTAL PERCUSSIVE (0x02ad) + case u'ʮ': // LATIN SMALL TURNED H W/ FISHHOOK (0x02ae) + case u'ʯ': // LATIN SMALL TURNED H W/ FISHHOOK AND TAIL (0x02af) + case u'ͱ': // GREEK SMALL HETA (0x0371) + case u'ͳ': // GREEK SMALL ARCHAIC SAMPI (0x0373) + case u'ͷ': // GREEK SMALL PAMPHYLIAN DIGAMMA (0x0377) + case u'ͻ': // GREEK SMALL REVERSED LUNATE SIGMA SYMBOL (0x037b) + case u'ͼ': // GREEK SMALL DOTTED LUNATE SIGMA SYMBOL (0x037c) + case u'ͽ': // GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL (0x037d) + case u'ΐ': // GREEK SMALL IOTA W/ DIALYTIKA AND TONOS (0x0390) + case u'ά': // GREEK SMALL ALPHA W/ TONOS (0x03ac) + case u'έ': // GREEK SMALL EPSILON W/ TONOS (0x03ad) + case u'ή': // GREEK SMALL ETA W/ TONOS (0x03ae) + case u'ί': // GREEK SMALL IOTA W/ TONOS (0x03af) + case u'ΰ': // GREEK SMALL UPSILON W/ DIALYTIKA AND TONOS (0x03b0) + case u'α': // GREEK SMALL ALPHA (0x03b1) + case u'β': // GREEK SMALL BETA (0x03b2) + case u'γ': // GREEK SMALL GAMMA (0x03b3) + case u'δ': // GREEK SMALL DELTA (0x03b4) + case u'ε': // GREEK SMALL EPSILON (0x03b5) + case u'ζ': // GREEK SMALL ZETA (0x03b6) + case u'η': // GREEK SMALL ETA (0x03b7) + case u'θ': // GREEK SMALL THETA (0x03b8) + case u'ι': // GREEK SMALL IOTA (0x03b9) + case u'κ': // GREEK SMALL KAPPA (0x03ba) + case u'λ': // GREEK SMALL LAMDA (0x03bb) + case u'μ': // GREEK SMALL MU (0x03bc) + case u'ν': // GREEK SMALL NU (0x03bd) + case u'ξ': // GREEK SMALL XI (0x03be) + case u'ο': // GREEK SMALL OMICRON (0x03bf) + case u'π': // GREEK SMALL PI (0x03c0) + case u'ρ': // GREEK SMALL RHO (0x03c1) + case u'ς': // GREEK SMALL FINAL SIGMA (0x03c2) + case u'σ': // GREEK SMALL SIGMA (0x03c3) + case u'τ': // GREEK SMALL TAU (0x03c4) + case u'υ': // GREEK SMALL UPSILON (0x03c5) + case u'φ': // GREEK SMALL PHI (0x03c6) + case u'χ': // GREEK SMALL CHI (0x03c7) + case u'ψ': // GREEK SMALL PSI (0x03c8) + case u'ω': // GREEK SMALL OMEGA (0x03c9) + case u'ϊ': // GREEK SMALL IOTA W/ DIALYTIKA (0x03ca) + case u'ϋ': // GREEK SMALL UPSILON W/ DIALYTIKA (0x03cb) + case u'ό': // GREEK SMALL OMICRON W/ TONOS (0x03cc) + case u'ύ': // GREEK SMALL UPSILON W/ TONOS (0x03cd) + case u'ώ': // GREEK SMALL OMEGA W/ TONOS (0x03ce) + case u'ϐ': // GREEK BETA SYMBOL (0x03d0) + case u'ϑ': // GREEK THETA SYMBOL (0x03d1) + case u'ϕ': // GREEK PHI SYMBOL (0x03d5) + case u'ϖ': // GREEK PI SYMBOL (0x03d6) + case u'ϗ': // GREEK KAI SYMBOL (0x03d7) + case u'ϙ': // GREEK SMALL ARCHAIC KOPPA (0x03d9) + case u'ϛ': // GREEK SMALL STIGMA (0x03db) + case u'ϝ': // GREEK SMALL DIGAMMA (0x03dd) + case u'ϟ': // GREEK SMALL KOPPA (0x03df) + case u'ϡ': // GREEK SMALL SAMPI (0x03e1) + case u'ϣ': // COPTIC SMALL SHEI (0x03e3) + case u'ϥ': // COPTIC SMALL FEI (0x03e5) + case u'ϧ': // COPTIC SMALL KHEI (0x03e7) + case u'ϩ': // COPTIC SMALL HORI (0x03e9) + case u'ϫ': // COPTIC SMALL GANGIA (0x03eb) + case u'ϭ': // COPTIC SMALL SHIMA (0x03ed) + case u'ϯ': // COPTIC SMALL DEI (0x03ef) + case u'ϰ': // GREEK KAPPA SYMBOL (0x03f0) + case u'ϱ': // GREEK RHO SYMBOL (0x03f1) + case u'ϲ': // GREEK LUNATE SIGMA SYMBOL (0x03f2) + case u'ϳ': // GREEK LETTER YOT (0x03f3) + case u'ϵ': // GREEK LUNATE EPSILON SYMBOL (0x03f5) + case u'ϸ': // GREEK SMALL SHO (0x03f8) + case u'ϻ': // GREEK SMALL SAN (0x03fb) + case u'ϼ': // GREEK RHO W/ STROKE SYMBOL (0x03fc) + case u'а': // CYRILLIC SMALL A (0x0430) + case u'б': // CYRILLIC SMALL BE (0x0431) + case u'в': // CYRILLIC SMALL VE (0x0432) + case u'г': // CYRILLIC SMALL GHE (0x0433) + case u'д': // CYRILLIC SMALL DE (0x0434) + case u'е': // CYRILLIC SMALL IE (0x0435) + case u'ж': // CYRILLIC SMALL ZHE (0x0436) + case u'з': // CYRILLIC SMALL ZE (0x0437) + case u'и': // CYRILLIC SMALL I (0x0438) + case u'й': // CYRILLIC SMALL SHORT I (0x0439) + case u'к': // CYRILLIC SMALL KA (0x043a) + case u'л': // CYRILLIC SMALL EL (0x043b) + case u'м': // CYRILLIC SMALL EM (0x043c) + case u'н': // CYRILLIC SMALL EN (0x043d) + case u'о': // CYRILLIC SMALL O (0x043e) + case u'п': // CYRILLIC SMALL PE (0x043f) + case u'р': // CYRILLIC SMALL ER (0x0440) + case u'с': // CYRILLIC SMALL ES (0x0441) + case u'т': // CYRILLIC SMALL TE (0x0442) + case u'у': // CYRILLIC SMALL U (0x0443) + case u'ф': // CYRILLIC SMALL EF (0x0444) + case u'х': // CYRILLIC SMALL HA (0x0445) + case u'ц': // CYRILLIC SMALL TSE (0x0446) + case u'ч': // CYRILLIC SMALL CHE (0x0447) + case u'ш': // CYRILLIC SMALL SHA (0x0448) + case u'щ': // CYRILLIC SMALL SHCHA (0x0449) + case u'ъ': // CYRILLIC SMALL HARD SIGN (0x044a) + case u'ы': // CYRILLIC SMALL YERU (0x044b) + case u'ь': // CYRILLIC SMALL SOFT SIGN (0x044c) + case u'э': // CYRILLIC SMALL E (0x044d) + case u'ю': // CYRILLIC SMALL YU (0x044e) + case u'я': // CYRILLIC SMALL YA (0x044f) + case u'ѐ': // CYRILLIC SMALL IE W/ GRAVE (0x0450) + case u'ё': // CYRILLIC SMALL IO (0x0451) + case u'ђ': // CYRILLIC SMALL DJE (0x0452) + case u'ѓ': // CYRILLIC SMALL GJE (0x0453) + case u'є': // CYRILLIC SMALL UKRAINIAN IE (0x0454) + case u'ѕ': // CYRILLIC SMALL DZE (0x0455) + case u'і': // CYRILLIC SMALL BYELORUSSIAN-UKRAINIAN I (0x0456) + case u'ї': // CYRILLIC SMALL YI (0x0457) + case u'ј': // CYRILLIC SMALL JE (0x0458) + case u'љ': // CYRILLIC SMALL LJE (0x0459) + case u'њ': // CYRILLIC SMALL NJE (0x045a) + case u'ћ': // CYRILLIC SMALL TSHE (0x045b) + case u'ќ': // CYRILLIC SMALL KJE (0x045c) + case u'ѝ': // CYRILLIC SMALL I W/ GRAVE (0x045d) + case u'ў': // CYRILLIC SMALL SHORT U (0x045e) + case u'џ': // CYRILLIC SMALL DZHE (0x045f) + case u'ѡ': // CYRILLIC SMALL OMEGA (0x0461) + case u'ѣ': // CYRILLIC SMALL YAT (0x0463) + case u'ѥ': // CYRILLIC SMALL IOTIFIED E (0x0465) + case u'ѧ': // CYRILLIC SMALL LITTLE YUS (0x0467) + case u'ѩ': // CYRILLIC SMALL IOTIFIED LITTLE YUS (0x0469) + case u'ѫ': // CYRILLIC SMALL BIG YUS (0x046b) + case u'ѭ': // CYRILLIC SMALL IOTIFIED BIG YUS (0x046d) + case u'ѯ': // CYRILLIC SMALL KSI (0x046f) + case u'ѱ': // CYRILLIC SMALL PSI (0x0471) + case u'ѳ': // CYRILLIC SMALL FITA (0x0473) + case u'ѵ': // CYRILLIC SMALL IZHITSA (0x0475) + case u'ѷ': // CYRILLIC SMALL IZHITSA W/ DOUBLE GRAVE ACCENT (0x0477) + case u'ѹ': // CYRILLIC SMALL UK (0x0479) + case u'ѻ': // CYRILLIC SMALL ROUND OMEGA (0x047b) + case u'ѽ': // CYRILLIC SMALL OMEGA W/ TITLO (0x047d) + case u'ѿ': // CYRILLIC SMALL OT (0x047f) + case u'ҁ': // CYRILLIC SMALL KOPPA (0x0481) + case u'ҋ': // CYRILLIC SMALL SHORT I W/ TAIL (0x048b) + case u'ҍ': // CYRILLIC SMALL SEMISOFT SIGN (0x048d) + case u'ҏ': // CYRILLIC SMALL ER W/ TICK (0x048f) + case u'ґ': // CYRILLIC SMALL GHE W/ UPTURN (0x0491) + case u'ғ': // CYRILLIC SMALL GHE W/ STROKE (0x0493) + case u'ҕ': // CYRILLIC SMALL GHE W/ MIDDLE HOOK (0x0495) + case u'җ': // CYRILLIC SMALL ZHE W/ DESCENDER (0x0497) + case u'ҙ': // CYRILLIC SMALL ZE W/ DESCENDER (0x0499) + case u'қ': // CYRILLIC SMALL KA W/ DESCENDER (0x049b) + case u'ҝ': // CYRILLIC SMALL KA W/ VERTICAL STROKE (0x049d) + case u'ҟ': // CYRILLIC SMALL KA W/ STROKE (0x049f) + case u'ҡ': // CYRILLIC SMALL BASHKIR KA (0x04a1) + case u'ң': // CYRILLIC SMALL EN W/ DESCENDER (0x04a3) + case u'ҥ': // CYRILLIC SMALL LIGATURE EN GHE (0x04a5) + case u'ҧ': // CYRILLIC SMALL PE W/ MIDDLE HOOK (0x04a7) + case u'ҩ': // CYRILLIC SMALL ABKHASIAN HA (0x04a9) + case u'ҫ': // CYRILLIC SMALL ES W/ DESCENDER (0x04ab) + case u'ҭ': // CYRILLIC SMALL TE W/ DESCENDER (0x04ad) + case u'ү': // CYRILLIC SMALL STRAIGHT U (0x04af) + case u'ұ': // CYRILLIC SMALL STRAIGHT U W/ STROKE (0x04b1) + case u'ҳ': // CYRILLIC SMALL HA W/ DESCENDER (0x04b3) + case u'ҵ': // CYRILLIC SMALL LIGATURE TE TSE (0x04b5) + case u'ҷ': // CYRILLIC SMALL CHE W/ DESCENDER (0x04b7) + case u'ҹ': // CYRILLIC SMALL CHE W/ VERTICAL STROKE (0x04b9) + case u'һ': // CYRILLIC SMALL SHHA (0x04bb) + case u'ҽ': // CYRILLIC SMALL ABKHASIAN CHE (0x04bd) + case u'ҿ': // CYRILLIC SMALL ABKHASIAN CHE W/ DESCENDER (0x04bf) + case u'ӂ': // CYRILLIC SMALL ZHE W/ BREVE (0x04c2) + case u'ӄ': // CYRILLIC SMALL KA W/ HOOK (0x04c4) + case u'ӆ': // CYRILLIC SMALL EL W/ TAIL (0x04c6) + case u'ӈ': // CYRILLIC SMALL EN W/ HOOK (0x04c8) + case u'ӊ': // CYRILLIC SMALL EN W/ TAIL (0x04ca) + case u'ӌ': // CYRILLIC SMALL KHAKASSIAN CHE (0x04cc) + case u'ӎ': // CYRILLIC SMALL EM W/ TAIL (0x04ce) + case u'ӏ': // CYRILLIC SMALL PALOCHKA (0x04cf) + case u'ӑ': // CYRILLIC SMALL A W/ BREVE (0x04d1) + case u'ӓ': // CYRILLIC SMALL A W/ DIAERESIS (0x04d3) + case u'ӕ': // CYRILLIC SMALL LIGATURE A IE (0x04d5) + case u'ӗ': // CYRILLIC SMALL IE W/ BREVE (0x04d7) + case u'ә': // CYRILLIC SMALL SCHWA (0x04d9) + case u'ӛ': // CYRILLIC SMALL SCHWA W/ DIAERESIS (0x04db) + case u'ӝ': // CYRILLIC SMALL ZHE W/ DIAERESIS (0x04dd) + case u'ӟ': // CYRILLIC SMALL ZE W/ DIAERESIS (0x04df) + case u'ӡ': // CYRILLIC SMALL ABKHASIAN DZE (0x04e1) + case u'ӣ': // CYRILLIC SMALL I W/ MACRON (0x04e3) + case u'ӥ': // CYRILLIC SMALL I W/ DIAERESIS (0x04e5) + case u'ӧ': // CYRILLIC SMALL O W/ DIAERESIS (0x04e7) + case u'ө': // CYRILLIC SMALL BARRED O (0x04e9) + case u'ӫ': // CYRILLIC SMALL BARRED O W/ DIAERESIS (0x04eb) + case u'ӭ': // CYRILLIC SMALL E W/ DIAERESIS (0x04ed) + case u'ӯ': // CYRILLIC SMALL U W/ MACRON (0x04ef) + case u'ӱ': // CYRILLIC SMALL U W/ DIAERESIS (0x04f1) + case u'ӳ': // CYRILLIC SMALL U W/ DOUBLE ACUTE (0x04f3) + case u'ӵ': // CYRILLIC SMALL CHE W/ DIAERESIS (0x04f5) + case u'ӷ': // CYRILLIC SMALL GHE W/ DESCENDER (0x04f7) + case u'ӹ': // CYRILLIC SMALL YERU W/ DIAERESIS (0x04f9) + case u'ӻ': // CYRILLIC SMALL GHE W/ STROKE AND HOOK (0x04fb) + case u'ӽ': // CYRILLIC SMALL HA W/ HOOK (0x04fd) + case u'ӿ': // CYRILLIC SMALL HA W/ STROKE (0x04ff) + case u'ԁ': // CYRILLIC SMALL KOMI DE (0x0501) + case u'ԃ': // CYRILLIC SMALL KOMI DJE (0x0503) + case u'ԅ': // CYRILLIC SMALL KOMI ZJE (0x0505) + case u'ԇ': // CYRILLIC SMALL KOMI DZJE (0x0507) + case u'ԉ': // CYRILLIC SMALL KOMI LJE (0x0509) + case u'ԋ': // CYRILLIC SMALL KOMI NJE (0x050b) + case u'ԍ': // CYRILLIC SMALL KOMI SJE (0x050d) + case u'ԏ': // CYRILLIC SMALL KOMI TJE (0x050f) + case u'ԑ': // CYRILLIC SMALL REVERSED ZE (0x0511) + case u'ԓ': // CYRILLIC SMALL EL W/ HOOK (0x0513) + case u'ԕ': // CYRILLIC SMALL LHA (0x0515) + case u'ԗ': // CYRILLIC SMALL RHA (0x0517) + case u'ԙ': // CYRILLIC SMALL YAE (0x0519) + case u'ԛ': // CYRILLIC SMALL QA (0x051b) + case u'ԝ': // CYRILLIC SMALL WE (0x051d) + case u'ԟ': // CYRILLIC SMALL ALEUT KA (0x051f) + case u'ԡ': // CYRILLIC SMALL EL W/ MIDDLE HOOK (0x0521) + case u'ԣ': // CYRILLIC SMALL EN W/ MIDDLE HOOK (0x0523) + case u'ԥ': // CYRILLIC SMALL PE W/ DESCENDER (0x0525) + case u'ԧ': // CYRILLIC SMALL SHHA W/ DESCENDER (0x0527) + case u'ԩ': // CYRILLIC SMALL EN W/ LEFT HOOK (0x0529) + case u'ԫ': // CYRILLIC SMALL DZZHE (0x052b) + case u'ԭ': // CYRILLIC SMALL DCHE (0x052d) + case u'ԯ': // CYRILLIC SMALL EL W/ DESCENDER (0x052f) + case u'ՠ': // ARMENIAN SMALL TURNED AYB (0x0560) + case u'ա': // ARMENIAN SMALL AYB (0x0561) + case u'բ': // ARMENIAN SMALL BEN (0x0562) + case u'գ': // ARMENIAN SMALL GIM (0x0563) + case u'դ': // ARMENIAN SMALL DA (0x0564) + case u'ե': // ARMENIAN SMALL ECH (0x0565) + case u'զ': // ARMENIAN SMALL ZA (0x0566) + case u'է': // ARMENIAN SMALL EH (0x0567) + case u'ը': // ARMENIAN SMALL ET (0x0568) + case u'թ': // ARMENIAN SMALL TO (0x0569) + case u'ժ': // ARMENIAN SMALL ZHE (0x056a) + case u'ի': // ARMENIAN SMALL INI (0x056b) + case u'լ': // ARMENIAN SMALL LIWN (0x056c) + case u'խ': // ARMENIAN SMALL XEH (0x056d) + case u'ծ': // ARMENIAN SMALL CA (0x056e) + case u'կ': // ARMENIAN SMALL KEN (0x056f) + case u'հ': // ARMENIAN SMALL HO (0x0570) + case u'ձ': // ARMENIAN SMALL JA (0x0571) + case u'ղ': // ARMENIAN SMALL GHAD (0x0572) + case u'ճ': // ARMENIAN SMALL CHEH (0x0573) + case u'մ': // ARMENIAN SMALL MEN (0x0574) + case u'յ': // ARMENIAN SMALL YI (0x0575) + case u'ն': // ARMENIAN SMALL NOW (0x0576) + case u'շ': // ARMENIAN SMALL SHA (0x0577) + case u'ո': // ARMENIAN SMALL VO (0x0578) + case u'չ': // ARMENIAN SMALL CHA (0x0579) + case u'պ': // ARMENIAN SMALL PEH (0x057a) + case u'ջ': // ARMENIAN SMALL JHEH (0x057b) + case u'ռ': // ARMENIAN SMALL RA (0x057c) + case u'ս': // ARMENIAN SMALL SEH (0x057d) + case u'վ': // ARMENIAN SMALL VEW (0x057e) + case u'տ': // ARMENIAN SMALL TIWN (0x057f) + case u'ր': // ARMENIAN SMALL REH (0x0580) + case u'ց': // ARMENIAN SMALL CO (0x0581) + case u'ւ': // ARMENIAN SMALL YIWN (0x0582) + case u'փ': // ARMENIAN SMALL PIWR (0x0583) + case u'ք': // ARMENIAN SMALL KEH (0x0584) + case u'օ': // ARMENIAN SMALL OH (0x0585) + case u'ֆ': // ARMENIAN SMALL FEH (0x0586) + case u'և': // ARMENIAN SMALL LIGATURE ECH YIWN (0x0587) + case u'ֈ': // ARMENIAN SMALL YI W/ STROKE (0x0588) + case u'ა': // GEORGIAN LETTER AN (0x10d0) + case u'ბ': // GEORGIAN LETTER BAN (0x10d1) + case u'გ': // GEORGIAN LETTER GAN (0x10d2) + case u'დ': // GEORGIAN LETTER DON (0x10d3) + case u'ე': // GEORGIAN LETTER EN (0x10d4) + case u'ვ': // GEORGIAN LETTER VIN (0x10d5) + case u'ზ': // GEORGIAN LETTER ZEN (0x10d6) + case u'თ': // GEORGIAN LETTER TAN (0x10d7) + case u'ი': // GEORGIAN LETTER IN (0x10d8) + case u'კ': // GEORGIAN LETTER KAN (0x10d9) + case u'ლ': // GEORGIAN LETTER LAS (0x10da) + case u'მ': // GEORGIAN LETTER MAN (0x10db) + case u'ნ': // GEORGIAN LETTER NAR (0x10dc) + case u'ო': // GEORGIAN LETTER ON (0x10dd) + case u'პ': // GEORGIAN LETTER PAR (0x10de) + case u'ჟ': // GEORGIAN LETTER ZHAR (0x10df) + case u'რ': // GEORGIAN LETTER RAE (0x10e0) + case u'ს': // GEORGIAN LETTER SAN (0x10e1) + case u'ტ': // GEORGIAN LETTER TAR (0x10e2) + case u'უ': // GEORGIAN LETTER UN (0x10e3) + case u'ფ': // GEORGIAN LETTER PHAR (0x10e4) + case u'ქ': // GEORGIAN LETTER KHAR (0x10e5) + case u'ღ': // GEORGIAN LETTER GHAN (0x10e6) + case u'ყ': // GEORGIAN LETTER QAR (0x10e7) + case u'შ': // GEORGIAN LETTER SHIN (0x10e8) + case u'ჩ': // GEORGIAN LETTER CHIN (0x10e9) + case u'ც': // GEORGIAN LETTER CAN (0x10ea) + case u'ძ': // GEORGIAN LETTER JIL (0x10eb) + case u'წ': // GEORGIAN LETTER CIL (0x10ec) + case u'ჭ': // GEORGIAN LETTER CHAR (0x10ed) + case u'ხ': // GEORGIAN LETTER XAN (0x10ee) + case u'ჯ': // GEORGIAN LETTER JHAN (0x10ef) + case u'ჰ': // GEORGIAN LETTER HAE (0x10f0) + case u'ჱ': // GEORGIAN LETTER HE (0x10f1) + case u'ჲ': // GEORGIAN LETTER HIE (0x10f2) + case u'ჳ': // GEORGIAN LETTER WE (0x10f3) + case u'ჴ': // GEORGIAN LETTER HAR (0x10f4) + case u'ჵ': // GEORGIAN LETTER HOE (0x10f5) + case u'ჶ': // GEORGIAN LETTER FI (0x10f6) + case u'ჷ': // GEORGIAN LETTER YN (0x10f7) + case u'ჸ': // GEORGIAN LETTER ELIFI (0x10f8) + case u'ჹ': // GEORGIAN LETTER TURNED GAN (0x10f9) + case u'ჺ': // GEORGIAN LETTER AIN (0x10fa) + case u'ჽ': // GEORGIAN LETTER AEN (0x10fd) + case u'ჾ': // GEORGIAN LETTER HARD SIGN (0x10fe) + case u'ჿ': // GEORGIAN LETTER LABIAL SIGN (0x10ff) + case u'ᏸ': // CHEROKEE SMALL YE (0x13f8) + case u'ᏹ': // CHEROKEE SMALL YI (0x13f9) + case u'ᏺ': // CHEROKEE SMALL YO (0x13fa) + case u'ᏻ': // CHEROKEE SMALL YU (0x13fb) + case u'ᏼ': // CHEROKEE SMALL YV (0x13fc) + case u'ᏽ': // CHEROKEE SMALL MV (0x13fd) + case u'ᲀ': // CYRILLIC SMALL ROUNDED VE (0x1c80) + case u'ᲁ': // CYRILLIC SMALL LONG-LEGGED DE (0x1c81) + case u'ᲂ': // CYRILLIC SMALL NARROW O (0x1c82) + case u'ᲃ': // CYRILLIC SMALL WIDE ES (0x1c83) + case u'ᲄ': // CYRILLIC SMALL TALL TE (0x1c84) + case u'ᲅ': // CYRILLIC SMALL THREE-LEGGED TE (0x1c85) + case u'ᲆ': // CYRILLIC SMALL TALL HARD SIGN (0x1c86) + case u'ᲇ': // CYRILLIC SMALL TALL YAT (0x1c87) + case u'ᲈ': // CYRILLIC SMALL UNBLENDED UK (0x1c88) + case u'ᴀ': // LATIN LETTER SMALL CAPITAL A (0x1d00) + case u'ᴁ': // LATIN LETTER SMALL CAPITAL AE (0x1d01) + case u'ᴂ': // LATIN SMALL TURNED AE (0x1d02) + case u'ᴃ': // LATIN LETTER SMALL CAPITAL BARRED B (0x1d03) + case u'ᴄ': // LATIN LETTER SMALL CAPITAL C (0x1d04) + case u'ᴅ': // LATIN LETTER SMALL CAPITAL D (0x1d05) + case u'ᴆ': // LATIN LETTER SMALL CAPITAL ETH (0x1d06) + case u'ᴇ': // LATIN LETTER SMALL CAPITAL E (0x1d07) + case u'ᴈ': // LATIN SMALL TURNED OPEN E (0x1d08) + case u'ᴉ': // LATIN SMALL TURNED I (0x1d09) + case u'ᴊ': // LATIN LETTER SMALL CAPITAL J (0x1d0a) + case u'ᴋ': // LATIN LETTER SMALL CAPITAL K (0x1d0b) + case u'ᴌ': // LATIN LETTER SMALL CAPITAL L W/ STROKE (0x1d0c) + case u'ᴍ': // LATIN LETTER SMALL CAPITAL M (0x1d0d) + case u'ᴎ': // LATIN LETTER SMALL CAPITAL REVERSED N (0x1d0e) + case u'ᴏ': // LATIN LETTER SMALL CAPITAL O (0x1d0f) + case u'ᴐ': // LATIN LETTER SMALL CAPITAL OPEN O (0x1d10) + case u'ᴑ': // LATIN SMALL SIDEWAYS O (0x1d11) + case u'ᴒ': // LATIN SMALL SIDEWAYS OPEN O (0x1d12) + case u'ᴓ': // LATIN SMALL SIDEWAYS O W/ STROKE (0x1d13) + case u'ᴔ': // LATIN SMALL TURNED OE (0x1d14) + case u'ᴕ': // LATIN LETTER SMALL CAPITAL OU (0x1d15) + case u'ᴖ': // LATIN SMALL TOP HALF O (0x1d16) + case u'ᴗ': // LATIN SMALL BOTTOM HALF O (0x1d17) + case u'ᴘ': // LATIN LETTER SMALL CAPITAL P (0x1d18) + case u'ᴙ': // LATIN LETTER SMALL CAPITAL REVERSED R (0x1d19) + case u'ᴚ': // LATIN LETTER SMALL CAPITAL TURNED R (0x1d1a) + case u'ᴛ': // LATIN LETTER SMALL CAPITAL T (0x1d1b) + case u'ᴜ': // LATIN LETTER SMALL CAPITAL U (0x1d1c) + case u'ᴝ': // LATIN SMALL SIDEWAYS U (0x1d1d) + case u'ᴞ': // LATIN SMALL SIDEWAYS DIAERESIZED U (0x1d1e) + case u'ᴟ': // LATIN SMALL SIDEWAYS TURNED M (0x1d1f) + case u'ᴠ': // LATIN LETTER SMALL CAPITAL V (0x1d20) + case u'ᴡ': // LATIN LETTER SMALL CAPITAL W (0x1d21) + case u'ᴢ': // LATIN LETTER SMALL CAPITAL Z (0x1d22) + case u'ᴣ': // LATIN LETTER SMALL CAPITAL EZH (0x1d23) + case u'ᴤ': // LATIN LETTER VOICED LARYNGEAL SPIRANT (0x1d24) + case u'ᴥ': // LATIN LETTER AIN (0x1d25) + case u'ᴦ': // GREEK LETTER SMALL CAPITAL GAMMA (0x1d26) + case u'ᴧ': // GREEK LETTER SMALL CAPITAL LAMDA (0x1d27) + case u'ᴨ': // GREEK LETTER SMALL CAPITAL PI (0x1d28) + case u'ᴩ': // GREEK LETTER SMALL CAPITAL RHO (0x1d29) + case u'ᴪ': // GREEK LETTER SMALL CAPITAL PSI (0x1d2a) + case u'ᴫ': // CYRILLIC LETTER SMALL CAPITAL EL (0x1d2b) + case u'ᵫ': // LATIN SMALL UE (0x1d6b) + case u'ᵬ': // LATIN SMALL B W/ MIDDLE TILDE (0x1d6c) + case u'ᵭ': // LATIN SMALL D W/ MIDDLE TILDE (0x1d6d) + case u'ᵮ': // LATIN SMALL F W/ MIDDLE TILDE (0x1d6e) + case u'ᵯ': // LATIN SMALL M W/ MIDDLE TILDE (0x1d6f) + case u'ᵰ': // LATIN SMALL N W/ MIDDLE TILDE (0x1d70) + case u'ᵱ': // LATIN SMALL P W/ MIDDLE TILDE (0x1d71) + case u'ᵲ': // LATIN SMALL R W/ MIDDLE TILDE (0x1d72) + case u'ᵳ': // LATIN SMALL R W/ FISHHOOK AND MIDDLE TILDE (0x1d73) + case u'ᵴ': // LATIN SMALL S W/ MIDDLE TILDE (0x1d74) + case u'ᵵ': // LATIN SMALL T W/ MIDDLE TILDE (0x1d75) + case u'ᵶ': // LATIN SMALL Z W/ MIDDLE TILDE (0x1d76) + case u'ᵷ': // LATIN SMALL TURNED G (0x1d77) + case u'ᵹ': // LATIN SMALL INSULAR G (0x1d79) + case u'ᵺ': // LATIN SMALL TH W/ STRIKETHROUGH (0x1d7a) + case u'ᵻ': // LATIN SMALL CAPITAL LETTER I W/ STROKE (0x1d7b) + case u'ᵼ': // LATIN SMALL IOTA W/ STROKE (0x1d7c) + case u'ᵽ': // LATIN SMALL P W/ STROKE (0x1d7d) + case u'ᵾ': // LATIN SMALL CAPITAL LETTER U W/ STROKE (0x1d7e) + case u'ᵿ': // LATIN SMALL UPSILON W/ STROKE (0x1d7f) + case u'ᶀ': // LATIN SMALL B W/ PALATAL HOOK (0x1d80) + case u'ᶁ': // LATIN SMALL D W/ PALATAL HOOK (0x1d81) + case u'ᶂ': // LATIN SMALL F W/ PALATAL HOOK (0x1d82) + case u'ᶃ': // LATIN SMALL G W/ PALATAL HOOK (0x1d83) + case u'ᶄ': // LATIN SMALL K W/ PALATAL HOOK (0x1d84) + case u'ᶅ': // LATIN SMALL L W/ PALATAL HOOK (0x1d85) + case u'ᶆ': // LATIN SMALL M W/ PALATAL HOOK (0x1d86) + case u'ᶇ': // LATIN SMALL N W/ PALATAL HOOK (0x1d87) + case u'ᶈ': // LATIN SMALL P W/ PALATAL HOOK (0x1d88) + case u'ᶉ': // LATIN SMALL R W/ PALATAL HOOK (0x1d89) + case u'ᶊ': // LATIN SMALL S W/ PALATAL HOOK (0x1d8a) + case u'ᶋ': // LATIN SMALL ESH W/ PALATAL HOOK (0x1d8b) + case u'ᶌ': // LATIN SMALL V W/ PALATAL HOOK (0x1d8c) + case u'ᶍ': // LATIN SMALL X W/ PALATAL HOOK (0x1d8d) + case u'ᶎ': // LATIN SMALL Z W/ PALATAL HOOK (0x1d8e) + case u'ᶏ': // LATIN SMALL A W/ RETROFLEX HOOK (0x1d8f) + case u'ᶐ': // LATIN SMALL ALPHA W/ RETROFLEX HOOK (0x1d90) + case u'ᶑ': // LATIN SMALL D W/ HOOK AND TAIL (0x1d91) + case u'ᶒ': // LATIN SMALL E W/ RETROFLEX HOOK (0x1d92) + case u'ᶓ': // LATIN SMALL OPEN E W/ RETROFLEX HOOK (0x1d93) + case u'ᶔ': // LATIN SMALL REVERSED OPEN E W/ RETROFLEX HOOK + // (0x1d94) + case u'ᶕ': // LATIN SMALL SCHWA W/ RETROFLEX HOOK (0x1d95) + case u'ᶖ': // LATIN SMALL I W/ RETROFLEX HOOK (0x1d96) + case u'ᶗ': // LATIN SMALL OPEN O W/ RETROFLEX HOOK (0x1d97) + case u'ᶘ': // LATIN SMALL ESH W/ RETROFLEX HOOK (0x1d98) + case u'ᶙ': // LATIN SMALL U W/ RETROFLEX HOOK (0x1d99) + case u'ᶚ': // LATIN SMALL EZH W/ RETROFLEX HOOK (0x1d9a) + case u'ḁ': // LATIN SMALL A W/ RING BELOW (0x1e01) + case u'ḃ': // LATIN SMALL B W/ DOT ABOVE (0x1e03) + case u'ḅ': // LATIN SMALL B W/ DOT BELOW (0x1e05) + case u'ḇ': // LATIN SMALL B W/ LINE BELOW (0x1e07) + case u'ḉ': // LATIN SMALL C W/ CEDILLA AND ACUTE (0x1e09) + case u'ḋ': // LATIN SMALL D W/ DOT ABOVE (0x1e0b) + case u'ḍ': // LATIN SMALL D W/ DOT BELOW (0x1e0d) + case u'ḏ': // LATIN SMALL D W/ LINE BELOW (0x1e0f) + case u'ḑ': // LATIN SMALL D W/ CEDILLA (0x1e11) + case u'ḓ': // LATIN SMALL D W/ CIRCUMFLEX BELOW (0x1e13) + case u'ḕ': // LATIN SMALL E W/ MACRON AND GRAVE (0x1e15) + case u'ḗ': // LATIN SMALL E W/ MACRON AND ACUTE (0x1e17) + case u'ḙ': // LATIN SMALL E W/ CIRCUMFLEX BELOW (0x1e19) + case u'ḛ': // LATIN SMALL E W/ TILDE BELOW (0x1e1b) + case u'ḝ': // LATIN SMALL E W/ CEDILLA AND BREVE (0x1e1d) + case u'ḟ': // LATIN SMALL F W/ DOT ABOVE (0x1e1f) + case u'ḡ': // LATIN SMALL G W/ MACRON (0x1e21) + case u'ḣ': // LATIN SMALL H W/ DOT ABOVE (0x1e23) + case u'ḥ': // LATIN SMALL H W/ DOT BELOW (0x1e25) + case u'ḧ': // LATIN SMALL H W/ DIAERESIS (0x1e27) + case u'ḩ': // LATIN SMALL H W/ CEDILLA (0x1e29) + case u'ḫ': // LATIN SMALL H W/ BREVE BELOW (0x1e2b) + case u'ḭ': // LATIN SMALL I W/ TILDE BELOW (0x1e2d) + case u'ḯ': // LATIN SMALL I W/ DIAERESIS AND ACUTE (0x1e2f) + case u'ḱ': // LATIN SMALL K W/ ACUTE (0x1e31) + case u'ḳ': // LATIN SMALL K W/ DOT BELOW (0x1e33) + case u'ḵ': // LATIN SMALL K W/ LINE BELOW (0x1e35) + case u'ḷ': // LATIN SMALL L W/ DOT BELOW (0x1e37) + case u'ḹ': // LATIN SMALL L W/ DOT BELOW AND MACRON (0x1e39) + case u'ḻ': // LATIN SMALL L W/ LINE BELOW (0x1e3b) + case u'ḽ': // LATIN SMALL L W/ CIRCUMFLEX BELOW (0x1e3d) + case u'ḿ': // LATIN SMALL M W/ ACUTE (0x1e3f) + case u'ṁ': // LATIN SMALL M W/ DOT ABOVE (0x1e41) + case u'ṃ': // LATIN SMALL M W/ DOT BELOW (0x1e43) + case u'ṅ': // LATIN SMALL N W/ DOT ABOVE (0x1e45) + case u'ṇ': // LATIN SMALL N W/ DOT BELOW (0x1e47) + case u'ṉ': // LATIN SMALL N W/ LINE BELOW (0x1e49) + case u'ṋ': // LATIN SMALL N W/ CIRCUMFLEX BELOW (0x1e4b) + case u'ṍ': // LATIN SMALL O W/ TILDE AND ACUTE (0x1e4d) + case u'ṏ': // LATIN SMALL O W/ TILDE AND DIAERESIS (0x1e4f) + case u'ṑ': // LATIN SMALL O W/ MACRON AND GRAVE (0x1e51) + case u'ṓ': // LATIN SMALL O W/ MACRON AND ACUTE (0x1e53) + case u'ṕ': // LATIN SMALL P W/ ACUTE (0x1e55) + case u'ṗ': // LATIN SMALL P W/ DOT ABOVE (0x1e57) + case u'ṙ': // LATIN SMALL R W/ DOT ABOVE (0x1e59) + case u'ṛ': // LATIN SMALL R W/ DOT BELOW (0x1e5b) + case u'ṝ': // LATIN SMALL R W/ DOT BELOW AND MACRON (0x1e5d) + case u'ṟ': // LATIN SMALL R W/ LINE BELOW (0x1e5f) + case u'ṡ': // LATIN SMALL S W/ DOT ABOVE (0x1e61) + case u'ṣ': // LATIN SMALL S W/ DOT BELOW (0x1e63) + case u'ṥ': // LATIN SMALL S W/ ACUTE AND DOT ABOVE (0x1e65) + case u'ṧ': // LATIN SMALL S W/ CARON AND DOT ABOVE (0x1e67) + case u'ṩ': // LATIN SMALL S W/ DOT BELOW AND DOT ABOVE (0x1e69) + case u'ṫ': // LATIN SMALL T W/ DOT ABOVE (0x1e6b) + case u'ṭ': // LATIN SMALL T W/ DOT BELOW (0x1e6d) + case u'ṯ': // LATIN SMALL T W/ LINE BELOW (0x1e6f) + case u'ṱ': // LATIN SMALL T W/ CIRCUMFLEX BELOW (0x1e71) + case u'ṳ': // LATIN SMALL U W/ DIAERESIS BELOW (0x1e73) + case u'ṵ': // LATIN SMALL U W/ TILDE BELOW (0x1e75) + case u'ṷ': // LATIN SMALL U W/ CIRCUMFLEX BELOW (0x1e77) + case u'ṹ': // LATIN SMALL U W/ TILDE AND ACUTE (0x1e79) + case u'ṻ': // LATIN SMALL U W/ MACRON AND DIAERESIS (0x1e7b) + case u'ṽ': // LATIN SMALL V W/ TILDE (0x1e7d) + case u'ṿ': // LATIN SMALL V W/ DOT BELOW (0x1e7f) + case u'ẁ': // LATIN SMALL W W/ GRAVE (0x1e81) + case u'ẃ': // LATIN SMALL W W/ ACUTE (0x1e83) + case u'ẅ': // LATIN SMALL W W/ DIAERESIS (0x1e85) + case u'ẇ': // LATIN SMALL W W/ DOT ABOVE (0x1e87) + case u'ẉ': // LATIN SMALL W W/ DOT BELOW (0x1e89) + case u'ẋ': // LATIN SMALL X W/ DOT ABOVE (0x1e8b) + case u'ẍ': // LATIN SMALL X W/ DIAERESIS (0x1e8d) + case u'ẏ': // LATIN SMALL Y W/ DOT ABOVE (0x1e8f) + case u'ẑ': // LATIN SMALL Z W/ CIRCUMFLEX (0x1e91) + case u'ẓ': // LATIN SMALL Z W/ DOT BELOW (0x1e93) + case u'ẕ': // LATIN SMALL Z W/ LINE BELOW (0x1e95) + case u'ẖ': // LATIN SMALL H W/ LINE BELOW (0x1e96) + case u'ẗ': // LATIN SMALL T W/ DIAERESIS (0x1e97) + case u'ẘ': // LATIN SMALL W W/ RING ABOVE (0x1e98) + case u'ẙ': // LATIN SMALL Y W/ RING ABOVE (0x1e99) + case u'ẚ': // LATIN SMALL A W/ RIGHT HALF RING (0x1e9a) + case u'ẛ': // LATIN SMALL LONG S W/ DOT ABOVE (0x1e9b) + case u'ẜ': // LATIN SMALL LONG S W/ DIAGONAL STROKE (0x1e9c) + case u'ẝ': // LATIN SMALL LONG S W/ HIGH STROKE (0x1e9d) + case u'ẟ': // LATIN SMALL DELTA (0x1e9f) + case u'ạ': // LATIN SMALL A W/ DOT BELOW (0x1ea1) + case u'ả': // LATIN SMALL A W/ HOOK ABOVE (0x1ea3) + case u'ấ': // LATIN SMALL A W/ CIRCUMFLEX AND ACUTE (0x1ea5) + case u'ầ': // LATIN SMALL A W/ CIRCUMFLEX AND GRAVE (0x1ea7) + case u'ẩ': // LATIN SMALL A W/ CIRCUMFLEX AND HOOK ABOVE (0x1ea9) + case u'ẫ': // LATIN SMALL A W/ CIRCUMFLEX AND TILDE (0x1eab) + case u'ậ': // LATIN SMALL A W/ CIRCUMFLEX AND DOT BELOW (0x1ead) + case u'ắ': // LATIN SMALL A W/ BREVE AND ACUTE (0x1eaf) + case u'ằ': // LATIN SMALL A W/ BREVE AND GRAVE (0x1eb1) + case u'ẳ': // LATIN SMALL A W/ BREVE AND HOOK ABOVE (0x1eb3) + case u'ẵ': // LATIN SMALL A W/ BREVE AND TILDE (0x1eb5) + case u'ặ': // LATIN SMALL A W/ BREVE AND DOT BELOW (0x1eb7) + case u'ẹ': // LATIN SMALL E W/ DOT BELOW (0x1eb9) + case u'ẻ': // LATIN SMALL E W/ HOOK ABOVE (0x1ebb) + case u'ẽ': // LATIN SMALL E W/ TILDE (0x1ebd) + case u'ế': // LATIN SMALL E W/ CIRCUMFLEX AND ACUTE (0x1ebf) + case u'ề': // LATIN SMALL E W/ CIRCUMFLEX AND GRAVE (0x1ec1) + case u'ể': // LATIN SMALL E W/ CIRCUMFLEX AND HOOK ABOVE (0x1ec3) + case u'ễ': // LATIN SMALL E W/ CIRCUMFLEX AND TILDE (0x1ec5) + case u'ệ': // LATIN SMALL E W/ CIRCUMFLEX AND DOT BELOW (0x1ec7) + case u'ỉ': // LATIN SMALL I W/ HOOK ABOVE (0x1ec9) + case u'ị': // LATIN SMALL I W/ DOT BELOW (0x1ecb) + case u'ọ': // LATIN SMALL O W/ DOT BELOW (0x1ecd) + case u'ỏ': // LATIN SMALL O W/ HOOK ABOVE (0x1ecf) + case u'ố': // LATIN SMALL O W/ CIRCUMFLEX AND ACUTE (0x1ed1) + case u'ồ': // LATIN SMALL O W/ CIRCUMFLEX AND GRAVE (0x1ed3) + case u'ổ': // LATIN SMALL O W/ CIRCUMFLEX AND HOOK ABOVE (0x1ed5) + case u'ỗ': // LATIN SMALL O W/ CIRCUMFLEX AND TILDE (0x1ed7) + case u'ộ': // LATIN SMALL O W/ CIRCUMFLEX AND DOT BELOW (0x1ed9) + case u'ớ': // LATIN SMALL O W/ HORN AND ACUTE (0x1edb) + case u'ờ': // LATIN SMALL O W/ HORN AND GRAVE (0x1edd) + case u'ở': // LATIN SMALL O W/ HORN AND HOOK ABOVE (0x1edf) + case u'ỡ': // LATIN SMALL O W/ HORN AND TILDE (0x1ee1) + case u'ợ': // LATIN SMALL O W/ HORN AND DOT BELOW (0x1ee3) + case u'ụ': // LATIN SMALL U W/ DOT BELOW (0x1ee5) + case u'ủ': // LATIN SMALL U W/ HOOK ABOVE (0x1ee7) + case u'ứ': // LATIN SMALL U W/ HORN AND ACUTE (0x1ee9) + case u'ừ': // LATIN SMALL U W/ HORN AND GRAVE (0x1eeb) + case u'ử': // LATIN SMALL U W/ HORN AND HOOK ABOVE (0x1eed) + case u'ữ': // LATIN SMALL U W/ HORN AND TILDE (0x1eef) + case u'ự': // LATIN SMALL U W/ HORN AND DOT BELOW (0x1ef1) + case u'ỳ': // LATIN SMALL Y W/ GRAVE (0x1ef3) + case u'ỵ': // LATIN SMALL Y W/ DOT BELOW (0x1ef5) + case u'ỷ': // LATIN SMALL Y W/ HOOK ABOVE (0x1ef7) + case u'ỹ': // LATIN SMALL Y W/ TILDE (0x1ef9) + case u'ỻ': // LATIN SMALL MIDDLE-WELSH LL (0x1efb) + case u'ỽ': // LATIN SMALL MIDDLE-WELSH V (0x1efd) + case u'ỿ': // LATIN SMALL Y W/ LOOP (0x1eff) + case u'ἀ': // GREEK SMALL ALPHA W/ PSILI (0x1f00) + case u'ἁ': // GREEK SMALL ALPHA W/ DASIA (0x1f01) + case u'ἂ': // GREEK SMALL ALPHA W/ PSILI AND VARIA (0x1f02) + case u'ἃ': // GREEK SMALL ALPHA W/ DASIA AND VARIA (0x1f03) + case u'ἄ': // GREEK SMALL ALPHA W/ PSILI AND OXIA (0x1f04) + case u'ἅ': // GREEK SMALL ALPHA W/ DASIA AND OXIA (0x1f05) + case u'ἆ': // GREEK SMALL ALPHA W/ PSILI AND PERISPOMENI (0x1f06) + case u'ἇ': // GREEK SMALL ALPHA W/ DASIA AND PERISPOMENI (0x1f07) + case u'ἐ': // GREEK SMALL EPSILON W/ PSILI (0x1f10) + case u'ἑ': // GREEK SMALL EPSILON W/ DASIA (0x1f11) + case u'ἒ': // GREEK SMALL EPSILON W/ PSILI AND VARIA (0x1f12) + case u'ἓ': // GREEK SMALL EPSILON W/ DASIA AND VARIA (0x1f13) + case u'ἔ': // GREEK SMALL EPSILON W/ PSILI AND OXIA (0x1f14) + case u'ἕ': // GREEK SMALL EPSILON W/ DASIA AND OXIA (0x1f15) + case u'ἠ': // GREEK SMALL ETA W/ PSILI (0x1f20) + case u'ἡ': // GREEK SMALL ETA W/ DASIA (0x1f21) + case u'ἢ': // GREEK SMALL ETA W/ PSILI AND VARIA (0x1f22) + case u'ἣ': // GREEK SMALL ETA W/ DASIA AND VARIA (0x1f23) + case u'ἤ': // GREEK SMALL ETA W/ PSILI AND OXIA (0x1f24) + case u'ἥ': // GREEK SMALL ETA W/ DASIA AND OXIA (0x1f25) + case u'ἦ': // GREEK SMALL ETA W/ PSILI AND PERISPOMENI (0x1f26) + case u'ἧ': // GREEK SMALL ETA W/ DASIA AND PERISPOMENI (0x1f27) + case u'ἰ': // GREEK SMALL IOTA W/ PSILI (0x1f30) + case u'ἱ': // GREEK SMALL IOTA W/ DASIA (0x1f31) + case u'ἲ': // GREEK SMALL IOTA W/ PSILI AND VARIA (0x1f32) + case u'ἳ': // GREEK SMALL IOTA W/ DASIA AND VARIA (0x1f33) + case u'ἴ': // GREEK SMALL IOTA W/ PSILI AND OXIA (0x1f34) + case u'ἵ': // GREEK SMALL IOTA W/ DASIA AND OXIA (0x1f35) + case u'ἶ': // GREEK SMALL IOTA W/ PSILI AND PERISPOMENI (0x1f36) + case u'ἷ': // GREEK SMALL IOTA W/ DASIA AND PERISPOMENI (0x1f37) + case u'ὀ': // GREEK SMALL OMICRON W/ PSILI (0x1f40) + case u'ὁ': // GREEK SMALL OMICRON W/ DASIA (0x1f41) + case u'ὂ': // GREEK SMALL OMICRON W/ PSILI AND VARIA (0x1f42) + case u'ὃ': // GREEK SMALL OMICRON W/ DASIA AND VARIA (0x1f43) + case u'ὄ': // GREEK SMALL OMICRON W/ PSILI AND OXIA (0x1f44) + case u'ὅ': // GREEK SMALL OMICRON W/ DASIA AND OXIA (0x1f45) + case u'ὐ': // GREEK SMALL UPSILON W/ PSILI (0x1f50) + case u'ὑ': // GREEK SMALL UPSILON W/ DASIA (0x1f51) + case u'ὒ': // GREEK SMALL UPSILON W/ PSILI AND VARIA (0x1f52) + case u'ὓ': // GREEK SMALL UPSILON W/ DASIA AND VARIA (0x1f53) + case u'ὔ': // GREEK SMALL UPSILON W/ PSILI AND OXIA (0x1f54) + case u'ὕ': // GREEK SMALL UPSILON W/ DASIA AND OXIA (0x1f55) + case u'ὖ': // GREEK SMALL UPSILON W/ PSILI AND PERISPOMENI (0x1f56) + case u'ὗ': // GREEK SMALL UPSILON W/ DASIA AND PERISPOMENI (0x1f57) + case u'ὠ': // GREEK SMALL OMEGA W/ PSILI (0x1f60) + case u'ὡ': // GREEK SMALL OMEGA W/ DASIA (0x1f61) + case u'ὢ': // GREEK SMALL OMEGA W/ PSILI AND VARIA (0x1f62) + case u'ὣ': // GREEK SMALL OMEGA W/ DASIA AND VARIA (0x1f63) + case u'ὤ': // GREEK SMALL OMEGA W/ PSILI AND OXIA (0x1f64) + case u'ὥ': // GREEK SMALL OMEGA W/ DASIA AND OXIA (0x1f65) + case u'ὦ': // GREEK SMALL OMEGA W/ PSILI AND PERISPOMENI (0x1f66) + case u'ὧ': // GREEK SMALL OMEGA W/ DASIA AND PERISPOMENI (0x1f67) + case u'ὰ': // GREEK SMALL ALPHA W/ VARIA (0x1f70) + case u'ά': // GREEK SMALL ALPHA W/ OXIA (0x1f71) + case u'ὲ': // GREEK SMALL EPSILON W/ VARIA (0x1f72) + case u'έ': // GREEK SMALL EPSILON W/ OXIA (0x1f73) + case u'ὴ': // GREEK SMALL ETA W/ VARIA (0x1f74) + case u'ή': // GREEK SMALL ETA W/ OXIA (0x1f75) + case u'ὶ': // GREEK SMALL IOTA W/ VARIA (0x1f76) + case u'ί': // GREEK SMALL IOTA W/ OXIA (0x1f77) + case u'ὸ': // GREEK SMALL OMICRON W/ VARIA (0x1f78) + case u'ό': // GREEK SMALL OMICRON W/ OXIA (0x1f79) + case u'ὺ': // GREEK SMALL UPSILON W/ VARIA (0x1f7a) + case u'ύ': // GREEK SMALL UPSILON W/ OXIA (0x1f7b) + case u'ὼ': // GREEK SMALL OMEGA W/ VARIA (0x1f7c) + case u'ώ': // GREEK SMALL OMEGA W/ OXIA (0x1f7d) + case u'ᾀ': // GREEK SMALL ALPHA W/ PSILI YPOGEGRAMMENI (0x1f80) + case u'ᾁ': // GREEK SMALL ALPHA W/ DASIA YPOGEGRAMMENI (0x1f81) + case u'ᾂ': // GREEK SMALL ALPHA W/ PSILI VARIA YPOGEGRAMMENI (0x1f82) + case u'ᾃ': // GREEK SMALL ALPHA W/ DASIA VARIA YPOGEGRAMMENI (0x1f83) + case u'ᾄ': // GREEK SMALL ALPHA W/ PSILI OXIA YPOGEGRAMMENI (0x1f84) + case u'ᾅ': // GREEK SMALL ALPHA W/ DASIA OXIA YPOGEGRAMMENI (0x1f85) + case u'ᾆ': // GREEK SMALL ALPHA W/ PSILI PERISPOMENI YPOGEGRAMMENI (0x1f86) + case u'ᾇ': // GREEK SMALL ALPHA W/ DASIA PERISPOMENI YPOGEGRAMMENI (0x1f87) + case u'ᾐ': // GREEK SMALL ETA W/ PSILI YPOGEGRAMMENI (0x1f90) + case u'ᾑ': // GREEK SMALL ETA W/ DASIA YPOGEGRAMMENI (0x1f91) + case u'ᾒ': // GREEK SMALL ETA W/ PSILI VARIA YPOGEGRAMMENI 0x1f92) + case u'ᾓ': // GREEK SMALL ETA W/ DASIA VARIA YPOGEGRAMMENI 0x1f93) + case u'ᾔ': // GREEK SMALL ETA W/ PSILI OXIA YPOGEGRAMMENI 0x1f94) + case u'ᾕ': // GREEK SMALL ETA W/ DASIA OXIA YPOGEGRAMMENI 0x1f95) + case u'ᾖ': // GREEK SMALL ETA W/ PSILI PERISPOMENI YPOGEGRAMMENI (0x1f96) + case u'ᾗ': // GREEK SMALL ETA W/ DASIA PERISPOMENI YPOGEGRAMMENI (0x1f97) + case u'ᾠ': // GREEK SMALL OMEGA W/ PSILI YPOGEGRAMMENI (0x1fa0) + case u'ᾡ': // GREEK SMALL OMEGA W/ DASIA YPOGEGRAMMENI (0x1fa1) + case u'ᾢ': // GREEK SMALL OMEGA W/ PSILI VARIA YPOGEGRAMMENI (0x1fa2) + case u'ᾣ': // GREEK SMALL OMEGA W/ DASIA VARIA YPOGEGRAMMENI (0x1fa3) + case u'ᾤ': // GREEK SMALL OMEGA W/ PSILI OXIA YPOGEGRAMMENI (0x1fa4) + case u'ᾥ': // GREEK SMALL OMEGA W/ DASIA OXIA YPOGEGRAMMENI (0x1fa5) + case u'ᾦ': // GREEK SMALL OMEGA W/ PSILI PERISPOMENI YPOGEGRAMMENI (0x1fa6) + case u'ᾧ': // GREEK SMALL OMEGA W/ DASIA PERISPOMENI YPOGEGRAMMENI (0x1fa7) + case u'ᾰ': // GREEK SMALL ALPHA W/ VRACHY (0x1fb0) + case u'ᾱ': // GREEK SMALL ALPHA W/ MACRON (0x1fb1) + case u'ᾲ': // GREEK SMALL ALPHA W/ VARIA YPOGEGRAMMENI (0x1fb2) + case u'ᾳ': // GREEK SMALL ALPHA W/ YPOGEGRAMMENI (0x1fb3) + case u'ᾴ': // GREEK SMALL ALPHA W/ OXIA AND YPOGEGRAMMENI (0x1fb4) + case u'ᾶ': // GREEK SMALL ALPHA W/ PERISPOMENI (0x1fb6) + case u'ᾷ': // GREEK SMALL ALPHA W/ PERISPOMENI AND YPOGEGRAMMENI (0x1fb7) + case u'ι': // GREEK PROSGEGRAMMENI (0x1fbe) + case u'ῂ': // GREEK SMALL ETA W/ VARIA AND YPOGEGRAMMENI (0x1fc2) + case u'ῃ': // GREEK SMALL ETA W/ YPOGEGRAMMENI (0x1fc3) + case u'ῄ': // GREEK SMALL ETA W/ OXIA AND YPOGEGRAMMENI (0x1fc4) + case u'ῆ': // GREEK SMALL ETA W/ PERISPOMENI (0x1fc6) + case u'ῇ': // GREEK SMALL ETA W/ PERISPOMENI AND YPOGEGRAMMENI (0x1fc7) + case u'ῐ': // GREEK SMALL IOTA W/ VRACHY (0x1fd0) + case u'ῑ': // GREEK SMALL IOTA W/ MACRON (0x1fd1) + case u'ῒ': // GREEK SMALL IOTA W/ DIALYTIKA AND VARIA (0x1fd2) + case u'ΐ': // GREEK SMALL IOTA W/ DIALYTIKA AND OXIA (0x1fd3) + case u'ῖ': // GREEK SMALL IOTA W/ PERISPOMENI (0x1fd6) + case u'ῗ': // GREEK SMALL IOTA W/ DIALYTIKA AND PERISPOMENI (0x1fd7) + case u'ῠ': // GREEK SMALL UPSILON W/ VRACHY (0x1fe0) + case u'ῡ': // GREEK SMALL UPSILON W/ MACRON (0x1fe1) + case u'ῢ': // GREEK SMALL UPSILON W/ DIALYTIKA AND VARIA (0x1fe2) + case u'ΰ': // GREEK SMALL UPSILON W/ DIALYTIKA AND OXIA (0x1fe3) + case u'ῤ': // GREEK SMALL RHO W/ PSILI (0x1fe4) + case u'ῥ': // GREEK SMALL RHO W/ DASIA (0x1fe5) + case u'ῦ': // GREEK SMALL UPSILON W/ PERISPOMENI (0x1fe6) + case u'ῧ': // GREEK SMALL UPSILON W/ DIALYTIKA AND PERISPOMENI (0x1fe7) + case u'ῲ': // GREEK SMALL OMEGA W/ VARIA AND YPOGEGRAMMENI (0x1ff2) + case u'ῳ': // GREEK SMALL OMEGA W/ YPOGEGRAMMENI (0x1ff3) + case u'ῴ': // GREEK SMALL OMEGA W/ OXIA AND YPOGEGRAMMENI (0x1ff4) + case u'ῶ': // GREEK SMALL OMEGA W/ PERISPOMENI (0x1ff6) + case u'ῷ': // GREEK SMALL OMEGA W/ PERISPOMENI AND YPOGEGRAMMENI (0x1ff7) + case u'ℊ': // SCRIPT SMALL G (0x210a) + case u'ℎ': // PLANCK CONSTANT (0x210e) + case u'ℏ': // PLANCK CONSTANT OVER TWO PI (0x210f) + case u'ℓ': // SCRIPT SMALL L (0x2113) + case u'ℯ': // SCRIPT SMALL E (0x212f) + case u'ℴ': // SCRIPT SMALL O (0x2134) + case u'ℹ': // INFORMATION SOURCE (0x2139) + case u'ℼ': // DOUBLE-STRUCK SMALL PI (0x213c) + case u'ℽ': // DOUBLE-STRUCK SMALL GAMMA (0x213d) + case u'ⅆ': // DOUBLE-STRUCK ITALIC SMALL D (0x2146) + case u'ⅇ': // DOUBLE-STRUCK ITALIC SMALL E (0x2147) + case u'ⅈ': // DOUBLE-STRUCK ITALIC SMALL I (0x2148) + case u'ⅉ': // DOUBLE-STRUCK ITALIC SMALL J (0x2149) + case u'ⅎ': // TURNED SMALL F (0x214e) + case u'ↄ': // LATIN SMALL REVERSED C (0x2184) + case u'ⰰ': // GLAGOLITIC SMALL AZU (0x2c30) + case u'ⰱ': // GLAGOLITIC SMALL BUKY (0x2c31) + case u'ⰲ': // GLAGOLITIC SMALL VEDE (0x2c32) + case u'ⰳ': // GLAGOLITIC SMALL GLAGOLI (0x2c33) + case u'ⰴ': // GLAGOLITIC SMALL DOBRO (0x2c34) + case u'ⰵ': // GLAGOLITIC SMALL YESTU (0x2c35) + case u'ⰶ': // GLAGOLITIC SMALL ZHIVETE (0x2c36) + case u'ⰷ': // GLAGOLITIC SMALL DZELO (0x2c37) + case u'ⰸ': // GLAGOLITIC SMALL ZEMLJA (0x2c38) + case u'ⰹ': // GLAGOLITIC SMALL IZHE (0x2c39) + case u'ⰺ': // GLAGOLITIC SMALL INITIAL IZHE (0x2c3a) + case u'ⰻ': // GLAGOLITIC SMALL I (0x2c3b) + case u'ⰼ': // GLAGOLITIC SMALL DJERVI (0x2c3c) + case u'ⰽ': // GLAGOLITIC SMALL KAKO (0x2c3d) + case u'ⰾ': // GLAGOLITIC SMALL LJUDIJE (0x2c3e) + case u'ⰿ': // GLAGOLITIC SMALL MYSLITE (0x2c3f) + case u'ⱀ': // GLAGOLITIC SMALL NASHI (0x2c40) + case u'ⱁ': // GLAGOLITIC SMALL ONU (0x2c41) + case u'ⱂ': // GLAGOLITIC SMALL POKOJI (0x2c42) + case u'ⱃ': // GLAGOLITIC SMALL RITSI (0x2c43) + case u'ⱄ': // GLAGOLITIC SMALL SLOVO (0x2c44) + case u'ⱅ': // GLAGOLITIC SMALL TVRIDO (0x2c45) + case u'ⱆ': // GLAGOLITIC SMALL UKU (0x2c46) + case u'ⱇ': // GLAGOLITIC SMALL FRITU (0x2c47) + case u'ⱈ': // GLAGOLITIC SMALL HERU (0x2c48) + case u'ⱉ': // GLAGOLITIC SMALL OTU (0x2c49) + case u'ⱊ': // GLAGOLITIC SMALL PE (0x2c4a) + case u'ⱋ': // GLAGOLITIC SMALL SHTA (0x2c4b) + case u'ⱌ': // GLAGOLITIC SMALL TSI (0x2c4c) + case u'ⱍ': // GLAGOLITIC SMALL CHRIVI (0x2c4d) + case u'ⱎ': // GLAGOLITIC SMALL SHA (0x2c4e) + case u'ⱏ': // GLAGOLITIC SMALL YERU (0x2c4f) + case u'ⱐ': // GLAGOLITIC SMALL YERI (0x2c50) + case u'ⱑ': // GLAGOLITIC SMALL YATI (0x2c51) + case u'ⱒ': // GLAGOLITIC SMALL SPIDERY HA (0x2c52) + case u'ⱓ': // GLAGOLITIC SMALL YU (0x2c53) + case u'ⱔ': // GLAGOLITIC SMALL SMALL YUS (0x2c54) + case u'ⱕ': // GLAGOLITIC SMALL SMALL YUS W/ TAIL (0x2c55) + case u'ⱖ': // GLAGOLITIC SMALL YO (0x2c56) + case u'ⱗ': // GLAGOLITIC SMALL IOTATED SMALL YUS (0x2c57) + case u'ⱘ': // GLAGOLITIC SMALL BIG YUS (0x2c58) + case u'ⱙ': // GLAGOLITIC SMALL IOTATED BIG YUS (0x2c59) + case u'ⱚ': // GLAGOLITIC SMALL FITA (0x2c5a) + case u'ⱛ': // GLAGOLITIC SMALL IZHITSA (0x2c5b) + case u'ⱜ': // GLAGOLITIC SMALL SHTAPIC (0x2c5c) + case u'ⱝ': // GLAGOLITIC SMALL TROKUTASTI A (0x2c5d) + case u'ⱞ': // GLAGOLITIC SMALL LATINATE MYSLITE (0x2c5e) + case u'ⱡ': // LATIN SMALL L W/ DOUBLE BAR (0x2c61) + case u'ⱥ': // LATIN SMALL A W/ STROKE (0x2c65) + case u'ⱦ': // LATIN SMALL T W/ DIAGONAL STROKE (0x2c66) + case u'ⱨ': // LATIN SMALL H W/ DESCENDER (0x2c68) + case u'ⱪ': // LATIN SMALL K W/ DESCENDER (0x2c6a) + case u'ⱬ': // LATIN SMALL Z W/ DESCENDER (0x2c6c) + case u'ⱱ': // LATIN SMALL V W/ RIGHT HOOK (0x2c71) + case u'ⱳ': // LATIN SMALL W W/ HOOK (0x2c73) + case u'ⱴ': // LATIN SMALL V W/ CURL (0x2c74) + case u'ⱶ': // LATIN SMALL HALF H (0x2c76) + case u'ⱷ': // LATIN SMALL TAILLESS PHI (0x2c77) + case u'ⱸ': // LATIN SMALL E W/ NOTCH (0x2c78) + case u'ⱹ': // LATIN SMALL TURNED R W/ TAIL (0x2c79) + case u'ⱺ': // LATIN SMALL O W/ LOW RING INSIDE (0x2c7a) + case u'ⱻ': // LATIN LETTER SMALL CAPITAL TURNED E (0x2c7b) + case u'ⲁ': // COPTIC SMALL ALFA (0x2c81) + case u'ⲃ': // COPTIC SMALL VIDA (0x2c83) + case u'ⲅ': // COPTIC SMALL GAMMA (0x2c85) + case u'ⲇ': // COPTIC SMALL DALDA (0x2c87) + case u'ⲉ': // COPTIC SMALL EIE (0x2c89) + case u'ⲋ': // COPTIC SMALL SOU (0x2c8b) + case u'ⲍ': // COPTIC SMALL ZATA (0x2c8d) + case u'ⲏ': // COPTIC SMALL HATE (0x2c8f) + case u'ⲑ': // COPTIC SMALL THETHE (0x2c91) + case u'ⲓ': // COPTIC SMALL IAUDA (0x2c93) + case u'ⲕ': // COPTIC SMALL KAPA (0x2c95) + case u'ⲗ': // COPTIC SMALL LAULA (0x2c97) + case u'ⲙ': // COPTIC SMALL MI (0x2c99) + case u'ⲛ': // COPTIC SMALL NI (0x2c9b) + case u'ⲝ': // COPTIC SMALL KSI (0x2c9d) + case u'ⲟ': // COPTIC SMALL O (0x2c9f) + case u'ⲡ': // COPTIC SMALL PI (0x2ca1) + case u'ⲣ': // COPTIC SMALL RO (0x2ca3) + case u'ⲥ': // COPTIC SMALL SIMA (0x2ca5) + case u'ⲧ': // COPTIC SMALL TAU (0x2ca7) + case u'ⲩ': // COPTIC SMALL UA (0x2ca9) + case u'ⲫ': // COPTIC SMALL FI (0x2cab) + case u'ⲭ': // COPTIC SMALL KHI (0x2cad) + case u'ⲯ': // COPTIC SMALL PSI (0x2caf) + case u'ⲱ': // COPTIC SMALL OOU (0x2cb1) + case u'ⲳ': // COPTIC SMALL DIALECT-P ALEF (0x2cb3) + case u'ⲵ': // COPTIC SMALL OLD COPTIC AIN (0x2cb5) + case u'ⲷ': // COPTIC SMALL CRYPTOGRAMMIC EIE (0x2cb7) + case u'ⲹ': // COPTIC SMALL DIALECT-P KAPA (0x2cb9) + case u'ⲻ': // COPTIC SMALL DIALECT-P NI (0x2cbb) + case u'ⲽ': // COPTIC SMALL CRYPTOGRAMMIC NI (0x2cbd) + case u'ⲿ': // COPTIC SMALL OLD COPTIC OOU (0x2cbf) + case u'ⳁ': // COPTIC SMALL SAMPI (0x2cc1) + case u'ⳃ': // COPTIC SMALL CROSSED SHEI (0x2cc3) + case u'ⳅ': // COPTIC SMALL OLD COPTIC SHEI (0x2cc5) + case u'ⳇ': // COPTIC SMALL OLD COPTIC ESH (0x2cc7) + case u'ⳉ': // COPTIC SMALL AKHMIMIC KHEI (0x2cc9) + case u'ⳋ': // COPTIC SMALL DIALECT-P HORI (0x2ccb) + case u'ⳍ': // COPTIC SMALL OLD COPTIC HORI (0x2ccd) + case u'ⳏ': // COPTIC SMALL OLD COPTIC HA (0x2ccf) + case u'ⳑ': // COPTIC SMALL L-SHAPED HA (0x2cd1) + case u'ⳓ': // COPTIC SMALL OLD COPTIC HEI (0x2cd3) + case u'ⳕ': // COPTIC SMALL OLD COPTIC HAT (0x2cd5) + case u'ⳗ': // COPTIC SMALL OLD COPTIC GANGIA (0x2cd7) + case u'ⳙ': // COPTIC SMALL OLD COPTIC DJA (0x2cd9) + case u'ⳛ': // COPTIC SMALL OLD COPTIC SHIMA (0x2cdb) + case u'ⳝ': // COPTIC SMALL OLD NUBIAN SHIMA (0x2cdd) + case u'ⳟ': // COPTIC SMALL OLD NUBIAN NGI (0x2cdf) + case u'ⳡ': // COPTIC SMALL OLD NUBIAN NYI (0x2ce1) + case u'ⳣ': // COPTIC SMALL OLD NUBIAN WAU (0x2ce3) + case u'ⳤ': // COPTIC SYMBOL KAI (0x2ce4) + case u'ⳬ': // COPTIC SMALL CRYPTOGRAMMIC SHEI (0x2cec) + case u'ⳮ': // COPTIC SMALL CRYPTOGRAMMIC GANGIA (0x2cee) + case u'ⳳ': // COPTIC SMALL BOHAIRIC KHEI (0x2cf3) + case u'ⴀ': // GEORGIAN SMALL AN (0x2d00) + case u'ⴁ': // GEORGIAN SMALL BAN (0x2d01) + case u'ⴂ': // GEORGIAN SMALL GAN (0x2d02) + case u'ⴃ': // GEORGIAN SMALL DON (0x2d03) + case u'ⴄ': // GEORGIAN SMALL EN (0x2d04) + case u'ⴅ': // GEORGIAN SMALL VIN (0x2d05) + case u'ⴆ': // GEORGIAN SMALL ZEN (0x2d06) + case u'ⴇ': // GEORGIAN SMALL TAN (0x2d07) + case u'ⴈ': // GEORGIAN SMALL IN (0x2d08) + case u'ⴉ': // GEORGIAN SMALL KAN (0x2d09) + case u'ⴊ': // GEORGIAN SMALL LAS (0x2d0a) + case u'ⴋ': // GEORGIAN SMALL MAN (0x2d0b) + case u'ⴌ': // GEORGIAN SMALL NAR (0x2d0c) + case u'ⴍ': // GEORGIAN SMALL ON (0x2d0d) + case u'ⴎ': // GEORGIAN SMALL PAR (0x2d0e) + case u'ⴏ': // GEORGIAN SMALL ZHAR (0x2d0f) + case u'ⴐ': // GEORGIAN SMALL RAE (0x2d10) + case u'ⴑ': // GEORGIAN SMALL SAN (0x2d11) + case u'ⴒ': // GEORGIAN SMALL TAR (0x2d12) + case u'ⴓ': // GEORGIAN SMALL UN (0x2d13) + case u'ⴔ': // GEORGIAN SMALL PHAR (0x2d14) + case u'ⴕ': // GEORGIAN SMALL KHAR (0x2d15) + case u'ⴖ': // GEORGIAN SMALL GHAN (0x2d16) + case u'ⴗ': // GEORGIAN SMALL QAR (0x2d17) + case u'ⴘ': // GEORGIAN SMALL SHIN (0x2d18) + case u'ⴙ': // GEORGIAN SMALL CHIN (0x2d19) + case u'ⴚ': // GEORGIAN SMALL CAN (0x2d1a) + case u'ⴛ': // GEORGIAN SMALL JIL (0x2d1b) + case u'ⴜ': // GEORGIAN SMALL CIL (0x2d1c) + case u'ⴝ': // GEORGIAN SMALL CHAR (0x2d1d) + case u'ⴞ': // GEORGIAN SMALL XAN (0x2d1e) + case u'ⴟ': // GEORGIAN SMALL JHAN (0x2d1f) + case u'ⴠ': // GEORGIAN SMALL HAE (0x2d20) + case u'ⴡ': // GEORGIAN SMALL HE (0x2d21) + case u'ⴢ': // GEORGIAN SMALL HIE (0x2d22) + case u'ⴣ': // GEORGIAN SMALL WE (0x2d23) + case u'ⴤ': // GEORGIAN SMALL HAR (0x2d24) + case u'ⴥ': // GEORGIAN SMALL HOE (0x2d25) + case u'ⴧ': // GEORGIAN SMALL YN (0x2d27) + case u'ⴭ': // GEORGIAN SMALL AEN (0x2d2d) + case u'ꙁ': // CYRILLIC SMALL ZEMLYA (0xa641) + case u'ꙃ': // CYRILLIC SMALL DZELO (0xa643) + case u'ꙅ': // CYRILLIC SMALL REVERSED DZE (0xa645) + case u'ꙇ': // CYRILLIC SMALL IOTA (0xa647) + case u'ꙉ': // CYRILLIC SMALL DJERV (0xa649) + case u'ꙋ': // CYRILLIC SMALL MONOGRAPH UK (0xa64b) + case u'ꙍ': // CYRILLIC SMALL BROAD OMEGA (0xa64d) + case u'ꙏ': // CYRILLIC SMALL NEUTRAL YER (0xa64f) + case u'ꙑ': // CYRILLIC SMALL YERU W/ BACK YER (0xa651) + case u'ꙓ': // CYRILLIC SMALL IOTIFIED YAT (0xa653) + case u'ꙕ': // CYRILLIC SMALL REVERSED YU (0xa655) + case u'ꙗ': // CYRILLIC SMALL IOTIFIED A (0xa657) + case u'ꙙ': // CYRILLIC SMALL CLOSED LITTLE YUS (0xa659) + case u'ꙛ': // CYRILLIC SMALL BLENDED YUS (0xa65b) + case u'ꙝ': // CYRILLIC SMALL IOTIFIED CLOSED LITTLE YUS (0xa65d) + case u'ꙟ': // CYRILLIC SMALL YN (0xa65f) + case u'ꙡ': // CYRILLIC SMALL REVERSED TSE (0xa661) + case u'ꙣ': // CYRILLIC SMALL SOFT DE (0xa663) + case u'ꙥ': // CYRILLIC SMALL SOFT EL (0xa665) + case u'ꙧ': // CYRILLIC SMALL SOFT EM (0xa667) + case u'ꙩ': // CYRILLIC SMALL MONOCULAR O (0xa669) + case u'ꙫ': // CYRILLIC SMALL BINOCULAR O (0xa66b) + case u'ꙭ': // CYRILLIC SMALL DOUBLE MONOCULAR O (0xa66d) + case 0xa681: // CYRILLIC SMALL DWE (0xa681) + case 0xa683: // CYRILLIC SMALL DZWE (0xa683) + case 0xa685: // CYRILLIC SMALL ZHWE (0xa685) + case 0xa687: // CYRILLIC SMALL CCHE (0xa687) + case 0xa689: // CYRILLIC SMALL DZZE (0xa689) + case 0xa68b: // CYRILLIC SMALL TE W/ MIDDLE HOOK (0xa68b) + case 0xa68d: // CYRILLIC SMALL TWE (0xa68d) + case 0xa68f: // CYRILLIC SMALL TSWE (0xa68f) + case 0xa691: // CYRILLIC SMALL TSSE (0xa691) + case 0xa693: // CYRILLIC SMALL TCHE (0xa693) + case 0xa695: // CYRILLIC SMALL HWE (0xa695) + case 0xa697: // CYRILLIC SMALL SHWE (0xa697) + case 0xa699: // CYRILLIC SMALL DOUBLE O (0xa699) + case 0xa69b: // CYRILLIC SMALL CROSSED O (0xa69b) + case u'ꜣ': // LATIN SMALL EGYPTOLOGICAL ALEF (0xa723) + case u'ꜥ': // LATIN SMALL EGYPTOLOGICAL AIN (0xa725) + case u'ꜧ': // LATIN SMALL HENG (0xa727) + case u'ꜩ': // LATIN SMALL TZ (0xa729) + case u'ꜫ': // LATIN SMALL TRESILLO (0xa72b) + case u'ꜭ': // LATIN SMALL CUATRILLO (0xa72d) + case u'ꜯ': // LATIN SMALL CUATRILLO W/ COMMA (0xa72f) + case u'ꜰ': // LATIN LETTER SMALL CAPITAL F (0xa730) + case u'ꜱ': // LATIN LETTER SMALL CAPITAL S (0xa731) + case u'ꜳ': // LATIN SMALL AA (0xa733) + case u'ꜵ': // LATIN SMALL AO (0xa735) + case u'ꜷ': // LATIN SMALL AU (0xa737) + case u'ꜹ': // LATIN SMALL AV (0xa739) + case u'ꜻ': // LATIN SMALL AV W/ HORIZONTAL BAR (0xa73b) + case u'ꜽ': // LATIN SMALL AY (0xa73d) + case u'ꜿ': // LATIN SMALL REVERSED C W/ DOT (0xa73f) + case u'ꝁ': // LATIN SMALL K W/ STROKE (0xa741) + case u'ꝃ': // LATIN SMALL K W/ DIAGONAL STROKE (0xa743) + case u'ꝅ': // LATIN SMALL K W/ STROKE AND DIAGONAL STROKE (0xa745) + case u'ꝇ': // LATIN SMALL BROKEN L (0xa747) + case u'ꝉ': // LATIN SMALL L W/ HIGH STROKE (0xa749) + case u'ꝋ': // LATIN SMALL O W/ LONG STROKE OVERLAY (0xa74b) + case u'ꝍ': // LATIN SMALL O W/ LOOP (0xa74d) + case u'ꝏ': // LATIN SMALL OO (0xa74f) + case u'ꝑ': // LATIN SMALL P W/ STROKE THROUGH DESCENDER (0xa751) + case u'ꝓ': // LATIN SMALL P W/ FLOURISH (0xa753) + case u'ꝕ': // LATIN SMALL P W/ SQUIRREL TAIL (0xa755) + case u'ꝗ': // LATIN SMALL Q W/ STROKE THROUGH DESCENDER (0xa757) + case u'ꝙ': // LATIN SMALL Q W/ DIAGONAL STROKE (0xa759) + case u'ꝛ': // LATIN SMALL R ROTUNDA (0xa75b) + case u'ꝝ': // LATIN SMALL RUM ROTUNDA (0xa75d) + case u'ꝟ': // LATIN SMALL V W/ DIAGONAL STROKE (0xa75f) + case u'ꝡ': // LATIN SMALL VY (0xa761) + case u'ꝣ': // LATIN SMALL VISIGOTHIC Z (0xa763) + case u'ꝥ': // LATIN SMALL THORN W/ STROKE (0xa765) + case u'ꝧ': // LATIN SMALL THORN W/ STROKE THROUGH DESCENDER + // (0xa767) + case u'ꝩ': // LATIN SMALL VEND (0xa769) + case u'ꝫ': // LATIN SMALL ET (0xa76b) + case u'ꝭ': // LATIN SMALL IS (0xa76d) + case u'ꝯ': // LATIN SMALL CON (0xa76f) + case u'ꝱ': // LATIN SMALL DUM (0xa771) + case u'ꝲ': // LATIN SMALL LUM (0xa772) + case u'ꝳ': // LATIN SMALL MUM (0xa773) + case u'ꝴ': // LATIN SMALL NUM (0xa774) + case u'ꝵ': // LATIN SMALL RUM (0xa775) + case u'ꝶ': // LATIN LETTER SMALL CAPITAL RUM (0xa776) + case u'ꝷ': // LATIN SMALL TUM (0xa777) + case u'ꝸ': // LATIN SMALL UM (0xa778) + case u'ꝺ': // LATIN SMALL INSULAR D (0xa77a) + case u'ꝼ': // LATIN SMALL INSULAR F (0xa77c) + case u'ꝿ': // LATIN SMALL TURNED INSULAR G (0xa77f) + case u'ꞁ': // LATIN SMALL TURNED L (0xa781) + case u'ꞃ': // LATIN SMALL INSULAR R (0xa783) + case u'ꞅ': // LATIN SMALL INSULAR S (0xa785) + case u'ꞇ': // LATIN SMALL INSULAR T (0xa787) + case u'ꞌ': // LATIN SMALL SALTILLO (0xa78c) + case u'ꞎ': // LATIN SMALL L W/ RETROFLEX HOOK AND BELT (0xa78e) + case u'ꞑ': // LATIN SMALL N W/ DESCENDER (0xa791) + case u'ꞓ': // LATIN SMALL C W/ BAR (0xa793) + case u'ꞔ': // LATIN SMALL C W/ PALATAL HOOK (0xa794) + case u'ꞕ': // LATIN SMALL H W/ PALATAL HOOK (0xa795) + case u'ꞗ': // LATIN SMALL B W/ FLOURISH (0xa797) + case u'ꞙ': // LATIN SMALL F W/ STROKE (0xa799) + case u'ꞛ': // LATIN SMALL VOLAPUK AE (0xa79b) + case u'ꞝ': // LATIN SMALL VOLAPUK OE (0xa79d) + case u'ꞟ': // LATIN SMALL VOLAPUK UE (0xa79f) + case u'ꞡ': // LATIN SMALL G W/ OBLIQUE STROKE (0xa7a1) + case u'ꞣ': // LATIN SMALL K W/ OBLIQUE STROKE (0xa7a3) + case u'ꞥ': // LATIN SMALL N W/ OBLIQUE STROKE (0xa7a5) + case u'ꞧ': // LATIN SMALL R W/ OBLIQUE STROKE (0xa7a7) + case u'ꞩ': // LATIN SMALL S W/ OBLIQUE STROKE (0xa7a9) + case u'ꞯ': // LATIN LETTER SMALL CAPITAL Q (0xa7af) + case u'ꞵ': // LATIN SMALL BETA (0xa7b5) + case u'ꞷ': // LATIN SMALL OMEGA (0xa7b7) + case u'ꞹ': // LATIN SMALL U W/ STROKE (0xa7b9) + case u'ꞻ': // LATIN SMALL GLOTTAL A (0xa7bb) + case u'ꞽ': // LATIN SMALL GLOTTAL I (0xa7bd) + case u'ꞿ': // LATIN SMALL GLOTTAL U (0xa7bf) + case u'ꟃ': // LATIN SMALL ANGLICANA W (0xa7c3) + case u'ꟺ': // LATIN LETTER SMALL CAPITAL TURNED M (0xa7fa) + case u'ꬰ': // LATIN SMALL BARRED ALPHA (0xab30) + case u'ꬱ': // LATIN SMALL A REVERSED-SCHWA (0xab31) + case u'ꬲ': // LATIN SMALL BLACKLETTER E (0xab32) + case u'ꬳ': // LATIN SMALL BARRED E (0xab33) + case u'ꬴ': // LATIN SMALL E W/ FLOURISH (0xab34) + case u'ꬵ': // LATIN SMALL LENIS F (0xab35) + case u'ꬶ': // LATIN SMALL SCRIPT G W/ CROSSED-TAIL (0xab36) + case u'ꬷ': // LATIN SMALL L W/ INVERTED LAZY S (0xab37) + case u'ꬸ': // LATIN SMALL L W/ DOUBLE MIDDLE TILDE (0xab38) + case u'ꬹ': // LATIN SMALL L W/ MIDDLE RING (0xab39) + case u'ꬺ': // LATIN SMALL M W/ CROSSED-TAIL (0xab3a) + case u'ꬻ': // LATIN SMALL N W/ CROSSED-TAIL (0xab3b) + case u'ꬼ': // LATIN SMALL ENG W/ CROSSED-TAIL (0xab3c) + case u'ꬽ': // LATIN SMALL BLACKLETTER O (0xab3d) + case u'ꬾ': // LATIN SMALL BLACKLETTER O W/ STROKE (0xab3e) + case u'ꬿ': // LATIN SMALL OPEN O W/ STROKE (0xab3f) + case u'ꭀ': // LATIN SMALL INVERTED OE (0xab40) + case u'ꭁ': // LATIN SMALL TURNED OE W/ STROKE (0xab41) + case u'ꭂ': // LATIN SMALL TURNED OE W/ HORIZONTAL STROKE (0xab42) + case u'ꭃ': // LATIN SMALL TURNED O OPEN-O (0xab43) + case u'ꭄ': // LATIN SMALL TURNED O OPEN-O W/ STROKE (0xab44) + case u'ꭅ': // LATIN SMALL STIRRUP R (0xab45) + case u'ꭆ': // LATIN LETTER SMALL CAPITAL R W/ RIGHT LEG (0xab46) + case u'ꭇ': // LATIN SMALL R WITHOUT HANDLE (0xab47) + case u'ꭈ': // LATIN SMALL DOUBLE R (0xab48) + case u'ꭉ': // LATIN SMALL R W/ CROSSED-TAIL (0xab49) + case u'ꭊ': // LATIN SMALL DOUBLE R W/ CROSSED-TAIL (0xab4a) + case u'ꭋ': // LATIN SMALL SCRIPT R (0xab4b) + case u'ꭌ': // LATIN SMALL SCRIPT R W/ RING (0xab4c) + case u'ꭍ': // LATIN SMALL BASELINE ESH (0xab4d) + case u'ꭎ': // LATIN SMALL U W/ SHORT RIGHT LEG (0xab4e) + case u'ꭏ': // LATIN SMALL U BAR W/ SHORT RIGHT LEG (0xab4f) + case u'ꭐ': // LATIN SMALL UI (0xab50) + case u'ꭑ': // LATIN SMALL TURNED UI (0xab51) + case u'ꭒ': // LATIN SMALL U W/ LEFT HOOK (0xab52) + case u'ꭓ': // LATIN SMALL CHI (0xab53) + case u'ꭔ': // LATIN SMALL CHI W/ LOW RIGHT RING (0xab54) + case u'ꭕ': // LATIN SMALL CHI W/ LOW LEFT SERIF (0xab55) + case u'ꭖ': // LATIN SMALL X W/ LOW RIGHT RING (0xab56) + case u'ꭗ': // LATIN SMALL X W/ LONG LEFT LEG (0xab57) + case u'ꭘ': // LATIN SMALL X W/ LONG LEFT LEG AND LOW RIGHT RING (0xab58) + case u'ꭙ': // LATIN SMALL X W/ LONG LEFT LEG W/ SERIF (0xab59) + case u'ꭚ': // LATIN SMALL Y W/ SHORT RIGHT LEG (0xab5a) + case u'ꭠ': // LATIN SMALL SAKHA YAT (0xab60) + case u'ꭡ': // LATIN SMALL IOTIFIED E (0xab61) + case u'ꭢ': // LATIN SMALL OPEN OE (0xab62) + case u'ꭣ': // LATIN SMALL UO (0xab63) + case u'ꭤ': // LATIN SMALL INVERTED ALPHA (0xab64) + case u'ꭥ': // GREEK LETTER SMALL CAPITAL OMEGA (0xab65) + case u'ꭦ': // LATIN SMALL DZ DIGRAPH W/ RETROFLEX HOOK (0xab66) + case u'ꭧ': // LATIN SMALL TS DIGRAPH W/ RETROFLEX HOOK (0xab67) + case u'ꭰ': // CHEROKEE SMALL A (0xab70) + case u'ꭱ': // CHEROKEE SMALL E (0xab71) + case u'ꭲ': // CHEROKEE SMALL I (0xab72) + case u'ꭳ': // CHEROKEE SMALL O (0xab73) + case u'ꭴ': // CHEROKEE SMALL U (0xab74) + case u'ꭵ': // CHEROKEE SMALL V (0xab75) + case u'ꭶ': // CHEROKEE SMALL GA (0xab76) + case u'ꭷ': // CHEROKEE SMALL KA (0xab77) + case u'ꭸ': // CHEROKEE SMALL GE (0xab78) + case u'ꭹ': // CHEROKEE SMALL GI (0xab79) + case u'ꭺ': // CHEROKEE SMALL GO (0xab7a) + case u'ꭻ': // CHEROKEE SMALL GU (0xab7b) + case u'ꭼ': // CHEROKEE SMALL GV (0xab7c) + case u'ꭽ': // CHEROKEE SMALL HA (0xab7d) + case u'ꭾ': // CHEROKEE SMALL HE (0xab7e) + case u'ꭿ': // CHEROKEE SMALL HI (0xab7f) + case u'ꮀ': // CHEROKEE SMALL HO (0xab80) + case u'ꮁ': // CHEROKEE SMALL HU (0xab81) + case u'ꮂ': // CHEROKEE SMALL HV (0xab82) + case u'ꮃ': // CHEROKEE SMALL LA (0xab83) + case u'ꮄ': // CHEROKEE SMALL LE (0xab84) + case u'ꮅ': // CHEROKEE SMALL LI (0xab85) + case u'ꮆ': // CHEROKEE SMALL LO (0xab86) + case u'ꮇ': // CHEROKEE SMALL LU (0xab87) + case u'ꮈ': // CHEROKEE SMALL LV (0xab88) + case u'ꮉ': // CHEROKEE SMALL MA (0xab89) + case u'ꮊ': // CHEROKEE SMALL ME (0xab8a) + case u'ꮋ': // CHEROKEE SMALL MI (0xab8b) + case u'ꮌ': // CHEROKEE SMALL MO (0xab8c) + case u'ꮍ': // CHEROKEE SMALL MU (0xab8d) + case u'ꮎ': // CHEROKEE SMALL NA (0xab8e) + case u'ꮏ': // CHEROKEE SMALL HNA (0xab8f) + case u'ꮐ': // CHEROKEE SMALL NAH (0xab90) + case u'ꮑ': // CHEROKEE SMALL NE (0xab91) + case u'ꮒ': // CHEROKEE SMALL NI (0xab92) + case u'ꮓ': // CHEROKEE SMALL NO (0xab93) + case u'ꮔ': // CHEROKEE SMALL NU (0xab94) + case u'ꮕ': // CHEROKEE SMALL NV (0xab95) + case u'ꮖ': // CHEROKEE SMALL QUA (0xab96) + case u'ꮗ': // CHEROKEE SMALL QUE (0xab97) + case u'ꮘ': // CHEROKEE SMALL QUI (0xab98) + case u'ꮙ': // CHEROKEE SMALL QUO (0xab99) + case u'ꮚ': // CHEROKEE SMALL QUU (0xab9a) + case u'ꮛ': // CHEROKEE SMALL QUV (0xab9b) + case u'ꮜ': // CHEROKEE SMALL SA (0xab9c) + case u'ꮝ': // CHEROKEE SMALL S (0xab9d) + case u'ꮞ': // CHEROKEE SMALL SE (0xab9e) + case u'ꮟ': // CHEROKEE SMALL SI (0xab9f) + case u'ꮠ': // CHEROKEE SMALL SO (0xaba0) + case u'ꮡ': // CHEROKEE SMALL SU (0xaba1) + case u'ꮢ': // CHEROKEE SMALL SV (0xaba2) + case u'ꮣ': // CHEROKEE SMALL DA (0xaba3) + case u'ꮤ': // CHEROKEE SMALL TA (0xaba4) + case u'ꮥ': // CHEROKEE SMALL DE (0xaba5) + case u'ꮦ': // CHEROKEE SMALL TE (0xaba6) + case u'ꮧ': // CHEROKEE SMALL DI (0xaba7) + case u'ꮨ': // CHEROKEE SMALL TI (0xaba8) + case u'ꮩ': // CHEROKEE SMALL DO (0xaba9) + case u'ꮪ': // CHEROKEE SMALL DU (0xabaa) + case u'ꮫ': // CHEROKEE SMALL DV (0xabab) + case u'ꮬ': // CHEROKEE SMALL DLA (0xabac) + case u'ꮭ': // CHEROKEE SMALL TLA (0xabad) + case u'ꮮ': // CHEROKEE SMALL TLE (0xabae) + case u'ꮯ': // CHEROKEE SMALL TLI (0xabaf) + case u'ꮰ': // CHEROKEE SMALL TLO (0xabb0) + case u'ꮱ': // CHEROKEE SMALL TLU (0xabb1) + case u'ꮲ': // CHEROKEE SMALL TLV (0xabb2) + case u'ꮳ': // CHEROKEE SMALL TSA (0xabb3) + case u'ꮴ': // CHEROKEE SMALL TSE (0xabb4) + case u'ꮵ': // CHEROKEE SMALL TSI (0xabb5) + case u'ꮶ': // CHEROKEE SMALL TSO (0xabb6) + case u'ꮷ': // CHEROKEE SMALL TSU (0xabb7) + case u'ꮸ': // CHEROKEE SMALL TSV (0xabb8) + case u'ꮹ': // CHEROKEE SMALL WA (0xabb9) + case u'ꮺ': // CHEROKEE SMALL WE (0xabba) + case u'ꮻ': // CHEROKEE SMALL WI (0xabbb) + case u'ꮼ': // CHEROKEE SMALL WO (0xabbc) + case u'ꮽ': // CHEROKEE SMALL WU (0xabbd) + case u'ꮾ': // CHEROKEE SMALL WV (0xabbe) + case u'ꮿ': // CHEROKEE SMALL YA (0xabbf) + case u'ff': // LATIN SMALL LIGATURE FF (0xfb00) + case u'fi': // LATIN SMALL LIGATURE FI (0xfb01) + case u'fl': // LATIN SMALL LIGATURE FL (0xfb02) + case u'ffi': // LATIN SMALL LIGATURE FFI (0xfb03) + case u'ffl': // LATIN SMALL LIGATURE FFL (0xfb04) + case u'ſt': // LATIN SMALL LIGATURE LONG S T (0xfb05) + case u'st': // LATIN SMALL LIGATURE ST (0xfb06) + case u'ﬓ': // ARMENIAN SMALL LIGATURE MEN NOW (0xfb13) + case u'ﬔ': // ARMENIAN SMALL LIGATURE MEN ECH (0xfb14) + case u'ﬕ': // ARMENIAN SMALL LIGATURE MEN INI (0xfb15) + case u'ﬖ': // ARMENIAN SMALL LIGATURE VEW NOW (0xfb16) + case u'ﬗ': // ARMENIAN SMALL LIGATURE MEN XEH (0xfb17) + case u'a': // FULLWIDTH LATIN SMALL A (0xff41) + case u'b': // FULLWIDTH LATIN SMALL B (0xff42) + case u'c': // FULLWIDTH LATIN SMALL C (0xff43) + case u'd': // FULLWIDTH LATIN SMALL D (0xff44) + case u'e': // FULLWIDTH LATIN SMALL E (0xff45) + case u'f': // FULLWIDTH LATIN SMALL F (0xff46) + case u'g': // FULLWIDTH LATIN SMALL G (0xff47) + case u'h': // FULLWIDTH LATIN SMALL H (0xff48) + case u'i': // FULLWIDTH LATIN SMALL I (0xff49) + case u'j': // FULLWIDTH LATIN SMALL J (0xff4a) + case u'k': // FULLWIDTH LATIN SMALL K (0xff4b) + case u'l': // FULLWIDTH LATIN SMALL L (0xff4c) + case u'm': // FULLWIDTH LATIN SMALL M (0xff4d) + case u'n': // FULLWIDTH LATIN SMALL N (0xff4e) + case u'o': // FULLWIDTH LATIN SMALL O (0xff4f) + case u'p': // FULLWIDTH LATIN SMALL P (0xff50) + case u'q': // FULLWIDTH LATIN SMALL Q (0xff51) + case u'r': // FULLWIDTH LATIN SMALL R (0xff52) + case u's': // FULLWIDTH LATIN SMALL S (0xff53) + case u't': // FULLWIDTH LATIN SMALL T (0xff54) + case u'u': // FULLWIDTH LATIN SMALL U (0xff55) + case u'v': // FULLWIDTH LATIN SMALL V (0xff56) + case u'w': // FULLWIDTH LATIN SMALL W (0xff57) + case u'x': // FULLWIDTH LATIN SMALL X (0xff58) + case u'y': // FULLWIDTH LATIN SMALL Y (0xff59) + case u'z': // FULLWIDTH LATIN SMALL Z (0xff5a) + case L'𐐨': // DESERET SMALL LONG I (0x10428) + case L'𐐩': // DESERET SMALL LONG E (0x10429) + case L'𐐪': // DESERET SMALL LONG A (0x1042a) + case L'𐐫': // DESERET SMALL LONG AH (0x1042b) + case L'𐐬': // DESERET SMALL LONG O (0x1042c) + case L'𐐭': // DESERET SMALL LONG OO (0x1042d) + case L'𐐮': // DESERET SMALL SHORT I (0x1042e) + case L'𐐯': // DESERET SMALL SHORT E (0x1042f) + case L'𐐰': // DESERET SMALL SHORT A (0x10430) + case L'𐐱': // DESERET SMALL SHORT AH (0x10431) + case L'𐐲': // DESERET SMALL SHORT O (0x10432) + case L'𐐳': // DESERET SMALL SHORT OO (0x10433) + case L'𐐴': // DESERET SMALL AY (0x10434) + case L'𐐵': // DESERET SMALL OW (0x10435) + case L'𐐶': // DESERET SMALL WU (0x10436) + case L'𐐷': // DESERET SMALL YEE (0x10437) + case L'𐐸': // DESERET SMALL H (0x10438) + case L'𐐹': // DESERET SMALL PEE (0x10439) + case L'𐐺': // DESERET SMALL BEE (0x1043a) + case L'𐐻': // DESERET SMALL TEE (0x1043b) + case L'𐐼': // DESERET SMALL DEE (0x1043c) + case L'𐐽': // DESERET SMALL CHEE (0x1043d) + case L'𐐾': // DESERET SMALL JEE (0x1043e) + case L'𐐿': // DESERET SMALL KAY (0x1043f) + case L'𐑀': // DESERET SMALL GAY (0x10440) + case L'𐑁': // DESERET SMALL EF (0x10441) + case L'𐑂': // DESERET SMALL VEE (0x10442) + case L'𐑃': // DESERET SMALL ETH (0x10443) + case L'𐑄': // DESERET SMALL THEE (0x10444) + case L'𐑅': // DESERET SMALL ES (0x10445) + case L'𐑆': // DESERET SMALL ZEE (0x10446) + case L'𐑇': // DESERET SMALL ESH (0x10447) + case L'𐑈': // DESERET SMALL ZHEE (0x10448) + case L'𐑉': // DESERET SMALL ER (0x10449) + case L'𐑊': // DESERET SMALL EL (0x1044a) + case L'𐑋': // DESERET SMALL EM (0x1044b) + case L'𐑌': // DESERET SMALL EN (0x1044c) + case L'𐑍': // DESERET SMALL ENG (0x1044d) + case L'𐑎': // DESERET SMALL OI (0x1044e) + case L'𐑏': // DESERET SMALL EW (0x1044f) + case L'𐓘': // OSAGE SMALL A (0x104d8) + case L'𐓙': // OSAGE SMALL AI (0x104d9) + case L'𐓚': // OSAGE SMALL AIN (0x104da) + case L'𐓛': // OSAGE SMALL AH (0x104db) + case L'𐓜': // OSAGE SMALL BRA (0x104dc) + case L'𐓝': // OSAGE SMALL CHA (0x104dd) + case L'𐓞': // OSAGE SMALL EHCHA (0x104de) + case L'𐓟': // OSAGE SMALL E (0x104df) + case L'𐓠': // OSAGE SMALL EIN (0x104e0) + case L'𐓡': // OSAGE SMALL HA (0x104e1) + case L'𐓢': // OSAGE SMALL HYA (0x104e2) + case L'𐓣': // OSAGE SMALL I (0x104e3) + case L'𐓤': // OSAGE SMALL KA (0x104e4) + case L'𐓥': // OSAGE SMALL EHKA (0x104e5) + case L'𐓦': // OSAGE SMALL KYA (0x104e6) + case L'𐓧': // OSAGE SMALL LA (0x104e7) + case L'𐓨': // OSAGE SMALL MA (0x104e8) + case L'𐓩': // OSAGE SMALL NA (0x104e9) + case L'𐓪': // OSAGE SMALL O (0x104ea) + case L'𐓫': // OSAGE SMALL OIN (0x104eb) + case L'𐓬': // OSAGE SMALL PA (0x104ec) + case L'𐓭': // OSAGE SMALL EHPA (0x104ed) + case L'𐓮': // OSAGE SMALL SA (0x104ee) + case L'𐓯': // OSAGE SMALL SHA (0x104ef) + case L'𐓰': // OSAGE SMALL TA (0x104f0) + case L'𐓱': // OSAGE SMALL EHTA (0x104f1) + case L'𐓲': // OSAGE SMALL TSA (0x104f2) + case L'𐓳': // OSAGE SMALL EHTSA (0x104f3) + case L'𐓴': // OSAGE SMALL TSHA (0x104f4) + case L'𐓵': // OSAGE SMALL DHA (0x104f5) + case L'𐓶': // OSAGE SMALL U (0x104f6) + case L'𐓷': // OSAGE SMALL WA (0x104f7) + case L'𐓸': // OSAGE SMALL KHA (0x104f8) + case L'𐓹': // OSAGE SMALL GHA (0x104f9) + case L'𐓺': // OSAGE SMALL ZA (0x104fa) + case L'𐓻': // OSAGE SMALL ZHA (0x104fb) + case L'𐳀': // OLD HUNGARIAN SMALL A (0x10cc0) + case L'𐳁': // OLD HUNGARIAN SMALL AA (0x10cc1) + case L'𐳂': // OLD HUNGARIAN SMALL EB (0x10cc2) + case L'𐳃': // OLD HUNGARIAN SMALL AMB (0x10cc3) + case L'𐳄': // OLD HUNGARIAN SMALL EC (0x10cc4) + case L'𐳅': // OLD HUNGARIAN SMALL ENC (0x10cc5) + case L'𐳆': // OLD HUNGARIAN SMALL ECS (0x10cc6) + case L'𐳇': // OLD HUNGARIAN SMALL ED (0x10cc7) + case L'𐳈': // OLD HUNGARIAN SMALL AND (0x10cc8) + case L'𐳉': // OLD HUNGARIAN SMALL E (0x10cc9) + case L'𐳊': // OLD HUNGARIAN SMALL CLOSE E (0x10cca) + case L'𐳋': // OLD HUNGARIAN SMALL EE (0x10ccb) + case L'𐳌': // OLD HUNGARIAN SMALL EF (0x10ccc) + case L'𐳍': // OLD HUNGARIAN SMALL EG (0x10ccd) + case L'𐳎': // OLD HUNGARIAN SMALL EGY (0x10cce) + case L'𐳏': // OLD HUNGARIAN SMALL EH (0x10ccf) + case L'𐳐': // OLD HUNGARIAN SMALL I (0x10cd0) + case L'𐳑': // OLD HUNGARIAN SMALL II (0x10cd1) + case L'𐳒': // OLD HUNGARIAN SMALL EJ (0x10cd2) + case L'𐳓': // OLD HUNGARIAN SMALL EK (0x10cd3) + case L'𐳔': // OLD HUNGARIAN SMALL AK (0x10cd4) + case L'𐳕': // OLD HUNGARIAN SMALL UNK (0x10cd5) + case L'𐳖': // OLD HUNGARIAN SMALL EL (0x10cd6) + case L'𐳗': // OLD HUNGARIAN SMALL ELY (0x10cd7) + case L'𐳘': // OLD HUNGARIAN SMALL EM (0x10cd8) + case L'𐳙': // OLD HUNGARIAN SMALL EN (0x10cd9) + case L'𐳚': // OLD HUNGARIAN SMALL ENY (0x10cda) + case L'𐳛': // OLD HUNGARIAN SMALL O (0x10cdb) + case L'𐳜': // OLD HUNGARIAN SMALL OO (0x10cdc) + case L'𐳝': // OLD HUNGARIAN SMALL NIKOLSBURG OE (0x10cdd) + case L'𐳞': // OLD HUNGARIAN SMALL RUDIMENTA OE (0x10cde) + case L'𐳟': // OLD HUNGARIAN SMALL OEE (0x10cdf) + case L'𐳠': // OLD HUNGARIAN SMALL EP (0x10ce0) + case L'𐳡': // OLD HUNGARIAN SMALL EMP (0x10ce1) + case L'𐳢': // OLD HUNGARIAN SMALL ER (0x10ce2) + case L'𐳣': // OLD HUNGARIAN SMALL SHORT ER (0x10ce3) + case L'𐳤': // OLD HUNGARIAN SMALL ES (0x10ce4) + case L'𐳥': // OLD HUNGARIAN SMALL ESZ (0x10ce5) + case L'𐳦': // OLD HUNGARIAN SMALL ET (0x10ce6) + case L'𐳧': // OLD HUNGARIAN SMALL ENT (0x10ce7) + case L'𐳨': // OLD HUNGARIAN SMALL ETY (0x10ce8) + case L'𐳩': // OLD HUNGARIAN SMALL ECH (0x10ce9) + case L'𐳪': // OLD HUNGARIAN SMALL U (0x10cea) + case L'𐳫': // OLD HUNGARIAN SMALL UU (0x10ceb) + case L'𐳬': // OLD HUNGARIAN SMALL NIKOLSBURG UE (0x10cec) + case L'𐳭': // OLD HUNGARIAN SMALL RUDIMENTA UE (0x10ced) + case L'𐳮': // OLD HUNGARIAN SMALL EV (0x10cee) + case L'𐳯': // OLD HUNGARIAN SMALL EZ (0x10cef) + case L'𐳰': // OLD HUNGARIAN SMALL EZS (0x10cf0) + case L'𐳱': // OLD HUNGARIAN SMALL ENT-SHAPED SIGN (0x10cf1) + case L'𐳲': // OLD HUNGARIAN SMALL US (0x10cf2) + case L'𑣀': // WARANG CITI SMALL NGAA (0x118c0) + case L'𑣁': // WARANG CITI SMALL A (0x118c1) + case L'𑣂': // WARANG CITI SMALL WI (0x118c2) + case L'𑣃': // WARANG CITI SMALL YU (0x118c3) + case L'𑣄': // WARANG CITI SMALL YA (0x118c4) + case L'𑣅': // WARANG CITI SMALL YO (0x118c5) + case L'𑣆': // WARANG CITI SMALL II (0x118c6) + case L'𑣇': // WARANG CITI SMALL UU (0x118c7) + case L'𑣈': // WARANG CITI SMALL E (0x118c8) + case L'𑣉': // WARANG CITI SMALL O (0x118c9) + case L'𑣊': // WARANG CITI SMALL ANG (0x118ca) + case L'𑣋': // WARANG CITI SMALL GA (0x118cb) + case L'𑣌': // WARANG CITI SMALL KO (0x118cc) + case L'𑣍': // WARANG CITI SMALL ENY (0x118cd) + case L'𑣎': // WARANG CITI SMALL YUJ (0x118ce) + case L'𑣏': // WARANG CITI SMALL UC (0x118cf) + case L'𑣐': // WARANG CITI SMALL ENN (0x118d0) + case L'𑣑': // WARANG CITI SMALL ODD (0x118d1) + case L'𑣒': // WARANG CITI SMALL TTE (0x118d2) + case L'𑣓': // WARANG CITI SMALL NUNG (0x118d3) + case L'𑣔': // WARANG CITI SMALL DA (0x118d4) + case L'𑣕': // WARANG CITI SMALL AT (0x118d5) + case L'𑣖': // WARANG CITI SMALL AM (0x118d6) + case L'𑣗': // WARANG CITI SMALL BU (0x118d7) + case L'𑣘': // WARANG CITI SMALL PU (0x118d8) + case L'𑣙': // WARANG CITI SMALL HIYO (0x118d9) + case L'𑣚': // WARANG CITI SMALL HOLO (0x118da) + case L'𑣛': // WARANG CITI SMALL HORR (0x118db) + case L'𑣜': // WARANG CITI SMALL HAR (0x118dc) + case L'𑣝': // WARANG CITI SMALL SSUU (0x118dd) + case L'𑣞': // WARANG CITI SMALL SII (0x118de) + case L'𑣟': // WARANG CITI SMALL VIYO (0x118df) + case L'𖹠': // MEDEFAIDRIN SMALL M (0x16e60) + case L'𖹡': // MEDEFAIDRIN SMALL S (0x16e61) + case L'𖹢': // MEDEFAIDRIN SMALL V (0x16e62) + case L'𖹣': // MEDEFAIDRIN SMALL W (0x16e63) + case L'𖹤': // MEDEFAIDRIN SMALL ATIU (0x16e64) + case L'𖹥': // MEDEFAIDRIN SMALL Z (0x16e65) + case L'𖹦': // MEDEFAIDRIN SMALL KP (0x16e66) + case L'𖹧': // MEDEFAIDRIN SMALL P (0x16e67) + case L'𖹨': // MEDEFAIDRIN SMALL T (0x16e68) + case L'𖹩': // MEDEFAIDRIN SMALL G (0x16e69) + case L'𖹪': // MEDEFAIDRIN SMALL F (0x16e6a) + case L'𖹫': // MEDEFAIDRIN SMALL I (0x16e6b) + case L'𖹬': // MEDEFAIDRIN SMALL K (0x16e6c) + case L'𖹭': // MEDEFAIDRIN SMALL A (0x16e6d) + case L'𖹮': // MEDEFAIDRIN SMALL J (0x16e6e) + case L'𖹯': // MEDEFAIDRIN SMALL E (0x16e6f) + case L'𖹰': // MEDEFAIDRIN SMALL B (0x16e70) + case L'𖹱': // MEDEFAIDRIN SMALL C (0x16e71) + case L'𖹲': // MEDEFAIDRIN SMALL U (0x16e72) + case L'𖹳': // MEDEFAIDRIN SMALL YU (0x16e73) + case L'𖹴': // MEDEFAIDRIN SMALL L (0x16e74) + case L'𖹵': // MEDEFAIDRIN SMALL Q (0x16e75) + case L'𖹶': // MEDEFAIDRIN SMALL HP (0x16e76) + case L'𖹷': // MEDEFAIDRIN SMALL NY (0x16e77) + case L'𖹸': // MEDEFAIDRIN SMALL X (0x16e78) + case L'𖹹': // MEDEFAIDRIN SMALL D (0x16e79) + case L'𖹺': // MEDEFAIDRIN SMALL OE (0x16e7a) + case L'𖹻': // MEDEFAIDRIN SMALL N (0x16e7b) + case L'𖹼': // MEDEFAIDRIN SMALL R (0x16e7c) + case L'𖹽': // MEDEFAIDRIN SMALL O (0x16e7d) + case L'𖹾': // MEDEFAIDRIN SMALL AI (0x16e7e) + case L'𖹿': // MEDEFAIDRIN SMALL Y (0x16e7f) + case L'𝐚': // MATHEMATICAL BOLD SMALL A (0x1d41a) + case L'𝐛': // MATHEMATICAL BOLD SMALL B (0x1d41b) + case L'𝐜': // MATHEMATICAL BOLD SMALL C (0x1d41c) + case L'𝐝': // MATHEMATICAL BOLD SMALL D (0x1d41d) + case L'𝐞': // MATHEMATICAL BOLD SMALL E (0x1d41e) + case L'𝐟': // MATHEMATICAL BOLD SMALL F (0x1d41f) + case L'𝐠': // MATHEMATICAL BOLD SMALL G (0x1d420) + case L'𝐡': // MATHEMATICAL BOLD SMALL H (0x1d421) + case L'𝐢': // MATHEMATICAL BOLD SMALL I (0x1d422) + case L'𝐣': // MATHEMATICAL BOLD SMALL J (0x1d423) + case L'𝐤': // MATHEMATICAL BOLD SMALL K (0x1d424) + case L'𝐥': // MATHEMATICAL BOLD SMALL L (0x1d425) + case L'𝐦': // MATHEMATICAL BOLD SMALL M (0x1d426) + case L'𝐧': // MATHEMATICAL BOLD SMALL N (0x1d427) + case L'𝐨': // MATHEMATICAL BOLD SMALL O (0x1d428) + case L'𝐩': // MATHEMATICAL BOLD SMALL P (0x1d429) + case L'𝐪': // MATHEMATICAL BOLD SMALL Q (0x1d42a) + case L'𝐫': // MATHEMATICAL BOLD SMALL R (0x1d42b) + case L'𝐬': // MATHEMATICAL BOLD SMALL S (0x1d42c) + case L'𝐭': // MATHEMATICAL BOLD SMALL T (0x1d42d) + case L'𝐮': // MATHEMATICAL BOLD SMALL U (0x1d42e) + case L'𝐯': // MATHEMATICAL BOLD SMALL V (0x1d42f) + case L'𝐰': // MATHEMATICAL BOLD SMALL W (0x1d430) + case L'𝐱': // MATHEMATICAL BOLD SMALL X (0x1d431) + case L'𝐲': // MATHEMATICAL BOLD SMALL Y (0x1d432) + case L'𝐳': // MATHEMATICAL BOLD SMALL Z (0x1d433) + case L'𝑎': // MATHEMATICAL ITALIC SMALL A (0x1d44e) + case L'𝑏': // MATHEMATICAL ITALIC SMALL B (0x1d44f) + case L'𝑐': // MATHEMATICAL ITALIC SMALL C (0x1d450) + case L'𝑑': // MATHEMATICAL ITALIC SMALL D (0x1d451) + case L'𝑒': // MATHEMATICAL ITALIC SMALL E (0x1d452) + case L'𝑓': // MATHEMATICAL ITALIC SMALL F (0x1d453) + case L'𝑔': // MATHEMATICAL ITALIC SMALL G (0x1d454) + case L'𝑖': // MATHEMATICAL ITALIC SMALL I (0x1d456) + case L'𝑗': // MATHEMATICAL ITALIC SMALL J (0x1d457) + case L'𝑘': // MATHEMATICAL ITALIC SMALL K (0x1d458) + case L'𝑙': // MATHEMATICAL ITALIC SMALL L (0x1d459) + case L'𝑚': // MATHEMATICAL ITALIC SMALL M (0x1d45a) + case L'𝑛': // MATHEMATICAL ITALIC SMALL N (0x1d45b) + case L'𝑜': // MATHEMATICAL ITALIC SMALL O (0x1d45c) + case L'𝑝': // MATHEMATICAL ITALIC SMALL P (0x1d45d) + case L'𝑞': // MATHEMATICAL ITALIC SMALL Q (0x1d45e) + case L'𝑟': // MATHEMATICAL ITALIC SMALL R (0x1d45f) + case L'𝑠': // MATHEMATICAL ITALIC SMALL S (0x1d460) + case L'𝑡': // MATHEMATICAL ITALIC SMALL T (0x1d461) + case L'𝑢': // MATHEMATICAL ITALIC SMALL U (0x1d462) + case L'𝑣': // MATHEMATICAL ITALIC SMALL V (0x1d463) + case L'𝑤': // MATHEMATICAL ITALIC SMALL W (0x1d464) + case L'𝑥': // MATHEMATICAL ITALIC SMALL X (0x1d465) + case L'𝑦': // MATHEMATICAL ITALIC SMALL Y (0x1d466) + case L'𝑧': // MATHEMATICAL ITALIC SMALL Z (0x1d467) + case L'𝒂': // MATHEMATICAL BOLD ITALIC SMALL A (0x1d482) + case L'𝒃': // MATHEMATICAL BOLD ITALIC SMALL B (0x1d483) + case L'𝒄': // MATHEMATICAL BOLD ITALIC SMALL C (0x1d484) + case L'𝒅': // MATHEMATICAL BOLD ITALIC SMALL D (0x1d485) + case L'𝒆': // MATHEMATICAL BOLD ITALIC SMALL E (0x1d486) + case L'𝒇': // MATHEMATICAL BOLD ITALIC SMALL F (0x1d487) + case L'𝒈': // MATHEMATICAL BOLD ITALIC SMALL G (0x1d488) + case L'𝒉': // MATHEMATICAL BOLD ITALIC SMALL H (0x1d489) + case L'𝒊': // MATHEMATICAL BOLD ITALIC SMALL I (0x1d48a) + case L'𝒋': // MATHEMATICAL BOLD ITALIC SMALL J (0x1d48b) + case L'𝒌': // MATHEMATICAL BOLD ITALIC SMALL K (0x1d48c) + case L'𝒍': // MATHEMATICAL BOLD ITALIC SMALL L (0x1d48d) + case L'𝒎': // MATHEMATICAL BOLD ITALIC SMALL M (0x1d48e) + case L'𝒏': // MATHEMATICAL BOLD ITALIC SMALL N (0x1d48f) + case L'𝒐': // MATHEMATICAL BOLD ITALIC SMALL O (0x1d490) + case L'𝒑': // MATHEMATICAL BOLD ITALIC SMALL P (0x1d491) + case L'𝒒': // MATHEMATICAL BOLD ITALIC SMALL Q (0x1d492) + case L'𝒓': // MATHEMATICAL BOLD ITALIC SMALL R (0x1d493) + case L'𝒔': // MATHEMATICAL BOLD ITALIC SMALL S (0x1d494) + case L'𝒕': // MATHEMATICAL BOLD ITALIC SMALL T (0x1d495) + case L'𝒖': // MATHEMATICAL BOLD ITALIC SMALL U (0x1d496) + case L'𝒗': // MATHEMATICAL BOLD ITALIC SMALL V (0x1d497) + case L'𝒘': // MATHEMATICAL BOLD ITALIC SMALL W (0x1d498) + case L'𝒙': // MATHEMATICAL BOLD ITALIC SMALL X (0x1d499) + case L'𝒚': // MATHEMATICAL BOLD ITALIC SMALL Y (0x1d49a) + case L'𝒛': // MATHEMATICAL BOLD ITALIC SMALL Z (0x1d49b) + case L'𝒶': // MATHEMATICAL SCRIPT SMALL A (0x1d4b6) + case L'𝒷': // MATHEMATICAL SCRIPT SMALL B (0x1d4b7) + case L'𝒸': // MATHEMATICAL SCRIPT SMALL C (0x1d4b8) + case L'𝒹': // MATHEMATICAL SCRIPT SMALL D (0x1d4b9) + case L'𝒻': // MATHEMATICAL SCRIPT SMALL F (0x1d4bb) + case L'𝒽': // MATHEMATICAL SCRIPT SMALL H (0x1d4bd) + case L'𝒾': // MATHEMATICAL SCRIPT SMALL I (0x1d4be) + case L'𝒿': // MATHEMATICAL SCRIPT SMALL J (0x1d4bf) + case L'𝓀': // MATHEMATICAL SCRIPT SMALL K (0x1d4c0) + case L'𝓁': // MATHEMATICAL SCRIPT SMALL L (0x1d4c1) + case L'𝓂': // MATHEMATICAL SCRIPT SMALL M (0x1d4c2) + case L'𝓃': // MATHEMATICAL SCRIPT SMALL N (0x1d4c3) + case L'𝓅': // MATHEMATICAL SCRIPT SMALL P (0x1d4c5) + case L'𝓆': // MATHEMATICAL SCRIPT SMALL Q (0x1d4c6) + case L'𝓇': // MATHEMATICAL SCRIPT SMALL R (0x1d4c7) + case L'𝓈': // MATHEMATICAL SCRIPT SMALL S (0x1d4c8) + case L'𝓉': // MATHEMATICAL SCRIPT SMALL T (0x1d4c9) + case L'𝓊': // MATHEMATICAL SCRIPT SMALL U (0x1d4ca) + case L'𝓋': // MATHEMATICAL SCRIPT SMALL V (0x1d4cb) + case L'𝓌': // MATHEMATICAL SCRIPT SMALL W (0x1d4cc) + case L'𝓍': // MATHEMATICAL SCRIPT SMALL X (0x1d4cd) + case L'𝓎': // MATHEMATICAL SCRIPT SMALL Y (0x1d4ce) + case L'𝓏': // MATHEMATICAL SCRIPT SMALL Z (0x1d4cf) + case L'𝓪': // MATHEMATICAL BOLD SCRIPT SMALL A (0x1d4ea) + case L'𝓫': // MATHEMATICAL BOLD SCRIPT SMALL B (0x1d4eb) + case L'𝓬': // MATHEMATICAL BOLD SCRIPT SMALL C (0x1d4ec) + case L'𝓭': // MATHEMATICAL BOLD SCRIPT SMALL D (0x1d4ed) + case L'𝓮': // MATHEMATICAL BOLD SCRIPT SMALL E (0x1d4ee) + case L'𝓯': // MATHEMATICAL BOLD SCRIPT SMALL F (0x1d4ef) + case L'𝓰': // MATHEMATICAL BOLD SCRIPT SMALL G (0x1d4f0) + case L'𝓱': // MATHEMATICAL BOLD SCRIPT SMALL H (0x1d4f1) + case L'𝓲': // MATHEMATICAL BOLD SCRIPT SMALL I (0x1d4f2) + case L'𝓳': // MATHEMATICAL BOLD SCRIPT SMALL J (0x1d4f3) + case L'𝓴': // MATHEMATICAL BOLD SCRIPT SMALL K (0x1d4f4) + case L'𝓵': // MATHEMATICAL BOLD SCRIPT SMALL L (0x1d4f5) + case L'𝓶': // MATHEMATICAL BOLD SCRIPT SMALL M (0x1d4f6) + case L'𝓷': // MATHEMATICAL BOLD SCRIPT SMALL N (0x1d4f7) + case L'𝓸': // MATHEMATICAL BOLD SCRIPT SMALL O (0x1d4f8) + case L'𝓹': // MATHEMATICAL BOLD SCRIPT SMALL P (0x1d4f9) + case L'𝓺': // MATHEMATICAL BOLD SCRIPT SMALL Q (0x1d4fa) + case L'𝓻': // MATHEMATICAL BOLD SCRIPT SMALL R (0x1d4fb) + case L'𝓼': // MATHEMATICAL BOLD SCRIPT SMALL S (0x1d4fc) + case L'𝓽': // MATHEMATICAL BOLD SCRIPT SMALL T (0x1d4fd) + case L'𝓾': // MATHEMATICAL BOLD SCRIPT SMALL U (0x1d4fe) + case L'𝓿': // MATHEMATICAL BOLD SCRIPT SMALL V (0x1d4ff) + case L'𝔀': // MATHEMATICAL BOLD SCRIPT SMALL W (0x1d500) + case L'𝔁': // MATHEMATICAL BOLD SCRIPT SMALL X (0x1d501) + case L'𝔂': // MATHEMATICAL BOLD SCRIPT SMALL Y (0x1d502) + case L'𝔃': // MATHEMATICAL BOLD SCRIPT SMALL Z (0x1d503) + case L'𝔞': // MATHEMATICAL FRAKTUR SMALL A (0x1d51e) + case L'𝔟': // MATHEMATICAL FRAKTUR SMALL B (0x1d51f) + case L'𝔠': // MATHEMATICAL FRAKTUR SMALL C (0x1d520) + case L'𝔡': // MATHEMATICAL FRAKTUR SMALL D (0x1d521) + case L'𝔢': // MATHEMATICAL FRAKTUR SMALL E (0x1d522) + case L'𝔣': // MATHEMATICAL FRAKTUR SMALL F (0x1d523) + case L'𝔤': // MATHEMATICAL FRAKTUR SMALL G (0x1d524) + case L'𝔥': // MATHEMATICAL FRAKTUR SMALL H (0x1d525) + case L'𝔦': // MATHEMATICAL FRAKTUR SMALL I (0x1d526) + case L'𝔧': // MATHEMATICAL FRAKTUR SMALL J (0x1d527) + case L'𝔨': // MATHEMATICAL FRAKTUR SMALL K (0x1d528) + case L'𝔩': // MATHEMATICAL FRAKTUR SMALL L (0x1d529) + case L'𝔪': // MATHEMATICAL FRAKTUR SMALL M (0x1d52a) + case L'𝔫': // MATHEMATICAL FRAKTUR SMALL N (0x1d52b) + case L'𝔬': // MATHEMATICAL FRAKTUR SMALL O (0x1d52c) + case L'𝔭': // MATHEMATICAL FRAKTUR SMALL P (0x1d52d) + case L'𝔮': // MATHEMATICAL FRAKTUR SMALL Q (0x1d52e) + case L'𝔯': // MATHEMATICAL FRAKTUR SMALL R (0x1d52f) + case L'𝔰': // MATHEMATICAL FRAKTUR SMALL S (0x1d530) + case L'𝔱': // MATHEMATICAL FRAKTUR SMALL T (0x1d531) + case L'𝔲': // MATHEMATICAL FRAKTUR SMALL U (0x1d532) + case L'𝔳': // MATHEMATICAL FRAKTUR SMALL V (0x1d533) + case L'𝔴': // MATHEMATICAL FRAKTUR SMALL W (0x1d534) + case L'𝔵': // MATHEMATICAL FRAKTUR SMALL X (0x1d535) + case L'𝔶': // MATHEMATICAL FRAKTUR SMALL Y (0x1d536) + case L'𝔷': // MATHEMATICAL FRAKTUR SMALL Z (0x1d537) + case L'𝕒': // MATHEMATICAL DOUBLE-STRUCK SMALL A (0x1d552) + case L'𝕓': // MATHEMATICAL DOUBLE-STRUCK SMALL B (0x1d553) + case L'𝕔': // MATHEMATICAL DOUBLE-STRUCK SMALL C (0x1d554) + case L'𝕕': // MATHEMATICAL DOUBLE-STRUCK SMALL D (0x1d555) + case L'𝕖': // MATHEMATICAL DOUBLE-STRUCK SMALL E (0x1d556) + case L'𝕗': // MATHEMATICAL DOUBLE-STRUCK SMALL F (0x1d557) + case L'𝕘': // MATHEMATICAL DOUBLE-STRUCK SMALL G (0x1d558) + case L'𝕙': // MATHEMATICAL DOUBLE-STRUCK SMALL H (0x1d559) + case L'𝕚': // MATHEMATICAL DOUBLE-STRUCK SMALL I (0x1d55a) + case L'𝕛': // MATHEMATICAL DOUBLE-STRUCK SMALL J (0x1d55b) + case L'𝕜': // MATHEMATICAL DOUBLE-STRUCK SMALL K (0x1d55c) + case L'𝕝': // MATHEMATICAL DOUBLE-STRUCK SMALL L (0x1d55d) + case L'𝕞': // MATHEMATICAL DOUBLE-STRUCK SMALL M (0x1d55e) + case L'𝕟': // MATHEMATICAL DOUBLE-STRUCK SMALL N (0x1d55f) + case L'𝕠': // MATHEMATICAL DOUBLE-STRUCK SMALL O (0x1d560) + case L'𝕡': // MATHEMATICAL DOUBLE-STRUCK SMALL P (0x1d561) + case L'𝕢': // MATHEMATICAL DOUBLE-STRUCK SMALL Q (0x1d562) + case L'𝕣': // MATHEMATICAL DOUBLE-STRUCK SMALL R (0x1d563) + case L'𝕤': // MATHEMATICAL DOUBLE-STRUCK SMALL S (0x1d564) + case L'𝕥': // MATHEMATICAL DOUBLE-STRUCK SMALL T (0x1d565) + case L'𝕦': // MATHEMATICAL DOUBLE-STRUCK SMALL U (0x1d566) + case L'𝕧': // MATHEMATICAL DOUBLE-STRUCK SMALL V (0x1d567) + case L'𝕨': // MATHEMATICAL DOUBLE-STRUCK SMALL W (0x1d568) + case L'𝕩': // MATHEMATICAL DOUBLE-STRUCK SMALL X (0x1d569) + case L'𝕪': // MATHEMATICAL DOUBLE-STRUCK SMALL Y (0x1d56a) + case L'𝕫': // MATHEMATICAL DOUBLE-STRUCK SMALL Z (0x1d56b) + case L'𝖆': // MATHEMATICAL BOLD FRAKTUR SMALL A (0x1d586) + case L'𝖇': // MATHEMATICAL BOLD FRAKTUR SMALL B (0x1d587) + case L'𝖈': // MATHEMATICAL BOLD FRAKTUR SMALL C (0x1d588) + case L'𝖉': // MATHEMATICAL BOLD FRAKTUR SMALL D (0x1d589) + case L'𝖊': // MATHEMATICAL BOLD FRAKTUR SMALL E (0x1d58a) + case L'𝖋': // MATHEMATICAL BOLD FRAKTUR SMALL F (0x1d58b) + case L'𝖌': // MATHEMATICAL BOLD FRAKTUR SMALL G (0x1d58c) + case L'𝖍': // MATHEMATICAL BOLD FRAKTUR SMALL H (0x1d58d) + case L'𝖎': // MATHEMATICAL BOLD FRAKTUR SMALL I (0x1d58e) + case L'𝖏': // MATHEMATICAL BOLD FRAKTUR SMALL J (0x1d58f) + case L'𝖐': // MATHEMATICAL BOLD FRAKTUR SMALL K (0x1d590) + case L'𝖑': // MATHEMATICAL BOLD FRAKTUR SMALL L (0x1d591) + case L'𝖒': // MATHEMATICAL BOLD FRAKTUR SMALL M (0x1d592) + case L'𝖓': // MATHEMATICAL BOLD FRAKTUR SMALL N (0x1d593) + case L'𝖔': // MATHEMATICAL BOLD FRAKTUR SMALL O (0x1d594) + case L'𝖕': // MATHEMATICAL BOLD FRAKTUR SMALL P (0x1d595) + case L'𝖖': // MATHEMATICAL BOLD FRAKTUR SMALL Q (0x1d596) + case L'𝖗': // MATHEMATICAL BOLD FRAKTUR SMALL R (0x1d597) + case L'𝖘': // MATHEMATICAL BOLD FRAKTUR SMALL S (0x1d598) + case L'𝖙': // MATHEMATICAL BOLD FRAKTUR SMALL T (0x1d599) + case L'𝖚': // MATHEMATICAL BOLD FRAKTUR SMALL U (0x1d59a) + case L'𝖛': // MATHEMATICAL BOLD FRAKTUR SMALL V (0x1d59b) + case L'𝖜': // MATHEMATICAL BOLD FRAKTUR SMALL W (0x1d59c) + case L'𝖝': // MATHEMATICAL BOLD FRAKTUR SMALL X (0x1d59d) + case L'𝖞': // MATHEMATICAL BOLD FRAKTUR SMALL Y (0x1d59e) + case L'𝖟': // MATHEMATICAL BOLD FRAKTUR SMALL Z (0x1d59f) + case L'𝖺': // MATHEMATICAL SANS SMALL A (0x1d5ba) + case L'𝖻': // MATHEMATICAL SANS SMALL B (0x1d5bb) + case L'𝖼': // MATHEMATICAL SANS SMALL C (0x1d5bc) + case L'𝖽': // MATHEMATICAL SANS SMALL D (0x1d5bd) + case L'𝖾': // MATHEMATICAL SANS SMALL E (0x1d5be) + case L'𝖿': // MATHEMATICAL SANS SMALL F (0x1d5bf) + case L'𝗀': // MATHEMATICAL SANS SMALL G (0x1d5c0) + case L'𝗁': // MATHEMATICAL SANS SMALL H (0x1d5c1) + case L'𝗂': // MATHEMATICAL SANS SMALL I (0x1d5c2) + case L'𝗃': // MATHEMATICAL SANS SMALL J (0x1d5c3) + case L'𝗄': // MATHEMATICAL SANS SMALL K (0x1d5c4) + case L'𝗅': // MATHEMATICAL SANS SMALL L (0x1d5c5) + case L'𝗆': // MATHEMATICAL SANS SMALL M (0x1d5c6) + case L'𝗇': // MATHEMATICAL SANS SMALL N (0x1d5c7) + case L'𝗈': // MATHEMATICAL SANS SMALL O (0x1d5c8) + case L'𝗉': // MATHEMATICAL SANS SMALL P (0x1d5c9) + case L'𝗊': // MATHEMATICAL SANS SMALL Q (0x1d5ca) + case L'𝗋': // MATHEMATICAL SANS SMALL R (0x1d5cb) + case L'𝗌': // MATHEMATICAL SANS SMALL S (0x1d5cc) + case L'𝗍': // MATHEMATICAL SANS SMALL T (0x1d5cd) + case L'𝗎': // MATHEMATICAL SANS SMALL U (0x1d5ce) + case L'𝗏': // MATHEMATICAL SANS SMALL V (0x1d5cf) + case L'𝗐': // MATHEMATICAL SANS SMALL W (0x1d5d0) + case L'𝗑': // MATHEMATICAL SANS SMALL X (0x1d5d1) + case L'𝗒': // MATHEMATICAL SANS SMALL Y (0x1d5d2) + case L'𝗓': // MATHEMATICAL SANS SMALL Z (0x1d5d3) + case L'𝗮': // MATHEMATICAL SANS BOLD SMALL A (0x1d5ee) + case L'𝗯': // MATHEMATICAL SANS BOLD SMALL B (0x1d5ef) + case L'𝗰': // MATHEMATICAL SANS BOLD SMALL C (0x1d5f0) + case L'𝗱': // MATHEMATICAL SANS BOLD SMALL D (0x1d5f1) + case L'𝗲': // MATHEMATICAL SANS BOLD SMALL E (0x1d5f2) + case L'𝗳': // MATHEMATICAL SANS BOLD SMALL F (0x1d5f3) + case L'𝗴': // MATHEMATICAL SANS BOLD SMALL G (0x1d5f4) + case L'𝗵': // MATHEMATICAL SANS BOLD SMALL H (0x1d5f5) + case L'𝗶': // MATHEMATICAL SANS BOLD SMALL I (0x1d5f6) + case L'𝗷': // MATHEMATICAL SANS BOLD SMALL J (0x1d5f7) + case L'𝗸': // MATHEMATICAL SANS BOLD SMALL K (0x1d5f8) + case L'𝗹': // MATHEMATICAL SANS BOLD SMALL L (0x1d5f9) + case L'𝗺': // MATHEMATICAL SANS BOLD SMALL M (0x1d5fa) + case L'𝗻': // MATHEMATICAL SANS BOLD SMALL N (0x1d5fb) + case L'𝗼': // MATHEMATICAL SANS BOLD SMALL O (0x1d5fc) + case L'𝗽': // MATHEMATICAL SANS BOLD SMALL P (0x1d5fd) + case L'𝗾': // MATHEMATICAL SANS BOLD SMALL Q (0x1d5fe) + case L'𝗿': // MATHEMATICAL SANS BOLD SMALL R (0x1d5ff) + case L'𝘀': // MATHEMATICAL SANS BOLD SMALL S (0x1d600) + case L'𝘁': // MATHEMATICAL SANS BOLD SMALL T (0x1d601) + case L'𝘂': // MATHEMATICAL SANS BOLD SMALL U (0x1d602) + case L'𝘃': // MATHEMATICAL SANS BOLD SMALL V (0x1d603) + case L'𝘄': // MATHEMATICAL SANS BOLD SMALL W (0x1d604) + case L'𝘅': // MATHEMATICAL SANS BOLD SMALL X (0x1d605) + case L'𝘆': // MATHEMATICAL SANS BOLD SMALL Y (0x1d606) + case L'𝘇': // MATHEMATICAL SANS BOLD SMALL Z (0x1d607) + case L'𝘢': // MATHEMATICAL SANS ITALIC SMALL A (0x1d622) + case L'𝘣': // MATHEMATICAL SANS ITALIC SMALL B (0x1d623) + case L'𝘤': // MATHEMATICAL SANS ITALIC SMALL C (0x1d624) + case L'𝘥': // MATHEMATICAL SANS ITALIC SMALL D (0x1d625) + case L'𝘦': // MATHEMATICAL SANS ITALIC SMALL E (0x1d626) + case L'𝘧': // MATHEMATICAL SANS ITALIC SMALL F (0x1d627) + case L'𝘨': // MATHEMATICAL SANS ITALIC SMALL G (0x1d628) + case L'𝘩': // MATHEMATICAL SANS ITALIC SMALL H (0x1d629) + case L'𝘪': // MATHEMATICAL SANS ITALIC SMALL I (0x1d62a) + case L'𝘫': // MATHEMATICAL SANS ITALIC SMALL J (0x1d62b) + case L'𝘬': // MATHEMATICAL SANS ITALIC SMALL K (0x1d62c) + case L'𝘭': // MATHEMATICAL SANS ITALIC SMALL L (0x1d62d) + case L'𝘮': // MATHEMATICAL SANS ITALIC SMALL M (0x1d62e) + case L'𝘯': // MATHEMATICAL SANS ITALIC SMALL N (0x1d62f) + case L'𝘰': // MATHEMATICAL SANS ITALIC SMALL O (0x1d630) + case L'𝘱': // MATHEMATICAL SANS ITALIC SMALL P (0x1d631) + case L'𝘲': // MATHEMATICAL SANS ITALIC SMALL Q (0x1d632) + case L'𝘳': // MATHEMATICAL SANS ITALIC SMALL R (0x1d633) + case L'𝘴': // MATHEMATICAL SANS ITALIC SMALL S (0x1d634) + case L'𝘵': // MATHEMATICAL SANS ITALIC SMALL T (0x1d635) + case L'𝘶': // MATHEMATICAL SANS ITALIC SMALL U (0x1d636) + case L'𝘷': // MATHEMATICAL SANS ITALIC SMALL V (0x1d637) + case L'𝘸': // MATHEMATICAL SANS ITALIC SMALL W (0x1d638) + case L'𝘹': // MATHEMATICAL SANS ITALIC SMALL X (0x1d639) + case L'𝘺': // MATHEMATICAL SANS ITALIC SMALL Y (0x1d63a) + case L'𝘻': // MATHEMATICAL SANS ITALIC SMALL Z (0x1d63b) + case L'𝙖': // MATHEMATICAL SANS BOLD ITALIC SMALL A (0x1d656) + case L'𝙗': // MATHEMATICAL SANS BOLD ITALIC SMALL B (0x1d657) + case L'𝙘': // MATHEMATICAL SANS BOLD ITALIC SMALL C (0x1d658) + case L'𝙙': // MATHEMATICAL SANS BOLD ITALIC SMALL D (0x1d659) + case L'𝙚': // MATHEMATICAL SANS BOLD ITALIC SMALL E (0x1d65a) + case L'𝙛': // MATHEMATICAL SANS BOLD ITALIC SMALL F (0x1d65b) + case L'𝙜': // MATHEMATICAL SANS BOLD ITALIC SMALL G (0x1d65c) + case L'𝙝': // MATHEMATICAL SANS BOLD ITALIC SMALL H (0x1d65d) + case L'𝙞': // MATHEMATICAL SANS BOLD ITALIC SMALL I (0x1d65e) + case L'𝙟': // MATHEMATICAL SANS BOLD ITALIC SMALL J (0x1d65f) + case L'𝙠': // MATHEMATICAL SANS BOLD ITALIC SMALL K (0x1d660) + case L'𝙡': // MATHEMATICAL SANS BOLD ITALIC SMALL L (0x1d661) + case L'𝙢': // MATHEMATICAL SANS BOLD ITALIC SMALL M (0x1d662) + case L'𝙣': // MATHEMATICAL SANS BOLD ITALIC SMALL N (0x1d663) + case L'𝙤': // MATHEMATICAL SANS BOLD ITALIC SMALL O (0x1d664) + case L'𝙥': // MATHEMATICAL SANS BOLD ITALIC SMALL P (0x1d665) + case L'𝙦': // MATHEMATICAL SANS BOLD ITALIC SMALL Q (0x1d666) + case L'𝙧': // MATHEMATICAL SANS BOLD ITALIC SMALL R (0x1d667) + case L'𝙨': // MATHEMATICAL SANS BOLD ITALIC SMALL S (0x1d668) + case L'𝙩': // MATHEMATICAL SANS BOLD ITALIC SMALL T (0x1d669) + case L'𝙪': // MATHEMATICAL SANS BOLD ITALIC SMALL U (0x1d66a) + case L'𝙫': // MATHEMATICAL SANS BOLD ITALIC SMALL V (0x1d66b) + case L'𝙬': // MATHEMATICAL SANS BOLD ITALIC SMALL W (0x1d66c) + case L'𝙭': // MATHEMATICAL SANS BOLD ITALIC SMALL X (0x1d66d) + case L'𝙮': // MATHEMATICAL SANS BOLD ITALIC SMALL Y (0x1d66e) + case L'𝙯': // MATHEMATICAL SANS BOLD ITALIC SMALL Z (0x1d66f) + case L'𝚊': // MATHEMATICAL MONOSPACE SMALL A (0x1d68a) + case L'𝚋': // MATHEMATICAL MONOSPACE SMALL B (0x1d68b) + case L'𝚌': // MATHEMATICAL MONOSPACE SMALL C (0x1d68c) + case L'𝚍': // MATHEMATICAL MONOSPACE SMALL D (0x1d68d) + case L'𝚎': // MATHEMATICAL MONOSPACE SMALL E (0x1d68e) + case L'𝚏': // MATHEMATICAL MONOSPACE SMALL F (0x1d68f) + case L'𝚐': // MATHEMATICAL MONOSPACE SMALL G (0x1d690) + case L'𝚑': // MATHEMATICAL MONOSPACE SMALL H (0x1d691) + case L'𝚒': // MATHEMATICAL MONOSPACE SMALL I (0x1d692) + case L'𝚓': // MATHEMATICAL MONOSPACE SMALL J (0x1d693) + case L'𝚔': // MATHEMATICAL MONOSPACE SMALL K (0x1d694) + case L'𝚕': // MATHEMATICAL MONOSPACE SMALL L (0x1d695) + case L'𝚖': // MATHEMATICAL MONOSPACE SMALL M (0x1d696) + case L'𝚗': // MATHEMATICAL MONOSPACE SMALL N (0x1d697) + case L'𝚘': // MATHEMATICAL MONOSPACE SMALL O (0x1d698) + case L'𝚙': // MATHEMATICAL MONOSPACE SMALL P (0x1d699) + case L'𝚚': // MATHEMATICAL MONOSPACE SMALL Q (0x1d69a) + case L'𝚛': // MATHEMATICAL MONOSPACE SMALL R (0x1d69b) + case L'𝚜': // MATHEMATICAL MONOSPACE SMALL S (0x1d69c) + case L'𝚝': // MATHEMATICAL MONOSPACE SMALL T (0x1d69d) + case L'𝚞': // MATHEMATICAL MONOSPACE SMALL U (0x1d69e) + case L'𝚟': // MATHEMATICAL MONOSPACE SMALL V (0x1d69f) + case L'𝚠': // MATHEMATICAL MONOSPACE SMALL W (0x1d6a0) + case L'𝚡': // MATHEMATICAL MONOSPACE SMALL X (0x1d6a1) + case L'𝚢': // MATHEMATICAL MONOSPACE SMALL Y (0x1d6a2) + case L'𝚣': // MATHEMATICAL MONOSPACE SMALL Z (0x1d6a3) + case L'𝚤': // MATHEMATICAL ITALIC SMALL DOTLESS I (0x1d6a4) + case L'𝚥': // MATHEMATICAL ITALIC SMALL DOTLESS J (0x1d6a5) + case L'𝛂': // MATHEMATICAL BOLD SMALL ALPHA (0x1d6c2) + case L'𝛃': // MATHEMATICAL BOLD SMALL BETA (0x1d6c3) + case L'𝛄': // MATHEMATICAL BOLD SMALL GAMMA (0x1d6c4) + case L'𝛅': // MATHEMATICAL BOLD SMALL DELTA (0x1d6c5) + case L'𝛆': // MATHEMATICAL BOLD SMALL EPSILON (0x1d6c6) + case L'𝛇': // MATHEMATICAL BOLD SMALL ZETA (0x1d6c7) + case L'𝛈': // MATHEMATICAL BOLD SMALL ETA (0x1d6c8) + case L'𝛉': // MATHEMATICAL BOLD SMALL THETA (0x1d6c9) + case L'𝛊': // MATHEMATICAL BOLD SMALL IOTA (0x1d6ca) + case L'𝛋': // MATHEMATICAL BOLD SMALL KAPPA (0x1d6cb) + case L'𝛌': // MATHEMATICAL BOLD SMALL LAMDA (0x1d6cc) + case L'𝛍': // MATHEMATICAL BOLD SMALL MU (0x1d6cd) + case L'𝛎': // MATHEMATICAL BOLD SMALL NU (0x1d6ce) + case L'𝛏': // MATHEMATICAL BOLD SMALL XI (0x1d6cf) + case L'𝛐': // MATHEMATICAL BOLD SMALL OMICRON (0x1d6d0) + case L'𝛑': // MATHEMATICAL BOLD SMALL PI (0x1d6d1) + case L'𝛒': // MATHEMATICAL BOLD SMALL RHO (0x1d6d2) + case L'𝛓': // MATHEMATICAL BOLD SMALL FINAL SIGMA (0x1d6d3) + case L'𝛔': // MATHEMATICAL BOLD SMALL SIGMA (0x1d6d4) + case L'𝛕': // MATHEMATICAL BOLD SMALL TAU (0x1d6d5) + case L'𝛖': // MATHEMATICAL BOLD SMALL UPSILON (0x1d6d6) + case L'𝛗': // MATHEMATICAL BOLD SMALL PHI (0x1d6d7) + case L'𝛘': // MATHEMATICAL BOLD SMALL CHI (0x1d6d8) + case L'𝛙': // MATHEMATICAL BOLD SMALL PSI (0x1d6d9) + case L'𝛚': // MATHEMATICAL BOLD SMALL OMEGA (0x1d6da) + case L'𝛜': // MATHEMATICAL BOLD EPSILON SYMBOL (0x1d6dc) + case L'𝛝': // MATHEMATICAL BOLD THETA SYMBOL (0x1d6dd) + case L'𝛞': // MATHEMATICAL BOLD KAPPA SYMBOL (0x1d6de) + case L'𝛟': // MATHEMATICAL BOLD PHI SYMBOL (0x1d6df) + case L'𝛠': // MATHEMATICAL BOLD RHO SYMBOL (0x1d6e0) + case L'𝛡': // MATHEMATICAL BOLD PI SYMBOL (0x1d6e1) + case L'𝛼': // MATHEMATICAL ITALIC SMALL ALPHA (0x1d6fc) + case L'𝛽': // MATHEMATICAL ITALIC SMALL BETA (0x1d6fd) + case L'𝛾': // MATHEMATICAL ITALIC SMALL GAMMA (0x1d6fe) + case L'𝛿': // MATHEMATICAL ITALIC SMALL DELTA (0x1d6ff) + case L'𝜀': // MATHEMATICAL ITALIC SMALL EPSILON (0x1d700) + case L'𝜁': // MATHEMATICAL ITALIC SMALL ZETA (0x1d701) + case L'𝜂': // MATHEMATICAL ITALIC SMALL ETA (0x1d702) + case L'𝜃': // MATHEMATICAL ITALIC SMALL THETA (0x1d703) + case L'𝜄': // MATHEMATICAL ITALIC SMALL IOTA (0x1d704) + case L'𝜅': // MATHEMATICAL ITALIC SMALL KAPPA (0x1d705) + case L'𝜆': // MATHEMATICAL ITALIC SMALL LAMDA (0x1d706) + case L'𝜇': // MATHEMATICAL ITALIC SMALL MU (0x1d707) + case L'𝜈': // MATHEMATICAL ITALIC SMALL NU (0x1d708) + case L'𝜉': // MATHEMATICAL ITALIC SMALL XI (0x1d709) + case L'𝜊': // MATHEMATICAL ITALIC SMALL OMICRON (0x1d70a) + case L'𝜋': // MATHEMATICAL ITALIC SMALL PI (0x1d70b) + case L'𝜌': // MATHEMATICAL ITALIC SMALL RHO (0x1d70c) + case L'𝜍': // MATHEMATICAL ITALIC SMALL FINAL SIGMA (0x1d70d) + case L'𝜎': // MATHEMATICAL ITALIC SMALL SIGMA (0x1d70e) + case L'𝜏': // MATHEMATICAL ITALIC SMALL TAU (0x1d70f) + case L'𝜐': // MATHEMATICAL ITALIC SMALL UPSILON (0x1d710) + case L'𝜑': // MATHEMATICAL ITALIC SMALL PHI (0x1d711) + case L'𝜒': // MATHEMATICAL ITALIC SMALL CHI (0x1d712) + case L'𝜓': // MATHEMATICAL ITALIC SMALL PSI (0x1d713) + case L'𝜔': // MATHEMATICAL ITALIC SMALL OMEGA (0x1d714) + case L'𝜖': // MATHEMATICAL ITALIC EPSILON SYMBOL (0x1d716) + case L'𝜗': // MATHEMATICAL ITALIC THETA SYMBOL (0x1d717) + case L'𝜘': // MATHEMATICAL ITALIC KAPPA SYMBOL (0x1d718) + case L'𝜙': // MATHEMATICAL ITALIC PHI SYMBOL (0x1d719) + case L'𝜚': // MATHEMATICAL ITALIC RHO SYMBOL (0x1d71a) + case L'𝜛': // MATHEMATICAL ITALIC PI SYMBOL (0x1d71b) + case L'𝜶': // MATHEMATICAL BOLD ITALIC SMALL ALPHA (0x1d736) + case L'𝜷': // MATHEMATICAL BOLD ITALIC SMALL BETA (0x1d737) + case L'𝜸': // MATHEMATICAL BOLD ITALIC SMALL GAMMA (0x1d738) + case L'𝜹': // MATHEMATICAL BOLD ITALIC SMALL DELTA (0x1d739) + case L'𝜺': // MATHEMATICAL BOLD ITALIC SMALL EPSILON (0x1d73a) + case L'𝜻': // MATHEMATICAL BOLD ITALIC SMALL ZETA (0x1d73b) + case L'𝜼': // MATHEMATICAL BOLD ITALIC SMALL ETA (0x1d73c) + case L'𝜽': // MATHEMATICAL BOLD ITALIC SMALL THETA (0x1d73d) + case L'𝜾': // MATHEMATICAL BOLD ITALIC SMALL IOTA (0x1d73e) + case L'𝜿': // MATHEMATICAL BOLD ITALIC SMALL KAPPA (0x1d73f) + case L'𝝀': // MATHEMATICAL BOLD ITALIC SMALL LAMDA (0x1d740) + case L'𝝁': // MATHEMATICAL BOLD ITALIC SMALL MU (0x1d741) + case L'𝝂': // MATHEMATICAL BOLD ITALIC SMALL NU (0x1d742) + case L'𝝃': // MATHEMATICAL BOLD ITALIC SMALL XI (0x1d743) + case L'𝝄': // MATHEMATICAL BOLD ITALIC SMALL OMICRON (0x1d744) + case L'𝝅': // MATHEMATICAL BOLD ITALIC SMALL PI (0x1d745) + case L'𝝆': // MATHEMATICAL BOLD ITALIC SMALL RHO (0x1d746) + case L'𝝇': // MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA (0x1d747) + case L'𝝈': // MATHEMATICAL BOLD ITALIC SMALL SIGMA (0x1d748) + case L'𝝉': // MATHEMATICAL BOLD ITALIC SMALL TAU (0x1d749) + case L'𝝊': // MATHEMATICAL BOLD ITALIC SMALL UPSILON (0x1d74a) + case L'𝝋': // MATHEMATICAL BOLD ITALIC SMALL PHI (0x1d74b) + case L'𝝌': // MATHEMATICAL BOLD ITALIC SMALL CHI (0x1d74c) + case L'𝝍': // MATHEMATICAL BOLD ITALIC SMALL PSI (0x1d74d) + case L'𝝎': // MATHEMATICAL BOLD ITALIC SMALL OMEGA (0x1d74e) + case L'𝝐': // MATHEMATICAL BOLD ITALIC EPSILON SYMBOL (0x1d750) + case L'𝝑': // MATHEMATICAL BOLD ITALIC THETA SYMBOL (0x1d751) + case L'𝝒': // MATHEMATICAL BOLD ITALIC KAPPA SYMBOL (0x1d752) + case L'𝝓': // MATHEMATICAL BOLD ITALIC PHI SYMBOL (0x1d753) + case L'𝝔': // MATHEMATICAL BOLD ITALIC RHO SYMBOL (0x1d754) + case L'𝝕': // MATHEMATICAL BOLD ITALIC PI SYMBOL (0x1d755) + case L'𝝰': // MATHEMATICAL SANS BOLD SMALL ALPHA (0x1d770) + case L'𝝱': // MATHEMATICAL SANS BOLD SMALL BETA (0x1d771) + case L'𝝲': // MATHEMATICAL SANS BOLD SMALL GAMMA (0x1d772) + case L'𝝳': // MATHEMATICAL SANS BOLD SMALL DELTA (0x1d773) + case L'𝝴': // MATHEMATICAL SANS BOLD SMALL EPSILON (0x1d774) + case L'𝝵': // MATHEMATICAL SANS BOLD SMALL ZETA (0x1d775) + case L'𝝶': // MATHEMATICAL SANS BOLD SMALL ETA (0x1d776) + case L'𝝷': // MATHEMATICAL SANS BOLD SMALL THETA (0x1d777) + case L'𝝸': // MATHEMATICAL SANS BOLD SMALL IOTA (0x1d778) + case L'𝝹': // MATHEMATICAL SANS BOLD SMALL KAPPA (0x1d779) + case L'𝝺': // MATHEMATICAL SANS BOLD SMALL LAMDA (0x1d77a) + case L'𝝻': // MATHEMATICAL SANS BOLD SMALL MU (0x1d77b) + case L'𝝼': // MATHEMATICAL SANS BOLD SMALL NU (0x1d77c) + case L'𝝽': // MATHEMATICAL SANS BOLD SMALL XI (0x1d77d) + case L'𝝾': // MATHEMATICAL SANS BOLD SMALL OMICRON (0x1d77e) + case L'𝝿': // MATHEMATICAL SANS BOLD SMALL PI (0x1d77f) + case L'𝞀': // MATHEMATICAL SANS BOLD SMALL RHO (0x1d780) + case L'𝞁': // MATHEMATICAL SANS BOLD SMALL FINAL SIGMA (0x1d781) + case L'𝞂': // MATHEMATICAL SANS BOLD SMALL SIGMA (0x1d782) + case L'𝞃': // MATHEMATICAL SANS BOLD SMALL TAU (0x1d783) + case L'𝞄': // MATHEMATICAL SANS BOLD SMALL UPSILON (0x1d784) + case L'𝞅': // MATHEMATICAL SANS BOLD SMALL PHI (0x1d785) + case L'𝞆': // MATHEMATICAL SANS BOLD SMALL CHI (0x1d786) + case L'𝞇': // MATHEMATICAL SANS BOLD SMALL PSI (0x1d787) + case L'𝞈': // MATHEMATICAL SANS BOLD SMALL OMEGA (0x1d788) + case L'𝞊': // MATHEMATICAL SANS BOLD EPSILON SYMBOL (0x1d78a) + case L'𝞋': // MATHEMATICAL SANS BOLD THETA SYMBOL (0x1d78b) + case L'𝞌': // MATHEMATICAL SANS BOLD KAPPA SYMBOL (0x1d78c) + case L'𝞍': // MATHEMATICAL SANS BOLD PHI SYMBOL (0x1d78d) + case L'𝞎': // MATHEMATICAL SANS BOLD RHO SYMBOL (0x1d78e) + case L'𝞏': // MATHEMATICAL SANS BOLD PI SYMBOL (0x1d78f) + case L'𝞪': // MATHEMATICAL SANS BOLD ITALIC SMALL ALPHA (0x1d7aa) + case L'𝞫': // MATHEMATICAL SANS BOLD ITALIC SMALL BETA (0x1d7ab) + case L'𝞬': // MATHEMATICAL SANS BOLD ITALIC SMALL GAMMA (0x1d7ac) + case L'𝞭': // MATHEMATICAL SANS BOLD ITALIC SMALL DELTA (0x1d7ad) + case L'𝞮': // MATHEMATICAL SANS BOLD ITALIC SMALL EPSILON (0x1d7ae) + case L'𝞯': // MATHEMATICAL SANS BOLD ITALIC SMALL ZETA (0x1d7af) + case L'𝞰': // MATHEMATICAL SANS BOLD ITALIC SMALL ETA (0x1d7b0) + case L'𝞱': // MATHEMATICAL SANS BOLD ITALIC SMALL THETA (0x1d7b1) + case L'𝞲': // MATHEMATICAL SANS BOLD ITALIC SMALL IOTA (0x1d7b2) + case L'𝞳': // MATHEMATICAL SANS BOLD ITALIC SMALL KAPPA (0x1d7b3) + case L'𝞴': // MATHEMATICAL SANS BOLD ITALIC SMALL LAMDA (0x1d7b4) + case L'𝞵': // MATHEMATICAL SANS BOLD ITALIC SMALL MU (0x1d7b5) + case L'𝞶': // MATHEMATICAL SANS BOLD ITALIC SMALL NU (0x1d7b6) + case L'𝞷': // MATHEMATICAL SANS BOLD ITALIC SMALL XI (0x1d7b7) + case L'𝞸': // MATHEMATICAL SANS BOLD ITALIC SMALL OMICRON (0x1d7b8) + case L'𝞹': // MATHEMATICAL SANS BOLD ITALIC SMALL PI (0x1d7b9) + case L'𝞺': // MATHEMATICAL SANS BOLD ITALIC SMALL RHO (0x1d7ba) + case L'𝞻': // MATHEMATICAL SANS BOLD ITALIC SMALL FINAL SIGMA (0x1d7bb) + case L'𝞼': // MATHEMATICAL SANS BOLD ITALIC SMALL SIGMA (0x1d7bc) + case L'𝞽': // MATHEMATICAL SANS BOLD ITALIC SMALL TAU (0x1d7bd) + case L'𝞾': // MATHEMATICAL SANS BOLD ITALIC SMALL UPSILON (0x1d7be) + case L'𝞿': // MATHEMATICAL SANS BOLD ITALIC SMALL PHI (0x1d7bf) + case L'𝟀': // MATHEMATICAL SANS BOLD ITALIC SMALL CHI (0x1d7c0) + case L'𝟁': // MATHEMATICAL SANS BOLD ITALIC SMALL PSI (0x1d7c1) + case L'𝟂': // MATHEMATICAL SANS BOLD ITALIC SMALL OMEGA (0x1d7c2) + case L'𝟄': // MATHEMATICAL SANS BOLD ITALIC EPSILON SYMBOL (0x1d7c4) + case L'𝟅': // MATHEMATICAL SANS BOLD ITALIC THETA SYMBOL (0x1d7c5) + case L'𝟆': // MATHEMATICAL SANS BOLD ITALIC KAPPA SYMBOL (0x1d7c6) + case L'𝟇': // MATHEMATICAL SANS BOLD ITALIC PHI SYMBOL (0x1d7c7) + case L'𝟈': // MATHEMATICAL SANS BOLD ITALIC RHO SYMBOL (0x1d7c8) + case L'𝟉': // MATHEMATICAL SANS BOLD ITALIC PI SYMBOL (0x1d7c9) + case L'𝟋': // MATHEMATICAL BOLD SMALL DIGAMMA (0x1d7cb) + case L'𞤢': // ADLAM SMALL ALIF (0x1e922) + case L'𞤣': // ADLAM SMALL DAALI (0x1e923) + case L'𞤤': // ADLAM SMALL LAAM (0x1e924) + case L'𞤥': // ADLAM SMALL MIIM (0x1e925) + case L'𞤦': // ADLAM SMALL BA (0x1e926) + case L'𞤧': // ADLAM SMALL SINNYIIYHE (0x1e927) + case L'𞤨': // ADLAM SMALL PE (0x1e928) + case L'𞤩': // ADLAM SMALL BHE (0x1e929) + case L'𞤪': // ADLAM SMALL RA (0x1e92a) + case L'𞤫': // ADLAM SMALL E (0x1e92b) + case L'𞤬': // ADLAM SMALL FA (0x1e92c) + case L'𞤭': // ADLAM SMALL I (0x1e92d) + case L'𞤮': // ADLAM SMALL O (0x1e92e) + case L'𞤯': // ADLAM SMALL DHA (0x1e92f) + case L'𞤰': // ADLAM SMALL YHE (0x1e930) + case L'𞤱': // ADLAM SMALL WAW (0x1e931) + case L'𞤲': // ADLAM SMALL NUN (0x1e932) + case L'𞤳': // ADLAM SMALL KAF (0x1e933) + case L'𞤴': // ADLAM SMALL YA (0x1e934) + case L'𞤵': // ADLAM SMALL U (0x1e935) + case L'𞤶': // ADLAM SMALL JIIM (0x1e936) + case L'𞤷': // ADLAM SMALL CHI (0x1e937) + case L'𞤸': // ADLAM SMALL HA (0x1e938) + case L'𞤹': // ADLAM SMALL QAAF (0x1e939) + case L'𞤺': // ADLAM SMALL GA (0x1e93a) + case L'𞤻': // ADLAM SMALL NYA (0x1e93b) + case L'𞤼': // ADLAM SMALL TU (0x1e93c) + case L'𞤽': // ADLAM SMALL NHA (0x1e93d) + case L'𞤾': // ADLAM SMALL VA (0x1e93e) + case L'𞤿': // ADLAM SMALL KHA (0x1e93f) + case L'𞥀': // ADLAM SMALL GBE (0x1e940) + case L'𞥁': // ADLAM SMALL ZAL (0x1e941) + case L'𞥂': // ADLAM SMALL KPO (0x1e942) + case L'𞥃': // ADLAM SMALL SHA (0x1e943) + return 1; + default: + return 0; + } } diff --git a/libc/str/iswprint.c b/libc/str/iswprint.c index 3fd0c255..bb794f61 100644 --- a/libc/str/iswprint.c +++ b/libc/str/iswprint.c @@ -18,6 +18,10 @@ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/str/str.h" -int iswprint(wint_t wc) { - return !iswcntrl(wc); +/** + * Returns nonzero if c is printable. + */ +int iswprint(wint_t c) { + return !((0x00 <= c && c <= 0x1F) || (0x7F <= c && c <= 0x9F) || + (0xFFF9 <= c && c <= 0xFFFB) || c == 0x2028 || c == 0x2029); } diff --git a/libc/str/iswpunct.c b/libc/str/iswpunct.c index 63212cf6..e0410a88 100644 --- a/libc/str/iswpunct.c +++ b/libc/str/iswpunct.c @@ -18,6 +18,524 @@ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/str/str.h" -int iswpunct(wint_t wc) { - return ispunct(wc); +/** + * Returns nonzero if c is punctuation mark. + */ +int iswpunct(wint_t c) { + if (c < 0xa0) { + switch (c) { + case '!': + case '"': + case '#': + case '$': + case '%': + case '&': + case '\'': + case '(': + case ')': + case '*': + case '+': + case ',': + case '-': + case '.': + case '/': + case ':': + case ';': + case '<': + case '=': + case '>': + case '?': + case '@': + case '[': + case '\\': + case ']': + case '^': + case '_': + case '`': + case '{': + case '|': + case '}': + case '~': + return 1; + default: + return 0; + } + } + switch (c) { + case u'¡': // INVERTED EXCLAMATION MARK (0x00a1 Po) + case u'§': // SECTION SIGN (0x00a7 Po) + case u'«': // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (0x00ab Pi) + case u'¶': // PILCROW SIGN (0x00b6 Po) + case u'·': // MIDDLE DOT (0x00b7 Po) + case u'»': // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (0x00bb Pf) + case u'¿': // INVERTED QUESTION MARK (0x00bf Po) + case u';': // GREEK QUESTION MARK (0x037e Po) + case u'·': // GREEK ANO TELEIA (0x0387 Po) + case u'՚': // ARMENIAN APOSTROPHE (0x055a Po) + case u'՛': // ARMENIAN EMPHASIS MARK (0x055b Po) + case u'՜': // ARMENIAN EXCLAMATION MARK (0x055c Po) + case u'՝': // ARMENIAN COMMA (0x055d Po) + case u'՞': // ARMENIAN QUESTION MARK (0x055e Po) + case u'՟': // ARMENIAN ABBREVIATION MARK (0x055f Po) + case u'։': // ARMENIAN FULL STOP (0x0589 Po) + case u'֊': // ARMENIAN HYPHEN (0x058a Pd) + case 0x05be: // HEBREW PUNCTUATION MAQAF (0x05be Pd) + case 0x05c0: // HEBREW PUNCTUATION PASEQ (0x05c0 Po) + case 0x05c3: // HEBREW PUNCTUATION SOF PASUQ (0x05c3 Po) + case 0x05c6: // HEBREW PUNCTUATION NUN HAFUKHA (0x05c6 Po) + case 0x05f3: // HEBREW PUNCTUATION GERESH (0x05f3 Po) + case 0x05f4: // HEBREW PUNCTUATION GERSHAYIM (0x05f4 Po) + case 0x0609: // ARABIC-INDIC PER MILLE SIGN (0x0609 Po) + case 0x060a: // ARABIC-INDIC PER TEN THOUSAND SIGN (0x060a Po) + case 0x060c: // ARABIC COMMA (0x060c Po) + case 0x060d: // ARABIC DATE SEPARATOR (0x060d Po) + case 0x061b: // ARABIC SEMICOLON (0x061b Po) + case u'؞': // ARABIC TRIPLE DOT PUNCTUATION MARK (0x061e Po) + case u'؟': // ARABIC QUESTION MARK (0x061f Po) + case u'٪': // ARABIC PERCENT SIGN (0x066a Po) + case u'٫': // ARABIC DECIMAL SEPARATOR (0x066b Po) + case u'٬': // ARABIC THOUSANDS SEPARATOR (0x066c Po) + case u'٭': // ARABIC FIVE POINTED STAR (0x066d Po) + case u'۔': // ARABIC FULL STOP (0x06d4 Po) + case u'߷': // NKO SYMBOL GBAKURUNEN (0x07f7 Po) + case u'߸': // NKO COMMA (0x07f8 Po) + case u'߹': // NKO EXCLAMATION MARK (0x07f9 Po) + case u'।': // DEVANAGARI DANDA (0x0964 Po) + case u'॥': // DEVANAGARI DOUBLE DANDA (0x0965 Po) + case u'॰': // DEVANAGARI ABBREVIATION SIGN (0x0970 Po) + case 0x09fd: // BENGALI ABBREVIATION SIGN (0x09fd Po) + case 0x0a76: // GURMUKHI ABBREVIATION SIGN (0x0a76 Po) + case 0x0af0: // GUJARATI ABBREVIATION SIGN (0x0af0 Po) + case 0x0c77: // TELUGU SIGN SIDDHAM (0x0c77 Po) + case 0x0c84: // KANNADA SIGN SIDDHAM (0x0c84 Po) + case u'෴': // SINHALA PUNCTUATION KUNDDALIYA (0x0df4 Po) + case u'๏': // THAI CHARACTER FONGMAN (0x0e4f Po) + case u'๚': // THAI CHARACTER ANGKHANKHU (0x0e5a Po) + case u'๛': // THAI CHARACTER KHOMUT (0x0e5b Po) + case u'༄': // TIBETAN MARK INITIAL YIG MGO MDUN MA (0x0f04 Po) + case u'༅': // TIBETAN MARK CLOSING YIG MGO SGAB MA (0x0f05 Po) + case u'༆': // TIBETAN MARK CARET YIG MGO PHUR SHAD MA (0x0f06 Po) + case u'༇': // TIBETAN MARK YIG MGO TSHEG SHAD MA (0x0f07 Po) + case u'༈': // TIBETAN MARK SBRUL SHAD (0x0f08 Po) + case u'༉': // TIBETAN MARK BSKUR YIG MGO (0x0f09 Po) + case u'༊': // TIBETAN MARK BKA- SHOG YIG MGO (0x0f0a Po) + case u'་': // TIBETAN MARK INTERSYLLABIC TSHEG (0x0f0b Po) + case u'༌': // TIBETAN MARK DELIMITER TSHEG BSTAR (0x0f0c Po) + case u'།': // TIBETAN MARK SHAD (0x0f0d Po) + case u'༎': // TIBETAN MARK NYIS SHAD (0x0f0e Po) + case u'༏': // TIBETAN MARK TSHEG SHAD (0x0f0f Po) + case u'༐': // TIBETAN MARK NYIS TSHEG SHAD (0x0f10 Po) + case u'༑': // TIBETAN MARK RIN CHEN SPUNGS SHAD (0x0f11 Po) + case u'༒': // TIBETAN MARK RGYA GRAM SHAD (0x0f12 Po) + case u'༔': // TIBETAN MARK GTER TSHEG (0x0f14 Po) + case u'༺': // TIBETAN MARK GUG RTAGS GYON (0x0f3a Ps) + case u'༻': // TIBETAN MARK GUG RTAGS GYAS (0x0f3b Pe) + case u'༼': // TIBETAN MARK ANG KHANG GYON (0x0f3c Ps) + case u'༽': // TIBETAN MARK ANG KHANG GYAS (0x0f3d Pe) + case u'྅': // TIBETAN MARK PALUTA (0x0f85 Po) + case u'࿐': // TIBETAN MARK BSKA- SHOG GI MGO RGYAN (0x0fd0 Po) + case u'࿑': // TIBETAN MARK MNYAM YIG GI MGO RGYAN (0x0fd1 Po) + case u'࿒': // TIBETAN MARK NYIS TSHEG (0x0fd2 Po) + case u'࿓': // TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA (0x0fd3 Po) + case u'࿔': // TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA (0x0fd4 Po) + case u'࿙': // TIBETAN MARK LEADING MCHAN RTAGS (0x0fd9 Po) + case u'࿚': // TIBETAN MARK TRAILING MCHAN RTAGS (0x0fda Po) + case u'၊': // MYANMAR SIGN LITTLE SECTION (0x104a Po) + case u'။': // MYANMAR SIGN SECTION (0x104b Po) + case u'၌': // MYANMAR SYMBOL LOCATIVE (0x104c Po) + case u'၍': // MYANMAR SYMBOL COMPLETED (0x104d Po) + case u'၎': // MYANMAR SYMBOL AFOREMENTIONED (0x104e Po) + case u'၏': // MYANMAR SYMBOL GENITIVE (0x104f Po) + case u'჻': // GEORGIAN PARAGRAPH SEPARATOR (0x10fb Po) + case u'፠': // ETHIOPIC SECTION MARK (0x1360 Po) + case u'፡': // ETHIOPIC WORDSPACE (0x1361 Po) + case u'።': // ETHIOPIC FULL STOP (0x1362 Po) + case u'፣': // ETHIOPIC COMMA (0x1363 Po) + case u'፤': // ETHIOPIC SEMICOLON (0x1364 Po) + case u'፥': // ETHIOPIC COLON (0x1365 Po) + case u'፦': // ETHIOPIC PREFACE COLON (0x1366 Po) + case u'፧': // ETHIOPIC QUESTION MARK (0x1367 Po) + case u'፨': // ETHIOPIC PARAGRAPH SEPARATOR (0x1368 Po) + case u'᐀': // CANADIAN SYLLABICS HYPHEN (0x1400 Pd) + case u'᙮': // CANADIAN SYLLABICS FULL STOP (0x166e Po) + case u'᚛': // OGHAM FEATHER MARK (0x169b Ps) + case u'᚜': // OGHAM REVERSED FEATHER MARK (0x169c Pe) + case u'᛫': // RUNIC SINGLE PUNCTUATION (0x16eb Po) + case u'᛬': // RUNIC MULTIPLE PUNCTUATION (0x16ec Po) + case u'᛭': // RUNIC CROSS PUNCTUATION (0x16ed Po) + case u'᜵': // PHILIPPINE SINGLE PUNCTUATION (0x1735 Po) + case u'᜶': // PHILIPPINE DOUBLE PUNCTUATION (0x1736 Po) + case u'។': // KHMER SIGN KHAN (0x17d4 Po) + case u'៕': // KHMER SIGN BARIYOOSAN (0x17d5 Po) + case u'៖': // KHMER SIGN CAMNUC PII KUUH (0x17d6 Po) + case u'៘': // KHMER SIGN BEYYAL (0x17d8 Po) + case u'៙': // KHMER SIGN PHNAEK MUAN (0x17d9 Po) + case u'៚': // KHMER SIGN KOOMUUT (0x17da Po) + case u'᠀': // MONGOLIAN BIRGA (0x1800 Po) + case u'᠁': // MONGOLIAN ELLIPSIS (0x1801 Po) + case u'᠂': // MONGOLIAN COMMA (0x1802 Po) + case u'᠃': // MONGOLIAN FULL STOP (0x1803 Po) + case u'᠄': // MONGOLIAN COLON (0x1804 Po) + case u'᠅': // MONGOLIAN FOUR DOTS (0x1805 Po) + case u'᠆': // MONGOLIAN TODO SOFT HYPHEN (0x1806 Pd) + case u'᠇': // MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER (0x1807 Po) + case u'᠈': // MONGOLIAN MANCHU COMMA (0x1808 Po) + case u'᠉': // MONGOLIAN MANCHU FULL STOP (0x1809 Po) + case u'᠊': // MONGOLIAN NIRUGU (0x180a Po) + case u'᥄': // LIMBU EXCLAMATION MARK (0x1944 Po) + case u'᥅': // LIMBU QUESTION MARK (0x1945 Po) + case u'᨞': // BUGINESE PALLAWA (0x1a1e Po) + case u'᨟': // BUGINESE END OF SECTION (0x1a1f Po) + case u'᱾': // OL CHIKI PUNCTUATION MUCAAD (0x1c7e Po) + case u'᱿': // OL CHIKI PUNCTUATION DOUBLE MUCAAD (0x1c7f Po) + case u'‐': // HYPHEN (0x2010 Pd) + case u'‑': // NON-BREAKING HYPHEN (0x2011 Pd) + case u'‒': // FIGURE DASH (0x2012 Pd) + case u'–': // EN DASH (0x2013 Pd) + case u'—': // EM DASH (0x2014 Pd) + case u'―': // HORIZONTAL BAR (0x2015 Pd) + case u'‖': // DOUBLE VERTICAL LINE (0x2016 Po) + case u'‗': // DOUBLE LOW LINE (0x2017 Po) + case u'‘': // LEFT SINGLE QUOTATION MARK (0x2018 Pi) + case u'’': // RIGHT SINGLE QUOTATION MARK (0x2019 Pf) + case u'‚': // SINGLE LOW-9 QUOTATION MARK (0x201a Ps) + case u'‛': // SINGLE HIGH-REVERSED-9 QUOTATION MARK (0x201b Pi) + case u'“': // LEFT DOUBLE QUOTATION MARK (0x201c Pi) + case u'”': // RIGHT DOUBLE QUOTATION MARK (0x201d Pf) + case u'„': // DOUBLE LOW-9 QUOTATION MARK (0x201e Ps) + case u'‟': // DOUBLE HIGH-REVERSED-9 QUOTATION MARK (0x201f Pi) + case u'†': // DAGGER (0x2020 Po) + case u'‡': // DOUBLE DAGGER (0x2021 Po) + case u'•': // BULLET (0x2022 Po) + case u'‣': // TRIANGULAR BULLET (0x2023 Po) + case u'․': // ONE DOT LEADER (0x2024 Po) + case u'‥': // TWO DOT LEADER (0x2025 Po) + case u'…': // HORIZONTAL ELLIPSIS (0x2026 Po) + case u'‧': // HYPHENATION POINT (0x2027 Po) + case u'‰': // PER MILLE SIGN (0x2030 Po) + case u'‱': // PER TEN THOUSAND SIGN (0x2031 Po) + case u'′': // PRIME (0x2032 Po) + case u'″': // DOUBLE PRIME (0x2033 Po) + case u'‴': // TRIPLE PRIME (0x2034 Po) + case u'‵': // REVERSED PRIME (0x2035 Po) + case u'‶': // REVERSED DOUBLE PRIME (0x2036 Po) + case u'‷': // REVERSED TRIPLE PRIME (0x2037 Po) + case u'‸': // CARET (0x2038 Po) + case u'‹': // SINGLE LEFT-POINTING ANGLE QUOTATION MARK (0x2039 Pi) + case u'›': // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (0x203a Pf) + case u'※': // REFERENCE MARK (0x203b Po) + case u'‼': // DOUBLE EXCLAMATION MARK (0x203c Po) + case u'‽': // INTERROBANG (0x203d Po) + case u'‾': // OVERLINE (0x203e Po) + case u'‿': // UNDERTIE (0x203f Pc) + case u'⁀': // CHARACTER TIE (0x2040 Pc) + case u'⁁': // CARET INSERTION POINT (0x2041 Po) + case u'⁂': // ASTERISM (0x2042 Po) + case u'⁃': // HYPHEN BULLET (0x2043 Po) + case u'⁅': // LEFT SQUARE BRACKET WITH QUILL (0x2045 Ps) + case u'⁆': // RIGHT SQUARE BRACKET WITH QUILL (0x2046 Pe) + case u'⁇': // DOUBLE QUESTION MARK (0x2047 Po) + case u'⁈': // QUESTION EXCLAMATION MARK (0x2048 Po) + case u'⁉': // EXCLAMATION QUESTION MARK (0x2049 Po) + case u'⁊': // TIRONIAN SIGN ET (0x204a Po) + case u'⁋': // REVERSED PILCROW SIGN (0x204b Po) + case u'⁌': // BLACK LEFTWARDS BULLET (0x204c Po) + case u'⁍': // BLACK RIGHTWARDS BULLET (0x204d Po) + case u'⁎': // LOW ASTERISK (0x204e Po) + case u'⁏': // REVERSED SEMICOLON (0x204f Po) + case u'⁐': // CLOSE UP (0x2050 Po) + case u'⁑': // TWO ASTERISKS ALIGNED VERTICALLY (0x2051 Po) + case u'⁓': // SWUNG DASH (0x2053 Po) + case u'⁔': // INVERTED UNDERTIE (0x2054 Pc) + case u'⁕': // FLOWER PUNCTUATION MARK (0x2055 Po) + case u'⁖': // THREE DOT PUNCTUATION (0x2056 Po) + case u'⁗': // QUADRUPLE PRIME (0x2057 Po) + case u'⁘': // FOUR DOT PUNCTUATION (0x2058 Po) + case u'⁙': // FIVE DOT PUNCTUATION (0x2059 Po) + case u'⁚': // TWO DOT PUNCTUATION (0x205a Po) + case u'⁛': // FOUR DOT MARK (0x205b Po) + case u'⁜': // DOTTED CROSS (0x205c Po) + case u'⁝': // TRICOLON (0x205d Po) + case u'⁞': // VERTICAL FOUR DOTS (0x205e Po) + case u'⁽': // SUPERSCRIPT LEFT PARENTHESIS (0x207d Ps) + case u'⁾': // SUPERSCRIPT RIGHT PARENTHESIS (0x207e Pe) + case u'₍': // SUBSCRIPT LEFT PARENTHESIS (0x208d Ps) + case u'₎': // SUBSCRIPT RIGHT PARENTHESIS (0x208e Pe) + case u'⌈': // LEFT CEILING (0x2308 Ps) + case u'⌉': // RIGHT CEILING (0x2309 Pe) + case u'⌊': // LEFT FLOOR (0x230a Ps) + case u'⌋': // RIGHT FLOOR (0x230b Pe) + case u'〈': // LEFT-POINTING ANGLE BRACKET (0x2329 Ps) + case u'〉': // RIGHT-POINTING ANGLE BRACKET (0x232a Pe) + case u'❨': // MEDIUM LEFT PARENTHESIS ORNAMENT (0x2768 Ps) + case u'❩': // MEDIUM RIGHT PARENTHESIS ORNAMENT (0x2769 Pe) + case u'❪': // MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT (0x276a Ps) + case u'❫': // MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT (0x276b Pe) + case u'❬': // MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT (0x276c Ps) + case u'❭': // MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT (0x276d Pe) + case u'❮': // HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT (0x276e Ps) + case u'❯': // HEAVY RIGHT-POINTING ANGLE QUOT MARK ORNAMENT (0x276f Pe) + case u'❰': // HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT (0x2770 Ps) + case u'❱': // HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT (0x2771 Pe) + case u'❲': // LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT (0x2772 Ps) + case u'❳': // LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT (0x2773 Pe) + case u'❴': // MEDIUM LEFT CURLY BRACKET ORNAMENT (0x2774 Ps) + case u'❵': // MEDIUM RIGHT CURLY BRACKET ORNAMENT (0x2775 Pe) + case u'⟅': // LEFT S-SHAPED BAG DELIMITER (0x27c5 Ps) + case u'⟆': // RIGHT S-SHAPED BAG DELIMITER (0x27c6 Pe) + case u'⟦': // MATHEMATICAL LEFT WHITE SQUARE BRACKET (0x27e6 Ps) + case u'⟧': // MATHEMATICAL RIGHT WHITE SQUARE BRACKET (0x27e7 Pe) + case u'⟨': // MATHEMATICAL LEFT ANGLE BRACKET (0x27e8 Ps) + case u'⟩': // MATHEMATICAL RIGHT ANGLE BRACKET (0x27e9 Pe) + case u'⟪': // MATHEMATICAL LEFT DOUBLE ANGLE BRACKET (0x27ea Ps) + case u'⟫': // MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET (0x27eb Pe) + case u'⟬': // MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET (0x27ec Ps) + case u'⟭': // MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET (0x27ed Pe) + case u'⟮': // MATHEMATICAL LEFT FLATTENED PARENTHESIS (0x27ee Ps) + case u'⟯': // MATHEMATICAL RIGHT FLATTENED PARENTHESIS (0x27ef Pe) + case u'⦃': // LEFT WHITE CURLY BRACKET (0x2983 Ps) + case u'⦄': // RIGHT WHITE CURLY BRACKET (0x2984 Pe) + case u'⦅': // LEFT WHITE PARENTHESIS (0x2985 Ps) + case u'⦆': // RIGHT WHITE PARENTHESIS (0x2986 Pe) + case u'⦇': // Z NOTATION LEFT IMAGE BRACKET (0x2987 Ps) + case u'⦈': // Z NOTATION RIGHT IMAGE BRACKET (0x2988 Pe) + case u'⦉': // Z NOTATION LEFT BINDING BRACKET (0x2989 Ps) + case u'⦊': // Z NOTATION RIGHT BINDING BRACKET (0x298a Pe) + case u'⦋': // LEFT SQUARE BRACKET WITH UNDERBAR (0x298b Ps) + case u'⦌': // RIGHT SQUARE BRACKET WITH UNDERBAR (0x298c Pe) + case u'⦍': // LEFT SQUARE BRACKET WITH TICK IN TOP CORNER (0x298d Ps) + case u'⦎': // RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER (0x298e Pe) + case u'⦏': // LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER (0x298f Ps) + case u'⦐': // RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER (0x2990 Pe) + case u'⦑': // LEFT ANGLE BRACKET WITH DOT (0x2991 Ps) + case u'⦒': // RIGHT ANGLE BRACKET WITH DOT (0x2992 Pe) + case u'⦓': // LEFT ARC LESS-THAN BRACKET (0x2993 Ps) + case u'⦔': // RIGHT ARC GREATER-THAN BRACKET (0x2994 Pe) + case u'⦗': // LEFT BLACK TORTOISE SHELL BRACKET (0x2997 Ps) + case u'⦘': // RIGHT BLACK TORTOISE SHELL BRACKET (0x2998 Pe) + case u'⧘': // LEFT WIGGLY FENCE (0x29d8 Ps) + case u'⧙': // RIGHT WIGGLY FENCE (0x29d9 Pe) + case u'⧚': // LEFT DOUBLE WIGGLY FENCE (0x29da Ps) + case u'⧛': // RIGHT DOUBLE WIGGLY FENCE (0x29db Pe) + case u'⧼': // LEFT-POINTING CURVED ANGLE BRACKET (0x29fc Ps) + case u'⧽': // RIGHT-POINTING CURVED ANGLE BRACKET (0x29fd Pe) + case u'⵰': // TIFINAGH SEPARATOR MARK (0x2d70 Po) + case u'⸎': // EDITORIAL CORONIS (0x2e0e Po) + case u'⸏': // PARAGRAPHOS (0x2e0f Po) + case u'⸐': // FORKED PARAGRAPHOS (0x2e10 Po) + case u'⸑': // REVERSED FORKED PARAGRAPHOS (0x2e11 Po) + case u'⸒': // HYPODIASTOLE (0x2e12 Po) + case u'⸓': // DOTTED OBELOS (0x2e13 Po) + case u'⸔': // DOWNWARDS ANCORA (0x2e14 Po) + case u'⸕': // UPWARDS ANCORA (0x2e15 Po) + case u'⸖': // DOTTED RIGHT-POINTING ANGLE (0x2e16 Po) + case u'⸗': // DOUBLE OBLIQUE HYPHEN (0x2e17 Pd) + case u'⸙': // PALM BRANCH (0x2e19 Po) + case u'⸚': // HYPHEN WITH DIAERESIS (0x2e1a Pd) + case u'⸛': // TILDE WITH RING ABOVE (0x2e1b Po) + case u'⸞': // TILDE WITH DOT ABOVE (0x2e1e Po) + case u'⸟': // TILDE WITH DOT BELOW (0x2e1f Po) + case u'⸪': // TWO DOTS OVER ONE DOT PUNCTUATION (0x2e2a Po) + case u'⸫': // ONE DOT OVER TWO DOTS PUNCTUATION (0x2e2b Po) + case u'⸬': // SQUARED FOUR DOT PUNCTUATION (0x2e2c Po) + case u'⸭': // FIVE DOT MARK (0x2e2d Po) + case u'⸮': // REVERSED QUESTION MARK (0x2e2e Po) + case u'⸰': // RING POINT (0x2e30 Po) + case u'⸱': // WORD SEPARATOR MIDDLE DOT (0x2e31 Po) + case u'⸲': // TURNED COMMA (0x2e32 Po) + case u'⸳': // RAISED DOT (0x2e33 Po) + case u'⸴': // RAISED COMMA (0x2e34 Po) + case u'⸵': // TURNED SEMICOLON (0x2e35 Po) + case u'⸶': // DAGGER WITH LEFT GUARD (0x2e36 Po) + case u'⸷': // DAGGER WITH RIGHT GUARD (0x2e37 Po) + case u'⸸': // TURNED DAGGER (0x2e38 Po) + case u'⸹': // TOP HALF SECTION SIGN (0x2e39 Po) + case u'⸺': // TWO-EM DASH (0x2e3a Pd) + case u'⸻': // THREE-EM DASH (0x2e3b Pd) + case u'⸼': // STENOGRAPHIC FULL STOP (0x2e3c Po) + case u'⸽': // VERTICAL SIX DOTS (0x2e3d Po) + case u'⸾': // WIGGLY VERTICAL LINE (0x2e3e Po) + case u'⸿': // CAPITULUM (0x2e3f Po) + case u'⹀': // DOUBLE HYPHEN (0x2e40 Pd) + case u'⹁': // REVERSED COMMA (0x2e41 Po) + case u'⹂': // DOUBLE LOW-REVERSED-9 QUOTATION MARK (0x2e42 Ps) + case u'⹃': // DASH WITH LEFT UPTURN (0x2e43 Po) + case u'⹄': // DOUBLE SUSPENSION MARK (0x2e44 Po) + case u'⹅': // INVERTED LOW KAVYKA (0x2e45 Po) + case u'⹆': // INVERTED LOW KAVYKA WITH KAVYKA ABOVE (0x2e46 Po) + case u'⹇': // LOW KAVYKA (0x2e47 Po) + case u'⹈': // LOW KAVYKA WITH DOT (0x2e48 Po) + case u'⹉': // DOUBLE STACKED COMMA (0x2e49 Po) + case u'⹊': // DOTTED SOLIDUS (0x2e4a Po) + case u'⹋': // TRIPLE DAGGER (0x2e4b Po) + case u'⹌': // MEDIEVAL COMMA (0x2e4c Po) + case u'⹍': // PARAGRAPHUS MARK (0x2e4d Po) + case u'⹎': // PUNCTUS ELEVATUS MARK (0x2e4e Po) + case u'⹏': // CORNISH VERSE DIVIDER (0x2e4f Po) + case u'、': // IDEOGRAPHIC COMMA (0x3001 Po) + case u'。': // IDEOGRAPHIC FULL STOP (0x3002 Po) + case u'〃': // DITTO MARK (0x3003 Po) + case u'〈': // LEFT ANGLE BRACKET (0x3008 Ps) + case u'〉': // RIGHT ANGLE BRACKET (0x3009 Pe) + case u'《': // LEFT DOUBLE ANGLE BRACKET (0x300a Ps) + case u'》': // RIGHT DOUBLE ANGLE BRACKET (0x300b Pe) + case u'「': // LEFT CORNER BRACKET (0x300c Ps) + case u'」': // RIGHT CORNER BRACKET (0x300d Pe) + case u'『': // LEFT WHITE CORNER BRACKET (0x300e Ps) + case u'』': // RIGHT WHITE CORNER BRACKET (0x300f Pe) + case u'【': // LEFT BLACK LENTICULAR BRACKET (0x3010 Ps) + case u'】': // RIGHT BLACK LENTICULAR BRACKET (0x3011 Pe) + case u'〔': // LEFT TORTOISE SHELL BRACKET (0x3014 Ps) + case u'〕': // RIGHT TORTOISE SHELL BRACKET (0x3015 Pe) + case u'〖': // LEFT WHITE LENTICULAR BRACKET (0x3016 Ps) + case u'〗': // RIGHT WHITE LENTICULAR BRACKET (0x3017 Pe) + case u'〘': // LEFT WHITE TORTOISE SHELL BRACKET (0x3018 Ps) + case u'〙': // RIGHT WHITE TORTOISE SHELL BRACKET (0x3019 Pe) + case u'〚': // LEFT WHITE SQUARE BRACKET (0x301a Ps) + case u'〛': // RIGHT WHITE SQUARE BRACKET (0x301b Pe) + case u'〜': // WAVE DASH (0x301c Pd) + case u'〝': // REVERSED DOUBLE PRIME QUOTATION MARK (0x301d Ps) + case u'〞': // DOUBLE PRIME QUOTATION MARK (0x301e Pe) + case u'〟': // LOW DOUBLE PRIME QUOTATION MARK (0x301f Pe) + case u'〰': // WAVY DASH (0x3030 Pd) + case u'〽': // PART ALTERNATION MARK (0x303d Po) + case u'゠': // KATAKANA-HIRAGANA DOUBLE HYPHEN (0x30a0 Pd) + case u'・': // KATAKANA MIDDLE DOT (0x30fb Po) + case u'꓾': // LISU PUNCTUATION COMMA (0xa4fe Po) + case u'꓿': // LISU PUNCTUATION FULL STOP (0xa4ff Po) + case u'꘍': // VAI COMMA (0xa60d Po) + case u'꘎': // VAI FULL STOP (0xa60e Po) + case u'꘏': // VAI QUESTION MARK (0xa60f Po) + case u'꙾': // CYRILLIC KAVYKA (0xa67e Po) + case u'꡴': // PHAGS-PA SINGLE HEAD MARK (0xa874 Po) + case u'꡵': // PHAGS-PA DOUBLE HEAD MARK (0xa875 Po) + case u'꡶': // PHAGS-PA MARK SHAD (0xa876 Po) + case u'꡷': // PHAGS-PA MARK DOUBLE SHAD (0xa877 Po) + case u'꣎': // SAURASHTRA DANDA (0xa8ce Po) + case u'꣏': // SAURASHTRA DOUBLE DANDA (0xa8cf Po) + case u'꣸': // DEVANAGARI SIGN PUSHPIKA (0xa8f8 Po) + case u'꣹': // DEVANAGARI GAP FILLER (0xa8f9 Po) + case u'꣺': // DEVANAGARI CARET (0xa8fa Po) + case u'꣼': // DEVANAGARI SIGN SIDDHAM (0xa8fc Po) + case u'꧁': // JAVANESE LEFT RERENGGAN (0xa9c1 Po) + case u'꧂': // JAVANESE RIGHT RERENGGAN (0xa9c2 Po) + case u'꧃': // JAVANESE PADA ANDAP (0xa9c3 Po) + case u'꧄': // JAVANESE PADA MADYA (0xa9c4 Po) + case u'꧅': // JAVANESE PADA LUHUR (0xa9c5 Po) + case u'꧆': // JAVANESE PADA WINDU (0xa9c6 Po) + case u'꧇': // JAVANESE PADA PANGKAT (0xa9c7 Po) + case u'꧈': // JAVANESE PADA LINGSA (0xa9c8 Po) + case u'꧉': // JAVANESE PADA LUNGSI (0xa9c9 Po) + case u'꧊': // JAVANESE PADA ADEG (0xa9ca Po) + case u'꧋': // JAVANESE PADA ADEG ADEG (0xa9cb Po) + case u'꧌': // JAVANESE PADA PISELEH (0xa9cc Po) + case u'꧍': // JAVANESE TURNED PADA PISELEH (0xa9cd Po) + case u'꧞': // JAVANESE PADA TIRTA TUMETES (0xa9de Po) + case u'꧟': // JAVANESE PADA ISEN-ISEN (0xa9df Po) + case u'꩜': // CHAM PUNCTUATION SPIRAL (0xaa5c Po) + case u'꩝': // CHAM PUNCTUATION DANDA (0xaa5d Po) + case u'꩞': // CHAM PUNCTUATION DOUBLE DANDA (0xaa5e Po) + case u'꩟': // CHAM PUNCTUATION TRIPLE DANDA (0xaa5f Po) + case u'꫞': // TAI VIET SYMBOL HO HOI (0xaade Po) + case u'꫟': // TAI VIET SYMBOL KOI KOI (0xaadf Po) + case u'꫰': // MEETEI MAYEK CHEIKHAN (0xaaf0 Po) + case u'꫱': // MEETEI MAYEK AHANG KHUDAM (0xaaf1 Po) + case u'꯫': // MEETEI MAYEK CHEIKHEI (0xabeb Po) + case u'︐': // PRESENTATION FORM FOR VERTICAL COMMA (0xfe10 Po) + case u'︑': // PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA (0xfe11 Po) + case u'︒': // PRESENTATION FORM FOR VERTICAL IDEO FULL STOP (0xfe12 Po) + case u'︓': // PRESENTATION FORM FOR VERTICAL COLON (0xfe13 Po) + case u'︔': // PRESENTATION FORM FOR VERTICAL SEMICOLON (0xfe14 Po) + case u'︕': // PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (0xfe15 Po) + case u'︖': // PRESENTATION FORM FOR VERTICAL QUESTION MARK (0xfe16 Po) + case u'︗': // PRESENTATION ... LEFT WHITE LENTICULAR BRACKET (0xfe17 Ps) + case u'︘': // PRESENTATION ... RIGHT WHITE LENTICULAR BRAKCET (0xfe18 Pe) + case u'︙': // PRESENTATION ... VERTICAL HORIZONTAL ELLIPSIS (0xfe19 Po) + case u'︰': // PRESENTATION FORM FOR VERTICAL TWO DOT LEADER (0xfe30 Po) + case u'︱': // PRESENTATION FORM FOR VERTICAL EM DASH (0xfe31 Pd) + case u'︲': // PRESENTATION FORM FOR VERTICAL EN DASH (0xfe32 Pd) + case u'︳': // PRESENTATION FORM FOR VERTICAL LOW LINE (0xfe33 Pc) + case u'︴': // PRESENTATION FORM FOR VERTICAL WAVY LOW LINE (0xfe34 Pc) + case u'︵': // PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS (0xfe35 Ps) + case u'︶': // PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS (0xfe36 Pe) + case u'︷': // PRESENTATION ... VERTICAL LEFT CURLY BRACKET (0xfe37 Ps) + case u'︸': // PRESENTATION ... VERTICAL RIGHT CURLY BRACKET (0xfe38 Pe) + case u'︹': // PRESENTATION ... LEFT TORTOISE SHELL BRACKET (0xfe39 Ps) + case u'︺': // PRESENTATION ... RIGHT TORTOISE SHELL BRACKET (0xfe3a Pe) + case u'︻': // PRESENTATION ... LEFT BLACK LENTICULAR BRACKET (0xfe3b Ps) + case u'︼': // PRESENTATION ... RIGHT BLACK LENTICULAR BRACKET (0xfe3c Pe) + case u'︽': // PRESENTATION ... LEFT DOUBLE ANGLE BRACKET (0xfe3d Ps) + case u'︾': // PRESENTATION ... RIGHT DOUBLE ANGLE BRACKET (0xfe3e Pe) + case u'︿': // PRESENTATION ... LEFT ANGLE BRACKET (0xfe3f Ps) + case u'﹀': // PRESENTATION ... RIGHT ANGLE BRACKET (0xfe40 Pe) + case u'﹁': // PRESENTATION ... LEFT CORNER BRACKET (0xfe41 Ps) + case u'﹂': // PRESENTATION ... RIGHT CORNER BRACKET (0xfe42 Pe) + case u'﹃': // PRESENTATION ... LEFT WHITE CORNER BRACKET (0xfe43 Ps) + case u'﹄': // PRESENTATION ... RIGHT WHITE CORNER BRACKET Pe) + case u'﹅': // SESAME DOT (0xfe45 Po) + case u'﹆': // WHITE SESAME DOT (0xfe46 Po) + case u'﹇': // PRESENTATION ... VERTICAL LEFT SQUARE BRACKET (0xfe47 Ps) + case u'﹈': // PRESENTATION ... VERTICAL RIGHT SQUARE BRACKET (0xfe48 Pe) + case u'﹉': // DASHED OVERLINE (0xfe49 Po) + case u'﹊': // CENTRELINE OVERLINE (0xfe4a Po) + case u'﹋': // WAVY OVERLINE (0xfe4b Po) + case u'﹌': // DOUBLE WAVY OVERLINE (0xfe4c Po) + case u'﹍': // DASHED LOW LINE (0xfe4d Pc) + case u'﹎': // CENTRELINE LOW LINE (0xfe4e Pc) + case u'﹏': // WAVY LOW LINE (0xfe4f Pc) + case u'﹐': // SMALL COMMA (0xfe50 Po) + case u'﹑': // SMALL IDEOGRAPHIC COMMA (0xfe51 Po) + case u'﹒': // SMALL FULL STOP (0xfe52 Po) + case u'﹔': // SMALL SEMICOLON (0xfe54 Po) + case u'﹕': // SMALL COLON (0xfe55 Po) + case u'﹖': // SMALL QUESTION MARK (0xfe56 Po) + case u'﹗': // SMALL EXCLAMATION MARK (0xfe57 Po) + case u'﹘': // SMALL EM DASH (0xfe58 Pd) + case u'﹙': // SMALL LEFT PARENTHESIS (0xfe59 Ps) + case u'﹚': // SMALL RIGHT PARENTHESIS (0xfe5a Pe) + case u'﹛': // SMALL LEFT CURLY BRACKET (0xfe5b Ps) + case u'﹜': // SMALL RIGHT CURLY BRACKET (0xfe5c Pe) + case u'﹝': // SMALL LEFT TORTOISE SHELL BRACKET (0xfe5d Ps) + case u'﹞': // SMALL RIGHT TORTOISE SHELL BRACKET (0xfe5e Pe) + case u'﹟': // SMALL NUMBER SIGN (0xfe5f Po) + case u'﹠': // SMALL AMPERSAND (0xfe60 Po) + case u'﹡': // SMALL ASTERISK (0xfe61 Po) + case u'﹣': // SMALL HYPHEN-MINUS (0xfe63 Pd) + case u'﹨': // SMALL REVERSE SOLIDUS (0xfe68 Po) + case u'﹪': // SMALL PERCENT SIGN (0xfe6a Po) + case u'﹫': // SMALL COMMERCIAL AT (0xfe6b Po) + case u'!': // FULLWIDTH EXCLAMATION MARK (0xff01 Po) + case u'"': // FULLWIDTH QUOTATION MARK (0xff02 Po) + case u'#': // FULLWIDTH NUMBER SIGN (0xff03 Po) + case u'%': // FULLWIDTH PERCENT SIGN (0xff05 Po) + case u'&': // FULLWIDTH AMPERSAND (0xff06 Po) + case u''': // FULLWIDTH APOSTROPHE (0xff07 Po) + case u'(': // FULLWIDTH LEFT PARENTHESIS (0xff08 Ps) + case u')': // FULLWIDTH RIGHT PARENTHESIS (0xff09 Pe) + case u'*': // FULLWIDTH ASTERISK (0xff0a Po) + case u',': // FULLWIDTH COMMA (0xff0c Po) + case u'-': // FULLWIDTH HYPHEN-MINUS (0xff0d Pd) + case u'.': // FULLWIDTH FULL STOP (0xff0e Po) + case u'/': // FULLWIDTH SOLIDUS (0xff0f Po) + case u':': // FULLWIDTH COLON (0xff1a Po) + case u';': // FULLWIDTH SEMICOLON (0xff1b Po) + case u'?': // FULLWIDTH QUESTION MARK (0xff1f Po) + case u'@': // FULLWIDTH COMMERCIAL AT (0xff20 Po) + case u'[': // FULLWIDTH LEFT SQUARE BRACKET (0xff3b Ps) + case u'\': // FULLWIDTH REVERSE SOLIDUS (0xff3c Po) + case u']': // FULLWIDTH RIGHT SQUARE BRACKET (0xff3d Pe) + case u'_': // FULLWIDTH LOW LINE (0xff3f Pc) + case u'{': // FULLWIDTH LEFT CURLY BRACKET (0xff5b Ps) + case u'}': // FULLWIDTH RIGHT CURLY BRACKET (0xff5d Pe) + case u'⦅': // FULLWIDTH LEFT WHITE PARENTHESIS (0xff5f Ps) + case u'⦆': // FULLWIDTH RIGHT WHITE PARENTHESIS (0xff60 Pe) + case u'。': // HALFWIDTH IDEOGRAPHIC FULL STOP (0xff61 Po) + case u'「': // HALFWIDTH LEFT CORNER BRACKET (0xff62 Ps) + case u'」': // HALFWIDTH RIGHT CORNER BRACKET (0xff63 Pe) + case u'、': // HALFWIDTH IDEOGRAPHIC COMMA (0xff64 Po) + case u'・': // HALFWIDTH KATAKANA MIDDLE DOT (0xff65 Po) + return 1; + default: + return 0; + } } diff --git a/libc/str/iswspace.c b/libc/str/iswspace.c index 218f0483..b1b08cd7 100644 --- a/libc/str/iswspace.c +++ b/libc/str/iswspace.c @@ -18,6 +18,39 @@ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/str/str.h" -int iswspace(wint_t wc) { - return isspace(wc); +/** + * Returns nonzero if c is space character. + * + * We define this as invisible characters which move the cursor. That + * means `\t\r\n\f\v` and unicodes whose category begins with `Z` but + * not ogham since it's not invisible and non-breaking spaces neither + * since they're not invisible to emacs users. + */ +int iswspace(wint_t c) { + switch (c) { + case '\t': // CHARACTER TABULATION + case '\n': // LINE FEED + case '\f': // FORM FEED + case '\v': // LINE TABULATION + case '\r': // CARRIAGE RETURN + case ' ': // SPACE + case 0x2000: // EN QUAD (Zs) + case 0x2001: // EM QUAD (Zs) + case 0x2002: // EN SPACE (Zs) + case 0x2003: // EM SPACE (Zs) + case 0x2004: // THREE-PER-EM SPACE (Zs) + case 0x2005: // FOUR-PER-EM SPACE (Zs) + case 0x2006: // SIX-PER-EM SPACE (Zs) + case 0x2007: // FIGURE SPACE (Zs) + case 0x2008: // PUNCTUATION SPACE (Zs) + case 0x2009: // THIN SPACE (Zs) + case 0x200a: // HAIR SPACE (Zs) + case 0x2028: // LINE SEPARATOR (Zl) + case 0x2029: // PARAGRAPH SEPARATOR (Zp) + case 0x205f: // MEDIUM MATHEMATICAL SPACE (Zs) + case 0x3000: // IDEOGRAPHIC SPACE (Zs) + return 1; + default: + return 0; + } } diff --git a/libc/str/iswupper.c b/libc/str/iswupper.c index e40e63d7..21ff22af 100644 --- a/libc/str/iswupper.c +++ b/libc/str/iswupper.c @@ -18,6 +18,1776 @@ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/str/str.h" -int iswupper(wint_t wc) { - return isupper(wc); +/** + * Returns nonzero if c is uppercase letter. + */ +int iswupper(wint_t c) { + if (isascii(c)) return isupper(c); + switch (c) { + case u'À': // LATIN CAPITAL A W/ GRAVE 00c0 + case u'Á': // LATIN CAPITAL A W/ ACUTE 00c1 + case u'Â': // LATIN CAPITAL A W/ CIRCUMFLEX 00c2 + case u'Ã': // LATIN CAPITAL A W/ TILDE 00c3 + case u'Ä': // LATIN CAPITAL A W/ DIAERESIS 00c4 + case u'Å': // LATIN CAPITAL A W/ RING ABOVE 00c5 + case u'Æ': // LATIN CAPITAL AE 00c6 + case u'Ç': // LATIN CAPITAL C W/ CEDILLA 00c7 + case u'È': // LATIN CAPITAL E W/ GRAVE 00c8 + case u'É': // LATIN CAPITAL E W/ ACUTE 00c9 + case u'Ê': // LATIN CAPITAL E W/ CIRCUMFLEX 00ca + case u'Ë': // LATIN CAPITAL E W/ DIAERESIS 00cb + case u'Ì': // LATIN CAPITAL I W/ GRAVE 00cc + case u'Í': // LATIN CAPITAL I W/ ACUTE 00cd + case u'Î': // LATIN CAPITAL I W/ CIRCUMFLEX 00ce + case u'Ï': // LATIN CAPITAL I W/ DIAERESIS 00cf + case u'Ð': // LATIN CAPITAL ETH 00d0 + case u'Ñ': // LATIN CAPITAL N W/ TILDE 00d1 + case u'Ò': // LATIN CAPITAL O W/ GRAVE 00d2 + case u'Ó': // LATIN CAPITAL O W/ ACUTE 00d3 + case u'Ô': // LATIN CAPITAL O W/ CIRCUMFLEX 00d4 + case u'Õ': // LATIN CAPITAL O W/ TILDE 00d5 + case u'Ö': // LATIN CAPITAL O W/ DIAERESIS 00d6 + case u'Ø': // LATIN CAPITAL O W/ STROKE 00d8 + case u'Ù': // LATIN CAPITAL U W/ GRAVE 00d9 + case u'Ú': // LATIN CAPITAL U W/ ACUTE 00da + case u'Û': // LATIN CAPITAL U W/ CIRCUMFLEX 00db + case u'Ü': // LATIN CAPITAL U W/ DIAERESIS 00dc + case u'Ý': // LATIN CAPITAL Y W/ ACUTE 00dd + case u'Þ': // LATIN CAPITAL THORN 00de + case u'Ā': // LATIN CAPITAL A W/ MACRON 0100 + case u'Ă': // LATIN CAPITAL A W/ BREVE 0102 + case u'Ą': // LATIN CAPITAL A W/ OGONEK 0104 + case u'Ć': // LATIN CAPITAL C W/ ACUTE 0106 + case u'Ĉ': // LATIN CAPITAL C W/ CIRCUMFLEX 0108 + case u'Ċ': // LATIN CAPITAL C W/ DOT ABOVE 010a + case u'Č': // LATIN CAPITAL C W/ CARON 010c + case u'Ď': // LATIN CAPITAL D W/ CARON 010e + case u'Đ': // LATIN CAPITAL D W/ STROKE 0110 + case u'Ē': // LATIN CAPITAL E W/ MACRON 0112 + case u'Ĕ': // LATIN CAPITAL E W/ BREVE 0114 + case u'Ė': // LATIN CAPITAL E W/ DOT ABOVE 0116 + case u'Ę': // LATIN CAPITAL E W/ OGONEK 0118 + case u'Ě': // LATIN CAPITAL E W/ CARON 011a + case u'Ĝ': // LATIN CAPITAL G W/ CIRCUMFLEX 011c + case u'Ğ': // LATIN CAPITAL G W/ BREVE 011e + case u'Ġ': // LATIN CAPITAL G W/ DOT ABOVE 0120 + case u'Ģ': // LATIN CAPITAL G W/ CEDILLA 0122 + case u'Ĥ': // LATIN CAPITAL H W/ CIRCUMFLEX 0124 + case u'Ħ': // LATIN CAPITAL H W/ STROKE 0126 + case u'Ĩ': // LATIN CAPITAL I W/ TILDE 0128 + case u'Ī': // LATIN CAPITAL I W/ MACRON 012a + case u'Ĭ': // LATIN CAPITAL I W/ BREVE 012c + case u'Į': // LATIN CAPITAL I W/ OGONEK 012e + case u'İ': // LATIN CAPITAL I W/ DOT ABOVE 0130 + case u'IJ': // LATIN CAPITAL LIGATURE IJ 0132 + case u'Ĵ': // LATIN CAPITAL J W/ CIRCUMFLEX 0134 + case u'Ķ': // LATIN CAPITAL K W/ CEDILLA 0136 + case u'Ĺ': // LATIN CAPITAL L W/ ACUTE 0139 + case u'Ļ': // LATIN CAPITAL L W/ CEDILLA 013b + case u'Ľ': // LATIN CAPITAL L W/ CARON 013d + case u'Ŀ': // LATIN CAPITAL L W/ MIDDLE DOT 013f + case u'Ł': // LATIN CAPITAL L W/ STROKE 0141 + case u'Ń': // LATIN CAPITAL N W/ ACUTE 0143 + case u'Ņ': // LATIN CAPITAL N W/ CEDILLA 0145 + case u'Ň': // LATIN CAPITAL N W/ CARON 0147 + case u'Ŋ': // LATIN CAPITAL ENG 014a + case u'Ō': // LATIN CAPITAL O W/ MACRON 014c + case u'Ŏ': // LATIN CAPITAL O W/ BREVE 014e + case u'Ő': // LATIN CAPITAL O W/ DOUBLE ACUTE 0150 + case u'Œ': // LATIN CAPITAL LIGATURE OE 0152 + case u'Ŕ': // LATIN CAPITAL R W/ ACUTE 0154 + case u'Ŗ': // LATIN CAPITAL R W/ CEDILLA 0156 + case u'Ř': // LATIN CAPITAL R W/ CARON 0158 + case u'Ś': // LATIN CAPITAL S W/ ACUTE 015a + case u'Ŝ': // LATIN CAPITAL S W/ CIRCUMFLEX 015c + case u'Ş': // LATIN CAPITAL S W/ CEDILLA 015e + case u'Š': // LATIN CAPITAL S W/ CARON 0160 + case u'Ţ': // LATIN CAPITAL T W/ CEDILLA 0162 + case u'Ť': // LATIN CAPITAL T W/ CARON 0164 + case u'Ŧ': // LATIN CAPITAL T W/ STROKE 0166 + case u'Ũ': // LATIN CAPITAL U W/ TILDE 0168 + case u'Ū': // LATIN CAPITAL U W/ MACRON 016a + case u'Ŭ': // LATIN CAPITAL U W/ BREVE 016c + case u'Ů': // LATIN CAPITAL U W/ RING ABOVE 016e + case u'Ű': // LATIN CAPITAL U W/ DOUBLE ACUTE 0170 + case u'Ų': // LATIN CAPITAL U W/ OGONEK 0172 + case u'Ŵ': // LATIN CAPITAL W W/ CIRCUMFLEX 0174 + case u'Ŷ': // LATIN CAPITAL Y W/ CIRCUMFLEX 0176 + case u'Ÿ': // LATIN CAPITAL Y W/ DIAERESIS 0178 + case u'Ź': // LATIN CAPITAL Z W/ ACUTE 0179 + case u'Ż': // LATIN CAPITAL Z W/ DOT ABOVE 017b + case u'Ž': // LATIN CAPITAL Z W/ CARON 017d + case u'Ɓ': // LATIN CAPITAL B W/ HOOK 0181 + case u'Ƃ': // LATIN CAPITAL B W/ TOPBAR 0182 + case u'Ƅ': // LATIN CAPITAL TONE SIX 0184 + case u'Ɔ': // LATIN CAPITAL OPEN O 0186 + case u'Ƈ': // LATIN CAPITAL C W/ HOOK 0187 + case u'Ɖ': // LATIN CAPITAL AFRICAN D 0189 + case u'Ɗ': // LATIN CAPITAL D W/ HOOK 018a + case u'Ƌ': // LATIN CAPITAL D W/ TOPBAR 018b + case u'Ǝ': // LATIN CAPITAL REVERSED E 018e + case u'Ə': // LATIN CAPITAL SCHWA 018f + case u'Ɛ': // LATIN CAPITAL OPEN E 0190 + case u'Ƒ': // LATIN CAPITAL F W/ HOOK 0191 + case u'Ɠ': // LATIN CAPITAL G W/ HOOK 0193 + case u'Ɣ': // LATIN CAPITAL GAMMA 0194 + case u'Ɩ': // LATIN CAPITAL IOTA 0196 + case u'Ɨ': // LATIN CAPITAL I W/ STROKE 0197 + case u'Ƙ': // LATIN CAPITAL K W/ HOOK 0198 + case u'Ɯ': // LATIN CAPITAL TURNED M 019c + case u'Ɲ': // LATIN CAPITAL N W/ LEFT HOOK 019d + case u'Ɵ': // LATIN CAPITAL O W/ MIDDLE TILDE 019f + case u'Ơ': // LATIN CAPITAL O W/ HORN 01a0 + case u'Ƣ': // LATIN CAPITAL OI 01a2 + case u'Ƥ': // LATIN CAPITAL P W/ HOOK 01a4 + case u'Ʀ': // LATIN LETTER YR 01a6 + case u'Ƨ': // LATIN CAPITAL TONE TWO 01a7 + case u'Ʃ': // LATIN CAPITAL ESH 01a9 + case u'Ƭ': // LATIN CAPITAL T W/ HOOK 01ac + case u'Ʈ': // LATIN CAPITAL T W/ RETROFLEX HOOK 01ae + case u'Ư': // LATIN CAPITAL U W/ HORN 01af + case u'Ʊ': // LATIN CAPITAL UPSILON 01b1 + case u'Ʋ': // LATIN CAPITAL V W/ HOOK 01b2 + case u'Ƴ': // LATIN CAPITAL Y W/ HOOK 01b3 + case u'Ƶ': // LATIN CAPITAL Z W/ STROKE 01b5 + case u'Ʒ': // LATIN CAPITAL EZH 01b7 + case u'Ƹ': // LATIN CAPITAL EZH REVERSED 01b8 + case u'Ƽ': // LATIN CAPITAL TONE FIVE 01bc + case u'DŽ': // LATIN CAPITAL DZ W/ CARON 01c4 + case u'LJ': // LATIN CAPITAL LJ 01c7 + case u'NJ': // LATIN CAPITAL NJ 01ca + case u'Ǎ': // LATIN CAPITAL A W/ CARON 01cd + case u'Ǐ': // LATIN CAPITAL I W/ CARON 01cf + case u'Ǒ': // LATIN CAPITAL O W/ CARON 01d1 + case u'Ǔ': // LATIN CAPITAL U W/ CARON 01d3 + case u'Ǖ': // LATIN CAPITAL U W/ DIAERESIS AND MACRON 01d5 + case u'Ǘ': // LATIN CAPITAL U W/ DIAERESIS AND ACUTE 01d7 + case u'Ǚ': // LATIN CAPITAL U W/ DIAERESIS AND CARON 01d9 + case u'Ǜ': // LATIN CAPITAL U W/ DIAERESIS AND GRAVE 01db + case u'Ǟ': // LATIN CAPITAL A W/ DIAERESIS AND MACRON 01de + case u'Ǡ': // LATIN CAPITAL A W/ DOT ABOVE AND MACRON 01e0 + case u'Ǣ': // LATIN CAPITAL AE W/ MACRON 01e2 + case u'Ǥ': // LATIN CAPITAL G W/ STROKE 01e4 + case u'Ǧ': // LATIN CAPITAL G W/ CARON 01e6 + case u'Ǩ': // LATIN CAPITAL K W/ CARON 01e8 + case u'Ǫ': // LATIN CAPITAL O W/ OGONEK 01ea + case u'Ǭ': // LATIN CAPITAL O W/ OGONEK AND MACRON 01ec + case u'Ǯ': // LATIN CAPITAL EZH W/ CARON 01ee + case u'DZ': // LATIN CAPITAL DZ 01f1 + case u'Ǵ': // LATIN CAPITAL G W/ ACUTE 01f4 + case u'Ƕ': // LATIN CAPITAL HWAIR 01f6 + case u'Ƿ': // LATIN CAPITAL WYNN 01f7 + case u'Ǹ': // LATIN CAPITAL N W/ GRAVE 01f8 + case u'Ǻ': // LATIN CAPITAL A W/ RING ABOVE AND ACUTE 01fa + case u'Ǽ': // LATIN CAPITAL AE W/ ACUTE 01fc + case u'Ǿ': // LATIN CAPITAL O W/ STROKE AND ACUTE 01fe + case u'Ȁ': // LATIN CAPITAL A W/ DOUBLE GRAVE 0200 + case u'Ȃ': // LATIN CAPITAL A W/ INVERTED BREVE 0202 + case u'Ȅ': // LATIN CAPITAL E W/ DOUBLE GRAVE 0204 + case u'Ȇ': // LATIN CAPITAL E W/ INVERTED BREVE 0206 + case u'Ȉ': // LATIN CAPITAL I W/ DOUBLE GRAVE 0208 + case u'Ȋ': // LATIN CAPITAL I W/ INVERTED BREVE 020a + case u'Ȍ': // LATIN CAPITAL O W/ DOUBLE GRAVE 020c + case u'Ȏ': // LATIN CAPITAL O W/ INVERTED BREVE 020e + case u'Ȑ': // LATIN CAPITAL R W/ DOUBLE GRAVE 0210 + case u'Ȓ': // LATIN CAPITAL R W/ INVERTED BREVE 0212 + case u'Ȕ': // LATIN CAPITAL U W/ DOUBLE GRAVE 0214 + case u'Ȗ': // LATIN CAPITAL U W/ INVERTED BREVE 0216 + case u'Ș': // LATIN CAPITAL S W/ COMMA BELOW 0218 + case u'Ț': // LATIN CAPITAL T W/ COMMA BELOW 021a + case u'Ȝ': // LATIN CAPITAL YOGH 021c + case u'Ȟ': // LATIN CAPITAL H W/ CARON 021e + case u'Ƞ': // LATIN CAPITAL N W/ LONG RIGHT LEG 0220 + case u'Ȣ': // LATIN CAPITAL OU 0222 + case u'Ȥ': // LATIN CAPITAL Z W/ HOOK 0224 + case u'Ȧ': // LATIN CAPITAL A W/ DOT ABOVE 0226 + case u'Ȩ': // LATIN CAPITAL E W/ CEDILLA 0228 + case u'Ȫ': // LATIN CAPITAL O W/ DIAERESIS AND MACRON 022a + case u'Ȭ': // LATIN CAPITAL O W/ TILDE AND MACRON 022c + case u'Ȯ': // LATIN CAPITAL O W/ DOT ABOVE 022e + case u'Ȱ': // LATIN CAPITAL O W/ DOT ABOVE AND MACRON 0230 + case u'Ȳ': // LATIN CAPITAL Y W/ MACRON 0232 + case u'Ⱥ': // LATIN CAPITAL A W/ STROKE 023a + case u'Ȼ': // LATIN CAPITAL C W/ STROKE 023b + case u'Ƚ': // LATIN CAPITAL L W/ BAR 023d + case u'Ⱦ': // LATIN CAPITAL T W/ DIAGONAL STROKE 023e + case u'Ɂ': // LATIN CAPITAL GLOTTAL STOP 0241 + case u'Ƀ': // LATIN CAPITAL B W/ STROKE 0243 + case u'Ʉ': // LATIN CAPITAL U BAR 0244 + case u'Ʌ': // LATIN CAPITAL TURNED V 0245 + case u'Ɇ': // LATIN CAPITAL E W/ STROKE 0246 + case u'Ɉ': // LATIN CAPITAL J W/ STROKE 0248 + case u'Ɋ': // LATIN CAPITAL SMALL Q W/ HOOK TAIL 024a + case u'Ɍ': // LATIN CAPITAL R W/ STROKE 024c + case u'Ɏ': // LATIN CAPITAL Y W/ STROKE 024e + case u'Ͱ': // GREEK CAPITAL HETA 0370 + case u'Ͳ': // GREEK CAPITAL ARCHAIC SAMPI 0372 + case u'Ͷ': // GREEK CAPITAL PAMPHYLIAN DIGAMMA 0376 + case u'Ϳ': // GREEK CAPITAL YOT 037f + case u'Ά': // GREEK CAPITAL ALPHA W/ TONOS 0386 + case u'Έ': // GREEK CAPITAL EPSILON W/ TONOS 0388 + case u'Ή': // GREEK CAPITAL ETA W/ TONOS 0389 + case u'Ί': // GREEK CAPITAL IOTA W/ TONOS 038a + case u'Ό': // GREEK CAPITAL OMICRON W/ TONOS 038c + case u'Ύ': // GREEK CAPITAL UPSILON W/ TONOS 038e + case u'Ώ': // GREEK CAPITAL OMEGA W/ TONOS 038f + case u'Α': // GREEK CAPITAL ALPHA 0391 + case u'Β': // GREEK CAPITAL BETA 0392 + case u'Γ': // GREEK CAPITAL GAMMA 0393 + case u'Δ': // GREEK CAPITAL DELTA 0394 + case u'Ε': // GREEK CAPITAL EPSILON 0395 + case u'Ζ': // GREEK CAPITAL ZETA 0396 + case u'Η': // GREEK CAPITAL ETA 0397 + case u'Θ': // GREEK CAPITAL THETA 0398 + case u'Ι': // GREEK CAPITAL IOTA 0399 + case u'Κ': // GREEK CAPITAL KAPPA 039a + case u'Λ': // GREEK CAPITAL LAMDA 039b + case u'Μ': // GREEK CAPITAL MU 039c + case u'Ν': // GREEK CAPITAL NU 039d + case u'Ξ': // GREEK CAPITAL XI 039e + case u'Ο': // GREEK CAPITAL OMICRON 039f + case u'Π': // GREEK CAPITAL PI 03a0 + case u'Ρ': // GREEK CAPITAL RHO 03a1 + case u'Σ': // GREEK CAPITAL SIGMA 03a3 + case u'Τ': // GREEK CAPITAL TAU 03a4 + case u'Υ': // GREEK CAPITAL UPSILON 03a5 + case u'Φ': // GREEK CAPITAL PHI 03a6 + case u'Χ': // GREEK CAPITAL CHI 03a7 + case u'Ψ': // GREEK CAPITAL PSI 03a8 + case u'Ω': // GREEK CAPITAL OMEGA 03a9 + case u'Ϊ': // GREEK CAPITAL IOTA W/ DIALYTIKA 03aa + case u'Ϋ': // GREEK CAPITAL UPSILON W/ DIALYTIKA 03ab + case u'Ϗ': // GREEK CAPITAL KAI SYMBOL 03cf + case u'ϒ': // GREEK UPSILON W/ HOOK SYMBOL 03d2 + case u'ϓ': // GREEK UPSILON W/ ACUTE AND HOOK SYMBOL 03d3 + case u'ϔ': // GREEK UPSILON W/ DIAERESIS AND HOOK SYMBOL 03d4 + case u'Ϙ': // GREEK LETTER ARCHAIC KOPPA 03d8 + case u'Ϛ': // GREEK LETTER STIGMA 03da + case u'Ϝ': // GREEK LETTER DIGAMMA 03dc + case u'Ϟ': // GREEK LETTER KOPPA 03de + case u'Ϡ': // GREEK LETTER SAMPI 03e0 + case u'Ϣ': // COPTIC CAPITAL SHEI 03e2 + case u'Ϥ': // COPTIC CAPITAL FEI 03e4 + case u'Ϧ': // COPTIC CAPITAL KHEI 03e6 + case u'Ϩ': // COPTIC CAPITAL HORI 03e8 + case u'Ϫ': // COPTIC CAPITAL GANGIA 03ea + case u'Ϭ': // COPTIC CAPITAL SHIMA 03ec + case u'Ϯ': // COPTIC CAPITAL DEI 03ee + case u'ϴ': // GREEK CAPITAL THETA SYMBOL 03f4 + case u'Ϸ': // GREEK CAPITAL SHO 03f7 + case u'Ϲ': // GREEK CAPITAL LUNATE SIGMA SYMBOL 03f9 + case u'Ϻ': // GREEK CAPITAL SAN 03fa + case u'Ͻ': // GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL 03fd + case u'Ͼ': // GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL 03fe + case u'Ͽ': // GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL 03ff + case u'Ѐ': // CYRILLIC CAPITAL IE W/ GRAVE 0400 + case u'Ё': // CYRILLIC CAPITAL IO 0401 + case u'Ђ': // CYRILLIC CAPITAL DJE 0402 + case u'Ѓ': // CYRILLIC CAPITAL GJE 0403 + case u'Є': // CYRILLIC CAPITAL UKRAINIAN IE 0404 + case u'Ѕ': // CYRILLIC CAPITAL DZE 0405 + case u'І': // CYRILLIC CAPITAL BYELORUSSIAN-UKRAINIAN I 0406 + case u'Ї': // CYRILLIC CAPITAL YI 0407 + case u'Ј': // CYRILLIC CAPITAL JE 0408 + case u'Љ': // CYRILLIC CAPITAL LJE 0409 + case u'Њ': // CYRILLIC CAPITAL NJE 040a + case u'Ћ': // CYRILLIC CAPITAL TSHE 040b + case u'Ќ': // CYRILLIC CAPITAL KJE 040c + case u'Ѝ': // CYRILLIC CAPITAL I W/ GRAVE 040d + case u'Ў': // CYRILLIC CAPITAL SHORT U 040e + case u'Џ': // CYRILLIC CAPITAL DZHE 040f + case u'А': // CYRILLIC CAPITAL A 0410 + case u'Б': // CYRILLIC CAPITAL BE 0411 + case u'В': // CYRILLIC CAPITAL VE 0412 + case u'Г': // CYRILLIC CAPITAL GHE 0413 + case u'Д': // CYRILLIC CAPITAL DE 0414 + case u'Е': // CYRILLIC CAPITAL IE 0415 + case u'Ж': // CYRILLIC CAPITAL ZHE 0416 + case u'З': // CYRILLIC CAPITAL ZE 0417 + case u'И': // CYRILLIC CAPITAL I 0418 + case u'Й': // CYRILLIC CAPITAL SHORT I 0419 + case u'К': // CYRILLIC CAPITAL KA 041a + case u'Л': // CYRILLIC CAPITAL EL 041b + case u'М': // CYRILLIC CAPITAL EM 041c + case u'Н': // CYRILLIC CAPITAL EN 041d + case u'О': // CYRILLIC CAPITAL O 041e + case u'П': // CYRILLIC CAPITAL PE 041f + case u'Р': // CYRILLIC CAPITAL ER 0420 + case u'С': // CYRILLIC CAPITAL ES 0421 + case u'Т': // CYRILLIC CAPITAL TE 0422 + case u'У': // CYRILLIC CAPITAL U 0423 + case u'Ф': // CYRILLIC CAPITAL EF 0424 + case u'Х': // CYRILLIC CAPITAL HA 0425 + case u'Ц': // CYRILLIC CAPITAL TSE 0426 + case u'Ч': // CYRILLIC CAPITAL CHE 0427 + case u'Ш': // CYRILLIC CAPITAL SHA 0428 + case u'Щ': // CYRILLIC CAPITAL SHCHA 0429 + case u'Ъ': // CYRILLIC CAPITAL HARD SIGN 042a + case u'Ы': // CYRILLIC CAPITAL YERU 042b + case u'Ь': // CYRILLIC CAPITAL SOFT SIGN 042c + case u'Э': // CYRILLIC CAPITAL E 042d + case u'Ю': // CYRILLIC CAPITAL YU 042e + case u'Я': // CYRILLIC CAPITAL YA 042f + case u'Ѡ': // CYRILLIC CAPITAL OMEGA 0460 + case u'Ѣ': // CYRILLIC CAPITAL YAT 0462 + case u'Ѥ': // CYRILLIC CAPITAL IOTIFIED E 0464 + case u'Ѧ': // CYRILLIC CAPITAL LITTLE YUS 0466 + case u'Ѩ': // CYRILLIC CAPITAL IOTIFIED LITTLE YUS 0468 + case u'Ѫ': // CYRILLIC CAPITAL BIG YUS 046a + case u'Ѭ': // CYRILLIC CAPITAL IOTIFIED BIG YUS 046c + case u'Ѯ': // CYRILLIC CAPITAL KSI 046e + case u'Ѱ': // CYRILLIC CAPITAL PSI 0470 + case u'Ѳ': // CYRILLIC CAPITAL FITA 0472 + case u'Ѵ': // CYRILLIC CAPITAL IZHITSA 0474 + case u'Ѷ': // CYRILLIC CAPITAL IZHITSA W/ DOUBLE GRAVE ACCENT 0476 + case u'Ѹ': // CYRILLIC CAPITAL UK 0478 + case u'Ѻ': // CYRILLIC CAPITAL ROUND OMEGA 047a + case u'Ѽ': // CYRILLIC CAPITAL OMEGA W/ TITLO 047c + case u'Ѿ': // CYRILLIC CAPITAL OT 047e + case u'Ҁ': // CYRILLIC CAPITAL KOPPA 0480 + case u'Ҋ': // CYRILLIC CAPITAL SHORT I W/ TAIL 048a + case u'Ҍ': // CYRILLIC CAPITAL SEMISOFT SIGN 048c + case u'Ҏ': // CYRILLIC CAPITAL ER W/ TICK 048e + case u'Ґ': // CYRILLIC CAPITAL GHE W/ UPTURN 0490 + case u'Ғ': // CYRILLIC CAPITAL GHE W/ STROKE 0492 + case u'Ҕ': // CYRILLIC CAPITAL GHE W/ MIDDLE HOOK 0494 + case u'Җ': // CYRILLIC CAPITAL ZHE W/ DESCENDER 0496 + case u'Ҙ': // CYRILLIC CAPITAL ZE W/ DESCENDER 0498 + case u'Қ': // CYRILLIC CAPITAL KA W/ DESCENDER 049a + case u'Ҝ': // CYRILLIC CAPITAL KA W/ VERTICAL STROKE 049c + case u'Ҟ': // CYRILLIC CAPITAL KA W/ STROKE 049e + case u'Ҡ': // CYRILLIC CAPITAL BASHKIR KA 04a0 + case u'Ң': // CYRILLIC CAPITAL EN W/ DESCENDER 04a2 + case u'Ҥ': // CYRILLIC CAPITAL LIGATURE EN GHE 04a4 + case u'Ҧ': // CYRILLIC CAPITAL PE W/ MIDDLE HOOK 04a6 + case u'Ҩ': // CYRILLIC CAPITAL ABKHASIAN HA 04a8 + case u'Ҫ': // CYRILLIC CAPITAL ES W/ DESCENDER 04aa + case u'Ҭ': // CYRILLIC CAPITAL TE W/ DESCENDER 04ac + case u'Ү': // CYRILLIC CAPITAL STRAIGHT U 04ae + case u'Ұ': // CYRILLIC CAPITAL STRAIGHT U W/ STROKE 04b0 + case u'Ҳ': // CYRILLIC CAPITAL HA W/ DESCENDER 04b2 + case u'Ҵ': // CYRILLIC CAPITAL LIGATURE TE TSE 04b4 + case u'Ҷ': // CYRILLIC CAPITAL CHE W/ DESCENDER 04b6 + case u'Ҹ': // CYRILLIC CAPITAL CHE W/ VERTICAL STROKE 04b8 + case u'Һ': // CYRILLIC CAPITAL SHHA 04ba + case u'Ҽ': // CYRILLIC CAPITAL ABKHASIAN CHE 04bc + case u'Ҿ': // CYRILLIC CAPITAL ABKHASIAN CHE W/ DESCENDER 04be + case u'Ӏ': // CYRILLIC LETTER PALOCHKA 04c0 + case u'Ӂ': // CYRILLIC CAPITAL ZHE W/ BREVE 04c1 + case u'Ӄ': // CYRILLIC CAPITAL KA W/ HOOK 04c3 + case u'Ӆ': // CYRILLIC CAPITAL EL W/ TAIL 04c5 + case u'Ӈ': // CYRILLIC CAPITAL EN W/ HOOK 04c7 + case u'Ӊ': // CYRILLIC CAPITAL EN W/ TAIL 04c9 + case u'Ӌ': // CYRILLIC CAPITAL KHAKASSIAN CHE 04cb + case u'Ӎ': // CYRILLIC CAPITAL EM W/ TAIL 04cd + case u'Ӑ': // CYRILLIC CAPITAL A W/ BREVE 04d0 + case u'Ӓ': // CYRILLIC CAPITAL A W/ DIAERESIS 04d2 + case u'Ӕ': // CYRILLIC CAPITAL LIGATURE A IE 04d4 + case u'Ӗ': // CYRILLIC CAPITAL IE W/ BREVE 04d6 + case u'Ә': // CYRILLIC CAPITAL SCHWA 04d8 + case u'Ӛ': // CYRILLIC CAPITAL SCHWA W/ DIAERESIS 04da + case u'Ӝ': // CYRILLIC CAPITAL ZHE W/ DIAERESIS 04dc + case u'Ӟ': // CYRILLIC CAPITAL ZE W/ DIAERESIS 04de + case u'Ӡ': // CYRILLIC CAPITAL ABKHASIAN DZE 04e0 + case u'Ӣ': // CYRILLIC CAPITAL I W/ MACRON 04e2 + case u'Ӥ': // CYRILLIC CAPITAL I W/ DIAERESIS 04e4 + case u'Ӧ': // CYRILLIC CAPITAL O W/ DIAERESIS 04e6 + case u'Ө': // CYRILLIC CAPITAL BARRED O 04e8 + case u'Ӫ': // CYRILLIC CAPITAL BARRED O W/ DIAERESIS 04ea + case u'Ӭ': // CYRILLIC CAPITAL E W/ DIAERESIS 04ec + case u'Ӯ': // CYRILLIC CAPITAL U W/ MACRON 04ee + case u'Ӱ': // CYRILLIC CAPITAL U W/ DIAERESIS 04f0 + case u'Ӳ': // CYRILLIC CAPITAL U W/ DOUBLE ACUTE 04f2 + case u'Ӵ': // CYRILLIC CAPITAL CHE W/ DIAERESIS 04f4 + case u'Ӷ': // CYRILLIC CAPITAL GHE W/ DESCENDER 04f6 + case u'Ӹ': // CYRILLIC CAPITAL YERU W/ DIAERESIS 04f8 + case u'Ӻ': // CYRILLIC CAPITAL GHE W/ STROKE AND HOOK 04fa + case u'Ӽ': // CYRILLIC CAPITAL HA W/ HOOK 04fc + case u'Ӿ': // CYRILLIC CAPITAL HA W/ STROKE 04fe + case u'Ԁ': // CYRILLIC CAPITAL KOMI DE 0500 + case u'Ԃ': // CYRILLIC CAPITAL KOMI DJE 0502 + case u'Ԅ': // CYRILLIC CAPITAL KOMI ZJE 0504 + case u'Ԇ': // CYRILLIC CAPITAL KOMI DZJE 0506 + case u'Ԉ': // CYRILLIC CAPITAL KOMI LJE 0508 + case u'Ԋ': // CYRILLIC CAPITAL KOMI NJE 050a + case u'Ԍ': // CYRILLIC CAPITAL KOMI SJE 050c + case u'Ԏ': // CYRILLIC CAPITAL KOMI TJE 050e + case u'Ԑ': // CYRILLIC CAPITAL REVERSED ZE 0510 + case u'Ԓ': // CYRILLIC CAPITAL EL W/ HOOK 0512 + case u'Ԕ': // CYRILLIC CAPITAL LHA 0514 + case u'Ԗ': // CYRILLIC CAPITAL RHA 0516 + case u'Ԙ': // CYRILLIC CAPITAL YAE 0518 + case u'Ԛ': // CYRILLIC CAPITAL QA 051a + case u'Ԝ': // CYRILLIC CAPITAL WE 051c + case u'Ԟ': // CYRILLIC CAPITAL ALEUT KA 051e + case u'Ԡ': // CYRILLIC CAPITAL EL W/ MIDDLE HOOK 0520 + case u'Ԣ': // CYRILLIC CAPITAL EN W/ MIDDLE HOOK 0522 + case u'Ԥ': // CYRILLIC CAPITAL PE W/ DESCENDER 0524 + case u'Ԧ': // CYRILLIC CAPITAL SHHA W/ DESCENDER 0526 + case u'Ԩ': // CYRILLIC CAPITAL EN W/ LEFT HOOK 0528 + case u'Ԫ': // CYRILLIC CAPITAL DZZHE 052a + case u'Ԭ': // CYRILLIC CAPITAL DCHE 052c + case u'Ԯ': // CYRILLIC CAPITAL EL W/ DESCENDER 052e + case u'Ա': // ARMENIAN CAPITAL AYB 0531 + case u'Բ': // ARMENIAN CAPITAL BEN 0532 + case u'Գ': // ARMENIAN CAPITAL GIM 0533 + case u'Դ': // ARMENIAN CAPITAL DA 0534 + case u'Ե': // ARMENIAN CAPITAL ECH 0535 + case u'Զ': // ARMENIAN CAPITAL ZA 0536 + case u'Է': // ARMENIAN CAPITAL EH 0537 + case u'Ը': // ARMENIAN CAPITAL ET 0538 + case u'Թ': // ARMENIAN CAPITAL TO 0539 + case u'Ժ': // ARMENIAN CAPITAL ZHE 053a + case u'Ի': // ARMENIAN CAPITAL INI 053b + case u'Լ': // ARMENIAN CAPITAL LIWN 053c + case u'Խ': // ARMENIAN CAPITAL XEH 053d + case u'Ծ': // ARMENIAN CAPITAL CA 053e + case u'Կ': // ARMENIAN CAPITAL KEN 053f + case u'Հ': // ARMENIAN CAPITAL HO 0540 + case u'Ձ': // ARMENIAN CAPITAL JA 0541 + case u'Ղ': // ARMENIAN CAPITAL GHAD 0542 + case u'Ճ': // ARMENIAN CAPITAL CHEH 0543 + case u'Մ': // ARMENIAN CAPITAL MEN 0544 + case u'Յ': // ARMENIAN CAPITAL YI 0545 + case u'Ն': // ARMENIAN CAPITAL NOW 0546 + case u'Շ': // ARMENIAN CAPITAL SHA 0547 + case u'Ո': // ARMENIAN CAPITAL VO 0548 + case u'Չ': // ARMENIAN CAPITAL CHA 0549 + case u'Պ': // ARMENIAN CAPITAL PEH 054a + case u'Ջ': // ARMENIAN CAPITAL JHEH 054b + case u'Ռ': // ARMENIAN CAPITAL RA 054c + case u'Ս': // ARMENIAN CAPITAL SEH 054d + case u'Վ': // ARMENIAN CAPITAL VEW 054e + case u'Տ': // ARMENIAN CAPITAL TIWN 054f + case u'Ր': // ARMENIAN CAPITAL REH 0550 + case u'Ց': // ARMENIAN CAPITAL CO 0551 + case u'Ւ': // ARMENIAN CAPITAL YIWN 0552 + case u'Փ': // ARMENIAN CAPITAL PIWR 0553 + case u'Ք': // ARMENIAN CAPITAL KEH 0554 + case u'Օ': // ARMENIAN CAPITAL OH 0555 + case u'Ֆ': // ARMENIAN CAPITAL FEH 0556 + case u'Ⴀ': // GEORGIAN CAPITAL AN 10a0 + case u'Ⴁ': // GEORGIAN CAPITAL BAN 10a1 + case u'Ⴂ': // GEORGIAN CAPITAL GAN 10a2 + case u'Ⴃ': // GEORGIAN CAPITAL DON 10a3 + case u'Ⴄ': // GEORGIAN CAPITAL EN 10a4 + case u'Ⴅ': // GEORGIAN CAPITAL VIN 10a5 + case u'Ⴆ': // GEORGIAN CAPITAL ZEN 10a6 + case u'Ⴇ': // GEORGIAN CAPITAL TAN 10a7 + case u'Ⴈ': // GEORGIAN CAPITAL IN 10a8 + case u'Ⴉ': // GEORGIAN CAPITAL KAN 10a9 + case u'Ⴊ': // GEORGIAN CAPITAL LAS 10aa + case u'Ⴋ': // GEORGIAN CAPITAL MAN 10ab + case u'Ⴌ': // GEORGIAN CAPITAL NAR 10ac + case u'Ⴍ': // GEORGIAN CAPITAL ON 10ad + case u'Ⴎ': // GEORGIAN CAPITAL PAR 10ae + case u'Ⴏ': // GEORGIAN CAPITAL ZHAR 10af + case u'Ⴐ': // GEORGIAN CAPITAL RAE 10b0 + case u'Ⴑ': // GEORGIAN CAPITAL SAN 10b1 + case u'Ⴒ': // GEORGIAN CAPITAL TAR 10b2 + case u'Ⴓ': // GEORGIAN CAPITAL UN 10b3 + case u'Ⴔ': // GEORGIAN CAPITAL PHAR 10b4 + case u'Ⴕ': // GEORGIAN CAPITAL KHAR 10b5 + case u'Ⴖ': // GEORGIAN CAPITAL GHAN 10b6 + case u'Ⴗ': // GEORGIAN CAPITAL QAR 10b7 + case u'Ⴘ': // GEORGIAN CAPITAL SHIN 10b8 + case u'Ⴙ': // GEORGIAN CAPITAL CHIN 10b9 + case u'Ⴚ': // GEORGIAN CAPITAL CAN 10ba + case u'Ⴛ': // GEORGIAN CAPITAL JIL 10bb + case u'Ⴜ': // GEORGIAN CAPITAL CIL 10bc + case u'Ⴝ': // GEORGIAN CAPITAL CHAR 10bd + case u'Ⴞ': // GEORGIAN CAPITAL XAN 10be + case u'Ⴟ': // GEORGIAN CAPITAL JHAN 10bf + case u'Ⴠ': // GEORGIAN CAPITAL HAE 10c0 + case u'Ⴡ': // GEORGIAN CAPITAL HE 10c1 + case u'Ⴢ': // GEORGIAN CAPITAL HIE 10c2 + case u'Ⴣ': // GEORGIAN CAPITAL WE 10c3 + case u'Ⴤ': // GEORGIAN CAPITAL HAR 10c4 + case u'Ⴥ': // GEORGIAN CAPITAL HOE 10c5 + case u'Ⴧ': // GEORGIAN CAPITAL YN 10c7 + case u'Ⴭ': // GEORGIAN CAPITAL AEN 10cd + case u'Ꭰ': // CHEROKEE LETTER A 13a0 + case u'Ꭱ': // CHEROKEE LETTER E 13a1 + case u'Ꭲ': // CHEROKEE LETTER I 13a2 + case u'Ꭳ': // CHEROKEE LETTER O 13a3 + case u'Ꭴ': // CHEROKEE LETTER U 13a4 + case u'Ꭵ': // CHEROKEE LETTER V 13a5 + case u'Ꭶ': // CHEROKEE LETTER GA 13a6 + case u'Ꭷ': // CHEROKEE LETTER KA 13a7 + case u'Ꭸ': // CHEROKEE LETTER GE 13a8 + case u'Ꭹ': // CHEROKEE LETTER GI 13a9 + case u'Ꭺ': // CHEROKEE LETTER GO 13aa + case u'Ꭻ': // CHEROKEE LETTER GU 13ab + case u'Ꭼ': // CHEROKEE LETTER GV 13ac + case u'Ꭽ': // CHEROKEE LETTER HA 13ad + case u'Ꭾ': // CHEROKEE LETTER HE 13ae + case u'Ꭿ': // CHEROKEE LETTER HI 13af + case u'Ꮀ': // CHEROKEE LETTER HO 13b0 + case u'Ꮁ': // CHEROKEE LETTER HU 13b1 + case u'Ꮂ': // CHEROKEE LETTER HV 13b2 + case u'Ꮃ': // CHEROKEE LETTER LA 13b3 + case u'Ꮄ': // CHEROKEE LETTER LE 13b4 + case u'Ꮅ': // CHEROKEE LETTER LI 13b5 + case u'Ꮆ': // CHEROKEE LETTER LO 13b6 + case u'Ꮇ': // CHEROKEE LETTER LU 13b7 + case u'Ꮈ': // CHEROKEE LETTER LV 13b8 + case u'Ꮉ': // CHEROKEE LETTER MA 13b9 + case u'Ꮊ': // CHEROKEE LETTER ME 13ba + case u'Ꮋ': // CHEROKEE LETTER MI 13bb + case u'Ꮌ': // CHEROKEE LETTER MO 13bc + case u'Ꮍ': // CHEROKEE LETTER MU 13bd + case u'Ꮎ': // CHEROKEE LETTER NA 13be + case u'Ꮏ': // CHEROKEE LETTER HNA 13bf + case u'Ꮐ': // CHEROKEE LETTER NAH 13c0 + case u'Ꮑ': // CHEROKEE LETTER NE 13c1 + case u'Ꮒ': // CHEROKEE LETTER NI 13c2 + case u'Ꮓ': // CHEROKEE LETTER NO 13c3 + case u'Ꮔ': // CHEROKEE LETTER NU 13c4 + case u'Ꮕ': // CHEROKEE LETTER NV 13c5 + case u'Ꮖ': // CHEROKEE LETTER QUA 13c6 + case u'Ꮗ': // CHEROKEE LETTER QUE 13c7 + case u'Ꮘ': // CHEROKEE LETTER QUI 13c8 + case u'Ꮙ': // CHEROKEE LETTER QUO 13c9 + case u'Ꮚ': // CHEROKEE LETTER QUU 13ca + case u'Ꮛ': // CHEROKEE LETTER QUV 13cb + case u'Ꮜ': // CHEROKEE LETTER SA 13cc + case u'Ꮝ': // CHEROKEE LETTER S 13cd + case u'Ꮞ': // CHEROKEE LETTER SE 13ce + case u'Ꮟ': // CHEROKEE LETTER SI 13cf + case u'Ꮠ': // CHEROKEE LETTER SO 13d0 + case u'Ꮡ': // CHEROKEE LETTER SU 13d1 + case u'Ꮢ': // CHEROKEE LETTER SV 13d2 + case u'Ꮣ': // CHEROKEE LETTER DA 13d3 + case u'Ꮤ': // CHEROKEE LETTER TA 13d4 + case u'Ꮥ': // CHEROKEE LETTER DE 13d5 + case u'Ꮦ': // CHEROKEE LETTER TE 13d6 + case u'Ꮧ': // CHEROKEE LETTER DI 13d7 + case u'Ꮨ': // CHEROKEE LETTER TI 13d8 + case u'Ꮩ': // CHEROKEE LETTER DO 13d9 + case u'Ꮪ': // CHEROKEE LETTER DU 13da + case u'Ꮫ': // CHEROKEE LETTER DV 13db + case u'Ꮬ': // CHEROKEE LETTER DLA 13dc + case u'Ꮭ': // CHEROKEE LETTER TLA 13dd + case u'Ꮮ': // CHEROKEE LETTER TLE 13de + case u'Ꮯ': // CHEROKEE LETTER TLI 13df + case u'Ꮰ': // CHEROKEE LETTER TLO 13e0 + case u'Ꮱ': // CHEROKEE LETTER TLU 13e1 + case u'Ꮲ': // CHEROKEE LETTER TLV 13e2 + case u'Ꮳ': // CHEROKEE LETTER TSA 13e3 + case u'Ꮴ': // CHEROKEE LETTER TSE 13e4 + case u'Ꮵ': // CHEROKEE LETTER TSI 13e5 + case u'Ꮶ': // CHEROKEE LETTER TSO 13e6 + case u'Ꮷ': // CHEROKEE LETTER TSU 13e7 + case u'Ꮸ': // CHEROKEE LETTER TSV 13e8 + case u'Ꮹ': // CHEROKEE LETTER WA 13e9 + case u'Ꮺ': // CHEROKEE LETTER WE 13ea + case u'Ꮻ': // CHEROKEE LETTER WI 13eb + case u'Ꮼ': // CHEROKEE LETTER WO 13ec + case u'Ꮽ': // CHEROKEE LETTER WU 13ed + case u'Ꮾ': // CHEROKEE LETTER WV 13ee + case u'Ꮿ': // CHEROKEE LETTER YA 13ef + case u'Ᏸ': // CHEROKEE LETTER YE 13f0 + case u'Ᏹ': // CHEROKEE LETTER YI 13f1 + case u'Ᏺ': // CHEROKEE LETTER YO 13f2 + case u'Ᏻ': // CHEROKEE LETTER YU 13f3 + case u'Ᏼ': // CHEROKEE LETTER YV 13f4 + case u'Ᏽ': // CHEROKEE LETTER MV 13f5 + case u'Ა': // GEORGIAN MTAVRULI CAPITAL AN 1c90 + case u'Ბ': // GEORGIAN MTAVRULI CAPITAL BAN 1c91 + case u'Გ': // GEORGIAN MTAVRULI CAPITAL GAN 1c92 + case u'Დ': // GEORGIAN MTAVRULI CAPITAL DON 1c93 + case u'Ე': // GEORGIAN MTAVRULI CAPITAL EN 1c94 + case u'Ვ': // GEORGIAN MTAVRULI CAPITAL VIN 1c95 + case u'Ზ': // GEORGIAN MTAVRULI CAPITAL ZEN 1c96 + case u'Თ': // GEORGIAN MTAVRULI CAPITAL TAN 1c97 + case u'Ი': // GEORGIAN MTAVRULI CAPITAL IN 1c98 + case u'Კ': // GEORGIAN MTAVRULI CAPITAL KAN 1c99 + case u'Ლ': // GEORGIAN MTAVRULI CAPITAL LAS 1c9a + case u'Მ': // GEORGIAN MTAVRULI CAPITAL MAN 1c9b + case u'Ნ': // GEORGIAN MTAVRULI CAPITAL NAR 1c9c + case u'Ო': // GEORGIAN MTAVRULI CAPITAL ON 1c9d + case u'Პ': // GEORGIAN MTAVRULI CAPITAL PAR 1c9e + case u'Ჟ': // GEORGIAN MTAVRULI CAPITAL ZHAR 1c9f + case u'Რ': // GEORGIAN MTAVRULI CAPITAL RAE 1ca0 + case u'Ს': // GEORGIAN MTAVRULI CAPITAL SAN 1ca1 + case u'Ტ': // GEORGIAN MTAVRULI CAPITAL TAR 1ca2 + case u'Უ': // GEORGIAN MTAVRULI CAPITAL UN 1ca3 + case u'Ფ': // GEORGIAN MTAVRULI CAPITAL PHAR 1ca4 + case u'Ქ': // GEORGIAN MTAVRULI CAPITAL KHAR 1ca5 + case u'Ღ': // GEORGIAN MTAVRULI CAPITAL GHAN 1ca6 + case u'Ყ': // GEORGIAN MTAVRULI CAPITAL QAR 1ca7 + case u'Შ': // GEORGIAN MTAVRULI CAPITAL SHIN 1ca8 + case u'Ჩ': // GEORGIAN MTAVRULI CAPITAL CHIN 1ca9 + case u'Ც': // GEORGIAN MTAVRULI CAPITAL CAN 1caa + case u'Ძ': // GEORGIAN MTAVRULI CAPITAL JIL 1cab + case u'Წ': // GEORGIAN MTAVRULI CAPITAL CIL 1cac + case u'Ჭ': // GEORGIAN MTAVRULI CAPITAL CHAR 1cad + case u'Ხ': // GEORGIAN MTAVRULI CAPITAL XAN 1cae + case u'Ჯ': // GEORGIAN MTAVRULI CAPITAL JHAN 1caf + case u'Ჰ': // GEORGIAN MTAVRULI CAPITAL HAE 1cb0 + case u'Ჱ': // GEORGIAN MTAVRULI CAPITAL HE 1cb1 + case u'Ჲ': // GEORGIAN MTAVRULI CAPITAL HIE 1cb2 + case u'Ჳ': // GEORGIAN MTAVRULI CAPITAL WE 1cb3 + case u'Ჴ': // GEORGIAN MTAVRULI CAPITAL HAR 1cb4 + case u'Ჵ': // GEORGIAN MTAVRULI CAPITAL HOE 1cb5 + case u'Ჶ': // GEORGIAN MTAVRULI CAPITAL FI 1cb6 + case u'Ჷ': // GEORGIAN MTAVRULI CAPITAL YN 1cb7 + case u'Ჸ': // GEORGIAN MTAVRULI CAPITAL ELIFI 1cb8 + case u'Ჹ': // GEORGIAN MTAVRULI CAPITAL TURNED GAN 1cb9 + case u'Ჺ': // GEORGIAN MTAVRULI CAPITAL AIN 1cba + case u'Ჽ': // GEORGIAN MTAVRULI CAPITAL AEN 1cbd + case u'Ჾ': // GEORGIAN MTAVRULI CAPITAL HARD SIGN 1cbe + case u'Ჿ': // GEORGIAN MTAVRULI CAPITAL LABIAL SIGN 1cbf + case u'Ḁ': // LATIN CAPITAL A W/ RING BELOW 1e00 + case u'Ḃ': // LATIN CAPITAL B W/ DOT ABOVE 1e02 + case u'Ḅ': // LATIN CAPITAL B W/ DOT BELOW 1e04 + case u'Ḇ': // LATIN CAPITAL B W/ LINE BELOW 1e06 + case u'Ḉ': // LATIN CAPITAL C W/ CEDILLA AND ACUTE 1e08 + case u'Ḋ': // LATIN CAPITAL D W/ DOT ABOVE 1e0a + case u'Ḍ': // LATIN CAPITAL D W/ DOT BELOW 1e0c + case u'Ḏ': // LATIN CAPITAL D W/ LINE BELOW 1e0e + case u'Ḑ': // LATIN CAPITAL D W/ CEDILLA 1e10 + case u'Ḓ': // LATIN CAPITAL D W/ CIRCUMFLEX BELOW 1e12 + case u'Ḕ': // LATIN CAPITAL E W/ MACRON AND GRAVE 1e14 + case u'Ḗ': // LATIN CAPITAL E W/ MACRON AND ACUTE 1e16 + case u'Ḙ': // LATIN CAPITAL E W/ CIRCUMFLEX BELOW 1e18 + case u'Ḛ': // LATIN CAPITAL E W/ TILDE BELOW 1e1a + case u'Ḝ': // LATIN CAPITAL E W/ CEDILLA AND BREVE 1e1c + case u'Ḟ': // LATIN CAPITAL F W/ DOT ABOVE 1e1e + case u'Ḡ': // LATIN CAPITAL G W/ MACRON 1e20 + case u'Ḣ': // LATIN CAPITAL H W/ DOT ABOVE 1e22 + case u'Ḥ': // LATIN CAPITAL H W/ DOT BELOW 1e24 + case u'Ḧ': // LATIN CAPITAL H W/ DIAERESIS 1e26 + case u'Ḩ': // LATIN CAPITAL H W/ CEDILLA 1e28 + case u'Ḫ': // LATIN CAPITAL H W/ BREVE BELOW 1e2a + case u'Ḭ': // LATIN CAPITAL I W/ TILDE BELOW 1e2c + case u'Ḯ': // LATIN CAPITAL I W/ DIAERESIS AND ACUTE 1e2e + case u'Ḱ': // LATIN CAPITAL K W/ ACUTE 1e30 + case u'Ḳ': // LATIN CAPITAL K W/ DOT BELOW 1e32 + case u'Ḵ': // LATIN CAPITAL K W/ LINE BELOW 1e34 + case u'Ḷ': // LATIN CAPITAL L W/ DOT BELOW 1e36 + case u'Ḹ': // LATIN CAPITAL L W/ DOT BELOW AND MACRON 1e38 + case u'Ḻ': // LATIN CAPITAL L W/ LINE BELOW 1e3a + case u'Ḽ': // LATIN CAPITAL L W/ CIRCUMFLEX BELOW 1e3c + case u'Ḿ': // LATIN CAPITAL M W/ ACUTE 1e3e + case u'Ṁ': // LATIN CAPITAL M W/ DOT ABOVE 1e40 + case u'Ṃ': // LATIN CAPITAL M W/ DOT BELOW 1e42 + case u'Ṅ': // LATIN CAPITAL N W/ DOT ABOVE 1e44 + case u'Ṇ': // LATIN CAPITAL N W/ DOT BELOW 1e46 + case u'Ṉ': // LATIN CAPITAL N W/ LINE BELOW 1e48 + case u'Ṋ': // LATIN CAPITAL N W/ CIRCUMFLEX BELOW 1e4a + case u'Ṍ': // LATIN CAPITAL O W/ TILDE AND ACUTE 1e4c + case u'Ṏ': // LATIN CAPITAL O W/ TILDE AND DIAERESIS 1e4e + case u'Ṑ': // LATIN CAPITAL O W/ MACRON AND GRAVE 1e50 + case u'Ṓ': // LATIN CAPITAL O W/ MACRON AND ACUTE 1e52 + case u'Ṕ': // LATIN CAPITAL P W/ ACUTE 1e54 + case u'Ṗ': // LATIN CAPITAL P W/ DOT ABOVE 1e56 + case u'Ṙ': // LATIN CAPITAL R W/ DOT ABOVE 1e58 + case u'Ṛ': // LATIN CAPITAL R W/ DOT BELOW 1e5a + case u'Ṝ': // LATIN CAPITAL R W/ DOT BELOW AND MACRON 1e5c + case u'Ṟ': // LATIN CAPITAL R W/ LINE BELOW 1e5e + case u'Ṡ': // LATIN CAPITAL S W/ DOT ABOVE 1e60 + case u'Ṣ': // LATIN CAPITAL S W/ DOT BELOW 1e62 + case u'Ṥ': // LATIN CAPITAL S W/ ACUTE AND DOT ABOVE 1e64 + case u'Ṧ': // LATIN CAPITAL S W/ CARON AND DOT ABOVE 1e66 + case u'Ṩ': // LATIN CAPITAL S W/ DOT BELOW AND DOT ABOVE 1e68 + case u'Ṫ': // LATIN CAPITAL T W/ DOT ABOVE 1e6a + case u'Ṭ': // LATIN CAPITAL T W/ DOT BELOW 1e6c + case u'Ṯ': // LATIN CAPITAL T W/ LINE BELOW 1e6e + case u'Ṱ': // LATIN CAPITAL T W/ CIRCUMFLEX BELOW 1e70 + case u'Ṳ': // LATIN CAPITAL U W/ DIAERESIS BELOW 1e72 + case u'Ṵ': // LATIN CAPITAL U W/ TILDE BELOW 1e74 + case u'Ṷ': // LATIN CAPITAL U W/ CIRCUMFLEX BELOW 1e76 + case u'Ṹ': // LATIN CAPITAL U W/ TILDE AND ACUTE 1e78 + case u'Ṻ': // LATIN CAPITAL U W/ MACRON AND DIAERESIS 1e7a + case u'Ṽ': // LATIN CAPITAL V W/ TILDE 1e7c + case u'Ṿ': // LATIN CAPITAL V W/ DOT BELOW 1e7e + case u'Ẁ': // LATIN CAPITAL W W/ GRAVE 1e80 + case u'Ẃ': // LATIN CAPITAL W W/ ACUTE 1e82 + case u'Ẅ': // LATIN CAPITAL W W/ DIAERESIS 1e84 + case u'Ẇ': // LATIN CAPITAL W W/ DOT ABOVE 1e86 + case u'Ẉ': // LATIN CAPITAL W W/ DOT BELOW 1e88 + case u'Ẋ': // LATIN CAPITAL X W/ DOT ABOVE 1e8a + case u'Ẍ': // LATIN CAPITAL X W/ DIAERESIS 1e8c + case u'Ẏ': // LATIN CAPITAL Y W/ DOT ABOVE 1e8e + case u'Ẑ': // LATIN CAPITAL Z W/ CIRCUMFLEX 1e90 + case u'Ẓ': // LATIN CAPITAL Z W/ DOT BELOW 1e92 + case u'Ẕ': // LATIN CAPITAL Z W/ LINE BELOW 1e94 + case u'ẞ': // LATIN CAPITAL SHARP S 1e9e + case u'Ạ': // LATIN CAPITAL A W/ DOT BELOW 1ea0 + case u'Ả': // LATIN CAPITAL A W/ HOOK ABOVE 1ea2 + case u'Ấ': // LATIN CAPITAL A W/ CIRCUMFLEX AND ACUTE 1ea4 + case u'Ầ': // LATIN CAPITAL A W/ CIRCUMFLEX AND GRAVE 1ea6 + case u'Ẩ': // LATIN CAPITAL A W/ CIRCUMFLEX AND HOOK ABOVE 1ea8 + case u'Ẫ': // LATIN CAPITAL A W/ CIRCUMFLEX AND TILDE 1eaa + case u'Ậ': // LATIN CAPITAL A W/ CIRCUMFLEX AND DOT BELOW 1eac + case u'Ắ': // LATIN CAPITAL A W/ BREVE AND ACUTE 1eae + case u'Ằ': // LATIN CAPITAL A W/ BREVE AND GRAVE 1eb0 + case u'Ẳ': // LATIN CAPITAL A W/ BREVE AND HOOK ABOVE 1eb2 + case u'Ẵ': // LATIN CAPITAL A W/ BREVE AND TILDE 1eb4 + case u'Ặ': // LATIN CAPITAL A W/ BREVE AND DOT BELOW 1eb6 + case u'Ẹ': // LATIN CAPITAL E W/ DOT BELOW 1eb8 + case u'Ẻ': // LATIN CAPITAL E W/ HOOK ABOVE 1eba + case u'Ẽ': // LATIN CAPITAL E W/ TILDE 1ebc + case u'Ế': // LATIN CAPITAL E W/ CIRCUMFLEX AND ACUTE 1ebe + case u'Ề': // LATIN CAPITAL E W/ CIRCUMFLEX AND GRAVE 1ec0 + case u'Ể': // LATIN CAPITAL E W/ CIRCUMFLEX AND HOOK ABOVE 1ec2 + case u'Ễ': // LATIN CAPITAL E W/ CIRCUMFLEX AND TILDE 1ec4 + case u'Ệ': // LATIN CAPITAL E W/ CIRCUMFLEX AND DOT BELOW 1ec6 + case u'Ỉ': // LATIN CAPITAL I W/ HOOK ABOVE 1ec8 + case u'Ị': // LATIN CAPITAL I W/ DOT BELOW 1eca + case u'Ọ': // LATIN CAPITAL O W/ DOT BELOW 1ecc + case u'Ỏ': // LATIN CAPITAL O W/ HOOK ABOVE 1ece + case u'Ố': // LATIN CAPITAL O W/ CIRCUMFLEX AND ACUTE 1ed0 + case u'Ồ': // LATIN CAPITAL O W/ CIRCUMFLEX AND GRAVE 1ed2 + case u'Ổ': // LATIN CAPITAL O W/ CIRCUMFLEX AND HOOK ABOVE 1ed4 + case u'Ỗ': // LATIN CAPITAL O W/ CIRCUMFLEX AND TILDE 1ed6 + case u'Ộ': // LATIN CAPITAL O W/ CIRCUMFLEX AND DOT BELOW 1ed8 + case u'Ớ': // LATIN CAPITAL O W/ HORN AND ACUTE 1eda + case u'Ờ': // LATIN CAPITAL O W/ HORN AND GRAVE 1edc + case u'Ở': // LATIN CAPITAL O W/ HORN AND HOOK ABOVE 1ede + case u'Ỡ': // LATIN CAPITAL O W/ HORN AND TILDE 1ee0 + case u'Ợ': // LATIN CAPITAL O W/ HORN AND DOT BELOW 1ee2 + case u'Ụ': // LATIN CAPITAL U W/ DOT BELOW 1ee4 + case u'Ủ': // LATIN CAPITAL U W/ HOOK ABOVE 1ee6 + case u'Ứ': // LATIN CAPITAL U W/ HORN AND ACUTE 1ee8 + case u'Ừ': // LATIN CAPITAL U W/ HORN AND GRAVE 1eea + case u'Ử': // LATIN CAPITAL U W/ HORN AND HOOK ABOVE 1eec + case u'Ữ': // LATIN CAPITAL U W/ HORN AND TILDE 1eee + case u'Ự': // LATIN CAPITAL U W/ HORN AND DOT BELOW 1ef0 + case u'Ỳ': // LATIN CAPITAL Y W/ GRAVE 1ef2 + case u'Ỵ': // LATIN CAPITAL Y W/ DOT BELOW 1ef4 + case u'Ỷ': // LATIN CAPITAL Y W/ HOOK ABOVE 1ef6 + case u'Ỹ': // LATIN CAPITAL Y W/ TILDE 1ef8 + case u'Ỻ': // LATIN CAPITAL MIDDLE-WELSH LL 1efa + case u'Ỽ': // LATIN CAPITAL MIDDLE-WELSH V 1efc + case u'Ỿ': // LATIN CAPITAL Y W/ LOOP 1efe + case u'Ἀ': // GREEK CAPITAL ALPHA W/ PSILI 1f08 + case u'Ἁ': // GREEK CAPITAL ALPHA W/ DASIA 1f09 + case u'Ἂ': // GREEK CAPITAL ALPHA W/ PSILI AND VARIA 1f0a + case u'Ἃ': // GREEK CAPITAL ALPHA W/ DASIA AND VARIA 1f0b + case u'Ἄ': // GREEK CAPITAL ALPHA W/ PSILI AND OXIA 1f0c + case u'Ἅ': // GREEK CAPITAL ALPHA W/ DASIA AND OXIA 1f0d + case u'Ἆ': // GREEK CAPITAL ALPHA W/ PSILI AND PERISPOMENI 1f0e + case u'Ἇ': // GREEK CAPITAL ALPHA W/ DASIA AND PERISPOMENI 1f0f + case u'Ἐ': // GREEK CAPITAL EPSILON W/ PSILI 1f18 + case u'Ἑ': // GREEK CAPITAL EPSILON W/ DASIA 1f19 + case u'Ἒ': // GREEK CAPITAL EPSILON W/ PSILI AND VARIA 1f1a + case u'Ἓ': // GREEK CAPITAL EPSILON W/ DASIA AND VARIA 1f1b + case u'Ἔ': // GREEK CAPITAL EPSILON W/ PSILI AND OXIA 1f1c + case u'Ἕ': // GREEK CAPITAL EPSILON W/ DASIA AND OXIA 1f1d + case u'Ἠ': // GREEK CAPITAL ETA W/ PSILI 1f28 + case u'Ἡ': // GREEK CAPITAL ETA W/ DASIA 1f29 + case u'Ἢ': // GREEK CAPITAL ETA W/ PSILI AND VARIA 1f2a + case u'Ἣ': // GREEK CAPITAL ETA W/ DASIA AND VARIA 1f2b + case u'Ἤ': // GREEK CAPITAL ETA W/ PSILI AND OXIA 1f2c + case u'Ἥ': // GREEK CAPITAL ETA W/ DASIA AND OXIA 1f2d + case u'Ἦ': // GREEK CAPITAL ETA W/ PSILI AND PERISPOMENI 1f2e + case u'Ἧ': // GREEK CAPITAL ETA W/ DASIA AND PERISPOMENI 1f2f + case u'Ἰ': // GREEK CAPITAL IOTA W/ PSILI 1f38 + case u'Ἱ': // GREEK CAPITAL IOTA W/ DASIA 1f39 + case u'Ἲ': // GREEK CAPITAL IOTA W/ PSILI AND VARIA 1f3a + case u'Ἳ': // GREEK CAPITAL IOTA W/ DASIA AND VARIA 1f3b + case u'Ἴ': // GREEK CAPITAL IOTA W/ PSILI AND OXIA 1f3c + case u'Ἵ': // GREEK CAPITAL IOTA W/ DASIA AND OXIA 1f3d + case u'Ἶ': // GREEK CAPITAL IOTA W/ PSILI AND PERISPOMENI 1f3e + case u'Ἷ': // GREEK CAPITAL IOTA W/ DASIA AND PERISPOMENI 1f3f + case u'Ὀ': // GREEK CAPITAL OMICRON W/ PSILI 1f48 + case u'Ὁ': // GREEK CAPITAL OMICRON W/ DASIA 1f49 + case u'Ὂ': // GREEK CAPITAL OMICRON W/ PSILI AND VARIA 1f4a + case u'Ὃ': // GREEK CAPITAL OMICRON W/ DASIA AND VARIA 1f4b + case u'Ὄ': // GREEK CAPITAL OMICRON W/ PSILI AND OXIA 1f4c + case u'Ὅ': // GREEK CAPITAL OMICRON W/ DASIA AND OXIA 1f4d + case u'Ὑ': // GREEK CAPITAL UPSILON W/ DASIA 1f59 + case u'Ὓ': // GREEK CAPITAL UPSILON W/ DASIA AND VARIA 1f5b + case u'Ὕ': // GREEK CAPITAL UPSILON W/ DASIA AND OXIA 1f5d + case u'Ὗ': // GREEK CAPITAL UPSILON W/ DASIA AND PERISPOMENI 1f5f + case u'Ὠ': // GREEK CAPITAL OMEGA W/ PSILI 1f68 + case u'Ὡ': // GREEK CAPITAL OMEGA W/ DASIA 1f69 + case u'Ὢ': // GREEK CAPITAL OMEGA W/ PSILI AND VARIA 1f6a + case u'Ὣ': // GREEK CAPITAL OMEGA W/ DASIA AND VARIA 1f6b + case u'Ὤ': // GREEK CAPITAL OMEGA W/ PSILI AND OXIA 1f6c + case u'Ὥ': // GREEK CAPITAL OMEGA W/ DASIA AND OXIA 1f6d + case u'Ὦ': // GREEK CAPITAL OMEGA W/ PSILI AND PERISPOMENI 1f6e + case u'Ὧ': // GREEK CAPITAL OMEGA W/ DASIA AND PERISPOMENI 1f6f + case u'Ᾰ': // GREEK CAPITAL ALPHA W/ VRACHY 1fb8 + case u'Ᾱ': // GREEK CAPITAL ALPHA W/ MACRON 1fb9 + case u'Ὰ': // GREEK CAPITAL ALPHA W/ VARIA 1fba + case u'Ά': // GREEK CAPITAL ALPHA W/ OXIA 1fbb + case u'Ὲ': // GREEK CAPITAL EPSILON W/ VARIA 1fc8 + case u'Έ': // GREEK CAPITAL EPSILON W/ OXIA 1fc9 + case u'Ὴ': // GREEK CAPITAL ETA W/ VARIA 1fca + case u'Ή': // GREEK CAPITAL ETA W/ OXIA 1fcb + case u'Ῐ': // GREEK CAPITAL IOTA W/ VRACHY 1fd8 + case u'Ῑ': // GREEK CAPITAL IOTA W/ MACRON 1fd9 + case u'Ὶ': // GREEK CAPITAL IOTA W/ VARIA 1fda + case u'Ί': // GREEK CAPITAL IOTA W/ OXIA 1fdb + case u'Ῠ': // GREEK CAPITAL UPSILON W/ VRACHY 1fe8 + case u'Ῡ': // GREEK CAPITAL UPSILON W/ MACRON 1fe9 + case u'Ὺ': // GREEK CAPITAL UPSILON W/ VARIA 1fea + case u'Ύ': // GREEK CAPITAL UPSILON W/ OXIA 1feb + case u'Ῥ': // GREEK CAPITAL RHO W/ DASIA 1fec + case u'Ὸ': // GREEK CAPITAL OMICRON W/ VARIA 1ff8 + case u'Ό': // GREEK CAPITAL OMICRON W/ OXIA 1ff9 + case u'Ὼ': // GREEK CAPITAL OMEGA W/ VARIA 1ffa + case u'Ώ': // GREEK CAPITAL OMEGA W/ OXIA 1ffb + case u'ℂ': // DOUBLE-STRUCK CAPITAL C 2102 + case u'ℇ': // EULER CONSTANT 2107 + case u'ℋ': // SCRIPT CAPITAL H 210b + case u'ℌ': // BLACK-LETTER CAPITAL H 210c + case u'ℍ': // DOUBLE-STRUCK CAPITAL H 210d + case u'ℐ': // SCRIPT CAPITAL I 2110 + case u'ℑ': // BLACK-LETTER CAPITAL I 2111 + case u'ℒ': // SCRIPT CAPITAL L 2112 + case u'ℕ': // DOUBLE-STRUCK CAPITAL N 2115 + case u'ℙ': // DOUBLE-STRUCK CAPITAL P 2119 + case u'ℚ': // DOUBLE-STRUCK CAPITAL Q 211a + case u'ℛ': // SCRIPT CAPITAL R 211b + case u'ℜ': // BLACK-LETTER CAPITAL R 211c + case u'ℝ': // DOUBLE-STRUCK CAPITAL R 211d + case u'ℤ': // DOUBLE-STRUCK CAPITAL Z 2124 + case u'Ω': // OHM SIGN 2126 + case u'ℨ': // BLACK-LETTER CAPITAL Z 2128 + case u'K': // KELVIN SIGN 212a + case u'Å': // ANGSTROM SIGN 212b + case u'ℬ': // SCRIPT CAPITAL B 212c + case u'ℭ': // BLACK-LETTER CAPITAL C 212d + case u'ℰ': // SCRIPT CAPITAL E 2130 + case u'ℱ': // SCRIPT CAPITAL F 2131 + case u'Ⅎ': // TURNED CAPITAL F 2132 + case u'ℳ': // SCRIPT CAPITAL M 2133 + case u'ℾ': // DOUBLE-STRUCK CAPITAL GAMMA 213e + case u'ℿ': // DOUBLE-STRUCK CAPITAL PI 213f + case u'ⅅ': // DOUBLE-STRUCK ITALIC CAPITAL D 2145 + case u'Ↄ': // ROMAN NUMERAL REVERSED ONE HUNDRED 2183 + case u'Ⰰ': // GLAGOLITIC CAPITAL AZU 2c00 + case u'Ⰱ': // GLAGOLITIC CAPITAL BUKY 2c01 + case u'Ⰲ': // GLAGOLITIC CAPITAL VEDE 2c02 + case u'Ⰳ': // GLAGOLITIC CAPITAL GLAGOLI 2c03 + case u'Ⰴ': // GLAGOLITIC CAPITAL DOBRO 2c04 + case u'Ⰵ': // GLAGOLITIC CAPITAL YESTU 2c05 + case u'Ⰶ': // GLAGOLITIC CAPITAL ZHIVETE 2c06 + case u'Ⰷ': // GLAGOLITIC CAPITAL DZELO 2c07 + case u'Ⰸ': // GLAGOLITIC CAPITAL ZEMLJA 2c08 + case u'Ⰹ': // GLAGOLITIC CAPITAL IZHE 2c09 + case u'Ⰺ': // GLAGOLITIC CAPITAL INITIAL IZHE 2c0a + case u'Ⰻ': // GLAGOLITIC CAPITAL I 2c0b + case u'Ⰼ': // GLAGOLITIC CAPITAL DJERVI 2c0c + case u'Ⰽ': // GLAGOLITIC CAPITAL KAKO 2c0d + case u'Ⰾ': // GLAGOLITIC CAPITAL LJUDIJE 2c0e + case u'Ⰿ': // GLAGOLITIC CAPITAL MYSLITE 2c0f + case u'Ⱀ': // GLAGOLITIC CAPITAL NASHI 2c10 + case u'Ⱁ': // GLAGOLITIC CAPITAL ONU 2c11 + case u'Ⱂ': // GLAGOLITIC CAPITAL POKOJI 2c12 + case u'Ⱃ': // GLAGOLITIC CAPITAL RITSI 2c13 + case u'Ⱄ': // GLAGOLITIC CAPITAL SLOVO 2c14 + case u'Ⱅ': // GLAGOLITIC CAPITAL TVRIDO 2c15 + case u'Ⱆ': // GLAGOLITIC CAPITAL UKU 2c16 + case u'Ⱇ': // GLAGOLITIC CAPITAL FRITU 2c17 + case u'Ⱈ': // GLAGOLITIC CAPITAL HERU 2c18 + case u'Ⱉ': // GLAGOLITIC CAPITAL OTU 2c19 + case u'Ⱊ': // GLAGOLITIC CAPITAL PE 2c1a + case u'Ⱋ': // GLAGOLITIC CAPITAL SHTA 2c1b + case u'Ⱌ': // GLAGOLITIC CAPITAL TSI 2c1c + case u'Ⱍ': // GLAGOLITIC CAPITAL CHRIVI 2c1d + case u'Ⱎ': // GLAGOLITIC CAPITAL SHA 2c1e + case u'Ⱏ': // GLAGOLITIC CAPITAL YERU 2c1f + case u'Ⱐ': // GLAGOLITIC CAPITAL YERI 2c20 + case u'Ⱑ': // GLAGOLITIC CAPITAL YATI 2c21 + case u'Ⱒ': // GLAGOLITIC CAPITAL SPIDERY HA 2c22 + case u'Ⱓ': // GLAGOLITIC CAPITAL YU 2c23 + case u'Ⱔ': // GLAGOLITIC CAPITAL SMALL YUS 2c24 + case u'Ⱕ': // GLAGOLITIC CAPITAL SMALL YUS W/ TAIL 2c25 + case u'Ⱖ': // GLAGOLITIC CAPITAL YO 2c26 + case u'Ⱗ': // GLAGOLITIC CAPITAL IOTATED SMALL YUS 2c27 + case u'Ⱘ': // GLAGOLITIC CAPITAL BIG YUS 2c28 + case u'Ⱙ': // GLAGOLITIC CAPITAL IOTATED BIG YUS 2c29 + case u'Ⱚ': // GLAGOLITIC CAPITAL FITA 2c2a + case u'Ⱛ': // GLAGOLITIC CAPITAL IZHITSA 2c2b + case u'Ⱜ': // GLAGOLITIC CAPITAL SHTAPIC 2c2c + case u'Ⱝ': // GLAGOLITIC CAPITAL TROKUTASTI A 2c2d + case u'Ⱞ': // GLAGOLITIC CAPITAL LATINATE MYSLITE 2c2e + case u'Ⱡ': // LATIN CAPITAL L W/ DOUBLE BAR 2c60 + case u'Ɫ': // LATIN CAPITAL L W/ MIDDLE TILDE 2c62 + case u'Ᵽ': // LATIN CAPITAL P W/ STROKE 2c63 + case u'Ɽ': // LATIN CAPITAL R W/ TAIL 2c64 + case u'Ⱨ': // LATIN CAPITAL H W/ DESCENDER 2c67 + case u'Ⱪ': // LATIN CAPITAL K W/ DESCENDER 2c69 + case u'Ⱬ': // LATIN CAPITAL Z W/ DESCENDER 2c6b + case u'Ɑ': // LATIN CAPITAL ALPHA 2c6d + case u'Ɱ': // LATIN CAPITAL M W/ HOOK 2c6e + case u'Ɐ': // LATIN CAPITAL TURNED A 2c6f + case u'Ɒ': // LATIN CAPITAL TURNED ALPHA 2c70 + case u'Ⱳ': // LATIN CAPITAL W W/ HOOK 2c72 + case u'Ⱶ': // LATIN CAPITAL HALF H 2c75 + case u'Ȿ': // LATIN CAPITAL S W/ SWASH TAIL 2c7e + case u'Ɀ': // LATIN CAPITAL Z W/ SWASH TAIL 2c7f + case u'Ⲁ': // COPTIC CAPITAL ALFA 2c80 + case u'Ⲃ': // COPTIC CAPITAL VIDA 2c82 + case u'Ⲅ': // COPTIC CAPITAL GAMMA 2c84 + case u'Ⲇ': // COPTIC CAPITAL DALDA 2c86 + case u'Ⲉ': // COPTIC CAPITAL EIE 2c88 + case u'Ⲋ': // COPTIC CAPITAL SOU 2c8a + case u'Ⲍ': // COPTIC CAPITAL ZATA 2c8c + case u'Ⲏ': // COPTIC CAPITAL HATE 2c8e + case u'Ⲑ': // COPTIC CAPITAL THETHE 2c90 + case u'Ⲓ': // COPTIC CAPITAL IAUDA 2c92 + case u'Ⲕ': // COPTIC CAPITAL KAPA 2c94 + case u'Ⲗ': // COPTIC CAPITAL LAULA 2c96 + case u'Ⲙ': // COPTIC CAPITAL MI 2c98 + case u'Ⲛ': // COPTIC CAPITAL NI 2c9a + case u'Ⲝ': // COPTIC CAPITAL KSI 2c9c + case u'Ⲟ': // COPTIC CAPITAL O 2c9e + case u'Ⲡ': // COPTIC CAPITAL PI 2ca0 + case u'Ⲣ': // COPTIC CAPITAL RO 2ca2 + case u'Ⲥ': // COPTIC CAPITAL SIMA 2ca4 + case u'Ⲧ': // COPTIC CAPITAL TAU 2ca6 + case u'Ⲩ': // COPTIC CAPITAL UA 2ca8 + case u'Ⲫ': // COPTIC CAPITAL FI 2caa + case u'Ⲭ': // COPTIC CAPITAL KHI 2cac + case u'Ⲯ': // COPTIC CAPITAL PSI 2cae + case u'Ⲱ': // COPTIC CAPITAL OOU 2cb0 + case u'Ⲳ': // COPTIC CAPITAL DIALECT-P ALEF 2cb2 + case u'Ⲵ': // COPTIC CAPITAL OLD COPTIC AIN 2cb4 + case u'Ⲷ': // COPTIC CAPITAL CRYPTOGRAMMIC EIE 2cb6 + case u'Ⲹ': // COPTIC CAPITAL DIALECT-P KAPA 2cb8 + case u'Ⲻ': // COPTIC CAPITAL DIALECT-P NI 2cba + case u'Ⲽ': // COPTIC CAPITAL CRYPTOGRAMMIC NI 2cbc + case u'Ⲿ': // COPTIC CAPITAL OLD COPTIC OOU 2cbe + case u'Ⳁ': // COPTIC CAPITAL SAMPI 2cc0 + case u'Ⳃ': // COPTIC CAPITAL CROSSED SHEI 2cc2 + case u'Ⳅ': // COPTIC CAPITAL OLD COPTIC SHEI 2cc4 + case u'Ⳇ': // COPTIC CAPITAL OLD COPTIC ESH 2cc6 + case u'Ⳉ': // COPTIC CAPITAL AKHMIMIC KHEI 2cc8 + case u'Ⳋ': // COPTIC CAPITAL DIALECT-P HORI 2cca + case u'Ⳍ': // COPTIC CAPITAL OLD COPTIC HORI 2ccc + case u'Ⳏ': // COPTIC CAPITAL OLD COPTIC HA 2cce + case u'Ⳑ': // COPTIC CAPITAL L-SHAPED HA 2cd0 + case u'Ⳓ': // COPTIC CAPITAL OLD COPTIC HEI 2cd2 + case u'Ⳕ': // COPTIC CAPITAL OLD COPTIC HAT 2cd4 + case u'Ⳗ': // COPTIC CAPITAL OLD COPTIC GANGIA 2cd6 + case u'Ⳙ': // COPTIC CAPITAL OLD COPTIC DJA 2cd8 + case u'Ⳛ': // COPTIC CAPITAL OLD COPTIC SHIMA 2cda + case u'Ⳝ': // COPTIC CAPITAL OLD NUBIAN SHIMA 2cdc + case u'Ⳟ': // COPTIC CAPITAL OLD NUBIAN NGI 2cde + case u'Ⳡ': // COPTIC CAPITAL OLD NUBIAN NYI 2ce0 + case u'Ⳣ': // COPTIC CAPITAL OLD NUBIAN WAU 2ce2 + case u'Ⳬ': // COPTIC CAPITAL CRYPTOGRAMMIC SHEI 2ceb + case u'Ⳮ': // COPTIC CAPITAL CRYPTOGRAMMIC GANGIA 2ced + case u'Ⳳ': // COPTIC CAPITAL BOHAIRIC KHEI 2cf2 + case u'Ꙁ': // CYRILLIC CAPITAL ZEMLYA a640 + case u'Ꙃ': // CYRILLIC CAPITAL DZELO a642 + case u'Ꙅ': // CYRILLIC CAPITAL REVERSED DZE a644 + case u'Ꙇ': // CYRILLIC CAPITAL IOTA a646 + case u'Ꙉ': // CYRILLIC CAPITAL DJERV a648 + case u'Ꙋ': // CYRILLIC CAPITAL MONOGRAPH UK a64a + case u'Ꙍ': // CYRILLIC CAPITAL BROAD OMEGA a64c + case u'Ꙏ': // CYRILLIC CAPITAL NEUTRAL YER a64e + case u'Ꙑ': // CYRILLIC CAPITAL YERU W/ BACK YER a650 + case u'Ꙓ': // CYRILLIC CAPITAL IOTIFIED YAT a652 + case u'Ꙕ': // CYRILLIC CAPITAL REVERSED YU a654 + case u'Ꙗ': // CYRILLIC CAPITAL IOTIFIED A a656 + case u'Ꙙ': // CYRILLIC CAPITAL CLOSED LITTLE YUS a658 + case u'Ꙛ': // CYRILLIC CAPITAL BLENDED YUS a65a + case u'Ꙝ': // CYRILLIC CAPITAL IOTIFIED CLOSED LITTLE YUS a65c + case u'Ꙟ': // CYRILLIC CAPITAL YN a65e + case u'Ꙡ': // CYRILLIC CAPITAL REVERSED TSE a660 + case u'Ꙣ': // CYRILLIC CAPITAL SOFT DE a662 + case u'Ꙥ': // CYRILLIC CAPITAL SOFT EL a664 + case u'Ꙧ': // CYRILLIC CAPITAL SOFT EM a666 + case u'Ꙩ': // CYRILLIC CAPITAL MONOCULAR O a668 + case u'Ꙫ': // CYRILLIC CAPITAL BINOCULAR O a66a + case u'Ꙭ': // CYRILLIC CAPITAL DOUBLE MONOCULAR O a66c + case 0xa680: // CYRILLIC CAPITAL DWE a680 + case 0xa682: // CYRILLIC CAPITAL DZWE a682 + case 0xa684: // CYRILLIC CAPITAL ZHWE a684 + case 0xa686: // CYRILLIC CAPITAL CCHE a686 + case 0xa688: // CYRILLIC CAPITAL DZZE a688 + case 0xa68a: // CYRILLIC CAPITAL TE W/ MIDDLE HOOK a68a + case 0xa68c: // CYRILLIC CAPITAL TWE a68c + case 0xa68e: // CYRILLIC CAPITAL TSWE a68e + case 0xa690: // CYRILLIC CAPITAL TSSE a690 + case 0xa692: // CYRILLIC CAPITAL TCHE a692 + case 0xa694: // CYRILLIC CAPITAL HWE a694 + case 0xa696: // CYRILLIC CAPITAL SHWE a696 + case 0xa698: // CYRILLIC CAPITAL DOUBLE O a698 + case 0xa69a: // CYRILLIC CAPITAL CROSSED O a69a + case u'Ꜣ': // LATIN CAPITAL EGYPTOLOGICAL ALEF a722 + case u'Ꜥ': // LATIN CAPITAL EGYPTOLOGICAL AIN a724 + case u'Ꜧ': // LATIN CAPITAL HENG a726 + case u'Ꜩ': // LATIN CAPITAL TZ a728 + case u'Ꜫ': // LATIN CAPITAL TRESILLO a72a + case u'Ꜭ': // LATIN CAPITAL CUATRILLO a72c + case u'Ꜯ': // LATIN CAPITAL CUATRILLO W/ COMMA a72e + case u'Ꜳ': // LATIN CAPITAL AA a732 + case u'Ꜵ': // LATIN CAPITAL AO a734 + case u'Ꜷ': // LATIN CAPITAL AU a736 + case u'Ꜹ': // LATIN CAPITAL AV a738 + case u'Ꜻ': // LATIN CAPITAL AV W/ HORIZONTAL BAR a73a + case u'Ꜽ': // LATIN CAPITAL AY a73c + case u'Ꜿ': // LATIN CAPITAL REVERSED C W/ DOT a73e + case u'Ꝁ': // LATIN CAPITAL K W/ STROKE a740 + case u'Ꝃ': // LATIN CAPITAL K W/ DIAGONAL STROKE a742 + case u'Ꝅ': // LATIN CAPITAL K W/ STROKE AND DIAGONAL STROKE a744 + case u'Ꝇ': // LATIN CAPITAL BROKEN L a746 + case u'Ꝉ': // LATIN CAPITAL L W/ HIGH STROKE a748 + case u'Ꝋ': // LATIN CAPITAL O W/ LONG STROKE OVERLAY a74a + case u'Ꝍ': // LATIN CAPITAL O W/ LOOP a74c + case u'Ꝏ': // LATIN CAPITAL OO a74e + case u'Ꝑ': // LATIN CAPITAL P W/ STROKE THROUGH DESCENDER a750 + case u'Ꝓ': // LATIN CAPITAL P W/ FLOURISH a752 + case u'Ꝕ': // LATIN CAPITAL P W/ SQUIRREL TAIL a754 + case u'Ꝗ': // LATIN CAPITAL Q W/ STROKE THROUGH DESCENDER a756 + case u'Ꝙ': // LATIN CAPITAL Q W/ DIAGONAL STROKE a758 + case u'Ꝛ': // LATIN CAPITAL R ROTUNDA a75a + case u'Ꝝ': // LATIN CAPITAL RUM ROTUNDA a75c + case u'Ꝟ': // LATIN CAPITAL V W/ DIAGONAL STROKE a75e + case u'Ꝡ': // LATIN CAPITAL VY a760 + case u'Ꝣ': // LATIN CAPITAL VISIGOTHIC Z a762 + case u'Ꝥ': // LATIN CAPITAL THORN W/ STROKE a764 + case u'Ꝧ': // LATIN CAPITAL THORN W/ STROKE THROUGH DESCENDER a766 + case u'Ꝩ': // LATIN CAPITAL VEND a768 + case u'Ꝫ': // LATIN CAPITAL ET a76a + case u'Ꝭ': // LATIN CAPITAL IS a76c + case u'Ꝯ': // LATIN CAPITAL CON a76e + case u'Ꝺ': // LATIN CAPITAL INSULAR D a779 + case u'Ꝼ': // LATIN CAPITAL INSULAR F a77b + case u'Ᵹ': // LATIN CAPITAL INSULAR G a77d + case u'Ꝿ': // LATIN CAPITAL TURNED INSULAR G a77e + case u'Ꞁ': // LATIN CAPITAL TURNED L a780 + case u'Ꞃ': // LATIN CAPITAL INSULAR R a782 + case u'Ꞅ': // LATIN CAPITAL INSULAR S a784 + case u'Ꞇ': // LATIN CAPITAL INSULAR T a786 + case u'Ꞌ': // LATIN CAPITAL SALTILLO a78b + case u'Ɥ': // LATIN CAPITAL TURNED H a78d + case u'Ꞑ': // LATIN CAPITAL N W/ DESCENDER a790 + case u'Ꞓ': // LATIN CAPITAL C W/ BAR a792 + case u'Ꞗ': // LATIN CAPITAL B W/ FLOURISH a796 + case u'Ꞙ': // LATIN CAPITAL F W/ STROKE a798 + case u'Ꞛ': // LATIN CAPITAL VOLAPUK AE a79a + case u'Ꞝ': // LATIN CAPITAL VOLAPUK OE a79c + case u'Ꞟ': // LATIN CAPITAL VOLAPUK UE a79e + case u'Ꞡ': // LATIN CAPITAL G W/ OBLIQUE STROKE a7a0 + case u'Ꞣ': // LATIN CAPITAL K W/ OBLIQUE STROKE a7a2 + case u'Ꞥ': // LATIN CAPITAL N W/ OBLIQUE STROKE a7a4 + case u'Ꞧ': // LATIN CAPITAL R W/ OBLIQUE STROKE a7a6 + case u'Ꞩ': // LATIN CAPITAL S W/ OBLIQUE STROKE a7a8 + case u'Ɦ': // LATIN CAPITAL H W/ HOOK a7aa + case u'Ɜ': // LATIN CAPITAL REVERSED OPEN E a7ab + case u'Ɡ': // LATIN CAPITAL SCRIPT G a7ac + case u'Ɬ': // LATIN CAPITAL L W/ BELT a7ad + case u'Ɪ': // LATIN CAPITAL SMALL CAPITAL I a7ae + case u'Ʞ': // LATIN CAPITAL TURNED K a7b0 + case u'Ʇ': // LATIN CAPITAL TURNED T a7b1 + case u'Ʝ': // LATIN CAPITAL J W/ CROSSED-TAIL a7b2 + case u'Ꭓ': // LATIN CAPITAL CHI a7b3 + case u'Ꞵ': // LATIN CAPITAL BETA a7b4 + case u'Ꞷ': // LATIN CAPITAL OMEGA a7b6 + case u'Ꞹ': // LATIN CAPITAL U W/ STROKE a7b8 + case u'Ꞻ': // LATIN CAPITAL GLOTTAL A a7ba + case u'Ꞽ': // LATIN CAPITAL GLOTTAL I a7bc + case u'Ꞿ': // LATIN CAPITAL GLOTTAL U a7be + case u'Ꟃ': // LATIN CAPITAL ANGLICANA W a7c2 + case u'Ꞔ': // LATIN CAPITAL C W/ PALATAL HOOK a7c4 + case u'Ʂ': // LATIN CAPITAL S W/ HOOK a7c5 + case u'Ᶎ': // LATIN CAPITAL Z W/ PALATAL HOOK a7c6 + case u'A': // FULLWIDTH LATIN CAPITAL A ff21 + case u'B': // FULLWIDTH LATIN CAPITAL B ff22 + case u'C': // FULLWIDTH LATIN CAPITAL C ff23 + case u'D': // FULLWIDTH LATIN CAPITAL D ff24 + case u'E': // FULLWIDTH LATIN CAPITAL E ff25 + case u'F': // FULLWIDTH LATIN CAPITAL F ff26 + case u'G': // FULLWIDTH LATIN CAPITAL G ff27 + case u'H': // FULLWIDTH LATIN CAPITAL H ff28 + case u'I': // FULLWIDTH LATIN CAPITAL I ff29 + case u'J': // FULLWIDTH LATIN CAPITAL J ff2a + case u'K': // FULLWIDTH LATIN CAPITAL K ff2b + case u'L': // FULLWIDTH LATIN CAPITAL L ff2c + case u'M': // FULLWIDTH LATIN CAPITAL M ff2d + case u'N': // FULLWIDTH LATIN CAPITAL N ff2e + case u'O': // FULLWIDTH LATIN CAPITAL O ff2f + case u'P': // FULLWIDTH LATIN CAPITAL P ff30 + case u'Q': // FULLWIDTH LATIN CAPITAL Q ff31 + case u'R': // FULLWIDTH LATIN CAPITAL R ff32 + case u'S': // FULLWIDTH LATIN CAPITAL S ff33 + case u'T': // FULLWIDTH LATIN CAPITAL T ff34 + case u'U': // FULLWIDTH LATIN CAPITAL U ff35 + case u'V': // FULLWIDTH LATIN CAPITAL V ff36 + case u'W': // FULLWIDTH LATIN CAPITAL W ff37 + case u'X': // FULLWIDTH LATIN CAPITAL X ff38 + case u'Y': // FULLWIDTH LATIN CAPITAL Y ff39 + case u'Z': // FULLWIDTH LATIN CAPITAL Z ff3a + case L'𐐀': // DESERET CAPITAL LONG I 10400 + case L'𐐁': // DESERET CAPITAL LONG E 10401 + case L'𐐂': // DESERET CAPITAL LONG A 10402 + case L'𐐃': // DESERET CAPITAL LONG AH 10403 + case L'𐐄': // DESERET CAPITAL LONG O 10404 + case L'𐐅': // DESERET CAPITAL LONG OO 10405 + case L'𐐆': // DESERET CAPITAL SHORT I 10406 + case L'𐐇': // DESERET CAPITAL SHORT E 10407 + case L'𐐈': // DESERET CAPITAL SHORT A 10408 + case L'𐐉': // DESERET CAPITAL SHORT AH 10409 + case L'𐐊': // DESERET CAPITAL SHORT O 1040a + case L'𐐋': // DESERET CAPITAL SHORT OO 1040b + case L'𐐌': // DESERET CAPITAL AY 1040c + case L'𐐍': // DESERET CAPITAL OW 1040d + case L'𐐎': // DESERET CAPITAL WU 1040e + case L'𐐏': // DESERET CAPITAL YEE 1040f + case L'𐐐': // DESERET CAPITAL H 10410 + case L'𐐑': // DESERET CAPITAL PEE 10411 + case L'𐐒': // DESERET CAPITAL BEE 10412 + case L'𐐓': // DESERET CAPITAL TEE 10413 + case L'𐐔': // DESERET CAPITAL DEE 10414 + case L'𐐕': // DESERET CAPITAL CHEE 10415 + case L'𐐖': // DESERET CAPITAL JEE 10416 + case L'𐐗': // DESERET CAPITAL KAY 10417 + case L'𐐘': // DESERET CAPITAL GAY 10418 + case L'𐐙': // DESERET CAPITAL EF 10419 + case L'𐐚': // DESERET CAPITAL VEE 1041a + case L'𐐛': // DESERET CAPITAL ETH 1041b + case L'𐐜': // DESERET CAPITAL THEE 1041c + case L'𐐝': // DESERET CAPITAL ES 1041d + case L'𐐞': // DESERET CAPITAL ZEE 1041e + case L'𐐟': // DESERET CAPITAL ESH 1041f + case L'𐐠': // DESERET CAPITAL ZHEE 10420 + case L'𐐡': // DESERET CAPITAL ER 10421 + case L'𐐢': // DESERET CAPITAL EL 10422 + case L'𐐣': // DESERET CAPITAL EM 10423 + case L'𐐤': // DESERET CAPITAL EN 10424 + case L'𐐥': // DESERET CAPITAL ENG 10425 + case L'𐐦': // DESERET CAPITAL OI 10426 + case L'𐐧': // DESERET CAPITAL EW 10427 + case L'𐒰': // OSAGE CAPITAL A 104b0 + case L'𐒱': // OSAGE CAPITAL AI 104b1 + case L'𐒲': // OSAGE CAPITAL AIN 104b2 + case L'𐒳': // OSAGE CAPITAL AH 104b3 + case L'𐒴': // OSAGE CAPITAL BRA 104b4 + case L'𐒵': // OSAGE CAPITAL CHA 104b5 + case L'𐒶': // OSAGE CAPITAL EHCHA 104b6 + case L'𐒷': // OSAGE CAPITAL E 104b7 + case L'𐒸': // OSAGE CAPITAL EIN 104b8 + case L'𐒹': // OSAGE CAPITAL HA 104b9 + case L'𐒺': // OSAGE CAPITAL HYA 104ba + case L'𐒻': // OSAGE CAPITAL I 104bb + case L'𐒼': // OSAGE CAPITAL KA 104bc + case L'𐒽': // OSAGE CAPITAL EHKA 104bd + case L'𐒾': // OSAGE CAPITAL KYA 104be + case L'𐒿': // OSAGE CAPITAL LA 104bf + case L'𐓀': // OSAGE CAPITAL MA 104c0 + case L'𐓁': // OSAGE CAPITAL NA 104c1 + case L'𐓂': // OSAGE CAPITAL O 104c2 + case L'𐓃': // OSAGE CAPITAL OIN 104c3 + case L'𐓄': // OSAGE CAPITAL PA 104c4 + case L'𐓅': // OSAGE CAPITAL EHPA 104c5 + case L'𐓆': // OSAGE CAPITAL SA 104c6 + case L'𐓇': // OSAGE CAPITAL SHA 104c7 + case L'𐓈': // OSAGE CAPITAL TA 104c8 + case L'𐓉': // OSAGE CAPITAL EHTA 104c9 + case L'𐓊': // OSAGE CAPITAL TSA 104ca + case L'𐓋': // OSAGE CAPITAL EHTSA 104cb + case L'𐓌': // OSAGE CAPITAL TSHA 104cc + case L'𐓍': // OSAGE CAPITAL DHA 104cd + case L'𐓎': // OSAGE CAPITAL U 104ce + case L'𐓏': // OSAGE CAPITAL WA 104cf + case L'𐓐': // OSAGE CAPITAL KHA 104d0 + case L'𐓑': // OSAGE CAPITAL GHA 104d1 + case L'𐓒': // OSAGE CAPITAL ZA 104d2 + case L'𐓓': // OSAGE CAPITAL ZHA 104d3 + case L'𐲀': // OLD HUNGARIAN CAPITAL A 10c80 + case L'𐲁': // OLD HUNGARIAN CAPITAL AA 10c81 + case L'𐲂': // OLD HUNGARIAN CAPITAL EB 10c82 + case L'𐲃': // OLD HUNGARIAN CAPITAL AMB 10c83 + case L'𐲄': // OLD HUNGARIAN CAPITAL EC 10c84 + case L'𐲅': // OLD HUNGARIAN CAPITAL ENC 10c85 + case L'𐲆': // OLD HUNGARIAN CAPITAL ECS 10c86 + case L'𐲇': // OLD HUNGARIAN CAPITAL ED 10c87 + case L'𐲈': // OLD HUNGARIAN CAPITAL AND 10c88 + case L'𐲉': // OLD HUNGARIAN CAPITAL E 10c89 + case L'𐲊': // OLD HUNGARIAN CAPITAL CLOSE E 10c8a + case L'𐲋': // OLD HUNGARIAN CAPITAL EE 10c8b + case L'𐲌': // OLD HUNGARIAN CAPITAL EF 10c8c + case L'𐲍': // OLD HUNGARIAN CAPITAL EG 10c8d + case L'𐲎': // OLD HUNGARIAN CAPITAL EGY 10c8e + case L'𐲏': // OLD HUNGARIAN CAPITAL EH 10c8f + case L'𐲐': // OLD HUNGARIAN CAPITAL I 10c90 + case L'𐲑': // OLD HUNGARIAN CAPITAL II 10c91 + case L'𐲒': // OLD HUNGARIAN CAPITAL EJ 10c92 + case L'𐲓': // OLD HUNGARIAN CAPITAL EK 10c93 + case L'𐲔': // OLD HUNGARIAN CAPITAL AK 10c94 + case L'𐲕': // OLD HUNGARIAN CAPITAL UNK 10c95 + case L'𐲖': // OLD HUNGARIAN CAPITAL EL 10c96 + case L'𐲗': // OLD HUNGARIAN CAPITAL ELY 10c97 + case L'𐲘': // OLD HUNGARIAN CAPITAL EM 10c98 + case L'𐲙': // OLD HUNGARIAN CAPITAL EN 10c99 + case L'𐲚': // OLD HUNGARIAN CAPITAL ENY 10c9a + case L'𐲛': // OLD HUNGARIAN CAPITAL O 10c9b + case L'𐲜': // OLD HUNGARIAN CAPITAL OO 10c9c + case L'𐲝': // OLD HUNGARIAN CAPITAL NIKOLSBURG OE 10c9d + case L'𐲞': // OLD HUNGARIAN CAPITAL RUDIMENTA OE 10c9e + case L'𐲟': // OLD HUNGARIAN CAPITAL OEE 10c9f + case L'𐲠': // OLD HUNGARIAN CAPITAL EP 10ca0 + case L'𐲡': // OLD HUNGARIAN CAPITAL EMP 10ca1 + case L'𐲢': // OLD HUNGARIAN CAPITAL ER 10ca2 + case L'𐲣': // OLD HUNGARIAN CAPITAL SHORT ER 10ca3 + case L'𐲤': // OLD HUNGARIAN CAPITAL ES 10ca4 + case L'𐲥': // OLD HUNGARIAN CAPITAL ESZ 10ca5 + case L'𐲦': // OLD HUNGARIAN CAPITAL ET 10ca6 + case L'𐲧': // OLD HUNGARIAN CAPITAL ENT 10ca7 + case L'𐲨': // OLD HUNGARIAN CAPITAL ETY 10ca8 + case L'𐲩': // OLD HUNGARIAN CAPITAL ECH 10ca9 + case L'𐲪': // OLD HUNGARIAN CAPITAL U 10caa + case L'𐲫': // OLD HUNGARIAN CAPITAL UU 10cab + case L'𐲬': // OLD HUNGARIAN CAPITAL NIKOLSBURG UE 10cac + case L'𐲭': // OLD HUNGARIAN CAPITAL RUDIMENTA UE 10cad + case L'𐲮': // OLD HUNGARIAN CAPITAL EV 10cae + case L'𐲯': // OLD HUNGARIAN CAPITAL EZ 10caf + case L'𐲰': // OLD HUNGARIAN CAPITAL EZS 10cb0 + case L'𐲱': // OLD HUNGARIAN CAPITAL ENT-SHAPED SIGN 10cb1 + case L'𐲲': // OLD HUNGARIAN CAPITAL US 10cb2 + case L'𑢠': // WARANG CITI CAPITAL NGAA 118a0 + case L'𑢡': // WARANG CITI CAPITAL A 118a1 + case L'𑢢': // WARANG CITI CAPITAL WI 118a2 + case L'𑢣': // WARANG CITI CAPITAL YU 118a3 + case L'𑢤': // WARANG CITI CAPITAL YA 118a4 + case L'𑢥': // WARANG CITI CAPITAL YO 118a5 + case L'𑢦': // WARANG CITI CAPITAL II 118a6 + case L'𑢧': // WARANG CITI CAPITAL UU 118a7 + case L'𑢨': // WARANG CITI CAPITAL E 118a8 + case L'𑢩': // WARANG CITI CAPITAL O 118a9 + case L'𑢪': // WARANG CITI CAPITAL ANG 118aa + case L'𑢫': // WARANG CITI CAPITAL GA 118ab + case L'𑢬': // WARANG CITI CAPITAL KO 118ac + case L'𑢭': // WARANG CITI CAPITAL ENY 118ad + case L'𑢮': // WARANG CITI CAPITAL YUJ 118ae + case L'𑢯': // WARANG CITI CAPITAL UC 118af + case L'𑢰': // WARANG CITI CAPITAL ENN 118b0 + case L'𑢱': // WARANG CITI CAPITAL ODD 118b1 + case L'𑢲': // WARANG CITI CAPITAL TTE 118b2 + case L'𑢳': // WARANG CITI CAPITAL NUNG 118b3 + case L'𑢴': // WARANG CITI CAPITAL DA 118b4 + case L'𑢵': // WARANG CITI CAPITAL AT 118b5 + case L'𑢶': // WARANG CITI CAPITAL AM 118b6 + case L'𑢷': // WARANG CITI CAPITAL BU 118b7 + case L'𑢸': // WARANG CITI CAPITAL PU 118b8 + case L'𑢹': // WARANG CITI CAPITAL HIYO 118b9 + case L'𑢺': // WARANG CITI CAPITAL HOLO 118ba + case L'𑢻': // WARANG CITI CAPITAL HORR 118bb + case L'𑢼': // WARANG CITI CAPITAL HAR 118bc + case L'𑢽': // WARANG CITI CAPITAL SSUU 118bd + case L'𑢾': // WARANG CITI CAPITAL SII 118be + case L'𑢿': // WARANG CITI CAPITAL VIYO 118bf + case L'𖹀': // MEDEFAIDRIN CAPITAL M 16e40 + case L'𖹁': // MEDEFAIDRIN CAPITAL S 16e41 + case L'𖹂': // MEDEFAIDRIN CAPITAL V 16e42 + case L'𖹃': // MEDEFAIDRIN CAPITAL W 16e43 + case L'𖹄': // MEDEFAIDRIN CAPITAL ATIU 16e44 + case L'𖹅': // MEDEFAIDRIN CAPITAL Z 16e45 + case L'𖹆': // MEDEFAIDRIN CAPITAL KP 16e46 + case L'𖹇': // MEDEFAIDRIN CAPITAL P 16e47 + case L'𖹈': // MEDEFAIDRIN CAPITAL T 16e48 + case L'𖹉': // MEDEFAIDRIN CAPITAL G 16e49 + case L'𖹊': // MEDEFAIDRIN CAPITAL F 16e4a + case L'𖹋': // MEDEFAIDRIN CAPITAL I 16e4b + case L'𖹌': // MEDEFAIDRIN CAPITAL K 16e4c + case L'𖹍': // MEDEFAIDRIN CAPITAL A 16e4d + case L'𖹎': // MEDEFAIDRIN CAPITAL J 16e4e + case L'𖹏': // MEDEFAIDRIN CAPITAL E 16e4f + case L'𖹐': // MEDEFAIDRIN CAPITAL B 16e50 + case L'𖹑': // MEDEFAIDRIN CAPITAL C 16e51 + case L'𖹒': // MEDEFAIDRIN CAPITAL U 16e52 + case L'𖹓': // MEDEFAIDRIN CAPITAL YU 16e53 + case L'𖹔': // MEDEFAIDRIN CAPITAL L 16e54 + case L'𖹕': // MEDEFAIDRIN CAPITAL Q 16e55 + case L'𖹖': // MEDEFAIDRIN CAPITAL HP 16e56 + case L'𖹗': // MEDEFAIDRIN CAPITAL NY 16e57 + case L'𖹘': // MEDEFAIDRIN CAPITAL X 16e58 + case L'𖹙': // MEDEFAIDRIN CAPITAL D 16e59 + case L'𖹚': // MEDEFAIDRIN CAPITAL OE 16e5a + case L'𖹛': // MEDEFAIDRIN CAPITAL N 16e5b + case L'𖹜': // MEDEFAIDRIN CAPITAL R 16e5c + case L'𖹝': // MEDEFAIDRIN CAPITAL O 16e5d + case L'𖹞': // MEDEFAIDRIN CAPITAL AI 16e5e + case L'𖹟': // MEDEFAIDRIN CAPITAL Y 16e5f + case L'𝐀': // MATHEMATICAL BOLD CAPITAL A 1d400 + case L'𝐁': // MATHEMATICAL BOLD CAPITAL B 1d401 + case L'𝐂': // MATHEMATICAL BOLD CAPITAL C 1d402 + case L'𝐃': // MATHEMATICAL BOLD CAPITAL D 1d403 + case L'𝐄': // MATHEMATICAL BOLD CAPITAL E 1d404 + case L'𝐅': // MATHEMATICAL BOLD CAPITAL F 1d405 + case L'𝐆': // MATHEMATICAL BOLD CAPITAL G 1d406 + case L'𝐇': // MATHEMATICAL BOLD CAPITAL H 1d407 + case L'𝐈': // MATHEMATICAL BOLD CAPITAL I 1d408 + case L'𝐉': // MATHEMATICAL BOLD CAPITAL J 1d409 + case L'𝐊': // MATHEMATICAL BOLD CAPITAL K 1d40a + case L'𝐋': // MATHEMATICAL BOLD CAPITAL L 1d40b + case L'𝐌': // MATHEMATICAL BOLD CAPITAL M 1d40c + case L'𝐍': // MATHEMATICAL BOLD CAPITAL N 1d40d + case L'𝐎': // MATHEMATICAL BOLD CAPITAL O 1d40e + case L'𝐏': // MATHEMATICAL BOLD CAPITAL P 1d40f + case L'𝐐': // MATHEMATICAL BOLD CAPITAL Q 1d410 + case L'𝐑': // MATHEMATICAL BOLD CAPITAL R 1d411 + case L'𝐒': // MATHEMATICAL BOLD CAPITAL S 1d412 + case L'𝐓': // MATHEMATICAL BOLD CAPITAL T 1d413 + case L'𝐔': // MATHEMATICAL BOLD CAPITAL U 1d414 + case L'𝐕': // MATHEMATICAL BOLD CAPITAL V 1d415 + case L'𝐖': // MATHEMATICAL BOLD CAPITAL W 1d416 + case L'𝐗': // MATHEMATICAL BOLD CAPITAL X 1d417 + case L'𝐘': // MATHEMATICAL BOLD CAPITAL Y 1d418 + case L'𝐙': // MATHEMATICAL BOLD CAPITAL Z 1d419 + case L'𝐴': // MATHEMATICAL ITALIC CAPITAL A 1d434 + case L'𝐵': // MATHEMATICAL ITALIC CAPITAL B 1d435 + case L'𝐶': // MATHEMATICAL ITALIC CAPITAL C 1d436 + case L'𝐷': // MATHEMATICAL ITALIC CAPITAL D 1d437 + case L'𝐸': // MATHEMATICAL ITALIC CAPITAL E 1d438 + case L'𝐹': // MATHEMATICAL ITALIC CAPITAL F 1d439 + case L'𝐺': // MATHEMATICAL ITALIC CAPITAL G 1d43a + case L'𝐻': // MATHEMATICAL ITALIC CAPITAL H 1d43b + case L'𝐼': // MATHEMATICAL ITALIC CAPITAL I 1d43c + case L'𝐽': // MATHEMATICAL ITALIC CAPITAL J 1d43d + case L'𝐾': // MATHEMATICAL ITALIC CAPITAL K 1d43e + case L'𝐿': // MATHEMATICAL ITALIC CAPITAL L 1d43f + case L'𝑀': // MATHEMATICAL ITALIC CAPITAL M 1d440 + case L'𝑁': // MATHEMATICAL ITALIC CAPITAL N 1d441 + case L'𝑂': // MATHEMATICAL ITALIC CAPITAL O 1d442 + case L'𝑃': // MATHEMATICAL ITALIC CAPITAL P 1d443 + case L'𝑄': // MATHEMATICAL ITALIC CAPITAL Q 1d444 + case L'𝑅': // MATHEMATICAL ITALIC CAPITAL R 1d445 + case L'𝑆': // MATHEMATICAL ITALIC CAPITAL S 1d446 + case L'𝑇': // MATHEMATICAL ITALIC CAPITAL T 1d447 + case L'𝑈': // MATHEMATICAL ITALIC CAPITAL U 1d448 + case L'𝑉': // MATHEMATICAL ITALIC CAPITAL V 1d449 + case L'𝑊': // MATHEMATICAL ITALIC CAPITAL W 1d44a + case L'𝑋': // MATHEMATICAL ITALIC CAPITAL X 1d44b + case L'𝑌': // MATHEMATICAL ITALIC CAPITAL Y 1d44c + case L'𝑍': // MATHEMATICAL ITALIC CAPITAL Z 1d44d + case L'𝑨': // MATHEMATICAL BOLD ITALIC CAPITAL A 1d468 + case L'𝑩': // MATHEMATICAL BOLD ITALIC CAPITAL B 1d469 + case L'𝑪': // MATHEMATICAL BOLD ITALIC CAPITAL C 1d46a + case L'𝑫': // MATHEMATICAL BOLD ITALIC CAPITAL D 1d46b + case L'𝑬': // MATHEMATICAL BOLD ITALIC CAPITAL E 1d46c + case L'𝑭': // MATHEMATICAL BOLD ITALIC CAPITAL F 1d46d + case L'𝑮': // MATHEMATICAL BOLD ITALIC CAPITAL G 1d46e + case L'𝑯': // MATHEMATICAL BOLD ITALIC CAPITAL H 1d46f + case L'𝑰': // MATHEMATICAL BOLD ITALIC CAPITAL I 1d470 + case L'𝑱': // MATHEMATICAL BOLD ITALIC CAPITAL J 1d471 + case L'𝑲': // MATHEMATICAL BOLD ITALIC CAPITAL K 1d472 + case L'𝑳': // MATHEMATICAL BOLD ITALIC CAPITAL L 1d473 + case L'𝑴': // MATHEMATICAL BOLD ITALIC CAPITAL M 1d474 + case L'𝑵': // MATHEMATICAL BOLD ITALIC CAPITAL N 1d475 + case L'𝑶': // MATHEMATICAL BOLD ITALIC CAPITAL O 1d476 + case L'𝑷': // MATHEMATICAL BOLD ITALIC CAPITAL P 1d477 + case L'𝑸': // MATHEMATICAL BOLD ITALIC CAPITAL Q 1d478 + case L'𝑹': // MATHEMATICAL BOLD ITALIC CAPITAL R 1d479 + case L'𝑺': // MATHEMATICAL BOLD ITALIC CAPITAL S 1d47a + case L'𝑻': // MATHEMATICAL BOLD ITALIC CAPITAL T 1d47b + case L'𝑼': // MATHEMATICAL BOLD ITALIC CAPITAL U 1d47c + case L'𝑽': // MATHEMATICAL BOLD ITALIC CAPITAL V 1d47d + case L'𝑾': // MATHEMATICAL BOLD ITALIC CAPITAL W 1d47e + case L'𝑿': // MATHEMATICAL BOLD ITALIC CAPITAL X 1d47f + case L'𝒀': // MATHEMATICAL BOLD ITALIC CAPITAL Y 1d480 + case L'𝒁': // MATHEMATICAL BOLD ITALIC CAPITAL Z 1d481 + case L'𝒜': // MATHEMATICAL SCRIPT CAPITAL A 1d49c + case L'𝒞': // MATHEMATICAL SCRIPT CAPITAL C 1d49e + case L'𝒟': // MATHEMATICAL SCRIPT CAPITAL D 1d49f + case L'𝒢': // MATHEMATICAL SCRIPT CAPITAL G 1d4a2 + case L'𝒥': // MATHEMATICAL SCRIPT CAPITAL J 1d4a5 + case L'𝒦': // MATHEMATICAL SCRIPT CAPITAL K 1d4a6 + case L'𝒩': // MATHEMATICAL SCRIPT CAPITAL N 1d4a9 + case L'𝒪': // MATHEMATICAL SCRIPT CAPITAL O 1d4aa + case L'𝒫': // MATHEMATICAL SCRIPT CAPITAL P 1d4ab + case L'𝒬': // MATHEMATICAL SCRIPT CAPITAL Q 1d4ac + case L'𝒮': // MATHEMATICAL SCRIPT CAPITAL S 1d4ae + case L'𝒯': // MATHEMATICAL SCRIPT CAPITAL T 1d4af + case L'𝒰': // MATHEMATICAL SCRIPT CAPITAL U 1d4b0 + case L'𝒱': // MATHEMATICAL SCRIPT CAPITAL V 1d4b1 + case L'𝒲': // MATHEMATICAL SCRIPT CAPITAL W 1d4b2 + case L'𝒳': // MATHEMATICAL SCRIPT CAPITAL X 1d4b3 + case L'𝒴': // MATHEMATICAL SCRIPT CAPITAL Y 1d4b4 + case L'𝒵': // MATHEMATICAL SCRIPT CAPITAL Z 1d4b5 + case L'𝓐': // MATHEMATICAL BOLD SCRIPT CAPITAL A 1d4d0 + case L'𝓑': // MATHEMATICAL BOLD SCRIPT CAPITAL B 1d4d1 + case L'𝓒': // MATHEMATICAL BOLD SCRIPT CAPITAL C 1d4d2 + case L'𝓓': // MATHEMATICAL BOLD SCRIPT CAPITAL D 1d4d3 + case L'𝓔': // MATHEMATICAL BOLD SCRIPT CAPITAL E 1d4d4 + case L'𝓕': // MATHEMATICAL BOLD SCRIPT CAPITAL F 1d4d5 + case L'𝓖': // MATHEMATICAL BOLD SCRIPT CAPITAL G 1d4d6 + case L'𝓗': // MATHEMATICAL BOLD SCRIPT CAPITAL H 1d4d7 + case L'𝓘': // MATHEMATICAL BOLD SCRIPT CAPITAL I 1d4d8 + case L'𝓙': // MATHEMATICAL BOLD SCRIPT CAPITAL J 1d4d9 + case L'𝓚': // MATHEMATICAL BOLD SCRIPT CAPITAL K 1d4da + case L'𝓛': // MATHEMATICAL BOLD SCRIPT CAPITAL L 1d4db + case L'𝓜': // MATHEMATICAL BOLD SCRIPT CAPITAL M 1d4dc + case L'𝓝': // MATHEMATICAL BOLD SCRIPT CAPITAL N 1d4dd + case L'𝓞': // MATHEMATICAL BOLD SCRIPT CAPITAL O 1d4de + case L'𝓟': // MATHEMATICAL BOLD SCRIPT CAPITAL P 1d4df + case L'𝓠': // MATHEMATICAL BOLD SCRIPT CAPITAL Q 1d4e0 + case L'𝓡': // MATHEMATICAL BOLD SCRIPT CAPITAL R 1d4e1 + case L'𝓢': // MATHEMATICAL BOLD SCRIPT CAPITAL S 1d4e2 + case L'𝓣': // MATHEMATICAL BOLD SCRIPT CAPITAL T 1d4e3 + case L'𝓤': // MATHEMATICAL BOLD SCRIPT CAPITAL U 1d4e4 + case L'𝓥': // MATHEMATICAL BOLD SCRIPT CAPITAL V 1d4e5 + case L'𝓦': // MATHEMATICAL BOLD SCRIPT CAPITAL W 1d4e6 + case L'𝓧': // MATHEMATICAL BOLD SCRIPT CAPITAL X 1d4e7 + case L'𝓨': // MATHEMATICAL BOLD SCRIPT CAPITAL Y 1d4e8 + case L'𝓩': // MATHEMATICAL BOLD SCRIPT CAPITAL Z 1d4e9 + case L'𝔄': // MATHEMATICAL FRAKTUR CAPITAL A 1d504 + case L'𝔅': // MATHEMATICAL FRAKTUR CAPITAL B 1d505 + case L'𝔇': // MATHEMATICAL FRAKTUR CAPITAL D 1d507 + case L'𝔈': // MATHEMATICAL FRAKTUR CAPITAL E 1d508 + case L'𝔉': // MATHEMATICAL FRAKTUR CAPITAL F 1d509 + case L'𝔊': // MATHEMATICAL FRAKTUR CAPITAL G 1d50a + case L'𝔍': // MATHEMATICAL FRAKTUR CAPITAL J 1d50d + case L'𝔎': // MATHEMATICAL FRAKTUR CAPITAL K 1d50e + case L'𝔏': // MATHEMATICAL FRAKTUR CAPITAL L 1d50f + case L'𝔐': // MATHEMATICAL FRAKTUR CAPITAL M 1d510 + case L'𝔑': // MATHEMATICAL FRAKTUR CAPITAL N 1d511 + case L'𝔒': // MATHEMATICAL FRAKTUR CAPITAL O 1d512 + case L'𝔓': // MATHEMATICAL FRAKTUR CAPITAL P 1d513 + case L'𝔔': // MATHEMATICAL FRAKTUR CAPITAL Q 1d514 + case L'𝔖': // MATHEMATICAL FRAKTUR CAPITAL S 1d516 + case L'𝔗': // MATHEMATICAL FRAKTUR CAPITAL T 1d517 + case L'𝔘': // MATHEMATICAL FRAKTUR CAPITAL U 1d518 + case L'𝔙': // MATHEMATICAL FRAKTUR CAPITAL V 1d519 + case L'𝔚': // MATHEMATICAL FRAKTUR CAPITAL W 1d51a + case L'𝔛': // MATHEMATICAL FRAKTUR CAPITAL X 1d51b + case L'𝔜': // MATHEMATICAL FRAKTUR CAPITAL Y 1d51c + case L'𝔸': // MATHEMATICAL DOUBLE-STRUCK CAPITAL A 1d538 + case L'𝔹': // MATHEMATICAL DOUBLE-STRUCK CAPITAL B 1d539 + case L'𝔻': // MATHEMATICAL DOUBLE-STRUCK CAPITAL D 1d53b + case L'𝔼': // MATHEMATICAL DOUBLE-STRUCK CAPITAL E 1d53c + case L'𝔽': // MATHEMATICAL DOUBLE-STRUCK CAPITAL F 1d53d + case L'𝔾': // MATHEMATICAL DOUBLE-STRUCK CAPITAL G 1d53e + case L'𝕀': // MATHEMATICAL DOUBLE-STRUCK CAPITAL I 1d540 + case L'𝕁': // MATHEMATICAL DOUBLE-STRUCK CAPITAL J 1d541 + case L'𝕂': // MATHEMATICAL DOUBLE-STRUCK CAPITAL K 1d542 + case L'𝕃': // MATHEMATICAL DOUBLE-STRUCK CAPITAL L 1d543 + case L'𝕄': // MATHEMATICAL DOUBLE-STRUCK CAPITAL M 1d544 + case L'𝕆': // MATHEMATICAL DOUBLE-STRUCK CAPITAL O 1d546 + case L'𝕊': // MATHEMATICAL DOUBLE-STRUCK CAPITAL S 1d54a + case L'𝕋': // MATHEMATICAL DOUBLE-STRUCK CAPITAL T 1d54b + case L'𝕌': // MATHEMATICAL DOUBLE-STRUCK CAPITAL U 1d54c + case L'𝕍': // MATHEMATICAL DOUBLE-STRUCK CAPITAL V 1d54d + case L'𝕎': // MATHEMATICAL DOUBLE-STRUCK CAPITAL W 1d54e + case L'𝕏': // MATHEMATICAL DOUBLE-STRUCK CAPITAL X 1d54f + case L'𝕐': // MATHEMATICAL DOUBLE-STRUCK CAPITAL Y 1d550 + case L'𝕬': // MATHEMATICAL BOLD FRAKTUR CAPITAL A 1d56c + case L'𝕭': // MATHEMATICAL BOLD FRAKTUR CAPITAL B 1d56d + case L'𝕮': // MATHEMATICAL BOLD FRAKTUR CAPITAL C 1d56e + case L'𝕯': // MATHEMATICAL BOLD FRAKTUR CAPITAL D 1d56f + case L'𝕰': // MATHEMATICAL BOLD FRAKTUR CAPITAL E 1d570 + case L'𝕱': // MATHEMATICAL BOLD FRAKTUR CAPITAL F 1d571 + case L'𝕲': // MATHEMATICAL BOLD FRAKTUR CAPITAL G 1d572 + case L'𝕳': // MATHEMATICAL BOLD FRAKTUR CAPITAL H 1d573 + case L'𝕴': // MATHEMATICAL BOLD FRAKTUR CAPITAL I 1d574 + case L'𝕵': // MATHEMATICAL BOLD FRAKTUR CAPITAL J 1d575 + case L'𝕶': // MATHEMATICAL BOLD FRAKTUR CAPITAL K 1d576 + case L'𝕷': // MATHEMATICAL BOLD FRAKTUR CAPITAL L 1d577 + case L'𝕸': // MATHEMATICAL BOLD FRAKTUR CAPITAL M 1d578 + case L'𝕹': // MATHEMATICAL BOLD FRAKTUR CAPITAL N 1d579 + case L'𝕺': // MATHEMATICAL BOLD FRAKTUR CAPITAL O 1d57a + case L'𝕻': // MATHEMATICAL BOLD FRAKTUR CAPITAL P 1d57b + case L'𝕼': // MATHEMATICAL BOLD FRAKTUR CAPITAL Q 1d57c + case L'𝕽': // MATHEMATICAL BOLD FRAKTUR CAPITAL R 1d57d + case L'𝕾': // MATHEMATICAL BOLD FRAKTUR CAPITAL S 1d57e + case L'𝕿': // MATHEMATICAL BOLD FRAKTUR CAPITAL T 1d57f + case L'𝖀': // MATHEMATICAL BOLD FRAKTUR CAPITAL U 1d580 + case L'𝖁': // MATHEMATICAL BOLD FRAKTUR CAPITAL V 1d581 + case L'𝖂': // MATHEMATICAL BOLD FRAKTUR CAPITAL W 1d582 + case L'𝖃': // MATHEMATICAL BOLD FRAKTUR CAPITAL X 1d583 + case L'𝖄': // MATHEMATICAL BOLD FRAKTUR CAPITAL Y 1d584 + case L'𝖅': // MATHEMATICAL BOLD FRAKTUR CAPITAL Z 1d585 + case L'𝖠': // MATHEMATICAL SANS CAPITAL A 1d5a0 + case L'𝖡': // MATHEMATICAL SANS CAPITAL B 1d5a1 + case L'𝖢': // MATHEMATICAL SANS CAPITAL C 1d5a2 + case L'𝖣': // MATHEMATICAL SANS CAPITAL D 1d5a3 + case L'𝖤': // MATHEMATICAL SANS CAPITAL E 1d5a4 + case L'𝖥': // MATHEMATICAL SANS CAPITAL F 1d5a5 + case L'𝖦': // MATHEMATICAL SANS CAPITAL G 1d5a6 + case L'𝖧': // MATHEMATICAL SANS CAPITAL H 1d5a7 + case L'𝖨': // MATHEMATICAL SANS CAPITAL I 1d5a8 + case L'𝖩': // MATHEMATICAL SANS CAPITAL J 1d5a9 + case L'𝖪': // MATHEMATICAL SANS CAPITAL K 1d5aa + case L'𝖫': // MATHEMATICAL SANS CAPITAL L 1d5ab + case L'𝖬': // MATHEMATICAL SANS CAPITAL M 1d5ac + case L'𝖭': // MATHEMATICAL SANS CAPITAL N 1d5ad + case L'𝖮': // MATHEMATICAL SANS CAPITAL O 1d5ae + case L'𝖯': // MATHEMATICAL SANS CAPITAL P 1d5af + case L'𝖰': // MATHEMATICAL SANS CAPITAL Q 1d5b0 + case L'𝖱': // MATHEMATICAL SANS CAPITAL R 1d5b1 + case L'𝖲': // MATHEMATICAL SANS CAPITAL S 1d5b2 + case L'𝖳': // MATHEMATICAL SANS CAPITAL T 1d5b3 + case L'𝖴': // MATHEMATICAL SANS CAPITAL U 1d5b4 + case L'𝖵': // MATHEMATICAL SANS CAPITAL V 1d5b5 + case L'𝖶': // MATHEMATICAL SANS CAPITAL W 1d5b6 + case L'𝖷': // MATHEMATICAL SANS CAPITAL X 1d5b7 + case L'𝖸': // MATHEMATICAL SANS CAPITAL Y 1d5b8 + case L'𝖹': // MATHEMATICAL SANS CAPITAL Z 1d5b9 + case L'𝗔': // MATHEMATICAL SANS BOLD CAPITAL A 1d5d4 + case L'𝗕': // MATHEMATICAL SANS BOLD CAPITAL B 1d5d5 + case L'𝗖': // MATHEMATICAL SANS BOLD CAPITAL C 1d5d6 + case L'𝗗': // MATHEMATICAL SANS BOLD CAPITAL D 1d5d7 + case L'𝗘': // MATHEMATICAL SANS BOLD CAPITAL E 1d5d8 + case L'𝗙': // MATHEMATICAL SANS BOLD CAPITAL F 1d5d9 + case L'𝗚': // MATHEMATICAL SANS BOLD CAPITAL G 1d5da + case L'𝗛': // MATHEMATICAL SANS BOLD CAPITAL H 1d5db + case L'𝗜': // MATHEMATICAL SANS BOLD CAPITAL I 1d5dc + case L'𝗝': // MATHEMATICAL SANS BOLD CAPITAL J 1d5dd + case L'𝗞': // MATHEMATICAL SANS BOLD CAPITAL K 1d5de + case L'𝗟': // MATHEMATICAL SANS BOLD CAPITAL L 1d5df + case L'𝗠': // MATHEMATICAL SANS BOLD CAPITAL M 1d5e0 + case L'𝗡': // MATHEMATICAL SANS BOLD CAPITAL N 1d5e1 + case L'𝗢': // MATHEMATICAL SANS BOLD CAPITAL O 1d5e2 + case L'𝗣': // MATHEMATICAL SANS BOLD CAPITAL P 1d5e3 + case L'𝗤': // MATHEMATICAL SANS BOLD CAPITAL Q 1d5e4 + case L'𝗥': // MATHEMATICAL SANS BOLD CAPITAL R 1d5e5 + case L'𝗦': // MATHEMATICAL SANS BOLD CAPITAL S 1d5e6 + case L'𝗧': // MATHEMATICAL SANS BOLD CAPITAL T 1d5e7 + case L'𝗨': // MATHEMATICAL SANS BOLD CAPITAL U 1d5e8 + case L'𝗩': // MATHEMATICAL SANS BOLD CAPITAL V 1d5e9 + case L'𝗪': // MATHEMATICAL SANS BOLD CAPITAL W 1d5ea + case L'𝗫': // MATHEMATICAL SANS BOLD CAPITAL X 1d5eb + case L'𝗬': // MATHEMATICAL SANS BOLD CAPITAL Y 1d5ec + case L'𝗭': // MATHEMATICAL SANS BOLD CAPITAL Z 1d5ed + case L'𝘈': // MATHEMATICAL SANS ITALIC CAPITAL A 1d608 + case L'𝘉': // MATHEMATICAL SANS ITALIC CAPITAL B 1d609 + case L'𝘊': // MATHEMATICAL SANS ITALIC CAPITAL C 1d60a + case L'𝘋': // MATHEMATICAL SANS ITALIC CAPITAL D 1d60b + case L'𝘌': // MATHEMATICAL SANS ITALIC CAPITAL E 1d60c + case L'𝘍': // MATHEMATICAL SANS ITALIC CAPITAL F 1d60d + case L'𝘎': // MATHEMATICAL SANS ITALIC CAPITAL G 1d60e + case L'𝘏': // MATHEMATICAL SANS ITALIC CAPITAL H 1d60f + case L'𝘐': // MATHEMATICAL SANS ITALIC CAPITAL I 1d610 + case L'𝘑': // MATHEMATICAL SANS ITALIC CAPITAL J 1d611 + case L'𝘒': // MATHEMATICAL SANS ITALIC CAPITAL K 1d612 + case L'𝘓': // MATHEMATICAL SANS ITALIC CAPITAL L 1d613 + case L'𝘔': // MATHEMATICAL SANS ITALIC CAPITAL M 1d614 + case L'𝘕': // MATHEMATICAL SANS ITALIC CAPITAL N 1d615 + case L'𝘖': // MATHEMATICAL SANS ITALIC CAPITAL O 1d616 + case L'𝘗': // MATHEMATICAL SANS ITALIC CAPITAL P 1d617 + case L'𝘘': // MATHEMATICAL SANS ITALIC CAPITAL Q 1d618 + case L'𝘙': // MATHEMATICAL SANS ITALIC CAPITAL R 1d619 + case L'𝘚': // MATHEMATICAL SANS ITALIC CAPITAL S 1d61a + case L'𝘛': // MATHEMATICAL SANS ITALIC CAPITAL T 1d61b + case L'𝘜': // MATHEMATICAL SANS ITALIC CAPITAL U 1d61c + case L'𝘝': // MATHEMATICAL SANS ITALIC CAPITAL V 1d61d + case L'𝘞': // MATHEMATICAL SANS ITALIC CAPITAL W 1d61e + case L'𝘟': // MATHEMATICAL SANS ITALIC CAPITAL X 1d61f + case L'𝘠': // MATHEMATICAL SANS ITALIC CAPITAL Y 1d620 + case L'𝘡': // MATHEMATICAL SANS ITALIC CAPITAL Z 1d621 + case L'𝘼': // MATHEMATICAL SANS BOLD ITALIC CAPITAL A 1d63c + case L'𝘽': // MATHEMATICAL SANS BOLD ITALIC CAPITAL B 1d63d + case L'𝘾': // MATHEMATICAL SANS BOLD ITALIC CAPITAL C 1d63e + case L'𝘿': // MATHEMATICAL SANS BOLD ITALIC CAPITAL D 1d63f + case L'𝙀': // MATHEMATICAL SANS BOLD ITALIC CAPITAL E 1d640 + case L'𝙁': // MATHEMATICAL SANS BOLD ITALIC CAPITAL F 1d641 + case L'𝙂': // MATHEMATICAL SANS BOLD ITALIC CAPITAL G 1d642 + case L'𝙃': // MATHEMATICAL SANS BOLD ITALIC CAPITAL H 1d643 + case L'𝙄': // MATHEMATICAL SANS BOLD ITALIC CAPITAL I 1d644 + case L'𝙅': // MATHEMATICAL SANS BOLD ITALIC CAPITAL J 1d645 + case L'𝙆': // MATHEMATICAL SANS BOLD ITALIC CAPITAL K 1d646 + case L'𝙇': // MATHEMATICAL SANS BOLD ITALIC CAPITAL L 1d647 + case L'𝙈': // MATHEMATICAL SANS BOLD ITALIC CAPITAL M 1d648 + case L'𝙉': // MATHEMATICAL SANS BOLD ITALIC CAPITAL N 1d649 + case L'𝙊': // MATHEMATICAL SANS BOLD ITALIC CAPITAL O 1d64a + case L'𝙋': // MATHEMATICAL SANS BOLD ITALIC CAPITAL P 1d64b + case L'𝙌': // MATHEMATICAL SANS BOLD ITALIC CAPITAL Q 1d64c + case L'𝙍': // MATHEMATICAL SANS BOLD ITALIC CAPITAL R 1d64d + case L'𝙎': // MATHEMATICAL SANS BOLD ITALIC CAPITAL S 1d64e + case L'𝙏': // MATHEMATICAL SANS BOLD ITALIC CAPITAL T 1d64f + case L'𝙐': // MATHEMATICAL SANS BOLD ITALIC CAPITAL U 1d650 + case L'𝙑': // MATHEMATICAL SANS BOLD ITALIC CAPITAL V 1d651 + case L'𝙒': // MATHEMATICAL SANS BOLD ITALIC CAPITAL W 1d652 + case L'𝙓': // MATHEMATICAL SANS BOLD ITALIC CAPITAL X 1d653 + case L'𝙔': // MATHEMATICAL SANS BOLD ITALIC CAPITAL Y 1d654 + case L'𝙕': // MATHEMATICAL SANS BOLD ITALIC CAPITAL Z 1d655 + case L'𝙰': // MATHEMATICAL MONOSPACE CAPITAL A 1d670 + case L'𝙱': // MATHEMATICAL MONOSPACE CAPITAL B 1d671 + case L'𝙲': // MATHEMATICAL MONOSPACE CAPITAL C 1d672 + case L'𝙳': // MATHEMATICAL MONOSPACE CAPITAL D 1d673 + case L'𝙴': // MATHEMATICAL MONOSPACE CAPITAL E 1d674 + case L'𝙵': // MATHEMATICAL MONOSPACE CAPITAL F 1d675 + case L'𝙶': // MATHEMATICAL MONOSPACE CAPITAL G 1d676 + case L'𝙷': // MATHEMATICAL MONOSPACE CAPITAL H 1d677 + case L'𝙸': // MATHEMATICAL MONOSPACE CAPITAL I 1d678 + case L'𝙹': // MATHEMATICAL MONOSPACE CAPITAL J 1d679 + case L'𝙺': // MATHEMATICAL MONOSPACE CAPITAL K 1d67a + case L'𝙻': // MATHEMATICAL MONOSPACE CAPITAL L 1d67b + case L'𝙼': // MATHEMATICAL MONOSPACE CAPITAL M 1d67c + case L'𝙽': // MATHEMATICAL MONOSPACE CAPITAL N 1d67d + case L'𝙾': // MATHEMATICAL MONOSPACE CAPITAL O 1d67e + case L'𝙿': // MATHEMATICAL MONOSPACE CAPITAL P 1d67f + case L'𝚀': // MATHEMATICAL MONOSPACE CAPITAL Q 1d680 + case L'𝚁': // MATHEMATICAL MONOSPACE CAPITAL R 1d681 + case L'𝚂': // MATHEMATICAL MONOSPACE CAPITAL S 1d682 + case L'𝚃': // MATHEMATICAL MONOSPACE CAPITAL T 1d683 + case L'𝚄': // MATHEMATICAL MONOSPACE CAPITAL U 1d684 + case L'𝚅': // MATHEMATICAL MONOSPACE CAPITAL V 1d685 + case L'𝚆': // MATHEMATICAL MONOSPACE CAPITAL W 1d686 + case L'𝚇': // MATHEMATICAL MONOSPACE CAPITAL X 1d687 + case L'𝚈': // MATHEMATICAL MONOSPACE CAPITAL Y 1d688 + case L'𝚉': // MATHEMATICAL MONOSPACE CAPITAL Z 1d689 + case L'𝚨': // MATHEMATICAL BOLD CAPITAL ALPHA 1d6a8 + case L'𝚩': // MATHEMATICAL BOLD CAPITAL BETA 1d6a9 + case L'𝚪': // MATHEMATICAL BOLD CAPITAL GAMMA 1d6aa + case L'𝚫': // MATHEMATICAL BOLD CAPITAL DELTA 1d6ab + case L'𝚬': // MATHEMATICAL BOLD CAPITAL EPSILON 1d6ac + case L'𝚭': // MATHEMATICAL BOLD CAPITAL ZETA 1d6ad + case L'𝚮': // MATHEMATICAL BOLD CAPITAL ETA 1d6ae + case L'𝚯': // MATHEMATICAL BOLD CAPITAL THETA 1d6af + case L'𝚰': // MATHEMATICAL BOLD CAPITAL IOTA 1d6b0 + case L'𝚱': // MATHEMATICAL BOLD CAPITAL KAPPA 1d6b1 + case L'𝚲': // MATHEMATICAL BOLD CAPITAL LAMDA 1d6b2 + case L'𝚳': // MATHEMATICAL BOLD CAPITAL MU 1d6b3 + case L'𝚴': // MATHEMATICAL BOLD CAPITAL NU 1d6b4 + case L'𝚵': // MATHEMATICAL BOLD CAPITAL XI 1d6b5 + case L'𝚶': // MATHEMATICAL BOLD CAPITAL OMICRON 1d6b6 + case L'𝚷': // MATHEMATICAL BOLD CAPITAL PI 1d6b7 + case L'𝚸': // MATHEMATICAL BOLD CAPITAL RHO 1d6b8 + case L'𝚹': // MATHEMATICAL BOLD CAPITAL THETA SYMBOL 1d6b9 + case L'𝚺': // MATHEMATICAL BOLD CAPITAL SIGMA 1d6ba + case L'𝚻': // MATHEMATICAL BOLD CAPITAL TAU 1d6bb + case L'𝚼': // MATHEMATICAL BOLD CAPITAL UPSILON 1d6bc + case L'𝚽': // MATHEMATICAL BOLD CAPITAL PHI 1d6bd + case L'𝚾': // MATHEMATICAL BOLD CAPITAL CHI 1d6be + case L'𝚿': // MATHEMATICAL BOLD CAPITAL PSI 1d6bf + case L'𝛀': // MATHEMATICAL BOLD CAPITAL OMEGA 1d6c0 + case L'𝛢': // MATHEMATICAL ITALIC CAPITAL ALPHA 1d6e2 + case L'𝛣': // MATHEMATICAL ITALIC CAPITAL BETA 1d6e3 + case L'𝛤': // MATHEMATICAL ITALIC CAPITAL GAMMA 1d6e4 + case L'𝛥': // MATHEMATICAL ITALIC CAPITAL DELTA 1d6e5 + case L'𝛦': // MATHEMATICAL ITALIC CAPITAL EPSILON 1d6e6 + case L'𝛧': // MATHEMATICAL ITALIC CAPITAL ZETA 1d6e7 + case L'𝛨': // MATHEMATICAL ITALIC CAPITAL ETA 1d6e8 + case L'𝛩': // MATHEMATICAL ITALIC CAPITAL THETA 1d6e9 + case L'𝛪': // MATHEMATICAL ITALIC CAPITAL IOTA 1d6ea + case L'𝛫': // MATHEMATICAL ITALIC CAPITAL KAPPA 1d6eb + case L'𝛬': // MATHEMATICAL ITALIC CAPITAL LAMDA 1d6ec + case L'𝛭': // MATHEMATICAL ITALIC CAPITAL MU 1d6ed + case L'𝛮': // MATHEMATICAL ITALIC CAPITAL NU 1d6ee + case L'𝛯': // MATHEMATICAL ITALIC CAPITAL XI 1d6ef + case L'𝛰': // MATHEMATICAL ITALIC CAPITAL OMICRON 1d6f0 + case L'𝛱': // MATHEMATICAL ITALIC CAPITAL PI 1d6f1 + case L'𝛲': // MATHEMATICAL ITALIC CAPITAL RHO 1d6f2 + case L'𝛳': // MATHEMATICAL ITALIC CAPITAL THETA SYMBOL 1d6f3 + case L'𝛴': // MATHEMATICAL ITALIC CAPITAL SIGMA 1d6f4 + case L'𝛵': // MATHEMATICAL ITALIC CAPITAL TAU 1d6f5 + case L'𝛶': // MATHEMATICAL ITALIC CAPITAL UPSILON 1d6f6 + case L'𝛷': // MATHEMATICAL ITALIC CAPITAL PHI 1d6f7 + case L'𝛸': // MATHEMATICAL ITALIC CAPITAL CHI 1d6f8 + case L'𝛹': // MATHEMATICAL ITALIC CAPITAL PSI 1d6f9 + case L'𝛺': // MATHEMATICAL ITALIC CAPITAL OMEGA 1d6fa + case L'𝜜': // MATHEMATICAL BOLD ITALIC CAPITAL ALPHA 1d71c + case L'𝜝': // MATHEMATICAL BOLD ITALIC CAPITAL BETA 1d71d + case L'𝜞': // MATHEMATICAL BOLD ITALIC CAPITAL GAMMA 1d71e + case L'𝜟': // MATHEMATICAL BOLD ITALIC CAPITAL DELTA 1d71f + case L'𝜠': // MATHEMATICAL BOLD ITALIC CAPITAL EPSILON 1d720 + case L'𝜡': // MATHEMATICAL BOLD ITALIC CAPITAL ZETA 1d721 + case L'𝜢': // MATHEMATICAL BOLD ITALIC CAPITAL ETA 1d722 + case L'𝜣': // MATHEMATICAL BOLD ITALIC CAPITAL THETA 1d723 + case L'𝜤': // MATHEMATICAL BOLD ITALIC CAPITAL IOTA 1d724 + case L'𝜥': // MATHEMATICAL BOLD ITALIC CAPITAL KAPPA 1d725 + case L'𝜦': // MATHEMATICAL BOLD ITALIC CAPITAL LAMDA 1d726 + case L'𝜧': // MATHEMATICAL BOLD ITALIC CAPITAL MU 1d727 + case L'𝜨': // MATHEMATICAL BOLD ITALIC CAPITAL NU 1d728 + case L'𝜩': // MATHEMATICAL BOLD ITALIC CAPITAL XI 1d729 + case L'𝜪': // MATHEMATICAL BOLD ITALIC CAPITAL OMICRON 1d72a + case L'𝜫': // MATHEMATICAL BOLD ITALIC CAPITAL PI 1d72b + case L'𝜬': // MATHEMATICAL BOLD ITALIC CAPITAL RHO 1d72c + case L'𝜭': // MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL 1d72d + case L'𝜮': // MATHEMATICAL BOLD ITALIC CAPITAL SIGMA 1d72e + case L'𝜯': // MATHEMATICAL BOLD ITALIC CAPITAL TAU 1d72f + case L'𝜰': // MATHEMATICAL BOLD ITALIC CAPITAL UPSILON 1d730 + case L'𝜱': // MATHEMATICAL BOLD ITALIC CAPITAL PHI 1d731 + case L'𝜲': // MATHEMATICAL BOLD ITALIC CAPITAL CHI 1d732 + case L'𝜳': // MATHEMATICAL BOLD ITALIC CAPITAL PSI 1d733 + case L'𝜴': // MATHEMATICAL BOLD ITALIC CAPITAL OMEGA 1d734 + case L'𝝖': // MATHEMATICAL SANS BOLD CAPITAL ALPHA 1d756 + case L'𝝗': // MATHEMATICAL SANS BOLD CAPITAL BETA 1d757 + case L'𝝘': // MATHEMATICAL SANS BOLD CAPITAL GAMMA 1d758 + case L'𝝙': // MATHEMATICAL SANS BOLD CAPITAL DELTA 1d759 + case L'𝝚': // MATHEMATICAL SANS BOLD CAPITAL EPSILON 1d75a + case L'𝝛': // MATHEMATICAL SANS BOLD CAPITAL ZETA 1d75b + case L'𝝜': // MATHEMATICAL SANS BOLD CAPITAL ETA 1d75c + case L'𝝝': // MATHEMATICAL SANS BOLD CAPITAL THETA 1d75d + case L'𝝞': // MATHEMATICAL SANS BOLD CAPITAL IOTA 1d75e + case L'𝝟': // MATHEMATICAL SANS BOLD CAPITAL KAPPA 1d75f + case L'𝝠': // MATHEMATICAL SANS BOLD CAPITAL LAMDA 1d760 + case L'𝝡': // MATHEMATICAL SANS BOLD CAPITAL MU 1d761 + case L'𝝢': // MATHEMATICAL SANS BOLD CAPITAL NU 1d762 + case L'𝝣': // MATHEMATICAL SANS BOLD CAPITAL XI 1d763 + case L'𝝤': // MATHEMATICAL SANS BOLD CAPITAL OMICRON 1d764 + case L'𝝥': // MATHEMATICAL SANS BOLD CAPITAL PI 1d765 + case L'𝝦': // MATHEMATICAL SANS BOLD CAPITAL RHO 1d766 + case L'𝝧': // MATHEMATICAL SANS BOLD CAPITAL THETA SYMBOL 1d767 + case L'𝝨': // MATHEMATICAL SANS BOLD CAPITAL SIGMA 1d768 + case L'𝝩': // MATHEMATICAL SANS BOLD CAPITAL TAU 1d769 + case L'𝝪': // MATHEMATICAL SANS BOLD CAPITAL UPSILON 1d76a + case L'𝝫': // MATHEMATICAL SANS BOLD CAPITAL PHI 1d76b + case L'𝝬': // MATHEMATICAL SANS BOLD CAPITAL CHI 1d76c + case L'𝝭': // MATHEMATICAL SANS BOLD CAPITAL PSI 1d76d + case L'𝝮': // MATHEMATICAL SANS BOLD CAPITAL OMEGA 1d76e + case L'𝞐': // MATHEMATICAL SANS BOLD ITALIC CAPITAL ALPHA 1d790 + case L'𝞑': // MATHEMATICAL SANS BOLD ITALIC CAPITAL BETA 1d791 + case L'𝞒': // MATHEMATICAL SANS BOLD ITALIC CAPITAL GAMMA 1d792 + case L'𝞓': // MATHEMATICAL SANS BOLD ITALIC CAPITAL DELTA 1d793 + case L'𝞔': // MATHEMATICAL SANS BOLD ITALIC CAPITAL EPSILON 1d794 + case L'𝞕': // MATHEMATICAL SANS BOLD ITALIC CAPITAL ZETA 1d795 + case L'𝞖': // MATHEMATICAL SANS BOLD ITALIC CAPITAL ETA 1d796 + case L'𝞗': // MATHEMATICAL SANS BOLD ITALIC CAPITAL THETA 1d797 + case L'𝞘': // MATHEMATICAL SANS BOLD ITALIC CAPITAL IOTA 1d798 + case L'𝞙': // MATHEMATICAL SANS BOLD ITALIC CAPITAL KAPPA 1d799 + case L'𝞚': // MATHEMATICAL SANS BOLD ITALIC CAPITAL LAMDA 1d79a + case L'𝞛': // MATHEMATICAL SANS BOLD ITALIC CAPITAL MU 1d79b + case L'𝞜': // MATHEMATICAL SANS BOLD ITALIC CAPITAL NU 1d79c + case L'𝞝': // MATHEMATICAL SANS BOLD ITALIC CAPITAL XI 1d79d + case L'𝞞': // MATHEMATICAL SANS BOLD ITALIC CAPITAL OMICRON 1d79e + case L'𝞟': // MATHEMATICAL SANS BOLD ITALIC CAPITAL PI 1d79f + case L'𝞠': // MATHEMATICAL SANS BOLD ITALIC CAPITAL RHO 1d7a0 + case L'𝞡': // MATHEMATICAL SANS BOLD ITALIC CAPITAL THETA SYMBOL 1d7a1 + case L'𝞢': // MATHEMATICAL SANS BOLD ITALIC CAPITAL SIGMA 1d7a2 + case L'𝞣': // MATHEMATICAL SANS BOLD ITALIC CAPITAL TAU 1d7a3 + case L'𝞤': // MATHEMATICAL SANS BOLD ITALIC CAPITAL UPSILON 1d7a4 + case L'𝞥': // MATHEMATICAL SANS BOLD ITALIC CAPITAL PHI 1d7a5 + case L'𝞦': // MATHEMATICAL SANS BOLD ITALIC CAPITAL CHI 1d7a6 + case L'𝞧': // MATHEMATICAL SANS BOLD ITALIC CAPITAL PSI 1d7a7 + case L'𝞨': // MATHEMATICAL SANS BOLD ITALIC CAPITAL OMEGA 1d7a8 + case L'𝟊': // MATHEMATICAL BOLD CAPITAL DIGAMMA 1d7ca + case L'𞤀': // ADLAM CAPITAL ALIF 1e900 + case L'𞤁': // ADLAM CAPITAL DAALI 1e901 + case L'𞤂': // ADLAM CAPITAL LAAM 1e902 + case L'𞤃': // ADLAM CAPITAL MIIM 1e903 + case L'𞤄': // ADLAM CAPITAL BA 1e904 + case L'𞤅': // ADLAM CAPITAL SINNYIIYHE 1e905 + case L'𞤆': // ADLAM CAPITAL PE 1e906 + case L'𞤇': // ADLAM CAPITAL BHE 1e907 + case L'𞤈': // ADLAM CAPITAL RA 1e908 + case L'𞤉': // ADLAM CAPITAL E 1e909 + case L'𞤊': // ADLAM CAPITAL FA 1e90a + case L'𞤋': // ADLAM CAPITAL I 1e90b + case L'𞤌': // ADLAM CAPITAL O 1e90c + case L'𞤍': // ADLAM CAPITAL DHA 1e90d + case L'𞤎': // ADLAM CAPITAL YHE 1e90e + case L'𞤏': // ADLAM CAPITAL WAW 1e90f + case L'𞤐': // ADLAM CAPITAL NUN 1e910 + case L'𞤑': // ADLAM CAPITAL KAF 1e911 + case L'𞤒': // ADLAM CAPITAL YA 1e912 + case L'𞤓': // ADLAM CAPITAL U 1e913 + case L'𞤔': // ADLAM CAPITAL JIIM 1e914 + case L'𞤕': // ADLAM CAPITAL CHI 1e915 + case L'𞤖': // ADLAM CAPITAL HA 1e916 + case L'𞤗': // ADLAM CAPITAL QAAF 1e917 + case L'𞤘': // ADLAM CAPITAL GA 1e918 + case L'𞤙': // ADLAM CAPITAL NYA 1e919 + case L'𞤚': // ADLAM CAPITAL TU 1e91a + case L'𞤛': // ADLAM CAPITAL NHA 1e91b + case L'𞤜': // ADLAM CAPITAL VA 1e91c + case L'𞤝': // ADLAM CAPITAL KHA 1e91d + case L'𞤞': // ADLAM CAPITAL GBE 1e91e + case L'𞤟': // ADLAM CAPITAL ZAL 1e91f + case L'𞤠': // ADLAM CAPITAL KPO 1e920 + case L'𞤡': // ADLAM CAPITAL SHA 1e921 + return 1; + default: + return 0; + } } diff --git a/libc/str/iswxdigit.c b/libc/str/iswxdigit.c index 765b1be3..5abc42c3 100644 --- a/libc/str/iswxdigit.c +++ b/libc/str/iswxdigit.c @@ -18,6 +18,10 @@ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/str/str.h" -int iswxdigit(wint_t wc) { - return isxdigit(wc); +/** + * Returns nonzero if c is ascii hex digit. + */ +int iswxdigit(wint_t c) { + return ('0' <= c && c <= '9') || ('A' <= c && c <= 'F') || + ('a' <= c && c <= 'f'); } diff --git a/libc/str/isxdigit.c b/libc/str/isxdigit.c index 64f0c23a..2aae1c04 100644 --- a/libc/str/isxdigit.c +++ b/libc/str/isxdigit.c @@ -16,6 +16,9 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/assert.h" +#include "libc/calls/calls.h" +#include "libc/limits.h" #include "libc/str/str.h" /** diff --git a/libc/str/str.mk b/libc/str/str.mk index 7dfdd48c..83eaeb72 100644 --- a/libc/str/str.mk +++ b/libc/str/str.mk @@ -62,6 +62,12 @@ o/$(MODE)/libc/str/getziplfileuncompressedsize.o: \ OVERRIDE_CFLAGS += \ -Os +o/$(MODE)/libc/str/iswpunct.o \ +o/$(MODE)/libc/str/iswupper.o \ +o/$(MODE)/libc/str/iswlower.o: \ + OVERRIDE_CFLAGS += \ + -fno-jump-tables + LIBC_STR_LIBS = $(foreach x,$(LIBC_STR_ARTIFACTS),$($(x))) LIBC_STR_SRCS = $(foreach x,$(LIBC_STR_ARTIFACTS),$($(x)_SRCS)) LIBC_STR_HDRS = $(foreach x,$(LIBC_STR_ARTIFACTS),$($(x)_HDRS)) diff --git a/libc/str/strrchr.c b/libc/str/strrchr.c index e5596d58..a375aa1e 100644 --- a/libc/str/strrchr.c +++ b/libc/str/strrchr.c @@ -26,4 +26,6 @@ * @return address of last c in s, or NULL if not found * @asyncsignalsafe */ -char *(strrchr)(const char *s, int c) { return memrchr(s, c, strlen(s)); } +char *strrchr(const char *s, int c) { + return memrchr(s, c, strlen(s)); +} diff --git a/libc/str/tolower.c b/libc/str/tolower.c index a3ad8fc4..7b0d7b8a 100644 --- a/libc/str/tolower.c +++ b/libc/str/tolower.c @@ -19,7 +19,7 @@ #include "libc/str/str.h" /** - * Converts character to lower case. + * Converts character to ascii lower case. */ int tolower(int c) { return 'A' <= c && c <= 'Z' ? c + ('a' - 'A') : c; diff --git a/libc/str/towlower.c b/libc/str/towlower.c index 9c1c3781..848f3b4c 100644 --- a/libc/str/towlower.c +++ b/libc/str/towlower.c @@ -1,7 +1,7 @@ /*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ │vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ ╞══════════════════════════════════════════════════════════════════════════════╡ -│ Copyright 2020 Justine Alexandra Roberts Tunney │ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ │ │ │ Permission to use, copy, modify, and/or distribute this software for │ │ any purpose with or without fee is hereby granted, provided that the │ @@ -16,11 +16,1649 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/macros.internal.h" #include "libc/str/str.h" +#include "libc/dce.h" + +static const char16_t kUpperToLower[][2] = { + {u'À', u'à'}, // 00c0 → 00e0 + {u'Á', u'á'}, // 00c1 → 00e1 + {u'Â', u'â'}, // 00c2 → 00e2 + {u'Ã', u'ã'}, // 00c3 → 00e3 + {u'Ä', u'ä'}, // 00c4 → 00e4 + {u'Å', u'å'}, // 00c5 → 00e5 + {u'Æ', u'æ'}, // 00c6 → 00e6 + {u'Ç', u'ç'}, // 00c7 → 00e7 + {u'È', u'è'}, // 00c8 → 00e8 + {u'É', u'é'}, // 00c9 → 00e9 + {u'Ê', u'ê'}, // 00ca → 00ea + {u'Ë', u'ë'}, // 00cb → 00eb + {u'Ì', u'ì'}, // 00cc → 00ec + {u'Í', u'í'}, // 00cd → 00ed + {u'Î', u'î'}, // 00ce → 00ee + {u'Ï', u'ï'}, // 00cf → 00ef + {u'Ð', u'ð'}, // 00d0 → 00f0 + {u'Ñ', u'ñ'}, // 00d1 → 00f1 + {u'Ò', u'ò'}, // 00d2 → 00f2 + {u'Ó', u'ó'}, // 00d3 → 00f3 + {u'Ô', u'ô'}, // 00d4 → 00f4 + {u'Õ', u'õ'}, // 00d5 → 00f5 + {u'Ö', u'ö'}, // 00d6 → 00f6 + {u'Ø', u'ø'}, // 00d8 → 00f8 + {u'Ù', u'ù'}, // 00d9 → 00f9 + {u'Ú', u'ú'}, // 00da → 00fa + {u'Û', u'û'}, // 00db → 00fb + {u'Ü', u'ü'}, // 00dc → 00fc + {u'Ý', u'ý'}, // 00dd → 00fd + {u'Þ', u'þ'}, // 00de → 00fe +#ifndef TINY + {u'Ā', u'ā'}, // 0100 → 0101 + {u'Ă', u'ă'}, // 0102 → 0103 + {u'Ą', u'ą'}, // 0104 → 0105 + {u'Ć', u'ć'}, // 0106 → 0107 + {u'Ĉ', u'ĉ'}, // 0108 → 0109 + {u'Ċ', u'ċ'}, // 010a → 010b + {u'Č', u'č'}, // 010c → 010d + {u'Ď', u'ď'}, // 010e → 010f + {u'Đ', u'đ'}, // 0110 → 0111 + {u'Ē', u'ē'}, // 0112 → 0113 + {u'Ĕ', u'ĕ'}, // 0114 → 0115 + {u'Ė', u'ė'}, // 0116 → 0117 + {u'Ę', u'ę'}, // 0118 → 0119 + {u'Ě', u'ě'}, // 011a → 011b + {u'Ĝ', u'ĝ'}, // 011c → 011d + {u'Ğ', u'ğ'}, // 011e → 011f + {u'Ġ', u'ġ'}, // 0120 → 0121 + {u'Ģ', u'ģ'}, // 0122 → 0123 + {u'Ĥ', u'ĥ'}, // 0124 → 0125 + {u'Ħ', u'ħ'}, // 0126 → 0127 + {u'Ĩ', u'ĩ'}, // 0128 → 0129 + {u'Ī', u'ī'}, // 012a → 012b + {u'Ĭ', u'ĭ'}, // 012c → 012d + {u'Į', u'į'}, // 012e → 012f + {u'IJ', u'ij'}, // 0132 → 0133 + {u'Ĵ', u'ĵ'}, // 0134 → 0135 + {u'Ķ', u'ķ'}, // 0136 → 0137 + {u'Ĺ', u'ĺ'}, // 0139 → 013a + {u'Ļ', u'ļ'}, // 013b → 013c + {u'Ľ', u'ľ'}, // 013d → 013e + {u'Ŀ', u'ŀ'}, // 013f → 0140 + {u'Ł', u'ł'}, // 0141 → 0142 + {u'Ń', u'ń'}, // 0143 → 0144 + {u'Ņ', u'ņ'}, // 0145 → 0146 + {u'Ň', u'ň'}, // 0147 → 0148 + {u'Ŋ', u'ŋ'}, // 014a → 014b + {u'Ō', u'ō'}, // 014c → 014d + {u'Ŏ', u'ŏ'}, // 014e → 014f + {u'Ő', u'ő'}, // 0150 → 0151 + {u'Œ', u'œ'}, // 0152 → 0153 + {u'Ŕ', u'ŕ'}, // 0154 → 0155 + {u'Ŗ', u'ŗ'}, // 0156 → 0157 + {u'Ř', u'ř'}, // 0158 → 0159 + {u'Ś', u'ś'}, // 015a → 015b + {u'Ŝ', u'ŝ'}, // 015c → 015d + {u'Ş', u'ş'}, // 015e → 015f + {u'Š', u'š'}, // 0160 → 0161 + {u'Ţ', u'ţ'}, // 0162 → 0163 + {u'Ť', u'ť'}, // 0164 → 0165 + {u'Ŧ', u'ŧ'}, // 0166 → 0167 + {u'Ũ', u'ũ'}, // 0168 → 0169 + {u'Ū', u'ū'}, // 016a → 016b + {u'Ŭ', u'ŭ'}, // 016c → 016d + {u'Ů', u'ů'}, // 016e → 016f + {u'Ű', u'ű'}, // 0170 → 0171 + {u'Ų', u'ų'}, // 0172 → 0173 + {u'Ŵ', u'ŵ'}, // 0174 → 0175 + {u'Ŷ', u'ŷ'}, // 0176 → 0177 + {u'Ÿ', u'ÿ'}, // 0178 → 00ff + {u'Ź', u'ź'}, // 0179 → 017a + {u'Ż', u'ż'}, // 017b → 017c + {u'Ž', u'ž'}, // 017d → 017e + {u'Ɓ', u'ɓ'}, // 0181 → 0253 + {u'Ƃ', u'ƃ'}, // 0182 → 0183 + {u'Ƅ', u'ƅ'}, // 0184 → 0185 + {u'Ɔ', u'ɔ'}, // 0186 → 0254 + {u'Ƈ', u'ƈ'}, // 0187 → 0188 + {u'Ɗ', u'ɗ'}, // 018a → 0257 + {u'Ƌ', u'ƌ'}, // 018b → 018c + {u'Ǝ', u'ɘ'}, // 018e → 0258 + {u'Ə', u'ə'}, // 018f → 0259 + {u'Ɛ', u'ɛ'}, // 0190 → 025b + {u'Ƒ', u'ƒ'}, // 0191 → 0192 + {u'Ɠ', u'ɠ'}, // 0193 → 0260 + {u'Ɣ', u'ɣ'}, // 0194 → 0263 + {u'Ɩ', u'ɩ'}, // 0196 → 0269 + {u'Ɨ', u'ɨ'}, // 0197 → 0268 + {u'Ƙ', u'ƙ'}, // 0198 → 0199 + {u'Ɯ', u'ɯ'}, // 019c → 026f + {u'Ɲ', u'ɲ'}, // 019d → 0272 + {u'Ơ', u'ơ'}, // 01a0 → 01a1 + {u'Ƣ', u'ƣ'}, // 01a2 → 01a3 + {u'Ƥ', u'ƥ'}, // 01a4 → 01a5 + {u'Ƨ', u'ƨ'}, // 01a7 → 01a8 + {u'Ʃ', u'ʃ'}, // 01a9 → 0283 + {u'Ƭ', u'ƭ'}, // 01ac → 01ad + {u'Ʈ', u'ʈ'}, // 01ae → 0288 + {u'Ư', u'ư'}, // 01af → 01b0 + {u'Ʊ', u'ʊ'}, // 01b1 → 028a + {u'Ʋ', u'ʋ'}, // 01b2 → 028b + {u'Ƴ', u'ƴ'}, // 01b3 → 01b4 + {u'Ƶ', u'ƶ'}, // 01b5 → 01b6 + {u'Ʒ', u'ƹ'}, // 01b7 → 01b9 + {u'Ƹ', u'ƹ'}, // 01b8 → 01b9 + {u'Ƽ', u'ƽ'}, // 01bc → 01bd + {u'DŽ', u'dž'}, // 01c4 → 01c6 + {u'LJ', u'lj'}, // 01c7 → 01c9 + {u'NJ', u'nj'}, // 01ca → 01cc + {u'Ǎ', u'ǎ'}, // 01cd → 01ce + {u'Ǐ', u'ǐ'}, // 01cf → 01d0 + {u'Ǒ', u'ǒ'}, // 01d1 → 01d2 + {u'Ǔ', u'ǔ'}, // 01d3 → 01d4 + {u'Ǖ', u'ǖ'}, // 01d5 → 01d6 + {u'Ǘ', u'ǘ'}, // 01d7 → 01d8 + {u'Ǚ', u'ǚ'}, // 01d9 → 01da + {u'Ǜ', u'ǜ'}, // 01db → 01dc + {u'Ǟ', u'ǟ'}, // 01de → 01df + {u'Ǡ', u'ǡ'}, // 01e0 → 01e1 + {u'Ǣ', u'ǣ'}, // 01e2 → 01e3 + {u'Ǥ', u'ǥ'}, // 01e4 → 01e5 + {u'Ǧ', u'ǧ'}, // 01e6 → 01e7 + {u'Ǩ', u'ǩ'}, // 01e8 → 01e9 + {u'Ǫ', u'ǫ'}, // 01ea → 01eb + {u'Ǭ', u'ǭ'}, // 01ec → 01ed + {u'Ǯ', u'ǯ'}, // 01ee → 01ef + {u'DZ', u'dž'}, // 01f1 → 01c6 + {u'Ǵ', u'ǵ'}, // 01f4 → 01f5 + {u'Ǹ', u'ǹ'}, // 01f8 → 01f9 + {u'Ǻ', u'ǻ'}, // 01fa → 01fb + {u'Ǽ', u'ǽ'}, // 01fc → 01fd + {u'Ǿ', u'ǿ'}, // 01fe → 01ff + {u'Ȁ', u'ȁ'}, // 0200 → 0201 + {u'Ȃ', u'ȃ'}, // 0202 → 0203 + {u'Ȅ', u'ȅ'}, // 0204 → 0205 + {u'Ȇ', u'ȇ'}, // 0206 → 0207 + {u'Ȉ', u'ȉ'}, // 0208 → 0209 + {u'Ȋ', u'ȋ'}, // 020a → 020b + {u'Ȍ', u'ȍ'}, // 020c → 020d + {u'Ȏ', u'ȏ'}, // 020e → 020f + {u'Ȑ', u'ȑ'}, // 0210 → 0211 + {u'Ȓ', u'ȓ'}, // 0212 → 0213 + {u'Ȕ', u'ȕ'}, // 0214 → 0215 + {u'Ȗ', u'ȗ'}, // 0216 → 0217 + {u'Ș', u'ș'}, // 0218 → 0219 + {u'Ț', u'ț'}, // 021a → 021b + {u'Ȝ', u'ȝ'}, // 021c → 021d + {u'Ȟ', u'ȟ'}, // 021e → 021f + {u'Ƞ', u'ƞ'}, // 0220 → 019e + {u'Ȣ', u'ȣ'}, // 0222 → 0223 + {u'Ȥ', u'ȥ'}, // 0224 → 0225 + {u'Ȧ', u'ǡ'}, // 0226 → 01e1 + {u'Ȩ', u'ȩ'}, // 0228 → 0229 + {u'Ȫ', u'ȫ'}, // 022a → 022b + {u'Ȭ', u'ȭ'}, // 022c → 022d + {u'Ȯ', u'ȯ'}, // 022e → 022f + {u'Ȱ', u'ȱ'}, // 0230 → 0231 + {u'Ȳ', u'ȳ'}, // 0232 → 0233 + {u'Ⱥ', u'ⱥ'}, // 023a → 2c65 + {u'Ȼ', u'ȼ'}, // 023b → 023c + {u'Ƚ', u'ƚ'}, // 023d → 019a + {u'Ⱦ', u'ⱦ'}, // 023e → 2c66 + {u'Ɂ', u'ɂ'}, // 0241 → 0242 + {u'Ƀ', u'ƀ'}, // 0243 → 0180 + {u'Ʉ', u'ʉ'}, // 0244 → 0289 + {u'Ʌ', u'ʌ'}, // 0245 → 028c + {u'Ɇ', u'ɇ'}, // 0246 → 0247 + {u'Ɉ', u'ɉ'}, // 0248 → 0249 + {u'Ɍ', u'ɍ'}, // 024c → 024d + {u'Ɏ', u'ɏ'}, // 024e → 024f + {u'Ͱ', u'ͱ'}, // 0370 → 0371 + {u'Ͳ', u'ͳ'}, // 0372 → 0373 + {u'Ͷ', u'ͷ'}, // 0376 → 0377 + {u'Ά', u'ά'}, // 0386 → 03ac + {u'Έ', u'έ'}, // 0388 → 03ad + {u'Ή', u'ή'}, // 0389 → 03ae + {u'Ί', u'ί'}, // 038a → 03af + {u'Ό', u'ό'}, // 038c → 03cc + {u'Ύ', u'ύ'}, // 038e → 03cd + {u'Ώ', u'ώ'}, // 038f → 03ce + {u'Α', u'ά'}, // 0391 → 03ac + {u'Β', u'β'}, // 0392 → 03b2 + {u'Γ', u'γ'}, // 0393 → 03b3 + {u'Δ', u'δ'}, // 0394 → 03b4 + {u'Ε', u'έ'}, // 0395 → 03ad + {u'Ζ', u'ζ'}, // 0396 → 03b6 + {u'Η', u'ή'}, // 0397 → 03ae + {u'Θ', u'θ'}, // 0398 → 03b8 + {u'Ι', u'ΐ'}, // 0399 → 0390 + {u'Κ', u'κ'}, // 039a → 03ba + {u'Λ', u'λ'}, // 039b → 03bb + {u'Μ', u'μ'}, // 039c → 03bc + {u'Ν', u'ν'}, // 039d → 03bd + {u'Ξ', u'ξ'}, // 039e → 03be + {u'Ο', u'ο'}, // 039f → 03bf + {u'Π', u'π'}, // 03a0 → 03c0 + {u'Ρ', u'ρ'}, // 03a1 → 03c1 + {u'Σ', u'σ'}, // 03a3 → 03c3 + {u'Τ', u'τ'}, // 03a4 → 03c4 + {u'Υ', u'ΰ'}, // 03a5 → 03b0 + {u'Φ', u'φ'}, // 03a6 → 03c6 + {u'Χ', u'χ'}, // 03a7 → 03c7 + {u'Ψ', u'ψ'}, // 03a8 → 03c8 + {u'Ω', u'ω'}, // 03a9 → 03c9 + {u'Ϊ', u'ΐ'}, // 03aa → 0390 + {u'Ϋ', u'ΰ'}, // 03ab → 03b0 + {u'Ϣ', u'ϣ'}, // 03e2 → 03e3 + {u'Ϥ', u'ϥ'}, // 03e4 → 03e5 + {u'Ϧ', u'ϧ'}, // 03e6 → 03e7 + {u'Ϩ', u'ϩ'}, // 03e8 → 03e9 + {u'Ϫ', u'ϫ'}, // 03ea → 03eb + {u'Ϭ', u'ϭ'}, // 03ec → 03ed + {u'Ϯ', u'ϯ'}, // 03ee → 03ef + {u'Ϸ', u'ϸ'}, // 03f7 → 03f8 + {u'Ϻ', u'ϻ'}, // 03fa → 03fb + {u'Ͻ', u'ͻ'}, // 03fd → 037b + {u'Ͼ', u'ͼ'}, // 03fe → 037c + {u'Ͽ', u'ͽ'}, // 03ff → 037d + {u'Ѐ', u'ѐ'}, // 0400 → 0450 + {u'Ё', u'ё'}, // 0401 → 0451 + {u'Ђ', u'ђ'}, // 0402 → 0452 + {u'Ѓ', u'ѓ'}, // 0403 → 0453 + {u'Є', u'є'}, // 0404 → 0454 + {u'Ѕ', u'ѕ'}, // 0405 → 0455 + {u'І', u'і'}, // 0406 → 0456 + {u'Ї', u'ї'}, // 0407 → 0457 + {u'Ј', u'ј'}, // 0408 → 0458 + {u'Љ', u'љ'}, // 0409 → 0459 + {u'Њ', u'њ'}, // 040a → 045a + {u'Ћ', u'ћ'}, // 040b → 045b + {u'Ќ', u'ќ'}, // 040c → 045c + {u'Ѝ', u'ѝ'}, // 040d → 045d + {u'Ў', u'ў'}, // 040e → 045e + {u'Џ', u'џ'}, // 040f → 045f + {u'А', u'а'}, // 0410 → 0430 + {u'Б', u'б'}, // 0411 → 0431 + {u'В', u'в'}, // 0412 → 0432 + {u'Г', u'г'}, // 0413 → 0433 + {u'Д', u'д'}, // 0414 → 0434 + {u'Е', u'е'}, // 0415 → 0435 + {u'Ж', u'ж'}, // 0416 → 0436 + {u'З', u'з'}, // 0417 → 0437 + {u'И', u'е'}, // 0418 → 0435 + {u'Й', u'й'}, // 0419 → 0439 + {u'К', u'к'}, // 041a → 043a + {u'Л', u'л'}, // 041b → 043b + {u'М', u'м'}, // 041c → 043c + {u'Н', u'н'}, // 041d → 043d + {u'О', u'о'}, // 041e → 043e + {u'П', u'п'}, // 041f → 043f + {u'Р', u'р'}, // 0420 → 0440 + {u'С', u'с'}, // 0421 → 0441 + {u'Т', u'т'}, // 0422 → 0442 + {u'У', u'у'}, // 0423 → 0443 + {u'Ф', u'ф'}, // 0424 → 0444 + {u'Х', u'х'}, // 0425 → 0445 + {u'Ц', u'ц'}, // 0426 → 0446 + {u'Ч', u'ч'}, // 0427 → 0447 + {u'Ш', u'ш'}, // 0428 → 0448 + {u'Щ', u'щ'}, // 0429 → 0449 + {u'Ъ', u'ъ'}, // 042a → 044a + {u'Ы', u'ы'}, // 042b → 044b + {u'Ь', u'ь'}, // 042c → 044c + {u'Э', u'л'}, // 042d → 043b + {u'Ю', u'ю'}, // 042e → 044e + {u'Я', u'я'}, // 042f → 044f + {u'Ѡ', u'ѡ'}, // 0460 → 0461 + {u'Ѣ', u'ѣ'}, // 0462 → 0463 + {u'Ѥ', u'ѥ'}, // 0464 → 0465 + {u'Ѧ', u'ѧ'}, // 0466 → 0467 + {u'Ѩ', u'ѩ'}, // 0468 → 0469 + {u'Ѫ', u'ѫ'}, // 046a → 046b + {u'Ѭ', u'ѭ'}, // 046c → 046d + {u'Ѯ', u'ѯ'}, // 046e → 046f + {u'Ѱ', u'ѱ'}, // 0470 → 0471 + {u'Ѳ', u'ѳ'}, // 0472 → 0473 + {u'Ѵ', u'ѵ'}, // 0474 → 0475 + {u'Ѷ', u'ѷ'}, // 0476 → 0477 + {u'Ѹ', u'є'}, // 0478 → 0454 + {u'Ѻ', u'ѻ'}, // 047a → 047b + {u'Ѽ', u'ѽ'}, // 047c → 047d + {u'Ѿ', u'ѿ'}, // 047e → 047f + {u'Ҁ', u'ҁ'}, // 0480 → 0481 + {u'Ҋ', u'ҋ'}, // 048a → 048b + {u'Ҍ', u'ҍ'}, // 048c → 048d + {u'Ҏ', u'ҏ'}, // 048e → 048f + {u'Ґ', u'ґ'}, // 0490 → 0491 + {u'Ғ', u'ғ'}, // 0492 → 0493 + {u'Ҕ', u'ҕ'}, // 0494 → 0495 + {u'Җ', u'җ'}, // 0496 → 0497 + {u'Ҙ', u'ҙ'}, // 0498 → 0499 + {u'Қ', u'қ'}, // 049a → 049b + {u'Ҝ', u'ҝ'}, // 049c → 049d + {u'Ҟ', u'ҟ'}, // 049e → 049f + {u'Ҡ', u'ҡ'}, // 04a0 → 04a1 + {u'Ң', u'ң'}, // 04a2 → 04a3 + {u'Ҥ', u'ҥ'}, // 04a4 → 04a5 + {u'Ҧ', u'ҧ'}, // 04a6 → 04a7 + {u'Ҩ', u'ҩ'}, // 04a8 → 04a9 + {u'Ҫ', u'ҫ'}, // 04aa → 04ab + {u'Ҭ', u'ҭ'}, // 04ac → 04ad + {u'Ү', u'ү'}, // 04ae → 04af + {u'Ұ', u'ұ'}, // 04b0 → 04b1 + {u'Ҳ', u'ҳ'}, // 04b2 → 04b3 + {u'Ҵ', u'ҵ'}, // 04b4 → 04b5 + {u'Ҷ', u'ҷ'}, // 04b6 → 04b7 + {u'Ҹ', u'ҹ'}, // 04b8 → 04b9 + {u'Һ', u'һ'}, // 04ba → 04bb + {u'Ҽ', u'ҽ'}, // 04bc → 04bd + {u'Ҿ', u'ҿ'}, // 04be → 04bf + {u'Ӂ', u'ӂ'}, // 04c1 → 04c2 + {u'Ӄ', u'ӄ'}, // 04c3 → 04c4 + {u'Ӆ', u'ӆ'}, // 04c5 → 04c6 + {u'Ӈ', u'ӈ'}, // 04c7 → 04c8 + {u'Ӊ', u'ӊ'}, // 04c9 → 04ca + {u'Ӌ', u'ӌ'}, // 04cb → 04cc + {u'Ӎ', u'ӎ'}, // 04cd → 04ce + {u'Ӑ', u'ӑ'}, // 04d0 → 04d1 + {u'Ӓ', u'ӓ'}, // 04d2 → 04d3 + {u'Ӕ', u'ӕ'}, // 04d4 → 04d5 + {u'Ӗ', u'ӗ'}, // 04d6 → 04d7 + {u'Ә', u'ә'}, // 04d8 → 04d9 + {u'Ӛ', u'ӛ'}, // 04da → 04db + {u'Ӝ', u'ӝ'}, // 04dc → 04dd + {u'Ӟ', u'ӟ'}, // 04de → 04df + {u'Ӡ', u'ӡ'}, // 04e0 → 04e1 + {u'Ӣ', u'ӣ'}, // 04e2 → 04e3 + {u'Ӥ', u'ӥ'}, // 04e4 → 04e5 + {u'Ӧ', u'ӧ'}, // 04e6 → 04e7 + {u'Ө', u'ө'}, // 04e8 → 04e9 + {u'Ӫ', u'ӫ'}, // 04ea → 04eb + {u'Ӭ', u'ӭ'}, // 04ec → 04ed + {u'Ӯ', u'ӯ'}, // 04ee → 04ef + {u'Ӱ', u'ӱ'}, // 04f0 → 04f1 + {u'Ӳ', u'ӳ'}, // 04f2 → 04f3 + {u'Ӵ', u'ӵ'}, // 04f4 → 04f5 + {u'Ӷ', u'ӷ'}, // 04f6 → 04f7 + {u'Ӹ', u'ӹ'}, // 04f8 → 04f9 + {u'Ӻ', u'ӻ'}, // 04fa → 04fb + {u'Ӽ', u'ӽ'}, // 04fc → 04fd + {u'Ӿ', u'ӿ'}, // 04fe → 04ff + {u'Ԁ', u'ԁ'}, // 0500 → 0501 + {u'Ԃ', u'ԃ'}, // 0502 → 0503 + {u'Ԅ', u'ԅ'}, // 0504 → 0505 + {u'Ԇ', u'ԇ'}, // 0506 → 0507 + {u'Ԉ', u'ԉ'}, // 0508 → 0509 + {u'Ԋ', u'ԋ'}, // 050a → 050b + {u'Ԍ', u'ԍ'}, // 050c → 050d + {u'Ԏ', u'ԏ'}, // 050e → 050f + {u'Ԑ', u'ԑ'}, // 0510 → 0511 + {u'Ԓ', u'ԓ'}, // 0512 → 0513 + {u'Ԕ', u'ԕ'}, // 0514 → 0515 + {u'Ԗ', u'ԗ'}, // 0516 → 0517 + {u'Ԙ', u'ԙ'}, // 0518 → 0519 + {u'Ԛ', u'ԛ'}, // 051a → 051b + {u'Ԝ', u'ԝ'}, // 051c → 051d + {u'Ԟ', u'ԟ'}, // 051e → 051f + {u'Ԡ', u'ԡ'}, // 0520 → 0521 + {u'Ԣ', u'ԣ'}, // 0522 → 0523 + {u'Ԥ', u'ԥ'}, // 0524 → 0525 + {u'Ԧ', u'ԧ'}, // 0526 → 0527 + {u'Ԩ', u'ԩ'}, // 0528 → 0529 + {u'Ԫ', u'ԫ'}, // 052a → 052b + {u'Ԭ', u'ԭ'}, // 052c → 052d + {u'Ԯ', u'ԯ'}, // 052e → 052f + {u'Ա', u'ա'}, // 0531 → 0561 + {u'Բ', u'բ'}, // 0532 → 0562 + {u'Գ', u'գ'}, // 0533 → 0563 + {u'Դ', u'դ'}, // 0534 → 0564 + {u'Ե', u'ե'}, // 0535 → 0565 + {u'Զ', u'զ'}, // 0536 → 0566 + {u'Է', u'է'}, // 0537 → 0567 + {u'Ը', u'ը'}, // 0538 → 0568 + {u'Թ', u'թ'}, // 0539 → 0569 + {u'Ժ', u'ժ'}, // 053a → 056a + {u'Ի', u'ի'}, // 053b → 056b + {u'Լ', u'լ'}, // 053c → 056c + {u'Խ', u'խ'}, // 053d → 056d + {u'Ծ', u'ծ'}, // 053e → 056e + {u'Կ', u'կ'}, // 053f → 056f + {u'Հ', u'հ'}, // 0540 → 0570 + {u'Ձ', u'ձ'}, // 0541 → 0571 + {u'Ղ', u'ղ'}, // 0542 → 0572 + {u'Ճ', u'ճ'}, // 0543 → 0573 + {u'Մ', u'մ'}, // 0544 → 0574 + {u'Յ', u'յ'}, // 0545 → 0575 + {u'Ն', u'ն'}, // 0546 → 0576 + {u'Շ', u'շ'}, // 0547 → 0577 + {u'Ո', u'ո'}, // 0548 → 0578 + {u'Չ', u'չ'}, // 0549 → 0579 + {u'Պ', u'պ'}, // 054a → 057a + {u'Ջ', u'ջ'}, // 054b → 057b + {u'Ռ', u'ռ'}, // 054c → 057c + {u'Ս', u'ս'}, // 054d → 057d + {u'Վ', u'վ'}, // 054e → 057e + {u'Տ', u'տ'}, // 054f → 057f + {u'Ր', u'ր'}, // 0550 → 0580 + {u'Ց', u'ց'}, // 0551 → 0581 + {u'Ւ', u'ւ'}, // 0552 → 0582 + {u'Փ', u'փ'}, // 0553 → 0583 + {u'Ք', u'ք'}, // 0554 → 0584 + {u'Օ', u'օ'}, // 0555 → 0585 + {u'Ֆ', u'ֆ'}, // 0556 → 0586 + {u'Ⴀ', u'ⴀ'}, // 10a0 → 2d00 + {u'Ⴁ', u'ⴁ'}, // 10a1 → 2d01 + {u'Ⴂ', u'ⴂ'}, // 10a2 → 2d02 + {u'Ⴃ', u'ⴃ'}, // 10a3 → 2d03 + {u'Ⴄ', u'ⴄ'}, // 10a4 → 2d04 + {u'Ⴅ', u'ⴅ'}, // 10a5 → 2d05 + {u'Ⴆ', u'ⴆ'}, // 10a6 → 2d06 + {u'Ⴇ', u'ⴇ'}, // 10a7 → 2d07 + {u'Ⴈ', u'ⴈ'}, // 10a8 → 2d08 + {u'Ⴉ', u'ⴉ'}, // 10a9 → 2d09 + {u'Ⴊ', u'ⴊ'}, // 10aa → 2d0a + {u'Ⴋ', u'ⴋ'}, // 10ab → 2d0b + {u'Ⴌ', u'ⴌ'}, // 10ac → 2d0c + {u'Ⴍ', u'ⴍ'}, // 10ad → 2d0d + {u'Ⴎ', u'ⴎ'}, // 10ae → 2d0e + {u'Ⴏ', u'ⴏ'}, // 10af → 2d0f + {u'Ⴐ', u'ⴐ'}, // 10b0 → 2d10 + {u'Ⴑ', u'ⴑ'}, // 10b1 → 2d11 + {u'Ⴒ', u'ⴒ'}, // 10b2 → 2d12 + {u'Ⴓ', u'ⴓ'}, // 10b3 → 2d13 + {u'Ⴔ', u'ⴔ'}, // 10b4 → 2d14 + {u'Ⴕ', u'ⴕ'}, // 10b5 → 2d15 + {u'Ⴖ', u'ⴖ'}, // 10b6 → 2d16 + {u'Ⴗ', u'ⴗ'}, // 10b7 → 2d17 + {u'Ⴘ', u'ⴘ'}, // 10b8 → 2d18 + {u'Ⴙ', u'ⴙ'}, // 10b9 → 2d19 + {u'Ⴚ', u'ⴚ'}, // 10ba → 2d1a + {u'Ⴛ', u'ⴛ'}, // 10bb → 2d1b + {u'Ⴜ', u'ⴜ'}, // 10bc → 2d1c + {u'Ⴝ', u'ⴝ'}, // 10bd → 2d1d + {u'Ⴞ', u'ⴞ'}, // 10be → 2d1e + {u'Ⴟ', u'ⴟ'}, // 10bf → 2d1f + {u'Ⴠ', u'ⴠ'}, // 10c0 → 2d20 + {u'Ⴡ', u'ⴡ'}, // 10c1 → 2d21 + {u'Ⴢ', u'ⴢ'}, // 10c2 → 2d22 + {u'Ⴣ', u'ⴣ'}, // 10c3 → 2d23 + {u'Ⴤ', u'ⴤ'}, // 10c4 → 2d24 + {u'Ⴥ', u'ⴥ'}, // 10c5 → 2d25 + {u'Ⴧ', u'ⴧ'}, // 10c7 → 2d27 + {u'Ⴭ', u'ⴭ'}, // 10cd → 2d2d + {u'Ᏸ', u'ᏸ'}, // 13f0 → 13f8 + {u'Ᏹ', u'ᏹ'}, // 13f1 → 13f9 + {u'Ᏺ', u'ᏺ'}, // 13f2 → 13fa + {u'Ᏻ', u'ᏻ'}, // 13f3 → 13fb + {u'Ᏼ', u'ᏼ'}, // 13f4 → 13fc + {u'Ᏽ', u'ᏽ'}, // 13f5 → 13fd + {u'Ḁ', u'ḁ'}, // 1e00 → 1e01 + {u'Ḃ', u'ḃ'}, // 1e02 → 1e03 + {u'Ḅ', u'ḅ'}, // 1e04 → 1e05 + {u'Ḇ', u'ḇ'}, // 1e06 → 1e07 + {u'Ḉ', u'ḉ'}, // 1e08 → 1e09 + {u'Ḋ', u'ḋ'}, // 1e0a → 1e0b + {u'Ḍ', u'ḍ'}, // 1e0c → 1e0d + {u'Ḏ', u'ḏ'}, // 1e0e → 1e0f + {u'Ḑ', u'ḑ'}, // 1e10 → 1e11 + {u'Ḓ', u'ḓ'}, // 1e12 → 1e13 + {u'Ḕ', u'ḕ'}, // 1e14 → 1e15 + {u'Ḗ', u'ḗ'}, // 1e16 → 1e17 + {u'Ḙ', u'ḙ'}, // 1e18 → 1e19 + {u'Ḛ', u'ḛ'}, // 1e1a → 1e1b + {u'Ḝ', u'ḝ'}, // 1e1c → 1e1d + {u'Ḟ', u'ḟ'}, // 1e1e → 1e1f + {u'Ḡ', u'ḡ'}, // 1e20 → 1e21 + {u'Ḣ', u'ḣ'}, // 1e22 → 1e23 + {u'Ḥ', u'ḥ'}, // 1e24 → 1e25 + {u'Ḧ', u'ḧ'}, // 1e26 → 1e27 + {u'Ḩ', u'ḩ'}, // 1e28 → 1e29 + {u'Ḫ', u'ḫ'}, // 1e2a → 1e2b + {u'Ḭ', u'ḭ'}, // 1e2c → 1e2d + {u'Ḯ', u'ḯ'}, // 1e2e → 1e2f + {u'Ḱ', u'ḱ'}, // 1e30 → 1e31 + {u'Ḳ', u'ḳ'}, // 1e32 → 1e33 + {u'Ḵ', u'ḵ'}, // 1e34 → 1e35 + {u'Ḷ', u'ḷ'}, // 1e36 → 1e37 + {u'Ḹ', u'ḹ'}, // 1e38 → 1e39 + {u'Ḻ', u'ḻ'}, // 1e3a → 1e3b + {u'Ḽ', u'ḽ'}, // 1e3c → 1e3d + {u'Ḿ', u'ḿ'}, // 1e3e → 1e3f + {u'Ṁ', u'ṁ'}, // 1e40 → 1e41 + {u'Ṃ', u'ṃ'}, // 1e42 → 1e43 + {u'Ṅ', u'ṅ'}, // 1e44 → 1e45 + {u'Ṇ', u'ṇ'}, // 1e46 → 1e47 + {u'Ṉ', u'ṉ'}, // 1e48 → 1e49 + {u'Ṋ', u'ṋ'}, // 1e4a → 1e4b + {u'Ṍ', u'ṍ'}, // 1e4c → 1e4d + {u'Ṏ', u'ṏ'}, // 1e4e → 1e4f + {u'Ṑ', u'ṑ'}, // 1e50 → 1e51 + {u'Ṓ', u'ṓ'}, // 1e52 → 1e53 + {u'Ṕ', u'ṕ'}, // 1e54 → 1e55 + {u'Ṗ', u'ṗ'}, // 1e56 → 1e57 + {u'Ṙ', u'ṙ'}, // 1e58 → 1e59 + {u'Ṛ', u'ṛ'}, // 1e5a → 1e5b + {u'Ṝ', u'ṝ'}, // 1e5c → 1e5d + {u'Ṟ', u'ṟ'}, // 1e5e → 1e5f + {u'Ṡ', u'ṡ'}, // 1e60 → 1e61 + {u'Ṣ', u'ṣ'}, // 1e62 → 1e63 + {u'Ṥ', u'ṥ'}, // 1e64 → 1e65 + {u'Ṧ', u'ṧ'}, // 1e66 → 1e67 + {u'Ṩ', u'ṩ'}, // 1e68 → 1e69 + {u'Ṫ', u'ṫ'}, // 1e6a → 1e6b + {u'Ṭ', u'ṭ'}, // 1e6c → 1e6d + {u'Ṯ', u'ṯ'}, // 1e6e → 1e6f + {u'Ṱ', u'ṱ'}, // 1e70 → 1e71 + {u'Ṳ', u'ṳ'}, // 1e72 → 1e73 + {u'Ṵ', u'ṵ'}, // 1e74 → 1e75 + {u'Ṷ', u'ṷ'}, // 1e76 → 1e77 + {u'Ṹ', u'ṹ'}, // 1e78 → 1e79 + {u'Ṻ', u'ṻ'}, // 1e7a → 1e7b + {u'Ṽ', u'ṽ'}, // 1e7c → 1e7d + {u'Ṿ', u'ṿ'}, // 1e7e → 1e7f + {u'Ẁ', u'ẁ'}, // 1e80 → 1e81 + {u'Ẃ', u'ẃ'}, // 1e82 → 1e83 + {u'Ẅ', u'ẅ'}, // 1e84 → 1e85 + {u'Ẇ', u'ẇ'}, // 1e86 → 1e87 + {u'Ẉ', u'ẉ'}, // 1e88 → 1e89 + {u'Ẋ', u'ẋ'}, // 1e8a → 1e8b + {u'Ẍ', u'ẍ'}, // 1e8c → 1e8d + {u'Ẏ', u'ẏ'}, // 1e8e → 1e8f + {u'Ẑ', u'ẑ'}, // 1e90 → 1e91 + {u'Ẓ', u'ẓ'}, // 1e92 → 1e93 + {u'Ẕ', u'ẕ'}, // 1e94 → 1e95 + {u'ẞ', u'ß'}, // 1e9e → 00df + {u'Ạ', u'ạ'}, // 1ea0 → 1ea1 + {u'Ả', u'ả'}, // 1ea2 → 1ea3 + {u'Ấ', u'ấ'}, // 1ea4 → 1ea5 + {u'Ầ', u'ầ'}, // 1ea6 → 1ea7 + {u'Ẩ', u'ẩ'}, // 1ea8 → 1ea9 + {u'Ẫ', u'ẫ'}, // 1eaa → 1eab + {u'Ậ', u'ậ'}, // 1eac → 1ead + {u'Ắ', u'ắ'}, // 1eae → 1eaf + {u'Ằ', u'ằ'}, // 1eb0 → 1eb1 + {u'Ẳ', u'ẳ'}, // 1eb2 → 1eb3 + {u'Ẵ', u'ẵ'}, // 1eb4 → 1eb5 + {u'Ặ', u'ặ'}, // 1eb6 → 1eb7 + {u'Ẹ', u'ẹ'}, // 1eb8 → 1eb9 + {u'Ẻ', u'ẻ'}, // 1eba → 1ebb + {u'Ẽ', u'ḛ'}, // 1ebc → 1e1b + {u'Ế', u'ế'}, // 1ebe → 1ebf + {u'Ề', u'ề'}, // 1ec0 → 1ec1 + {u'Ể', u'ể'}, // 1ec2 → 1ec3 + {u'Ễ', u'ễ'}, // 1ec4 → 1ec5 + {u'Ệ', u'ệ'}, // 1ec6 → 1ec7 + {u'Ỉ', u'ỉ'}, // 1ec8 → 1ec9 + {u'Ị', u'ị'}, // 1eca → 1ecb + {u'Ọ', u'ọ'}, // 1ecc → 1ecd + {u'Ỏ', u'ỏ'}, // 1ece → 1ecf + {u'Ố', u'ố'}, // 1ed0 → 1ed1 + {u'Ồ', u'ồ'}, // 1ed2 → 1ed3 + {u'Ổ', u'ổ'}, // 1ed4 → 1ed5 + {u'Ỗ', u'ỗ'}, // 1ed6 → 1ed7 + {u'Ộ', u'ộ'}, // 1ed8 → 1ed9 + {u'Ớ', u'ớ'}, // 1eda → 1edb + {u'Ờ', u'ờ'}, // 1edc → 1edd + {u'Ở', u'ở'}, // 1ede → 1edf + {u'Ỡ', u'ỡ'}, // 1ee0 → 1ee1 + {u'Ợ', u'ợ'}, // 1ee2 → 1ee3 + {u'Ụ', u'ụ'}, // 1ee4 → 1ee5 + {u'Ủ', u'ủ'}, // 1ee6 → 1ee7 + {u'Ứ', u'ứ'}, // 1ee8 → 1ee9 + {u'Ừ', u'ừ'}, // 1eea → 1eeb + {u'Ử', u'ử'}, // 1eec → 1eed + {u'Ữ', u'ữ'}, // 1eee → 1eef + {u'Ự', u'ự'}, // 1ef0 → 1ef1 + {u'Ỳ', u'ỳ'}, // 1ef2 → 1ef3 + {u'Ỵ', u'ỵ'}, // 1ef4 → 1ef5 + {u'Ỷ', u'ỷ'}, // 1ef6 → 1ef7 + {u'Ỹ', u'ỹ'}, // 1ef8 → 1ef9 + {u'Ỻ', u'ỻ'}, // 1efa → 1efb + {u'Ỽ', u'ỽ'}, // 1efc → 1efd + {u'Ỿ', u'ỿ'}, // 1efe → 1eff + {u'Ἀ', u'ἀ'}, // 1f08 → 1f00 + {u'Ἁ', u'ἁ'}, // 1f09 → 1f01 + {u'Ἂ', u'ἂ'}, // 1f0a → 1f02 + {u'Ἃ', u'ἃ'}, // 1f0b → 1f03 + {u'Ἄ', u'ἄ'}, // 1f0c → 1f04 + {u'Ἅ', u'ἅ'}, // 1f0d → 1f05 + {u'Ἆ', u'ἆ'}, // 1f0e → 1f06 + {u'Ἇ', u'ἇ'}, // 1f0f → 1f07 + {u'Ἐ', u'ἐ'}, // 1f18 → 1f10 + {u'Ἑ', u'ἑ'}, // 1f19 → 1f11 + {u'Ἒ', u'ἒ'}, // 1f1a → 1f12 + {u'Ἓ', u'ἓ'}, // 1f1b → 1f13 + {u'Ἔ', u'ἔ'}, // 1f1c → 1f14 + {u'Ἕ', u'ἕ'}, // 1f1d → 1f15 + {u'Ἠ', u'ἠ'}, // 1f28 → 1f20 + {u'Ἡ', u'ἡ'}, // 1f29 → 1f21 + {u'Ἢ', u'ἢ'}, // 1f2a → 1f22 + {u'Ἣ', u'ἣ'}, // 1f2b → 1f23 + {u'Ἤ', u'ἤ'}, // 1f2c → 1f24 + {u'Ἥ', u'ἥ'}, // 1f2d → 1f25 + {u'Ἦ', u'ἦ'}, // 1f2e → 1f26 + {u'Ἧ', u'ἧ'}, // 1f2f → 1f27 + {u'Ἰ', u'ἰ'}, // 1f38 → 1f30 + {u'Ἱ', u'ἱ'}, // 1f39 → 1f31 + {u'Ἲ', u'ἲ'}, // 1f3a → 1f32 + {u'Ἳ', u'ἳ'}, // 1f3b → 1f33 + {u'Ἴ', u'ἴ'}, // 1f3c → 1f34 + {u'Ἵ', u'ἵ'}, // 1f3d → 1f35 + {u'Ἶ', u'ἶ'}, // 1f3e → 1f36 + {u'Ἷ', u'ἷ'}, // 1f3f → 1f37 + {u'Ὀ', u'ὀ'}, // 1f48 → 1f40 + {u'Ὁ', u'ὁ'}, // 1f49 → 1f41 + {u'Ὂ', u'ὂ'}, // 1f4a → 1f42 + {u'Ὃ', u'ὃ'}, // 1f4b → 1f43 + {u'Ὄ', u'ὄ'}, // 1f4c → 1f44 + {u'Ὅ', u'ὅ'}, // 1f4d → 1f45 + {u'Ὑ', u'ὑ'}, // 1f59 → 1f51 + {u'Ὓ', u'ὓ'}, // 1f5b → 1f53 + {u'Ὕ', u'ὕ'}, // 1f5d → 1f55 + {u'Ὗ', u'ὗ'}, // 1f5f → 1f57 + {u'Ὠ', u'ὠ'}, // 1f68 → 1f60 + {u'Ὡ', u'ὡ'}, // 1f69 → 1f61 + {u'Ὢ', u'ὢ'}, // 1f6a → 1f62 + {u'Ὣ', u'ὣ'}, // 1f6b → 1f63 + {u'Ὤ', u'ὤ'}, // 1f6c → 1f64 + {u'Ὥ', u'ὥ'}, // 1f6d → 1f65 + {u'Ὦ', u'ὦ'}, // 1f6e → 1f66 + {u'Ὧ', u'ὧ'}, // 1f6f → 1f67 + {u'Ᾰ', u'ᾰ'}, // 1fb8 → 1fb0 + {u'Ᾱ', u'ᾱ'}, // 1fb9 → 1fb1 + {u'Ὰ', u'ὰ'}, // 1fba → 1f70 + {u'Ά', u'ά'}, // 1fbb → 1f71 + {u'Ὲ', u'ὲ'}, // 1fc8 → 1f72 + {u'Έ', u'έ'}, // 1fc9 → 1f73 + {u'Ὴ', u'ὴ'}, // 1fca → 1f74 + {u'Ή', u'ή'}, // 1fcb → 1f75 + {u'Ῐ', u'ῐ'}, // 1fd8 → 1fd0 + {u'Ῑ', u'ῑ'}, // 1fd9 → 1fd1 + {u'Ὶ', u'ὶ'}, // 1fda → 1f76 + {u'Ί', u'ί'}, // 1fdb → 1f77 + {u'Ῠ', u'ῠ'}, // 1fe8 → 1fe0 + {u'Ῡ', u'ῡ'}, // 1fe9 → 1fe1 + {u'Ὺ', u'ὺ'}, // 1fea → 1f7a + {u'Ύ', u'ύ'}, // 1feb → 1f7b + {u'Ῥ', u'ῥ'}, // 1fec → 1fe5 + {u'Ὸ', u'ὸ'}, // 1ff8 → 1f78 + {u'Ό', u'ό'}, // 1ff9 → 1f79 + {u'Ὼ', u'ὼ'}, // 1ffa → 1f7c + {u'Ώ', u'ώ'}, // 1ffb → 1f7d + {u'ℒ', u'ℓ'}, // 2112 → 2113 + {u'ℙ', u'ℼ'}, // 2119 → 213c + {u'ℰ', u'ℯ'}, // 2130 → 212f + {u'Ⅎ', u'ⅎ'}, // 2132 → 214e + {u'ℾ', u'ℽ'}, // 213e → 213d + {u'ℿ', u'ℼ'}, // 213f → 213c + {u'ⅅ', u'ⅆ'}, // 2145 → 2146 + {u'Ⰰ', u'ⰰ'}, // 2c00 → 2c30 + {u'Ⰱ', u'ⰱ'}, // 2c01 → 2c31 + {u'Ⰲ', u'ⰲ'}, // 2c02 → 2c32 + {u'Ⰳ', u'ⰳ'}, // 2c03 → 2c33 + {u'Ⰴ', u'ⰴ'}, // 2c04 → 2c34 + {u'Ⰵ', u'ⰵ'}, // 2c05 → 2c35 + {u'Ⰶ', u'ⰶ'}, // 2c06 → 2c36 + {u'Ⰷ', u'ⰷ'}, // 2c07 → 2c37 + {u'Ⰸ', u'ⰸ'}, // 2c08 → 2c38 + {u'Ⰹ', u'ⰹ'}, // 2c09 → 2c39 + {u'Ⰺ', u'ⰺ'}, // 2c0a → 2c3a + {u'Ⰻ', u'ⰹ'}, // 2c0b → 2c39 + {u'Ⰼ', u'ⰼ'}, // 2c0c → 2c3c + {u'Ⰽ', u'ⰽ'}, // 2c0d → 2c3d + {u'Ⰾ', u'ⰾ'}, // 2c0e → 2c3e + {u'Ⰿ', u'ⰿ'}, // 2c0f → 2c3f + {u'Ⱀ', u'ⱀ'}, // 2c10 → 2c40 + {u'Ⱁ', u'ⱁ'}, // 2c11 → 2c41 + {u'Ⱂ', u'ⱂ'}, // 2c12 → 2c42 + {u'Ⱃ', u'ⱃ'}, // 2c13 → 2c43 + {u'Ⱄ', u'ⱄ'}, // 2c14 → 2c44 + {u'Ⱅ', u'ⱅ'}, // 2c15 → 2c45 + {u'Ⱆ', u'ⱆ'}, // 2c16 → 2c46 + {u'Ⱇ', u'ⱇ'}, // 2c17 → 2c47 + {u'Ⱈ', u'ⱈ'}, // 2c18 → 2c48 + {u'Ⱉ', u'ⱉ'}, // 2c19 → 2c49 + {u'Ⱊ', u'ⱊ'}, // 2c1a → 2c4a + {u'Ⱋ', u'ⱋ'}, // 2c1b → 2c4b + {u'Ⱌ', u'ⱌ'}, // 2c1c → 2c4c + {u'Ⱍ', u'ⱍ'}, // 2c1d → 2c4d + {u'Ⱎ', u'ⱎ'}, // 2c1e → 2c4e + {u'Ⱏ', u'ⱏ'}, // 2c1f → 2c4f + {u'Ⱐ', u'ⱐ'}, // 2c20 → 2c50 + {u'Ⱑ', u'ⱑ'}, // 2c21 → 2c51 + {u'Ⱒ', u'ⱒ'}, // 2c22 → 2c52 + {u'Ⱓ', u'ⱓ'}, // 2c23 → 2c53 + {u'Ⱔ', u'ⱔ'}, // 2c24 → 2c54 + {u'Ⱕ', u'ⱕ'}, // 2c25 → 2c55 + {u'Ⱖ', u'ⱖ'}, // 2c26 → 2c56 + {u'Ⱗ', u'ⱗ'}, // 2c27 → 2c57 + {u'Ⱘ', u'ⱘ'}, // 2c28 → 2c58 + {u'Ⱙ', u'ⱙ'}, // 2c29 → 2c59 + {u'Ⱚ', u'ⱚ'}, // 2c2a → 2c5a + {u'Ⱛ', u'ⱛ'}, // 2c2b → 2c5b + {u'Ⱜ', u'ⱜ'}, // 2c2c → 2c5c + {u'Ⱝ', u'ⱝ'}, // 2c2d → 2c5d + {u'Ⱞ', u'ⱞ'}, // 2c2e → 2c5e + {u'Ⱡ', u'ⱡ'}, // 2c60 → 2c61 + {u'Ɫ', u'ɫ'}, // 2c62 → 026b + {u'Ᵽ', u'ᵽ'}, // 2c63 → 1d7d + {u'Ɽ', u'ɽ'}, // 2c64 → 027d + {u'Ⱨ', u'ⱨ'}, // 2c67 → 2c68 + {u'Ⱪ', u'ⱪ'}, // 2c69 → 2c6a + {u'Ⱬ', u'ⱬ'}, // 2c6b → 2c6c + {u'Ɑ', u'ɑ'}, // 2c6d → 0251 + {u'Ɱ', u'ɱ'}, // 2c6e → 0271 + {u'Ɐ', u'ɐ'}, // 2c6f → 0250 + {u'Ɒ', u'ɒ'}, // 2c70 → 0252 + {u'Ⱳ', u'ⱳ'}, // 2c72 → 2c73 + {u'Ⱶ', u'ⱶ'}, // 2c75 → 2c76 + {u'Ȿ', u'ȿ'}, // 2c7e → 023f + {u'Ɀ', u'ɀ'}, // 2c7f → 0240 + {u'Ⲁ', u'ⲁ'}, // 2c80 → 2c81 + {u'Ⲃ', u'ⲃ'}, // 2c82 → 2c83 + {u'Ⲅ', u'ⲅ'}, // 2c84 → 2c85 + {u'Ⲇ', u'ⲇ'}, // 2c86 → 2c87 + {u'Ⲉ', u'ⲉ'}, // 2c88 → 2c89 + {u'Ⲋ', u'ⲋ'}, // 2c8a → 2c8b + {u'Ⲍ', u'ⲍ'}, // 2c8c → 2c8d + {u'Ⲏ', u'ⲏ'}, // 2c8e → 2c8f + {u'Ⲑ', u'ⲑ'}, // 2c90 → 2c91 + {u'Ⲓ', u'ⲓ'}, // 2c92 → 2c93 + {u'Ⲕ', u'ⲕ'}, // 2c94 → 2c95 + {u'Ⲗ', u'ⲗ'}, // 2c96 → 2c97 + {u'Ⲙ', u'ⲙ'}, // 2c98 → 2c99 + {u'Ⲛ', u'ⲛ'}, // 2c9a → 2c9b + {u'Ⲝ', u'ⲝ'}, // 2c9c → 2c9d + {u'Ⲟ', u'ⲟ'}, // 2c9e → 2c9f + {u'Ⲡ', u'ⲡ'}, // 2ca0 → 2ca1 + {u'Ⲣ', u'ⲣ'}, // 2ca2 → 2ca3 + {u'Ⲥ', u'ⲥ'}, // 2ca4 → 2ca5 + {u'Ⲧ', u'ⲧ'}, // 2ca6 → 2ca7 + {u'Ⲩ', u'ⲩ'}, // 2ca8 → 2ca9 + {u'Ⲫ', u'ⲫ'}, // 2caa → 2cab + {u'Ⲭ', u'ⲭ'}, // 2cac → 2cad + {u'Ⲯ', u'ⲯ'}, // 2cae → 2caf + {u'Ⲱ', u'ⲱ'}, // 2cb0 → 2cb1 + {u'Ⲳ', u'ⲳ'}, // 2cb2 → 2cb3 + {u'Ⲵ', u'ⲵ'}, // 2cb4 → 2cb5 + {u'Ⲷ', u'ⲷ'}, // 2cb6 → 2cb7 + {u'Ⲹ', u'ⲹ'}, // 2cb8 → 2cb9 + {u'Ⲻ', u'ⲻ'}, // 2cba → 2cbb + {u'Ⲽ', u'ⲽ'}, // 2cbc → 2cbd + {u'Ⲿ', u'ⲿ'}, // 2cbe → 2cbf + {u'Ⳁ', u'ⳁ'}, // 2cc0 → 2cc1 + {u'Ⳃ', u'ⳃ'}, // 2cc2 → 2cc3 + {u'Ⳅ', u'ⳅ'}, // 2cc4 → 2cc5 + {u'Ⳇ', u'ⳇ'}, // 2cc6 → 2cc7 + {u'Ⳉ', u'ⳉ'}, // 2cc8 → 2cc9 + {u'Ⳋ', u'ⳋ'}, // 2cca → 2ccb + {u'Ⳍ', u'ⳍ'}, // 2ccc → 2ccd + {u'Ⳏ', u'ⳏ'}, // 2cce → 2ccf + {u'Ⳑ', u'ⳑ'}, // 2cd0 → 2cd1 + {u'Ⳓ', u'ⳓ'}, // 2cd2 → 2cd3 + {u'Ⳕ', u'ⳕ'}, // 2cd4 → 2cd5 + {u'Ⳗ', u'ⳗ'}, // 2cd6 → 2cd7 + {u'Ⳙ', u'ⳙ'}, // 2cd8 → 2cd9 + {u'Ⳛ', u'ⳛ'}, // 2cda → 2cdb + {u'Ⳝ', u'ⳝ'}, // 2cdc → 2cdd + {u'Ⳟ', u'ⳟ'}, // 2cde → 2cdf + {u'Ⳡ', u'ⳡ'}, // 2ce0 → 2ce1 + {u'Ⳣ', u'ⳣ'}, // 2ce2 → 2ce3 + {u'Ⳬ', u'ⳬ'}, // 2ceb → 2cec + {u'Ⳮ', u'ⳮ'}, // 2ced → 2cee + {u'Ⳳ', u'ⳳ'}, // 2cf2 → 2cf3 + {u'Ꙁ', u'ꙁ'}, // a640 → a641 + {u'Ꙃ', u'ꙃ'}, // a642 → a643 + {u'Ꙅ', u'ꙅ'}, // a644 → a645 + {u'Ꙇ', u'ꙇ'}, // a646 → a647 + {u'Ꙉ', u'ꙉ'}, // a648 → a649 + {u'Ꙋ', u'ꙋ'}, // a64a → a64b + {u'Ꙍ', u'ꙍ'}, // a64c → a64d + {u'Ꙏ', u'ꙏ'}, // a64e → a64f + {u'Ꙑ', u'ꙑ'}, // a650 → a651 + {u'Ꙓ', u'ꙓ'}, // a652 → a653 + {u'Ꙕ', u'ꙕ'}, // a654 → a655 + {u'Ꙗ', u'ꙗ'}, // a656 → a657 + {u'Ꙙ', u'ꙙ'}, // a658 → a659 + {u'Ꙛ', u'ꙛ'}, // a65a → a65b + {u'Ꙝ', u'ꙝ'}, // a65c → a65d + {u'Ꙟ', u'ꙟ'}, // a65e → a65f + {u'Ꙡ', u'ꙡ'}, // a660 → a661 + {u'Ꙣ', u'ꙣ'}, // a662 → a663 + {u'Ꙥ', u'ꙥ'}, // a664 → a665 + {u'Ꙧ', u'ꙧ'}, // a666 → a667 + {u'Ꙩ', u'ꙩ'}, // a668 → a669 + {u'Ꙫ', u'ꙫ'}, // a66a → a66b + {u'Ꙭ', u'ꙭ'}, // a66c → a66d + {u'Ꚁ', u'ꚁ'}, // a680 → a681 + {u'Ꚃ', u'ꚃ'}, // a682 → a683 + {u'Ꚅ', u'ꚅ'}, // a684 → a685 + {u'Ꚇ', u'ꚇ'}, // a686 → a687 + {u'Ꚉ', u'ꚉ'}, // a688 → a689 + {u'Ꚋ', u'ꚋ'}, // a68a → a68b + {u'Ꚍ', u'ꚍ'}, // a68c → a68d + {u'Ꚏ', u'ꚏ'}, // a68e → a68f + {u'Ꚑ', u'ꚑ'}, // a690 → a691 + {u'Ꚓ', u'ꚓ'}, // a692 → a693 + {u'Ꚕ', u'ꚕ'}, // a694 → a695 + {u'Ꚗ', u'ꚗ'}, // a696 → a697 + {u'Ꚙ', u'ꚙ'}, // a698 → a699 + {u'Ꚛ', u'ꚛ'}, // a69a → a69b + {u'Ꜣ', u'ꜣ'}, // a722 → a723 + {u'Ꜥ', u'ꜥ'}, // a724 → a725 + {u'Ꜧ', u'ꜧ'}, // a726 → a727 + {u'Ꜩ', u'ꜩ'}, // a728 → a729 + {u'Ꜫ', u'ꜫ'}, // a72a → a72b + {u'Ꜭ', u'ꜭ'}, // a72c → a72d + {u'Ꜯ', u'ꜯ'}, // a72e → a72f + {u'Ꜳ', u'ꜳ'}, // a732 → a733 + {u'Ꜵ', u'ꜵ'}, // a734 → a735 + {u'Ꜷ', u'ꜷ'}, // a736 → a737 + {u'Ꜹ', u'ꜹ'}, // a738 → a739 + {u'Ꜻ', u'ꜻ'}, // a73a → a73b + {u'Ꜽ', u'ꜽ'}, // a73c → a73d + {u'Ꜿ', u'ꜿ'}, // a73e → a73f + {u'Ꝁ', u'ꝁ'}, // a740 → a741 + {u'Ꝃ', u'ꝃ'}, // a742 → a743 + {u'Ꝅ', u'ꝅ'}, // a744 → a745 + {u'Ꝇ', u'ꝇ'}, // a746 → a747 + {u'Ꝉ', u'ꝉ'}, // a748 → a749 + {u'Ꝋ', u'ꝋ'}, // a74a → a74b + {u'Ꝍ', u'ꝍ'}, // a74c → a74d + {u'Ꝏ', u'ꝏ'}, // a74e → a74f + {u'Ꝑ', u'ꝑ'}, // a750 → a751 + {u'Ꝓ', u'ꝓ'}, // a752 → a753 + {u'Ꝕ', u'ꝕ'}, // a754 → a755 + {u'Ꝗ', u'ꝑ'}, // a756 → a751 + {u'Ꝙ', u'ꝙ'}, // a758 → a759 + {u'Ꝛ', u'ꝛ'}, // a75a → a75b + {u'Ꝝ', u'ꝝ'}, // a75c → a75d + {u'Ꝟ', u'ꝟ'}, // a75e → a75f + {u'Ꝡ', u'ꝡ'}, // a760 → a761 + {u'Ꝣ', u'ꝣ'}, // a762 → a763 + {u'Ꝥ', u'ꝥ'}, // a764 → a765 + {u'Ꝧ', u'ꝑ'}, // a766 → a751 + {u'Ꝩ', u'ꝩ'}, // a768 → a769 + {u'Ꝫ', u'ꝫ'}, // a76a → a76b + {u'Ꝭ', u'ꝭ'}, // a76c → a76d + {u'Ꝯ', u'ꝯ'}, // a76e → a76f + {u'Ꝺ', u'ꝺ'}, // a779 → a77a + {u'Ꝼ', u'ꝼ'}, // a77b → a77c + {u'Ᵹ', u'ᵹ'}, // a77d → 1d79 + {u'Ꝿ', u'ꝿ'}, // a77e → a77f + {u'Ꞁ', u'ꞁ'}, // a780 → a781 + {u'Ꞃ', u'ꞃ'}, // a782 → a783 + {u'Ꞅ', u'ꞅ'}, // a784 → a785 + {u'Ꞇ', u'ꞇ'}, // a786 → a787 + {u'Ꞌ', u'ꞌ'}, // a78b → a78c + {u'Ɥ', u'ɥ'}, // a78d → 0265 + {u'Ꞑ', u'ꞑ'}, // a790 → a791 + {u'Ꞓ', u'ꞓ'}, // a792 → a793 + {u'Ꞗ', u'ꞗ'}, // a796 → a797 + {u'Ꞙ', u'ꞙ'}, // a798 → a799 + {u'Ꞛ', u'ꞛ'}, // a79a → a79b + {u'Ꞝ', u'ꞝ'}, // a79c → a79d + {u'Ꞟ', u'ꞟ'}, // a79e → a79f + {u'Ꞡ', u'ꞡ'}, // a7a0 → a7a1 + {u'Ꞣ', u'ꞣ'}, // a7a2 → a7a3 + {u'Ꞥ', u'ꞥ'}, // a7a4 → a7a5 + {u'Ꞧ', u'ꞧ'}, // a7a6 → a7a7 + {u'Ꞩ', u'ꞩ'}, // a7a8 → a7a9 + {u'Ɦ', u'ɦ'}, // a7aa → 0266 + {u'Ɜ', u'ɜ'}, // a7ab → 025c + {u'Ɡ', u'ɡ'}, // a7ac → 0261 + {u'Ɬ', u'ɬ'}, // a7ad → 026c + {u'Ʞ', u'ʞ'}, // a7b0 → 029e + {u'Ʇ', u'ʇ'}, // a7b1 → 0287 + {u'Ʝ', u'ʝ'}, // a7b2 → 029d + {u'Ꭓ', u'ꭓ'}, // a7b3 → ab53 + {u'Ꞵ', u'ꞵ'}, // a7b4 → a7b5 + {u'Ꞷ', u'ꞷ'}, // a7b6 → a7b7 + {u'Ꞹ', u'ꞹ'}, // a7b8 → a7b9 + {u'Ꞻ', u'ꞻ'}, // a7ba → a7bb + {u'Ꞽ', u'ꞽ'}, // a7bc → a7bd + {u'Ꞿ', u'ꞿ'}, // a7be → a7bf + {u'Ꟃ', u'ꟃ'}, // a7c2 → a7c3 + {u'Ꞔ', u'ꞔ'}, // a7c4 → a794 + {u'Ʂ', u'ʂ'}, // a7c5 → 0282 + {u'Ᶎ', u'ᶎ'}, // a7c6 → 1d8e + {u'A', u'a'}, // ff21 → ff41 + {u'B', u'b'}, // ff22 → ff42 + {u'C', u'c'}, // ff23 → ff43 + {u'D', u'd'}, // ff24 → ff44 + {u'E', u'e'}, // ff25 → ff45 + {u'F', u'f'}, // ff26 → ff46 + {u'G', u'g'}, // ff27 → ff47 + {u'H', u'h'}, // ff28 → ff48 + {u'I', u'i'}, // ff29 → ff49 + {u'J', u'j'}, // ff2a → ff4a + {u'K', u'k'}, // ff2b → ff4b + {u'L', u'l'}, // ff2c → ff4c + {u'M', u'm'}, // ff2d → ff4d + {u'N', u'n'}, // ff2e → ff4e + {u'O', u'o'}, // ff2f → ff4f + {u'P', u'p'}, // ff30 → ff50 + {u'Q', u'q'}, // ff31 → ff51 + {u'R', u'r'}, // ff32 → ff52 + {u'S', u's'}, // ff33 → ff53 + {u'T', u't'}, // ff34 → ff54 + {u'U', u'u'}, // ff35 → ff55 + {u'V', u'v'}, // ff36 → ff56 + {u'W', u'w'}, // ff37 → ff57 + {u'X', u'x'}, // ff38 → ff58 + {u'Y', u'y'}, // ff39 → ff59 + {u'Z', u'z'}, // ff3a → ff5a +#endif +}; + +static const char32_t kUpperToLowerAstral[][2] = { + {L'ℂ', L'𝕔'}, // 00002102 → 0001d554 + {L'ℋ', L'𝒽'}, // 0000210b → 0001d4bd + {L'ℍ', L'𝕙'}, // 0000210d → 0001d559 + {L'ℐ', L'𝒾'}, // 00002110 → 0001d4be + {L'ℕ', L'𝕟'}, // 00002115 → 0001d55f + {L'ℚ', L'𝕢'}, // 0000211a → 0001d562 + {L'ℛ', L'𝓇'}, // 0000211b → 0001d4c7 + {L'ℝ', L'𝕣'}, // 0000211d → 0001d563 + {L'ℤ', L'𝕫'}, // 00002124 → 0001d56b + {L'ℬ', L'𝒷'}, // 0000212c → 0001d4b7 + {L'ℱ', L'𝒻'}, // 00002131 → 0001d4bb + {L'ℳ', L'𝓂'}, // 00002133 → 0001d4c2 + {L'𐐀', L'𐐨'}, // 00010400 → 00010428 + {L'𐐁', L'𐐩'}, // 00010401 → 00010429 + {L'𐐂', L'𐐪'}, // 00010402 → 0001042a + {L'𐐃', L'𐐫'}, // 00010403 → 0001042b + {L'𐐄', L'𐐬'}, // 00010404 → 0001042c + {L'𐐅', L'𐐭'}, // 00010405 → 0001042d + {L'𐐆', L'𐐮'}, // 00010406 → 0001042e + {L'𐐇', L'𐐯'}, // 00010407 → 0001042f + {L'𐐈', L'𐐰'}, // 00010408 → 00010430 + {L'𐐉', L'𐐱'}, // 00010409 → 00010431 + {L'𐐊', L'𐐲'}, // 0001040a → 00010432 + {L'𐐋', L'𐐳'}, // 0001040b → 00010433 + {L'𐐌', L'𐐴'}, // 0001040c → 00010434 + {L'𐐍', L'𐐵'}, // 0001040d → 00010435 + {L'𐐎', L'𐐶'}, // 0001040e → 00010436 + {L'𐐏', L'𐐷'}, // 0001040f → 00010437 + {L'𐐐', L'𐐸'}, // 00010410 → 00010438 + {L'𐐑', L'𐐹'}, // 00010411 → 00010439 + {L'𐐒', L'𐐺'}, // 00010412 → 0001043a + {L'𐐓', L'𐐻'}, // 00010413 → 0001043b + {L'𐐔', L'𐐼'}, // 00010414 → 0001043c + {L'𐐕', L'𐐽'}, // 00010415 → 0001043d + {L'𐐖', L'𐐾'}, // 00010416 → 0001043e + {L'𐐗', L'𐐿'}, // 00010417 → 0001043f + {L'𐐘', L'𐑀'}, // 00010418 → 00010440 + {L'𐐙', L'𐑁'}, // 00010419 → 00010441 + {L'𐐚', L'𐑂'}, // 0001041a → 00010442 + {L'𐐛', L'𐑃'}, // 0001041b → 00010443 + {L'𐐜', L'𐑄'}, // 0001041c → 00010444 + {L'𐐝', L'𐑅'}, // 0001041d → 00010445 + {L'𐐞', L'𐑆'}, // 0001041e → 00010446 + {L'𐐟', L'𐑇'}, // 0001041f → 00010447 + {L'𐐠', L'𐑈'}, // 00010420 → 00010448 + {L'𐐡', L'𐑉'}, // 00010421 → 00010449 + {L'𐐢', L'𐑊'}, // 00010422 → 0001044a + {L'𐐣', L'𐑋'}, // 00010423 → 0001044b + {L'𐐤', L'𐑌'}, // 00010424 → 0001044c + {L'𐐥', L'𐑍'}, // 00010425 → 0001044d + {L'𐐦', L'𐑎'}, // 00010426 → 0001044e + {L'𐐧', L'𐑏'}, // 00010427 → 0001044f + {L'𐒰', L'𐓘'}, // 000104b0 → 000104d8 + {L'𐒱', L'𐓙'}, // 000104b1 → 000104d9 + {L'𐒲', L'𐓚'}, // 000104b2 → 000104da + {L'𐒳', L'𐓛'}, // 000104b3 → 000104db + {L'𐒴', L'𐓜'}, // 000104b4 → 000104dc + {L'𐒵', L'𐓝'}, // 000104b5 → 000104dd + {L'𐒶', L'𐓞'}, // 000104b6 → 000104de + {L'𐒷', L'𐓟'}, // 000104b7 → 000104df + {L'𐒸', L'𐓠'}, // 000104b8 → 000104e0 + {L'𐒹', L'𐓡'}, // 000104b9 → 000104e1 + {L'𐒺', L'𐓢'}, // 000104ba → 000104e2 + {L'𐒻', L'𐓣'}, // 000104bb → 000104e3 + {L'𐒼', L'𐓤'}, // 000104bc → 000104e4 + {L'𐒽', L'𐓥'}, // 000104bd → 000104e5 + {L'𐒾', L'𐓦'}, // 000104be → 000104e6 + {L'𐒿', L'𐓧'}, // 000104bf → 000104e7 + {L'𐓀', L'𐓨'}, // 000104c0 → 000104e8 + {L'𐓁', L'𐓩'}, // 000104c1 → 000104e9 + {L'𐓂', L'𐓪'}, // 000104c2 → 000104ea + {L'𐓃', L'𐓫'}, // 000104c3 → 000104eb + {L'𐓄', L'𐓬'}, // 000104c4 → 000104ec + {L'𐓅', L'𐓭'}, // 000104c5 → 000104ed + {L'𐓆', L'𐓮'}, // 000104c6 → 000104ee + {L'𐓇', L'𐓯'}, // 000104c7 → 000104ef + {L'𐓈', L'𐓰'}, // 000104c8 → 000104f0 + {L'𐓉', L'𐓱'}, // 000104c9 → 000104f1 + {L'𐓊', L'𐓲'}, // 000104ca → 000104f2 + {L'𐓋', L'𐓳'}, // 000104cb → 000104f3 + {L'𐓌', L'𐓴'}, // 000104cc → 000104f4 + {L'𐓍', L'𐓵'}, // 000104cd → 000104f5 + {L'𐓎', L'𐓶'}, // 000104ce → 000104f6 + {L'𐓏', L'𐓷'}, // 000104cf → 000104f7 + {L'𐓐', L'𐓸'}, // 000104d0 → 000104f8 + {L'𐓑', L'𐓹'}, // 000104d1 → 000104f9 + {L'𐓒', L'𐓺'}, // 000104d2 → 000104fa + {L'𐓓', L'𐓻'}, // 000104d3 → 000104fb + {L'𐲀', L'𐳀'}, // 00010c80 → 00010cc0 + {L'𐲁', L'𐳁'}, // 00010c81 → 00010cc1 + {L'𐲂', L'𐳂'}, // 00010c82 → 00010cc2 + {L'𐲃', L'𐳃'}, // 00010c83 → 00010cc3 + {L'𐲄', L'𐳄'}, // 00010c84 → 00010cc4 + {L'𐲅', L'𐳅'}, // 00010c85 → 00010cc5 + {L'𐲆', L'𐳆'}, // 00010c86 → 00010cc6 + {L'𐲇', L'𐳇'}, // 00010c87 → 00010cc7 + {L'𐲈', L'𐳈'}, // 00010c88 → 00010cc8 + {L'𐲉', L'𐳂'}, // 00010c89 → 00010cc2 + {L'𐲊', L'𐳊'}, // 00010c8a → 00010cca + {L'𐲋', L'𐳋'}, // 00010c8b → 00010ccb + {L'𐲌', L'𐳌'}, // 00010c8c → 00010ccc + {L'𐲍', L'𐳍'}, // 00010c8d → 00010ccd + {L'𐲎', L'𐳎'}, // 00010c8e → 00010cce + {L'𐲏', L'𐳏'}, // 00010c8f → 00010ccf + {L'𐲐', L'𐳐'}, // 00010c90 → 00010cd0 + {L'𐲑', L'𐳑'}, // 00010c91 → 00010cd1 + {L'𐲒', L'𐳒'}, // 00010c92 → 00010cd2 + {L'𐲓', L'𐳓'}, // 00010c93 → 00010cd3 + {L'𐲔', L'𐳔'}, // 00010c94 → 00010cd4 + {L'𐲕', L'𐳕'}, // 00010c95 → 00010cd5 + {L'𐲖', L'𐳖'}, // 00010c96 → 00010cd6 + {L'𐲗', L'𐳗'}, // 00010c97 → 00010cd7 + {L'𐲘', L'𐳘'}, // 00010c98 → 00010cd8 + {L'𐲙', L'𐳅'}, // 00010c99 → 00010cc5 + {L'𐲚', L'𐳚'}, // 00010c9a → 00010cda + {L'𐲛', L'𐳛'}, // 00010c9b → 00010cdb + {L'𐲜', L'𐳜'}, // 00010c9c → 00010cdc + {L'𐲝', L'𐳝'}, // 00010c9d → 00010cdd + {L'𐲞', L'𐳞'}, // 00010c9e → 00010cde + {L'𐲟', L'𐳟'}, // 00010c9f → 00010cdf + {L'𐲠', L'𐳠'}, // 00010ca0 → 00010ce0 + {L'𐲡', L'𐳡'}, // 00010ca1 → 00010ce1 + {L'𐲢', L'𐳢'}, // 00010ca2 → 00010ce2 + {L'𐲣', L'𐳣'}, // 00010ca3 → 00010ce3 + {L'𐲤', L'𐳤'}, // 00010ca4 → 00010ce4 + {L'𐲥', L'𐳥'}, // 00010ca5 → 00010ce5 + {L'𐲦', L'𐳦'}, // 00010ca6 → 00010ce6 + {L'𐲧', L'𐳧'}, // 00010ca7 → 00010ce7 + {L'𐲨', L'𐳨'}, // 00010ca8 → 00010ce8 + {L'𐲩', L'𐳩'}, // 00010ca9 → 00010ce9 + {L'𐲪', L'𐳕'}, // 00010caa → 00010cd5 + {L'𐲫', L'𐳫'}, // 00010cab → 00010ceb + {L'𐲬', L'𐳬'}, // 00010cac → 00010cec + {L'𐲭', L'𐳭'}, // 00010cad → 00010ced + {L'𐲮', L'𐳮'}, // 00010cae → 00010cee + {L'𐲯', L'𐳯'}, // 00010caf → 00010cef + {L'𐲰', L'𐳰'}, // 00010cb0 → 00010cf0 + {L'𐲱', L'𐳱'}, // 00010cb1 → 00010cf1 + {L'𐲲', L'𐳲'}, // 00010cb2 → 00010cf2 + {L'𑢠', L'𑣀'}, // 000118a0 → 000118c0 + {L'𑢡', L'𑣁'}, // 000118a1 → 000118c1 + {L'𑢢', L'𑣂'}, // 000118a2 → 000118c2 + {L'𑢣', L'𑣃'}, // 000118a3 → 000118c3 + {L'𑢤', L'𑣄'}, // 000118a4 → 000118c4 + {L'𑢥', L'𑣅'}, // 000118a5 → 000118c5 + {L'𑢦', L'𑣆'}, // 000118a6 → 000118c6 + {L'𑢧', L'𑣇'}, // 000118a7 → 000118c7 + {L'𑢨', L'𑣈'}, // 000118a8 → 000118c8 + {L'𑢩', L'𑣉'}, // 000118a9 → 000118c9 + {L'𑢪', L'𑣊'}, // 000118aa → 000118ca + {L'𑢫', L'𑣋'}, // 000118ab → 000118cb + {L'𑢬', L'𑣌'}, // 000118ac → 000118cc + {L'𑢭', L'𑣍'}, // 000118ad → 000118cd + {L'𑢮', L'𑣎'}, // 000118ae → 000118ce + {L'𑢯', L'𑣏'}, // 000118af → 000118cf + {L'𑢰', L'𑣐'}, // 000118b0 → 000118d0 + {L'𑢱', L'𑣑'}, // 000118b1 → 000118d1 + {L'𑢲', L'𑣒'}, // 000118b2 → 000118d2 + {L'𑢳', L'𑣓'}, // 000118b3 → 000118d3 + {L'𑢴', L'𑣔'}, // 000118b4 → 000118d4 + {L'𑢵', L'𑣕'}, // 000118b5 → 000118d5 + {L'𑢶', L'𑣖'}, // 000118b6 → 000118d6 + {L'𑢷', L'𑣗'}, // 000118b7 → 000118d7 + {L'𑢸', L'𑣘'}, // 000118b8 → 000118d8 + {L'𑢹', L'𑣙'}, // 000118b9 → 000118d9 + {L'𑢺', L'𑣚'}, // 000118ba → 000118da + {L'𑢻', L'𑣛'}, // 000118bb → 000118db + {L'𑢼', L'𑣜'}, // 000118bc → 000118dc + {L'𑢽', L'𑣝'}, // 000118bd → 000118dd + {L'𑢾', L'𑣞'}, // 000118be → 000118de + {L'𑢿', L'𑣟'}, // 000118bf → 000118df + {L'𖹀', L'𖹠'}, // 00016e40 → 00016e60 + {L'𖹁', L'𖹡'}, // 00016e41 → 00016e61 + {L'𖹂', L'𖹢'}, // 00016e42 → 00016e62 + {L'𖹃', L'𖹣'}, // 00016e43 → 00016e63 + {L'𖹄', L'𖹤'}, // 00016e44 → 00016e64 + {L'𖹅', L'𖹥'}, // 00016e45 → 00016e65 + {L'𖹆', L'𖹦'}, // 00016e46 → 00016e66 + {L'𖹇', L'𖹧'}, // 00016e47 → 00016e67 + {L'𖹈', L'𖹨'}, // 00016e48 → 00016e68 + {L'𖹉', L'𖹩'}, // 00016e49 → 00016e69 + {L'𖹊', L'𖹪'}, // 00016e4a → 00016e6a + {L'𖹋', L'𖹫'}, // 00016e4b → 00016e6b + {L'𖹌', L'𖹬'}, // 00016e4c → 00016e6c + {L'𖹍', L'𖹭'}, // 00016e4d → 00016e6d + {L'𖹎', L'𖹮'}, // 00016e4e → 00016e6e + {L'𖹏', L'𖹯'}, // 00016e4f → 00016e6f + {L'𖹐', L'𖹰'}, // 00016e50 → 00016e70 + {L'𖹑', L'𖹱'}, // 00016e51 → 00016e71 + {L'𖹒', L'𖹲'}, // 00016e52 → 00016e72 + {L'𖹓', L'𖹳'}, // 00016e53 → 00016e73 + {L'𖹔', L'𖹴'}, // 00016e54 → 00016e74 + {L'𖹕', L'𖹵'}, // 00016e55 → 00016e75 + {L'𖹖', L'𖹶'}, // 00016e56 → 00016e76 + {L'𖹗', L'𖹷'}, // 00016e57 → 00016e77 + {L'𖹘', L'𖹸'}, // 00016e58 → 00016e78 + {L'𖹙', L'𖹹'}, // 00016e59 → 00016e79 + {L'𖹚', L'𖹺'}, // 00016e5a → 00016e7a + {L'𖹛', L'𖹻'}, // 00016e5b → 00016e7b + {L'𖹜', L'𖹼'}, // 00016e5c → 00016e7c + {L'𖹝', L'𖹽'}, // 00016e5d → 00016e7d + {L'𖹞', L'𖹾'}, // 00016e5e → 00016e7e + {L'𖹟', L'𖹿'}, // 00016e5f → 00016e7f + {L'𝐀', L'𝐚'}, // 0001d400 → 0001d41a + {L'𝐁', L'𝐛'}, // 0001d401 → 0001d41b + {L'𝐂', L'𝐜'}, // 0001d402 → 0001d41c + {L'𝐃', L'𝐝'}, // 0001d403 → 0001d41d + {L'𝐄', L'𝐞'}, // 0001d404 → 0001d41e + {L'𝐅', L'𝐟'}, // 0001d405 → 0001d41f + {L'𝐆', L'𝐠'}, // 0001d406 → 0001d420 + {L'𝐇', L'𝐡'}, // 0001d407 → 0001d421 + {L'𝐈', L'𝐢'}, // 0001d408 → 0001d422 + {L'𝐉', L'𝐣'}, // 0001d409 → 0001d423 + {L'𝐊', L'𝐤'}, // 0001d40a → 0001d424 + {L'𝐋', L'𝐥'}, // 0001d40b → 0001d425 + {L'𝐌', L'𝐦'}, // 0001d40c → 0001d426 + {L'𝐍', L'𝐧'}, // 0001d40d → 0001d427 + {L'𝐎', L'𝐨'}, // 0001d40e → 0001d428 + {L'𝐏', L'𝐩'}, // 0001d40f → 0001d429 + {L'𝐐', L'𝐪'}, // 0001d410 → 0001d42a + {L'𝐑', L'𝐫'}, // 0001d411 → 0001d42b + {L'𝐒', L'𝐬'}, // 0001d412 → 0001d42c + {L'𝐓', L'𝐭'}, // 0001d413 → 0001d42d + {L'𝐔', L'𝐮'}, // 0001d414 → 0001d42e + {L'𝐕', L'𝐯'}, // 0001d415 → 0001d42f + {L'𝐖', L'𝐰'}, // 0001d416 → 0001d430 + {L'𝐗', L'𝐱'}, // 0001d417 → 0001d431 + {L'𝐘', L'𝐲'}, // 0001d418 → 0001d432 + {L'𝐙', L'𝐳'}, // 0001d419 → 0001d433 + {L'𝐴', L'𝑎'}, // 0001d434 → 0001d44e + {L'𝐵', L'𝑏'}, // 0001d435 → 0001d44f + {L'𝐶', L'𝑐'}, // 0001d436 → 0001d450 + {L'𝐷', L'𝑑'}, // 0001d437 → 0001d451 + {L'𝐸', L'𝑒'}, // 0001d438 → 0001d452 + {L'𝐹', L'𝑓'}, // 0001d439 → 0001d453 + {L'𝐺', L'𝑔'}, // 0001d43a → 0001d454 + {L'𝐼', L'𝑖'}, // 0001d43c → 0001d456 + {L'𝐽', L'𝑗'}, // 0001d43d → 0001d457 + {L'𝐾', L'𝑘'}, // 0001d43e → 0001d458 + {L'𝐿', L'𝑙'}, // 0001d43f → 0001d459 + {L'𝑀', L'𝑚'}, // 0001d440 → 0001d45a + {L'𝑁', L'𝑛'}, // 0001d441 → 0001d45b + {L'𝑂', L'𝑜'}, // 0001d442 → 0001d45c + {L'𝑃', L'𝑝'}, // 0001d443 → 0001d45d + {L'𝑄', L'𝑞'}, // 0001d444 → 0001d45e + {L'𝑅', L'𝑟'}, // 0001d445 → 0001d45f + {L'𝑆', L'𝑠'}, // 0001d446 → 0001d460 + {L'𝑇', L'𝑡'}, // 0001d447 → 0001d461 + {L'𝑈', L'𝑢'}, // 0001d448 → 0001d462 + {L'𝑉', L'𝑣'}, // 0001d449 → 0001d463 + {L'𝑊', L'𝑤'}, // 0001d44a → 0001d464 + {L'𝑋', L'𝑥'}, // 0001d44b → 0001d465 + {L'𝑌', L'𝑦'}, // 0001d44c → 0001d466 + {L'𝑍', L'𝑧'}, // 0001d44d → 0001d467 + {L'𝑨', L'𝒂'}, // 0001d468 → 0001d482 + {L'𝑩', L'𝒃'}, // 0001d469 → 0001d483 + {L'𝑪', L'𝒄'}, // 0001d46a → 0001d484 + {L'𝑫', L'𝒅'}, // 0001d46b → 0001d485 + {L'𝑬', L'𝒆'}, // 0001d46c → 0001d486 + {L'𝑭', L'𝒇'}, // 0001d46d → 0001d487 + {L'𝑮', L'𝒈'}, // 0001d46e → 0001d488 + {L'𝑯', L'𝒉'}, // 0001d46f → 0001d489 + {L'𝑰', L'𝒊'}, // 0001d470 → 0001d48a + {L'𝑱', L'𝒋'}, // 0001d471 → 0001d48b + {L'𝑲', L'𝒌'}, // 0001d472 → 0001d48c + {L'𝑳', L'𝒍'}, // 0001d473 → 0001d48d + {L'𝑴', L'𝒎'}, // 0001d474 → 0001d48e + {L'𝑵', L'𝒏'}, // 0001d475 → 0001d48f + {L'𝑶', L'𝒐'}, // 0001d476 → 0001d490 + {L'𝑷', L'𝒑'}, // 0001d477 → 0001d491 + {L'𝑸', L'𝒒'}, // 0001d478 → 0001d492 + {L'𝑹', L'𝒓'}, // 0001d479 → 0001d493 + {L'𝑺', L'𝒔'}, // 0001d47a → 0001d494 + {L'𝑻', L'𝒕'}, // 0001d47b → 0001d495 + {L'𝑼', L'𝒖'}, // 0001d47c → 0001d496 + {L'𝑽', L'𝒗'}, // 0001d47d → 0001d497 + {L'𝑾', L'𝒘'}, // 0001d47e → 0001d498 + {L'𝑿', L'𝒙'}, // 0001d47f → 0001d499 + {L'𝒀', L'𝒚'}, // 0001d480 → 0001d49a + {L'𝒁', L'𝒛'}, // 0001d481 → 0001d49b + {L'𝒜', L'𝒶'}, // 0001d49c → 0001d4b6 + {L'𝒞', L'𝒸'}, // 0001d49e → 0001d4b8 + {L'𝒟', L'𝒹'}, // 0001d49f → 0001d4b9 + {L'𝒥', L'𝒿'}, // 0001d4a5 → 0001d4bf + {L'𝒦', L'𝓀'}, // 0001d4a6 → 0001d4c0 + {L'𝒩', L'𝓃'}, // 0001d4a9 → 0001d4c3 + {L'𝒫', L'𝓅'}, // 0001d4ab → 0001d4c5 + {L'𝒬', L'𝓆'}, // 0001d4ac → 0001d4c6 + {L'𝒮', L'𝓈'}, // 0001d4ae → 0001d4c8 + {L'𝒯', L'𝓉'}, // 0001d4af → 0001d4c9 + {L'𝒰', L'𝓊'}, // 0001d4b0 → 0001d4ca + {L'𝒱', L'𝓋'}, // 0001d4b1 → 0001d4cb + {L'𝒲', L'𝓌'}, // 0001d4b2 → 0001d4cc + {L'𝒳', L'𝓍'}, // 0001d4b3 → 0001d4cd + {L'𝒴', L'𝓎'}, // 0001d4b4 → 0001d4ce + {L'𝒵', L'𝓏'}, // 0001d4b5 → 0001d4cf + {L'𝓐', L'𝓪'}, // 0001d4d0 → 0001d4ea + {L'𝓑', L'𝓫'}, // 0001d4d1 → 0001d4eb + {L'𝓒', L'𝓬'}, // 0001d4d2 → 0001d4ec + {L'𝓓', L'𝓭'}, // 0001d4d3 → 0001d4ed + {L'𝓔', L'𝓮'}, // 0001d4d4 → 0001d4ee + {L'𝓕', L'𝓯'}, // 0001d4d5 → 0001d4ef + {L'𝓖', L'𝓰'}, // 0001d4d6 → 0001d4f0 + {L'𝓗', L'𝓱'}, // 0001d4d7 → 0001d4f1 + {L'𝓘', L'𝓲'}, // 0001d4d8 → 0001d4f2 + {L'𝓙', L'𝓳'}, // 0001d4d9 → 0001d4f3 + {L'𝓚', L'𝓴'}, // 0001d4da → 0001d4f4 + {L'𝓛', L'𝓵'}, // 0001d4db → 0001d4f5 + {L'𝓜', L'𝓶'}, // 0001d4dc → 0001d4f6 + {L'𝓝', L'𝓷'}, // 0001d4dd → 0001d4f7 + {L'𝓞', L'𝓸'}, // 0001d4de → 0001d4f8 + {L'𝓟', L'𝓹'}, // 0001d4df → 0001d4f9 + {L'𝓠', L'𝓺'}, // 0001d4e0 → 0001d4fa + {L'𝓡', L'𝓻'}, // 0001d4e1 → 0001d4fb + {L'𝓢', L'𝓼'}, // 0001d4e2 → 0001d4fc + {L'𝓣', L'𝓽'}, // 0001d4e3 → 0001d4fd + {L'𝓤', L'𝓾'}, // 0001d4e4 → 0001d4fe + {L'𝓥', L'𝓿'}, // 0001d4e5 → 0001d4ff + {L'𝓦', L'𝔀'}, // 0001d4e6 → 0001d500 + {L'𝓧', L'𝔁'}, // 0001d4e7 → 0001d501 + {L'𝓨', L'𝔂'}, // 0001d4e8 → 0001d502 + {L'𝓩', L'𝔃'}, // 0001d4e9 → 0001d503 + {L'𝔄', L'𝔞'}, // 0001d504 → 0001d51e + {L'𝔅', L'𝔟'}, // 0001d505 → 0001d51f + {L'𝔇', L'𝔡'}, // 0001d507 → 0001d521 + {L'𝔈', L'𝔢'}, // 0001d508 → 0001d522 + {L'𝔉', L'𝔣'}, // 0001d509 → 0001d523 + {L'𝔊', L'𝔤'}, // 0001d50a → 0001d524 + {L'𝔍', L'𝔧'}, // 0001d50d → 0001d527 + {L'𝔎', L'𝔨'}, // 0001d50e → 0001d528 + {L'𝔏', L'𝔩'}, // 0001d50f → 0001d529 + {L'𝔐', L'𝔪'}, // 0001d510 → 0001d52a + {L'𝔑', L'𝔫'}, // 0001d511 → 0001d52b + {L'𝔒', L'𝔬'}, // 0001d512 → 0001d52c + {L'𝔓', L'𝔭'}, // 0001d513 → 0001d52d + {L'𝔔', L'𝔮'}, // 0001d514 → 0001d52e + {L'𝔖', L'𝔰'}, // 0001d516 → 0001d530 + {L'𝔗', L'𝔱'}, // 0001d517 → 0001d531 + {L'𝔘', L'𝔲'}, // 0001d518 → 0001d532 + {L'𝔙', L'𝔳'}, // 0001d519 → 0001d533 + {L'𝔚', L'𝔴'}, // 0001d51a → 0001d534 + {L'𝔛', L'𝔵'}, // 0001d51b → 0001d535 + {L'𝔜', L'𝔶'}, // 0001d51c → 0001d536 + {L'𝔸', L'𝕒'}, // 0001d538 → 0001d552 + {L'𝔹', L'𝕓'}, // 0001d539 → 0001d553 + {L'𝔻', L'𝕕'}, // 0001d53b → 0001d555 + {L'𝔼', L'𝕖'}, // 0001d53c → 0001d556 + {L'𝔽', L'𝕗'}, // 0001d53d → 0001d557 + {L'𝕀', L'𝕚'}, // 0001d540 → 0001d55a + {L'𝕁', L'𝕛'}, // 0001d541 → 0001d55b + {L'𝕂', L'𝕜'}, // 0001d542 → 0001d55c + {L'𝕃', L'𝕝'}, // 0001d543 → 0001d55d + {L'𝕄', L'𝕞'}, // 0001d544 → 0001d55e + {L'𝕆', L'𝕠'}, // 0001d546 → 0001d560 + {L'𝕊', L'𝕤'}, // 0001d54a → 0001d564 + {L'𝕋', L'𝕥'}, // 0001d54b → 0001d565 + {L'𝕌', L'𝕦'}, // 0001d54c → 0001d566 + {L'𝕍', L'𝕧'}, // 0001d54d → 0001d567 + {L'𝕎', L'𝕨'}, // 0001d54e → 0001d568 + {L'𝕏', L'𝕩'}, // 0001d54f → 0001d569 + {L'𝕐', L'𝕪'}, // 0001d550 → 0001d56a + {L'𝕬', L'𝖆'}, // 0001d56c → 0001d586 + {L'𝕭', L'𝖇'}, // 0001d56d → 0001d587 + {L'𝕮', L'𝖈'}, // 0001d56e → 0001d588 + {L'𝕯', L'𝖉'}, // 0001d56f → 0001d589 + {L'𝕰', L'𝖊'}, // 0001d570 → 0001d58a + {L'𝕱', L'𝖋'}, // 0001d571 → 0001d58b + {L'𝕲', L'𝖌'}, // 0001d572 → 0001d58c + {L'𝕳', L'𝖍'}, // 0001d573 → 0001d58d + {L'𝕴', L'𝖎'}, // 0001d574 → 0001d58e + {L'𝕵', L'𝖏'}, // 0001d575 → 0001d58f + {L'𝕶', L'𝖐'}, // 0001d576 → 0001d590 + {L'𝕷', L'𝖑'}, // 0001d577 → 0001d591 + {L'𝕸', L'𝖒'}, // 0001d578 → 0001d592 + {L'𝕹', L'𝖓'}, // 0001d579 → 0001d593 + {L'𝕺', L'𝖔'}, // 0001d57a → 0001d594 + {L'𝕻', L'𝖕'}, // 0001d57b → 0001d595 + {L'𝕼', L'𝖖'}, // 0001d57c → 0001d596 + {L'𝕽', L'𝖗'}, // 0001d57d → 0001d597 + {L'𝕾', L'𝖘'}, // 0001d57e → 0001d598 + {L'𝕿', L'𝖙'}, // 0001d57f → 0001d599 + {L'𝖀', L'𝖚'}, // 0001d580 → 0001d59a + {L'𝖁', L'𝖛'}, // 0001d581 → 0001d59b + {L'𝖂', L'𝖜'}, // 0001d582 → 0001d59c + {L'𝖃', L'𝖝'}, // 0001d583 → 0001d59d + {L'𝖄', L'𝖞'}, // 0001d584 → 0001d59e + {L'𝖅', L'𝖟'}, // 0001d585 → 0001d59f + {L'𝖠', L'𝖺'}, // 0001d5a0 → 0001d5ba + {L'𝖡', L'𝖻'}, // 0001d5a1 → 0001d5bb + {L'𝖢', L'𝖼'}, // 0001d5a2 → 0001d5bc + {L'𝖣', L'𝖽'}, // 0001d5a3 → 0001d5bd + {L'𝖤', L'𝖾'}, // 0001d5a4 → 0001d5be + {L'𝖥', L'𝖿'}, // 0001d5a5 → 0001d5bf + {L'𝖦', L'𝗀'}, // 0001d5a6 → 0001d5c0 + {L'𝖧', L'𝗁'}, // 0001d5a7 → 0001d5c1 + {L'𝖨', L'𝗂'}, // 0001d5a8 → 0001d5c2 + {L'𝖩', L'𝗃'}, // 0001d5a9 → 0001d5c3 + {L'𝖪', L'𝗄'}, // 0001d5aa → 0001d5c4 + {L'𝖫', L'𝗅'}, // 0001d5ab → 0001d5c5 + {L'𝖬', L'𝗆'}, // 0001d5ac → 0001d5c6 + {L'𝖭', L'𝗇'}, // 0001d5ad → 0001d5c7 + {L'𝖮', L'𝗈'}, // 0001d5ae → 0001d5c8 + {L'𝖯', L'𝗉'}, // 0001d5af → 0001d5c9 + {L'𝖰', L'𝗊'}, // 0001d5b0 → 0001d5ca + {L'𝖱', L'𝗋'}, // 0001d5b1 → 0001d5cb + {L'𝖲', L'𝗌'}, // 0001d5b2 → 0001d5cc + {L'𝖳', L'𝗍'}, // 0001d5b3 → 0001d5cd + {L'𝖴', L'𝗎'}, // 0001d5b4 → 0001d5ce + {L'𝖵', L'𝗏'}, // 0001d5b5 → 0001d5cf + {L'𝖶', L'𝗐'}, // 0001d5b6 → 0001d5d0 + {L'𝖷', L'𝗑'}, // 0001d5b7 → 0001d5d1 + {L'𝖸', L'𝗒'}, // 0001d5b8 → 0001d5d2 + {L'𝖹', L'𝗓'}, // 0001d5b9 → 0001d5d3 + {L'𝗔', L'𝗮'}, // 0001d5d4 → 0001d5ee + {L'𝗕', L'𝗯'}, // 0001d5d5 → 0001d5ef + {L'𝗖', L'𝗰'}, // 0001d5d6 → 0001d5f0 + {L'𝗗', L'𝗱'}, // 0001d5d7 → 0001d5f1 + {L'𝗘', L'𝗲'}, // 0001d5d8 → 0001d5f2 + {L'𝗙', L'𝗳'}, // 0001d5d9 → 0001d5f3 + {L'𝗚', L'𝗴'}, // 0001d5da → 0001d5f4 + {L'𝗛', L'𝗵'}, // 0001d5db → 0001d5f5 + {L'𝗜', L'𝗶'}, // 0001d5dc → 0001d5f6 + {L'𝗝', L'𝗷'}, // 0001d5dd → 0001d5f7 + {L'𝗞', L'𝗸'}, // 0001d5de → 0001d5f8 + {L'𝗟', L'𝗹'}, // 0001d5df → 0001d5f9 + {L'𝗠', L'𝗺'}, // 0001d5e0 → 0001d5fa + {L'𝗡', L'𝗻'}, // 0001d5e1 → 0001d5fb + {L'𝗢', L'𝗼'}, // 0001d5e2 → 0001d5fc + {L'𝗣', L'𝗽'}, // 0001d5e3 → 0001d5fd + {L'𝗤', L'𝗾'}, // 0001d5e4 → 0001d5fe + {L'𝗥', L'𝗿'}, // 0001d5e5 → 0001d5ff + {L'𝗦', L'𝘀'}, // 0001d5e6 → 0001d600 + {L'𝗧', L'𝘁'}, // 0001d5e7 → 0001d601 + {L'𝗨', L'𝘂'}, // 0001d5e8 → 0001d602 + {L'𝗩', L'𝘃'}, // 0001d5e9 → 0001d603 + {L'𝗪', L'𝘄'}, // 0001d5ea → 0001d604 + {L'𝗫', L'𝘅'}, // 0001d5eb → 0001d605 + {L'𝗬', L'𝘆'}, // 0001d5ec → 0001d606 + {L'𝗭', L'𝘇'}, // 0001d5ed → 0001d607 + {L'𝘈', L'𝘢'}, // 0001d608 → 0001d622 + {L'𝘉', L'𝘣'}, // 0001d609 → 0001d623 + {L'𝘊', L'𝘤'}, // 0001d60a → 0001d624 + {L'𝘋', L'𝘥'}, // 0001d60b → 0001d625 + {L'𝘌', L'𝘦'}, // 0001d60c → 0001d626 + {L'𝘍', L'𝘧'}, // 0001d60d → 0001d627 + {L'𝘎', L'𝘨'}, // 0001d60e → 0001d628 + {L'𝘏', L'𝘩'}, // 0001d60f → 0001d629 + {L'𝘐', L'𝘪'}, // 0001d610 → 0001d62a + {L'𝘑', L'𝘫'}, // 0001d611 → 0001d62b + {L'𝘒', L'𝘬'}, // 0001d612 → 0001d62c + {L'𝘓', L'𝘭'}, // 0001d613 → 0001d62d + {L'𝘔', L'𝘮'}, // 0001d614 → 0001d62e + {L'𝘕', L'𝘯'}, // 0001d615 → 0001d62f + {L'𝘖', L'𝘰'}, // 0001d616 → 0001d630 + {L'𝘗', L'𝘱'}, // 0001d617 → 0001d631 + {L'𝘘', L'𝘲'}, // 0001d618 → 0001d632 + {L'𝘙', L'𝘳'}, // 0001d619 → 0001d633 + {L'𝘚', L'𝘴'}, // 0001d61a → 0001d634 + {L'𝘛', L'𝘵'}, // 0001d61b → 0001d635 + {L'𝘜', L'𝘶'}, // 0001d61c → 0001d636 + {L'𝘝', L'𝘷'}, // 0001d61d → 0001d637 + {L'𝘞', L'𝘸'}, // 0001d61e → 0001d638 + {L'𝘟', L'𝘹'}, // 0001d61f → 0001d639 + {L'𝘠', L'𝘺'}, // 0001d620 → 0001d63a + {L'𝘡', L'𝘻'}, // 0001d621 → 0001d63b + {L'𝘼', L'𝒂'}, // 0001d63c → 0001d482 + {L'𝘽', L'𝒃'}, // 0001d63d → 0001d483 + {L'𝘾', L'𝒄'}, // 0001d63e → 0001d484 + {L'𝘿', L'𝒅'}, // 0001d63f → 0001d485 + {L'𝙀', L'𝒆'}, // 0001d640 → 0001d486 + {L'𝙁', L'𝒇'}, // 0001d641 → 0001d487 + {L'𝙂', L'𝒈'}, // 0001d642 → 0001d488 + {L'𝙃', L'𝒉'}, // 0001d643 → 0001d489 + {L'𝙄', L'𝒊'}, // 0001d644 → 0001d48a + {L'𝙅', L'𝒋'}, // 0001d645 → 0001d48b + {L'𝙆', L'𝒌'}, // 0001d646 → 0001d48c + {L'𝙇', L'𝒍'}, // 0001d647 → 0001d48d + {L'𝙈', L'𝒎'}, // 0001d648 → 0001d48e + {L'𝙉', L'𝒏'}, // 0001d649 → 0001d48f + {L'𝙊', L'𝒐'}, // 0001d64a → 0001d490 + {L'𝙋', L'𝒑'}, // 0001d64b → 0001d491 + {L'𝙌', L'𝒒'}, // 0001d64c → 0001d492 + {L'𝙍', L'𝒓'}, // 0001d64d → 0001d493 + {L'𝙎', L'𝒔'}, // 0001d64e → 0001d494 + {L'𝙏', L'𝒕'}, // 0001d64f → 0001d495 + {L'𝙐', L'𝒖'}, // 0001d650 → 0001d496 + {L'𝙑', L'𝒗'}, // 0001d651 → 0001d497 + {L'𝙒', L'𝒘'}, // 0001d652 → 0001d498 + {L'𝙓', L'𝒙'}, // 0001d653 → 0001d499 + {L'𝙔', L'𝒚'}, // 0001d654 → 0001d49a + {L'𝙕', L'𝒛'}, // 0001d655 → 0001d49b + {L'𝙰', L'𝚊'}, // 0001d670 → 0001d68a + {L'𝙱', L'𝚋'}, // 0001d671 → 0001d68b + {L'𝙲', L'𝚌'}, // 0001d672 → 0001d68c + {L'𝙳', L'𝚍'}, // 0001d673 → 0001d68d + {L'𝙴', L'𝚎'}, // 0001d674 → 0001d68e + {L'𝙵', L'𝚏'}, // 0001d675 → 0001d68f + {L'𝙶', L'𝚐'}, // 0001d676 → 0001d690 + {L'𝙷', L'𝚑'}, // 0001d677 → 0001d691 + {L'𝙸', L'𝚒'}, // 0001d678 → 0001d692 + {L'𝙹', L'𝚓'}, // 0001d679 → 0001d693 + {L'𝙺', L'𝚔'}, // 0001d67a → 0001d694 + {L'𝙻', L'𝚕'}, // 0001d67b → 0001d695 + {L'𝙼', L'𝚖'}, // 0001d67c → 0001d696 + {L'𝙽', L'𝚗'}, // 0001d67d → 0001d697 + {L'𝙾', L'𝚘'}, // 0001d67e → 0001d698 + {L'𝙿', L'𝚙'}, // 0001d67f → 0001d699 + {L'𝚀', L'𝚚'}, // 0001d680 → 0001d69a + {L'𝚁', L'𝚛'}, // 0001d681 → 0001d69b + {L'𝚂', L'𝚜'}, // 0001d682 → 0001d69c + {L'𝚃', L'𝚝'}, // 0001d683 → 0001d69d + {L'𝚄', L'𝚞'}, // 0001d684 → 0001d69e + {L'𝚅', L'𝚟'}, // 0001d685 → 0001d69f + {L'𝚆', L'𝚠'}, // 0001d686 → 0001d6a0 + {L'𝚇', L'𝚡'}, // 0001d687 → 0001d6a1 + {L'𝚈', L'𝚢'}, // 0001d688 → 0001d6a2 + {L'𝚉', L'𝚣'}, // 0001d689 → 0001d6a3 + {L'𝚨', L'𝛂'}, // 0001d6a8 → 0001d6c2 + {L'𝚩', L'𝛃'}, // 0001d6a9 → 0001d6c3 + {L'𝚪', L'𝛄'}, // 0001d6aa → 0001d6c4 + {L'𝚫', L'𝛅'}, // 0001d6ab → 0001d6c5 + {L'𝚬', L'𝛆'}, // 0001d6ac → 0001d6c6 + {L'𝚭', L'𝛇'}, // 0001d6ad → 0001d6c7 + {L'𝚮', L'𝛈'}, // 0001d6ae → 0001d6c8 + {L'𝚯', L'𝛉'}, // 0001d6af → 0001d6c9 + {L'𝚰', L'𝛊'}, // 0001d6b0 → 0001d6ca + {L'𝚱', L'𝛋'}, // 0001d6b1 → 0001d6cb + {L'𝚲', L'𝛌'}, // 0001d6b2 → 0001d6cc + {L'𝚳', L'𝛍'}, // 0001d6b3 → 0001d6cd + {L'𝚴', L'𝛎'}, // 0001d6b4 → 0001d6ce + {L'𝚵', L'𝛏'}, // 0001d6b5 → 0001d6cf + {L'𝚶', L'𝛐'}, // 0001d6b6 → 0001d6d0 + {L'𝚷', L'𝛑'}, // 0001d6b7 → 0001d6d1 + {L'𝚸', L'𝛒'}, // 0001d6b8 → 0001d6d2 + {L'𝚺', L'𝛔'}, // 0001d6ba → 0001d6d4 + {L'𝚻', L'𝛕'}, // 0001d6bb → 0001d6d5 + {L'𝚼', L'𝛖'}, // 0001d6bc → 0001d6d6 + {L'𝚽', L'𝛗'}, // 0001d6bd → 0001d6d7 + {L'𝚾', L'𝛘'}, // 0001d6be → 0001d6d8 + {L'𝚿', L'𝛙'}, // 0001d6bf → 0001d6d9 + {L'𝛀', L'𝛚'}, // 0001d6c0 → 0001d6da + {L'𝛢', L'𝛼'}, // 0001d6e2 → 0001d6fc + {L'𝛣', L'𝛽'}, // 0001d6e3 → 0001d6fd + {L'𝛤', L'𝛾'}, // 0001d6e4 → 0001d6fe + {L'𝛥', L'𝛿'}, // 0001d6e5 → 0001d6ff + {L'𝛦', L'𝜀'}, // 0001d6e6 → 0001d700 + {L'𝛧', L'𝜁'}, // 0001d6e7 → 0001d701 + {L'𝛨', L'𝜂'}, // 0001d6e8 → 0001d702 + {L'𝛩', L'𝜃'}, // 0001d6e9 → 0001d703 + {L'𝛪', L'𝜄'}, // 0001d6ea → 0001d704 + {L'𝛫', L'𝜅'}, // 0001d6eb → 0001d705 + {L'𝛬', L'𝜆'}, // 0001d6ec → 0001d706 + {L'𝛭', L'𝜇'}, // 0001d6ed → 0001d707 + {L'𝛮', L'𝜈'}, // 0001d6ee → 0001d708 + {L'𝛯', L'𝜉'}, // 0001d6ef → 0001d709 + {L'𝛰', L'𝜊'}, // 0001d6f0 → 0001d70a + {L'𝛱', L'𝜋'}, // 0001d6f1 → 0001d70b + {L'𝛲', L'𝜌'}, // 0001d6f2 → 0001d70c + {L'𝛳', L'𝜗'}, // 0001d6f3 → 0001d717 + {L'𝛴', L'𝜎'}, // 0001d6f4 → 0001d70e + {L'𝛵', L'𝜏'}, // 0001d6f5 → 0001d70f + {L'𝛶', L'𝜐'}, // 0001d6f6 → 0001d710 + {L'𝛷', L'𝜑'}, // 0001d6f7 → 0001d711 + {L'𝛸', L'𝜒'}, // 0001d6f8 → 0001d712 + {L'𝛹', L'𝜓'}, // 0001d6f9 → 0001d713 + {L'𝛺', L'𝜔'}, // 0001d6fa → 0001d714 + {L'𝜜', L'𝜶'}, // 0001d71c → 0001d736 + {L'𝜝', L'𝜷'}, // 0001d71d → 0001d737 + {L'𝜞', L'𝜸'}, // 0001d71e → 0001d738 + {L'𝜟', L'𝜹'}, // 0001d71f → 0001d739 + {L'𝜠', L'𝜺'}, // 0001d720 → 0001d73a + {L'𝜡', L'𝜻'}, // 0001d721 → 0001d73b + {L'𝜢', L'𝜼'}, // 0001d722 → 0001d73c + {L'𝜣', L'𝜽'}, // 0001d723 → 0001d73d + {L'𝜤', L'𝜾'}, // 0001d724 → 0001d73e + {L'𝜥', L'𝜿'}, // 0001d725 → 0001d73f + {L'𝜦', L'𝝀'}, // 0001d726 → 0001d740 + {L'𝜧', L'𝝁'}, // 0001d727 → 0001d741 + {L'𝜨', L'𝝂'}, // 0001d728 → 0001d742 + {L'𝜩', L'𝝃'}, // 0001d729 → 0001d743 + {L'𝜪', L'𝝄'}, // 0001d72a → 0001d744 + {L'𝜫', L'𝝅'}, // 0001d72b → 0001d745 + {L'𝜬', L'𝝆'}, // 0001d72c → 0001d746 + {L'𝜭', L'𝝑'}, // 0001d72d → 0001d751 + {L'𝜮', L'𝝈'}, // 0001d72e → 0001d748 + {L'𝜯', L'𝝉'}, // 0001d72f → 0001d749 + {L'𝜰', L'𝝊'}, // 0001d730 → 0001d74a + {L'𝜱', L'𝝋'}, // 0001d731 → 0001d74b + {L'𝜲', L'𝝌'}, // 0001d732 → 0001d74c + {L'𝜳', L'𝝍'}, // 0001d733 → 0001d74d + {L'𝜴', L'𝝎'}, // 0001d734 → 0001d74e + {L'𝝖', L'𝝰'}, // 0001d756 → 0001d770 + {L'𝝗', L'𝝱'}, // 0001d757 → 0001d771 + {L'𝝘', L'𝝲'}, // 0001d758 → 0001d772 + {L'𝝙', L'𝝳'}, // 0001d759 → 0001d773 + {L'𝝚', L'𝝴'}, // 0001d75a → 0001d774 + {L'𝝛', L'𝝵'}, // 0001d75b → 0001d775 + {L'𝝜', L'𝝶'}, // 0001d75c → 0001d776 + {L'𝝝', L'𝝷'}, // 0001d75d → 0001d777 + {L'𝝞', L'𝝸'}, // 0001d75e → 0001d778 + {L'𝝟', L'𝝹'}, // 0001d75f → 0001d779 + {L'𝝠', L'𝝺'}, // 0001d760 → 0001d77a + {L'𝝡', L'𝝻'}, // 0001d761 → 0001d77b + {L'𝝢', L'𝝼'}, // 0001d762 → 0001d77c + {L'𝝣', L'𝝽'}, // 0001d763 → 0001d77d + {L'𝝤', L'𝝾'}, // 0001d764 → 0001d77e + {L'𝝥', L'𝝿'}, // 0001d765 → 0001d77f + {L'𝝦', L'𝞀'}, // 0001d766 → 0001d780 + {L'𝝧', L'𝟅'}, // 0001d767 → 0001d7c5 + {L'𝝨', L'𝞂'}, // 0001d768 → 0001d782 + {L'𝝩', L'𝞃'}, // 0001d769 → 0001d783 + {L'𝝪', L'𝞄'}, // 0001d76a → 0001d784 + {L'𝝫', L'𝞅'}, // 0001d76b → 0001d785 + {L'𝝬', L'𝞆'}, // 0001d76c → 0001d786 + {L'𝝭', L'𝞇'}, // 0001d76d → 0001d787 + {L'𝝮', L'𝞈'}, // 0001d76e → 0001d788 + {L'𝞐', L'𝜶'}, // 0001d790 → 0001d736 + {L'𝞑', L'𝜷'}, // 0001d791 → 0001d737 + {L'𝞒', L'𝜸'}, // 0001d792 → 0001d738 + {L'𝞓', L'𝜹'}, // 0001d793 → 0001d739 + {L'𝞔', L'𝜺'}, // 0001d794 → 0001d73a + {L'𝞕', L'𝜻'}, // 0001d795 → 0001d73b + {L'𝞖', L'𝜼'}, // 0001d796 → 0001d73c + {L'𝞗', L'𝜽'}, // 0001d797 → 0001d73d + {L'𝞘', L'𝜾'}, // 0001d798 → 0001d73e + {L'𝞙', L'𝜿'}, // 0001d799 → 0001d73f + {L'𝞚', L'𝝀'}, // 0001d79a → 0001d740 + {L'𝞛', L'𝝁'}, // 0001d79b → 0001d741 + {L'𝞜', L'𝝂'}, // 0001d79c → 0001d742 + {L'𝞝', L'𝝃'}, // 0001d79d → 0001d743 + {L'𝞞', L'𝝄'}, // 0001d79e → 0001d744 + {L'𝞟', L'𝝅'}, // 0001d79f → 0001d745 + {L'𝞠', L'𝝆'}, // 0001d7a0 → 0001d746 + {L'𝞡', L'𝟅'}, // 0001d7a1 → 0001d7c5 + {L'𝞢', L'𝝈'}, // 0001d7a2 → 0001d748 + {L'𝞣', L'𝝉'}, // 0001d7a3 → 0001d749 + {L'𝞤', L'𝝊'}, // 0001d7a4 → 0001d74a + {L'𝞥', L'𝝋'}, // 0001d7a5 → 0001d74b + {L'𝞦', L'𝝌'}, // 0001d7a6 → 0001d74c + {L'𝞧', L'𝝍'}, // 0001d7a7 → 0001d74d + {L'𝞨', L'𝝎'}, // 0001d7a8 → 0001d74e + {L'𝟊', L'𝟋'}, // 0001d7ca → 0001d7cb + {L'𞤀', L'𞤢'}, // 0001e900 → 0001e922 + {L'𞤁', L'𞤣'}, // 0001e901 → 0001e923 + {L'𞤂', L'𞤤'}, // 0001e902 → 0001e924 + {L'𞤃', L'𞤥'}, // 0001e903 → 0001e925 + {L'𞤄', L'𞤦'}, // 0001e904 → 0001e926 + {L'𞤅', L'𞤧'}, // 0001e905 → 0001e927 + {L'𞤆', L'𞤨'}, // 0001e906 → 0001e928 + {L'𞤇', L'𞤩'}, // 0001e907 → 0001e929 + {L'𞤈', L'𞤪'}, // 0001e908 → 0001e92a + {L'𞤉', L'𞤫'}, // 0001e909 → 0001e92b + {L'𞤊', L'𞤬'}, // 0001e90a → 0001e92c + {L'𞤋', L'𞤭'}, // 0001e90b → 0001e92d + {L'𞤌', L'𞤮'}, // 0001e90c → 0001e92e + {L'𞤍', L'𞤯'}, // 0001e90d → 0001e92f + {L'𞤎', L'𞤰'}, // 0001e90e → 0001e930 + {L'𞤏', L'𞤱'}, // 0001e90f → 0001e931 + {L'𞤐', L'𞤲'}, // 0001e910 → 0001e932 + {L'𞤑', L'𞤳'}, // 0001e911 → 0001e933 + {L'𞤒', L'𞤴'}, // 0001e912 → 0001e934 + {L'𞤓', L'𞤵'}, // 0001e913 → 0001e935 + {L'𞤔', L'𞤶'}, // 0001e914 → 0001e936 + {L'𞤕', L'𞤷'}, // 0001e915 → 0001e937 + {L'𞤖', L'𞤸'}, // 0001e916 → 0001e938 + {L'𞤗', L'𞤹'}, // 0001e917 → 0001e939 + {L'𞤘', L'𞤺'}, // 0001e918 → 0001e93a + {L'𞤙', L'𞤻'}, // 0001e919 → 0001e93b + {L'𞤚', L'𞤼'}, // 0001e91a → 0001e93c + {L'𞤛', L'𞤽'}, // 0001e91b → 0001e93d + {L'𞤜', L'𞤾'}, // 0001e91c → 0001e93e + {L'𞤝', L'𞤿'}, // 0001e91d → 0001e93f + {L'𞤞', L'𞥀'}, // 0001e91e → 0001e940 + {L'𞤟', L'𞥁'}, // 0001e91f → 0001e941 + {L'𞤠', L'𞥂'}, // 0001e920 → 0001e942 + {L'𞤡', L'𞥃'}, // 0001e921 → 0001e943 +}; /** * Converts wide character to lower case. */ -wint_t towlower(wint_t wc) { - return tolower(wc); +wint_t towlower(wint_t c) { + int m, l, r; + if (isascii(c)) return tolower(c); + if (!IsTiny()) { + l = 0; + r = ARRAYLEN(kUpperToLowerAstral) - 1; + while (l <= r) { + m = (l + r) >> 1; + if (kUpperToLowerAstral[m][0] < c) { + l = m + 1; + } else if (kUpperToLowerAstral[m][0] > c) { + r = m - 1; + } else { + return kUpperToLowerAstral[m][1]; + } + } + } + l = 0; + r = ARRAYLEN(kUpperToLower) - 1; + while (l <= r) { + m = (l + r) >> 1; + if (kUpperToLower[m][0] < c) { + l = m + 1; + } else if (kUpperToLower[m][0] > c) { + r = m - 1; + } else { + return kUpperToLower[m][1]; + } + } + return c; } diff --git a/libc/str/towupper.c b/libc/str/towupper.c index 1418a970..b6bab958 100644 --- a/libc/str/towupper.c +++ b/libc/str/towupper.c @@ -1,7 +1,7 @@ /*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ │vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ ╞══════════════════════════════════════════════════════════════════════════════╡ -│ Copyright 2020 Justine Alexandra Roberts Tunney │ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ │ │ │ Permission to use, copy, modify, and/or distribute this software for │ │ any purpose with or without fee is hereby granted, provided that the │ @@ -16,11 +16,1650 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/macros.internal.h" #include "libc/str/str.h" +#include "libc/dce.h" + +static const char16_t kLowerToUpper[][2] = { + {u'ß', u'ẞ'}, // 00df → 1e9e + {u'à', u'À'}, // 00e0 → 00c0 + {u'á', u'Á'}, // 00e1 → 00c1 + {u'â', u'Â'}, // 00e2 → 00c2 + {u'ã', u'Ã'}, // 00e3 → 00c3 + {u'ä', u'Ä'}, // 00e4 → 00c4 + {u'å', u'Å'}, // 00e5 → 00c5 + {u'æ', u'Æ'}, // 00e6 → 00c6 + {u'ç', u'Ç'}, // 00e7 → 00c7 + {u'è', u'È'}, // 00e8 → 00c8 + {u'é', u'É'}, // 00e9 → 00c9 + {u'ê', u'Ê'}, // 00ea → 00ca + {u'ë', u'Ë'}, // 00eb → 00cb + {u'ì', u'Ì'}, // 00ec → 00cc + {u'í', u'Í'}, // 00ed → 00cd + {u'î', u'Î'}, // 00ee → 00ce + {u'ï', u'Ï'}, // 00ef → 00cf + {u'ð', u'Ð'}, // 00f0 → 00d0 + {u'ñ', u'Ñ'}, // 00f1 → 00d1 + {u'ò', u'Ò'}, // 00f2 → 00d2 + {u'ó', u'Ó'}, // 00f3 → 00d3 + {u'ô', u'Ô'}, // 00f4 → 00d4 + {u'õ', u'Õ'}, // 00f5 → 00d5 + {u'ö', u'Ö'}, // 00f6 → 00d6 + {u'ø', u'Ø'}, // 00f8 → 00d8 + {u'ù', u'Ù'}, // 00f9 → 00d9 + {u'ú', u'Ú'}, // 00fa → 00da + {u'û', u'Û'}, // 00fb → 00db + {u'ü', u'Ü'}, // 00fc → 00dc + {u'ý', u'Ý'}, // 00fd → 00dd + {u'þ', u'Þ'}, // 00fe → 00de + {u'ÿ', u'Ÿ'}, // 00ff → 0178 +#ifndef TINY + {u'ā', u'Ā'}, // 0101 → 0100 + {u'ă', u'Ă'}, // 0103 → 0102 + {u'ą', u'Ą'}, // 0105 → 0104 + {u'ć', u'Ć'}, // 0107 → 0106 + {u'ĉ', u'Ĉ'}, // 0109 → 0108 + {u'ċ', u'Ċ'}, // 010b → 010a + {u'č', u'Č'}, // 010d → 010c + {u'ď', u'Ď'}, // 010f → 010e + {u'đ', u'Đ'}, // 0111 → 0110 + {u'ē', u'Ē'}, // 0113 → 0112 + {u'ĕ', u'Ĕ'}, // 0115 → 0114 + {u'ė', u'Ė'}, // 0117 → 0116 + {u'ę', u'Ę'}, // 0119 → 0118 + {u'ě', u'Ě'}, // 011b → 011a + {u'ĝ', u'Ĝ'}, // 011d → 011c + {u'ğ', u'Ğ'}, // 011f → 011e + {u'ġ', u'Ġ'}, // 0121 → 0120 + {u'ģ', u'Ģ'}, // 0123 → 0122 + {u'ĥ', u'Ĥ'}, // 0125 → 0124 + {u'ħ', u'Ħ'}, // 0127 → 0126 + {u'ĩ', u'Ĩ'}, // 0129 → 0128 + {u'ī', u'Ī'}, // 012b → 012a + {u'ĭ', u'Ĭ'}, // 012d → 012c + {u'į', u'Į'}, // 012f → 012e + {u'ij', u'IJ'}, // 0133 → 0132 + {u'ĵ', u'Ĵ'}, // 0135 → 0134 + {u'ķ', u'Ķ'}, // 0137 → 0136 + {u'ĺ', u'Ĺ'}, // 013a → 0139 + {u'ļ', u'Ļ'}, // 013c → 013b + {u'ľ', u'Ľ'}, // 013e → 013d + {u'ŀ', u'Ŀ'}, // 0140 → 013f + {u'ł', u'Ł'}, // 0142 → 0141 + {u'ń', u'Ń'}, // 0144 → 0143 + {u'ņ', u'Ņ'}, // 0146 → 0145 + {u'ň', u'Ň'}, // 0148 → 0147 + {u'ŋ', u'Ŋ'}, // 014b → 014a + {u'ō', u'Ō'}, // 014d → 014c + {u'ŏ', u'Ŏ'}, // 014f → 014e + {u'ő', u'Ő'}, // 0151 → 0150 + {u'œ', u'Œ'}, // 0153 → 0152 + {u'ŕ', u'Ŕ'}, // 0155 → 0154 + {u'ŗ', u'Ŗ'}, // 0157 → 0156 + {u'ř', u'Ř'}, // 0159 → 0158 + {u'ś', u'Ś'}, // 015b → 015a + {u'ŝ', u'Ŝ'}, // 015d → 015c + {u'ş', u'Ş'}, // 015f → 015e + {u'š', u'Š'}, // 0161 → 0160 + {u'ţ', u'Ţ'}, // 0163 → 0162 + {u'ť', u'Ť'}, // 0165 → 0164 + {u'ŧ', u'Ŧ'}, // 0167 → 0166 + {u'ũ', u'Ũ'}, // 0169 → 0168 + {u'ū', u'Ū'}, // 016b → 016a + {u'ŭ', u'Ŭ'}, // 016d → 016c + {u'ů', u'Ů'}, // 016f → 016e + {u'ű', u'Ű'}, // 0171 → 0170 + {u'ų', u'Ų'}, // 0173 → 0172 + {u'ŵ', u'Ŵ'}, // 0175 → 0174 + {u'ŷ', u'Ŷ'}, // 0177 → 0176 + {u'ź', u'Ź'}, // 017a → 0179 + {u'ż', u'Ż'}, // 017c → 017b + {u'ž', u'Ž'}, // 017e → 017d + {u'ƀ', u'Ƀ'}, // 0180 → 0243 + {u'ƃ', u'Ƃ'}, // 0183 → 0182 + {u'ƅ', u'Ƅ'}, // 0185 → 0184 + {u'ƈ', u'Ƈ'}, // 0188 → 0187 + {u'ƌ', u'Ƌ'}, // 018c → 018b + {u'ƒ', u'Ƒ'}, // 0192 → 0191 + {u'ƙ', u'Ƙ'}, // 0199 → 0198 + {u'ƚ', u'Ƚ'}, // 019a → 023d + {u'ƞ', u'Ƞ'}, // 019e → 0220 + {u'ơ', u'Ơ'}, // 01a1 → 01a0 + {u'ƣ', u'Ƣ'}, // 01a3 → 01a2 + {u'ƥ', u'Ƥ'}, // 01a5 → 01a4 + {u'ƨ', u'Ƨ'}, // 01a8 → 01a7 + {u'ƭ', u'Ƭ'}, // 01ad → 01ac + {u'ư', u'Ư'}, // 01b0 → 01af + {u'ƴ', u'Ƴ'}, // 01b4 → 01b3 + {u'ƶ', u'Ƶ'}, // 01b6 → 01b5 + {u'ƹ', u'Ƹ'}, // 01b9 → 01b8 + {u'ƹ', u'Ʒ'}, // 01b9 → 01b7 + {u'ƽ', u'Ƽ'}, // 01bd → 01bc + {u'dž', u'DZ'}, // 01c6 → 01f1 + {u'dž', u'DŽ'}, // 01c6 → 01c4 + {u'lj', u'LJ'}, // 01c9 → 01c7 + {u'nj', u'NJ'}, // 01cc → 01ca + {u'ǎ', u'Ǎ'}, // 01ce → 01cd + {u'ǐ', u'Ǐ'}, // 01d0 → 01cf + {u'ǒ', u'Ǒ'}, // 01d2 → 01d1 + {u'ǔ', u'Ǔ'}, // 01d4 → 01d3 + {u'ǖ', u'Ǖ'}, // 01d6 → 01d5 + {u'ǘ', u'Ǘ'}, // 01d8 → 01d7 + {u'ǚ', u'Ǚ'}, // 01da → 01d9 + {u'ǜ', u'Ǜ'}, // 01dc → 01db + {u'ǟ', u'Ǟ'}, // 01df → 01de + {u'ǡ', u'Ȧ'}, // 01e1 → 0226 + {u'ǡ', u'Ǡ'}, // 01e1 → 01e0 + {u'ǣ', u'Ǣ'}, // 01e3 → 01e2 + {u'ǥ', u'Ǥ'}, // 01e5 → 01e4 + {u'ǧ', u'Ǧ'}, // 01e7 → 01e6 + {u'ǩ', u'Ǩ'}, // 01e9 → 01e8 + {u'ǫ', u'Ǫ'}, // 01eb → 01ea + {u'ǭ', u'Ǭ'}, // 01ed → 01ec + {u'ǯ', u'Ǯ'}, // 01ef → 01ee + {u'ǵ', u'Ǵ'}, // 01f5 → 01f4 + {u'ǹ', u'Ǹ'}, // 01f9 → 01f8 + {u'ǻ', u'Ǻ'}, // 01fb → 01fa + {u'ǽ', u'Ǽ'}, // 01fd → 01fc + {u'ǿ', u'Ǿ'}, // 01ff → 01fe + {u'ȁ', u'Ȁ'}, // 0201 → 0200 + {u'ȃ', u'Ȃ'}, // 0203 → 0202 + {u'ȅ', u'Ȅ'}, // 0205 → 0204 + {u'ȇ', u'Ȇ'}, // 0207 → 0206 + {u'ȉ', u'Ȉ'}, // 0209 → 0208 + {u'ȋ', u'Ȋ'}, // 020b → 020a + {u'ȍ', u'Ȍ'}, // 020d → 020c + {u'ȏ', u'Ȏ'}, // 020f → 020e + {u'ȑ', u'Ȑ'}, // 0211 → 0210 + {u'ȓ', u'Ȓ'}, // 0213 → 0212 + {u'ȕ', u'Ȕ'}, // 0215 → 0214 + {u'ȗ', u'Ȗ'}, // 0217 → 0216 + {u'ș', u'Ș'}, // 0219 → 0218 + {u'ț', u'Ț'}, // 021b → 021a + {u'ȝ', u'Ȝ'}, // 021d → 021c + {u'ȟ', u'Ȟ'}, // 021f → 021e + {u'ȣ', u'Ȣ'}, // 0223 → 0222 + {u'ȥ', u'Ȥ'}, // 0225 → 0224 + {u'ȩ', u'Ȩ'}, // 0229 → 0228 + {u'ȫ', u'Ȫ'}, // 022b → 022a + {u'ȭ', u'Ȭ'}, // 022d → 022c + {u'ȯ', u'Ȯ'}, // 022f → 022e + {u'ȱ', u'Ȱ'}, // 0231 → 0230 + {u'ȳ', u'Ȳ'}, // 0233 → 0232 + {u'ȼ', u'Ȼ'}, // 023c → 023b + {u'ȿ', u'Ȿ'}, // 023f → 2c7e + {u'ɀ', u'Ɀ'}, // 0240 → 2c7f + {u'ɂ', u'Ɂ'}, // 0242 → 0241 + {u'ɇ', u'Ɇ'}, // 0247 → 0246 + {u'ɉ', u'Ɉ'}, // 0249 → 0248 + {u'ɍ', u'Ɍ'}, // 024d → 024c + {u'ɏ', u'Ɏ'}, // 024f → 024e + {u'ɐ', u'Ɐ'}, // 0250 → 2c6f + {u'ɑ', u'Ɑ'}, // 0251 → 2c6d + {u'ɒ', u'Ɒ'}, // 0252 → 2c70 + {u'ɓ', u'Ɓ'}, // 0253 → 0181 + {u'ɔ', u'Ɔ'}, // 0254 → 0186 + {u'ɗ', u'Ɗ'}, // 0257 → 018a + {u'ɘ', u'Ǝ'}, // 0258 → 018e + {u'ə', u'Ə'}, // 0259 → 018f + {u'ɛ', u'Ɛ'}, // 025b → 0190 + {u'ɜ', u'Ɜ'}, // 025c → a7ab + {u'ɠ', u'Ɠ'}, // 0260 → 0193 + {u'ɡ', u'Ɡ'}, // 0261 → a7ac + {u'ɣ', u'Ɣ'}, // 0263 → 0194 + {u'ɥ', u'Ɥ'}, // 0265 → a78d + {u'ɦ', u'Ɦ'}, // 0266 → a7aa + {u'ɨ', u'Ɨ'}, // 0268 → 0197 + {u'ɩ', u'Ɩ'}, // 0269 → 0196 + {u'ɫ', u'Ɫ'}, // 026b → 2c62 + {u'ɬ', u'Ɬ'}, // 026c → a7ad + {u'ɯ', u'Ɯ'}, // 026f → 019c + {u'ɱ', u'Ɱ'}, // 0271 → 2c6e + {u'ɲ', u'Ɲ'}, // 0272 → 019d + {u'ɽ', u'Ɽ'}, // 027d → 2c64 + {u'ʂ', u'Ʂ'}, // 0282 → a7c5 + {u'ʃ', u'Ʃ'}, // 0283 → 01a9 + {u'ʇ', u'Ʇ'}, // 0287 → a7b1 + {u'ʈ', u'Ʈ'}, // 0288 → 01ae + {u'ʉ', u'Ʉ'}, // 0289 → 0244 + {u'ʊ', u'Ʊ'}, // 028a → 01b1 + {u'ʋ', u'Ʋ'}, // 028b → 01b2 + {u'ʌ', u'Ʌ'}, // 028c → 0245 + {u'ʝ', u'Ʝ'}, // 029d → a7b2 + {u'ʞ', u'Ʞ'}, // 029e → a7b0 + {u'ͱ', u'Ͱ'}, // 0371 → 0370 + {u'ͳ', u'Ͳ'}, // 0373 → 0372 + {u'ͷ', u'Ͷ'}, // 0377 → 0376 + {u'ͻ', u'Ͻ'}, // 037b → 03fd + {u'ͼ', u'Ͼ'}, // 037c → 03fe + {u'ͽ', u'Ͽ'}, // 037d → 03ff + {u'ΐ', u'Ι'}, // 0390 → 0399 + {u'ΐ', u'Ϊ'}, // 0390 → 03aa + {u'ά', u'Α'}, // 03ac → 0391 + {u'ά', u'Ά'}, // 03ac → 0386 + {u'έ', u'Έ'}, // 03ad → 0388 + {u'έ', u'Ε'}, // 03ad → 0395 + {u'ή', u'Η'}, // 03ae → 0397 + {u'ή', u'Ή'}, // 03ae → 0389 + {u'ί', u'Ί'}, // 03af → 038a + {u'ΰ', u'Υ'}, // 03b0 → 03a5 + {u'ΰ', u'Ϋ'}, // 03b0 → 03ab + {u'β', u'Β'}, // 03b2 → 0392 + {u'γ', u'Γ'}, // 03b3 → 0393 + {u'δ', u'Δ'}, // 03b4 → 0394 + {u'ζ', u'Ζ'}, // 03b6 → 0396 + {u'θ', u'Θ'}, // 03b8 → 0398 + {u'κ', u'Κ'}, // 03ba → 039a + {u'λ', u'Λ'}, // 03bb → 039b + {u'μ', u'Μ'}, // 03bc → 039c + {u'ν', u'Ν'}, // 03bd → 039d + {u'ξ', u'Ξ'}, // 03be → 039e + {u'ο', u'Ο'}, // 03bf → 039f + {u'π', u'Π'}, // 03c0 → 03a0 + {u'ρ', u'Ρ'}, // 03c1 → 03a1 + {u'σ', u'Σ'}, // 03c3 → 03a3 + {u'τ', u'Τ'}, // 03c4 → 03a4 + {u'φ', u'Φ'}, // 03c6 → 03a6 + {u'χ', u'Χ'}, // 03c7 → 03a7 + {u'ψ', u'Ψ'}, // 03c8 → 03a8 + {u'ω', u'Ω'}, // 03c9 → 03a9 + {u'ό', u'Ό'}, // 03cc → 038c + {u'ύ', u'Ύ'}, // 03cd → 038e + {u'ώ', u'Ώ'}, // 03ce → 038f + {u'ϣ', u'Ϣ'}, // 03e3 → 03e2 + {u'ϥ', u'Ϥ'}, // 03e5 → 03e4 + {u'ϧ', u'Ϧ'}, // 03e7 → 03e6 + {u'ϩ', u'Ϩ'}, // 03e9 → 03e8 + {u'ϫ', u'Ϫ'}, // 03eb → 03ea + {u'ϭ', u'Ϭ'}, // 03ed → 03ec + {u'ϯ', u'Ϯ'}, // 03ef → 03ee + {u'ϸ', u'Ϸ'}, // 03f8 → 03f7 + {u'ϻ', u'Ϻ'}, // 03fb → 03fa + {u'а', u'А'}, // 0430 → 0410 + {u'б', u'Б'}, // 0431 → 0411 + {u'в', u'В'}, // 0432 → 0412 + {u'г', u'Г'}, // 0433 → 0413 + {u'д', u'Д'}, // 0434 → 0414 + {u'е', u'Е'}, // 0435 → 0415 + {u'е', u'И'}, // 0435 → 0418 + {u'ж', u'Ж'}, // 0436 → 0416 + {u'з', u'З'}, // 0437 → 0417 + {u'й', u'Й'}, // 0439 → 0419 + {u'к', u'К'}, // 043a → 041a + {u'л', u'Л'}, // 043b → 041b + {u'л', u'Э'}, // 043b → 042d + {u'м', u'М'}, // 043c → 041c + {u'н', u'Н'}, // 043d → 041d + {u'о', u'О'}, // 043e → 041e + {u'п', u'П'}, // 043f → 041f + {u'р', u'Р'}, // 0440 → 0420 + {u'с', u'С'}, // 0441 → 0421 + {u'т', u'Т'}, // 0442 → 0422 + {u'у', u'У'}, // 0443 → 0423 + {u'ф', u'Ф'}, // 0444 → 0424 + {u'х', u'Х'}, // 0445 → 0425 + {u'ц', u'Ц'}, // 0446 → 0426 + {u'ч', u'Ч'}, // 0447 → 0427 + {u'ш', u'Ш'}, // 0448 → 0428 + {u'щ', u'Щ'}, // 0449 → 0429 + {u'ъ', u'Ъ'}, // 044a → 042a + {u'ы', u'Ы'}, // 044b → 042b + {u'ь', u'Ь'}, // 044c → 042c + {u'ю', u'Ю'}, // 044e → 042e + {u'я', u'Я'}, // 044f → 042f + {u'ѐ', u'Ѐ'}, // 0450 → 0400 + {u'ё', u'Ё'}, // 0451 → 0401 + {u'ђ', u'Ђ'}, // 0452 → 0402 + {u'ѓ', u'Ѓ'}, // 0453 → 0403 + {u'є', u'Ѹ'}, // 0454 → 0478 + {u'є', u'Є'}, // 0454 → 0404 + {u'ѕ', u'Ѕ'}, // 0455 → 0405 + {u'і', u'І'}, // 0456 → 0406 + {u'ї', u'Ї'}, // 0457 → 0407 + {u'ј', u'Ј'}, // 0458 → 0408 + {u'љ', u'Љ'}, // 0459 → 0409 + {u'њ', u'Њ'}, // 045a → 040a + {u'ћ', u'Ћ'}, // 045b → 040b + {u'ќ', u'Ќ'}, // 045c → 040c + {u'ѝ', u'Ѝ'}, // 045d → 040d + {u'ў', u'Ў'}, // 045e → 040e + {u'џ', u'Џ'}, // 045f → 040f + {u'ѡ', u'Ѡ'}, // 0461 → 0460 + {u'ѣ', u'Ѣ'}, // 0463 → 0462 + {u'ѥ', u'Ѥ'}, // 0465 → 0464 + {u'ѧ', u'Ѧ'}, // 0467 → 0466 + {u'ѩ', u'Ѩ'}, // 0469 → 0468 + {u'ѫ', u'Ѫ'}, // 046b → 046a + {u'ѭ', u'Ѭ'}, // 046d → 046c + {u'ѯ', u'Ѯ'}, // 046f → 046e + {u'ѱ', u'Ѱ'}, // 0471 → 0470 + {u'ѳ', u'Ѳ'}, // 0473 → 0472 + {u'ѵ', u'Ѵ'}, // 0475 → 0474 + {u'ѷ', u'Ѷ'}, // 0477 → 0476 + {u'ѻ', u'Ѻ'}, // 047b → 047a + {u'ѽ', u'Ѽ'}, // 047d → 047c + {u'ѿ', u'Ѿ'}, // 047f → 047e + {u'ҁ', u'Ҁ'}, // 0481 → 0480 + {u'ҋ', u'Ҋ'}, // 048b → 048a + {u'ҍ', u'Ҍ'}, // 048d → 048c + {u'ҏ', u'Ҏ'}, // 048f → 048e + {u'ґ', u'Ґ'}, // 0491 → 0490 + {u'ғ', u'Ғ'}, // 0493 → 0492 + {u'ҕ', u'Ҕ'}, // 0495 → 0494 + {u'җ', u'Җ'}, // 0497 → 0496 + {u'ҙ', u'Ҙ'}, // 0499 → 0498 + {u'қ', u'Қ'}, // 049b → 049a + {u'ҝ', u'Ҝ'}, // 049d → 049c + {u'ҟ', u'Ҟ'}, // 049f → 049e + {u'ҡ', u'Ҡ'}, // 04a1 → 04a0 + {u'ң', u'Ң'}, // 04a3 → 04a2 + {u'ҥ', u'Ҥ'}, // 04a5 → 04a4 + {u'ҧ', u'Ҧ'}, // 04a7 → 04a6 + {u'ҩ', u'Ҩ'}, // 04a9 → 04a8 + {u'ҫ', u'Ҫ'}, // 04ab → 04aa + {u'ҭ', u'Ҭ'}, // 04ad → 04ac + {u'ү', u'Ү'}, // 04af → 04ae + {u'ұ', u'Ұ'}, // 04b1 → 04b0 + {u'ҳ', u'Ҳ'}, // 04b3 → 04b2 + {u'ҵ', u'Ҵ'}, // 04b5 → 04b4 + {u'ҷ', u'Ҷ'}, // 04b7 → 04b6 + {u'ҹ', u'Ҹ'}, // 04b9 → 04b8 + {u'һ', u'Һ'}, // 04bb → 04ba + {u'ҽ', u'Ҽ'}, // 04bd → 04bc + {u'ҿ', u'Ҿ'}, // 04bf → 04be + {u'ӂ', u'Ӂ'}, // 04c2 → 04c1 + {u'ӄ', u'Ӄ'}, // 04c4 → 04c3 + {u'ӆ', u'Ӆ'}, // 04c6 → 04c5 + {u'ӈ', u'Ӈ'}, // 04c8 → 04c7 + {u'ӊ', u'Ӊ'}, // 04ca → 04c9 + {u'ӌ', u'Ӌ'}, // 04cc → 04cb + {u'ӎ', u'Ӎ'}, // 04ce → 04cd + {u'ӑ', u'Ӑ'}, // 04d1 → 04d0 + {u'ӓ', u'Ӓ'}, // 04d3 → 04d2 + {u'ӕ', u'Ӕ'}, // 04d5 → 04d4 + {u'ӗ', u'Ӗ'}, // 04d7 → 04d6 + {u'ә', u'Ә'}, // 04d9 → 04d8 + {u'ӛ', u'Ӛ'}, // 04db → 04da + {u'ӝ', u'Ӝ'}, // 04dd → 04dc + {u'ӟ', u'Ӟ'}, // 04df → 04de + {u'ӡ', u'Ӡ'}, // 04e1 → 04e0 + {u'ӣ', u'Ӣ'}, // 04e3 → 04e2 + {u'ӥ', u'Ӥ'}, // 04e5 → 04e4 + {u'ӧ', u'Ӧ'}, // 04e7 → 04e6 + {u'ө', u'Ө'}, // 04e9 → 04e8 + {u'ӫ', u'Ӫ'}, // 04eb → 04ea + {u'ӭ', u'Ӭ'}, // 04ed → 04ec + {u'ӯ', u'Ӯ'}, // 04ef → 04ee + {u'ӱ', u'Ӱ'}, // 04f1 → 04f0 + {u'ӳ', u'Ӳ'}, // 04f3 → 04f2 + {u'ӵ', u'Ӵ'}, // 04f5 → 04f4 + {u'ӷ', u'Ӷ'}, // 04f7 → 04f6 + {u'ӹ', u'Ӹ'}, // 04f9 → 04f8 + {u'ӻ', u'Ӻ'}, // 04fb → 04fa + {u'ӽ', u'Ӽ'}, // 04fd → 04fc + {u'ӿ', u'Ӿ'}, // 04ff → 04fe + {u'ԁ', u'Ԁ'}, // 0501 → 0500 + {u'ԃ', u'Ԃ'}, // 0503 → 0502 + {u'ԅ', u'Ԅ'}, // 0505 → 0504 + {u'ԇ', u'Ԇ'}, // 0507 → 0506 + {u'ԉ', u'Ԉ'}, // 0509 → 0508 + {u'ԋ', u'Ԋ'}, // 050b → 050a + {u'ԍ', u'Ԍ'}, // 050d → 050c + {u'ԏ', u'Ԏ'}, // 050f → 050e + {u'ԑ', u'Ԑ'}, // 0511 → 0510 + {u'ԓ', u'Ԓ'}, // 0513 → 0512 + {u'ԕ', u'Ԕ'}, // 0515 → 0514 + {u'ԗ', u'Ԗ'}, // 0517 → 0516 + {u'ԙ', u'Ԙ'}, // 0519 → 0518 + {u'ԛ', u'Ԛ'}, // 051b → 051a + {u'ԝ', u'Ԝ'}, // 051d → 051c + {u'ԟ', u'Ԟ'}, // 051f → 051e + {u'ԡ', u'Ԡ'}, // 0521 → 0520 + {u'ԣ', u'Ԣ'}, // 0523 → 0522 + {u'ԥ', u'Ԥ'}, // 0525 → 0524 + {u'ԧ', u'Ԧ'}, // 0527 → 0526 + {u'ԩ', u'Ԩ'}, // 0529 → 0528 + {u'ԫ', u'Ԫ'}, // 052b → 052a + {u'ԭ', u'Ԭ'}, // 052d → 052c + {u'ԯ', u'Ԯ'}, // 052f → 052e + {u'ա', u'Ա'}, // 0561 → 0531 + {u'բ', u'Բ'}, // 0562 → 0532 + {u'գ', u'Գ'}, // 0563 → 0533 + {u'դ', u'Դ'}, // 0564 → 0534 + {u'ե', u'Ե'}, // 0565 → 0535 + {u'զ', u'Զ'}, // 0566 → 0536 + {u'է', u'Է'}, // 0567 → 0537 + {u'ը', u'Ը'}, // 0568 → 0538 + {u'թ', u'Թ'}, // 0569 → 0539 + {u'ժ', u'Ժ'}, // 056a → 053a + {u'ի', u'Ի'}, // 056b → 053b + {u'լ', u'Լ'}, // 056c → 053c + {u'խ', u'Խ'}, // 056d → 053d + {u'ծ', u'Ծ'}, // 056e → 053e + {u'կ', u'Կ'}, // 056f → 053f + {u'հ', u'Հ'}, // 0570 → 0540 + {u'ձ', u'Ձ'}, // 0571 → 0541 + {u'ղ', u'Ղ'}, // 0572 → 0542 + {u'ճ', u'Ճ'}, // 0573 → 0543 + {u'մ', u'Մ'}, // 0574 → 0544 + {u'յ', u'Յ'}, // 0575 → 0545 + {u'ն', u'Ն'}, // 0576 → 0546 + {u'շ', u'Շ'}, // 0577 → 0547 + {u'ո', u'Ո'}, // 0578 → 0548 + {u'չ', u'Չ'}, // 0579 → 0549 + {u'պ', u'Պ'}, // 057a → 054a + {u'ջ', u'Ջ'}, // 057b → 054b + {u'ռ', u'Ռ'}, // 057c → 054c + {u'ս', u'Ս'}, // 057d → 054d + {u'վ', u'Վ'}, // 057e → 054e + {u'տ', u'Տ'}, // 057f → 054f + {u'ր', u'Ր'}, // 0580 → 0550 + {u'ց', u'Ց'}, // 0581 → 0551 + {u'ւ', u'Ւ'}, // 0582 → 0552 + {u'փ', u'Փ'}, // 0583 → 0553 + {u'ք', u'Ք'}, // 0584 → 0554 + {u'օ', u'Օ'}, // 0585 → 0555 + {u'ֆ', u'Ֆ'}, // 0586 → 0556 + {u'ᏸ', u'Ᏸ'}, // 13f8 → 13f0 + {u'ᏹ', u'Ᏹ'}, // 13f9 → 13f1 + {u'ᏺ', u'Ᏺ'}, // 13fa → 13f2 + {u'ᏻ', u'Ᏻ'}, // 13fb → 13f3 + {u'ᏼ', u'Ᏼ'}, // 13fc → 13f4 + {u'ᏽ', u'Ᏽ'}, // 13fd → 13f5 + {u'ᵹ', u'Ᵹ'}, // 1d79 → a77d + {u'ᵽ', u'Ᵽ'}, // 1d7d → 2c63 + {u'ᶎ', u'Ᶎ'}, // 1d8e → a7c6 + {u'ḁ', u'Ḁ'}, // 1e01 → 1e00 + {u'ḃ', u'Ḃ'}, // 1e03 → 1e02 + {u'ḅ', u'Ḅ'}, // 1e05 → 1e04 + {u'ḇ', u'Ḇ'}, // 1e07 → 1e06 + {u'ḉ', u'Ḉ'}, // 1e09 → 1e08 + {u'ḋ', u'Ḋ'}, // 1e0b → 1e0a + {u'ḍ', u'Ḍ'}, // 1e0d → 1e0c + {u'ḏ', u'Ḏ'}, // 1e0f → 1e0e + {u'ḑ', u'Ḑ'}, // 1e11 → 1e10 + {u'ḓ', u'Ḓ'}, // 1e13 → 1e12 + {u'ḕ', u'Ḕ'}, // 1e15 → 1e14 + {u'ḗ', u'Ḗ'}, // 1e17 → 1e16 + {u'ḙ', u'Ḙ'}, // 1e19 → 1e18 + {u'ḛ', u'Ḛ'}, // 1e1b → 1e1a + {u'ḛ', u'Ẽ'}, // 1e1b → 1ebc + {u'ḝ', u'Ḝ'}, // 1e1d → 1e1c + {u'ḟ', u'Ḟ'}, // 1e1f → 1e1e + {u'ḡ', u'Ḡ'}, // 1e21 → 1e20 + {u'ḣ', u'Ḣ'}, // 1e23 → 1e22 + {u'ḥ', u'Ḥ'}, // 1e25 → 1e24 + {u'ḧ', u'Ḧ'}, // 1e27 → 1e26 + {u'ḩ', u'Ḩ'}, // 1e29 → 1e28 + {u'ḫ', u'Ḫ'}, // 1e2b → 1e2a + {u'ḭ', u'Ḭ'}, // 1e2d → 1e2c + {u'ḯ', u'Ḯ'}, // 1e2f → 1e2e + {u'ḱ', u'Ḱ'}, // 1e31 → 1e30 + {u'ḳ', u'Ḳ'}, // 1e33 → 1e32 + {u'ḵ', u'Ḵ'}, // 1e35 → 1e34 + {u'ḷ', u'Ḷ'}, // 1e37 → 1e36 + {u'ḹ', u'Ḹ'}, // 1e39 → 1e38 + {u'ḻ', u'Ḻ'}, // 1e3b → 1e3a + {u'ḽ', u'Ḽ'}, // 1e3d → 1e3c + {u'ḿ', u'Ḿ'}, // 1e3f → 1e3e + {u'ṁ', u'Ṁ'}, // 1e41 → 1e40 + {u'ṃ', u'Ṃ'}, // 1e43 → 1e42 + {u'ṅ', u'Ṅ'}, // 1e45 → 1e44 + {u'ṇ', u'Ṇ'}, // 1e47 → 1e46 + {u'ṉ', u'Ṉ'}, // 1e49 → 1e48 + {u'ṋ', u'Ṋ'}, // 1e4b → 1e4a + {u'ṍ', u'Ṍ'}, // 1e4d → 1e4c + {u'ṏ', u'Ṏ'}, // 1e4f → 1e4e + {u'ṑ', u'Ṑ'}, // 1e51 → 1e50 + {u'ṓ', u'Ṓ'}, // 1e53 → 1e52 + {u'ṕ', u'Ṕ'}, // 1e55 → 1e54 + {u'ṗ', u'Ṗ'}, // 1e57 → 1e56 + {u'ṙ', u'Ṙ'}, // 1e59 → 1e58 + {u'ṛ', u'Ṛ'}, // 1e5b → 1e5a + {u'ṝ', u'Ṝ'}, // 1e5d → 1e5c + {u'ṟ', u'Ṟ'}, // 1e5f → 1e5e + {u'ṡ', u'Ṡ'}, // 1e61 → 1e60 + {u'ṣ', u'Ṣ'}, // 1e63 → 1e62 + {u'ṥ', u'Ṥ'}, // 1e65 → 1e64 + {u'ṧ', u'Ṧ'}, // 1e67 → 1e66 + {u'ṩ', u'Ṩ'}, // 1e69 → 1e68 + {u'ṫ', u'Ṫ'}, // 1e6b → 1e6a + {u'ṭ', u'Ṭ'}, // 1e6d → 1e6c + {u'ṯ', u'Ṯ'}, // 1e6f → 1e6e + {u'ṱ', u'Ṱ'}, // 1e71 → 1e70 + {u'ṳ', u'Ṳ'}, // 1e73 → 1e72 + {u'ṵ', u'Ṵ'}, // 1e75 → 1e74 + {u'ṷ', u'Ṷ'}, // 1e77 → 1e76 + {u'ṹ', u'Ṹ'}, // 1e79 → 1e78 + {u'ṻ', u'Ṻ'}, // 1e7b → 1e7a + {u'ṽ', u'Ṽ'}, // 1e7d → 1e7c + {u'ṿ', u'Ṿ'}, // 1e7f → 1e7e + {u'ẁ', u'Ẁ'}, // 1e81 → 1e80 + {u'ẃ', u'Ẃ'}, // 1e83 → 1e82 + {u'ẅ', u'Ẅ'}, // 1e85 → 1e84 + {u'ẇ', u'Ẇ'}, // 1e87 → 1e86 + {u'ẉ', u'Ẉ'}, // 1e89 → 1e88 + {u'ẋ', u'Ẋ'}, // 1e8b → 1e8a + {u'ẍ', u'Ẍ'}, // 1e8d → 1e8c + {u'ẏ', u'Ẏ'}, // 1e8f → 1e8e + {u'ẑ', u'Ẑ'}, // 1e91 → 1e90 + {u'ẓ', u'Ẓ'}, // 1e93 → 1e92 + {u'ẕ', u'Ẕ'}, // 1e95 → 1e94 + {u'ạ', u'Ạ'}, // 1ea1 → 1ea0 + {u'ả', u'Ả'}, // 1ea3 → 1ea2 + {u'ấ', u'Ấ'}, // 1ea5 → 1ea4 + {u'ầ', u'Ầ'}, // 1ea7 → 1ea6 + {u'ẩ', u'Ẩ'}, // 1ea9 → 1ea8 + {u'ẫ', u'Ẫ'}, // 1eab → 1eaa + {u'ậ', u'Ậ'}, // 1ead → 1eac + {u'ắ', u'Ắ'}, // 1eaf → 1eae + {u'ằ', u'Ằ'}, // 1eb1 → 1eb0 + {u'ẳ', u'Ẳ'}, // 1eb3 → 1eb2 + {u'ẵ', u'Ẵ'}, // 1eb5 → 1eb4 + {u'ặ', u'Ặ'}, // 1eb7 → 1eb6 + {u'ẹ', u'Ẹ'}, // 1eb9 → 1eb8 + {u'ẻ', u'Ẻ'}, // 1ebb → 1eba + {u'ế', u'Ế'}, // 1ebf → 1ebe + {u'ề', u'Ề'}, // 1ec1 → 1ec0 + {u'ể', u'Ể'}, // 1ec3 → 1ec2 + {u'ễ', u'Ễ'}, // 1ec5 → 1ec4 + {u'ệ', u'Ệ'}, // 1ec7 → 1ec6 + {u'ỉ', u'Ỉ'}, // 1ec9 → 1ec8 + {u'ị', u'Ị'}, // 1ecb → 1eca + {u'ọ', u'Ọ'}, // 1ecd → 1ecc + {u'ỏ', u'Ỏ'}, // 1ecf → 1ece + {u'ố', u'Ố'}, // 1ed1 → 1ed0 + {u'ồ', u'Ồ'}, // 1ed3 → 1ed2 + {u'ổ', u'Ổ'}, // 1ed5 → 1ed4 + {u'ỗ', u'Ỗ'}, // 1ed7 → 1ed6 + {u'ộ', u'Ộ'}, // 1ed9 → 1ed8 + {u'ớ', u'Ớ'}, // 1edb → 1eda + {u'ờ', u'Ờ'}, // 1edd → 1edc + {u'ở', u'Ở'}, // 1edf → 1ede + {u'ỡ', u'Ỡ'}, // 1ee1 → 1ee0 + {u'ợ', u'Ợ'}, // 1ee3 → 1ee2 + {u'ụ', u'Ụ'}, // 1ee5 → 1ee4 + {u'ủ', u'Ủ'}, // 1ee7 → 1ee6 + {u'ứ', u'Ứ'}, // 1ee9 → 1ee8 + {u'ừ', u'Ừ'}, // 1eeb → 1eea + {u'ử', u'Ử'}, // 1eed → 1eec + {u'ữ', u'Ữ'}, // 1eef → 1eee + {u'ự', u'Ự'}, // 1ef1 → 1ef0 + {u'ỳ', u'Ỳ'}, // 1ef3 → 1ef2 + {u'ỵ', u'Ỵ'}, // 1ef5 → 1ef4 + {u'ỷ', u'Ỷ'}, // 1ef7 → 1ef6 + {u'ỹ', u'Ỹ'}, // 1ef9 → 1ef8 + {u'ỻ', u'Ỻ'}, // 1efb → 1efa + {u'ỽ', u'Ỽ'}, // 1efd → 1efc + {u'ỿ', u'Ỿ'}, // 1eff → 1efe + {u'ἀ', u'Ἀ'}, // 1f00 → 1f08 + {u'ἁ', u'Ἁ'}, // 1f01 → 1f09 + {u'ἂ', u'Ἂ'}, // 1f02 → 1f0a + {u'ἃ', u'Ἃ'}, // 1f03 → 1f0b + {u'ἄ', u'Ἄ'}, // 1f04 → 1f0c + {u'ἅ', u'Ἅ'}, // 1f05 → 1f0d + {u'ἆ', u'Ἆ'}, // 1f06 → 1f0e + {u'ἇ', u'Ἇ'}, // 1f07 → 1f0f + {u'ἐ', u'Ἐ'}, // 1f10 → 1f18 + {u'ἑ', u'Ἑ'}, // 1f11 → 1f19 + {u'ἒ', u'Ἒ'}, // 1f12 → 1f1a + {u'ἓ', u'Ἓ'}, // 1f13 → 1f1b + {u'ἔ', u'Ἔ'}, // 1f14 → 1f1c + {u'ἕ', u'Ἕ'}, // 1f15 → 1f1d + {u'ἠ', u'Ἠ'}, // 1f20 → 1f28 + {u'ἡ', u'Ἡ'}, // 1f21 → 1f29 + {u'ἢ', u'Ἢ'}, // 1f22 → 1f2a + {u'ἣ', u'Ἣ'}, // 1f23 → 1f2b + {u'ἤ', u'Ἤ'}, // 1f24 → 1f2c + {u'ἥ', u'Ἥ'}, // 1f25 → 1f2d + {u'ἦ', u'Ἦ'}, // 1f26 → 1f2e + {u'ἧ', u'Ἧ'}, // 1f27 → 1f2f + {u'ἰ', u'Ἰ'}, // 1f30 → 1f38 + {u'ἱ', u'Ἱ'}, // 1f31 → 1f39 + {u'ἲ', u'Ἲ'}, // 1f32 → 1f3a + {u'ἳ', u'Ἳ'}, // 1f33 → 1f3b + {u'ἴ', u'Ἴ'}, // 1f34 → 1f3c + {u'ἵ', u'Ἵ'}, // 1f35 → 1f3d + {u'ἶ', u'Ἶ'}, // 1f36 → 1f3e + {u'ἷ', u'Ἷ'}, // 1f37 → 1f3f + {u'ὀ', u'Ὀ'}, // 1f40 → 1f48 + {u'ὁ', u'Ὁ'}, // 1f41 → 1f49 + {u'ὂ', u'Ὂ'}, // 1f42 → 1f4a + {u'ὃ', u'Ὃ'}, // 1f43 → 1f4b + {u'ὄ', u'Ὄ'}, // 1f44 → 1f4c + {u'ὅ', u'Ὅ'}, // 1f45 → 1f4d + {u'ὑ', u'Ὑ'}, // 1f51 → 1f59 + {u'ὓ', u'Ὓ'}, // 1f53 → 1f5b + {u'ὕ', u'Ὕ'}, // 1f55 → 1f5d + {u'ὗ', u'Ὗ'}, // 1f57 → 1f5f + {u'ὠ', u'Ὠ'}, // 1f60 → 1f68 + {u'ὡ', u'Ὡ'}, // 1f61 → 1f69 + {u'ὢ', u'Ὢ'}, // 1f62 → 1f6a + {u'ὣ', u'Ὣ'}, // 1f63 → 1f6b + {u'ὤ', u'Ὤ'}, // 1f64 → 1f6c + {u'ὥ', u'Ὥ'}, // 1f65 → 1f6d + {u'ὦ', u'Ὦ'}, // 1f66 → 1f6e + {u'ὧ', u'Ὧ'}, // 1f67 → 1f6f + {u'ὰ', u'Ὰ'}, // 1f70 → 1fba + {u'ά', u'Ά'}, // 1f71 → 1fbb + {u'ὲ', u'Ὲ'}, // 1f72 → 1fc8 + {u'έ', u'Έ'}, // 1f73 → 1fc9 + {u'ὴ', u'Ὴ'}, // 1f74 → 1fca + {u'ή', u'Ή'}, // 1f75 → 1fcb + {u'ὶ', u'Ὶ'}, // 1f76 → 1fda + {u'ί', u'Ί'}, // 1f77 → 1fdb + {u'ὸ', u'Ὸ'}, // 1f78 → 1ff8 + {u'ό', u'Ό'}, // 1f79 → 1ff9 + {u'ὺ', u'Ὺ'}, // 1f7a → 1fea + {u'ύ', u'Ύ'}, // 1f7b → 1feb + {u'ὼ', u'Ὼ'}, // 1f7c → 1ffa + {u'ώ', u'Ώ'}, // 1f7d → 1ffb + {u'ᾰ', u'Ᾰ'}, // 1fb0 → 1fb8 + {u'ᾱ', u'Ᾱ'}, // 1fb1 → 1fb9 + {u'ῐ', u'Ῐ'}, // 1fd0 → 1fd8 + {u'ῑ', u'Ῑ'}, // 1fd1 → 1fd9 + {u'ῠ', u'Ῠ'}, // 1fe0 → 1fe8 + {u'ῡ', u'Ῡ'}, // 1fe1 → 1fe9 + {u'ῥ', u'Ῥ'}, // 1fe5 → 1fec + {u'ℓ', u'ℒ'}, // 2113 → 2112 + {u'ℯ', u'ℰ'}, // 212f → 2130 + {u'ℼ', u'ℿ'}, // 213c → 213f + {u'ℼ', u'ℙ'}, // 213c → 2119 + {u'ℽ', u'ℾ'}, // 213d → 213e + {u'ⅆ', u'ⅅ'}, // 2146 → 2145 + {u'ⅎ', u'Ⅎ'}, // 214e → 2132 + {u'ⰰ', u'Ⰰ'}, // 2c30 → 2c00 + {u'ⰱ', u'Ⰱ'}, // 2c31 → 2c01 + {u'ⰲ', u'Ⰲ'}, // 2c32 → 2c02 + {u'ⰳ', u'Ⰳ'}, // 2c33 → 2c03 + {u'ⰴ', u'Ⰴ'}, // 2c34 → 2c04 + {u'ⰵ', u'Ⰵ'}, // 2c35 → 2c05 + {u'ⰶ', u'Ⰶ'}, // 2c36 → 2c06 + {u'ⰷ', u'Ⰷ'}, // 2c37 → 2c07 + {u'ⰸ', u'Ⰸ'}, // 2c38 → 2c08 + {u'ⰹ', u'Ⰹ'}, // 2c39 → 2c09 + {u'ⰹ', u'Ⰻ'}, // 2c39 → 2c0b + {u'ⰺ', u'Ⰺ'}, // 2c3a → 2c0a + {u'ⰼ', u'Ⰼ'}, // 2c3c → 2c0c + {u'ⰽ', u'Ⰽ'}, // 2c3d → 2c0d + {u'ⰾ', u'Ⰾ'}, // 2c3e → 2c0e + {u'ⰿ', u'Ⰿ'}, // 2c3f → 2c0f + {u'ⱀ', u'Ⱀ'}, // 2c40 → 2c10 + {u'ⱁ', u'Ⱁ'}, // 2c41 → 2c11 + {u'ⱂ', u'Ⱂ'}, // 2c42 → 2c12 + {u'ⱃ', u'Ⱃ'}, // 2c43 → 2c13 + {u'ⱄ', u'Ⱄ'}, // 2c44 → 2c14 + {u'ⱅ', u'Ⱅ'}, // 2c45 → 2c15 + {u'ⱆ', u'Ⱆ'}, // 2c46 → 2c16 + {u'ⱇ', u'Ⱇ'}, // 2c47 → 2c17 + {u'ⱈ', u'Ⱈ'}, // 2c48 → 2c18 + {u'ⱉ', u'Ⱉ'}, // 2c49 → 2c19 + {u'ⱊ', u'Ⱊ'}, // 2c4a → 2c1a + {u'ⱋ', u'Ⱋ'}, // 2c4b → 2c1b + {u'ⱌ', u'Ⱌ'}, // 2c4c → 2c1c + {u'ⱍ', u'Ⱍ'}, // 2c4d → 2c1d + {u'ⱎ', u'Ⱎ'}, // 2c4e → 2c1e + {u'ⱏ', u'Ⱏ'}, // 2c4f → 2c1f + {u'ⱐ', u'Ⱐ'}, // 2c50 → 2c20 + {u'ⱑ', u'Ⱑ'}, // 2c51 → 2c21 + {u'ⱒ', u'Ⱒ'}, // 2c52 → 2c22 + {u'ⱓ', u'Ⱓ'}, // 2c53 → 2c23 + {u'ⱔ', u'Ⱔ'}, // 2c54 → 2c24 + {u'ⱕ', u'Ⱕ'}, // 2c55 → 2c25 + {u'ⱖ', u'Ⱖ'}, // 2c56 → 2c26 + {u'ⱗ', u'Ⱗ'}, // 2c57 → 2c27 + {u'ⱘ', u'Ⱘ'}, // 2c58 → 2c28 + {u'ⱙ', u'Ⱙ'}, // 2c59 → 2c29 + {u'ⱚ', u'Ⱚ'}, // 2c5a → 2c2a + {u'ⱛ', u'Ⱛ'}, // 2c5b → 2c2b + {u'ⱜ', u'Ⱜ'}, // 2c5c → 2c2c + {u'ⱝ', u'Ⱝ'}, // 2c5d → 2c2d + {u'ⱞ', u'Ⱞ'}, // 2c5e → 2c2e + {u'ⱡ', u'Ⱡ'}, // 2c61 → 2c60 + {u'ⱥ', u'Ⱥ'}, // 2c65 → 023a + {u'ⱦ', u'Ⱦ'}, // 2c66 → 023e + {u'ⱨ', u'Ⱨ'}, // 2c68 → 2c67 + {u'ⱪ', u'Ⱪ'}, // 2c6a → 2c69 + {u'ⱬ', u'Ⱬ'}, // 2c6c → 2c6b + {u'ⱳ', u'Ⱳ'}, // 2c73 → 2c72 + {u'ⱶ', u'Ⱶ'}, // 2c76 → 2c75 + {u'ⲁ', u'Ⲁ'}, // 2c81 → 2c80 + {u'ⲃ', u'Ⲃ'}, // 2c83 → 2c82 + {u'ⲅ', u'Ⲅ'}, // 2c85 → 2c84 + {u'ⲇ', u'Ⲇ'}, // 2c87 → 2c86 + {u'ⲉ', u'Ⲉ'}, // 2c89 → 2c88 + {u'ⲋ', u'Ⲋ'}, // 2c8b → 2c8a + {u'ⲍ', u'Ⲍ'}, // 2c8d → 2c8c + {u'ⲏ', u'Ⲏ'}, // 2c8f → 2c8e + {u'ⲑ', u'Ⲑ'}, // 2c91 → 2c90 + {u'ⲓ', u'Ⲓ'}, // 2c93 → 2c92 + {u'ⲕ', u'Ⲕ'}, // 2c95 → 2c94 + {u'ⲗ', u'Ⲗ'}, // 2c97 → 2c96 + {u'ⲙ', u'Ⲙ'}, // 2c99 → 2c98 + {u'ⲛ', u'Ⲛ'}, // 2c9b → 2c9a + {u'ⲝ', u'Ⲝ'}, // 2c9d → 2c9c + {u'ⲟ', u'Ⲟ'}, // 2c9f → 2c9e + {u'ⲡ', u'Ⲡ'}, // 2ca1 → 2ca0 + {u'ⲣ', u'Ⲣ'}, // 2ca3 → 2ca2 + {u'ⲥ', u'Ⲥ'}, // 2ca5 → 2ca4 + {u'ⲧ', u'Ⲧ'}, // 2ca7 → 2ca6 + {u'ⲩ', u'Ⲩ'}, // 2ca9 → 2ca8 + {u'ⲫ', u'Ⲫ'}, // 2cab → 2caa + {u'ⲭ', u'Ⲭ'}, // 2cad → 2cac + {u'ⲯ', u'Ⲯ'}, // 2caf → 2cae + {u'ⲱ', u'Ⲱ'}, // 2cb1 → 2cb0 + {u'ⲳ', u'Ⲳ'}, // 2cb3 → 2cb2 + {u'ⲵ', u'Ⲵ'}, // 2cb5 → 2cb4 + {u'ⲷ', u'Ⲷ'}, // 2cb7 → 2cb6 + {u'ⲹ', u'Ⲹ'}, // 2cb9 → 2cb8 + {u'ⲻ', u'Ⲻ'}, // 2cbb → 2cba + {u'ⲽ', u'Ⲽ'}, // 2cbd → 2cbc + {u'ⲿ', u'Ⲿ'}, // 2cbf → 2cbe + {u'ⳁ', u'Ⳁ'}, // 2cc1 → 2cc0 + {u'ⳃ', u'Ⳃ'}, // 2cc3 → 2cc2 + {u'ⳅ', u'Ⳅ'}, // 2cc5 → 2cc4 + {u'ⳇ', u'Ⳇ'}, // 2cc7 → 2cc6 + {u'ⳉ', u'Ⳉ'}, // 2cc9 → 2cc8 + {u'ⳋ', u'Ⳋ'}, // 2ccb → 2cca + {u'ⳍ', u'Ⳍ'}, // 2ccd → 2ccc + {u'ⳏ', u'Ⳏ'}, // 2ccf → 2cce + {u'ⳑ', u'Ⳑ'}, // 2cd1 → 2cd0 + {u'ⳓ', u'Ⳓ'}, // 2cd3 → 2cd2 + {u'ⳕ', u'Ⳕ'}, // 2cd5 → 2cd4 + {u'ⳗ', u'Ⳗ'}, // 2cd7 → 2cd6 + {u'ⳙ', u'Ⳙ'}, // 2cd9 → 2cd8 + {u'ⳛ', u'Ⳛ'}, // 2cdb → 2cda + {u'ⳝ', u'Ⳝ'}, // 2cdd → 2cdc + {u'ⳟ', u'Ⳟ'}, // 2cdf → 2cde + {u'ⳡ', u'Ⳡ'}, // 2ce1 → 2ce0 + {u'ⳣ', u'Ⳣ'}, // 2ce3 → 2ce2 + {u'ⳬ', u'Ⳬ'}, // 2cec → 2ceb + {u'ⳮ', u'Ⳮ'}, // 2cee → 2ced + {u'ⳳ', u'Ⳳ'}, // 2cf3 → 2cf2 + {u'ⴀ', u'Ⴀ'}, // 2d00 → 10a0 + {u'ⴁ', u'Ⴁ'}, // 2d01 → 10a1 + {u'ⴂ', u'Ⴂ'}, // 2d02 → 10a2 + {u'ⴃ', u'Ⴃ'}, // 2d03 → 10a3 + {u'ⴄ', u'Ⴄ'}, // 2d04 → 10a4 + {u'ⴅ', u'Ⴅ'}, // 2d05 → 10a5 + {u'ⴆ', u'Ⴆ'}, // 2d06 → 10a6 + {u'ⴇ', u'Ⴇ'}, // 2d07 → 10a7 + {u'ⴈ', u'Ⴈ'}, // 2d08 → 10a8 + {u'ⴉ', u'Ⴉ'}, // 2d09 → 10a9 + {u'ⴊ', u'Ⴊ'}, // 2d0a → 10aa + {u'ⴋ', u'Ⴋ'}, // 2d0b → 10ab + {u'ⴌ', u'Ⴌ'}, // 2d0c → 10ac + {u'ⴍ', u'Ⴍ'}, // 2d0d → 10ad + {u'ⴎ', u'Ⴎ'}, // 2d0e → 10ae + {u'ⴏ', u'Ⴏ'}, // 2d0f → 10af + {u'ⴐ', u'Ⴐ'}, // 2d10 → 10b0 + {u'ⴑ', u'Ⴑ'}, // 2d11 → 10b1 + {u'ⴒ', u'Ⴒ'}, // 2d12 → 10b2 + {u'ⴓ', u'Ⴓ'}, // 2d13 → 10b3 + {u'ⴔ', u'Ⴔ'}, // 2d14 → 10b4 + {u'ⴕ', u'Ⴕ'}, // 2d15 → 10b5 + {u'ⴖ', u'Ⴖ'}, // 2d16 → 10b6 + {u'ⴗ', u'Ⴗ'}, // 2d17 → 10b7 + {u'ⴘ', u'Ⴘ'}, // 2d18 → 10b8 + {u'ⴙ', u'Ⴙ'}, // 2d19 → 10b9 + {u'ⴚ', u'Ⴚ'}, // 2d1a → 10ba + {u'ⴛ', u'Ⴛ'}, // 2d1b → 10bb + {u'ⴜ', u'Ⴜ'}, // 2d1c → 10bc + {u'ⴝ', u'Ⴝ'}, // 2d1d → 10bd + {u'ⴞ', u'Ⴞ'}, // 2d1e → 10be + {u'ⴟ', u'Ⴟ'}, // 2d1f → 10bf + {u'ⴠ', u'Ⴠ'}, // 2d20 → 10c0 + {u'ⴡ', u'Ⴡ'}, // 2d21 → 10c1 + {u'ⴢ', u'Ⴢ'}, // 2d22 → 10c2 + {u'ⴣ', u'Ⴣ'}, // 2d23 → 10c3 + {u'ⴤ', u'Ⴤ'}, // 2d24 → 10c4 + {u'ⴥ', u'Ⴥ'}, // 2d25 → 10c5 + {u'ⴧ', u'Ⴧ'}, // 2d27 → 10c7 + {u'ⴭ', u'Ⴭ'}, // 2d2d → 10cd + {u'ꙁ', u'Ꙁ'}, // a641 → a640 + {u'ꙃ', u'Ꙃ'}, // a643 → a642 + {u'ꙅ', u'Ꙅ'}, // a645 → a644 + {u'ꙇ', u'Ꙇ'}, // a647 → a646 + {u'ꙉ', u'Ꙉ'}, // a649 → a648 + {u'ꙋ', u'Ꙋ'}, // a64b → a64a + {u'ꙍ', u'Ꙍ'}, // a64d → a64c + {u'ꙏ', u'Ꙏ'}, // a64f → a64e + {u'ꙑ', u'Ꙑ'}, // a651 → a650 + {u'ꙓ', u'Ꙓ'}, // a653 → a652 + {u'ꙕ', u'Ꙕ'}, // a655 → a654 + {u'ꙗ', u'Ꙗ'}, // a657 → a656 + {u'ꙙ', u'Ꙙ'}, // a659 → a658 + {u'ꙛ', u'Ꙛ'}, // a65b → a65a + {u'ꙝ', u'Ꙝ'}, // a65d → a65c + {u'ꙟ', u'Ꙟ'}, // a65f → a65e + {u'ꙡ', u'Ꙡ'}, // a661 → a660 + {u'ꙣ', u'Ꙣ'}, // a663 → a662 + {u'ꙥ', u'Ꙥ'}, // a665 → a664 + {u'ꙧ', u'Ꙧ'}, // a667 → a666 + {u'ꙩ', u'Ꙩ'}, // a669 → a668 + {u'ꙫ', u'Ꙫ'}, // a66b → a66a + {u'ꙭ', u'Ꙭ'}, // a66d → a66c + {u'ꚁ', u'Ꚁ'}, // a681 → a680 + {u'ꚃ', u'Ꚃ'}, // a683 → a682 + {u'ꚅ', u'Ꚅ'}, // a685 → a684 + {u'ꚇ', u'Ꚇ'}, // a687 → a686 + {u'ꚉ', u'Ꚉ'}, // a689 → a688 + {u'ꚋ', u'Ꚋ'}, // a68b → a68a + {u'ꚍ', u'Ꚍ'}, // a68d → a68c + {u'ꚏ', u'Ꚏ'}, // a68f → a68e + {u'ꚑ', u'Ꚑ'}, // a691 → a690 + {u'ꚓ', u'Ꚓ'}, // a693 → a692 + {u'ꚕ', u'Ꚕ'}, // a695 → a694 + {u'ꚗ', u'Ꚗ'}, // a697 → a696 + {u'ꚙ', u'Ꚙ'}, // a699 → a698 + {u'ꚛ', u'Ꚛ'}, // a69b → a69a + {u'ꜣ', u'Ꜣ'}, // a723 → a722 + {u'ꜥ', u'Ꜥ'}, // a725 → a724 + {u'ꜧ', u'Ꜧ'}, // a727 → a726 + {u'ꜩ', u'Ꜩ'}, // a729 → a728 + {u'ꜫ', u'Ꜫ'}, // a72b → a72a + {u'ꜭ', u'Ꜭ'}, // a72d → a72c + {u'ꜯ', u'Ꜯ'}, // a72f → a72e + {u'ꜳ', u'Ꜳ'}, // a733 → a732 + {u'ꜵ', u'Ꜵ'}, // a735 → a734 + {u'ꜷ', u'Ꜷ'}, // a737 → a736 + {u'ꜹ', u'Ꜹ'}, // a739 → a738 + {u'ꜻ', u'Ꜻ'}, // a73b → a73a + {u'ꜽ', u'Ꜽ'}, // a73d → a73c + {u'ꜿ', u'Ꜿ'}, // a73f → a73e + {u'ꝁ', u'Ꝁ'}, // a741 → a740 + {u'ꝃ', u'Ꝃ'}, // a743 → a742 + {u'ꝅ', u'Ꝅ'}, // a745 → a744 + {u'ꝇ', u'Ꝇ'}, // a747 → a746 + {u'ꝉ', u'Ꝉ'}, // a749 → a748 + {u'ꝋ', u'Ꝋ'}, // a74b → a74a + {u'ꝍ', u'Ꝍ'}, // a74d → a74c + {u'ꝏ', u'Ꝏ'}, // a74f → a74e + {u'ꝑ', u'Ꝑ'}, // a751 → a750 + {u'ꝑ', u'Ꝧ'}, // a751 → a766 + {u'ꝑ', u'Ꝗ'}, // a751 → a756 + {u'ꝓ', u'Ꝓ'}, // a753 → a752 + {u'ꝕ', u'Ꝕ'}, // a755 → a754 + {u'ꝙ', u'Ꝙ'}, // a759 → a758 + {u'ꝛ', u'Ꝛ'}, // a75b → a75a + {u'ꝝ', u'Ꝝ'}, // a75d → a75c + {u'ꝟ', u'Ꝟ'}, // a75f → a75e + {u'ꝡ', u'Ꝡ'}, // a761 → a760 + {u'ꝣ', u'Ꝣ'}, // a763 → a762 + {u'ꝥ', u'Ꝥ'}, // a765 → a764 + {u'ꝩ', u'Ꝩ'}, // a769 → a768 + {u'ꝫ', u'Ꝫ'}, // a76b → a76a + {u'ꝭ', u'Ꝭ'}, // a76d → a76c + {u'ꝯ', u'Ꝯ'}, // a76f → a76e + {u'ꝺ', u'Ꝺ'}, // a77a → a779 + {u'ꝼ', u'Ꝼ'}, // a77c → a77b + {u'ꝿ', u'Ꝿ'}, // a77f → a77e + {u'ꞁ', u'Ꞁ'}, // a781 → a780 + {u'ꞃ', u'Ꞃ'}, // a783 → a782 + {u'ꞅ', u'Ꞅ'}, // a785 → a784 + {u'ꞇ', u'Ꞇ'}, // a787 → a786 + {u'ꞌ', u'Ꞌ'}, // a78c → a78b + {u'ꞑ', u'Ꞑ'}, // a791 → a790 + {u'ꞓ', u'Ꞓ'}, // a793 → a792 + {u'ꞔ', u'Ꞔ'}, // a794 → a7c4 + {u'ꞗ', u'Ꞗ'}, // a797 → a796 + {u'ꞙ', u'Ꞙ'}, // a799 → a798 + {u'ꞛ', u'Ꞛ'}, // a79b → a79a + {u'ꞝ', u'Ꞝ'}, // a79d → a79c + {u'ꞟ', u'Ꞟ'}, // a79f → a79e + {u'ꞡ', u'Ꞡ'}, // a7a1 → a7a0 + {u'ꞣ', u'Ꞣ'}, // a7a3 → a7a2 + {u'ꞥ', u'Ꞥ'}, // a7a5 → a7a4 + {u'ꞧ', u'Ꞧ'}, // a7a7 → a7a6 + {u'ꞩ', u'Ꞩ'}, // a7a9 → a7a8 + {u'ꞵ', u'Ꞵ'}, // a7b5 → a7b4 + {u'ꞷ', u'Ꞷ'}, // a7b7 → a7b6 + {u'ꞹ', u'Ꞹ'}, // a7b9 → a7b8 + {u'ꞻ', u'Ꞻ'}, // a7bb → a7ba + {u'ꞽ', u'Ꞽ'}, // a7bd → a7bc + {u'ꞿ', u'Ꞿ'}, // a7bf → a7be + {u'ꟃ', u'Ꟃ'}, // a7c3 → a7c2 + {u'ꭓ', u'Ꭓ'}, // ab53 → a7b3 + {u'a', u'A'}, // ff41 → ff21 + {u'b', u'B'}, // ff42 → ff22 + {u'c', u'C'}, // ff43 → ff23 + {u'd', u'D'}, // ff44 → ff24 + {u'e', u'E'}, // ff45 → ff25 + {u'f', u'F'}, // ff46 → ff26 + {u'g', u'G'}, // ff47 → ff27 + {u'h', u'H'}, // ff48 → ff28 + {u'i', u'I'}, // ff49 → ff29 + {u'j', u'J'}, // ff4a → ff2a + {u'k', u'K'}, // ff4b → ff2b + {u'l', u'L'}, // ff4c → ff2c + {u'm', u'M'}, // ff4d → ff2d + {u'n', u'N'}, // ff4e → ff2e + {u'o', u'O'}, // ff4f → ff2f + {u'p', u'P'}, // ff50 → ff30 + {u'q', u'Q'}, // ff51 → ff31 + {u'r', u'R'}, // ff52 → ff32 + {u's', u'S'}, // ff53 → ff33 + {u't', u'T'}, // ff54 → ff34 + {u'u', u'U'}, // ff55 → ff35 + {u'v', u'V'}, // ff56 → ff36 + {u'w', u'W'}, // ff57 → ff37 + {u'x', u'X'}, // ff58 → ff38 + {u'y', u'Y'}, // ff59 → ff39 + {u'z', u'Z'}, // ff5a → ff3a +#endif +}; + +static const char32_t kLowerToUpperAstral[][2] = { + {L'𐐨', L'𐐀'}, // 00010428 → 00010400 + {L'𐐩', L'𐐁'}, // 00010429 → 00010401 + {L'𐐪', L'𐐂'}, // 0001042a → 00010402 + {L'𐐫', L'𐐃'}, // 0001042b → 00010403 + {L'𐐬', L'𐐄'}, // 0001042c → 00010404 + {L'𐐭', L'𐐅'}, // 0001042d → 00010405 + {L'𐐮', L'𐐆'}, // 0001042e → 00010406 + {L'𐐯', L'𐐇'}, // 0001042f → 00010407 + {L'𐐰', L'𐐈'}, // 00010430 → 00010408 + {L'𐐱', L'𐐉'}, // 00010431 → 00010409 + {L'𐐲', L'𐐊'}, // 00010432 → 0001040a + {L'𐐳', L'𐐋'}, // 00010433 → 0001040b + {L'𐐴', L'𐐌'}, // 00010434 → 0001040c + {L'𐐵', L'𐐍'}, // 00010435 → 0001040d + {L'𐐶', L'𐐎'}, // 00010436 → 0001040e + {L'𐐷', L'𐐏'}, // 00010437 → 0001040f + {L'𐐸', L'𐐐'}, // 00010438 → 00010410 + {L'𐐹', L'𐐑'}, // 00010439 → 00010411 + {L'𐐺', L'𐐒'}, // 0001043a → 00010412 + {L'𐐻', L'𐐓'}, // 0001043b → 00010413 + {L'𐐼', L'𐐔'}, // 0001043c → 00010414 + {L'𐐽', L'𐐕'}, // 0001043d → 00010415 + {L'𐐾', L'𐐖'}, // 0001043e → 00010416 + {L'𐐿', L'𐐗'}, // 0001043f → 00010417 + {L'𐑀', L'𐐘'}, // 00010440 → 00010418 + {L'𐑁', L'𐐙'}, // 00010441 → 00010419 + {L'𐑂', L'𐐚'}, // 00010442 → 0001041a + {L'𐑃', L'𐐛'}, // 00010443 → 0001041b + {L'𐑄', L'𐐜'}, // 00010444 → 0001041c + {L'𐑅', L'𐐝'}, // 00010445 → 0001041d + {L'𐑆', L'𐐞'}, // 00010446 → 0001041e + {L'𐑇', L'𐐟'}, // 00010447 → 0001041f + {L'𐑈', L'𐐠'}, // 00010448 → 00010420 + {L'𐑉', L'𐐡'}, // 00010449 → 00010421 + {L'𐑊', L'𐐢'}, // 0001044a → 00010422 + {L'𐑋', L'𐐣'}, // 0001044b → 00010423 + {L'𐑌', L'𐐤'}, // 0001044c → 00010424 + {L'𐑍', L'𐐥'}, // 0001044d → 00010425 + {L'𐑎', L'𐐦'}, // 0001044e → 00010426 + {L'𐑏', L'𐐧'}, // 0001044f → 00010427 + {L'𐓘', L'𐒰'}, // 000104d8 → 000104b0 + {L'𐓙', L'𐒱'}, // 000104d9 → 000104b1 + {L'𐓚', L'𐒲'}, // 000104da → 000104b2 + {L'𐓛', L'𐒳'}, // 000104db → 000104b3 + {L'𐓜', L'𐒴'}, // 000104dc → 000104b4 + {L'𐓝', L'𐒵'}, // 000104dd → 000104b5 + {L'𐓞', L'𐒶'}, // 000104de → 000104b6 + {L'𐓟', L'𐒷'}, // 000104df → 000104b7 + {L'𐓠', L'𐒸'}, // 000104e0 → 000104b8 + {L'𐓡', L'𐒹'}, // 000104e1 → 000104b9 + {L'𐓢', L'𐒺'}, // 000104e2 → 000104ba + {L'𐓣', L'𐒻'}, // 000104e3 → 000104bb + {L'𐓤', L'𐒼'}, // 000104e4 → 000104bc + {L'𐓥', L'𐒽'}, // 000104e5 → 000104bd + {L'𐓦', L'𐒾'}, // 000104e6 → 000104be + {L'𐓧', L'𐒿'}, // 000104e7 → 000104bf + {L'𐓨', L'𐓀'}, // 000104e8 → 000104c0 + {L'𐓩', L'𐓁'}, // 000104e9 → 000104c1 + {L'𐓪', L'𐓂'}, // 000104ea → 000104c2 + {L'𐓫', L'𐓃'}, // 000104eb → 000104c3 + {L'𐓬', L'𐓄'}, // 000104ec → 000104c4 + {L'𐓭', L'𐓅'}, // 000104ed → 000104c5 + {L'𐓮', L'𐓆'}, // 000104ee → 000104c6 + {L'𐓯', L'𐓇'}, // 000104ef → 000104c7 + {L'𐓰', L'𐓈'}, // 000104f0 → 000104c8 + {L'𐓱', L'𐓉'}, // 000104f1 → 000104c9 + {L'𐓲', L'𐓊'}, // 000104f2 → 000104ca + {L'𐓳', L'𐓋'}, // 000104f3 → 000104cb + {L'𐓴', L'𐓌'}, // 000104f4 → 000104cc + {L'𐓵', L'𐓍'}, // 000104f5 → 000104cd + {L'𐓶', L'𐓎'}, // 000104f6 → 000104ce + {L'𐓷', L'𐓏'}, // 000104f7 → 000104cf + {L'𐓸', L'𐓐'}, // 000104f8 → 000104d0 + {L'𐓹', L'𐓑'}, // 000104f9 → 000104d1 + {L'𐓺', L'𐓒'}, // 000104fa → 000104d2 + {L'𐓻', L'𐓓'}, // 000104fb → 000104d3 + {L'𐳀', L'𐲀'}, // 00010cc0 → 00010c80 + {L'𐳁', L'𐲁'}, // 00010cc1 → 00010c81 + {L'𐳂', L'𐲉'}, // 00010cc2 → 00010c89 + {L'𐳂', L'𐲂'}, // 00010cc2 → 00010c82 + {L'𐳃', L'𐲃'}, // 00010cc3 → 00010c83 + {L'𐳄', L'𐲄'}, // 00010cc4 → 00010c84 + {L'𐳅', L'𐲅'}, // 00010cc5 → 00010c85 + {L'𐳅', L'𐲙'}, // 00010cc5 → 00010c99 + {L'𐳆', L'𐲆'}, // 00010cc6 → 00010c86 + {L'𐳇', L'𐲇'}, // 00010cc7 → 00010c87 + {L'𐳈', L'𐲈'}, // 00010cc8 → 00010c88 + {L'𐳊', L'𐲊'}, // 00010cca → 00010c8a + {L'𐳋', L'𐲋'}, // 00010ccb → 00010c8b + {L'𐳌', L'𐲌'}, // 00010ccc → 00010c8c + {L'𐳍', L'𐲍'}, // 00010ccd → 00010c8d + {L'𐳎', L'𐲎'}, // 00010cce → 00010c8e + {L'𐳏', L'𐲏'}, // 00010ccf → 00010c8f + {L'𐳐', L'𐲐'}, // 00010cd0 → 00010c90 + {L'𐳑', L'𐲑'}, // 00010cd1 → 00010c91 + {L'𐳒', L'𐲒'}, // 00010cd2 → 00010c92 + {L'𐳓', L'𐲓'}, // 00010cd3 → 00010c93 + {L'𐳔', L'𐲔'}, // 00010cd4 → 00010c94 + {L'𐳕', L'𐲪'}, // 00010cd5 → 00010caa + {L'𐳕', L'𐲕'}, // 00010cd5 → 00010c95 + {L'𐳖', L'𐲖'}, // 00010cd6 → 00010c96 + {L'𐳗', L'𐲗'}, // 00010cd7 → 00010c97 + {L'𐳘', L'𐲘'}, // 00010cd8 → 00010c98 + {L'𐳚', L'𐲚'}, // 00010cda → 00010c9a + {L'𐳛', L'𐲛'}, // 00010cdb → 00010c9b + {L'𐳜', L'𐲜'}, // 00010cdc → 00010c9c + {L'𐳝', L'𐲝'}, // 00010cdd → 00010c9d + {L'𐳞', L'𐲞'}, // 00010cde → 00010c9e + {L'𐳟', L'𐲟'}, // 00010cdf → 00010c9f + {L'𐳠', L'𐲠'}, // 00010ce0 → 00010ca0 + {L'𐳡', L'𐲡'}, // 00010ce1 → 00010ca1 + {L'𐳢', L'𐲢'}, // 00010ce2 → 00010ca2 + {L'𐳣', L'𐲣'}, // 00010ce3 → 00010ca3 + {L'𐳤', L'𐲤'}, // 00010ce4 → 00010ca4 + {L'𐳥', L'𐲥'}, // 00010ce5 → 00010ca5 + {L'𐳦', L'𐲦'}, // 00010ce6 → 00010ca6 + {L'𐳧', L'𐲧'}, // 00010ce7 → 00010ca7 + {L'𐳨', L'𐲨'}, // 00010ce8 → 00010ca8 + {L'𐳩', L'𐲩'}, // 00010ce9 → 00010ca9 + {L'𐳫', L'𐲫'}, // 00010ceb → 00010cab + {L'𐳬', L'𐲬'}, // 00010cec → 00010cac + {L'𐳭', L'𐲭'}, // 00010ced → 00010cad + {L'𐳮', L'𐲮'}, // 00010cee → 00010cae + {L'𐳯', L'𐲯'}, // 00010cef → 00010caf + {L'𐳰', L'𐲰'}, // 00010cf0 → 00010cb0 + {L'𐳱', L'𐲱'}, // 00010cf1 → 00010cb1 + {L'𐳲', L'𐲲'}, // 00010cf2 → 00010cb2 + {L'𑣀', L'𑢠'}, // 000118c0 → 000118a0 + {L'𑣁', L'𑢡'}, // 000118c1 → 000118a1 + {L'𑣂', L'𑢢'}, // 000118c2 → 000118a2 + {L'𑣃', L'𑢣'}, // 000118c3 → 000118a3 + {L'𑣄', L'𑢤'}, // 000118c4 → 000118a4 + {L'𑣅', L'𑢥'}, // 000118c5 → 000118a5 + {L'𑣆', L'𑢦'}, // 000118c6 → 000118a6 + {L'𑣇', L'𑢧'}, // 000118c7 → 000118a7 + {L'𑣈', L'𑢨'}, // 000118c8 → 000118a8 + {L'𑣉', L'𑢩'}, // 000118c9 → 000118a9 + {L'𑣊', L'𑢪'}, // 000118ca → 000118aa + {L'𑣋', L'𑢫'}, // 000118cb → 000118ab + {L'𑣌', L'𑢬'}, // 000118cc → 000118ac + {L'𑣍', L'𑢭'}, // 000118cd → 000118ad + {L'𑣎', L'𑢮'}, // 000118ce → 000118ae + {L'𑣏', L'𑢯'}, // 000118cf → 000118af + {L'𑣐', L'𑢰'}, // 000118d0 → 000118b0 + {L'𑣑', L'𑢱'}, // 000118d1 → 000118b1 + {L'𑣒', L'𑢲'}, // 000118d2 → 000118b2 + {L'𑣓', L'𑢳'}, // 000118d3 → 000118b3 + {L'𑣔', L'𑢴'}, // 000118d4 → 000118b4 + {L'𑣕', L'𑢵'}, // 000118d5 → 000118b5 + {L'𑣖', L'𑢶'}, // 000118d6 → 000118b6 + {L'𑣗', L'𑢷'}, // 000118d7 → 000118b7 + {L'𑣘', L'𑢸'}, // 000118d8 → 000118b8 + {L'𑣙', L'𑢹'}, // 000118d9 → 000118b9 + {L'𑣚', L'𑢺'}, // 000118da → 000118ba + {L'𑣛', L'𑢻'}, // 000118db → 000118bb + {L'𑣜', L'𑢼'}, // 000118dc → 000118bc + {L'𑣝', L'𑢽'}, // 000118dd → 000118bd + {L'𑣞', L'𑢾'}, // 000118de → 000118be + {L'𑣟', L'𑢿'}, // 000118df → 000118bf + {L'𖹠', L'𖹀'}, // 00016e60 → 00016e40 + {L'𖹡', L'𖹁'}, // 00016e61 → 00016e41 + {L'𖹢', L'𖹂'}, // 00016e62 → 00016e42 + {L'𖹣', L'𖹃'}, // 00016e63 → 00016e43 + {L'𖹤', L'𖹄'}, // 00016e64 → 00016e44 + {L'𖹥', L'𖹅'}, // 00016e65 → 00016e45 + {L'𖹦', L'𖹆'}, // 00016e66 → 00016e46 + {L'𖹧', L'𖹇'}, // 00016e67 → 00016e47 + {L'𖹨', L'𖹈'}, // 00016e68 → 00016e48 + {L'𖹩', L'𖹉'}, // 00016e69 → 00016e49 + {L'𖹪', L'𖹊'}, // 00016e6a → 00016e4a + {L'𖹫', L'𖹋'}, // 00016e6b → 00016e4b + {L'𖹬', L'𖹌'}, // 00016e6c → 00016e4c + {L'𖹭', L'𖹍'}, // 00016e6d → 00016e4d + {L'𖹮', L'𖹎'}, // 00016e6e → 00016e4e + {L'𖹯', L'𖹏'}, // 00016e6f → 00016e4f + {L'𖹰', L'𖹐'}, // 00016e70 → 00016e50 + {L'𖹱', L'𖹑'}, // 00016e71 → 00016e51 + {L'𖹲', L'𖹒'}, // 00016e72 → 00016e52 + {L'𖹳', L'𖹓'}, // 00016e73 → 00016e53 + {L'𖹴', L'𖹔'}, // 00016e74 → 00016e54 + {L'𖹵', L'𖹕'}, // 00016e75 → 00016e55 + {L'𖹶', L'𖹖'}, // 00016e76 → 00016e56 + {L'𖹷', L'𖹗'}, // 00016e77 → 00016e57 + {L'𖹸', L'𖹘'}, // 00016e78 → 00016e58 + {L'𖹹', L'𖹙'}, // 00016e79 → 00016e59 + {L'𖹺', L'𖹚'}, // 00016e7a → 00016e5a + {L'𖹻', L'𖹛'}, // 00016e7b → 00016e5b + {L'𖹼', L'𖹜'}, // 00016e7c → 00016e5c + {L'𖹽', L'𖹝'}, // 00016e7d → 00016e5d + {L'𖹾', L'𖹞'}, // 00016e7e → 00016e5e + {L'𖹿', L'𖹟'}, // 00016e7f → 00016e5f + {L'𝐚', L'𝐀'}, // 0001d41a → 0001d400 + {L'𝐛', L'𝐁'}, // 0001d41b → 0001d401 + {L'𝐜', L'𝐂'}, // 0001d41c → 0001d402 + {L'𝐝', L'𝐃'}, // 0001d41d → 0001d403 + {L'𝐞', L'𝐄'}, // 0001d41e → 0001d404 + {L'𝐟', L'𝐅'}, // 0001d41f → 0001d405 + {L'𝐠', L'𝐆'}, // 0001d420 → 0001d406 + {L'𝐡', L'𝐇'}, // 0001d421 → 0001d407 + {L'𝐢', L'𝐈'}, // 0001d422 → 0001d408 + {L'𝐣', L'𝐉'}, // 0001d423 → 0001d409 + {L'𝐤', L'𝐊'}, // 0001d424 → 0001d40a + {L'𝐥', L'𝐋'}, // 0001d425 → 0001d40b + {L'𝐦', L'𝐌'}, // 0001d426 → 0001d40c + {L'𝐧', L'𝐍'}, // 0001d427 → 0001d40d + {L'𝐨', L'𝐎'}, // 0001d428 → 0001d40e + {L'𝐩', L'𝐏'}, // 0001d429 → 0001d40f + {L'𝐪', L'𝐐'}, // 0001d42a → 0001d410 + {L'𝐫', L'𝐑'}, // 0001d42b → 0001d411 + {L'𝐬', L'𝐒'}, // 0001d42c → 0001d412 + {L'𝐭', L'𝐓'}, // 0001d42d → 0001d413 + {L'𝐮', L'𝐔'}, // 0001d42e → 0001d414 + {L'𝐯', L'𝐕'}, // 0001d42f → 0001d415 + {L'𝐰', L'𝐖'}, // 0001d430 → 0001d416 + {L'𝐱', L'𝐗'}, // 0001d431 → 0001d417 + {L'𝐲', L'𝐘'}, // 0001d432 → 0001d418 + {L'𝐳', L'𝐙'}, // 0001d433 → 0001d419 + {L'𝑎', L'𝐴'}, // 0001d44e → 0001d434 + {L'𝑏', L'𝐵'}, // 0001d44f → 0001d435 + {L'𝑐', L'𝐶'}, // 0001d450 → 0001d436 + {L'𝑑', L'𝐷'}, // 0001d451 → 0001d437 + {L'𝑒', L'𝐸'}, // 0001d452 → 0001d438 + {L'𝑓', L'𝐹'}, // 0001d453 → 0001d439 + {L'𝑔', L'𝐺'}, // 0001d454 → 0001d43a + {L'𝑖', L'𝐼'}, // 0001d456 → 0001d43c + {L'𝑗', L'𝐽'}, // 0001d457 → 0001d43d + {L'𝑘', L'𝐾'}, // 0001d458 → 0001d43e + {L'𝑙', L'𝐿'}, // 0001d459 → 0001d43f + {L'𝑚', L'𝑀'}, // 0001d45a → 0001d440 + {L'𝑛', L'𝑁'}, // 0001d45b → 0001d441 + {L'𝑜', L'𝑂'}, // 0001d45c → 0001d442 + {L'𝑝', L'𝑃'}, // 0001d45d → 0001d443 + {L'𝑞', L'𝑄'}, // 0001d45e → 0001d444 + {L'𝑟', L'𝑅'}, // 0001d45f → 0001d445 + {L'𝑠', L'𝑆'}, // 0001d460 → 0001d446 + {L'𝑡', L'𝑇'}, // 0001d461 → 0001d447 + {L'𝑢', L'𝑈'}, // 0001d462 → 0001d448 + {L'𝑣', L'𝑉'}, // 0001d463 → 0001d449 + {L'𝑤', L'𝑊'}, // 0001d464 → 0001d44a + {L'𝑥', L'𝑋'}, // 0001d465 → 0001d44b + {L'𝑦', L'𝑌'}, // 0001d466 → 0001d44c + {L'𝑧', L'𝑍'}, // 0001d467 → 0001d44d + {L'𝒂', L'𝘼'}, // 0001d482 → 0001d63c + {L'𝒂', L'𝑨'}, // 0001d482 → 0001d468 + {L'𝒃', L'𝘽'}, // 0001d483 → 0001d63d + {L'𝒃', L'𝑩'}, // 0001d483 → 0001d469 + {L'𝒄', L'𝘾'}, // 0001d484 → 0001d63e + {L'𝒄', L'𝑪'}, // 0001d484 → 0001d46a + {L'𝒅', L'𝘿'}, // 0001d485 → 0001d63f + {L'𝒅', L'𝑫'}, // 0001d485 → 0001d46b + {L'𝒆', L'𝙀'}, // 0001d486 → 0001d640 + {L'𝒆', L'𝑬'}, // 0001d486 → 0001d46c + {L'𝒇', L'𝙁'}, // 0001d487 → 0001d641 + {L'𝒇', L'𝑭'}, // 0001d487 → 0001d46d + {L'𝒈', L'𝙂'}, // 0001d488 → 0001d642 + {L'𝒈', L'𝑮'}, // 0001d488 → 0001d46e + {L'𝒉', L'𝙃'}, // 0001d489 → 0001d643 + {L'𝒉', L'𝑯'}, // 0001d489 → 0001d46f + {L'𝒊', L'𝙄'}, // 0001d48a → 0001d644 + {L'𝒊', L'𝑰'}, // 0001d48a → 0001d470 + {L'𝒋', L'𝙅'}, // 0001d48b → 0001d645 + {L'𝒋', L'𝑱'}, // 0001d48b → 0001d471 + {L'𝒌', L'𝙆'}, // 0001d48c → 0001d646 + {L'𝒌', L'𝑲'}, // 0001d48c → 0001d472 + {L'𝒍', L'𝙇'}, // 0001d48d → 0001d647 + {L'𝒍', L'𝑳'}, // 0001d48d → 0001d473 + {L'𝒎', L'𝙈'}, // 0001d48e → 0001d648 + {L'𝒎', L'𝑴'}, // 0001d48e → 0001d474 + {L'𝒏', L'𝙉'}, // 0001d48f → 0001d649 + {L'𝒏', L'𝑵'}, // 0001d48f → 0001d475 + {L'𝒐', L'𝑶'}, // 0001d490 → 0001d476 + {L'𝒐', L'𝙊'}, // 0001d490 → 0001d64a + {L'𝒑', L'𝙋'}, // 0001d491 → 0001d64b + {L'𝒑', L'𝑷'}, // 0001d491 → 0001d477 + {L'𝒒', L'𝑸'}, // 0001d492 → 0001d478 + {L'𝒒', L'𝙌'}, // 0001d492 → 0001d64c + {L'𝒓', L'𝙍'}, // 0001d493 → 0001d64d + {L'𝒓', L'𝑹'}, // 0001d493 → 0001d479 + {L'𝒔', L'𝙎'}, // 0001d494 → 0001d64e + {L'𝒔', L'𝑺'}, // 0001d494 → 0001d47a + {L'𝒕', L'𝙏'}, // 0001d495 → 0001d64f + {L'𝒕', L'𝑻'}, // 0001d495 → 0001d47b + {L'𝒖', L'𝙐'}, // 0001d496 → 0001d650 + {L'𝒖', L'𝑼'}, // 0001d496 → 0001d47c + {L'𝒗', L'𝙑'}, // 0001d497 → 0001d651 + {L'𝒗', L'𝑽'}, // 0001d497 → 0001d47d + {L'𝒘', L'𝑾'}, // 0001d498 → 0001d47e + {L'𝒘', L'𝙒'}, // 0001d498 → 0001d652 + {L'𝒙', L'𝑿'}, // 0001d499 → 0001d47f + {L'𝒙', L'𝙓'}, // 0001d499 → 0001d653 + {L'𝒚', L'𝒀'}, // 0001d49a → 0001d480 + {L'𝒚', L'𝙔'}, // 0001d49a → 0001d654 + {L'𝒛', L'𝒁'}, // 0001d49b → 0001d481 + {L'𝒛', L'𝙕'}, // 0001d49b → 0001d655 + {L'𝒶', L'𝒜'}, // 0001d4b6 → 0001d49c + {L'𝒷', L'ℬ'}, // 0001d4b7 → 0000212c + {L'𝒸', L'𝒞'}, // 0001d4b8 → 0001d49e + {L'𝒹', L'𝒟'}, // 0001d4b9 → 0001d49f + {L'𝒻', L'ℱ'}, // 0001d4bb → 00002131 + {L'𝒽', L'ℋ'}, // 0001d4bd → 0000210b + {L'𝒾', L'ℐ'}, // 0001d4be → 00002110 + {L'𝒿', L'𝒥'}, // 0001d4bf → 0001d4a5 + {L'𝓀', L'𝒦'}, // 0001d4c0 → 0001d4a6 + {L'𝓂', L'ℳ'}, // 0001d4c2 → 00002133 + {L'𝓃', L'𝒩'}, // 0001d4c3 → 0001d4a9 + {L'𝓅', L'𝒫'}, // 0001d4c5 → 0001d4ab + {L'𝓆', L'𝒬'}, // 0001d4c6 → 0001d4ac + {L'𝓇', L'ℛ'}, // 0001d4c7 → 0000211b + {L'𝓈', L'𝒮'}, // 0001d4c8 → 0001d4ae + {L'𝓉', L'𝒯'}, // 0001d4c9 → 0001d4af + {L'𝓊', L'𝒰'}, // 0001d4ca → 0001d4b0 + {L'𝓋', L'𝒱'}, // 0001d4cb → 0001d4b1 + {L'𝓌', L'𝒲'}, // 0001d4cc → 0001d4b2 + {L'𝓍', L'𝒳'}, // 0001d4cd → 0001d4b3 + {L'𝓎', L'𝒴'}, // 0001d4ce → 0001d4b4 + {L'𝓏', L'𝒵'}, // 0001d4cf → 0001d4b5 + {L'𝓪', L'𝓐'}, // 0001d4ea → 0001d4d0 + {L'𝓫', L'𝓑'}, // 0001d4eb → 0001d4d1 + {L'𝓬', L'𝓒'}, // 0001d4ec → 0001d4d2 + {L'𝓭', L'𝓓'}, // 0001d4ed → 0001d4d3 + {L'𝓮', L'𝓔'}, // 0001d4ee → 0001d4d4 + {L'𝓯', L'𝓕'}, // 0001d4ef → 0001d4d5 + {L'𝓰', L'𝓖'}, // 0001d4f0 → 0001d4d6 + {L'𝓱', L'𝓗'}, // 0001d4f1 → 0001d4d7 + {L'𝓲', L'𝓘'}, // 0001d4f2 → 0001d4d8 + {L'𝓳', L'𝓙'}, // 0001d4f3 → 0001d4d9 + {L'𝓴', L'𝓚'}, // 0001d4f4 → 0001d4da + {L'𝓵', L'𝓛'}, // 0001d4f5 → 0001d4db + {L'𝓶', L'𝓜'}, // 0001d4f6 → 0001d4dc + {L'𝓷', L'𝓝'}, // 0001d4f7 → 0001d4dd + {L'𝓸', L'𝓞'}, // 0001d4f8 → 0001d4de + {L'𝓹', L'𝓟'}, // 0001d4f9 → 0001d4df + {L'𝓺', L'𝓠'}, // 0001d4fa → 0001d4e0 + {L'𝓻', L'𝓡'}, // 0001d4fb → 0001d4e1 + {L'𝓼', L'𝓢'}, // 0001d4fc → 0001d4e2 + {L'𝓽', L'𝓣'}, // 0001d4fd → 0001d4e3 + {L'𝓾', L'𝓤'}, // 0001d4fe → 0001d4e4 + {L'𝓿', L'𝓥'}, // 0001d4ff → 0001d4e5 + {L'𝔀', L'𝓦'}, // 0001d500 → 0001d4e6 + {L'𝔁', L'𝓧'}, // 0001d501 → 0001d4e7 + {L'𝔂', L'𝓨'}, // 0001d502 → 0001d4e8 + {L'𝔃', L'𝓩'}, // 0001d503 → 0001d4e9 + {L'𝔞', L'𝔄'}, // 0001d51e → 0001d504 + {L'𝔟', L'𝔅'}, // 0001d51f → 0001d505 + {L'𝔡', L'𝔇'}, // 0001d521 → 0001d507 + {L'𝔢', L'𝔈'}, // 0001d522 → 0001d508 + {L'𝔣', L'𝔉'}, // 0001d523 → 0001d509 + {L'𝔤', L'𝔊'}, // 0001d524 → 0001d50a + {L'𝔧', L'𝔍'}, // 0001d527 → 0001d50d + {L'𝔨', L'𝔎'}, // 0001d528 → 0001d50e + {L'𝔩', L'𝔏'}, // 0001d529 → 0001d50f + {L'𝔪', L'𝔐'}, // 0001d52a → 0001d510 + {L'𝔫', L'𝔑'}, // 0001d52b → 0001d511 + {L'𝔬', L'𝔒'}, // 0001d52c → 0001d512 + {L'𝔭', L'𝔓'}, // 0001d52d → 0001d513 + {L'𝔮', L'𝔔'}, // 0001d52e → 0001d514 + {L'𝔰', L'𝔖'}, // 0001d530 → 0001d516 + {L'𝔱', L'𝔗'}, // 0001d531 → 0001d517 + {L'𝔲', L'𝔘'}, // 0001d532 → 0001d518 + {L'𝔳', L'𝔙'}, // 0001d533 → 0001d519 + {L'𝔴', L'𝔚'}, // 0001d534 → 0001d51a + {L'𝔵', L'𝔛'}, // 0001d535 → 0001d51b + {L'𝔶', L'𝔜'}, // 0001d536 → 0001d51c + {L'𝕒', L'𝔸'}, // 0001d552 → 0001d538 + {L'𝕓', L'𝔹'}, // 0001d553 → 0001d539 + {L'𝕔', L'ℂ'}, // 0001d554 → 00002102 + {L'𝕕', L'𝔻'}, // 0001d555 → 0001d53b + {L'𝕖', L'𝔼'}, // 0001d556 → 0001d53c + {L'𝕗', L'𝔽'}, // 0001d557 → 0001d53d + {L'𝕙', L'ℍ'}, // 0001d559 → 0000210d + {L'𝕚', L'𝕀'}, // 0001d55a → 0001d540 + {L'𝕛', L'𝕁'}, // 0001d55b → 0001d541 + {L'𝕜', L'𝕂'}, // 0001d55c → 0001d542 + {L'𝕝', L'𝕃'}, // 0001d55d → 0001d543 + {L'𝕞', L'𝕄'}, // 0001d55e → 0001d544 + {L'𝕟', L'ℕ'}, // 0001d55f → 00002115 + {L'𝕠', L'𝕆'}, // 0001d560 → 0001d546 + {L'𝕢', L'ℚ'}, // 0001d562 → 0000211a + {L'𝕣', L'ℝ'}, // 0001d563 → 0000211d + {L'𝕤', L'𝕊'}, // 0001d564 → 0001d54a + {L'𝕥', L'𝕋'}, // 0001d565 → 0001d54b + {L'𝕦', L'𝕌'}, // 0001d566 → 0001d54c + {L'𝕧', L'𝕍'}, // 0001d567 → 0001d54d + {L'𝕨', L'𝕎'}, // 0001d568 → 0001d54e + {L'𝕩', L'𝕏'}, // 0001d569 → 0001d54f + {L'𝕪', L'𝕐'}, // 0001d56a → 0001d550 + {L'𝕫', L'ℤ'}, // 0001d56b → 00002124 + {L'𝖆', L'𝕬'}, // 0001d586 → 0001d56c + {L'𝖇', L'𝕭'}, // 0001d587 → 0001d56d + {L'𝖈', L'𝕮'}, // 0001d588 → 0001d56e + {L'𝖉', L'𝕯'}, // 0001d589 → 0001d56f + {L'𝖊', L'𝕰'}, // 0001d58a → 0001d570 + {L'𝖋', L'𝕱'}, // 0001d58b → 0001d571 + {L'𝖌', L'𝕲'}, // 0001d58c → 0001d572 + {L'𝖍', L'𝕳'}, // 0001d58d → 0001d573 + {L'𝖎', L'𝕴'}, // 0001d58e → 0001d574 + {L'𝖏', L'𝕵'}, // 0001d58f → 0001d575 + {L'𝖐', L'𝕶'}, // 0001d590 → 0001d576 + {L'𝖑', L'𝕷'}, // 0001d591 → 0001d577 + {L'𝖒', L'𝕸'}, // 0001d592 → 0001d578 + {L'𝖓', L'𝕹'}, // 0001d593 → 0001d579 + {L'𝖔', L'𝕺'}, // 0001d594 → 0001d57a + {L'𝖕', L'𝕻'}, // 0001d595 → 0001d57b + {L'𝖖', L'𝕼'}, // 0001d596 → 0001d57c + {L'𝖗', L'𝕽'}, // 0001d597 → 0001d57d + {L'𝖘', L'𝕾'}, // 0001d598 → 0001d57e + {L'𝖙', L'𝕿'}, // 0001d599 → 0001d57f + {L'𝖚', L'𝖀'}, // 0001d59a → 0001d580 + {L'𝖛', L'𝖁'}, // 0001d59b → 0001d581 + {L'𝖜', L'𝖂'}, // 0001d59c → 0001d582 + {L'𝖝', L'𝖃'}, // 0001d59d → 0001d583 + {L'𝖞', L'𝖄'}, // 0001d59e → 0001d584 + {L'𝖟', L'𝖅'}, // 0001d59f → 0001d585 + {L'𝖺', L'𝖠'}, // 0001d5ba → 0001d5a0 + {L'𝖻', L'𝖡'}, // 0001d5bb → 0001d5a1 + {L'𝖼', L'𝖢'}, // 0001d5bc → 0001d5a2 + {L'𝖽', L'𝖣'}, // 0001d5bd → 0001d5a3 + {L'𝖾', L'𝖤'}, // 0001d5be → 0001d5a4 + {L'𝖿', L'𝖥'}, // 0001d5bf → 0001d5a5 + {L'𝗀', L'𝖦'}, // 0001d5c0 → 0001d5a6 + {L'𝗁', L'𝖧'}, // 0001d5c1 → 0001d5a7 + {L'𝗂', L'𝖨'}, // 0001d5c2 → 0001d5a8 + {L'𝗃', L'𝖩'}, // 0001d5c3 → 0001d5a9 + {L'𝗄', L'𝖪'}, // 0001d5c4 → 0001d5aa + {L'𝗅', L'𝖫'}, // 0001d5c5 → 0001d5ab + {L'𝗆', L'𝖬'}, // 0001d5c6 → 0001d5ac + {L'𝗇', L'𝖭'}, // 0001d5c7 → 0001d5ad + {L'𝗈', L'𝖮'}, // 0001d5c8 → 0001d5ae + {L'𝗉', L'𝖯'}, // 0001d5c9 → 0001d5af + {L'𝗊', L'𝖰'}, // 0001d5ca → 0001d5b0 + {L'𝗋', L'𝖱'}, // 0001d5cb → 0001d5b1 + {L'𝗌', L'𝖲'}, // 0001d5cc → 0001d5b2 + {L'𝗍', L'𝖳'}, // 0001d5cd → 0001d5b3 + {L'𝗎', L'𝖴'}, // 0001d5ce → 0001d5b4 + {L'𝗏', L'𝖵'}, // 0001d5cf → 0001d5b5 + {L'𝗐', L'𝖶'}, // 0001d5d0 → 0001d5b6 + {L'𝗑', L'𝖷'}, // 0001d5d1 → 0001d5b7 + {L'𝗒', L'𝖸'}, // 0001d5d2 → 0001d5b8 + {L'𝗓', L'𝖹'}, // 0001d5d3 → 0001d5b9 + {L'𝗮', L'𝗔'}, // 0001d5ee → 0001d5d4 + {L'𝗯', L'𝗕'}, // 0001d5ef → 0001d5d5 + {L'𝗰', L'𝗖'}, // 0001d5f0 → 0001d5d6 + {L'𝗱', L'𝗗'}, // 0001d5f1 → 0001d5d7 + {L'𝗲', L'𝗘'}, // 0001d5f2 → 0001d5d8 + {L'𝗳', L'𝗙'}, // 0001d5f3 → 0001d5d9 + {L'𝗴', L'𝗚'}, // 0001d5f4 → 0001d5da + {L'𝗵', L'𝗛'}, // 0001d5f5 → 0001d5db + {L'𝗶', L'𝗜'}, // 0001d5f6 → 0001d5dc + {L'𝗷', L'𝗝'}, // 0001d5f7 → 0001d5dd + {L'𝗸', L'𝗞'}, // 0001d5f8 → 0001d5de + {L'𝗹', L'𝗟'}, // 0001d5f9 → 0001d5df + {L'𝗺', L'𝗠'}, // 0001d5fa → 0001d5e0 + {L'𝗻', L'𝗡'}, // 0001d5fb → 0001d5e1 + {L'𝗼', L'𝗢'}, // 0001d5fc → 0001d5e2 + {L'𝗽', L'𝗣'}, // 0001d5fd → 0001d5e3 + {L'𝗾', L'𝗤'}, // 0001d5fe → 0001d5e4 + {L'𝗿', L'𝗥'}, // 0001d5ff → 0001d5e5 + {L'𝘀', L'𝗦'}, // 0001d600 → 0001d5e6 + {L'𝘁', L'𝗧'}, // 0001d601 → 0001d5e7 + {L'𝘂', L'𝗨'}, // 0001d602 → 0001d5e8 + {L'𝘃', L'𝗩'}, // 0001d603 → 0001d5e9 + {L'𝘄', L'𝗪'}, // 0001d604 → 0001d5ea + {L'𝘅', L'𝗫'}, // 0001d605 → 0001d5eb + {L'𝘆', L'𝗬'}, // 0001d606 → 0001d5ec + {L'𝘇', L'𝗭'}, // 0001d607 → 0001d5ed + {L'𝘢', L'𝘈'}, // 0001d622 → 0001d608 + {L'𝘣', L'𝘉'}, // 0001d623 → 0001d609 + {L'𝘤', L'𝘊'}, // 0001d624 → 0001d60a + {L'𝘥', L'𝘋'}, // 0001d625 → 0001d60b + {L'𝘦', L'𝘌'}, // 0001d626 → 0001d60c + {L'𝘧', L'𝘍'}, // 0001d627 → 0001d60d + {L'𝘨', L'𝘎'}, // 0001d628 → 0001d60e + {L'𝘩', L'𝘏'}, // 0001d629 → 0001d60f + {L'𝘪', L'𝘐'}, // 0001d62a → 0001d610 + {L'𝘫', L'𝘑'}, // 0001d62b → 0001d611 + {L'𝘬', L'𝘒'}, // 0001d62c → 0001d612 + {L'𝘭', L'𝘓'}, // 0001d62d → 0001d613 + {L'𝘮', L'𝘔'}, // 0001d62e → 0001d614 + {L'𝘯', L'𝘕'}, // 0001d62f → 0001d615 + {L'𝘰', L'𝘖'}, // 0001d630 → 0001d616 + {L'𝘱', L'𝘗'}, // 0001d631 → 0001d617 + {L'𝘲', L'𝘘'}, // 0001d632 → 0001d618 + {L'𝘳', L'𝘙'}, // 0001d633 → 0001d619 + {L'𝘴', L'𝘚'}, // 0001d634 → 0001d61a + {L'𝘵', L'𝘛'}, // 0001d635 → 0001d61b + {L'𝘶', L'𝘜'}, // 0001d636 → 0001d61c + {L'𝘷', L'𝘝'}, // 0001d637 → 0001d61d + {L'𝘸', L'𝘞'}, // 0001d638 → 0001d61e + {L'𝘹', L'𝘟'}, // 0001d639 → 0001d61f + {L'𝘺', L'𝘠'}, // 0001d63a → 0001d620 + {L'𝘻', L'𝘡'}, // 0001d63b → 0001d621 + {L'𝚊', L'𝙰'}, // 0001d68a → 0001d670 + {L'𝚋', L'𝙱'}, // 0001d68b → 0001d671 + {L'𝚌', L'𝙲'}, // 0001d68c → 0001d672 + {L'𝚍', L'𝙳'}, // 0001d68d → 0001d673 + {L'𝚎', L'𝙴'}, // 0001d68e → 0001d674 + {L'𝚏', L'𝙵'}, // 0001d68f → 0001d675 + {L'𝚐', L'𝙶'}, // 0001d690 → 0001d676 + {L'𝚑', L'𝙷'}, // 0001d691 → 0001d677 + {L'𝚒', L'𝙸'}, // 0001d692 → 0001d678 + {L'𝚓', L'𝙹'}, // 0001d693 → 0001d679 + {L'𝚔', L'𝙺'}, // 0001d694 → 0001d67a + {L'𝚕', L'𝙻'}, // 0001d695 → 0001d67b + {L'𝚖', L'𝙼'}, // 0001d696 → 0001d67c + {L'𝚗', L'𝙽'}, // 0001d697 → 0001d67d + {L'𝚘', L'𝙾'}, // 0001d698 → 0001d67e + {L'𝚙', L'𝙿'}, // 0001d699 → 0001d67f + {L'𝚚', L'𝚀'}, // 0001d69a → 0001d680 + {L'𝚛', L'𝚁'}, // 0001d69b → 0001d681 + {L'𝚜', L'𝚂'}, // 0001d69c → 0001d682 + {L'𝚝', L'𝚃'}, // 0001d69d → 0001d683 + {L'𝚞', L'𝚄'}, // 0001d69e → 0001d684 + {L'𝚟', L'𝚅'}, // 0001d69f → 0001d685 + {L'𝚠', L'𝚆'}, // 0001d6a0 → 0001d686 + {L'𝚡', L'𝚇'}, // 0001d6a1 → 0001d687 + {L'𝚢', L'𝚈'}, // 0001d6a2 → 0001d688 + {L'𝚣', L'𝚉'}, // 0001d6a3 → 0001d689 + {L'𝛂', L'𝚨'}, // 0001d6c2 → 0001d6a8 + {L'𝛃', L'𝚩'}, // 0001d6c3 → 0001d6a9 + {L'𝛄', L'𝚪'}, // 0001d6c4 → 0001d6aa + {L'𝛅', L'𝚫'}, // 0001d6c5 → 0001d6ab + {L'𝛆', L'𝚬'}, // 0001d6c6 → 0001d6ac + {L'𝛇', L'𝚭'}, // 0001d6c7 → 0001d6ad + {L'𝛈', L'𝚮'}, // 0001d6c8 → 0001d6ae + {L'𝛉', L'𝚯'}, // 0001d6c9 → 0001d6af + {L'𝛊', L'𝚰'}, // 0001d6ca → 0001d6b0 + {L'𝛋', L'𝚱'}, // 0001d6cb → 0001d6b1 + {L'𝛌', L'𝚲'}, // 0001d6cc → 0001d6b2 + {L'𝛍', L'𝚳'}, // 0001d6cd → 0001d6b3 + {L'𝛎', L'𝚴'}, // 0001d6ce → 0001d6b4 + {L'𝛏', L'𝚵'}, // 0001d6cf → 0001d6b5 + {L'𝛐', L'𝚶'}, // 0001d6d0 → 0001d6b6 + {L'𝛑', L'𝚷'}, // 0001d6d1 → 0001d6b7 + {L'𝛒', L'𝚸'}, // 0001d6d2 → 0001d6b8 + {L'𝛔', L'𝚺'}, // 0001d6d4 → 0001d6ba + {L'𝛕', L'𝚻'}, // 0001d6d5 → 0001d6bb + {L'𝛖', L'𝚼'}, // 0001d6d6 → 0001d6bc + {L'𝛗', L'𝚽'}, // 0001d6d7 → 0001d6bd + {L'𝛘', L'𝚾'}, // 0001d6d8 → 0001d6be + {L'𝛙', L'𝚿'}, // 0001d6d9 → 0001d6bf + {L'𝛚', L'𝛀'}, // 0001d6da → 0001d6c0 + {L'𝛼', L'𝛢'}, // 0001d6fc → 0001d6e2 + {L'𝛽', L'𝛣'}, // 0001d6fd → 0001d6e3 + {L'𝛾', L'𝛤'}, // 0001d6fe → 0001d6e4 + {L'𝛿', L'𝛥'}, // 0001d6ff → 0001d6e5 + {L'𝜀', L'𝛦'}, // 0001d700 → 0001d6e6 + {L'𝜁', L'𝛧'}, // 0001d701 → 0001d6e7 + {L'𝜂', L'𝛨'}, // 0001d702 → 0001d6e8 + {L'𝜃', L'𝛩'}, // 0001d703 → 0001d6e9 + {L'𝜄', L'𝛪'}, // 0001d704 → 0001d6ea + {L'𝜅', L'𝛫'}, // 0001d705 → 0001d6eb + {L'𝜆', L'𝛬'}, // 0001d706 → 0001d6ec + {L'𝜇', L'𝛭'}, // 0001d707 → 0001d6ed + {L'𝜈', L'𝛮'}, // 0001d708 → 0001d6ee + {L'𝜉', L'𝛯'}, // 0001d709 → 0001d6ef + {L'𝜊', L'𝛰'}, // 0001d70a → 0001d6f0 + {L'𝜋', L'𝛱'}, // 0001d70b → 0001d6f1 + {L'𝜌', L'𝛲'}, // 0001d70c → 0001d6f2 + {L'𝜎', L'𝛴'}, // 0001d70e → 0001d6f4 + {L'𝜏', L'𝛵'}, // 0001d70f → 0001d6f5 + {L'𝜐', L'𝛶'}, // 0001d710 → 0001d6f6 + {L'𝜑', L'𝛷'}, // 0001d711 → 0001d6f7 + {L'𝜒', L'𝛸'}, // 0001d712 → 0001d6f8 + {L'𝜓', L'𝛹'}, // 0001d713 → 0001d6f9 + {L'𝜔', L'𝛺'}, // 0001d714 → 0001d6fa + {L'𝜗', L'𝛳'}, // 0001d717 → 0001d6f3 + {L'𝜶', L'𝜜'}, // 0001d736 → 0001d71c + {L'𝜶', L'𝞐'}, // 0001d736 → 0001d790 + {L'𝜷', L'𝜝'}, // 0001d737 → 0001d71d + {L'𝜷', L'𝞑'}, // 0001d737 → 0001d791 + {L'𝜸', L'𝞒'}, // 0001d738 → 0001d792 + {L'𝜸', L'𝜞'}, // 0001d738 → 0001d71e + {L'𝜹', L'𝜟'}, // 0001d739 → 0001d71f + {L'𝜹', L'𝞓'}, // 0001d739 → 0001d793 + {L'𝜺', L'𝜠'}, // 0001d73a → 0001d720 + {L'𝜺', L'𝞔'}, // 0001d73a → 0001d794 + {L'𝜻', L'𝜡'}, // 0001d73b → 0001d721 + {L'𝜻', L'𝞕'}, // 0001d73b → 0001d795 + {L'𝜼', L'𝜢'}, // 0001d73c → 0001d722 + {L'𝜼', L'𝞖'}, // 0001d73c → 0001d796 + {L'𝜽', L'𝜣'}, // 0001d73d → 0001d723 + {L'𝜽', L'𝞗'}, // 0001d73d → 0001d797 + {L'𝜾', L'𝜤'}, // 0001d73e → 0001d724 + {L'𝜾', L'𝞘'}, // 0001d73e → 0001d798 + {L'𝜿', L'𝜥'}, // 0001d73f → 0001d725 + {L'𝜿', L'𝞙'}, // 0001d73f → 0001d799 + {L'𝝀', L'𝜦'}, // 0001d740 → 0001d726 + {L'𝝀', L'𝞚'}, // 0001d740 → 0001d79a + {L'𝝁', L'𝞛'}, // 0001d741 → 0001d79b + {L'𝝁', L'𝜧'}, // 0001d741 → 0001d727 + {L'𝝂', L'𝞜'}, // 0001d742 → 0001d79c + {L'𝝂', L'𝜨'}, // 0001d742 → 0001d728 + {L'𝝃', L'𝞝'}, // 0001d743 → 0001d79d + {L'𝝃', L'𝜩'}, // 0001d743 → 0001d729 + {L'𝝄', L'𝞞'}, // 0001d744 → 0001d79e + {L'𝝄', L'𝜪'}, // 0001d744 → 0001d72a + {L'𝝅', L'𝞟'}, // 0001d745 → 0001d79f + {L'𝝅', L'𝜫'}, // 0001d745 → 0001d72b + {L'𝝆', L'𝞠'}, // 0001d746 → 0001d7a0 + {L'𝝆', L'𝜬'}, // 0001d746 → 0001d72c + {L'𝝈', L'𝞢'}, // 0001d748 → 0001d7a2 + {L'𝝈', L'𝜮'}, // 0001d748 → 0001d72e + {L'𝝉', L'𝜯'}, // 0001d749 → 0001d72f + {L'𝝉', L'𝞣'}, // 0001d749 → 0001d7a3 + {L'𝝊', L'𝞤'}, // 0001d74a → 0001d7a4 + {L'𝝊', L'𝜰'}, // 0001d74a → 0001d730 + {L'𝝋', L'𝜱'}, // 0001d74b → 0001d731 + {L'𝝋', L'𝞥'}, // 0001d74b → 0001d7a5 + {L'𝝌', L'𝜲'}, // 0001d74c → 0001d732 + {L'𝝌', L'𝞦'}, // 0001d74c → 0001d7a6 + {L'𝝍', L'𝜳'}, // 0001d74d → 0001d733 + {L'𝝍', L'𝞧'}, // 0001d74d → 0001d7a7 + {L'𝝎', L'𝜴'}, // 0001d74e → 0001d734 + {L'𝝎', L'𝞨'}, // 0001d74e → 0001d7a8 + {L'𝝑', L'𝜭'}, // 0001d751 → 0001d72d + {L'𝝰', L'𝝖'}, // 0001d770 → 0001d756 + {L'𝝱', L'𝝗'}, // 0001d771 → 0001d757 + {L'𝝲', L'𝝘'}, // 0001d772 → 0001d758 + {L'𝝳', L'𝝙'}, // 0001d773 → 0001d759 + {L'𝝴', L'𝝚'}, // 0001d774 → 0001d75a + {L'𝝵', L'𝝛'}, // 0001d775 → 0001d75b + {L'𝝶', L'𝝜'}, // 0001d776 → 0001d75c + {L'𝝷', L'𝝝'}, // 0001d777 → 0001d75d + {L'𝝸', L'𝝞'}, // 0001d778 → 0001d75e + {L'𝝹', L'𝝟'}, // 0001d779 → 0001d75f + {L'𝝺', L'𝝠'}, // 0001d77a → 0001d760 + {L'𝝻', L'𝝡'}, // 0001d77b → 0001d761 + {L'𝝼', L'𝝢'}, // 0001d77c → 0001d762 + {L'𝝽', L'𝝣'}, // 0001d77d → 0001d763 + {L'𝝾', L'𝝤'}, // 0001d77e → 0001d764 + {L'𝝿', L'𝝥'}, // 0001d77f → 0001d765 + {L'𝞀', L'𝝦'}, // 0001d780 → 0001d766 + {L'𝞂', L'𝝨'}, // 0001d782 → 0001d768 + {L'𝞃', L'𝝩'}, // 0001d783 → 0001d769 + {L'𝞄', L'𝝪'}, // 0001d784 → 0001d76a + {L'𝞅', L'𝝫'}, // 0001d785 → 0001d76b + {L'𝞆', L'𝝬'}, // 0001d786 → 0001d76c + {L'𝞇', L'𝝭'}, // 0001d787 → 0001d76d + {L'𝞈', L'𝝮'}, // 0001d788 → 0001d76e + {L'𝟅', L'𝞡'}, // 0001d7c5 → 0001d7a1 + {L'𝟅', L'𝝧'}, // 0001d7c5 → 0001d767 + {L'𝟋', L'𝟊'}, // 0001d7cb → 0001d7ca + {L'𞤢', L'𞤀'}, // 0001e922 → 0001e900 + {L'𞤣', L'𞤁'}, // 0001e923 → 0001e901 + {L'𞤤', L'𞤂'}, // 0001e924 → 0001e902 + {L'𞤥', L'𞤃'}, // 0001e925 → 0001e903 + {L'𞤦', L'𞤄'}, // 0001e926 → 0001e904 + {L'𞤧', L'𞤅'}, // 0001e927 → 0001e905 + {L'𞤨', L'𞤆'}, // 0001e928 → 0001e906 + {L'𞤩', L'𞤇'}, // 0001e929 → 0001e907 + {L'𞤪', L'𞤈'}, // 0001e92a → 0001e908 + {L'𞤫', L'𞤉'}, // 0001e92b → 0001e909 + {L'𞤬', L'𞤊'}, // 0001e92c → 0001e90a + {L'𞤭', L'𞤋'}, // 0001e92d → 0001e90b + {L'𞤮', L'𞤌'}, // 0001e92e → 0001e90c + {L'𞤯', L'𞤍'}, // 0001e92f → 0001e90d + {L'𞤰', L'𞤎'}, // 0001e930 → 0001e90e + {L'𞤱', L'𞤏'}, // 0001e931 → 0001e90f + {L'𞤲', L'𞤐'}, // 0001e932 → 0001e910 + {L'𞤳', L'𞤑'}, // 0001e933 → 0001e911 + {L'𞤴', L'𞤒'}, // 0001e934 → 0001e912 + {L'𞤵', L'𞤓'}, // 0001e935 → 0001e913 + {L'𞤶', L'𞤔'}, // 0001e936 → 0001e914 + {L'𞤷', L'𞤕'}, // 0001e937 → 0001e915 + {L'𞤸', L'𞤖'}, // 0001e938 → 0001e916 + {L'𞤹', L'𞤗'}, // 0001e939 → 0001e917 + {L'𞤺', L'𞤘'}, // 0001e93a → 0001e918 + {L'𞤻', L'𞤙'}, // 0001e93b → 0001e919 + {L'𞤼', L'𞤚'}, // 0001e93c → 0001e91a + {L'𞤽', L'𞤛'}, // 0001e93d → 0001e91b + {L'𞤾', L'𞤜'}, // 0001e93e → 0001e91c + {L'𞤿', L'𞤝'}, // 0001e93f → 0001e91d + {L'𞥀', L'𞤞'}, // 0001e940 → 0001e91e + {L'𞥁', L'𞤟'}, // 0001e941 → 0001e91f + {L'𞥂', L'𞤠'}, // 0001e942 → 0001e920 + {L'𞥃', L'𞤡'}, // 0001e943 → 0001e921 +}; /** * Converts wide character to upper case. */ -wint_t towupper(wint_t wc) { - return toupper(wc); +wint_t towupper(wint_t c) { + int m, l, r; + if (isascii(c)) return toupper(c); + if (IsTiny() || c < 0x00010000) { + l = 0; + r = ARRAYLEN(kLowerToUpper) - 1; + while (l <= r) { + m = (l + r) >> 1; + if (kLowerToUpper[m][0] < c) { + l = m + 1; + } else if (kLowerToUpper[m][0] > c) { + r = m - 1; + } else { + return kLowerToUpper[m][1]; + } + } + } else { + l = 0; + r = ARRAYLEN(kLowerToUpperAstral) - 1; + while (l <= r) { + m = (l + r) >> 1; + if (kLowerToUpperAstral[m][0] < c) { + l = m + 1; + } else if (kLowerToUpperAstral[m][0] > c) { + r = m - 1; + } else { + return kLowerToUpperAstral[m][1]; + } + } + } + return c; } diff --git a/libc/str/wctype.c b/libc/str/wctype.c new file mode 100644 index 00000000..c9af081b --- /dev/null +++ b/libc/str/wctype.c @@ -0,0 +1,59 @@ +/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ +│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ +╞══════════════════════════════════════════════════════════════════════════════╡ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ +│ │ +│ Permission to use, copy, modify, and/or distribute this software for │ +│ any purpose with or without fee is hereby granted, provided that the │ +│ above copyright notice and this permission notice appear in all copies. │ +│ │ +│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ +│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ +│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ +│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ +│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ +│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ +│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ +│ PERFORMANCE OF THIS SOFTWARE. │ +╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/bits/bits.h" +#include "libc/macros.internal.h" +#include "libc/str/str.h" + +static const char kWcTypeNames[][8] = { + "alnum", // + "alpha", // + "blank", // + "cntrl", // + "digit", // + "graph", // + "lower", // + "print", // + "punct", // + "space", // + "upper", // + "xdigit", // +}; + +/** + * Returns number representing character class name. + * + * @param s can be "alnum", "alpha", "blank", "cntrl", "digit", "graph", + * "lower", "print", "punct", "space", "upper", "xdigit" + * @return nonzero id or 0 if not found + */ +wctype_t wctype(const char *s) { + int i; + char b[8]; + for (i = 0; i < 8; ++i) { + b[i] = *s ? *s++ : 0; + } + if (!*s) { + for (i = 0; i < ARRAYLEN(kWcTypeNames); ++i) { + if (READ64LE(b) == READ64LE(kWcTypeNames[i])) { + return i + 1; + } + } + } + return 0; +} diff --git a/libc/sysv/consts.sh b/libc/sysv/consts.sh index 0ae6131a..a9e0675b 100755 --- a/libc/sysv/consts.sh +++ b/libc/sysv/consts.sh @@ -160,20 +160,20 @@ syscon compat EWOULDBLOCK 11 35 35 35 35 10035 # same as EWOULDBL # # group name GNU/Systemd XNU's Not UNIX! FreeBSD OpenBSD NetBSD XENIX Commentary syscon sig SIGHUP 1 1 1 1 1 1 # terminal hangup or daemon reload; resumable; auto-broadcasted to process group; unix consensus & faked on nt -syscon sig SIGINT 2 2 2 2 2 2 # terminal ctrl-c keystroke; resumable; auto-broadcasted to process group; unix consensus & faked on nt +syscon sig SIGINT 2 2 2 2 2 2 # terminal ctrl-c keystroke; resumable; auto-broadcasted to process group; unix consensus & faked on nt; X3.159-1988 syscon sig SIGQUIT 3 3 3 3 3 3 # terminal ctrl-\ keystroke; resumable; unix consensus & faked on nt -syscon sig SIGILL 4 4 4 4 4 4 # illegal instruction; unresumable (unless you longjmp() or edit ucontex->rip+=ild(ucontex->rip)); unix consensus & faked on nt +syscon sig SIGILL 4 4 4 4 4 4 # illegal instruction; unresumable (unless you longjmp() or edit ucontex->rip+=ild(ucontex->rip)); unix consensus & faked on nt; X3.159-1988 syscon sig SIGTRAP 5 5 5 5 5 5 # int3 instruction; resumable; unix consensus & faked on nt -syscon sig SIGABRT 6 6 6 6 6 6 # process aborted; resumable; unix consensus & faked on nt +syscon sig SIGABRT 6 6 6 6 6 6 # process aborted; resumable; unix consensus & faked on nt; X3.159-1988 syscon sig SIGBUS 7 10 10 10 10 7 # valid memory access that went beyond underlying end of file; bsd consensus -syscon sig SIGFPE 8 8 8 8 8 8 # illegal math; unresumable (unless you longjmp() or edit ucontex->rip+=ild(ucontex->rip)); unix consensus & faked on nt +syscon sig SIGFPE 8 8 8 8 8 8 # illegal math; unresumable (unless you longjmp() or edit ucontex->rip+=ild(ucontex->rip)); unix consensus & faked on nt; X3.159-1988 syscon sig SIGKILL 9 9 9 9 9 9 # terminate with extreme prejudice; unreceivable; unix consensus & faked on nt syscon sig SIGUSR1 10 30 30 30 30 10 # do whatever you want; bsd consensus -syscon sig SIGSEGV 11 11 11 11 11 11 # invalid memory access; unresumable (unless you longjmp() or edit ucontex->rip+=ild(ucontex->rip)); unix consensus & faked on nt +syscon sig SIGSEGV 11 11 11 11 11 11 # invalid memory access; unresumable (unless you longjmp() or edit ucontex->rip+=ild(ucontex->rip)); unix consensus & faked on nt; X3.159-1988 syscon sig SIGUSR2 12 31 31 31 31 12 # do whatever you want; bsd consensus syscon sig SIGPIPE 13 13 13 13 13 13 # write to closed file descriptor; unix consensus & faked on nt syscon sig SIGALRM 14 14 14 14 14 14 # sent by setitimer(2) or timer_settime(2); unix consensus & faked on nt -syscon sig SIGTERM 15 15 15 15 15 15 # terminate; resumable; unix consensus & faked on nt +syscon sig SIGTERM 15 15 15 15 15 15 # terminate; resumable; unix consensus & faked on nt; X3.159-1988 syscon sig SIGCHLD 17 20 20 20 20 17 # child process exited or terminated and is now a zombie (unless this is SIG_IGN or SA_NOCLDWAIT) or child process stopped due to terminal i/o or profiling/debugging (unless you used SA_NOCLDSTOP); bsd consensus syscon sig SIGCONT 18 19 19 19 19 18 # child process resumed from profiling/debugging; bsd consensus syscon sig SIGSTOP 19 17 17 17 17 19 # child process stopped due to profiling/debugging; bsd consensus diff --git a/net/http/parseurl.c b/net/http/parseurl.c index 5de1fbc0..cc75a4b4 100644 --- a/net/http/parseurl.c +++ b/net/http/parseurl.c @@ -41,19 +41,26 @@ static void EmitLatin1(struct UrlParser *u, int c) { u->p += 2; } -static void EmitKey(struct UrlParser *u, struct UrlParams *h) { - h->p = xrealloc(h->p, ++h->n * sizeof(*h->p)); - h->p[h->n - 1].key.p = u->q; - h->p[h->n - 1].key.n = u->p - u->q; - u->q = u->p; +static bool EmitKey(struct UrlParser *u, struct UrlParams *h) { + struct UrlParam *p; + if ((p = realloc(h->p, ++h->n * sizeof(*h->p)))) { + p[h->n - 1].key.p = u->q; + p[h->n - 1].key.n = u->p - u->q; + u->q = u->p; + h->p = p; + return true; + } else { + return false; + } } static void EmitVal(struct UrlParser *u, struct UrlParams *h, bool t) { if (!t) { if (u->p > u->q || u->c != '?') { - EmitKey(u, h); - h->p[h->n - 1].val.p = NULL; - h->p[h->n - 1].val.n = 0; + if (EmitKey(u, h)) { + h->p[h->n - 1].val.p = NULL; + h->p[h->n - 1].val.n = 0; + } } } else { h->p[h->n - 1].val.p = u->q; @@ -214,8 +221,7 @@ static void ParseQuery(struct UrlParser *u, struct UrlParams *h) { t = false; } else if (u->c == '=') { if (!t) { - EmitKey(u, h); - t = true; + t = EmitKey(u, h); } else { *u->p++ = '='; } @@ -257,12 +263,14 @@ static char *ParseUrlImpl(const char *data, size_t size, struct Url *h, u.data = data; u.size = size; memset(h, 0, sizeof(*h)); - u.q = u.p = m = xmalloc(latin1 ? u.size * 2 : u.size); - if (ParseScheme(&u, h)) ParseAuthority(&u, h); - if (u.c != '#' && u.c != '?') ParsePath(&u, &h->path); - if (u.c == '?') ParseQuery(&u, &h->params); - if (u.c == '#') ParseFragment(&u, &h->fragment); - return xrealloc(m, u.p - m); + if ((m = malloc(latin1 ? u.size * 2 : u.size))) { + u.q = u.p = m; + if (ParseScheme(&u, h)) ParseAuthority(&u, h); + if (u.c != '#' && u.c != '?') ParsePath(&u, &h->path); + if (u.c == '?') ParseQuery(&u, &h->params); + if (u.c == '#') ParseFragment(&u, &h->fragment); + } + return m; } /** @@ -355,8 +363,10 @@ char *ParseParams(const char *data, size_t size, struct UrlParams *h) { u.isopaque = false; u.data = data; u.size = size; - u.q = u.p = m = xmalloc(u.size); - ParseQuery(&u, h); + if ((m = malloc(u.size))) { + u.q = u.p = m; + ParseQuery(&u, h); + } return m; } @@ -395,7 +405,9 @@ char *ParseHost(const char *data, size_t size, struct Url *h) { u.isopaque = false; u.data = data; u.size = size; - u.q = u.p = m = xmalloc(u.size * 2); - ParseAuthority(&u, h); - return xrealloc(m, u.p - m); + if ((m = malloc(u.size * 2))) { + u.q = u.p = m; + ParseAuthority(&u, h); + } + return m; } diff --git a/test/libc/str/regex_test.c b/test/libc/str/regex_test.c index c57e4e2b..9cfc55c1 100644 --- a/test/libc/str/regex_test.c +++ b/test/libc/str/regex_test.c @@ -83,24 +83,29 @@ TEST(regex, testIpExtended) { regfree(&rx); } +TEST(regex, testUnicodeCharacterClass) { + regex_t rx; + EXPECT_EQ(REG_OK, regcomp(&rx, "^[[:alpha:]][[:alpha:]]$", 0)); + EXPECT_EQ(REG_OK, regexec(&rx, "𝐵𝑏", 0, 0, 0)); + EXPECT_NE(REG_OK, regexec(&rx, "₀₁", 0, 0, 0)); + regfree(&rx); +} + void A(void) { regex_t rx; regcomp(&rx, "^[-._0-9A-Za-z]*$", REG_EXTENDED); regexec(&rx, "foo.com", 0, NULL, 0); regfree(&rx); } - void B(regex_t *rx) { regexec(rx, "foo.com", 0, NULL, 0); } - void C(void) { regex_t rx; regcomp(&rx, "^[-._0-9A-Za-z]*$", 0); regexec(&rx, "foo.com", 0, NULL, 0); regfree(&rx); } - void D(regex_t *rx, regmatch_t *m) { regexec(rx, "127.0.0.1", rx->re_nsub + 1, m, 0); } @@ -113,7 +118,6 @@ BENCH(regex, bench) { regfree(&rx); EZBENCH2("easy api extended", donothing, A()); EZBENCH2("easy api basic", donothing, C()); - EXPECT_EQ(REG_OK, regcomp(&rx, "^" "\\([0-9][0-9]*\\)\\." @@ -126,7 +130,6 @@ BENCH(regex, bench) { EZBENCH2("precompiled basic match", donothing, D(&rx, m)); free(m); regfree(&rx); - EXPECT_EQ(REG_OK, regcomp(&rx, "^" "([0-9]{1,3})\\." @@ -139,7 +142,6 @@ BENCH(regex, bench) { EZBENCH2("precompiled extended match", donothing, D(&rx, m)); free(m); regfree(&rx); - EXPECT_EQ(REG_OK, regcomp(&rx, "^" "([0-9]{1,3})\\." diff --git a/test/libc/str/towupper_test.c b/test/libc/str/towupper_test.c new file mode 100644 index 00000000..9284a1be --- /dev/null +++ b/test/libc/str/towupper_test.c @@ -0,0 +1,74 @@ +/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ +│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ +╞══════════════════════════════════════════════════════════════════════════════╡ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ +│ │ +│ Permission to use, copy, modify, and/or distribute this software for │ +│ any purpose with or without fee is hereby granted, provided that the │ +│ above copyright notice and this permission notice appear in all copies. │ +│ │ +│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ +│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ +│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ +│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ +│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ +│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ +│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ +│ PERFORMANCE OF THIS SOFTWARE. │ +╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/dce.h" +#include "libc/str/str.h" +#include "libc/testlib/ezbench.h" +#include "libc/testlib/testlib.h" + +TEST(towupper, test) { + EXPECT_EQ(u'!', towupper(u'!')); + EXPECT_EQ(u'A', towupper(u'a')); + EXPECT_EQ(u'À', towupper(u'à')); + if (IsTiny()) return; + EXPECT_EQ(L'𝛥', towupper(L'𝛿')); + EXPECT_EQ(L'B', towupper(L'b')); +} + +TEST(towlower, test) { + EXPECT_EQ(u'!', towlower(u'!')); + EXPECT_EQ(u'a', towlower(u'A')); + EXPECT_EQ(u'à', towlower(u'À')); + if (IsTiny()) return; + EXPECT_EQ(L'𝛿', towlower(L'𝛥')); + EXPECT_EQ(L'b', towlower(L'B')); +} + +BENCH(towupper, bench) { + EZBENCH2("towupper ascii", donothing, EXPROPRIATE(towupper(VEIL("r", L'a')))); + EZBENCH2("towupper latin1", donothing, + EXPROPRIATE(towupper(VEIL("r", u'A')))); + if (IsTiny()) return; + EZBENCH2("towupper astral", donothing, + EXPROPRIATE(towupper(VEIL("r", L'𝛿')))); +} + +BENCH(towlower, bench) { + EZBENCH2("towlower ascii", donothing, EXPROPRIATE(towlower(VEIL("r", L'a')))); + EZBENCH2("towlower latin1", donothing, + EXPROPRIATE(towlower(VEIL("r", u'A')))); + if (IsTiny()) return; + EZBENCH2("towlower astral", donothing, + EXPROPRIATE(towlower(VEIL("r", L'𝛿')))); +} + +BENCH(iswupper, bench) { + EZBENCH2("iswupper ascii", donothing, EXPROPRIATE(iswupper(VEIL("r", L'A')))); + EZBENCH2("iswupper latin1", donothing, + EXPROPRIATE(iswupper(VEIL("r", u'A')))); + EZBENCH2("iswupper astral", donothing, + EXPROPRIATE(iswupper(VEIL("r", L'𝛿')))); +} + +BENCH(iswlower, bench) { + EZBENCH2("iswlower ascii", donothing, EXPROPRIATE(iswlower(VEIL("r", L'a')))); + EZBENCH2("iswlower latin1", donothing, + EXPROPRIATE(iswlower(VEIL("r", u'A')))); + EZBENCH2("iswlower astral", donothing, + EXPROPRIATE(iswlower(VEIL("r", L'𝛿')))); +} diff --git a/test/tool/net/redbean_test.c b/test/tool/net/redbean_test.c index b722e788..50c46f22 100644 --- a/test/tool/net/redbean_test.c +++ b/test/tool/net/redbean_test.c @@ -32,6 +32,7 @@ #include "libc/sysv/consts/shut.h" #include "libc/sysv/consts/sig.h" #include "libc/sysv/consts/sock.h" +#include "libc/sysv/consts/tcp.h" #include "libc/testlib/testlib.h" #include "libc/x/x.h" #include "third_party/regex/regex.h" @@ -58,13 +59,27 @@ void SetUpOnce(void) { close(fdin); } +void Tune(int fd, int a, int b, int x) { + if (!b) return; + setsockopt(fd, a, b, &x, sizeof(x)); +} + +int Socket(void) { + int fd; + if ((fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) != -1) { + Tune(fd, IPPROTO_TCP, TCP_CORK, 0); + Tune(fd, IPPROTO_TCP, TCP_NODELAY, 1); + } + return fd; +} + char *SendHttpRequest(const char *s) { int fd; char *p; size_t n; ssize_t rc; struct sockaddr_in addr = {AF_INET, htons(port), {htonl(INADDR_LOOPBACK)}}; - EXPECT_NE(-1, (fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))); + EXPECT_NE(-1, (fd = Socket())); EXPECT_NE(-1, connect(fd, &addr, sizeof(addr))); n = strlen(s); EXPECT_EQ(n, write(fd, s, n)); @@ -114,10 +129,52 @@ TEST(redbean, testOptions) { "Accept-Charset: utf-8,ISO-8859-1;q=0\\.7,\\*;q=0\\.5\r\n" "Allow: GET, HEAD, POST, PUT, DELETE, OPTIONS\r\n" "Date: .*\r\n" - "Server: redbean/0\\.4\r\n" + "Server: redbean/.*\r\n" "Content-Length: 0\r\n" "\r\n", gc(SendHttpRequest("OPTIONS * HTTP/1.1\n\n")))); EXPECT_NE(-1, kill(pid, SIGTERM)); EXPECT_NE(-1, wait(0)); } + +TEST(redbean, testPipeline) { + if (IsWindows()) return; + char portbuf[16]; + int pid, pipefds[2]; + sigset_t chldmask, savemask; + sigaddset(&chldmask, SIGCHLD); + sigprocmask(SIG_BLOCK, &chldmask, &savemask); + ASSERT_NE(-1, pipe(pipefds)); + ASSERT_NE(-1, (pid = vfork())); + if (!pid) { + close(pipefds[0]); + dup2(pipefds[1], 1); + sigprocmask(SIG_SETMASK, &savemask, NULL); + execv("bin/redbean.com", + (char *const[]){"bin/redbean.com", "-szp0", "-l127.0.0.1", 0}); + _exit(127); + } + EXPECT_NE(-1, close(pipefds[1])); + EXPECT_NE(-1, read(pipefds[0], portbuf, sizeof(portbuf))); + port = atoi(portbuf); + EXPECT_TRUE(Matches("HTTP/1\\.1 200 OK\r\n" + "Accept: \\*/\\*\r\n" + "Accept-Charset: utf-8,ISO-8859-1;q=0\\.7,\\*;q=0\\.5\r\n" + "Allow: GET, HEAD, POST, PUT, DELETE, OPTIONS\r\n" + "Date: .*\r\n" + "Server: redbean/.*\r\n" + "Content-Length: 0\r\n" + "\r\n" + "HTTP/1\\.1 200 OK\r\n" + "Accept: \\*/\\*\r\n" + "Accept-Charset: utf-8,ISO-8859-1;q=0\\.7,\\*;q=0\\.5\r\n" + "Allow: GET, HEAD, POST, PUT, DELETE, OPTIONS\r\n" + "Date: .*\r\n" + "Server: redbean/.*\r\n" + "Content-Length: 0\r\n" + "\r\n", + gc(SendHttpRequest("OPTIONS * HTTP/1.1\n\n" + "OPTIONS * HTTP/1.1\n\n")))); + EXPECT_NE(-1, kill(pid, SIGTERM)); + EXPECT_NE(-1, wait(0)); +} diff --git a/third_party/chibicc/test/alignof_test.c b/third_party/chibicc/test/alignof_test.c index 35eeda54..f01d58f4 100644 --- a/third_party/chibicc/test/alignof_test.c +++ b/third_party/chibicc/test/alignof_test.c @@ -1,4 +1,5 @@ #include "third_party/chibicc/test/test.h" +# int _Alignas(512) g1; int _Alignas(512) g2; diff --git a/tool/decode/scrubdox.c b/tool/decode/scrubdox.c new file mode 100644 index 00000000..34fa3dc0 --- /dev/null +++ b/tool/decode/scrubdox.c @@ -0,0 +1,191 @@ +/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ +│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ +╞══════════════════════════════════════════════════════════════════════════════╡ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ +│ │ +│ Permission to use, copy, modify, and/or distribute this software for │ +│ any purpose with or without fee is hereby granted, provided that the │ +│ above copyright notice and this permission notice appear in all copies. │ +│ │ +│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ +│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ +│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ +│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ +│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ +│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ +│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ +│ PERFORMANCE OF THIS SOFTWARE. │ +╚──────────────────────────────────────────────────────────────────────────────┘ + + THIS PROGRAM TURNS TEXT LIKE THIS + + +------------------------------------------------------------------------+ + | Button | Name | Go to | From 1.2.3 | + | | | | go to | + |------------+-------------+--------------------------------+------------| + | [ < ] | Back | previous section in reading | 1.2.2 | + | | | order | | + |------------+-------------+--------------------------------+------------| + | [ > ] | Forward | next section in reading order | 1.2.4 | + |------------+-------------+--------------------------------+------------| + | [ << ] | FastBack | previous or up-and-previous | 1.1 | + | | | section | | + |------------+-------------+--------------------------------+------------| + | [ Up ] | Up | up section | 1.2 | + |------------+-------------+--------------------------------+------------| + | [ >> ] | FastForward | next or up-and-next section | 1.3 | + |------------+-------------+--------------------------------+------------| + | [Top] | Top | cover (top) of document | | + |------------+-------------+--------------------------------+------------| + | [Contents] | Contents | table of contents | | + |------------+-------------+--------------------------------+------------| + | [Index] | Index | concept index | | + |------------+-------------+--------------------------------+------------| + | [ ? ] | About | this page | | + +------------------------------------------------------------------------+ + + INTO THIS + + ┌────────────┬─────────────┬────────────────────────────────┬────────────┐ + │ Button │ Name │ Go to │ From 1.2.3 │ + │ │ │ │ go to │ + ├────────────┼─────────────┼────────────────────────────────┼────────────┤ + │ [ < ] │ Back │ previous section in reading │ 1.2.2 │ + │ │ │ order │ │ + ├────────────┼─────────────┼────────────────────────────────┼────────────┤ + │ [ > ] │ Forward │ next section in reading order │ 1.2.4 │ + ├────────────┼─────────────┼────────────────────────────────┼────────────┤ + │ [ << ] │ FastBack │ previous or up─and─previous │ 1.1 │ + │ │ │ section │ │ + ├────────────┼─────────────┼────────────────────────────────┼────────────┤ + │ [ Up ] │ Up │ up section │ 1.2 │ + ├────────────┼─────────────┼────────────────────────────────┼────────────┤ + │ [ >> ] │ FastForward │ next or up─and─next section │ 1.3 │ + ├────────────┼─────────────┼────────────────────────────────┼────────────┤ + │ [Top] │ Top │ cover (top) of document │ │ + ├────────────┼─────────────┼────────────────────────────────┼────────────┤ + │ [Contents] │ Contents │ table of contents │ │ + ├────────────┼─────────────┼────────────────────────────────┼────────────┤ + │ [Index] │ Index │ concept index │ │ + ├────────────┼─────────────┼────────────────────────────────┼────────────┤ + │ [ ? ] │ About │ this page │ │ + └────────────┴─────────────┴────────────────────────────────┴────────────┘ */ +#include "libc/log/log.h" +#include "libc/macros.internal.h" +#include "libc/runtime/gc.internal.h" +#include "libc/stdio/stdio.h" +#include "libc/str/str.h" +#include "libc/x/x.h" + +#define IsSpace(C) ((C) == ' ') +#define IsPipe(C) ((C) == '|' || (C) == u'│') +#define IsPlus(C) ((C) == '+' || (C) == u'┼') +#define IsHyphen(C) ((C) == '-' || (C) == u'─') +#define IsTick(C) ((C) == '`' || (C) == u'└') + +int n; +int yn; +int xn; + +FILE *f; +bool *V; +char **T; +char16_t **L; + +static void DoIt(int y, int x) { + if (V[y * (xn + 1) + x]) return; + V[y * (xn + 1) + x] = 1; + if (IsPipe(L[y - 1][x]) && IsHyphen(L[y][x - 1]) && IsPlus(L[y][x]) && + IsHyphen(L[y][x + 1]) && IsPipe(L[y + 1][x])) { + L[y][x] = u'┼'; + } else if (IsSpace(L[y - 1][x]) && IsHyphen(L[y][x - 1]) && + IsHyphen(L[y][x]) && IsHyphen(L[y][x + 1]) && + IsPipe(L[y + 1][x])) { + L[y][x] = u'┬'; + } else if (IsPipe(L[y - 1][x]) && IsHyphen(L[y][x - 1]) && + IsHyphen(L[y][x]) && IsHyphen(L[y][x + 1]) && + IsSpace(L[y + 1][x])) { + L[y][x] = u'┴'; + } else if (IsPipe(L[y - 1][x]) && IsSpace(L[y][x - 1]) && IsPipe(L[y][x]) && + IsHyphen(L[y][x + 1]) && IsPipe(L[y + 1][x])) { + L[y][x] = u'├'; + } else if (IsPipe(L[y - 1][x]) && IsHyphen(L[y][x - 1]) && IsPipe(L[y][x]) && + IsSpace(L[y][x + 1]) && IsPipe(L[y + 1][x])) { + L[y][x] = u'┤'; + } else if (IsSpace(L[y - 1][x]) && IsSpace(L[y][x - 1]) && IsPlus(L[y][x]) && + IsHyphen(L[y][x + 1]) && IsPipe(L[y + 1][x])) { + L[y][x] = u'┌'; + } else if (IsPipe(L[y - 1][x]) && IsHyphen(L[y][x - 1]) && IsPlus(L[y][x]) && + IsSpace(L[y][x + 1]) && IsSpace(L[y + 1][x])) { + L[y][x] = u'┘'; + } else if (IsSpace(L[y - 1][x]) && IsHyphen(L[y][x - 1]) && IsPlus(L[y][x]) && + IsSpace(L[y][x + 1]) && IsPipe(L[y + 1][x])) { + L[y][x] = u'┐'; + } else if (IsPipe(L[y - 1][x]) && IsSpace(L[y][x - 1]) && IsPlus(L[y][x]) && + IsHyphen(L[y][x + 1]) && IsSpace(L[y + 1][x])) { + L[y][x] = u'└'; + } else if (IsTick(L[y][x]) && IsPipe(L[y - 1][x]) && IsHyphen(L[y][x + 1]) && + IsSpace(L[y + 1][x]) && IsSpace(L[y][x - 1])) { + L[y][x] = u'└'; + } else if (L[y][x] == '-') { + L[y][x] = u'─'; + } else if (L[y][x] == '|') { + L[y][x] = u'│'; + } else { + return; + } + DoIt(y - 1, x + 0); + DoIt(y + 1, x + 0); + DoIt(y + 0, x - 1); + DoIt(y + 0, x + 1); +} + +int main(int argc, char *argv[]) { + char *s; + int y, x; + showcrashreports(); + f = stdin; + while ((s = chomp(xgetline(f)))) { + n = strwidth(s, 0); + xn = MAX(xn, n); + T = xrealloc(T, ++yn * sizeof(*T)); + T[yn - 1] = s; + } + xn += 1000; + L = xmalloc((yn + 2) * sizeof(*L)); + L[0] = utf8toutf16(gc(xasprintf(" %*s ", xn, " ")), -1, 0); + for (y = 0; y < yn; ++y) { + s = xasprintf(" %s%*s ", T[y], xn - n, " "); + L[y + 1] = utf8toutf16(s, -1, 0); + free(T[y]); + free(s); + } + L[yn + 2 - 1] = utf8toutf16(gc(xasprintf(" %*s ", xn, " ")), -1, 0); + free(T); + V = xcalloc((yn + 1) * (xn + 1), 1); + for (y = 1; y <= yn; ++y) { + for (x = 1; x <= xn; ++x) { + if (IsPipe(L[y - 1][x]) && IsHyphen(L[y][x - 1]) && IsPlus(L[y][x]) && + IsHyphen(L[y][x + 1]) && IsPipe(L[y + 1][x])) { + DoIt(y, x); + } + if (IsTick(L[y][x]) && IsPipe(L[y - 1][x]) && IsHyphen(L[y][x + 1]) && + IsSpace(L[y + 1][x]) && IsSpace(L[y][x - 1])) { + DoIt(y, x); + } + } + } + for (y = 1; y + 1 < yn; ++y) { + s = utf16toutf8(L[y], -1, 0); + n = strlen(s); + while (n && s[n - 1] == ' ') s[n - 1] = 0, --n; + puts(s + 1); + free(s); + } + for (y = 0; y < yn; ++y) { + free(L[y]); + } + free(L); + free(V); + return 0; +} diff --git a/tool/emacs/cosmo-c-constants.el b/tool/emacs/cosmo-c-constants.el index 8a1b2302..81c9f4c3 100644 --- a/tool/emacs/cosmo-c-constants.el +++ b/tool/emacs/cosmo-c-constants.el @@ -1,22 +1,30 @@ + +(defconst cosmo-c-constants-ansi + '("EOF" + "WEOF" + "NDEBUG" + "HUGE_VAL" + "CLK_TCK")) + (defconst cosmo-c-constants-c11 - '("__func__" - "__VA_ARGS__" - "__STDC__" - "__STDC_HOSTED__" - "__STDC_VERSION__" - "__TIME__" - "__STDC_ISO_10646__" - "__STDC_MB_MIGHT_NEQ_WC__" - "__STDC_UTF_16__" - "__STDC_UTF_32__" - "__STDC_ANALYZABLE__" - "__STDC_IEC_559_COMPLEX__" - "__STDC_LIB_EXT1__" - "__STDC_NO_ATOMICS__" - "__STDC_NO_COMPLEX__" - "__STDC_NO_THREADS__" - "__STDC_NO_VLA__" - "__STDC_WANT_LIB_EXT1__")) + '("__func__" + "__VA_ARGS__" + "__STDC__" + "__STDC_HOSTED__" + "__STDC_VERSION__" + "__TIME__" + "__STDC_ISO_10646__" + "__STDC_MB_MIGHT_NEQ_WC__" + "__STDC_UTF_16__" + "__STDC_UTF_32__" + "__STDC_ANALYZABLE__" + "__STDC_IEC_559_COMPLEX__" + "__STDC_LIB_EXT1__" + "__STDC_NO_ATOMICS__" + "__STDC_NO_COMPLEX__" + "__STDC_NO_THREADS__" + "__STDC_NO_VLA__" + "__STDC_WANT_LIB_EXT1__")) (defconst cosmo-c-constants-limits '("IMAGE_BASE_VIRTUAL" @@ -24,6 +32,7 @@ "IMAGE_BASE_PHYSICAL" "CHAR_MAX" "SCHAR_MAX" + "UCHAR_MAX" "SHRT_MAX" "INT_MAX" "LONG_MAX" @@ -40,6 +49,7 @@ "INTPTR_MAX" "PTRDIFF_MAX" "SCHAR_MIN" + "UCHAR_MIN" "SHRT_MIN" "UINT_MIN" "INT_MIN" @@ -152,7 +162,8 @@ (defconst cosmo-c-constants-regex (concat "\\_<" - (regexp-opt (append cosmo-c-constants-c11 + (regexp-opt (append cosmo-c-constants-ansi + cosmo-c-constants-c11 cosmo-c-constants-limits cosmo-c-constants-math)) "\\_>")) diff --git a/tool/net/redbean.c b/tool/net/redbean.c index bbdbb863..fc45334d 100644 --- a/tool/net/redbean.c +++ b/tool/net/redbean.c @@ -26,6 +26,7 @@ #include "libc/calls/struct/rusage.h" #include "libc/calls/struct/sigaction.h" #include "libc/calls/struct/stat.h" +#include "libc/dos.h" #include "libc/errno.h" #include "libc/fmt/conv.h" #include "libc/fmt/itoa.h" @@ -83,11 +84,6 @@ #define HASH_LOAD_FACTOR /* 1. / */ 4 #define DEFAULT_PORT 8080 -#define DOS_DATE(YEAR, MONTH_IDX1, DAY_IDX1) \ - (((YEAR)-1980) << 9 | (MONTH_IDX1) << 5 | (DAY_IDX1)) -#define DOS_TIME(HOUR, MINUTE, SECOND) \ - ((HOUR) << 11 | (MINUTE) << 5 | (SECOND) >> 1) - #define read(F, P, N) readv(F, &(struct iovec){P, N}, 1) #define LockInc(P) asm volatile("lock incq\t%0" : "=m"(*(P))) #define AppendCrlf(P) mempcpy(P, "\r\n", 2) @@ -132,11 +128,15 @@ static const struct ContentTypeExtension { {"atom", "application/atom+xml"}, // {"avi", "video/x-msvideo"}, // {"avif", "image/avif"}, // + {"azw", "application/vnd.amazon.ebook"}, // {"bmp", "image/bmp"}, // + {"bz2", "application/x-bzip2"}, // {"c", "text/plain"}, // {"cc", "text/plain"}, // {"css", "text/css"}, // {"csv", "text/csv"}, // + {"doc", "application/msword"}, // + {"epub", "application/epub+zip"}, // {"gif", "image/gif"}, // {"gz", "application/gzip"}, // {"h", "text/plain"}, // @@ -147,11 +147,13 @@ static const struct ContentTypeExtension { {"jar", "application/java-archive"}, // {"jpeg", "image/jpeg"}, // {"jpg", "image/jpeg"}, // - {"js", "application/javascript"}, // + {"js", "text/javascript"}, // {"json", "application/json"}, // {"m4a", "audio/mpeg"}, // {"markdown", "text/plain"}, // {"md", "text/plain"}, // + {"mid", "audio/midi"}, // + {"midi", "audio/midi"}, // {"mp2", "audio/mpeg"}, // {"mp3", "audio/mpeg"}, // {"mp4", "video/mp4"}, // @@ -192,9 +194,11 @@ static const struct ContentTypeExtension { {"xml", "application/xml"}, // {"xsl", "application/xslt+xml"}, // {"xslt", "application/xslt+xml"}, // + {"xz", "application/x-xz"}, // {"z", "application/zlib"}, // {"zip", "application/zip"}, // {"zst", "application/zstd"}, // + {"zst", "application/zstd"}, // }; static const char kRegCode[][8] = { @@ -638,7 +642,7 @@ static void UseOutput(void) { } static void DropOutput(void) { - free(outbuf.p); + FreeLater(outbuf.p); outbuf.p = 0; outbuf.n = 0; outbuf.c = 0; @@ -806,13 +810,16 @@ static char *DescribeServer(void) { } static void ProgramBrand(const char *s) { + char *p; free(brand); free(serverheader); - brand = strdup(s); - if (!(serverheader = EncodeHttpHeaderValue(brand, -1, 0))) { - fprintf(stderr, "error: brand isn't latin1 encodable: %`'s", brand); + if (!(p = EncodeHttpHeaderValue(s, -1, 0))) { + fprintf(stderr, "error: brand isn't latin1 encodable: %`'s", s); exit(1); } + brand = strdup(s); + serverheader = xasprintf("Server: %s\r\n", p); + free(p); } static void ProgramLinger(long sec) { @@ -1194,7 +1201,7 @@ static void ReapZombies(void) { } while (!terminated); } -static inline ssize_t WritevAll(int fd, struct iovec *iov, int iovlen) { +static ssize_t WritevAll(int fd, struct iovec *iov, int iovlen) { ssize_t rc; size_t wrote; do { @@ -1286,14 +1293,6 @@ forceinline int GetMode(struct Asset *a) { return a->file ? a->file->st.st_mode : GetZipCfileMode(zmap + a->cf); } -forceinline bool IsNotModified(struct Asset *a) { - if (msg.version < 10) return false; - if (!HasHeader(kHttpIfModifiedSince)) return false; - return a->lastmodified >= - ParseHttpDateTime(HeaderData(kHttpIfModifiedSince), - HeaderLength(kHttpIfModifiedSince)); -} - static char *FormatUnixHttpDateTime(char *s, int64_t t) { struct tm tm; gmtime_r(&t, &tm); @@ -1305,7 +1304,7 @@ forceinline bool IsCompressionMethodSupported(int method) { return method == kZipCompressionNone || method == kZipCompressionDeflate; } -static unsigned Hash(const void *p, unsigned long n) { +static inline unsigned Hash(const void *p, unsigned long n) { unsigned h, i; for (h = i = 0; i < n; i++) { h += ((unsigned char *)p)[i]; @@ -1468,12 +1467,6 @@ static char *AppendCache(char *p, int64_t seconds) { return AppendExpires(p, (int64_t)shared->nowish + seconds); } -static inline char *AppendServer(char *p, const char *s) { - p = stpcpy(p, "Server: "); - p = stpcpy(p, s); - return AppendCrlf(p); -} - static inline char *AppendContentLength(char *p, size_t n) { p = stpcpy(p, "Content-Length: "); p += uint64toarray_radix10(n, p); @@ -3059,8 +3052,8 @@ static int LuaIsAcceptablePort(lua_State *L) { return LuaIsValid(L, IsAcceptablePort); } -static int LuaCoderImpl(lua_State *L, - char *Coder(const char *, size_t, size_t *)) { +static noinline int LuaCoderImpl(lua_State *L, + char *Coder(const char *, size_t, size_t *)) { void *p; size_t n; p = luaL_checklstring(L, 1, &n); @@ -3070,7 +3063,8 @@ static int LuaCoderImpl(lua_State *L, return 1; } -static int LuaCoder(lua_State *L, char *Coder(const char *, size_t, size_t *)) { +static noinline int LuaCoder(lua_State *L, + char *Coder(const char *, size_t, size_t *)) { return LuaCoderImpl(L, Coder); } @@ -3220,7 +3214,7 @@ static int LuaCrc32c(lua_State *L) { return LuaHash(L, crc32c); } -static int LuaProgramInt(lua_State *L, void Program(long)) { +static noinline int LuaProgramInt(lua_State *L, void Program(long)) { Program(luaL_checkinteger(L, 1)); return 0; } @@ -4208,7 +4202,7 @@ static inline int CompareInts(const uint64_t x, uint64_t y) { return x > y ? 1 : x < y ? -1 : 0; } -static inline const char *BisectContentType(uint64_t ext) { +static const char *BisectContentType(uint64_t ext) { int c, m, l, r; l = 0; r = ARRAYLEN(kContentTypeExtension) - 1; @@ -4251,6 +4245,14 @@ static const char *GetContentType(struct Asset *a, const char *path, size_t n) { a->istext ? "text/plain" : "application/octet-stream")); } +static bool IsNotModified(struct Asset *a) { + if (msg.version < 10) return false; + if (!HasHeader(kHttpIfModifiedSince)) return false; + return a->lastmodified >= + ParseHttpDateTime(HeaderData(kHttpIfModifiedSince), + HeaderLength(kHttpIfModifiedSince)); +} + static char *ServeAsset(struct Asset *a, const char *path, size_t pathlen) { char *p; uint32_t crc; @@ -4392,7 +4394,7 @@ static bool HandleMessage(void) { } if (msg.version >= 10) { p = AppendCrlf(stpcpy(stpcpy(p, "Date: "), shared->currentdate)); - if (!branded) p = AppendServer(p, serverheader); + if (!branded) p = stpcpy(p, serverheader); if (extrahdrs) p = stpcpy(p, extrahdrs); if (connectionclose) { p = stpcpy(p, "Connection: close\r\n"); diff --git a/tool/viz/life.c b/tool/viz/life.c index 2965a67c..fad4e69a 100644 --- a/tool/viz/life.c +++ b/tool/viz/life.c @@ -835,6 +835,26 @@ static void OnMouse(char *p) { } } +static void Rando1(void) { + long i, n; + n = (byn * bxn) >> 6; + for (i = 0; i < n; ++i) { + board[i] = rand64(); + } +} + +static void Rando2(void) { + long i, n; + n = (byn * bxn) >> 6; + for (i = 0; i < n; ++i) { + board[i] = rand(); + board[i] <<= 31; + board[i] |= rand(); + board[i] <<= 2; + board[i] |= rand() & 0b11; + } +} + static void ReadKeyboard(void) { char buf[32], *p = buf; memset(buf, 0, sizeof(buf)); @@ -861,6 +881,12 @@ static void ReadKeyboard(void) { case CTRL('V'): OnPageDown(); break; + case CTRL('R'): + Rando1(); + break; + case CTRL('G'): + Rando2(); + break; case 'M': if (mousemode) { DisableMouse();