Individual characters.
inchar32_t Characters::tolower(inchar32_t c) { return (inchar32_t) tolower((int) c); } inchar32_t Characters::toupper(inchar32_t c) { return (inchar32_t) toupper((int) c); } int Characters::isalpha(inchar32_t c) { return isalpha((int) c); } int Characters::isdigit(inchar32_t c) { return isdigit((int) c); } int Characters::isupper(inchar32_t c) { return isupper((int) c); } int Characters::islower(inchar32_t c) { return islower((int) c); } int Characters::isalnum(inchar32_t c) { return isalnum((int) c); } int Characters::iscntrl(inchar32_t c) { return (c < 32); } int Characters::vowel(inchar32_t c) { if ((c == 'a') || (c == 'e') || (c == 'i') || (c == 'o') || (c == 'u')) return TRUE; return FALSE; }
int Characters::is_space_or_tab(inchar32_t c) { if ((c == ' ') || (c == '\t')) return TRUE; return FALSE; } int Characters::is_whitespace(inchar32_t c) { if ((c == ' ') || (c == '\t') || (c == '\n')) return TRUE; return FALSE; }
§3. These are all the characters which would come out as whitespace in the sense of the Treaty of Babel rules on leading and trailing spaces in iFiction records.
int Characters::is_babel_whitespace(inchar32_t c) { if ((c == ' ') || (c == '\t') || (c == '\x0a') || (c == '\x0d') || (c == NEWLINE_IN_STRING)) return TRUE; return FALSE; }
§4. The following covers ASCII white-space characters, and beyond those all non-ASCII Unicode characters of category Zs.
int Characters::is_Unicode_whitespace(inchar32_t c) { if (c == 0x0009) return TRUE; if (c == 0x000A) return TRUE; if (c == 0x000C) return TRUE; if (c == 0x000D) return TRUE; if (c == 0x0020) return TRUE; if (c == 0x00A0) return TRUE; // NO-BREAK SPACE if (c == 0x1680) return TRUE; // OGHAM SPACE MARK if (c == 0x2000) return TRUE; // EN QUAD if (c == 0x2001) return TRUE; // EM QUAD if (c == 0x2002) return TRUE; // EN SPACE if (c == 0x2003) return TRUE; // EM SPACE if (c == 0x2004) return TRUE; // THREE-PER-EM SPACE if (c == 0x2005) return TRUE; // FOUR-PER-EM SPACE if (c == 0x2006) return TRUE; // SIX-PER-EM SPACE if (c == 0x2007) return TRUE; // FIGURE SPACE if (c == 0x2008) return TRUE; // PUNCTUATION SPACE if (c == 0x2009) return TRUE; // THIN SPACE if (c == 0x200A) return TRUE; // HAIR SPACE if (c == 0x202F) return TRUE; // NARROW NO-BREAK SPACE if (c == 0x205F) return TRUE; // MEDIUM MATHEMATICAL SPACE if (c == 0x3000) return TRUE; // IDEOGRAPHIC SPACE return FALSE; }
§5. ASCII-only punctuation characters, using the convenient definition of "ASCII punctuation" from the CommonMark standard:
int Characters::is_ASCII_punctuation(inchar32_t c) { if ((c >= 0x0021) && (c <= 0x002F)) return TRUE; if ((c >= 0x003A) && (c <= 0x0040)) return TRUE; if ((c >= 0x005B) && (c <= 0x0060)) return TRUE; if ((c >= 0x007B) && (c <= 0x007E)) return TRUE; return FALSE; }
§6. This extends ASCII punctuation by adding all Unicode characters of category Pc, Pd, Pe, Pf, Pi, Po, or Ps. After all, we wouldn't want to get old Assyrian cuneiform spacing indicators wrong, would we? Or the Imperial Aramaic section sign?
int Characters::is_Unicode_punctuation(inchar32_t c) { if (c < 0x80) return Characters::is_ASCII_punctuation(c); if (c == 0x00A1) return TRUE; // INVERTED EXCLAMATION MARK if (c == 0x00A7) return TRUE; // SECTION SIGN if (c == 0x00AB) return TRUE; // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK if (c == 0x00B6) return TRUE; // PILCROW SIGN if (c == 0x00B7) return TRUE; // MIDDLE DOT if (c == 0x00BB) return TRUE; // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK if (c == 0x00BF) return TRUE; // INVERTED QUESTION MARK if (c < 0x0100) return FALSE; if (c == 0x037E) return TRUE; // GREEK QUESTION MARK if (c == 0x0387) return TRUE; // GREEK ANO TELEIA if (c == 0x055A) return TRUE; // ARMENIAN APOSTROPHE if (c == 0x055B) return TRUE; // ARMENIAN EMPHASIS MARK if (c == 0x055C) return TRUE; // ARMENIAN EXCLAMATION MARK if (c == 0x055D) return TRUE; // ARMENIAN COMMA if (c == 0x055E) return TRUE; // ARMENIAN QUESTION MARK if (c == 0x055F) return TRUE; // ARMENIAN ABBREVIATION MARK if (c == 0x0589) return TRUE; // ARMENIAN FULL STOP if (c == 0x058A) return TRUE; // ARMENIAN HYPHEN if (c == 0x05BE) return TRUE; // HEBREW PUNCTUATION MAQAF if (c == 0x05C0) return TRUE; // HEBREW PUNCTUATION PASEQ if (c == 0x05C3) return TRUE; // HEBREW PUNCTUATION SOF PASUQ if (c == 0x05C6) return TRUE; // HEBREW PUNCTUATION NUN HAFUKHA if (c == 0x05F3) return TRUE; // HEBREW PUNCTUATION GERESH if (c == 0x05F4) return TRUE; // HEBREW PUNCTUATION GERSHAYIM if (c == 0x0609) return TRUE; // ARABIC-INDIC PER MILLE SIGN if (c == 0x060A) return TRUE; // ARABIC-INDIC PER TEN THOUSAND SIGN if (c == 0x060C) return TRUE; // ARABIC COMMA if (c == 0x060D) return TRUE; // ARABIC DATE SEPARATOR if (c == 0x061B) return TRUE; // ARABIC SEMICOLON if (c == 0x061D) return TRUE; // ARABIC END OF TEXT MARK if (c == 0x061E) return TRUE; // ARABIC TRIPLE DOT PUNCTUATION MARK if (c == 0x061F) return TRUE; // ARABIC QUESTION MARK if (c == 0x066A) return TRUE; // ARABIC PERCENT SIGN if (c == 0x066B) return TRUE; // ARABIC DECIMAL SEPARATOR if (c == 0x066C) return TRUE; // ARABIC THOUSANDS SEPARATOR if (c == 0x066D) return TRUE; // ARABIC FIVE POINTED STAR if (c == 0x06D4) return TRUE; // ARABIC FULL STOP if (c == 0x0700) return TRUE; // SYRIAC END OF PARAGRAPH if (c == 0x0701) return TRUE; // SYRIAC SUPRALINEAR FULL STOP if (c == 0x0702) return TRUE; // SYRIAC SUBLINEAR FULL STOP if (c == 0x0703) return TRUE; // SYRIAC SUPRALINEAR COLON if (c == 0x0704) return TRUE; // SYRIAC SUBLINEAR COLON if (c == 0x0705) return TRUE; // SYRIAC HORIZONTAL COLON if (c == 0x0706) return TRUE; // SYRIAC COLON SKEWED LEFT if (c == 0x0707) return TRUE; // SYRIAC COLON SKEWED RIGHT if (c == 0x0708) return TRUE; // SYRIAC SUPRALINEAR COLON SKEWED LEFT if (c == 0x0709) return TRUE; // SYRIAC SUBLINEAR COLON SKEWED RIGHT if (c == 0x070A) return TRUE; // SYRIAC CONTRACTION if (c == 0x070B) return TRUE; // SYRIAC HARKLEAN OBELUS if (c == 0x070C) return TRUE; // SYRIAC HARKLEAN METOBELUS if (c == 0x070D) return TRUE; // SYRIAC HARKLEAN ASTERISCUS if (c == 0x07F7) return TRUE; // NKO SYMBOL GBAKURUNEN if (c == 0x07F8) return TRUE; // NKO COMMA if (c == 0x07F9) return TRUE; // NKO EXCLAMATION MARK if (c == 0x0830) return TRUE; // SAMARITAN PUNCTUATION NEQUDAA if (c == 0x0831) return TRUE; // SAMARITAN PUNCTUATION AFSAAQ if (c == 0x0832) return TRUE; // SAMARITAN PUNCTUATION ANGED if (c == 0x0833) return TRUE; // SAMARITAN PUNCTUATION BAU if (c == 0x0834) return TRUE; // SAMARITAN PUNCTUATION ATMAAU if (c == 0x0835) return TRUE; // SAMARITAN PUNCTUATION SHIYYAALAA if (c == 0x0836) return TRUE; // SAMARITAN ABBREVIATION MARK if (c == 0x0837) return TRUE; // SAMARITAN PUNCTUATION MELODIC QITSA if (c == 0x0838) return TRUE; // SAMARITAN PUNCTUATION ZIQAA if (c == 0x0839) return TRUE; // SAMARITAN PUNCTUATION QITSA if (c == 0x083A) return TRUE; // SAMARITAN PUNCTUATION ZAEF if (c == 0x083B) return TRUE; // SAMARITAN PUNCTUATION TURU if (c == 0x083C) return TRUE; // SAMARITAN PUNCTUATION ARKAANU if (c == 0x083D) return TRUE; // SAMARITAN PUNCTUATION SOF MASHFAAT if (c == 0x083E) return TRUE; // SAMARITAN PUNCTUATION ANNAAU if (c == 0x085E) return TRUE; // MANDAIC PUNCTUATION if (c == 0x0964) return TRUE; // DEVANAGARI DANDA if (c == 0x0965) return TRUE; // DEVANAGARI DOUBLE DANDA if (c == 0x0970) return TRUE; // DEVANAGARI ABBREVIATION SIGN if (c == 0x09FD) return TRUE; // BENGALI ABBREVIATION SIGN if (c == 0x0A76) return TRUE; // GURMUKHI ABBREVIATION SIGN if (c == 0x0AF0) return TRUE; // GUJARATI ABBREVIATION SIGN if (c == 0x0C77) return TRUE; // TELUGU SIGN SIDDHAM if (c == 0x0C84) return TRUE; // KANNADA SIGN SIDDHAM if (c == 0x0DF4) return TRUE; // SINHALA PUNCTUATION KUNDDALIYA if (c == 0x0E4F) return TRUE; // THAI CHARACTER FONGMAN if (c == 0x0E5A) return TRUE; // THAI CHARACTER ANGKHANKHU if (c == 0x0E5B) return TRUE; // THAI CHARACTER KHOMUT if (c == 0x0F04) return TRUE; // TIBETAN MARK INITIAL YIG MGO MDUN MA if (c == 0x0F05) return TRUE; // TIBETAN MARK CLOSING YIG MGO SGAB MA if (c == 0x0F06) return TRUE; // TIBETAN MARK CARET YIG MGO PHUR SHAD MA if (c == 0x0F07) return TRUE; // TIBETAN MARK YIG MGO TSHEG SHAD MA if (c == 0x0F08) return TRUE; // TIBETAN MARK SBRUL SHAD if (c == 0x0F09) return TRUE; // TIBETAN MARK BSKUR YIG MGO if (c == 0x0F0A) return TRUE; // TIBETAN MARK BKA- SHOG YIG MGO if (c == 0x0F0B) return TRUE; // TIBETAN MARK INTERSYLLABIC TSHEG if (c == 0x0F0C) return TRUE; // TIBETAN MARK DELIMITER TSHEG BSTAR if (c == 0x0F0D) return TRUE; // TIBETAN MARK SHAD if (c == 0x0F0E) return TRUE; // TIBETAN MARK NYIS SHAD if (c == 0x0F0F) return TRUE; // TIBETAN MARK TSHEG SHAD if (c == 0x0F10) return TRUE; // TIBETAN MARK NYIS TSHEG SHAD if (c == 0x0F11) return TRUE; // TIBETAN MARK RIN CHEN SPUNGS SHAD if (c == 0x0F12) return TRUE; // TIBETAN MARK RGYA GRAM SHAD if (c == 0x0F14) return TRUE; // TIBETAN MARK GTER TSHEG if (c == 0x0F3A) return TRUE; // TIBETAN MARK GUG RTAGS GYON if (c == 0x0F3B) return TRUE; // TIBETAN MARK GUG RTAGS GYAS if (c == 0x0F3C) return TRUE; // TIBETAN MARK ANG KHANG GYON if (c == 0x0F3D) return TRUE; // TIBETAN MARK ANG KHANG GYAS if (c == 0x0F85) return TRUE; // TIBETAN MARK PALUTA if (c == 0x0FD0) return TRUE; // TIBETAN MARK BSKA- SHOG GI MGO RGYAN if (c == 0x0FD1) return TRUE; // TIBETAN MARK MNYAM YIG GI MGO RGYAN if (c == 0x0FD2) return TRUE; // TIBETAN MARK NYIS TSHEG if (c == 0x0FD3) return TRUE; // TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA if (c == 0x0FD4) return TRUE; // TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA if (c == 0x0FD9) return TRUE; // TIBETAN MARK LEADING MCHAN RTAGS if (c == 0x0FDA) return TRUE; // TIBETAN MARK TRAILING MCHAN RTAGS if (c < 0x01000) return FALSE; if (c == 0x104A) return TRUE; // MYANMAR SIGN LITTLE SECTION if (c == 0x104B) return TRUE; // MYANMAR SIGN SECTION if (c == 0x104C) return TRUE; // MYANMAR SYMBOL LOCATIVE if (c == 0x104D) return TRUE; // MYANMAR SYMBOL COMPLETED if (c == 0x104E) return TRUE; // MYANMAR SYMBOL AFOREMENTIONED if (c == 0x104F) return TRUE; // MYANMAR SYMBOL GENITIVE if (c == 0x10FB) return TRUE; // GEORGIAN PARAGRAPH SEPARATOR if (c == 0x1360) return TRUE; // ETHIOPIC SECTION MARK if (c == 0x1361) return TRUE; // ETHIOPIC WORDSPACE if (c == 0x1362) return TRUE; // ETHIOPIC FULL STOP if (c == 0x1363) return TRUE; // ETHIOPIC COMMA if (c == 0x1364) return TRUE; // ETHIOPIC SEMICOLON if (c == 0x1365) return TRUE; // ETHIOPIC COLON if (c == 0x1366) return TRUE; // ETHIOPIC PREFACE COLON if (c == 0x1367) return TRUE; // ETHIOPIC QUESTION MARK if (c == 0x1368) return TRUE; // ETHIOPIC PARAGRAPH SEPARATOR if (c == 0x1400) return TRUE; // CANADIAN SYLLABICS HYPHEN if (c == 0x166E) return TRUE; // CANADIAN SYLLABICS FULL STOP if (c == 0x169B) return TRUE; // OGHAM FEATHER MARK if (c == 0x169C) return TRUE; // OGHAM REVERSED FEATHER MARK if (c == 0x16EB) return TRUE; // RUNIC SINGLE PUNCTUATION if (c == 0x16EC) return TRUE; // RUNIC MULTIPLE PUNCTUATION if (c == 0x16ED) return TRUE; // RUNIC CROSS PUNCTUATION if (c == 0x1735) return TRUE; // PHILIPPINE SINGLE PUNCTUATION if (c == 0x1736) return TRUE; // PHILIPPINE DOUBLE PUNCTUATION if (c == 0x17D4) return TRUE; // KHMER SIGN KHAN if (c == 0x17D5) return TRUE; // KHMER SIGN BARIYOOSAN if (c == 0x17D6) return TRUE; // KHMER SIGN CAMNUC PII KUUH if (c == 0x17D8) return TRUE; // KHMER SIGN BEYYAL if (c == 0x17D9) return TRUE; // KHMER SIGN PHNAEK MUAN if (c == 0x17DA) return TRUE; // KHMER SIGN KOOMUUT if (c == 0x1800) return TRUE; // MONGOLIAN BIRGA if (c == 0x1801) return TRUE; // MONGOLIAN ELLIPSIS if (c == 0x1802) return TRUE; // MONGOLIAN COMMA if (c == 0x1803) return TRUE; // MONGOLIAN FULL STOP if (c == 0x1804) return TRUE; // MONGOLIAN COLON if (c == 0x1805) return TRUE; // MONGOLIAN FOUR DOTS if (c == 0x1806) return TRUE; // MONGOLIAN TODO SOFT HYPHEN if (c == 0x1807) return TRUE; // MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER if (c == 0x1808) return TRUE; // MONGOLIAN MANCHU COMMA if (c == 0x1809) return TRUE; // MONGOLIAN MANCHU FULL STOP if (c == 0x180A) return TRUE; // MONGOLIAN NIRUGU if (c == 0x1944) return TRUE; // LIMBU EXCLAMATION MARK if (c == 0x1945) return TRUE; // LIMBU QUESTION MARK if (c == 0x1A1E) return TRUE; // BUGINESE PALLAWA if (c == 0x1A1F) return TRUE; // BUGINESE END OF SECTION if (c == 0x1AA0) return TRUE; // TAI THAM SIGN WIANG if (c == 0x1AA1) return TRUE; // TAI THAM SIGN WIANGWAAK if (c == 0x1AA2) return TRUE; // TAI THAM SIGN SAWAN if (c == 0x1AA3) return TRUE; // TAI THAM SIGN KEOW if (c == 0x1AA4) return TRUE; // TAI THAM SIGN HOY if (c == 0x1AA5) return TRUE; // TAI THAM SIGN DOKMAI if (c == 0x1AA6) return TRUE; // TAI THAM SIGN REVERSED ROTATED RANA if (c == 0x1AA8) return TRUE; // TAI THAM SIGN KAAN if (c == 0x1AA9) return TRUE; // TAI THAM SIGN KAANKUU if (c == 0x1AAA) return TRUE; // TAI THAM SIGN SATKAAN if (c == 0x1AAB) return TRUE; // TAI THAM SIGN SATKAANKUU if (c == 0x1AAC) return TRUE; // TAI THAM SIGN HANG if (c == 0x1AAD) return TRUE; // TAI THAM SIGN CAANG if (c == 0x1B5A) return TRUE; // BALINESE PANTI if (c == 0x1B5B) return TRUE; // BALINESE PAMADA if (c == 0x1B5C) return TRUE; // BALINESE WINDU if (c == 0x1B5D) return TRUE; // BALINESE CARIK PAMUNGKAH if (c == 0x1B5E) return TRUE; // BALINESE CARIK SIKI if (c == 0x1B5F) return TRUE; // BALINESE CARIK PAREREN if (c == 0x1B60) return TRUE; // BALINESE PAMENENG if (c == 0x1B7D) return TRUE; // BALINESE PANTI LANTANG if (c == 0x1B7E) return TRUE; // BALINESE PAMADA LANTANG if (c == 0x1BFC) return TRUE; // BATAK SYMBOL BINDU NA METEK if (c == 0x1BFD) return TRUE; // BATAK SYMBOL BINDU PINARBORAS if (c == 0x1BFE) return TRUE; // BATAK SYMBOL BINDU JUDUL if (c == 0x1BFF) return TRUE; // BATAK SYMBOL BINDU PANGOLAT if (c == 0x1C3B) return TRUE; // LEPCHA PUNCTUATION TA-ROL if (c == 0x1C3C) return TRUE; // LEPCHA PUNCTUATION NYET THYOOM TA-ROL if (c == 0x1C3D) return TRUE; // LEPCHA PUNCTUATION CER-WA if (c == 0x1C3E) return TRUE; // LEPCHA PUNCTUATION TSHOOK CER-WA if (c == 0x1C3F) return TRUE; // LEPCHA PUNCTUATION TSHOOK if (c == 0x1C7E) return TRUE; // OL CHIKI PUNCTUATION MUCAAD if (c == 0x1C7F) return TRUE; // OL CHIKI PUNCTUATION DOUBLE MUCAAD if (c == 0x1CC0) return TRUE; // SUNDANESE PUNCTUATION BINDU SURYA if (c == 0x1CC1) return TRUE; // SUNDANESE PUNCTUATION BINDU PANGLONG if (c == 0x1CC2) return TRUE; // SUNDANESE PUNCTUATION BINDU PURNAMA if (c == 0x1CC3) return TRUE; // SUNDANESE PUNCTUATION BINDU CAKRA if (c == 0x1CC4) return TRUE; // SUNDANESE PUNCTUATION BINDU LEU SATANGA if (c == 0x1CC5) return TRUE; // SUNDANESE PUNCTUATION BINDU KA SATANGA if (c == 0x1CC6) return TRUE; // SUNDANESE PUNCTUATION BINDU DA SATANGA if (c == 0x1CC7) return TRUE; // SUNDANESE PUNCTUATION BINDU BA SATANGA if (c == 0x1CD3) return TRUE; // VEDIC SIGN NIHSHVASA if (c == 0x2010) return TRUE; // HYPHEN if (c == 0x2011) return TRUE; // NON-BREAKING HYPHEN if (c == 0x2012) return TRUE; // FIGURE DASH if (c == 0x2013) return TRUE; // EN DASH if (c == 0x2014) return TRUE; // EM DASH if (c == 0x2015) return TRUE; // HORIZONTAL BAR if (c == 0x2016) return TRUE; // DOUBLE VERTICAL LINE if (c == 0x2017) return TRUE; // DOUBLE LOW LINE if (c == 0x2018) return TRUE; // LEFT SINGLE QUOTATION MARK if (c == 0x2019) return TRUE; // RIGHT SINGLE QUOTATION MARK if (c == 0x201A) return TRUE; // SINGLE LOW-9 QUOTATION MARK if (c == 0x201B) return TRUE; // SINGLE HIGH-REVERSED-9 QUOTATION MARK if (c == 0x201C) return TRUE; // LEFT DOUBLE QUOTATION MARK if (c == 0x201D) return TRUE; // RIGHT DOUBLE QUOTATION MARK if (c == 0x201E) return TRUE; // DOUBLE LOW-9 QUOTATION MARK if (c == 0x201F) return TRUE; // DOUBLE HIGH-REVERSED-9 QUOTATION MARK if (c == 0x2020) return TRUE; // DAGGER if (c == 0x2021) return TRUE; // DOUBLE DAGGER if (c == 0x2022) return TRUE; // BULLET if (c == 0x2023) return TRUE; // TRIANGULAR BULLET if (c == 0x2024) return TRUE; // ONE DOT LEADER if (c == 0x2025) return TRUE; // TWO DOT LEADER if (c == 0x2026) return TRUE; // HORIZONTAL ELLIPSIS if (c == 0x2027) return TRUE; // HYPHENATION POINT if (c == 0x2030) return TRUE; // PER MILLE SIGN if (c == 0x2031) return TRUE; // PER TEN THOUSAND SIGN if (c == 0x2032) return TRUE; // PRIME if (c == 0x2033) return TRUE; // DOUBLE PRIME if (c == 0x2034) return TRUE; // TRIPLE PRIME if (c == 0x2035) return TRUE; // REVERSED PRIME if (c == 0x2036) return TRUE; // REVERSED DOUBLE PRIME if (c == 0x2037) return TRUE; // REVERSED TRIPLE PRIME if (c == 0x2038) return TRUE; // CARET if (c == 0x2039) return TRUE; // SINGLE LEFT-POINTING ANGLE QUOTATION MARK if (c == 0x203A) return TRUE; // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK if (c == 0x203B) return TRUE; // REFERENCE MARK if (c == 0x203C) return TRUE; // DOUBLE EXCLAMATION MARK if (c == 0x203D) return TRUE; // INTERROBANG if (c == 0x203E) return TRUE; // OVERLINE if (c == 0x203F) return TRUE; // UNDERTIE if (c == 0x2040) return TRUE; // CHARACTER TIE if (c == 0x2041) return TRUE; // CARET INSERTION POINT if (c == 0x2042) return TRUE; // ASTERISM if (c == 0x2043) return TRUE; // HYPHEN BULLET if (c == 0x2045) return TRUE; // LEFT SQUARE BRACKET WITH QUILL if (c == 0x2046) return TRUE; // RIGHT SQUARE BRACKET WITH QUILL if (c == 0x2047) return TRUE; // DOUBLE QUESTION MARK if (c == 0x2048) return TRUE; // QUESTION EXCLAMATION MARK if (c == 0x2049) return TRUE; // EXCLAMATION QUESTION MARK if (c == 0x204A) return TRUE; // TIRONIAN SIGN ET if (c == 0x204B) return TRUE; // REVERSED PILCROW SIGN if (c == 0x204C) return TRUE; // BLACK LEFTWARDS BULLET if (c == 0x204D) return TRUE; // BLACK RIGHTWARDS BULLET if (c == 0x204E) return TRUE; // LOW ASTERISK if (c == 0x204F) return TRUE; // REVERSED SEMICOLON if (c == 0x2050) return TRUE; // CLOSE UP if (c == 0x2051) return TRUE; // TWO ASTERISKS ALIGNED VERTICALLY if (c == 0x2053) return TRUE; // SWUNG DASH if (c == 0x2054) return TRUE; // INVERTED UNDERTIE if (c == 0x2055) return TRUE; // FLOWER PUNCTUATION MARK if (c == 0x2056) return TRUE; // THREE DOT PUNCTUATION if (c == 0x2057) return TRUE; // QUADRUPLE PRIME if (c == 0x2058) return TRUE; // FOUR DOT PUNCTUATION if (c == 0x2059) return TRUE; // FIVE DOT PUNCTUATION if (c == 0x205A) return TRUE; // TWO DOT PUNCTUATION if (c == 0x205B) return TRUE; // FOUR DOT MARK if (c == 0x205C) return TRUE; // DOTTED CROSS if (c == 0x205D) return TRUE; // TRICOLON if (c == 0x205E) return TRUE; // VERTICAL FOUR DOTS if (c == 0x207D) return TRUE; // SUPERSCRIPT LEFT PARENTHESIS if (c == 0x207E) return TRUE; // SUPERSCRIPT RIGHT PARENTHESIS if (c == 0x208D) return TRUE; // SUBSCRIPT LEFT PARENTHESIS if (c == 0x208E) return TRUE; // SUBSCRIPT RIGHT PARENTHESIS if (c == 0x2308) return TRUE; // LEFT CEILING if (c == 0x2309) return TRUE; // RIGHT CEILING if (c == 0x230A) return TRUE; // LEFT FLOOR if (c == 0x230B) return TRUE; // RIGHT FLOOR if (c == 0x2329) return TRUE; // LEFT-POINTING ANGLE BRACKET if (c == 0x232A) return TRUE; // RIGHT-POINTING ANGLE BRACKET if (c == 0x2768) return TRUE; // MEDIUM LEFT PARENTHESIS ORNAMENT if (c == 0x2769) return TRUE; // MEDIUM RIGHT PARENTHESIS ORNAMENT if (c == 0x276A) return TRUE; // MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT if (c == 0x276B) return TRUE; // MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT if (c == 0x276C) return TRUE; // MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT if (c == 0x276D) return TRUE; // MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT if (c == 0x276E) return TRUE; // HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT if (c == 0x276F) return TRUE; // HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT if (c == 0x2770) return TRUE; // HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT if (c == 0x2771) return TRUE; // HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT if (c == 0x2772) return TRUE; // LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT if (c == 0x2773) return TRUE; // LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT if (c == 0x2774) return TRUE; // MEDIUM LEFT CURLY BRACKET ORNAMENT if (c == 0x2775) return TRUE; // MEDIUM RIGHT CURLY BRACKET ORNAMENT if (c == 0x27C5) return TRUE; // LEFT S-SHAPED BAG DELIMITER if (c == 0x27C6) return TRUE; // RIGHT S-SHAPED BAG DELIMITER if (c == 0x27E6) return TRUE; // MATHEMATICAL LEFT WHITE SQUARE BRACKET if (c == 0x27E7) return TRUE; // MATHEMATICAL RIGHT WHITE SQUARE BRACKET if (c == 0x27E8) return TRUE; // MATHEMATICAL LEFT ANGLE BRACKET if (c == 0x27E9) return TRUE; // MATHEMATICAL RIGHT ANGLE BRACKET if (c == 0x27EA) return TRUE; // MATHEMATICAL LEFT DOUBLE ANGLE BRACKET if (c == 0x27EB) return TRUE; // MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET if (c == 0x27EC) return TRUE; // MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET if (c == 0x27ED) return TRUE; // MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET if (c == 0x27EE) return TRUE; // MATHEMATICAL LEFT FLATTENED PARENTHESIS if (c == 0x27EF) return TRUE; // MATHEMATICAL RIGHT FLATTENED PARENTHESIS if (c == 0x2983) return TRUE; // LEFT WHITE CURLY BRACKET if (c == 0x2984) return TRUE; // RIGHT WHITE CURLY BRACKET if (c == 0x2985) return TRUE; // LEFT WHITE PARENTHESIS if (c == 0x2986) return TRUE; // RIGHT WHITE PARENTHESIS if (c == 0x2987) return TRUE; // Z NOTATION LEFT IMAGE BRACKET if (c == 0x2988) return TRUE; // Z NOTATION RIGHT IMAGE BRACKET if (c == 0x2989) return TRUE; // Z NOTATION LEFT BINDING BRACKET if (c == 0x298A) return TRUE; // Z NOTATION RIGHT BINDING BRACKET if (c == 0x298B) return TRUE; // LEFT SQUARE BRACKET WITH UNDERBAR if (c == 0x298C) return TRUE; // RIGHT SQUARE BRACKET WITH UNDERBAR if (c == 0x298D) return TRUE; // LEFT SQUARE BRACKET WITH TICK IN TOP CORNER if (c == 0x298E) return TRUE; // RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER if (c == 0x298F) return TRUE; // LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER if (c == 0x2990) return TRUE; // RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER if (c == 0x2991) return TRUE; // LEFT ANGLE BRACKET WITH DOT if (c == 0x2992) return TRUE; // RIGHT ANGLE BRACKET WITH DOT if (c == 0x2993) return TRUE; // LEFT ARC LESS-THAN BRACKET if (c == 0x2994) return TRUE; // RIGHT ARC GREATER-THAN BRACKET if (c == 0x2995) return TRUE; // DOUBLE LEFT ARC GREATER-THAN BRACKET if (c == 0x2996) return TRUE; // DOUBLE RIGHT ARC LESS-THAN BRACKET if (c == 0x2997) return TRUE; // LEFT BLACK TORTOISE SHELL BRACKET if (c == 0x2998) return TRUE; // RIGHT BLACK TORTOISE SHELL BRACKET if (c == 0x29D8) return TRUE; // LEFT WIGGLY FENCE if (c == 0x29D9) return TRUE; // RIGHT WIGGLY FENCE if (c == 0x29DA) return TRUE; // LEFT DOUBLE WIGGLY FENCE if (c == 0x29DB) return TRUE; // RIGHT DOUBLE WIGGLY FENCE if (c == 0x29FC) return TRUE; // LEFT-POINTING CURVED ANGLE BRACKET if (c == 0x29FD) return TRUE; // RIGHT-POINTING CURVED ANGLE BRACKET if (c == 0x2CF9) return TRUE; // COPTIC OLD NUBIAN FULL STOP if (c == 0x2CFA) return TRUE; // COPTIC OLD NUBIAN DIRECT QUESTION MARK if (c == 0x2CFB) return TRUE; // COPTIC OLD NUBIAN INDIRECT QUESTION MARK if (c == 0x2CFC) return TRUE; // COPTIC OLD NUBIAN VERSE DIVIDER if (c == 0x2CFE) return TRUE; // COPTIC FULL STOP if (c == 0x2CFF) return TRUE; // COPTIC MORPHOLOGICAL DIVIDER if (c == 0x2D70) return TRUE; // TIFINAGH SEPARATOR MARK if (c == 0x2E00) return TRUE; // RIGHT ANGLE SUBSTITUTION MARKER if (c == 0x2E01) return TRUE; // RIGHT ANGLE DOTTED SUBSTITUTION MARKER if (c == 0x2E02) return TRUE; // LEFT SUBSTITUTION BRACKET if (c == 0x2E03) return TRUE; // RIGHT SUBSTITUTION BRACKET if (c == 0x2E04) return TRUE; // LEFT DOTTED SUBSTITUTION BRACKET if (c == 0x2E05) return TRUE; // RIGHT DOTTED SUBSTITUTION BRACKET if (c == 0x2E06) return TRUE; // RAISED INTERPOLATION MARKER if (c == 0x2E07) return TRUE; // RAISED DOTTED INTERPOLATION MARKER if (c == 0x2E08) return TRUE; // DOTTED TRANSPOSITION MARKER if (c == 0x2E09) return TRUE; // LEFT TRANSPOSITION BRACKET if (c == 0x2E0A) return TRUE; // RIGHT TRANSPOSITION BRACKET if (c == 0x2E0B) return TRUE; // RAISED SQUARE if (c == 0x2E0C) return TRUE; // LEFT RAISED OMISSION BRACKET if (c == 0x2E0D) return TRUE; // RIGHT RAISED OMISSION BRACKET if (c == 0x2E0E) return TRUE; // EDITORIAL CORONIS if (c == 0x2E0F) return TRUE; // PARAGRAPHOS if (c == 0x2E10) return TRUE; // FORKED PARAGRAPHOS if (c == 0x2E11) return TRUE; // REVERSED FORKED PARAGRAPHOS if (c == 0x2E12) return TRUE; // HYPODIASTOLE if (c == 0x2E13) return TRUE; // DOTTED OBELOS if (c == 0x2E14) return TRUE; // DOWNWARDS ANCORA if (c == 0x2E15) return TRUE; // UPWARDS ANCORA if (c == 0x2E16) return TRUE; // DOTTED RIGHT-POINTING ANGLE if (c == 0x2E17) return TRUE; // DOUBLE OBLIQUE HYPHEN if (c == 0x2E18) return TRUE; // INVERTED INTERROBANG if (c == 0x2E19) return TRUE; // PALM BRANCH if (c == 0x2E1A) return TRUE; // HYPHEN WITH DIAERESIS if (c == 0x2E1B) return TRUE; // TILDE WITH RING ABOVE if (c == 0x2E1C) return TRUE; // LEFT LOW PARAPHRASE BRACKET if (c == 0x2E1D) return TRUE; // RIGHT LOW PARAPHRASE BRACKET if (c == 0x2E1E) return TRUE; // TILDE WITH DOT ABOVE if (c == 0x2E1F) return TRUE; // TILDE WITH DOT BELOW if (c == 0x2E20) return TRUE; // LEFT VERTICAL BAR WITH QUILL if (c == 0x2E21) return TRUE; // RIGHT VERTICAL BAR WITH QUILL if (c == 0x2E22) return TRUE; // TOP LEFT HALF BRACKET if (c == 0x2E23) return TRUE; // TOP RIGHT HALF BRACKET if (c == 0x2E24) return TRUE; // BOTTOM LEFT HALF BRACKET if (c == 0x2E25) return TRUE; // BOTTOM RIGHT HALF BRACKET if (c == 0x2E26) return TRUE; // LEFT SIDEWAYS U BRACKET if (c == 0x2E27) return TRUE; // RIGHT SIDEWAYS U BRACKET if (c == 0x2E28) return TRUE; // LEFT DOUBLE PARENTHESIS if (c == 0x2E29) return TRUE; // RIGHT DOUBLE PARENTHESIS if (c == 0x2E2A) return TRUE; // TWO DOTS OVER ONE DOT PUNCTUATION if (c == 0x2E2B) return TRUE; // ONE DOT OVER TWO DOTS PUNCTUATION if (c == 0x2E2C) return TRUE; // SQUARED FOUR DOT PUNCTUATION if (c == 0x2E2D) return TRUE; // FIVE DOT MARK if (c == 0x2E2E) return TRUE; // REVERSED QUESTION MARK if (c == 0x2E30) return TRUE; // RING POINT if (c == 0x2E31) return TRUE; // WORD SEPARATOR MIDDLE DOT if (c == 0x2E32) return TRUE; // TURNED COMMA if (c == 0x2E33) return TRUE; // RAISED DOT if (c == 0x2E34) return TRUE; // RAISED COMMA if (c == 0x2E35) return TRUE; // TURNED SEMICOLON if (c == 0x2E36) return TRUE; // DAGGER WITH LEFT GUARD if (c == 0x2E37) return TRUE; // DAGGER WITH RIGHT GUARD if (c == 0x2E38) return TRUE; // TURNED DAGGER if (c == 0x2E39) return TRUE; // TOP HALF SECTION SIGN if (c == 0x2E3A) return TRUE; // TWO-EM DASH if (c == 0x2E3B) return TRUE; // THREE-EM DASH if (c == 0x2E3C) return TRUE; // STENOGRAPHIC FULL STOP if (c == 0x2E3D) return TRUE; // VERTICAL SIX DOTS if (c == 0x2E3E) return TRUE; // WIGGLY VERTICAL LINE if (c == 0x2E3F) return TRUE; // CAPITULUM if (c == 0x2E40) return TRUE; // DOUBLE HYPHEN if (c == 0x2E41) return TRUE; // REVERSED COMMA if (c == 0x2E42) return TRUE; // DOUBLE LOW-REVERSED-9 QUOTATION MARK if (c == 0x2E43) return TRUE; // DASH WITH LEFT UPTURN if (c == 0x2E44) return TRUE; // DOUBLE SUSPENSION MARK if (c == 0x2E45) return TRUE; // INVERTED LOW KAVYKA if (c == 0x2E46) return TRUE; // INVERTED LOW KAVYKA WITH KAVYKA ABOVE if (c == 0x2E47) return TRUE; // LOW KAVYKA if (c == 0x2E48) return TRUE; // LOW KAVYKA WITH DOT if (c == 0x2E49) return TRUE; // DOUBLE STACKED COMMA if (c == 0x2E4A) return TRUE; // DOTTED SOLIDUS if (c == 0x2E4B) return TRUE; // TRIPLE DAGGER if (c == 0x2E4C) return TRUE; // MEDIEVAL COMMA if (c == 0x2E4D) return TRUE; // PARAGRAPHUS MARK if (c == 0x2E4E) return TRUE; // PUNCTUS ELEVATUS MARK if (c == 0x2E4F) return TRUE; // CORNISH VERSE DIVIDER if (c == 0x2E52) return TRUE; // TIRONIAN SIGN CAPITAL ET if (c == 0x2E53) return TRUE; // MEDIEVAL EXCLAMATION MARK if (c == 0x2E54) return TRUE; // MEDIEVAL QUESTION MARK if (c == 0x2E55) return TRUE; // LEFT SQUARE BRACKET WITH STROKE if (c == 0x2E56) return TRUE; // RIGHT SQUARE BRACKET WITH STROKE if (c == 0x2E57) return TRUE; // LEFT SQUARE BRACKET WITH DOUBLE STROKE if (c == 0x2E58) return TRUE; // RIGHT SQUARE BRACKET WITH DOUBLE STROKE if (c == 0x2E59) return TRUE; // TOP HALF LEFT PARENTHESIS if (c == 0x2E5A) return TRUE; // TOP HALF RIGHT PARENTHESIS if (c == 0x2E5B) return TRUE; // BOTTOM HALF LEFT PARENTHESIS if (c == 0x2E5C) return TRUE; // BOTTOM HALF RIGHT PARENTHESIS if (c == 0x2E5D) return TRUE; // OBLIQUE HYPHEN if (c == 0x3001) return TRUE; // IDEOGRAPHIC COMMA if (c == 0x3002) return TRUE; // IDEOGRAPHIC FULL STOP if (c == 0x3003) return TRUE; // DITTO MARK if (c == 0x3008) return TRUE; // LEFT ANGLE BRACKET if (c == 0x3009) return TRUE; // RIGHT ANGLE BRACKET if (c == 0x300A) return TRUE; // LEFT DOUBLE ANGLE BRACKET if (c == 0x300B) return TRUE; // RIGHT DOUBLE ANGLE BRACKET if (c == 0x300C) return TRUE; // LEFT CORNER BRACKET if (c == 0x300D) return TRUE; // RIGHT CORNER BRACKET if (c == 0x300E) return TRUE; // LEFT WHITE CORNER BRACKET if (c == 0x300F) return TRUE; // RIGHT WHITE CORNER BRACKET if (c == 0x3010) return TRUE; // LEFT BLACK LENTICULAR BRACKET if (c == 0x3011) return TRUE; // RIGHT BLACK LENTICULAR BRACKET if (c == 0x3014) return TRUE; // LEFT TORTOISE SHELL BRACKET if (c == 0x3015) return TRUE; // RIGHT TORTOISE SHELL BRACKET if (c == 0x3016) return TRUE; // LEFT WHITE LENTICULAR BRACKET if (c == 0x3017) return TRUE; // RIGHT WHITE LENTICULAR BRACKET if (c == 0x3018) return TRUE; // LEFT WHITE TORTOISE SHELL BRACKET if (c == 0x3019) return TRUE; // RIGHT WHITE TORTOISE SHELL BRACKET if (c == 0x301A) return TRUE; // LEFT WHITE SQUARE BRACKET if (c == 0x301B) return TRUE; // RIGHT WHITE SQUARE BRACKET if (c == 0x301C) return TRUE; // WAVE DASH if (c == 0x301D) return TRUE; // REVERSED DOUBLE PRIME QUOTATION MARK if (c == 0x301E) return TRUE; // DOUBLE PRIME QUOTATION MARK if (c == 0x301F) return TRUE; // LOW DOUBLE PRIME QUOTATION MARK if (c == 0x3030) return TRUE; // WAVY DASH if (c == 0x303D) return TRUE; // PART ALTERNATION MARK if (c == 0x30A0) return TRUE; // KATAKANA-HIRAGANA DOUBLE HYPHEN if (c == 0x30FB) return TRUE; // KATAKANA MIDDLE DOT if (c == 0xA4FE) return TRUE; // LISU PUNCTUATION COMMA if (c == 0xA4FF) return TRUE; // LISU PUNCTUATION FULL STOP if (c == 0xA60D) return TRUE; // VAI COMMA if (c == 0xA60E) return TRUE; // VAI FULL STOP if (c == 0xA60F) return TRUE; // VAI QUESTION MARK if (c == 0xA673) return TRUE; // SLAVONIC ASTERISK if (c == 0xA67E) return TRUE; // CYRILLIC KAVYKA if (c == 0xA6F2) return TRUE; // BAMUM NJAEMLI if (c == 0xA6F3) return TRUE; // BAMUM FULL STOP if (c == 0xA6F4) return TRUE; // BAMUM COLON if (c == 0xA6F5) return TRUE; // BAMUM COMMA if (c == 0xA6F6) return TRUE; // BAMUM SEMICOLON if (c == 0xA6F7) return TRUE; // BAMUM QUESTION MARK if (c == 0xA874) return TRUE; // PHAGS-PA SINGLE HEAD MARK if (c == 0xA875) return TRUE; // PHAGS-PA DOUBLE HEAD MARK if (c == 0xA876) return TRUE; // PHAGS-PA MARK SHAD if (c == 0xA877) return TRUE; // PHAGS-PA MARK DOUBLE SHAD if (c == 0xA8CE) return TRUE; // SAURASHTRA DANDA if (c == 0xA8CF) return TRUE; // SAURASHTRA DOUBLE DANDA if (c == 0xA8F8) return TRUE; // DEVANAGARI SIGN PUSHPIKA if (c == 0xA8F9) return TRUE; // DEVANAGARI GAP FILLER if (c == 0xA8FA) return TRUE; // DEVANAGARI CARET if (c == 0xA8FC) return TRUE; // DEVANAGARI SIGN SIDDHAM if (c == 0xA92E) return TRUE; // KAYAH LI SIGN CWI if (c == 0xA92F) return TRUE; // KAYAH LI SIGN SHYA if (c == 0xA95F) return TRUE; // REJANG SECTION MARK if (c == 0xA9C1) return TRUE; // JAVANESE LEFT RERENGGAN if (c == 0xA9C2) return TRUE; // JAVANESE RIGHT RERENGGAN if (c == 0xA9C3) return TRUE; // JAVANESE PADA ANDAP if (c == 0xA9C4) return TRUE; // JAVANESE PADA MADYA if (c == 0xA9C5) return TRUE; // JAVANESE PADA LUHUR if (c == 0xA9C6) return TRUE; // JAVANESE PADA WINDU if (c == 0xA9C7) return TRUE; // JAVANESE PADA PANGKAT if (c == 0xA9C8) return TRUE; // JAVANESE PADA LINGSA if (c == 0xA9C9) return TRUE; // JAVANESE PADA LUNGSI if (c == 0xA9CA) return TRUE; // JAVANESE PADA ADEG if (c == 0xA9CB) return TRUE; // JAVANESE PADA ADEG ADEG if (c == 0xA9CC) return TRUE; // JAVANESE PADA PISELEH if (c == 0xA9CD) return TRUE; // JAVANESE TURNED PADA PISELEH if (c == 0xA9DE) return TRUE; // JAVANESE PADA TIRTA TUMETES if (c == 0xA9DF) return TRUE; // JAVANESE PADA ISEN-ISEN if (c == 0xAA5C) return TRUE; // CHAM PUNCTUATION SPIRAL if (c == 0xAA5D) return TRUE; // CHAM PUNCTUATION DANDA if (c == 0xAA5E) return TRUE; // CHAM PUNCTUATION DOUBLE DANDA if (c == 0xAA5F) return TRUE; // CHAM PUNCTUATION TRIPLE DANDA if (c == 0xAADE) return TRUE; // TAI VIET SYMBOL HO HOI if (c == 0xAADF) return TRUE; // TAI VIET SYMBOL KOI KOI if (c == 0xAAF0) return TRUE; // MEETEI MAYEK CHEIKHAN if (c == 0xAAF1) return TRUE; // MEETEI MAYEK AHANG KHUDAM if (c == 0xABEB) return TRUE; // MEETEI MAYEK CHEIKHEI if (c == 0xFD3E) return TRUE; // ORNATE LEFT PARENTHESIS if (c == 0xFD3F) return TRUE; // ORNATE RIGHT PARENTHESIS if (c == 0xFE10) return TRUE; // PRESENTATION FORM FOR VERTICAL COMMA if (c == 0xFE11) return TRUE; // PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA if (c == 0xFE12) return TRUE; // PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP if (c == 0xFE13) return TRUE; // PRESENTATION FORM FOR VERTICAL COLON if (c == 0xFE14) return TRUE; // PRESENTATION FORM FOR VERTICAL SEMICOLON if (c == 0xFE15) return TRUE; // PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK if (c == 0xFE16) return TRUE; // PRESENTATION FORM FOR VERTICAL QUESTION MARK if (c == 0xFE17) return TRUE; // PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET if (c == 0xFE18) return TRUE; // PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET if (c == 0xFE19) return TRUE; // PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS if (c == 0xFE30) return TRUE; // PRESENTATION FORM FOR VERTICAL TWO DOT LEADER if (c == 0xFE31) return TRUE; // PRESENTATION FORM FOR VERTICAL EM DASH if (c == 0xFE32) return TRUE; // PRESENTATION FORM FOR VERTICAL EN DASH if (c == 0xFE33) return TRUE; // PRESENTATION FORM FOR VERTICAL LOW LINE if (c == 0xFE34) return TRUE; // PRESENTATION FORM FOR VERTICAL WAVY LOW LINE if (c == 0xFE35) return TRUE; // PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS if (c == 0xFE36) return TRUE; // PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS if (c == 0xFE37) return TRUE; // PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET if (c == 0xFE38) return TRUE; // PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET if (c == 0xFE39) return TRUE; // PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET if (c == 0xFE3A) return TRUE; // PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET if (c == 0xFE3B) return TRUE; // PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET if (c == 0xFE3C) return TRUE; // PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET if (c == 0xFE3D) return TRUE; // PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET if (c == 0xFE3E) return TRUE; // PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET if (c == 0xFE3F) return TRUE; // PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET if (c == 0xFE40) return TRUE; // PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET if (c == 0xFE41) return TRUE; // PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET if (c == 0xFE42) return TRUE; // PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET if (c == 0xFE43) return TRUE; // PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET if (c == 0xFE44) return TRUE; // PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET if (c == 0xFE45) return TRUE; // SESAME DOT if (c == 0xFE46) return TRUE; // WHITE SESAME DOT if (c == 0xFE47) return TRUE; // PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET if (c == 0xFE48) return TRUE; // PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET if (c == 0xFE49) return TRUE; // DASHED OVERLINE if (c == 0xFE4A) return TRUE; // CENTRELINE OVERLINE if (c == 0xFE4B) return TRUE; // WAVY OVERLINE if (c == 0xFE4C) return TRUE; // DOUBLE WAVY OVERLINE if (c == 0xFE4D) return TRUE; // DASHED LOW LINE if (c == 0xFE4E) return TRUE; // CENTRELINE LOW LINE if (c == 0xFE4F) return TRUE; // WAVY LOW LINE if (c == 0xFE50) return TRUE; // SMALL COMMA if (c == 0xFE51) return TRUE; // SMALL IDEOGRAPHIC COMMA if (c == 0xFE52) return TRUE; // SMALL FULL STOP if (c == 0xFE54) return TRUE; // SMALL SEMICOLON if (c == 0xFE55) return TRUE; // SMALL COLON if (c == 0xFE56) return TRUE; // SMALL QUESTION MARK if (c == 0xFE57) return TRUE; // SMALL EXCLAMATION MARK if (c == 0xFE58) return TRUE; // SMALL EM DASH if (c == 0xFE59) return TRUE; // SMALL LEFT PARENTHESIS if (c == 0xFE5A) return TRUE; // SMALL RIGHT PARENTHESIS if (c == 0xFE5B) return TRUE; // SMALL LEFT CURLY BRACKET if (c == 0xFE5C) return TRUE; // SMALL RIGHT CURLY BRACKET if (c == 0xFE5D) return TRUE; // SMALL LEFT TORTOISE SHELL BRACKET if (c == 0xFE5E) return TRUE; // SMALL RIGHT TORTOISE SHELL BRACKET if (c == 0xFE5F) return TRUE; // SMALL NUMBER SIGN if (c == 0xFE60) return TRUE; // SMALL AMPERSAND if (c == 0xFE61) return TRUE; // SMALL ASTERISK if (c == 0xFE63) return TRUE; // SMALL HYPHEN-MINUS if (c == 0xFE68) return TRUE; // SMALL REVERSE SOLIDUS if (c == 0xFE6A) return TRUE; // SMALL PERCENT SIGN if (c == 0xFE6B) return TRUE; // SMALL COMMERCIAL AT if (c == 0xFF01) return TRUE; // FULLWIDTH EXCLAMATION MARK if (c == 0xFF02) return TRUE; // FULLWIDTH QUOTATION MARK if (c == 0xFF03) return TRUE; // FULLWIDTH NUMBER SIGN if (c == 0xFF05) return TRUE; // FULLWIDTH PERCENT SIGN if (c == 0xFF06) return TRUE; // FULLWIDTH AMPERSAND if (c == 0xFF07) return TRUE; // FULLWIDTH APOSTROPHE if (c == 0xFF08) return TRUE; // FULLWIDTH LEFT PARENTHESIS if (c == 0xFF09) return TRUE; // FULLWIDTH RIGHT PARENTHESIS if (c == 0xFF0A) return TRUE; // FULLWIDTH ASTERISK if (c == 0xFF0C) return TRUE; // FULLWIDTH COMMA if (c == 0xFF0D) return TRUE; // FULLWIDTH HYPHEN-MINUS if (c == 0xFF0E) return TRUE; // FULLWIDTH FULL STOP if (c == 0xFF0F) return TRUE; // FULLWIDTH SOLIDUS if (c == 0xFF1A) return TRUE; // FULLWIDTH COLON if (c == 0xFF1B) return TRUE; // FULLWIDTH SEMICOLON if (c == 0xFF1F) return TRUE; // FULLWIDTH QUESTION MARK if (c == 0xFF20) return TRUE; // FULLWIDTH COMMERCIAL AT if (c == 0xFF3B) return TRUE; // FULLWIDTH LEFT SQUARE BRACKET if (c == 0xFF3C) return TRUE; // FULLWIDTH REVERSE SOLIDUS if (c == 0xFF3D) return TRUE; // FULLWIDTH RIGHT SQUARE BRACKET if (c == 0xFF3F) return TRUE; // FULLWIDTH LOW LINE if (c == 0xFF5B) return TRUE; // FULLWIDTH LEFT CURLY BRACKET if (c == 0xFF5D) return TRUE; // FULLWIDTH RIGHT CURLY BRACKET if (c == 0xFF5F) return TRUE; // FULLWIDTH LEFT WHITE PARENTHESIS if (c == 0xFF60) return TRUE; // FULLWIDTH RIGHT WHITE PARENTHESIS if (c == 0xFF61) return TRUE; // HALFWIDTH IDEOGRAPHIC FULL STOP if (c == 0xFF62) return TRUE; // HALFWIDTH LEFT CORNER BRACKET if (c == 0xFF63) return TRUE; // HALFWIDTH RIGHT CORNER BRACKET if (c == 0xFF64) return TRUE; // HALFWIDTH IDEOGRAPHIC COMMA if (c == 0xFF65) return TRUE; // HALFWIDTH KATAKANA MIDDLE DOT if (c == 0x10100) return TRUE; // AEGEAN WORD SEPARATOR LINE if (c == 0x10101) return TRUE; // AEGEAN WORD SEPARATOR DOT if (c == 0x10102) return TRUE; // AEGEAN CHECK MARK if (c == 0x1039F) return TRUE; // UGARITIC WORD DIVIDER if (c == 0x103D0) return TRUE; // OLD PERSIAN WORD DIVIDER if (c == 0x1056F) return TRUE; // CAUCASIAN ALBANIAN CITATION MARK if (c == 0x10857) return TRUE; // IMPERIAL ARAMAIC SECTION SIGN if (c == 0x1091F) return TRUE; // PHOENICIAN WORD SEPARATOR if (c == 0x1093F) return TRUE; // LYDIAN TRIANGULAR MARK if (c == 0x10A50) return TRUE; // KHAROSHTHI PUNCTUATION DOT if (c == 0x10A51) return TRUE; // KHAROSHTHI PUNCTUATION SMALL CIRCLE if (c == 0x10A52) return TRUE; // KHAROSHTHI PUNCTUATION CIRCLE if (c == 0x10A53) return TRUE; // KHAROSHTHI PUNCTUATION CRESCENT BAR if (c == 0x10A54) return TRUE; // KHAROSHTHI PUNCTUATION MANGALAM if (c == 0x10A55) return TRUE; // KHAROSHTHI PUNCTUATION LOTUS if (c == 0x10A56) return TRUE; // KHAROSHTHI PUNCTUATION DANDA if (c == 0x10A57) return TRUE; // KHAROSHTHI PUNCTUATION DOUBLE DANDA if (c == 0x10A58) return TRUE; // KHAROSHTHI PUNCTUATION LINES if (c == 0x10A7F) return TRUE; // OLD SOUTH ARABIAN NUMERIC INDICATOR if (c == 0x10AF0) return TRUE; // MANICHAEAN PUNCTUATION STAR if (c == 0x10AF1) return TRUE; // MANICHAEAN PUNCTUATION FLEURON if (c == 0x10AF2) return TRUE; // MANICHAEAN PUNCTUATION DOUBLE DOT WITHIN DOT if (c == 0x10AF3) return TRUE; // MANICHAEAN PUNCTUATION DOT WITHIN DOT if (c == 0x10AF4) return TRUE; // MANICHAEAN PUNCTUATION DOT if (c == 0x10AF5) return TRUE; // MANICHAEAN PUNCTUATION TWO DOTS if (c == 0x10AF6) return TRUE; // MANICHAEAN PUNCTUATION LINE FILLER if (c == 0x10B39) return TRUE; // AVESTAN ABBREVIATION MARK if (c == 0x10B3A) return TRUE; // TINY TWO DOTS OVER ONE DOT PUNCTUATION if (c == 0x10B3B) return TRUE; // SMALL TWO DOTS OVER ONE DOT PUNCTUATION if (c == 0x10B3C) return TRUE; // LARGE TWO DOTS OVER ONE DOT PUNCTUATION if (c == 0x10B3D) return TRUE; // LARGE ONE DOT OVER TWO DOTS PUNCTUATION if (c == 0x10B3E) return TRUE; // LARGE TWO RINGS OVER ONE RING PUNCTUATION if (c == 0x10B3F) return TRUE; // LARGE ONE RING OVER TWO RINGS PUNCTUATION if (c == 0x10B99) return TRUE; // PSALTER PAHLAVI SECTION MARK if (c == 0x10B9A) return TRUE; // PSALTER PAHLAVI TURNED SECTION MARK if (c == 0x10B9B) return TRUE; // PSALTER PAHLAVI FOUR DOTS WITH CROSS if (c == 0x10B9C) return TRUE; // PSALTER PAHLAVI FOUR DOTS WITH DOT if (c == 0x10EAD) return TRUE; // YEZIDI HYPHENATION MARK if (c == 0x10F55) return TRUE; // SOGDIAN PUNCTUATION TWO VERTICAL BARS if (c == 0x10F56) return TRUE; // SOGDIAN PUNCTUATION TWO VERTICAL BARS WITH DOTS if (c == 0x10F57) return TRUE; // SOGDIAN PUNCTUATION CIRCLE WITH DOT if (c == 0x10F58) return TRUE; // SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS if (c == 0x10F59) return TRUE; // SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT if (c == 0x10F86) return TRUE; // OLD UYGHUR PUNCTUATION BAR if (c == 0x10F87) return TRUE; // OLD UYGHUR PUNCTUATION TWO BARS if (c == 0x10F88) return TRUE; // OLD UYGHUR PUNCTUATION TWO DOTS if (c == 0x10F89) return TRUE; // OLD UYGHUR PUNCTUATION FOUR DOTS if (c == 0x11047) return TRUE; // BRAHMI DANDA if (c == 0x11048) return TRUE; // BRAHMI DOUBLE DANDA if (c == 0x11049) return TRUE; // BRAHMI PUNCTUATION DOT if (c == 0x1104A) return TRUE; // BRAHMI PUNCTUATION DOUBLE DOT if (c == 0x1104B) return TRUE; // BRAHMI PUNCTUATION LINE if (c == 0x1104C) return TRUE; // BRAHMI PUNCTUATION CRESCENT BAR if (c == 0x1104D) return TRUE; // BRAHMI PUNCTUATION LOTUS if (c == 0x110BB) return TRUE; // KAITHI ABBREVIATION SIGN if (c == 0x110BC) return TRUE; // KAITHI ENUMERATION SIGN if (c == 0x110BE) return TRUE; // KAITHI SECTION MARK if (c == 0x110BF) return TRUE; // KAITHI DOUBLE SECTION MARK if (c == 0x110C0) return TRUE; // KAITHI DANDA if (c == 0x110C1) return TRUE; // KAITHI DOUBLE DANDA if (c == 0x11140) return TRUE; // CHAKMA SECTION MARK if (c == 0x11141) return TRUE; // CHAKMA DANDA if (c == 0x11142) return TRUE; // CHAKMA DOUBLE DANDA if (c == 0x11143) return TRUE; // CHAKMA QUESTION MARK if (c == 0x11174) return TRUE; // MAHAJANI ABBREVIATION SIGN if (c == 0x11175) return TRUE; // MAHAJANI SECTION MARK if (c == 0x111C5) return TRUE; // SHARADA DANDA if (c == 0x111C6) return TRUE; // SHARADA DOUBLE DANDA if (c == 0x111C7) return TRUE; // SHARADA ABBREVIATION SIGN if (c == 0x111C8) return TRUE; // SHARADA SEPARATOR if (c == 0x111CD) return TRUE; // SHARADA SUTRA MARK if (c == 0x111DB) return TRUE; // SHARADA SIGN SIDDHAM if (c == 0x111DD) return TRUE; // SHARADA CONTINUATION SIGN if (c == 0x111DE) return TRUE; // SHARADA SECTION MARK-1 if (c == 0x111DF) return TRUE; // SHARADA SECTION MARK-2 if (c == 0x11238) return TRUE; // KHOJKI DANDA if (c == 0x11239) return TRUE; // KHOJKI DOUBLE DANDA if (c == 0x1123A) return TRUE; // KHOJKI WORD SEPARATOR if (c == 0x1123B) return TRUE; // KHOJKI SECTION MARK if (c == 0x1123C) return TRUE; // KHOJKI DOUBLE SECTION MARK if (c == 0x1123D) return TRUE; // KHOJKI ABBREVIATION SIGN if (c == 0x112A9) return TRUE; // MULTANI SECTION MARK if (c == 0x1144B) return TRUE; // NEWA DANDA if (c == 0x1144C) return TRUE; // NEWA DOUBLE DANDA if (c == 0x1144D) return TRUE; // NEWA COMMA if (c == 0x1144E) return TRUE; // NEWA GAP FILLER if (c == 0x1144F) return TRUE; // NEWA ABBREVIATION SIGN if (c == 0x1145A) return TRUE; // NEWA DOUBLE COMMA if (c == 0x1145B) return TRUE; // NEWA PLACEHOLDER MARK if (c == 0x1145D) return TRUE; // NEWA INSERTION SIGN if (c == 0x114C6) return TRUE; // TIRHUTA ABBREVIATION SIGN if (c == 0x115C1) return TRUE; // SIDDHAM SIGN SIDDHAM if (c == 0x115C2) return TRUE; // SIDDHAM DANDA if (c == 0x115C3) return TRUE; // SIDDHAM DOUBLE DANDA if (c == 0x115C4) return TRUE; // SIDDHAM SEPARATOR DOT if (c == 0x115C5) return TRUE; // SIDDHAM SEPARATOR BAR if (c == 0x115C6) return TRUE; // SIDDHAM REPETITION MARK-1 if (c == 0x115C7) return TRUE; // SIDDHAM REPETITION MARK-2 if (c == 0x115C8) return TRUE; // SIDDHAM REPETITION MARK-3 if (c == 0x115C9) return TRUE; // SIDDHAM END OF TEXT MARK if (c == 0x115CA) return TRUE; // SIDDHAM SECTION MARK WITH TRIDENT AND U-SHAPED ORNAMENTS if (c == 0x115CB) return TRUE; // SIDDHAM SECTION MARK WITH TRIDENT AND DOTTED CRESCENTS if (c == 0x115CC) return TRUE; // SIDDHAM SECTION MARK WITH RAYS AND DOTTED CRESCENTS if (c == 0x115CD) return TRUE; // SIDDHAM SECTION MARK WITH RAYS AND DOTTED DOUBLE CRESCENTS if (c == 0x115CE) return TRUE; // SIDDHAM SECTION MARK WITH RAYS AND DOTTED TRIPLE CRESCENTS if (c == 0x115CF) return TRUE; // SIDDHAM SECTION MARK DOUBLE RING if (c == 0x115D0) return TRUE; // SIDDHAM SECTION MARK DOUBLE RING WITH RAYS if (c == 0x115D1) return TRUE; // SIDDHAM SECTION MARK WITH DOUBLE CRESCENTS if (c == 0x115D2) return TRUE; // SIDDHAM SECTION MARK WITH TRIPLE CRESCENTS if (c == 0x115D3) return TRUE; // SIDDHAM SECTION MARK WITH QUADRUPLE CRESCENTS if (c == 0x115D4) return TRUE; // SIDDHAM SECTION MARK WITH SEPTUPLE CRESCENTS if (c == 0x115D5) return TRUE; // SIDDHAM SECTION MARK WITH CIRCLES AND RAYS if (c == 0x115D6) return TRUE; // SIDDHAM SECTION MARK WITH CIRCLES AND TWO ENCLOSURES if (c == 0x115D7) return TRUE; // SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES if (c == 0x11641) return TRUE; // MODI DANDA if (c == 0x11642) return TRUE; // MODI DOUBLE DANDA if (c == 0x11643) return TRUE; // MODI ABBREVIATION SIGN if (c == 0x11660) return TRUE; // MONGOLIAN BIRGA WITH ORNAMENT if (c == 0x11661) return TRUE; // MONGOLIAN ROTATED BIRGA if (c == 0x11662) return TRUE; // MONGOLIAN DOUBLE BIRGA WITH ORNAMENT if (c == 0x11663) return TRUE; // MONGOLIAN TRIPLE BIRGA WITH ORNAMENT if (c == 0x11664) return TRUE; // MONGOLIAN BIRGA WITH DOUBLE ORNAMENT if (c == 0x11665) return TRUE; // MONGOLIAN ROTATED BIRGA WITH ORNAMENT if (c == 0x11666) return TRUE; // MONGOLIAN ROTATED BIRGA WITH DOUBLE ORNAMENT if (c == 0x11667) return TRUE; // MONGOLIAN INVERTED BIRGA if (c == 0x11668) return TRUE; // MONGOLIAN INVERTED BIRGA WITH DOUBLE ORNAMENT if (c == 0x11669) return TRUE; // MONGOLIAN SWIRL BIRGA if (c == 0x1166A) return TRUE; // MONGOLIAN SWIRL BIRGA WITH ORNAMENT if (c == 0x1166B) return TRUE; // MONGOLIAN SWIRL BIRGA WITH DOUBLE ORNAMENT if (c == 0x1166C) return TRUE; // MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT if (c == 0x116B9) return TRUE; // TAKRI ABBREVIATION SIGN if (c == 0x1173C) return TRUE; // AHOM SIGN SMALL SECTION if (c == 0x1173D) return TRUE; // AHOM SIGN SECTION if (c == 0x1173E) return TRUE; // AHOM SIGN RULAI if (c == 0x1183B) return TRUE; // DOGRA ABBREVIATION SIGN if (c == 0x11944) return TRUE; // DIVES AKURU DOUBLE DANDA if (c == 0x11945) return TRUE; // DIVES AKURU GAP FILLER if (c == 0x11946) return TRUE; // DIVES AKURU END OF TEXT MARK if (c == 0x119E2) return TRUE; // NANDINAGARI SIGN SIDDHAM if (c == 0x11A3F) return TRUE; // ZANABAZAR SQUARE INITIAL HEAD MARK if (c == 0x11A40) return TRUE; // ZANABAZAR SQUARE CLOSING HEAD MARK if (c == 0x11A41) return TRUE; // ZANABAZAR SQUARE MARK TSHEG if (c == 0x11A42) return TRUE; // ZANABAZAR SQUARE MARK SHAD if (c == 0x11A43) return TRUE; // ZANABAZAR SQUARE MARK DOUBLE SHAD if (c == 0x11A44) return TRUE; // ZANABAZAR SQUARE MARK LONG TSHEG if (c == 0x11A45) return TRUE; // ZANABAZAR SQUARE INITIAL DOUBLE-LINED HEAD MARK if (c == 0x11A46) return TRUE; // ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK if (c == 0x11A9A) return TRUE; // SOYOMBO MARK TSHEG if (c == 0x11A9B) return TRUE; // SOYOMBO MARK SHAD if (c == 0x11A9C) return TRUE; // SOYOMBO MARK DOUBLE SHAD if (c == 0x11A9E) return TRUE; // SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME if (c == 0x11A9F) return TRUE; // SOYOMBO HEAD MARK WITH MOON AND SUN AND FLAME if (c == 0x11AA0) return TRUE; // SOYOMBO HEAD MARK WITH MOON AND SUN if (c == 0x11AA1) return TRUE; // SOYOMBO TERMINAL MARK-1 if (c == 0x11AA2) return TRUE; // SOYOMBO TERMINAL MARK-2 if (c == 0x11B00) return TRUE; // DEVANAGARI HEAD MARK if (c == 0x11B01) return TRUE; // DEVANAGARI HEAD MARK WITH HEADSTROKE if (c == 0x11B02) return TRUE; // DEVANAGARI SIGN BHALE if (c == 0x11B03) return TRUE; // DEVANAGARI SIGN BHALE WITH HOOK if (c == 0x11B04) return TRUE; // DEVANAGARI SIGN EXTENDED BHALE if (c == 0x11B05) return TRUE; // DEVANAGARI SIGN EXTENDED BHALE WITH HOOK if (c == 0x11B06) return TRUE; // DEVANAGARI SIGN WESTERN FIVE-LIKE BHALE if (c == 0x11B07) return TRUE; // DEVANAGARI SIGN WESTERN NINE-LIKE BHALE if (c == 0x11B08) return TRUE; // DEVANAGARI SIGN REVERSED NINE-LIKE BHALE if (c == 0x11B09) return TRUE; // DEVANAGARI SIGN MINDU if (c == 0x11C41) return TRUE; // BHAIKSUKI DANDA if (c == 0x11C42) return TRUE; // BHAIKSUKI DOUBLE DANDA if (c == 0x11C43) return TRUE; // BHAIKSUKI WORD SEPARATOR if (c == 0x11C44) return TRUE; // BHAIKSUKI GAP FILLER-1 if (c == 0x11C45) return TRUE; // BHAIKSUKI GAP FILLER-2 if (c == 0x11C70) return TRUE; // MARCHEN HEAD MARK if (c == 0x11C71) return TRUE; // MARCHEN MARK SHAD if (c == 0x11EF7) return TRUE; // MAKASAR PASSIMBANG if (c == 0x11EF8) return TRUE; // MAKASAR END OF SECTION if (c == 0x11F43) return TRUE; // KAWI DANDA if (c == 0x11F44) return TRUE; // KAWI DOUBLE DANDA if (c == 0x11F45) return TRUE; // KAWI PUNCTUATION SECTION MARKER if (c == 0x11F46) return TRUE; // KAWI PUNCTUATION ALTERNATE SECTION MARKER if (c == 0x11F47) return TRUE; // KAWI PUNCTUATION FLOWER if (c == 0x11F48) return TRUE; // KAWI PUNCTUATION SPACE FILLER if (c == 0x11F49) return TRUE; // KAWI PUNCTUATION DOT if (c == 0x11F4A) return TRUE; // KAWI PUNCTUATION DOUBLE DOT if (c == 0x11F4B) return TRUE; // KAWI PUNCTUATION TRIPLE DOT if (c == 0x11F4C) return TRUE; // KAWI PUNCTUATION CIRCLE if (c == 0x11F4D) return TRUE; // KAWI PUNCTUATION FILLED CIRCLE if (c == 0x11F4E) return TRUE; // KAWI PUNCTUATION SPIRAL if (c == 0x11F4F) return TRUE; // KAWI PUNCTUATION CLOSING SPIRAL if (c == 0x11FFF) return TRUE; // TAMIL PUNCTUATION END OF TEXT if (c == 0x12470) return TRUE; // CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER if (c == 0x12471) return TRUE; // CUNEIFORM PUNCTUATION SIGN VERTICAL COLON if (c == 0x12472) return TRUE; // CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON if (c == 0x12473) return TRUE; // CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON if (c == 0x12474) return TRUE; // CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON if (c == 0x12FF1) return TRUE; // CYPRO-MINOAN SIGN CM301 if (c == 0x12FF2) return TRUE; // CYPRO-MINOAN SIGN CM302 if (c == 0x16A6E) return TRUE; // MRO DANDA if (c == 0x16A6F) return TRUE; // MRO DOUBLE DANDA if (c == 0x16AF5) return TRUE; // BASSA VAH FULL STOP if (c == 0x16B37) return TRUE; // PAHAWH HMONG SIGN VOS THOM if (c == 0x16B38) return TRUE; // PAHAWH HMONG SIGN VOS TSHAB CEEB if (c == 0x16B39) return TRUE; // PAHAWH HMONG SIGN CIM CHEEM if (c == 0x16B3A) return TRUE; // PAHAWH HMONG SIGN VOS THIAB if (c == 0x16B3B) return TRUE; // PAHAWH HMONG SIGN VOS FEEM if (c == 0x16B44) return TRUE; // PAHAWH HMONG SIGN XAUS if (c == 0x16E97) return TRUE; // MEDEFAIDRIN COMMA if (c == 0x16E98) return TRUE; // MEDEFAIDRIN FULL STOP if (c == 0x16E99) return TRUE; // MEDEFAIDRIN SYMBOL AIVA if (c == 0x16E9A) return TRUE; // MEDEFAIDRIN EXCLAMATION OH if (c == 0x16FE2) return TRUE; // OLD CHINESE HOOK MARK if (c == 0x1BC9F) return TRUE; // DUPLOYAN PUNCTUATION CHINOOK FULL STOP if (c == 0x1DA87) return TRUE; // SIGNWRITING COMMA if (c == 0x1DA88) return TRUE; // SIGNWRITING FULL STOP if (c == 0x1DA89) return TRUE; // SIGNWRITING SEMICOLON if (c == 0x1DA8A) return TRUE; // SIGNWRITING COLON if (c == 0x1DA8B) return TRUE; // SIGNWRITING PARENTHESIS if (c == 0x1E95E) return TRUE; // ADLAM INITIAL EXCLAMATION MARK if (c == 0x1E95F) return TRUE; // ADLAM INITIAL QUESTION MARK return FALSE; }
§7. Another epic, mechanically written function, performs the full case folding
defined by Unicode 15.0, turning c into a run of up to four characters
representing its canonical upper-case form.
void Characters::full_Unicode_fold(inchar32_t c, inchar32_t *F) { F[1] = 0; F[2] = 0; F[3] = 0; if (c < 0x0100) { if ((c >= 0x0041) && (c <= 0x005A)) { F[0] = 0x0061 + (c - 0x0041); return; } /* LATIN CAPITAL LETTER A to LATIN CAPITAL LETTER Z */ if (c == 0x00B5) { F[0] = 0x03BC; return; } /* MICRO SIGN */ if ((c >= 0x00C0) && (c <= 0x00D6)) { F[0] = 0x00E0 + (c - 0x00C0); return; } /* LATIN CAPITAL LETTER A WITH GRAVE to LATIN CAPITAL LETTER O WITH DIAERESIS */ if ((c >= 0x00D8) && (c <= 0x00DE)) { F[0] = 0x00F8 + (c - 0x00D8); return; } /* LATIN CAPITAL LETTER O WITH STROKE to LATIN CAPITAL LETTER THORN */ if (c == 0x00DF) { F[0] = 0x0073; F[1] = 0x0073; return; } /* LATIN SMALL LETTER SHARP S */ } else if ((c >= 0x0100) && (c < 0x0200)) { if (c == 0x0100) { F[0] = 0x0101; return; } /* LATIN CAPITAL LETTER A WITH MACRON */ if (c == 0x0102) { F[0] = 0x0103; return; } /* LATIN CAPITAL LETTER A WITH BREVE */ if (c == 0x0104) { F[0] = 0x0105; return; } /* LATIN CAPITAL LETTER A WITH OGONEK */ if (c == 0x0106) { F[0] = 0x0107; return; } /* LATIN CAPITAL LETTER C WITH ACUTE */ if (c == 0x0108) { F[0] = 0x0109; return; } /* LATIN CAPITAL LETTER C WITH CIRCUMFLEX */ if (c == 0x010A) { F[0] = 0x010B; return; } /* LATIN CAPITAL LETTER C WITH DOT ABOVE */ if (c == 0x010C) { F[0] = 0x010D; return; } /* LATIN CAPITAL LETTER C WITH CARON */ if (c == 0x010E) { F[0] = 0x010F; return; } /* LATIN CAPITAL LETTER D WITH CARON */ if (c == 0x0110) { F[0] = 0x0111; return; } /* LATIN CAPITAL LETTER D WITH STROKE */ if (c == 0x0112) { F[0] = 0x0113; return; } /* LATIN CAPITAL LETTER E WITH MACRON */ if (c == 0x0114) { F[0] = 0x0115; return; } /* LATIN CAPITAL LETTER E WITH BREVE */ if (c == 0x0116) { F[0] = 0x0117; return; } /* LATIN CAPITAL LETTER E WITH DOT ABOVE */ if (c == 0x0118) { F[0] = 0x0119; return; } /* LATIN CAPITAL LETTER E WITH OGONEK */ if (c == 0x011A) { F[0] = 0x011B; return; } /* LATIN CAPITAL LETTER E WITH CARON */ if (c == 0x011C) { F[0] = 0x011D; return; } /* LATIN CAPITAL LETTER G WITH CIRCUMFLEX */ if (c == 0x011E) { F[0] = 0x011F; return; } /* LATIN CAPITAL LETTER G WITH BREVE */ if (c == 0x0120) { F[0] = 0x0121; return; } /* LATIN CAPITAL LETTER G WITH DOT ABOVE */ if (c == 0x0122) { F[0] = 0x0123; return; } /* LATIN CAPITAL LETTER G WITH CEDILLA */ if (c == 0x0124) { F[0] = 0x0125; return; } /* LATIN CAPITAL LETTER H WITH CIRCUMFLEX */ if (c == 0x0126) { F[0] = 0x0127; return; } /* LATIN CAPITAL LETTER H WITH STROKE */ if (c == 0x0128) { F[0] = 0x0129; return; } /* LATIN CAPITAL LETTER I WITH TILDE */ if (c == 0x012A) { F[0] = 0x012B; return; } /* LATIN CAPITAL LETTER I WITH MACRON */ if (c == 0x012C) { F[0] = 0x012D; return; } /* LATIN CAPITAL LETTER I WITH BREVE */ if (c == 0x012E) { F[0] = 0x012F; return; } /* LATIN CAPITAL LETTER I WITH OGONEK */ if (c == 0x0130) { F[0] = 0x0069; F[1] = 0x0307; return; } /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ if (c == 0x0132) { F[0] = 0x0133; return; } /* LATIN CAPITAL LIGATURE IJ */ if (c == 0x0134) { F[0] = 0x0135; return; } /* LATIN CAPITAL LETTER J WITH CIRCUMFLEX */ if (c == 0x0136) { F[0] = 0x0137; return; } /* LATIN CAPITAL LETTER K WITH CEDILLA */ if (c == 0x0139) { F[0] = 0x013A; return; } /* LATIN CAPITAL LETTER L WITH ACUTE */ if (c == 0x013B) { F[0] = 0x013C; return; } /* LATIN CAPITAL LETTER L WITH CEDILLA */ if (c == 0x013D) { F[0] = 0x013E; return; } /* LATIN CAPITAL LETTER L WITH CARON */ if (c == 0x013F) { F[0] = 0x0140; return; } /* LATIN CAPITAL LETTER L WITH MIDDLE DOT */ if (c == 0x0141) { F[0] = 0x0142; return; } /* LATIN CAPITAL LETTER L WITH STROKE */ if (c == 0x0143) { F[0] = 0x0144; return; } /* LATIN CAPITAL LETTER N WITH ACUTE */ if (c == 0x0145) { F[0] = 0x0146; return; } /* LATIN CAPITAL LETTER N WITH CEDILLA */ if (c == 0x0147) { F[0] = 0x0148; return; } /* LATIN CAPITAL LETTER N WITH CARON */ if (c == 0x0149) { F[0] = 0x02BC; F[1] = 0x006E; return; } /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ if (c == 0x014A) { F[0] = 0x014B; return; } /* LATIN CAPITAL LETTER ENG */ if (c == 0x014C) { F[0] = 0x014D; return; } /* LATIN CAPITAL LETTER O WITH MACRON */ if (c == 0x014E) { F[0] = 0x014F; return; } /* LATIN CAPITAL LETTER O WITH BREVE */ if (c == 0x0150) { F[0] = 0x0151; return; } /* LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */ if (c == 0x0152) { F[0] = 0x0153; return; } /* LATIN CAPITAL LIGATURE OE */ if (c == 0x0154) { F[0] = 0x0155; return; } /* LATIN CAPITAL LETTER R WITH ACUTE */ if (c == 0x0156) { F[0] = 0x0157; return; } /* LATIN CAPITAL LETTER R WITH CEDILLA */ if (c == 0x0158) { F[0] = 0x0159; return; } /* LATIN CAPITAL LETTER R WITH CARON */ if (c == 0x015A) { F[0] = 0x015B; return; } /* LATIN CAPITAL LETTER S WITH ACUTE */ if (c == 0x015C) { F[0] = 0x015D; return; } /* LATIN CAPITAL LETTER S WITH CIRCUMFLEX */ if (c == 0x015E) { F[0] = 0x015F; return; } /* LATIN CAPITAL LETTER S WITH CEDILLA */ if (c == 0x0160) { F[0] = 0x0161; return; } /* LATIN CAPITAL LETTER S WITH CARON */ if (c == 0x0162) { F[0] = 0x0163; return; } /* LATIN CAPITAL LETTER T WITH CEDILLA */ if (c == 0x0164) { F[0] = 0x0165; return; } /* LATIN CAPITAL LETTER T WITH CARON */ if (c == 0x0166) { F[0] = 0x0167; return; } /* LATIN CAPITAL LETTER T WITH STROKE */ if (c == 0x0168) { F[0] = 0x0169; return; } /* LATIN CAPITAL LETTER U WITH TILDE */ if (c == 0x016A) { F[0] = 0x016B; return; } /* LATIN CAPITAL LETTER U WITH MACRON */ if (c == 0x016C) { F[0] = 0x016D; return; } /* LATIN CAPITAL LETTER U WITH BREVE */ if (c == 0x016E) { F[0] = 0x016F; return; } /* LATIN CAPITAL LETTER U WITH RING ABOVE */ if (c == 0x0170) { F[0] = 0x0171; return; } /* LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */ if (c == 0x0172) { F[0] = 0x0173; return; } /* LATIN CAPITAL LETTER U WITH OGONEK */ if (c == 0x0174) { F[0] = 0x0175; return; } /* LATIN CAPITAL LETTER W WITH CIRCUMFLEX */ if (c == 0x0176) { F[0] = 0x0177; return; } /* LATIN CAPITAL LETTER Y WITH CIRCUMFLEX */ if (c == 0x0178) { F[0] = 0x00FF; return; } /* LATIN CAPITAL LETTER Y WITH DIAERESIS */ if (c == 0x0179) { F[0] = 0x017A; return; } /* LATIN CAPITAL LETTER Z WITH ACUTE */ if (c == 0x017B) { F[0] = 0x017C; return; } /* LATIN CAPITAL LETTER Z WITH DOT ABOVE */ if (c == 0x017D) { F[0] = 0x017E; return; } /* LATIN CAPITAL LETTER Z WITH CARON */ if (c == 0x017F) { F[0] = 0x0073; return; } /* LATIN SMALL LETTER LONG S */ if (c == 0x0181) { F[0] = 0x0253; return; } /* LATIN CAPITAL LETTER B WITH HOOK */ if (c == 0x0182) { F[0] = 0x0183; return; } /* LATIN CAPITAL LETTER B WITH TOPBAR */ if (c == 0x0184) { F[0] = 0x0185; return; } /* LATIN CAPITAL LETTER TONE SIX */ if (c == 0x0186) { F[0] = 0x0254; return; } /* LATIN CAPITAL LETTER OPEN O */ if (c == 0x0187) { F[0] = 0x0188; return; } /* LATIN CAPITAL LETTER C WITH HOOK */ if (c == 0x0189) { F[0] = 0x0256; return; } /* LATIN CAPITAL LETTER AFRICAN D */ if (c == 0x018A) { F[0] = 0x0257; return; } /* LATIN CAPITAL LETTER D WITH HOOK */ if (c == 0x018B) { F[0] = 0x018C; return; } /* LATIN CAPITAL LETTER D WITH TOPBAR */ if (c == 0x018E) { F[0] = 0x01DD; return; } /* LATIN CAPITAL LETTER REVERSED E */ if (c == 0x018F) { F[0] = 0x0259; return; } /* LATIN CAPITAL LETTER SCHWA */ if (c == 0x0190) { F[0] = 0x025B; return; } /* LATIN CAPITAL LETTER OPEN E */ if (c == 0x0191) { F[0] = 0x0192; return; } /* LATIN CAPITAL LETTER F WITH HOOK */ if (c == 0x0193) { F[0] = 0x0260; return; } /* LATIN CAPITAL LETTER G WITH HOOK */ if (c == 0x0194) { F[0] = 0x0263; return; } /* LATIN CAPITAL LETTER GAMMA */ if (c == 0x0196) { F[0] = 0x0269; return; } /* LATIN CAPITAL LETTER IOTA */ if (c == 0x0197) { F[0] = 0x0268; return; } /* LATIN CAPITAL LETTER I WITH STROKE */ if (c == 0x0198) { F[0] = 0x0199; return; } /* LATIN CAPITAL LETTER K WITH HOOK */ if (c == 0x019C) { F[0] = 0x026F; return; } /* LATIN CAPITAL LETTER TURNED M */ if (c == 0x019D) { F[0] = 0x0272; return; } /* LATIN CAPITAL LETTER N WITH LEFT HOOK */ if (c == 0x019F) { F[0] = 0x0275; return; } /* LATIN CAPITAL LETTER O WITH MIDDLE TILDE */ if (c == 0x01A0) { F[0] = 0x01A1; return; } /* LATIN CAPITAL LETTER O WITH HORN */ if (c == 0x01A2) { F[0] = 0x01A3; return; } /* LATIN CAPITAL LETTER OI */ if (c == 0x01A4) { F[0] = 0x01A5; return; } /* LATIN CAPITAL LETTER P WITH HOOK */ if (c == 0x01A6) { F[0] = 0x0280; return; } /* LATIN LETTER YR */ if (c == 0x01A7) { F[0] = 0x01A8; return; } /* LATIN CAPITAL LETTER TONE TWO */ if (c == 0x01A9) { F[0] = 0x0283; return; } /* LATIN CAPITAL LETTER ESH */ if (c == 0x01AC) { F[0] = 0x01AD; return; } /* LATIN CAPITAL LETTER T WITH HOOK */ if (c == 0x01AE) { F[0] = 0x0288; return; } /* LATIN CAPITAL LETTER T WITH RETROFLEX HOOK */ if (c == 0x01AF) { F[0] = 0x01B0; return; } /* LATIN CAPITAL LETTER U WITH HORN */ if (c == 0x01B1) { F[0] = 0x028A; return; } /* LATIN CAPITAL LETTER UPSILON */ if (c == 0x01B2) { F[0] = 0x028B; return; } /* LATIN CAPITAL LETTER V WITH HOOK */ if (c == 0x01B3) { F[0] = 0x01B4; return; } /* LATIN CAPITAL LETTER Y WITH HOOK */ if (c == 0x01B5) { F[0] = 0x01B6; return; } /* LATIN CAPITAL LETTER Z WITH STROKE */ if (c == 0x01B7) { F[0] = 0x0292; return; } /* LATIN CAPITAL LETTER EZH */ if (c == 0x01B8) { F[0] = 0x01B9; return; } /* LATIN CAPITAL LETTER EZH REVERSED */ if (c == 0x01BC) { F[0] = 0x01BD; return; } /* LATIN CAPITAL LETTER TONE FIVE */ if (c == 0x01C4) { F[0] = 0x01C6; return; } /* LATIN CAPITAL LETTER DZ WITH CARON */ if (c == 0x01C5) { F[0] = 0x01C6; return; } /* LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON */ if (c == 0x01C7) { F[0] = 0x01C9; return; } /* LATIN CAPITAL LETTER LJ */ if (c == 0x01C8) { F[0] = 0x01C9; return; } /* LATIN CAPITAL LETTER L WITH SMALL LETTER J */ if (c == 0x01CA) { F[0] = 0x01CC; return; } /* LATIN CAPITAL LETTER NJ */ if (c == 0x01CB) { F[0] = 0x01CC; return; } /* LATIN CAPITAL LETTER N WITH SMALL LETTER J */ if (c == 0x01CD) { F[0] = 0x01CE; return; } /* LATIN CAPITAL LETTER A WITH CARON */ if (c == 0x01CF) { F[0] = 0x01D0; return; } /* LATIN CAPITAL LETTER I WITH CARON */ if (c == 0x01D1) { F[0] = 0x01D2; return; } /* LATIN CAPITAL LETTER O WITH CARON */ if (c == 0x01D3) { F[0] = 0x01D4; return; } /* LATIN CAPITAL LETTER U WITH CARON */ if (c == 0x01D5) { F[0] = 0x01D6; return; } /* LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON */ if (c == 0x01D7) { F[0] = 0x01D8; return; } /* LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE */ if (c == 0x01D9) { F[0] = 0x01DA; return; } /* LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON */ if (c == 0x01DB) { F[0] = 0x01DC; return; } /* LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE */ if (c == 0x01DE) { F[0] = 0x01DF; return; } /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ if (c == 0x01E0) { F[0] = 0x01E1; return; } /* LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON */ if (c == 0x01E2) { F[0] = 0x01E3; return; } /* LATIN CAPITAL LETTER AE WITH MACRON */ if (c == 0x01E4) { F[0] = 0x01E5; return; } /* LATIN CAPITAL LETTER G WITH STROKE */ if (c == 0x01E6) { F[0] = 0x01E7; return; } /* LATIN CAPITAL LETTER G WITH CARON */ if (c == 0x01E8) { F[0] = 0x01E9; return; } /* LATIN CAPITAL LETTER K WITH CARON */ if (c == 0x01EA) { F[0] = 0x01EB; return; } /* LATIN CAPITAL LETTER O WITH OGONEK */ if (c == 0x01EC) { F[0] = 0x01ED; return; } /* LATIN CAPITAL LETTER O WITH OGONEK AND MACRON */ if (c == 0x01EE) { F[0] = 0x01EF; return; } /* LATIN CAPITAL LETTER EZH WITH CARON */ if (c == 0x01F0) { F[0] = 0x006A; F[1] = 0x030C; return; } /* LATIN SMALL LETTER J WITH CARON */ if (c == 0x01F1) { F[0] = 0x01F3; return; } /* LATIN CAPITAL LETTER DZ */ if (c == 0x01F2) { F[0] = 0x01F3; return; } /* LATIN CAPITAL LETTER D WITH SMALL LETTER Z */ if (c == 0x01F4) { F[0] = 0x01F5; return; } /* LATIN CAPITAL LETTER G WITH ACUTE */ if (c == 0x01F6) { F[0] = 0x0195; return; } /* LATIN CAPITAL LETTER HWAIR */ if (c == 0x01F7) { F[0] = 0x01BF; return; } /* LATIN CAPITAL LETTER WYNN */ if (c == 0x01F8) { F[0] = 0x01F9; return; } /* LATIN CAPITAL LETTER N WITH GRAVE */ if (c == 0x01FA) { F[0] = 0x01FB; return; } /* LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE */ if (c == 0x01FC) { F[0] = 0x01FD; return; } /* LATIN CAPITAL LETTER AE WITH ACUTE */ if (c == 0x01FE) { F[0] = 0x01FF; return; } /* LATIN CAPITAL LETTER O WITH STROKE AND ACUTE */ } else if ((c >= 0x0200) && (c < 0x0300)) { if (c == 0x0200) { F[0] = 0x0201; return; } /* LATIN CAPITAL LETTER A WITH DOUBLE GRAVE */ if (c == 0x0202) { F[0] = 0x0203; return; } /* LATIN CAPITAL LETTER A WITH INVERTED BREVE */ if (c == 0x0204) { F[0] = 0x0205; return; } /* LATIN CAPITAL LETTER E WITH DOUBLE GRAVE */ if (c == 0x0206) { F[0] = 0x0207; return; } /* LATIN CAPITAL LETTER E WITH INVERTED BREVE */ if (c == 0x0208) { F[0] = 0x0209; return; } /* LATIN CAPITAL LETTER I WITH DOUBLE GRAVE */ if (c == 0x020A) { F[0] = 0x020B; return; } /* LATIN CAPITAL LETTER I WITH INVERTED BREVE */ if (c == 0x020C) { F[0] = 0x020D; return; } /* LATIN CAPITAL LETTER O WITH DOUBLE GRAVE */ if (c == 0x020E) { F[0] = 0x020F; return; } /* LATIN CAPITAL LETTER O WITH INVERTED BREVE */ if (c == 0x0210) { F[0] = 0x0211; return; } /* LATIN CAPITAL LETTER R WITH DOUBLE GRAVE */ if (c == 0x0212) { F[0] = 0x0213; return; } /* LATIN CAPITAL LETTER R WITH INVERTED BREVE */ if (c == 0x0214) { F[0] = 0x0215; return; } /* LATIN CAPITAL LETTER U WITH DOUBLE GRAVE */ if (c == 0x0216) { F[0] = 0x0217; return; } /* LATIN CAPITAL LETTER U WITH INVERTED BREVE */ if (c == 0x0218) { F[0] = 0x0219; return; } /* LATIN CAPITAL LETTER S WITH COMMA BELOW */ if (c == 0x021A) { F[0] = 0x021B; return; } /* LATIN CAPITAL LETTER T WITH COMMA BELOW */ if (c == 0x021C) { F[0] = 0x021D; return; } /* LATIN CAPITAL LETTER YOGH */ if (c == 0x021E) { F[0] = 0x021F; return; } /* LATIN CAPITAL LETTER H WITH CARON */ if (c == 0x0220) { F[0] = 0x019E; return; } /* LATIN CAPITAL LETTER N WITH LONG RIGHT LEG */ if (c == 0x0222) { F[0] = 0x0223; return; } /* LATIN CAPITAL LETTER OU */ if (c == 0x0224) { F[0] = 0x0225; return; } /* LATIN CAPITAL LETTER Z WITH HOOK */ if (c == 0x0226) { F[0] = 0x0227; return; } /* LATIN CAPITAL LETTER A WITH DOT ABOVE */ if (c == 0x0228) { F[0] = 0x0229; return; } /* LATIN CAPITAL LETTER E WITH CEDILLA */ if (c == 0x022A) { F[0] = 0x022B; return; } /* LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON */ if (c == 0x022C) { F[0] = 0x022D; return; } /* LATIN CAPITAL LETTER O WITH TILDE AND MACRON */ if (c == 0x022E) { F[0] = 0x022F; return; } /* LATIN CAPITAL LETTER O WITH DOT ABOVE */ if (c == 0x0230) { F[0] = 0x0231; return; } /* LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON */ if (c == 0x0232) { F[0] = 0x0233; return; } /* LATIN CAPITAL LETTER Y WITH MACRON */ if (c == 0x023A) { F[0] = 0x2C65; return; } /* LATIN CAPITAL LETTER A WITH STROKE */ if (c == 0x023B) { F[0] = 0x023C; return; } /* LATIN CAPITAL LETTER C WITH STROKE */ if (c == 0x023D) { F[0] = 0x019A; return; } /* LATIN CAPITAL LETTER L WITH BAR */ if (c == 0x023E) { F[0] = 0x2C66; return; } /* LATIN CAPITAL LETTER T WITH DIAGONAL STROKE */ if (c == 0x0241) { F[0] = 0x0242; return; } /* LATIN CAPITAL LETTER GLOTTAL STOP */ if (c == 0x0243) { F[0] = 0x0180; return; } /* LATIN CAPITAL LETTER B WITH STROKE */ if (c == 0x0244) { F[0] = 0x0289; return; } /* LATIN CAPITAL LETTER U BAR */ if (c == 0x0245) { F[0] = 0x028C; return; } /* LATIN CAPITAL LETTER TURNED V */ if (c == 0x0246) { F[0] = 0x0247; return; } /* LATIN CAPITAL LETTER E WITH STROKE */ if (c == 0x0248) { F[0] = 0x0249; return; } /* LATIN CAPITAL LETTER J WITH STROKE */ if (c == 0x024A) { F[0] = 0x024B; return; } /* LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL */ if (c == 0x024C) { F[0] = 0x024D; return; } /* LATIN CAPITAL LETTER R WITH STROKE */ if (c == 0x024E) { F[0] = 0x024F; return; } /* LATIN CAPITAL LETTER Y WITH STROKE */ } else if ((c >= 0x0300) && (c < 0x0400)) { if (c == 0x0345) { F[0] = 0x03B9; return; } /* COMBINING GREEK YPOGEGRAMMENI */ if (c == 0x0370) { F[0] = 0x0371; return; } /* GREEK CAPITAL LETTER HETA */ if (c == 0x0372) { F[0] = 0x0373; return; } /* GREEK CAPITAL LETTER ARCHAIC SAMPI */ if (c == 0x0376) { F[0] = 0x0377; return; } /* GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA */ if (c == 0x037F) { F[0] = 0x03F3; return; } /* GREEK CAPITAL LETTER YOT */ if (c == 0x0386) { F[0] = 0x03AC; return; } /* GREEK CAPITAL LETTER ALPHA WITH TONOS */ if ((c >= 0x0388) && (c <= 0x038A)) { F[0] = 0x03AD + (c - 0x0388); return; } /* GREEK CAPITAL LETTER EPSILON WITH TONOS to GREEK CAPITAL LETTER IOTA WITH TONOS */ if (c == 0x038C) { F[0] = 0x03CC; return; } /* GREEK CAPITAL LETTER OMICRON WITH TONOS */ if (c == 0x038E) { F[0] = 0x03CD; return; } /* GREEK CAPITAL LETTER UPSILON WITH TONOS */ if (c == 0x038F) { F[0] = 0x03CE; return; } /* GREEK CAPITAL LETTER OMEGA WITH TONOS */ if (c == 0x0390) { F[0] = 0x03B9; F[1] = 0x0308; F[2] = 0x0301; return; } /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ if ((c >= 0x0391) && (c <= 0x03A1)) { F[0] = 0x03B1 + (c - 0x0391); return; } /* GREEK CAPITAL LETTER ALPHA to GREEK CAPITAL LETTER RHO */ if ((c >= 0x03A3) && (c <= 0x03AB)) { F[0] = 0x03C3 + (c - 0x03A3); return; } /* GREEK CAPITAL LETTER SIGMA to GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */ if (c == 0x03B0) { F[0] = 0x03C5; F[1] = 0x0308; F[2] = 0x0301; return; } /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */ if (c == 0x03C2) { F[0] = 0x03C3; return; } /* GREEK SMALL LETTER FINAL SIGMA */ if (c == 0x03CF) { F[0] = 0x03D7; return; } /* GREEK CAPITAL KAI SYMBOL */ if (c == 0x03D0) { F[0] = 0x03B2; return; } /* GREEK BETA SYMBOL */ if (c == 0x03D1) { F[0] = 0x03B8; return; } /* GREEK THETA SYMBOL */ if (c == 0x03D5) { F[0] = 0x03C6; return; } /* GREEK PHI SYMBOL */ if (c == 0x03D6) { F[0] = 0x03C0; return; } /* GREEK PI SYMBOL */ if (c == 0x03D8) { F[0] = 0x03D9; return; } /* GREEK LETTER ARCHAIC KOPPA */ if (c == 0x03DA) { F[0] = 0x03DB; return; } /* GREEK LETTER STIGMA */ if (c == 0x03DC) { F[0] = 0x03DD; return; } /* GREEK LETTER DIGAMMA */ if (c == 0x03DE) { F[0] = 0x03DF; return; } /* GREEK LETTER KOPPA */ if (c == 0x03E0) { F[0] = 0x03E1; return; } /* GREEK LETTER SAMPI */ if (c == 0x03E2) { F[0] = 0x03E3; return; } /* COPTIC CAPITAL LETTER SHEI */ if (c == 0x03E4) { F[0] = 0x03E5; return; } /* COPTIC CAPITAL LETTER FEI */ if (c == 0x03E6) { F[0] = 0x03E7; return; } /* COPTIC CAPITAL LETTER KHEI */ if (c == 0x03E8) { F[0] = 0x03E9; return; } /* COPTIC CAPITAL LETTER HORI */ if (c == 0x03EA) { F[0] = 0x03EB; return; } /* COPTIC CAPITAL LETTER GANGIA */ if (c == 0x03EC) { F[0] = 0x03ED; return; } /* COPTIC CAPITAL LETTER SHIMA */ if (c == 0x03EE) { F[0] = 0x03EF; return; } /* COPTIC CAPITAL LETTER DEI */ if (c == 0x03F0) { F[0] = 0x03BA; return; } /* GREEK KAPPA SYMBOL */ if (c == 0x03F1) { F[0] = 0x03C1; return; } /* GREEK RHO SYMBOL */ if (c == 0x03F4) { F[0] = 0x03B8; return; } /* GREEK CAPITAL THETA SYMBOL */ if (c == 0x03F5) { F[0] = 0x03B5; return; } /* GREEK LUNATE EPSILON SYMBOL */ if (c == 0x03F7) { F[0] = 0x03F8; return; } /* GREEK CAPITAL LETTER SHO */ if (c == 0x03F9) { F[0] = 0x03F2; return; } /* GREEK CAPITAL LUNATE SIGMA SYMBOL */ if (c == 0x03FA) { F[0] = 0x03FB; return; } /* GREEK CAPITAL LETTER SAN */ if ((c >= 0x03FD) && (c <= 0x03FF)) { F[0] = 0x037B + (c - 0x03FD); return; } /* GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL to GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL */ } else if ((c >= 0x0400) && (c < 0x0500)) { if ((c >= 0x0400) && (c <= 0x040F)) { F[0] = 0x0450 + (c - 0x0400); return; } /* CYRILLIC CAPITAL LETTER IE WITH GRAVE to CYRILLIC CAPITAL LETTER DZHE */ if ((c >= 0x0410) && (c <= 0x042F)) { F[0] = 0x0430 + (c - 0x0410); return; } /* CYRILLIC CAPITAL LETTER A to CYRILLIC CAPITAL LETTER YA */ if (c == 0x0460) { F[0] = 0x0461; return; } /* CYRILLIC CAPITAL LETTER OMEGA */ if (c == 0x0462) { F[0] = 0x0463; return; } /* CYRILLIC CAPITAL LETTER YAT */ if (c == 0x0464) { F[0] = 0x0465; return; } /* CYRILLIC CAPITAL LETTER IOTIFIED E */ if (c == 0x0466) { F[0] = 0x0467; return; } /* CYRILLIC CAPITAL LETTER LITTLE YUS */ if (c == 0x0468) { F[0] = 0x0469; return; } /* CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS */ if (c == 0x046A) { F[0] = 0x046B; return; } /* CYRILLIC CAPITAL LETTER BIG YUS */ if (c == 0x046C) { F[0] = 0x046D; return; } /* CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS */ if (c == 0x046E) { F[0] = 0x046F; return; } /* CYRILLIC CAPITAL LETTER KSI */ if (c == 0x0470) { F[0] = 0x0471; return; } /* CYRILLIC CAPITAL LETTER PSI */ if (c == 0x0472) { F[0] = 0x0473; return; } /* CYRILLIC CAPITAL LETTER FITA */ if (c == 0x0474) { F[0] = 0x0475; return; } /* CYRILLIC CAPITAL LETTER IZHITSA */ if (c == 0x0476) { F[0] = 0x0477; return; } /* CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT */ if (c == 0x0478) { F[0] = 0x0479; return; } /* CYRILLIC CAPITAL LETTER UK */ if (c == 0x047A) { F[0] = 0x047B; return; } /* CYRILLIC CAPITAL LETTER ROUND OMEGA */ if (c == 0x047C) { F[0] = 0x047D; return; } /* CYRILLIC CAPITAL LETTER OMEGA WITH TITLO */ if (c == 0x047E) { F[0] = 0x047F; return; } /* CYRILLIC CAPITAL LETTER OT */ if (c == 0x0480) { F[0] = 0x0481; return; } /* CYRILLIC CAPITAL LETTER KOPPA */ if (c == 0x048A) { F[0] = 0x048B; return; } /* CYRILLIC CAPITAL LETTER SHORT I WITH TAIL */ if (c == 0x048C) { F[0] = 0x048D; return; } /* CYRILLIC CAPITAL LETTER SEMISOFT SIGN */ if (c == 0x048E) { F[0] = 0x048F; return; } /* CYRILLIC CAPITAL LETTER ER WITH TICK */ if (c == 0x0490) { F[0] = 0x0491; return; } /* CYRILLIC CAPITAL LETTER GHE WITH UPTURN */ if (c == 0x0492) { F[0] = 0x0493; return; } /* CYRILLIC CAPITAL LETTER GHE WITH STROKE */ if (c == 0x0494) { F[0] = 0x0495; return; } /* CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK */ if (c == 0x0496) { F[0] = 0x0497; return; } /* CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER */ if (c == 0x0498) { F[0] = 0x0499; return; } /* CYRILLIC CAPITAL LETTER ZE WITH DESCENDER */ if (c == 0x049A) { F[0] = 0x049B; return; } /* CYRILLIC CAPITAL LETTER KA WITH DESCENDER */ if (c == 0x049C) { F[0] = 0x049D; return; } /* CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE */ if (c == 0x049E) { F[0] = 0x049F; return; } /* CYRILLIC CAPITAL LETTER KA WITH STROKE */ if (c == 0x04A0) { F[0] = 0x04A1; return; } /* CYRILLIC CAPITAL LETTER BASHKIR KA */ if (c == 0x04A2) { F[0] = 0x04A3; return; } /* CYRILLIC CAPITAL LETTER EN WITH DESCENDER */ if (c == 0x04A4) { F[0] = 0x04A5; return; } /* CYRILLIC CAPITAL LIGATURE EN GHE */ if (c == 0x04A6) { F[0] = 0x04A7; return; } /* CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK */ if (c == 0x04A8) { F[0] = 0x04A9; return; } /* CYRILLIC CAPITAL LETTER ABKHASIAN HA */ if (c == 0x04AA) { F[0] = 0x04AB; return; } /* CYRILLIC CAPITAL LETTER ES WITH DESCENDER */ if (c == 0x04AC) { F[0] = 0x04AD; return; } /* CYRILLIC CAPITAL LETTER TE WITH DESCENDER */ if (c == 0x04AE) { F[0] = 0x04AF; return; } /* CYRILLIC CAPITAL LETTER STRAIGHT U */ if (c == 0x04B0) { F[0] = 0x04B1; return; } /* CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE */ if (c == 0x04B2) { F[0] = 0x04B3; return; } /* CYRILLIC CAPITAL LETTER HA WITH DESCENDER */ if (c == 0x04B4) { F[0] = 0x04B5; return; } /* CYRILLIC CAPITAL LIGATURE TE TSE */ if (c == 0x04B6) { F[0] = 0x04B7; return; } /* CYRILLIC CAPITAL LETTER CHE WITH DESCENDER */ if (c == 0x04B8) { F[0] = 0x04B9; return; } /* CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE */ if (c == 0x04BA) { F[0] = 0x04BB; return; } /* CYRILLIC CAPITAL LETTER SHHA */ if (c == 0x04BC) { F[0] = 0x04BD; return; } /* CYRILLIC CAPITAL LETTER ABKHASIAN CHE */ if (c == 0x04BE) { F[0] = 0x04BF; return; } /* CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER */ if (c == 0x04C0) { F[0] = 0x04CF; return; } /* CYRILLIC LETTER PALOCHKA */ if (c == 0x04C1) { F[0] = 0x04C2; return; } /* CYRILLIC CAPITAL LETTER ZHE WITH BREVE */ if (c == 0x04C3) { F[0] = 0x04C4; return; } /* CYRILLIC CAPITAL LETTER KA WITH HOOK */ if (c == 0x04C5) { F[0] = 0x04C6; return; } /* CYRILLIC CAPITAL LETTER EL WITH TAIL */ if (c == 0x04C7) { F[0] = 0x04C8; return; } /* CYRILLIC CAPITAL LETTER EN WITH HOOK */ if (c == 0x04C9) { F[0] = 0x04CA; return; } /* CYRILLIC CAPITAL LETTER EN WITH TAIL */ if (c == 0x04CB) { F[0] = 0x04CC; return; } /* CYRILLIC CAPITAL LETTER KHAKASSIAN CHE */ if (c == 0x04CD) { F[0] = 0x04CE; return; } /* CYRILLIC CAPITAL LETTER EM WITH TAIL */ if (c == 0x04D0) { F[0] = 0x04D1; return; } /* CYRILLIC CAPITAL LETTER A WITH BREVE */ if (c == 0x04D2) { F[0] = 0x04D3; return; } /* CYRILLIC CAPITAL LETTER A WITH DIAERESIS */ if (c == 0x04D4) { F[0] = 0x04D5; return; } /* CYRILLIC CAPITAL LIGATURE A IE */ if (c == 0x04D6) { F[0] = 0x04D7; return; } /* CYRILLIC CAPITAL LETTER IE WITH BREVE */ if (c == 0x04D8) { F[0] = 0x04D9; return; } /* CYRILLIC CAPITAL LETTER SCHWA */ if (c == 0x04DA) { F[0] = 0x04DB; return; } /* CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS */ if (c == 0x04DC) { F[0] = 0x04DD; return; } /* CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS */ if (c == 0x04DE) { F[0] = 0x04DF; return; } /* CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS */ if (c == 0x04E0) { F[0] = 0x04E1; return; } /* CYRILLIC CAPITAL LETTER ABKHASIAN DZE */ if (c == 0x04E2) { F[0] = 0x04E3; return; } /* CYRILLIC CAPITAL LETTER I WITH MACRON */ if (c == 0x04E4) { F[0] = 0x04E5; return; } /* CYRILLIC CAPITAL LETTER I WITH DIAERESIS */ if (c == 0x04E6) { F[0] = 0x04E7; return; } /* CYRILLIC CAPITAL LETTER O WITH DIAERESIS */ if (c == 0x04E8) { F[0] = 0x04E9; return; } /* CYRILLIC CAPITAL LETTER BARRED O */ if (c == 0x04EA) { F[0] = 0x04EB; return; } /* CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS */ if (c == 0x04EC) { F[0] = 0x04ED; return; } /* CYRILLIC CAPITAL LETTER E WITH DIAERESIS */ if (c == 0x04EE) { F[0] = 0x04EF; return; } /* CYRILLIC CAPITAL LETTER U WITH MACRON */ if (c == 0x04F0) { F[0] = 0x04F1; return; } /* CYRILLIC CAPITAL LETTER U WITH DIAERESIS */ if (c == 0x04F2) { F[0] = 0x04F3; return; } /* CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE */ if (c == 0x04F4) { F[0] = 0x04F5; return; } /* CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS */ if (c == 0x04F6) { F[0] = 0x04F7; return; } /* CYRILLIC CAPITAL LETTER GHE WITH DESCENDER */ if (c == 0x04F8) { F[0] = 0x04F9; return; } /* CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS */ if (c == 0x04FA) { F[0] = 0x04FB; return; } /* CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK */ if (c == 0x04FC) { F[0] = 0x04FD; return; } /* CYRILLIC CAPITAL LETTER HA WITH HOOK */ if (c == 0x04FE) { F[0] = 0x04FF; return; } /* CYRILLIC CAPITAL LETTER HA WITH STROKE */ } else if ((c >= 0x0500) && (c < 0x0600)) { if (c == 0x0500) { F[0] = 0x0501; return; } /* CYRILLIC CAPITAL LETTER KOMI DE */ if (c == 0x0502) { F[0] = 0x0503; return; } /* CYRILLIC CAPITAL LETTER KOMI DJE */ if (c == 0x0504) { F[0] = 0x0505; return; } /* CYRILLIC CAPITAL LETTER KOMI ZJE */ if (c == 0x0506) { F[0] = 0x0507; return; } /* CYRILLIC CAPITAL LETTER KOMI DZJE */ if (c == 0x0508) { F[0] = 0x0509; return; } /* CYRILLIC CAPITAL LETTER KOMI LJE */ if (c == 0x050A) { F[0] = 0x050B; return; } /* CYRILLIC CAPITAL LETTER KOMI NJE */ if (c == 0x050C) { F[0] = 0x050D; return; } /* CYRILLIC CAPITAL LETTER KOMI SJE */ if (c == 0x050E) { F[0] = 0x050F; return; } /* CYRILLIC CAPITAL LETTER KOMI TJE */ if (c == 0x0510) { F[0] = 0x0511; return; } /* CYRILLIC CAPITAL LETTER REVERSED ZE */ if (c == 0x0512) { F[0] = 0x0513; return; } /* CYRILLIC CAPITAL LETTER EL WITH HOOK */ if (c == 0x0514) { F[0] = 0x0515; return; } /* CYRILLIC CAPITAL LETTER LHA */ if (c == 0x0516) { F[0] = 0x0517; return; } /* CYRILLIC CAPITAL LETTER RHA */ if (c == 0x0518) { F[0] = 0x0519; return; } /* CYRILLIC CAPITAL LETTER YAE */ if (c == 0x051A) { F[0] = 0x051B; return; } /* CYRILLIC CAPITAL LETTER QA */ if (c == 0x051C) { F[0] = 0x051D; return; } /* CYRILLIC CAPITAL LETTER WE */ if (c == 0x051E) { F[0] = 0x051F; return; } /* CYRILLIC CAPITAL LETTER ALEUT KA */ if (c == 0x0520) { F[0] = 0x0521; return; } /* CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK */ if (c == 0x0522) { F[0] = 0x0523; return; } /* CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK */ if (c == 0x0524) { F[0] = 0x0525; return; } /* CYRILLIC CAPITAL LETTER PE WITH DESCENDER */ if (c == 0x0526) { F[0] = 0x0527; return; } /* CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER */ if (c == 0x0528) { F[0] = 0x0529; return; } /* CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK */ if (c == 0x052A) { F[0] = 0x052B; return; } /* CYRILLIC CAPITAL LETTER DZZHE */ if (c == 0x052C) { F[0] = 0x052D; return; } /* CYRILLIC CAPITAL LETTER DCHE */ if (c == 0x052E) { F[0] = 0x052F; return; } /* CYRILLIC CAPITAL LETTER EL WITH DESCENDER */ if ((c >= 0x0531) && (c <= 0x0556)) { F[0] = 0x0561 + (c - 0x0531); return; } /* ARMENIAN CAPITAL LETTER AYB to ARMENIAN CAPITAL LETTER FEH */ if (c == 0x0587) { F[0] = 0x0565; F[1] = 0x0582; return; } /* ARMENIAN SMALL LIGATURE ECH YIWN */ } else if ((c >= 0x1000) && (c < 0x2000)) { if ((c >= 0x10A0) && (c <= 0x10C5)) { F[0] = 0x2D00 + (c - 0x10A0); return; } /* GEORGIAN CAPITAL LETTER AN to GEORGIAN CAPITAL LETTER HOE */ if (c == 0x10C7) { F[0] = 0x2D27; return; } /* GEORGIAN CAPITAL LETTER YN */ if (c == 0x10CD) { F[0] = 0x2D2D; return; } /* GEORGIAN CAPITAL LETTER AEN */ if ((c >= 0x13F8) && (c <= 0x13FD)) { F[0] = 0x13F0 + (c - 0x13F8); return; } /* CHEROKEE SMALL LETTER YE to CHEROKEE SMALL LETTER MV */ if (c == 0x1C80) { F[0] = 0x0432; return; } /* CYRILLIC SMALL LETTER ROUNDED VE */ if (c == 0x1C81) { F[0] = 0x0434; return; } /* CYRILLIC SMALL LETTER LONG-LEGGED DE */ if (c == 0x1C82) { F[0] = 0x043E; return; } /* CYRILLIC SMALL LETTER NARROW O */ if (c == 0x1C83) { F[0] = 0x0441; return; } /* CYRILLIC SMALL LETTER WIDE ES */ if (c == 0x1C84) { F[0] = 0x0442; return; } /* CYRILLIC SMALL LETTER TALL TE */ if (c == 0x1C85) { F[0] = 0x0442; return; } /* CYRILLIC SMALL LETTER THREE-LEGGED TE */ if (c == 0x1C86) { F[0] = 0x044A; return; } /* CYRILLIC SMALL LETTER TALL HARD SIGN */ if (c == 0x1C87) { F[0] = 0x0463; return; } /* CYRILLIC SMALL LETTER TALL YAT */ if (c == 0x1C88) { F[0] = 0xA64B; return; } /* CYRILLIC SMALL LETTER UNBLENDED UK */ if ((c >= 0x1C90) && (c <= 0x1CBA)) { F[0] = 0x10D0 + (c - 0x1C90); return; } /* GEORGIAN MTAVRULI CAPITAL LETTER AN to GEORGIAN MTAVRULI CAPITAL LETTER AIN */ if ((c >= 0x1CBD) && (c <= 0x1CBF)) { F[0] = 0x10FD + (c - 0x1CBD); return; } /* GEORGIAN MTAVRULI CAPITAL LETTER AEN to GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN */ if (c == 0x1E00) { F[0] = 0x1E01; return; } /* LATIN CAPITAL LETTER A WITH RING BELOW */ if (c == 0x1E02) { F[0] = 0x1E03; return; } /* LATIN CAPITAL LETTER B WITH DOT ABOVE */ if (c == 0x1E04) { F[0] = 0x1E05; return; } /* LATIN CAPITAL LETTER B WITH DOT BELOW */ if (c == 0x1E06) { F[0] = 0x1E07; return; } /* LATIN CAPITAL LETTER B WITH LINE BELOW */ if (c == 0x1E08) { F[0] = 0x1E09; return; } /* LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE */ if (c == 0x1E0A) { F[0] = 0x1E0B; return; } /* LATIN CAPITAL LETTER D WITH DOT ABOVE */ if (c == 0x1E0C) { F[0] = 0x1E0D; return; } /* LATIN CAPITAL LETTER D WITH DOT BELOW */ if (c == 0x1E0E) { F[0] = 0x1E0F; return; } /* LATIN CAPITAL LETTER D WITH LINE BELOW */ if (c == 0x1E10) { F[0] = 0x1E11; return; } /* LATIN CAPITAL LETTER D WITH CEDILLA */ if (c == 0x1E12) { F[0] = 0x1E13; return; } /* LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW */ if (c == 0x1E14) { F[0] = 0x1E15; return; } /* LATIN CAPITAL LETTER E WITH MACRON AND GRAVE */ if (c == 0x1E16) { F[0] = 0x1E17; return; } /* LATIN CAPITAL LETTER E WITH MACRON AND ACUTE */ if (c == 0x1E18) { F[0] = 0x1E19; return; } /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW */ if (c == 0x1E1A) { F[0] = 0x1E1B; return; } /* LATIN CAPITAL LETTER E WITH TILDE BELOW */ if (c == 0x1E1C) { F[0] = 0x1E1D; return; } /* LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE */ if (c == 0x1E1E) { F[0] = 0x1E1F; return; } /* LATIN CAPITAL LETTER F WITH DOT ABOVE */ if (c == 0x1E20) { F[0] = 0x1E21; return; } /* LATIN CAPITAL LETTER G WITH MACRON */ if (c == 0x1E22) { F[0] = 0x1E23; return; } /* LATIN CAPITAL LETTER H WITH DOT ABOVE */ if (c == 0x1E24) { F[0] = 0x1E25; return; } /* LATIN CAPITAL LETTER H WITH DOT BELOW */ if (c == 0x1E26) { F[0] = 0x1E27; return; } /* LATIN CAPITAL LETTER H WITH DIAERESIS */ if (c == 0x1E28) { F[0] = 0x1E29; return; } /* LATIN CAPITAL LETTER H WITH CEDILLA */ if (c == 0x1E2A) { F[0] = 0x1E2B; return; } /* LATIN CAPITAL LETTER H WITH BREVE BELOW */ if (c == 0x1E2C) { F[0] = 0x1E2D; return; } /* LATIN CAPITAL LETTER I WITH TILDE BELOW */ if (c == 0x1E2E) { F[0] = 0x1E2F; return; } /* LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE */ if (c == 0x1E30) { F[0] = 0x1E31; return; } /* LATIN CAPITAL LETTER K WITH ACUTE */ if (c == 0x1E32) { F[0] = 0x1E33; return; } /* LATIN CAPITAL LETTER K WITH DOT BELOW */ if (c == 0x1E34) { F[0] = 0x1E35; return; } /* LATIN CAPITAL LETTER K WITH LINE BELOW */ if (c == 0x1E36) { F[0] = 0x1E37; return; } /* LATIN CAPITAL LETTER L WITH DOT BELOW */ if (c == 0x1E38) { F[0] = 0x1E39; return; } /* LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON */ if (c == 0x1E3A) { F[0] = 0x1E3B; return; } /* LATIN CAPITAL LETTER L WITH LINE BELOW */ if (c == 0x1E3C) { F[0] = 0x1E3D; return; } /* LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW */ if (c == 0x1E3E) { F[0] = 0x1E3F; return; } /* LATIN CAPITAL LETTER M WITH ACUTE */ if (c == 0x1E40) { F[0] = 0x1E41; return; } /* LATIN CAPITAL LETTER M WITH DOT ABOVE */ if (c == 0x1E42) { F[0] = 0x1E43; return; } /* LATIN CAPITAL LETTER M WITH DOT BELOW */ if (c == 0x1E44) { F[0] = 0x1E45; return; } /* LATIN CAPITAL LETTER N WITH DOT ABOVE */ if (c == 0x1E46) { F[0] = 0x1E47; return; } /* LATIN CAPITAL LETTER N WITH DOT BELOW */ if (c == 0x1E48) { F[0] = 0x1E49; return; } /* LATIN CAPITAL LETTER N WITH LINE BELOW */ if (c == 0x1E4A) { F[0] = 0x1E4B; return; } /* LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW */ if (c == 0x1E4C) { F[0] = 0x1E4D; return; } /* LATIN CAPITAL LETTER O WITH TILDE AND ACUTE */ if (c == 0x1E4E) { F[0] = 0x1E4F; return; } /* LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS */ if (c == 0x1E50) { F[0] = 0x1E51; return; } /* LATIN CAPITAL LETTER O WITH MACRON AND GRAVE */ if (c == 0x1E52) { F[0] = 0x1E53; return; } /* LATIN CAPITAL LETTER O WITH MACRON AND ACUTE */ if (c == 0x1E54) { F[0] = 0x1E55; return; } /* LATIN CAPITAL LETTER P WITH ACUTE */ if (c == 0x1E56) { F[0] = 0x1E57; return; } /* LATIN CAPITAL LETTER P WITH DOT ABOVE */ if (c == 0x1E58) { F[0] = 0x1E59; return; } /* LATIN CAPITAL LETTER R WITH DOT ABOVE */ if (c == 0x1E5A) { F[0] = 0x1E5B; return; } /* LATIN CAPITAL LETTER R WITH DOT BELOW */ if (c == 0x1E5C) { F[0] = 0x1E5D; return; } /* LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON */ if (c == 0x1E5E) { F[0] = 0x1E5F; return; } /* LATIN CAPITAL LETTER R WITH LINE BELOW */ if (c == 0x1E60) { F[0] = 0x1E61; return; } /* LATIN CAPITAL LETTER S WITH DOT ABOVE */ if (c == 0x1E62) { F[0] = 0x1E63; return; } /* LATIN CAPITAL LETTER S WITH DOT BELOW */ if (c == 0x1E64) { F[0] = 0x1E65; return; } /* LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE */ if (c == 0x1E66) { F[0] = 0x1E67; return; } /* LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE */ if (c == 0x1E68) { F[0] = 0x1E69; return; } /* LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE */ if (c == 0x1E6A) { F[0] = 0x1E6B; return; } /* LATIN CAPITAL LETTER T WITH DOT ABOVE */ if (c == 0x1E6C) { F[0] = 0x1E6D; return; } /* LATIN CAPITAL LETTER T WITH DOT BELOW */ if (c == 0x1E6E) { F[0] = 0x1E6F; return; } /* LATIN CAPITAL LETTER T WITH LINE BELOW */ if (c == 0x1E70) { F[0] = 0x1E71; return; } /* LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW */ if (c == 0x1E72) { F[0] = 0x1E73; return; } /* LATIN CAPITAL LETTER U WITH DIAERESIS BELOW */ if (c == 0x1E74) { F[0] = 0x1E75; return; } /* LATIN CAPITAL LETTER U WITH TILDE BELOW */ if (c == 0x1E76) { F[0] = 0x1E77; return; } /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW */ if (c == 0x1E78) { F[0] = 0x1E79; return; } /* LATIN CAPITAL LETTER U WITH TILDE AND ACUTE */ if (c == 0x1E7A) { F[0] = 0x1E7B; return; } /* LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS */ if (c == 0x1E7C) { F[0] = 0x1E7D; return; } /* LATIN CAPITAL LETTER V WITH TILDE */ if (c == 0x1E7E) { F[0] = 0x1E7F; return; } /* LATIN CAPITAL LETTER V WITH DOT BELOW */ if (c == 0x1E80) { F[0] = 0x1E81; return; } /* LATIN CAPITAL LETTER W WITH GRAVE */ if (c == 0x1E82) { F[0] = 0x1E83; return; } /* LATIN CAPITAL LETTER W WITH ACUTE */ if (c == 0x1E84) { F[0] = 0x1E85; return; } /* LATIN CAPITAL LETTER W WITH DIAERESIS */ if (c == 0x1E86) { F[0] = 0x1E87; return; } /* LATIN CAPITAL LETTER W WITH DOT ABOVE */ if (c == 0x1E88) { F[0] = 0x1E89; return; } /* LATIN CAPITAL LETTER W WITH DOT BELOW */ if (c == 0x1E8A) { F[0] = 0x1E8B; return; } /* LATIN CAPITAL LETTER X WITH DOT ABOVE */ if (c == 0x1E8C) { F[0] = 0x1E8D; return; } /* LATIN CAPITAL LETTER X WITH DIAERESIS */ if (c == 0x1E8E) { F[0] = 0x1E8F; return; } /* LATIN CAPITAL LETTER Y WITH DOT ABOVE */ if (c == 0x1E90) { F[0] = 0x1E91; return; } /* LATIN CAPITAL LETTER Z WITH CIRCUMFLEX */ if (c == 0x1E92) { F[0] = 0x1E93; return; } /* LATIN CAPITAL LETTER Z WITH DOT BELOW */ if (c == 0x1E94) { F[0] = 0x1E95; return; } /* LATIN CAPITAL LETTER Z WITH LINE BELOW */ if (c == 0x1E96) { F[0] = 0x0068; F[1] = 0x0331; return; } /* LATIN SMALL LETTER H WITH LINE BELOW */ if (c == 0x1E97) { F[0] = 0x0074; F[1] = 0x0308; return; } /* LATIN SMALL LETTER T WITH DIAERESIS */ if (c == 0x1E98) { F[0] = 0x0077; F[1] = 0x030A; return; } /* LATIN SMALL LETTER W WITH RING ABOVE */ if (c == 0x1E99) { F[0] = 0x0079; F[1] = 0x030A; return; } /* LATIN SMALL LETTER Y WITH RING ABOVE */ if (c == 0x1E9A) { F[0] = 0x0061; F[1] = 0x02BE; return; } /* LATIN SMALL LETTER A WITH RIGHT HALF RING */ if (c == 0x1E9B) { F[0] = 0x1E61; return; } /* LATIN SMALL LETTER LONG S WITH DOT ABOVE */ if (c == 0x1E9E) { F[0] = 0x0073; F[1] = 0x0073; return; } /* LATIN CAPITAL LETTER SHARP S */ if (c == 0x1EA0) { F[0] = 0x1EA1; return; } /* LATIN CAPITAL LETTER A WITH DOT BELOW */ if (c == 0x1EA2) { F[0] = 0x1EA3; return; } /* LATIN CAPITAL LETTER A WITH HOOK ABOVE */ if (c == 0x1EA4) { F[0] = 0x1EA5; return; } /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE */ if (c == 0x1EA6) { F[0] = 0x1EA7; return; } /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE */ if (c == 0x1EA8) { F[0] = 0x1EA9; return; } /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */ if (c == 0x1EAA) { F[0] = 0x1EAB; return; } /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE */ if (c == 0x1EAC) { F[0] = 0x1EAD; return; } /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW */ if (c == 0x1EAE) { F[0] = 0x1EAF; return; } /* LATIN CAPITAL LETTER A WITH BREVE AND ACUTE */ if (c == 0x1EB0) { F[0] = 0x1EB1; return; } /* LATIN CAPITAL LETTER A WITH BREVE AND GRAVE */ if (c == 0x1EB2) { F[0] = 0x1EB3; return; } /* LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE */ if (c == 0x1EB4) { F[0] = 0x1EB5; return; } /* LATIN CAPITAL LETTER A WITH BREVE AND TILDE */ if (c == 0x1EB6) { F[0] = 0x1EB7; return; } /* LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW */ if (c == 0x1EB8) { F[0] = 0x1EB9; return; } /* LATIN CAPITAL LETTER E WITH DOT BELOW */ if (c == 0x1EBA) { F[0] = 0x1EBB; return; } /* LATIN CAPITAL LETTER E WITH HOOK ABOVE */ if (c == 0x1EBC) { F[0] = 0x1EBD; return; } /* LATIN CAPITAL LETTER E WITH TILDE */ if (c == 0x1EBE) { F[0] = 0x1EBF; return; } /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE */ if (c == 0x1EC0) { F[0] = 0x1EC1; return; } /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE */ if (c == 0x1EC2) { F[0] = 0x1EC3; return; } /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */ if (c == 0x1EC4) { F[0] = 0x1EC5; return; } /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE */ if (c == 0x1EC6) { F[0] = 0x1EC7; return; } /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW */ if (c == 0x1EC8) { F[0] = 0x1EC9; return; } /* LATIN CAPITAL LETTER I WITH HOOK ABOVE */ if (c == 0x1ECA) { F[0] = 0x1ECB; return; } /* LATIN CAPITAL LETTER I WITH DOT BELOW */ if (c == 0x1ECC) { F[0] = 0x1ECD; return; } /* LATIN CAPITAL LETTER O WITH DOT BELOW */ if (c == 0x1ECE) { F[0] = 0x1ECF; return; } /* LATIN CAPITAL LETTER O WITH HOOK ABOVE */ if (c == 0x1ED0) { F[0] = 0x1ED1; return; } /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE */ if (c == 0x1ED2) { F[0] = 0x1ED3; return; } /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE */ if (c == 0x1ED4) { F[0] = 0x1ED5; return; } /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */ if (c == 0x1ED6) { F[0] = 0x1ED7; return; } /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE */ if (c == 0x1ED8) { F[0] = 0x1ED9; return; } /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW */ if (c == 0x1EDA) { F[0] = 0x1EDB; return; } /* LATIN CAPITAL LETTER O WITH HORN AND ACUTE */ if (c == 0x1EDC) { F[0] = 0x1EDD; return; } /* LATIN CAPITAL LETTER O WITH HORN AND GRAVE */ if (c == 0x1EDE) { F[0] = 0x1EDF; return; } /* LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE */ if (c == 0x1EE0) { F[0] = 0x1EE1; return; } /* LATIN CAPITAL LETTER O WITH HORN AND TILDE */ if (c == 0x1EE2) { F[0] = 0x1EE3; return; } /* LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW */ if (c == 0x1EE4) { F[0] = 0x1EE5; return; } /* LATIN CAPITAL LETTER U WITH DOT BELOW */ if (c == 0x1EE6) { F[0] = 0x1EE7; return; } /* LATIN CAPITAL LETTER U WITH HOOK ABOVE */ if (c == 0x1EE8) { F[0] = 0x1EE9; return; } /* LATIN CAPITAL LETTER U WITH HORN AND ACUTE */ if (c == 0x1EEA) { F[0] = 0x1EEB; return; } /* LATIN CAPITAL LETTER U WITH HORN AND GRAVE */ if (c == 0x1EEC) { F[0] = 0x1EED; return; } /* LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE */ if (c == 0x1EEE) { F[0] = 0x1EEF; return; } /* LATIN CAPITAL LETTER U WITH HORN AND TILDE */ if (c == 0x1EF0) { F[0] = 0x1EF1; return; } /* LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW */ if (c == 0x1EF2) { F[0] = 0x1EF3; return; } /* LATIN CAPITAL LETTER Y WITH GRAVE */ if (c == 0x1EF4) { F[0] = 0x1EF5; return; } /* LATIN CAPITAL LETTER Y WITH DOT BELOW */ if (c == 0x1EF6) { F[0] = 0x1EF7; return; } /* LATIN CAPITAL LETTER Y WITH HOOK ABOVE */ if (c == 0x1EF8) { F[0] = 0x1EF9; return; } /* LATIN CAPITAL LETTER Y WITH TILDE */ if (c == 0x1EFA) { F[0] = 0x1EFB; return; } /* LATIN CAPITAL LETTER MIDDLE-WELSH LL */ if (c == 0x1EFC) { F[0] = 0x1EFD; return; } /* LATIN CAPITAL LETTER MIDDLE-WELSH V */ if (c == 0x1EFE) { F[0] = 0x1EFF; return; } /* LATIN CAPITAL LETTER Y WITH LOOP */ if ((c >= 0x1F08) && (c <= 0x1F0F)) { F[0] = 0x1F00 + (c - 0x1F08); return; } /* GREEK CAPITAL LETTER ALPHA WITH PSILI to GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI */ if ((c >= 0x1F18) && (c <= 0x1F1D)) { F[0] = 0x1F10 + (c - 0x1F18); return; } /* GREEK CAPITAL LETTER EPSILON WITH PSILI to GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA */ if ((c >= 0x1F28) && (c <= 0x1F2F)) { F[0] = 0x1F20 + (c - 0x1F28); return; } /* GREEK CAPITAL LETTER ETA WITH PSILI to GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI */ if ((c >= 0x1F38) && (c <= 0x1F3F)) { F[0] = 0x1F30 + (c - 0x1F38); return; } /* GREEK CAPITAL LETTER IOTA WITH PSILI to GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI */ if ((c >= 0x1F48) && (c <= 0x1F4D)) { F[0] = 0x1F40 + (c - 0x1F48); return; } /* GREEK CAPITAL LETTER OMICRON WITH PSILI to GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA */ if (c == 0x1F50) { F[0] = 0x03C5; F[1] = 0x0313; return; } /* GREEK SMALL LETTER UPSILON WITH PSILI */ if (c == 0x1F52) { F[0] = 0x03C5; F[1] = 0x0313; F[2] = 0x0300; return; } /* GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA */ if (c == 0x1F54) { F[0] = 0x03C5; F[1] = 0x0313; F[2] = 0x0301; return; } /* GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA */ if (c == 0x1F56) { F[0] = 0x03C5; F[1] = 0x0313; F[2] = 0x0342; return; } /* GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI */ if (c == 0x1F59) { F[0] = 0x1F51; return; } /* GREEK CAPITAL LETTER UPSILON WITH DASIA */ if (c == 0x1F5B) { F[0] = 0x1F53; return; } /* GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA */ if (c == 0x1F5D) { F[0] = 0x1F55; return; } /* GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA */ if (c == 0x1F5F) { F[0] = 0x1F57; return; } /* GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI */ if ((c >= 0x1F68) && (c <= 0x1F6F)) { F[0] = 0x1F60 + (c - 0x1F68); return; } /* GREEK CAPITAL LETTER OMEGA WITH PSILI to GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI */ if (c == 0x1F80) { F[0] = 0x1F00; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI */ if (c == 0x1F81) { F[0] = 0x1F01; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI */ if (c == 0x1F82) { F[0] = 0x1F02; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI */ if (c == 0x1F83) { F[0] = 0x1F03; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI */ if (c == 0x1F84) { F[0] = 0x1F04; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI */ if (c == 0x1F85) { F[0] = 0x1F05; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI */ if (c == 0x1F86) { F[0] = 0x1F06; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */ if (c == 0x1F87) { F[0] = 0x1F07; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */ if (c == 0x1F88) { F[0] = 0x1F00; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI */ if (c == 0x1F89) { F[0] = 0x1F01; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI */ if (c == 0x1F8A) { F[0] = 0x1F02; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI */ if (c == 0x1F8B) { F[0] = 0x1F03; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI */ if (c == 0x1F8C) { F[0] = 0x1F04; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI */ if (c == 0x1F8D) { F[0] = 0x1F05; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI */ if (c == 0x1F8E) { F[0] = 0x1F06; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */ if (c == 0x1F8F) { F[0] = 0x1F07; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */ if (c == 0x1F90) { F[0] = 0x1F20; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI */ if (c == 0x1F91) { F[0] = 0x1F21; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI */ if (c == 0x1F92) { F[0] = 0x1F22; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI */ if (c == 0x1F93) { F[0] = 0x1F23; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI */ if (c == 0x1F94) { F[0] = 0x1F24; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI */ if (c == 0x1F95) { F[0] = 0x1F25; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI */ if (c == 0x1F96) { F[0] = 0x1F26; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */ if (c == 0x1F97) { F[0] = 0x1F27; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */ if (c == 0x1F98) { F[0] = 0x1F20; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI */ if (c == 0x1F99) { F[0] = 0x1F21; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI */ if (c == 0x1F9A) { F[0] = 0x1F22; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI */ if (c == 0x1F9B) { F[0] = 0x1F23; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI */ if (c == 0x1F9C) { F[0] = 0x1F24; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI */ if (c == 0x1F9D) { F[0] = 0x1F25; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI */ if (c == 0x1F9E) { F[0] = 0x1F26; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */ if (c == 0x1F9F) { F[0] = 0x1F27; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */ if (c == 0x1FA0) { F[0] = 0x1F60; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI */ if (c == 0x1FA1) { F[0] = 0x1F61; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI */ if (c == 0x1FA2) { F[0] = 0x1F62; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI */ if (c == 0x1FA3) { F[0] = 0x1F63; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI */ if (c == 0x1FA4) { F[0] = 0x1F64; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI */ if (c == 0x1FA5) { F[0] = 0x1F65; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI */ if (c == 0x1FA6) { F[0] = 0x1F66; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */ if (c == 0x1FA7) { F[0] = 0x1F67; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */ if (c == 0x1FA8) { F[0] = 0x1F60; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI */ if (c == 0x1FA9) { F[0] = 0x1F61; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI */ if (c == 0x1FAA) { F[0] = 0x1F62; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI */ if (c == 0x1FAB) { F[0] = 0x1F63; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI */ if (c == 0x1FAC) { F[0] = 0x1F64; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI */ if (c == 0x1FAD) { F[0] = 0x1F65; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI */ if (c == 0x1FAE) { F[0] = 0x1F66; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */ if (c == 0x1FAF) { F[0] = 0x1F67; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */ if (c == 0x1FB2) { F[0] = 0x1F70; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI */ if (c == 0x1FB3) { F[0] = 0x03B1; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI */ if (c == 0x1FB4) { F[0] = 0x03AC; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI */ if (c == 0x1FB6) { F[0] = 0x03B1; F[1] = 0x0342; return; } /* GREEK SMALL LETTER ALPHA WITH PERISPOMENI */ if (c == 0x1FB7) { F[0] = 0x03B1; F[1] = 0x0342; F[2] = 0x03B9; return; } /* GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI */ if (c == 0x1FB8) { F[0] = 0x1FB0; return; } /* GREEK CAPITAL LETTER ALPHA WITH VRACHY */ if (c == 0x1FB9) { F[0] = 0x1FB1; return; } /* GREEK CAPITAL LETTER ALPHA WITH MACRON */ if (c == 0x1FBA) { F[0] = 0x1F70; return; } /* GREEK CAPITAL LETTER ALPHA WITH VARIA */ if (c == 0x1FBB) { F[0] = 0x1F71; return; } /* GREEK CAPITAL LETTER ALPHA WITH OXIA */ if (c == 0x1FBC) { F[0] = 0x03B1; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI */ if (c == 0x1FBE) { F[0] = 0x03B9; return; } /* GREEK PROSGEGRAMMENI */ if (c == 0x1FC2) { F[0] = 0x1F74; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI */ if (c == 0x1FC3) { F[0] = 0x03B7; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI */ if (c == 0x1FC4) { F[0] = 0x03AE; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI */ if (c == 0x1FC6) { F[0] = 0x03B7; F[1] = 0x0342; return; } /* GREEK SMALL LETTER ETA WITH PERISPOMENI */ if (c == 0x1FC7) { F[0] = 0x03B7; F[1] = 0x0342; F[2] = 0x03B9; return; } /* GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI */ if ((c >= 0x1FC8) && (c <= 0x1FCB)) { F[0] = 0x1F72 + (c - 0x1FC8); return; } /* GREEK CAPITAL LETTER EPSILON WITH VARIA to GREEK CAPITAL LETTER ETA WITH OXIA */ if (c == 0x1FCC) { F[0] = 0x03B7; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI */ if (c == 0x1FD2) { F[0] = 0x03B9; F[1] = 0x0308; F[2] = 0x0300; return; } /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA */ if (c == 0x1FD3) { F[0] = 0x03B9; F[1] = 0x0308; F[2] = 0x0301; return; } /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA */ if (c == 0x1FD6) { F[0] = 0x03B9; F[1] = 0x0342; return; } /* GREEK SMALL LETTER IOTA WITH PERISPOMENI */ if (c == 0x1FD7) { F[0] = 0x03B9; F[1] = 0x0308; F[2] = 0x0342; return; } /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI */ if (c == 0x1FD8) { F[0] = 0x1FD0; return; } /* GREEK CAPITAL LETTER IOTA WITH VRACHY */ if (c == 0x1FD9) { F[0] = 0x1FD1; return; } /* GREEK CAPITAL LETTER IOTA WITH MACRON */ if (c == 0x1FDA) { F[0] = 0x1F76; return; } /* GREEK CAPITAL LETTER IOTA WITH VARIA */ if (c == 0x1FDB) { F[0] = 0x1F77; return; } /* GREEK CAPITAL LETTER IOTA WITH OXIA */ if (c == 0x1FE2) { F[0] = 0x03C5; F[1] = 0x0308; F[2] = 0x0300; return; } /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA */ if (c == 0x1FE3) { F[0] = 0x03C5; F[1] = 0x0308; F[2] = 0x0301; return; } /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA */ if (c == 0x1FE4) { F[0] = 0x03C1; F[1] = 0x0313; return; } /* GREEK SMALL LETTER RHO WITH PSILI */ if (c == 0x1FE6) { F[0] = 0x03C5; F[1] = 0x0342; return; } /* GREEK SMALL LETTER UPSILON WITH PERISPOMENI */ if (c == 0x1FE7) { F[0] = 0x03C5; F[1] = 0x0308; F[2] = 0x0342; return; } /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI */ if (c == 0x1FE8) { F[0] = 0x1FE0; return; } /* GREEK CAPITAL LETTER UPSILON WITH VRACHY */ if (c == 0x1FE9) { F[0] = 0x1FE1; return; } /* GREEK CAPITAL LETTER UPSILON WITH MACRON */ if (c == 0x1FEA) { F[0] = 0x1F7A; return; } /* GREEK CAPITAL LETTER UPSILON WITH VARIA */ if (c == 0x1FEB) { F[0] = 0x1F7B; return; } /* GREEK CAPITAL LETTER UPSILON WITH OXIA */ if (c == 0x1FEC) { F[0] = 0x1FE5; return; } /* GREEK CAPITAL LETTER RHO WITH DASIA */ if (c == 0x1FF2) { F[0] = 0x1F7C; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI */ if (c == 0x1FF3) { F[0] = 0x03C9; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI */ if (c == 0x1FF4) { F[0] = 0x03CE; F[1] = 0x03B9; return; } /* GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI */ if (c == 0x1FF6) { F[0] = 0x03C9; F[1] = 0x0342; return; } /* GREEK SMALL LETTER OMEGA WITH PERISPOMENI */ if (c == 0x1FF7) { F[0] = 0x03C9; F[1] = 0x0342; F[2] = 0x03B9; return; } /* GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI */ if (c == 0x1FF8) { F[0] = 0x1F78; return; } /* GREEK CAPITAL LETTER OMICRON WITH VARIA */ if (c == 0x1FF9) { F[0] = 0x1F79; return; } /* GREEK CAPITAL LETTER OMICRON WITH OXIA */ if (c == 0x1FFA) { F[0] = 0x1F7C; return; } /* GREEK CAPITAL LETTER OMEGA WITH VARIA */ if (c == 0x1FFB) { F[0] = 0x1F7D; return; } /* GREEK CAPITAL LETTER OMEGA WITH OXIA */ if (c == 0x1FFC) { F[0] = 0x03C9; F[1] = 0x03B9; return; } /* GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI */ } else if ((c >= 0x2000) && (c < 0x3000)) { if (c == 0x2126) { F[0] = 0x03C9; return; } /* OHM SIGN */ if (c == 0x212A) { F[0] = 0x006B; return; } /* KELVIN SIGN */ if (c == 0x212B) { F[0] = 0x00E5; return; } /* ANGSTROM SIGN */ if (c == 0x2132) { F[0] = 0x214E; return; } /* TURNED CAPITAL F */ if ((c >= 0x2160) && (c <= 0x216F)) { F[0] = 0x2170 + (c - 0x2160); return; } /* ROMAN NUMERAL ONE to ROMAN NUMERAL ONE THOUSAND */ if (c == 0x2183) { F[0] = 0x2184; return; } /* ROMAN NUMERAL REVERSED ONE HUNDRED */ if ((c >= 0x24B6) && (c <= 0x24CF)) { F[0] = 0x24D0 + (c - 0x24B6); return; } /* CIRCLED LATIN CAPITAL LETTER A to CIRCLED LATIN CAPITAL LETTER Z */ if ((c >= 0x2C00) && (c <= 0x2C2F)) { F[0] = 0x2C30 + (c - 0x2C00); return; } /* GLAGOLITIC CAPITAL LETTER AZU to GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI */ if (c == 0x2C60) { F[0] = 0x2C61; return; } /* LATIN CAPITAL LETTER L WITH DOUBLE BAR */ if (c == 0x2C62) { F[0] = 0x026B; return; } /* LATIN CAPITAL LETTER L WITH MIDDLE TILDE */ if (c == 0x2C63) { F[0] = 0x1D7D; return; } /* LATIN CAPITAL LETTER P WITH STROKE */ if (c == 0x2C64) { F[0] = 0x027D; return; } /* LATIN CAPITAL LETTER R WITH TAIL */ if (c == 0x2C67) { F[0] = 0x2C68; return; } /* LATIN CAPITAL LETTER H WITH DESCENDER */ if (c == 0x2C69) { F[0] = 0x2C6A; return; } /* LATIN CAPITAL LETTER K WITH DESCENDER */ if (c == 0x2C6B) { F[0] = 0x2C6C; return; } /* LATIN CAPITAL LETTER Z WITH DESCENDER */ if (c == 0x2C6D) { F[0] = 0x0251; return; } /* LATIN CAPITAL LETTER ALPHA */ if (c == 0x2C6E) { F[0] = 0x0271; return; } /* LATIN CAPITAL LETTER M WITH HOOK */ if (c == 0x2C6F) { F[0] = 0x0250; return; } /* LATIN CAPITAL LETTER TURNED A */ if (c == 0x2C70) { F[0] = 0x0252; return; } /* LATIN CAPITAL LETTER TURNED ALPHA */ if (c == 0x2C72) { F[0] = 0x2C73; return; } /* LATIN CAPITAL LETTER W WITH HOOK */ if (c == 0x2C75) { F[0] = 0x2C76; return; } /* LATIN CAPITAL LETTER HALF H */ if (c == 0x2C7E) { F[0] = 0x023F; return; } /* LATIN CAPITAL LETTER S WITH SWASH TAIL */ if (c == 0x2C7F) { F[0] = 0x0240; return; } /* LATIN CAPITAL LETTER Z WITH SWASH TAIL */ if (c == 0x2C80) { F[0] = 0x2C81; return; } /* COPTIC CAPITAL LETTER ALFA */ if (c == 0x2C82) { F[0] = 0x2C83; return; } /* COPTIC CAPITAL LETTER VIDA */ if (c == 0x2C84) { F[0] = 0x2C85; return; } /* COPTIC CAPITAL LETTER GAMMA */ if (c == 0x2C86) { F[0] = 0x2C87; return; } /* COPTIC CAPITAL LETTER DALDA */ if (c == 0x2C88) { F[0] = 0x2C89; return; } /* COPTIC CAPITAL LETTER EIE */ if (c == 0x2C8A) { F[0] = 0x2C8B; return; } /* COPTIC CAPITAL LETTER SOU */ if (c == 0x2C8C) { F[0] = 0x2C8D; return; } /* COPTIC CAPITAL LETTER ZATA */ if (c == 0x2C8E) { F[0] = 0x2C8F; return; } /* COPTIC CAPITAL LETTER HATE */ if (c == 0x2C90) { F[0] = 0x2C91; return; } /* COPTIC CAPITAL LETTER THETHE */ if (c == 0x2C92) { F[0] = 0x2C93; return; } /* COPTIC CAPITAL LETTER IAUDA */ if (c == 0x2C94) { F[0] = 0x2C95; return; } /* COPTIC CAPITAL LETTER KAPA */ if (c == 0x2C96) { F[0] = 0x2C97; return; } /* COPTIC CAPITAL LETTER LAULA */ if (c == 0x2C98) { F[0] = 0x2C99; return; } /* COPTIC CAPITAL LETTER MI */ if (c == 0x2C9A) { F[0] = 0x2C9B; return; } /* COPTIC CAPITAL LETTER NI */ if (c == 0x2C9C) { F[0] = 0x2C9D; return; } /* COPTIC CAPITAL LETTER KSI */ if (c == 0x2C9E) { F[0] = 0x2C9F; return; } /* COPTIC CAPITAL LETTER O */ if (c == 0x2CA0) { F[0] = 0x2CA1; return; } /* COPTIC CAPITAL LETTER PI */ if (c == 0x2CA2) { F[0] = 0x2CA3; return; } /* COPTIC CAPITAL LETTER RO */ if (c == 0x2CA4) { F[0] = 0x2CA5; return; } /* COPTIC CAPITAL LETTER SIMA */ if (c == 0x2CA6) { F[0] = 0x2CA7; return; } /* COPTIC CAPITAL LETTER TAU */ if (c == 0x2CA8) { F[0] = 0x2CA9; return; } /* COPTIC CAPITAL LETTER UA */ if (c == 0x2CAA) { F[0] = 0x2CAB; return; } /* COPTIC CAPITAL LETTER FI */ if (c == 0x2CAC) { F[0] = 0x2CAD; return; } /* COPTIC CAPITAL LETTER KHI */ if (c == 0x2CAE) { F[0] = 0x2CAF; return; } /* COPTIC CAPITAL LETTER PSI */ if (c == 0x2CB0) { F[0] = 0x2CB1; return; } /* COPTIC CAPITAL LETTER OOU */ if (c == 0x2CB2) { F[0] = 0x2CB3; return; } /* COPTIC CAPITAL LETTER DIALECT-P ALEF */ if (c == 0x2CB4) { F[0] = 0x2CB5; return; } /* COPTIC CAPITAL LETTER OLD COPTIC AIN */ if (c == 0x2CB6) { F[0] = 0x2CB7; return; } /* COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE */ if (c == 0x2CB8) { F[0] = 0x2CB9; return; } /* COPTIC CAPITAL LETTER DIALECT-P KAPA */ if (c == 0x2CBA) { F[0] = 0x2CBB; return; } /* COPTIC CAPITAL LETTER DIALECT-P NI */ if (c == 0x2CBC) { F[0] = 0x2CBD; return; } /* COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI */ if (c == 0x2CBE) { F[0] = 0x2CBF; return; } /* COPTIC CAPITAL LETTER OLD COPTIC OOU */ if (c == 0x2CC0) { F[0] = 0x2CC1; return; } /* COPTIC CAPITAL LETTER SAMPI */ if (c == 0x2CC2) { F[0] = 0x2CC3; return; } /* COPTIC CAPITAL LETTER CROSSED SHEI */ if (c == 0x2CC4) { F[0] = 0x2CC5; return; } /* COPTIC CAPITAL LETTER OLD COPTIC SHEI */ if (c == 0x2CC6) { F[0] = 0x2CC7; return; } /* COPTIC CAPITAL LETTER OLD COPTIC ESH */ if (c == 0x2CC8) { F[0] = 0x2CC9; return; } /* COPTIC CAPITAL LETTER AKHMIMIC KHEI */ if (c == 0x2CCA) { F[0] = 0x2CCB; return; } /* COPTIC CAPITAL LETTER DIALECT-P HORI */ if (c == 0x2CCC) { F[0] = 0x2CCD; return; } /* COPTIC CAPITAL LETTER OLD COPTIC HORI */ if (c == 0x2CCE) { F[0] = 0x2CCF; return; } /* COPTIC CAPITAL LETTER OLD COPTIC HA */ if (c == 0x2CD0) { F[0] = 0x2CD1; return; } /* COPTIC CAPITAL LETTER L-SHAPED HA */ if (c == 0x2CD2) { F[0] = 0x2CD3; return; } /* COPTIC CAPITAL LETTER OLD COPTIC HEI */ if (c == 0x2CD4) { F[0] = 0x2CD5; return; } /* COPTIC CAPITAL LETTER OLD COPTIC HAT */ if (c == 0x2CD6) { F[0] = 0x2CD7; return; } /* COPTIC CAPITAL LETTER OLD COPTIC GANGIA */ if (c == 0x2CD8) { F[0] = 0x2CD9; return; } /* COPTIC CAPITAL LETTER OLD COPTIC DJA */ if (c == 0x2CDA) { F[0] = 0x2CDB; return; } /* COPTIC CAPITAL LETTER OLD COPTIC SHIMA */ if (c == 0x2CDC) { F[0] = 0x2CDD; return; } /* COPTIC CAPITAL LETTER OLD NUBIAN SHIMA */ if (c == 0x2CDE) { F[0] = 0x2CDF; return; } /* COPTIC CAPITAL LETTER OLD NUBIAN NGI */ if (c == 0x2CE0) { F[0] = 0x2CE1; return; } /* COPTIC CAPITAL LETTER OLD NUBIAN NYI */ if (c == 0x2CE2) { F[0] = 0x2CE3; return; } /* COPTIC CAPITAL LETTER OLD NUBIAN WAU */ if (c == 0x2CEB) { F[0] = 0x2CEC; return; } /* COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI */ if (c == 0x2CED) { F[0] = 0x2CEE; return; } /* COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA */ if (c == 0x2CF2) { F[0] = 0x2CF3; return; } /* COPTIC CAPITAL LETTER BOHAIRIC KHEI */ } else if (c >= 0x3000) { if (c == 0xA640) { F[0] = 0xA641; return; } /* CYRILLIC CAPITAL LETTER ZEMLYA */ if (c == 0xA642) { F[0] = 0xA643; return; } /* CYRILLIC CAPITAL LETTER DZELO */ if (c == 0xA644) { F[0] = 0xA645; return; } /* CYRILLIC CAPITAL LETTER REVERSED DZE */ if (c == 0xA646) { F[0] = 0xA647; return; } /* CYRILLIC CAPITAL LETTER IOTA */ if (c == 0xA648) { F[0] = 0xA649; return; } /* CYRILLIC CAPITAL LETTER DJERV */ if (c == 0xA64A) { F[0] = 0xA64B; return; } /* CYRILLIC CAPITAL LETTER MONOGRAPH UK */ if (c == 0xA64C) { F[0] = 0xA64D; return; } /* CYRILLIC CAPITAL LETTER BROAD OMEGA */ if (c == 0xA64E) { F[0] = 0xA64F; return; } /* CYRILLIC CAPITAL LETTER NEUTRAL YER */ if (c == 0xA650) { F[0] = 0xA651; return; } /* CYRILLIC CAPITAL LETTER YERU WITH BACK YER */ if (c == 0xA652) { F[0] = 0xA653; return; } /* CYRILLIC CAPITAL LETTER IOTIFIED YAT */ if (c == 0xA654) { F[0] = 0xA655; return; } /* CYRILLIC CAPITAL LETTER REVERSED YU */ if (c == 0xA656) { F[0] = 0xA657; return; } /* CYRILLIC CAPITAL LETTER IOTIFIED A */ if (c == 0xA658) { F[0] = 0xA659; return; } /* CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS */ if (c == 0xA65A) { F[0] = 0xA65B; return; } /* CYRILLIC CAPITAL LETTER BLENDED YUS */ if (c == 0xA65C) { F[0] = 0xA65D; return; } /* CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS */ if (c == 0xA65E) { F[0] = 0xA65F; return; } /* CYRILLIC CAPITAL LETTER YN */ if (c == 0xA660) { F[0] = 0xA661; return; } /* CYRILLIC CAPITAL LETTER REVERSED TSE */ if (c == 0xA662) { F[0] = 0xA663; return; } /* CYRILLIC CAPITAL LETTER SOFT DE */ if (c == 0xA664) { F[0] = 0xA665; return; } /* CYRILLIC CAPITAL LETTER SOFT EL */ if (c == 0xA666) { F[0] = 0xA667; return; } /* CYRILLIC CAPITAL LETTER SOFT EM */ if (c == 0xA668) { F[0] = 0xA669; return; } /* CYRILLIC CAPITAL LETTER MONOCULAR O */ if (c == 0xA66A) { F[0] = 0xA66B; return; } /* CYRILLIC CAPITAL LETTER BINOCULAR O */ if (c == 0xA66C) { F[0] = 0xA66D; return; } /* CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O */ if (c == 0xA680) { F[0] = 0xA681; return; } /* CYRILLIC CAPITAL LETTER DWE */ if (c == 0xA682) { F[0] = 0xA683; return; } /* CYRILLIC CAPITAL LETTER DZWE */ if (c == 0xA684) { F[0] = 0xA685; return; } /* CYRILLIC CAPITAL LETTER ZHWE */ if (c == 0xA686) { F[0] = 0xA687; return; } /* CYRILLIC CAPITAL LETTER CCHE */ if (c == 0xA688) { F[0] = 0xA689; return; } /* CYRILLIC CAPITAL LETTER DZZE */ if (c == 0xA68A) { F[0] = 0xA68B; return; } /* CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK */ if (c == 0xA68C) { F[0] = 0xA68D; return; } /* CYRILLIC CAPITAL LETTER TWE */ if (c == 0xA68E) { F[0] = 0xA68F; return; } /* CYRILLIC CAPITAL LETTER TSWE */ if (c == 0xA690) { F[0] = 0xA691; return; } /* CYRILLIC CAPITAL LETTER TSSE */ if (c == 0xA692) { F[0] = 0xA693; return; } /* CYRILLIC CAPITAL LETTER TCHE */ if (c == 0xA694) { F[0] = 0xA695; return; } /* CYRILLIC CAPITAL LETTER HWE */ if (c == 0xA696) { F[0] = 0xA697; return; } /* CYRILLIC CAPITAL LETTER SHWE */ if (c == 0xA698) { F[0] = 0xA699; return; } /* CYRILLIC CAPITAL LETTER DOUBLE O */ if (c == 0xA69A) { F[0] = 0xA69B; return; } /* CYRILLIC CAPITAL LETTER CROSSED O */ if (c == 0xA722) { F[0] = 0xA723; return; } /* LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF */ if (c == 0xA724) { F[0] = 0xA725; return; } /* LATIN CAPITAL LETTER EGYPTOLOGICAL AIN */ if (c == 0xA726) { F[0] = 0xA727; return; } /* LATIN CAPITAL LETTER HENG */ if (c == 0xA728) { F[0] = 0xA729; return; } /* LATIN CAPITAL LETTER TZ */ if (c == 0xA72A) { F[0] = 0xA72B; return; } /* LATIN CAPITAL LETTER TRESILLO */ if (c == 0xA72C) { F[0] = 0xA72D; return; } /* LATIN CAPITAL LETTER CUATRILLO */ if (c == 0xA72E) { F[0] = 0xA72F; return; } /* LATIN CAPITAL LETTER CUATRILLO WITH COMMA */ if (c == 0xA732) { F[0] = 0xA733; return; } /* LATIN CAPITAL LETTER AA */ if (c == 0xA734) { F[0] = 0xA735; return; } /* LATIN CAPITAL LETTER AO */ if (c == 0xA736) { F[0] = 0xA737; return; } /* LATIN CAPITAL LETTER AU */ if (c == 0xA738) { F[0] = 0xA739; return; } /* LATIN CAPITAL LETTER AV */ if (c == 0xA73A) { F[0] = 0xA73B; return; } /* LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR */ if (c == 0xA73C) { F[0] = 0xA73D; return; } /* LATIN CAPITAL LETTER AY */ if (c == 0xA73E) { F[0] = 0xA73F; return; } /* LATIN CAPITAL LETTER REVERSED C WITH DOT */ if (c == 0xA740) { F[0] = 0xA741; return; } /* LATIN CAPITAL LETTER K WITH STROKE */ if (c == 0xA742) { F[0] = 0xA743; return; } /* LATIN CAPITAL LETTER K WITH DIAGONAL STROKE */ if (c == 0xA744) { F[0] = 0xA745; return; } /* LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE */ if (c == 0xA746) { F[0] = 0xA747; return; } /* LATIN CAPITAL LETTER BROKEN L */ if (c == 0xA748) { F[0] = 0xA749; return; } /* LATIN CAPITAL LETTER L WITH HIGH STROKE */ if (c == 0xA74A) { F[0] = 0xA74B; return; } /* LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY */ if (c == 0xA74C) { F[0] = 0xA74D; return; } /* LATIN CAPITAL LETTER O WITH LOOP */ if (c == 0xA74E) { F[0] = 0xA74F; return; } /* LATIN CAPITAL LETTER OO */ if (c == 0xA750) { F[0] = 0xA751; return; } /* LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER */ if (c == 0xA752) { F[0] = 0xA753; return; } /* LATIN CAPITAL LETTER P WITH FLOURISH */ if (c == 0xA754) { F[0] = 0xA755; return; } /* LATIN CAPITAL LETTER P WITH SQUIRREL TAIL */ if (c == 0xA756) { F[0] = 0xA757; return; } /* LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER */ if (c == 0xA758) { F[0] = 0xA759; return; } /* LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE */ if (c == 0xA75A) { F[0] = 0xA75B; return; } /* LATIN CAPITAL LETTER R ROTUNDA */ if (c == 0xA75C) { F[0] = 0xA75D; return; } /* LATIN CAPITAL LETTER RUM ROTUNDA */ if (c == 0xA75E) { F[0] = 0xA75F; return; } /* LATIN CAPITAL LETTER V WITH DIAGONAL STROKE */ if (c == 0xA760) { F[0] = 0xA761; return; } /* LATIN CAPITAL LETTER VY */ if (c == 0xA762) { F[0] = 0xA763; return; } /* LATIN CAPITAL LETTER VISIGOTHIC Z */ if (c == 0xA764) { F[0] = 0xA765; return; } /* LATIN CAPITAL LETTER THORN WITH STROKE */ if (c == 0xA766) { F[0] = 0xA767; return; } /* LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER */ if (c == 0xA768) { F[0] = 0xA769; return; } /* LATIN CAPITAL LETTER VEND */ if (c == 0xA76A) { F[0] = 0xA76B; return; } /* LATIN CAPITAL LETTER ET */ if (c == 0xA76C) { F[0] = 0xA76D; return; } /* LATIN CAPITAL LETTER IS */ if (c == 0xA76E) { F[0] = 0xA76F; return; } /* LATIN CAPITAL LETTER CON */ if (c == 0xA779) { F[0] = 0xA77A; return; } /* LATIN CAPITAL LETTER INSULAR D */ if (c == 0xA77B) { F[0] = 0xA77C; return; } /* LATIN CAPITAL LETTER INSULAR F */ if (c == 0xA77D) { F[0] = 0x1D79; return; } /* LATIN CAPITAL LETTER INSULAR G */ if (c == 0xA77E) { F[0] = 0xA77F; return; } /* LATIN CAPITAL LETTER TURNED INSULAR G */ if (c == 0xA780) { F[0] = 0xA781; return; } /* LATIN CAPITAL LETTER TURNED L */ if (c == 0xA782) { F[0] = 0xA783; return; } /* LATIN CAPITAL LETTER INSULAR R */ if (c == 0xA784) { F[0] = 0xA785; return; } /* LATIN CAPITAL LETTER INSULAR S */ if (c == 0xA786) { F[0] = 0xA787; return; } /* LATIN CAPITAL LETTER INSULAR T */ if (c == 0xA78B) { F[0] = 0xA78C; return; } /* LATIN CAPITAL LETTER SALTILLO */ if (c == 0xA78D) { F[0] = 0x0265; return; } /* LATIN CAPITAL LETTER TURNED H */ if (c == 0xA790) { F[0] = 0xA791; return; } /* LATIN CAPITAL LETTER N WITH DESCENDER */ if (c == 0xA792) { F[0] = 0xA793; return; } /* LATIN CAPITAL LETTER C WITH BAR */ if (c == 0xA796) { F[0] = 0xA797; return; } /* LATIN CAPITAL LETTER B WITH FLOURISH */ if (c == 0xA798) { F[0] = 0xA799; return; } /* LATIN CAPITAL LETTER F WITH STROKE */ if (c == 0xA79A) { F[0] = 0xA79B; return; } /* LATIN CAPITAL LETTER VOLAPUK AE */ if (c == 0xA79C) { F[0] = 0xA79D; return; } /* LATIN CAPITAL LETTER VOLAPUK OE */ if (c == 0xA79E) { F[0] = 0xA79F; return; } /* LATIN CAPITAL LETTER VOLAPUK UE */ if (c == 0xA7A0) { F[0] = 0xA7A1; return; } /* LATIN CAPITAL LETTER G WITH OBLIQUE STROKE */ if (c == 0xA7A2) { F[0] = 0xA7A3; return; } /* LATIN CAPITAL LETTER K WITH OBLIQUE STROKE */ if (c == 0xA7A4) { F[0] = 0xA7A5; return; } /* LATIN CAPITAL LETTER N WITH OBLIQUE STROKE */ if (c == 0xA7A6) { F[0] = 0xA7A7; return; } /* LATIN CAPITAL LETTER R WITH OBLIQUE STROKE */ if (c == 0xA7A8) { F[0] = 0xA7A9; return; } /* LATIN CAPITAL LETTER S WITH OBLIQUE STROKE */ if (c == 0xA7AA) { F[0] = 0x0266; return; } /* LATIN CAPITAL LETTER H WITH HOOK */ if (c == 0xA7AB) { F[0] = 0x025C; return; } /* LATIN CAPITAL LETTER REVERSED OPEN E */ if (c == 0xA7AC) { F[0] = 0x0261; return; } /* LATIN CAPITAL LETTER SCRIPT G */ if (c == 0xA7AD) { F[0] = 0x026C; return; } /* LATIN CAPITAL LETTER L WITH BELT */ if (c == 0xA7AE) { F[0] = 0x026A; return; } /* LATIN CAPITAL LETTER SMALL CAPITAL I */ if (c == 0xA7B0) { F[0] = 0x029E; return; } /* LATIN CAPITAL LETTER TURNED K */ if (c == 0xA7B1) { F[0] = 0x0287; return; } /* LATIN CAPITAL LETTER TURNED T */ if (c == 0xA7B2) { F[0] = 0x029D; return; } /* LATIN CAPITAL LETTER J WITH CROSSED-TAIL */ if (c == 0xA7B3) { F[0] = 0xAB53; return; } /* LATIN CAPITAL LETTER CHI */ if (c == 0xA7B4) { F[0] = 0xA7B5; return; } /* LATIN CAPITAL LETTER BETA */ if (c == 0xA7B6) { F[0] = 0xA7B7; return; } /* LATIN CAPITAL LETTER OMEGA */ if (c == 0xA7B8) { F[0] = 0xA7B9; return; } /* LATIN CAPITAL LETTER U WITH STROKE */ if (c == 0xA7BA) { F[0] = 0xA7BB; return; } /* LATIN CAPITAL LETTER GLOTTAL A */ if (c == 0xA7BC) { F[0] = 0xA7BD; return; } /* LATIN CAPITAL LETTER GLOTTAL I */ if (c == 0xA7BE) { F[0] = 0xA7BF; return; } /* LATIN CAPITAL LETTER GLOTTAL U */ if (c == 0xA7C0) { F[0] = 0xA7C1; return; } /* LATIN CAPITAL LETTER OLD POLISH O */ if (c == 0xA7C2) { F[0] = 0xA7C3; return; } /* LATIN CAPITAL LETTER ANGLICANA W */ if (c == 0xA7C4) { F[0] = 0xA794; return; } /* LATIN CAPITAL LETTER C WITH PALATAL HOOK */ if (c == 0xA7C5) { F[0] = 0x0282; return; } /* LATIN CAPITAL LETTER S WITH HOOK */ if (c == 0xA7C6) { F[0] = 0x1D8E; return; } /* LATIN CAPITAL LETTER Z WITH PALATAL HOOK */ if (c == 0xA7C7) { F[0] = 0xA7C8; return; } /* LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY */ if (c == 0xA7C9) { F[0] = 0xA7CA; return; } /* LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY */ if (c == 0xA7D0) { F[0] = 0xA7D1; return; } /* LATIN CAPITAL LETTER CLOSED INSULAR G */ if (c == 0xA7D6) { F[0] = 0xA7D7; return; } /* LATIN CAPITAL LETTER MIDDLE SCOTS S */ if (c == 0xA7D8) { F[0] = 0xA7D9; return; } /* LATIN CAPITAL LETTER SIGMOID S */ if (c == 0xA7F5) { F[0] = 0xA7F6; return; } /* LATIN CAPITAL LETTER REVERSED HALF H */ if ((c >= 0xAB70) && (c <= 0xABBF)) { F[0] = 0x13A0 + (c - 0xAB70); return; } /* CHEROKEE SMALL LETTER A to CHEROKEE SMALL LETTER YA */ if (c == 0xFB00) { F[0] = 0x0066; F[1] = 0x0066; return; } /* LATIN SMALL LIGATURE FF */ if (c == 0xFB01) { F[0] = 0x0066; F[1] = 0x0069; return; } /* LATIN SMALL LIGATURE FI */ if (c == 0xFB02) { F[0] = 0x0066; F[1] = 0x006C; return; } /* LATIN SMALL LIGATURE FL */ if (c == 0xFB03) { F[0] = 0x0066; F[1] = 0x0066; F[2] = 0x0069; return; } /* LATIN SMALL LIGATURE FFI */ if (c == 0xFB04) { F[0] = 0x0066; F[1] = 0x0066; F[2] = 0x006C; return; } /* LATIN SMALL LIGATURE FFL */ if (c == 0xFB05) { F[0] = 0x0073; F[1] = 0x0074; return; } /* LATIN SMALL LIGATURE LONG S T */ if (c == 0xFB06) { F[0] = 0x0073; F[1] = 0x0074; return; } /* LATIN SMALL LIGATURE ST */ if (c == 0xFB13) { F[0] = 0x0574; F[1] = 0x0576; return; } /* ARMENIAN SMALL LIGATURE MEN NOW */ if (c == 0xFB14) { F[0] = 0x0574; F[1] = 0x0565; return; } /* ARMENIAN SMALL LIGATURE MEN ECH */ if (c == 0xFB15) { F[0] = 0x0574; F[1] = 0x056B; return; } /* ARMENIAN SMALL LIGATURE MEN INI */ if (c == 0xFB16) { F[0] = 0x057E; F[1] = 0x0576; return; } /* ARMENIAN SMALL LIGATURE VEW NOW */ if (c == 0xFB17) { F[0] = 0x0574; F[1] = 0x056D; return; } /* ARMENIAN SMALL LIGATURE MEN XEH */ if ((c >= 0xFF21) && (c <= 0xFF3A)) { F[0] = 0xFF41 + (c - 0xFF21); return; } /* FULLWIDTH LATIN CAPITAL LETTER A to FULLWIDTH LATIN CAPITAL LETTER Z */ if ((c >= 0x10400) && (c <= 0x10427)) { F[0] = 0x10428 + (c - 0x10400); return; } /* DESERET CAPITAL LETTER LONG I to DESERET CAPITAL LETTER EW */ if ((c >= 0x104B0) && (c <= 0x104D3)) { F[0] = 0x104D8 + (c - 0x104B0); return; } /* OSAGE CAPITAL LETTER A to OSAGE CAPITAL LETTER ZHA */ if ((c >= 0x10570) && (c <= 0x1057A)) { F[0] = 0x10597 + (c - 0x10570); return; } /* VITHKUQI CAPITAL LETTER A to VITHKUQI CAPITAL LETTER GA */ if ((c >= 0x1057C) && (c <= 0x1058A)) { F[0] = 0x105A3 + (c - 0x1057C); return; } /* VITHKUQI CAPITAL LETTER HA to VITHKUQI CAPITAL LETTER RE */ if ((c >= 0x1058C) && (c <= 0x10592)) { F[0] = 0x105B3 + (c - 0x1058C); return; } /* VITHKUQI CAPITAL LETTER SE to VITHKUQI CAPITAL LETTER XE */ if (c == 0x10594) { F[0] = 0x105BB; return; } /* VITHKUQI CAPITAL LETTER Y */ if (c == 0x10595) { F[0] = 0x105BC; return; } /* VITHKUQI CAPITAL LETTER ZE */ if ((c >= 0x10C80) && (c <= 0x10CB2)) { F[0] = 0x10CC0 + (c - 0x10C80); return; } /* OLD HUNGARIAN CAPITAL LETTER A to OLD HUNGARIAN CAPITAL LETTER US */ if ((c >= 0x118A0) && (c <= 0x118BF)) { F[0] = 0x118C0 + (c - 0x118A0); return; } /* WARANG CITI CAPITAL LETTER NGAA to WARANG CITI CAPITAL LETTER VIYO */ if ((c >= 0x16E40) && (c <= 0x16E5F)) { F[0] = 0x16E60 + (c - 0x16E40); return; } /* MEDEFAIDRIN CAPITAL LETTER M to MEDEFAIDRIN CAPITAL LETTER Y */ if ((c >= 0x1E900) && (c <= 0x1E921)) { F[0] = 0x1E922 + (c - 0x1E900); return; } /* ADLAM CAPITAL LETTER ALIF to ADLAM CAPITAL LETTER SHA */ } F[0] = c; return; }
int Characters::is_ASCII_letter(inchar32_t c) { if ((c >= 'a') && (c <= 'z')) return TRUE; if ((c >= 'A') && (c <= 'Z')) return TRUE; return FALSE; } int Characters::is_ASCII_digit(inchar32_t c) { if ((c >= '0') && (c <= '9')) return TRUE; return FALSE; } int Characters::is_control_character(inchar32_t c) { if ((c >= 0x0001) && (c <= 0x001f)) return TRUE; if (c == 0x007f) return TRUE; return FALSE; }
§9. Unicode composition. A routine which converts the Unicode combining accents with letters, sufficient correctly to handle all characters in the ZSCII set. Returns a combined character code, or 0 if there is no combining to be done.
inchar32_t Characters::combine_accent(inchar32_t accent, inchar32_t letter) { switch(accent) { case 0x0300: /* Unicode combining grave */ switch(letter) { case 'a': return 0xE0; case 'e': return 0xE8; case 'i': return 0xEC; case 'o': return 0xF2; case 'u': return 0xF9; case 'A': return 0xC0; case 'E': return 0xC8; case 'I': return 0xCC; case 'O': return 0xD2; case 'U': return 0xD9; } break; case 0x0301: /* Unicode combining acute */ switch(letter) { case 'a': return 0xE1; case 'e': return 0xE9; case 'i': return 0xED; case 'o': return 0xF3; case 'u': return 0xFA; case 'y': return 0xFF; case 'A': return 0xC1; case 'E': return 0xC9; case 'I': return 0xCD; case 'O': return 0xD3; case 'U': return 0xDA; } break; case 0x0302: /* Unicode combining circumflex */ switch(letter) { case 'a': return 0xE2; case 'e': return 0xEA; case 'i': return 0xEE; case 'o': return 0xF4; case 'u': return 0xFB; case 'A': return 0xC2; case 'E': return 0xCA; case 'I': return 0xCE; case 'O': return 0xD4; case 'U': return 0xDB; } break; case 0x0303: /* Unicode combining tilde */ switch(letter) { case 'a': return 0xE3; case 'n': return 0xF1; case 'o': return 0xF5; case 'A': return 0xC3; case 'N': return 0xD1; case 'O': return 0xD5; } break; case 0x0308: /* Unicode combining diaeresis */ switch(letter) { case 'a': return 0xE4; case 'e': return 0xEB; case 'u': return 0xFC; case 'o': return 0xF6; case 'i': return 0xEF; case 'A': return 0xC4; case 'E': return 0xCB; case 'U': return 0xDC; case 'O': return 0xD6; case 'I': return 0xCF; } break; case 0x0327: /* Unicode combining cedilla */ switch(letter) { case 'c': return 0xE7; case 'C': return 0xC7; } break; } return 0; }
§10. Accent stripping. It's occasionally useful to simplify text used as a filename by removing the more obvious accents from it.
inchar32_t Characters::make_filename_safe(inchar32_t charcode) { charcode = Characters::remove_accent(charcode); if (charcode >= 128) charcode = '-'; return charcode; }
inchar32_t Characters::remove_accent(inchar32_t charcode) { switch (charcode) { case 0xC0: case 0xC1: case 0xC2: case 0xC3: case 0xC4: case 0xC5: charcode = 'A'; break; case 0xE0: case 0xE1: case 0xE2: case 0xE3: case 0xE4: case 0xE5: charcode = 'a'; break; case 0xC8: case 0xC9: case 0xCA: case 0xCB: charcode = 'E'; break; case 0xE8: case 0xE9: case 0xEA: case 0xEB: charcode = 'e'; break; case 0xCC: case 0xCD: case 0xCE: case 0xCF: charcode = 'I'; break; case 0xEC: case 0xED: case 0xEE: case 0xEF: charcode = 'i'; break; case 0xD2: case 0xD3: case 0xD4: case 0xD5: case 0xD6: case 0xD8: charcode = 'O'; break; case 0xF2: case 0xF3: case 0xF4: case 0xF5: case 0xF6: case 0xF8: charcode = 'o'; break; case 0xD9: case 0xDA: case 0xDB: case 0xDC: charcode = 'U'; break; case 0xF9: case 0xFA: case 0xFB: case 0xFC: charcode = 'u'; break; case 0xDD: charcode = 'Y'; break; case 0xFD: charcode = 'y'; break; case 0xD1: charcode = 'N'; break; case 0xF1: charcode = 'n'; break; case 0xC7: charcode = 'C'; break; case 0xE7: charcode = 'c'; break; case 0xDF: charcode = 's'; break; } return charcode; }
int Characters::isalphabetic(inchar32_t letter) { return Characters::isalpha(Characters::remove_accent(letter)); }