/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ │vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ ╞══════════════════════════════════════════════════════════════════════════════╡ │ Copyright 2020 Justine Alexandra Roberts Tunney │ │ │ │ Permission to use, copy, modify, and/or distribute this software for │ │ any purpose with or without fee is hereby granted, provided that the │ │ above copyright notice and this permission notice appear in all copies. │ │ │ │ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ │ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ │ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ │ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ │ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ │ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/str/str.h" /** * Returns nonzero if c is punctuation mark. */ int iswpunct(wint_t c) { if (c < 0xa0) { switch (c) { case '!': case '"': case '#': case '$': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case '[': case '\\': case ']': case '^': case '_': case '`': case '{': case '|': case '}': case '~': return 1; default: return 0; } } switch (c) { case u'¡': // INVERTED EXCLAMATION MARK (0x00a1 Po) case u'§': // SECTION SIGN (0x00a7 Po) case u'«': // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (0x00ab Pi) case u'¶': // PILCROW SIGN (0x00b6 Po) case u'·': // MIDDLE DOT (0x00b7 Po) case u'»': // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (0x00bb Pf) case u'¿': // INVERTED QUESTION MARK (0x00bf Po) case u';': // GREEK QUESTION MARK (0x037e Po) case u'·': // GREEK ANO TELEIA (0x0387 Po) case u'՚': // ARMENIAN APOSTROPHE (0x055a Po) case u'՛': // ARMENIAN EMPHASIS MARK (0x055b Po) case u'՜': // ARMENIAN EXCLAMATION MARK (0x055c Po) case u'՝': // ARMENIAN COMMA (0x055d Po) case u'՞': // ARMENIAN QUESTION MARK (0x055e Po) case u'՟': // ARMENIAN ABBREVIATION MARK (0x055f Po) case u'։': // ARMENIAN FULL STOP (0x0589 Po) case u'֊': // ARMENIAN HYPHEN (0x058a Pd) case 0x05be: // HEBREW PUNCTUATION MAQAF (0x05be Pd) case 0x05c0: // HEBREW PUNCTUATION PASEQ (0x05c0 Po) case 0x05c3: // HEBREW PUNCTUATION SOF PASUQ (0x05c3 Po) case 0x05c6: // HEBREW PUNCTUATION NUN HAFUKHA (0x05c6 Po) case 0x05f3: // HEBREW PUNCTUATION GERESH (0x05f3 Po) case 0x05f4: // HEBREW PUNCTUATION GERSHAYIM (0x05f4 Po) case 0x0609: // ARABIC-INDIC PER MILLE SIGN (0x0609 Po) case 0x060a: // ARABIC-INDIC PER TEN THOUSAND SIGN (0x060a Po) case 0x060c: // ARABIC COMMA (0x060c Po) case 0x060d: // ARABIC DATE SEPARATOR (0x060d Po) case 0x061b: // ARABIC SEMICOLON (0x061b Po) case u'؞': // ARABIC TRIPLE DOT PUNCTUATION MARK (0x061e Po) case u'؟': // ARABIC QUESTION MARK (0x061f Po) case u'٪': // ARABIC PERCENT SIGN (0x066a Po) case u'٫': // ARABIC DECIMAL SEPARATOR (0x066b Po) case u'٬': // ARABIC THOUSANDS SEPARATOR (0x066c Po) case u'٭': // ARABIC FIVE POINTED STAR (0x066d Po) case u'۔': // ARABIC FULL STOP (0x06d4 Po) case u'߷': // NKO SYMBOL GBAKURUNEN (0x07f7 Po) case u'߸': // NKO COMMA (0x07f8 Po) case u'߹': // NKO EXCLAMATION MARK (0x07f9 Po) case u'।': // DEVANAGARI DANDA (0x0964 Po) case u'॥': // DEVANAGARI DOUBLE DANDA (0x0965 Po) case u'॰': // DEVANAGARI ABBREVIATION SIGN (0x0970 Po) case 0x09fd: // BENGALI ABBREVIATION SIGN (0x09fd Po) case 0x0a76: // GURMUKHI ABBREVIATION SIGN (0x0a76 Po) case 0x0af0: // GUJARATI ABBREVIATION SIGN (0x0af0 Po) case 0x0c77: // TELUGU SIGN SIDDHAM (0x0c77 Po) case 0x0c84: // KANNADA SIGN SIDDHAM (0x0c84 Po) case u'෴': // SINHALA PUNCTUATION KUNDDALIYA (0x0df4 Po) case u'๏': // THAI CHARACTER FONGMAN (0x0e4f Po) case u'๚': // THAI CHARACTER ANGKHANKHU (0x0e5a Po) case u'๛': // THAI CHARACTER KHOMUT (0x0e5b Po) case u'༄': // TIBETAN MARK INITIAL YIG MGO MDUN MA (0x0f04 Po) case u'༅': // TIBETAN MARK CLOSING YIG MGO SGAB MA (0x0f05 Po) case u'༆': // TIBETAN MARK CARET YIG MGO PHUR SHAD MA (0x0f06 Po) case u'༇': // TIBETAN MARK YIG MGO TSHEG SHAD MA (0x0f07 Po) case u'༈': // TIBETAN MARK SBRUL SHAD (0x0f08 Po) case u'༉': // TIBETAN MARK BSKUR YIG MGO (0x0f09 Po) case u'༊': // TIBETAN MARK BKA- SHOG YIG MGO (0x0f0a Po) case u'་': // TIBETAN MARK INTERSYLLABIC TSHEG (0x0f0b Po) case u'༌': // TIBETAN MARK DELIMITER TSHEG BSTAR (0x0f0c Po) case u'།': // TIBETAN MARK SHAD (0x0f0d Po) case u'༎': // TIBETAN MARK NYIS SHAD (0x0f0e Po) case u'༏': // TIBETAN MARK TSHEG SHAD (0x0f0f Po) case u'༐': // TIBETAN MARK NYIS TSHEG SHAD (0x0f10 Po) case u'༑': // TIBETAN MARK RIN CHEN SPUNGS SHAD (0x0f11 Po) case u'༒': // TIBETAN MARK RGYA GRAM SHAD (0x0f12 Po) case u'༔': // TIBETAN MARK GTER TSHEG (0x0f14 Po) case u'༺': // TIBETAN MARK GUG RTAGS GYON (0x0f3a Ps) case u'༻': // TIBETAN MARK GUG RTAGS GYAS (0x0f3b Pe) case u'༼': // TIBETAN MARK ANG KHANG GYON (0x0f3c Ps) case u'༽': // TIBETAN MARK ANG KHANG GYAS (0x0f3d Pe) case u'྅': // TIBETAN MARK PALUTA (0x0f85 Po) case u'࿐': // TIBETAN MARK BSKA- SHOG GI MGO RGYAN (0x0fd0 Po) case u'࿑': // TIBETAN MARK MNYAM YIG GI MGO RGYAN (0x0fd1 Po) case u'࿒': // TIBETAN MARK NYIS TSHEG (0x0fd2 Po) case u'࿓': // TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA (0x0fd3 Po) case u'࿔': // TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA (0x0fd4 Po) case u'࿙': // TIBETAN MARK LEADING MCHAN RTAGS (0x0fd9 Po) case u'࿚': // TIBETAN MARK TRAILING MCHAN RTAGS (0x0fda Po) case u'၊': // MYANMAR SIGN LITTLE SECTION (0x104a Po) case u'။': // MYANMAR SIGN SECTION (0x104b Po) case u'၌': // MYANMAR SYMBOL LOCATIVE (0x104c Po) case u'၍': // MYANMAR SYMBOL COMPLETED (0x104d Po) case u'၎': // MYANMAR SYMBOL AFOREMENTIONED (0x104e Po) case u'၏': // MYANMAR SYMBOL GENITIVE (0x104f Po) case u'჻': // GEORGIAN PARAGRAPH SEPARATOR (0x10fb Po) case u'፠': // ETHIOPIC SECTION MARK (0x1360 Po) case u'፡': // ETHIOPIC WORDSPACE (0x1361 Po) case u'።': // ETHIOPIC FULL STOP (0x1362 Po) case u'፣': // ETHIOPIC COMMA (0x1363 Po) case u'፤': // ETHIOPIC SEMICOLON (0x1364 Po) case u'፥': // ETHIOPIC COLON (0x1365 Po) case u'፦': // ETHIOPIC PREFACE COLON (0x1366 Po) case u'፧': // ETHIOPIC QUESTION MARK (0x1367 Po) case u'፨': // ETHIOPIC PARAGRAPH SEPARATOR (0x1368 Po) case u'᐀': // CANADIAN SYLLABICS HYPHEN (0x1400 Pd) case u'᙮': // CANADIAN SYLLABICS FULL STOP (0x166e Po) case u'᚛': // OGHAM FEATHER MARK (0x169b Ps) case u'᚜': // OGHAM REVERSED FEATHER MARK (0x169c Pe) case u'᛫': // RUNIC SINGLE PUNCTUATION (0x16eb Po) case u'᛬': // RUNIC MULTIPLE PUNCTUATION (0x16ec Po) case u'᛭': // RUNIC CROSS PUNCTUATION (0x16ed Po) case u'᜵': // PHILIPPINE SINGLE PUNCTUATION (0x1735 Po) case u'᜶': // PHILIPPINE DOUBLE PUNCTUATION (0x1736 Po) case u'។': // KHMER SIGN KHAN (0x17d4 Po) case u'៕': // KHMER SIGN BARIYOOSAN (0x17d5 Po) case u'៖': // KHMER SIGN CAMNUC PII KUUH (0x17d6 Po) case u'៘': // KHMER SIGN BEYYAL (0x17d8 Po) case u'៙': // KHMER SIGN PHNAEK MUAN (0x17d9 Po) case u'៚': // KHMER SIGN KOOMUUT (0x17da Po) case u'᠀': // MONGOLIAN BIRGA (0x1800 Po) case u'᠁': // MONGOLIAN ELLIPSIS (0x1801 Po) case u'᠂': // MONGOLIAN COMMA (0x1802 Po) case u'᠃': // MONGOLIAN FULL STOP (0x1803 Po) case u'᠄': // MONGOLIAN COLON (0x1804 Po) case u'᠅': // MONGOLIAN FOUR DOTS (0x1805 Po) case u'᠆': // MONGOLIAN TODO SOFT HYPHEN (0x1806 Pd) case u'᠇': // MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER (0x1807 Po) case u'᠈': // MONGOLIAN MANCHU COMMA (0x1808 Po) case u'᠉': // MONGOLIAN MANCHU FULL STOP (0x1809 Po) case u'᠊': // MONGOLIAN NIRUGU (0x180a Po) case u'᥄': // LIMBU EXCLAMATION MARK (0x1944 Po) case u'᥅': // LIMBU QUESTION MARK (0x1945 Po) case u'᨞': // BUGINESE PALLAWA (0x1a1e Po) case u'᨟': // BUGINESE END OF SECTION (0x1a1f Po) case u'᱾': // OL CHIKI PUNCTUATION MUCAAD (0x1c7e Po) case u'᱿': // OL CHIKI PUNCTUATION DOUBLE MUCAAD (0x1c7f Po) case u'‐': // HYPHEN (0x2010 Pd) case u'‑': // NON-BREAKING HYPHEN (0x2011 Pd) case u'‒': // FIGURE DASH (0x2012 Pd) case u'–': // EN DASH (0x2013 Pd) case u'—': // EM DASH (0x2014 Pd) case u'―': // HORIZONTAL BAR (0x2015 Pd) case u'‖': // DOUBLE VERTICAL LINE (0x2016 Po) case u'‗': // DOUBLE LOW LINE (0x2017 Po) case u'‘': // LEFT SINGLE QUOTATION MARK (0x2018 Pi) case u'’': // RIGHT SINGLE QUOTATION MARK (0x2019 Pf) case u'‚': // SINGLE LOW-9 QUOTATION MARK (0x201a Ps) case u'‛': // SINGLE HIGH-REVERSED-9 QUOTATION MARK (0x201b Pi) case u'“': // LEFT DOUBLE QUOTATION MARK (0x201c Pi) case u'”': // RIGHT DOUBLE QUOTATION MARK (0x201d Pf) case u'„': // DOUBLE LOW-9 QUOTATION MARK (0x201e Ps) case u'‟': // DOUBLE HIGH-REVERSED-9 QUOTATION MARK (0x201f Pi) case u'†': // DAGGER (0x2020 Po) case u'‡': // DOUBLE DAGGER (0x2021 Po) case u'•': // BULLET (0x2022 Po) case u'‣': // TRIANGULAR BULLET (0x2023 Po) case u'․': // ONE DOT LEADER (0x2024 Po) case u'‥': // TWO DOT LEADER (0x2025 Po) case u'…': // HORIZONTAL ELLIPSIS (0x2026 Po) case u'‧': // HYPHENATION POINT (0x2027 Po) case u'‰': // PER MILLE SIGN (0x2030 Po) case u'‱': // PER TEN THOUSAND SIGN (0x2031 Po) case u'′': // PRIME (0x2032 Po) case u'″': // DOUBLE PRIME (0x2033 Po) case u'‴': // TRIPLE PRIME (0x2034 Po) case u'‵': // REVERSED PRIME (0x2035 Po) case u'‶': // REVERSED DOUBLE PRIME (0x2036 Po) case u'‷': // REVERSED TRIPLE PRIME (0x2037 Po) case u'‸': // CARET (0x2038 Po) case u'‹': // SINGLE LEFT-POINTING ANGLE QUOTATION MARK (0x2039 Pi) case u'›': // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (0x203a Pf) case u'※': // REFERENCE MARK (0x203b Po) case u'‼': // DOUBLE EXCLAMATION MARK (0x203c Po) case u'‽': // INTERROBANG (0x203d Po) case u'‾': // OVERLINE (0x203e Po) case u'‿': // UNDERTIE (0x203f Pc) case u'⁀': // CHARACTER TIE (0x2040 Pc) case u'⁁': // CARET INSERTION POINT (0x2041 Po) case u'⁂': // ASTERISM (0x2042 Po) case u'⁃': // HYPHEN BULLET (0x2043 Po) case u'⁅': // LEFT SQUARE BRACKET WITH QUILL (0x2045 Ps) case u'⁆': // RIGHT SQUARE BRACKET WITH QUILL (0x2046 Pe) case u'⁇': // DOUBLE QUESTION MARK (0x2047 Po) case u'⁈': // QUESTION EXCLAMATION MARK (0x2048 Po) case u'⁉': // EXCLAMATION QUESTION MARK (0x2049 Po) case u'⁊': // TIRONIAN SIGN ET (0x204a Po) case u'⁋': // REVERSED PILCROW SIGN (0x204b Po) case u'⁌': // BLACK LEFTWARDS BULLET (0x204c Po) case u'⁍': // BLACK RIGHTWARDS BULLET (0x204d Po) case u'⁎': // LOW ASTERISK (0x204e Po) case u'⁏': // REVERSED SEMICOLON (0x204f Po) case u'⁐': // CLOSE UP (0x2050 Po) case u'⁑': // TWO ASTERISKS ALIGNED VERTICALLY (0x2051 Po) case u'⁓': // SWUNG DASH (0x2053 Po) case u'⁔': // INVERTED UNDERTIE (0x2054 Pc) case u'⁕': // FLOWER PUNCTUATION MARK (0x2055 Po) case u'⁖': // THREE DOT PUNCTUATION (0x2056 Po) case u'⁗': // QUADRUPLE PRIME (0x2057 Po) case u'⁘': // FOUR DOT PUNCTUATION (0x2058 Po) case u'⁙': // FIVE DOT PUNCTUATION (0x2059 Po) case u'⁚': // TWO DOT PUNCTUATION (0x205a Po) case u'⁛': // FOUR DOT MARK (0x205b Po) case u'⁜': // DOTTED CROSS (0x205c Po) case u'⁝': // TRICOLON (0x205d Po) case u'⁞': // VERTICAL FOUR DOTS (0x205e Po) case u'⁽': // SUPERSCRIPT LEFT PARENTHESIS (0x207d Ps) case u'⁾': // SUPERSCRIPT RIGHT PARENTHESIS (0x207e Pe) case u'₍': // SUBSCRIPT LEFT PARENTHESIS (0x208d Ps) case u'₎': // SUBSCRIPT RIGHT PARENTHESIS (0x208e Pe) case u'⌈': // LEFT CEILING (0x2308 Ps) case u'⌉': // RIGHT CEILING (0x2309 Pe) case u'⌊': // LEFT FLOOR (0x230a Ps) case u'⌋': // RIGHT FLOOR (0x230b Pe) case u'〈': // LEFT-POINTING ANGLE BRACKET (0x2329 Ps) case u'〉': // RIGHT-POINTING ANGLE BRACKET (0x232a Pe) case u'❨': // MEDIUM LEFT PARENTHESIS ORNAMENT (0x2768 Ps) case u'❩': // MEDIUM RIGHT PARENTHESIS ORNAMENT (0x2769 Pe) case u'❪': // MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT (0x276a Ps) case u'❫': // MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT (0x276b Pe) case u'❬': // MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT (0x276c Ps) case u'❭': // MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT (0x276d Pe) case u'❮': // HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT (0x276e Ps) case u'❯': // HEAVY RIGHT-POINTING ANGLE QUOT MARK ORNAMENT (0x276f Pe) case u'❰': // HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT (0x2770 Ps) case u'❱': // HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT (0x2771 Pe) case u'❲': // LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT (0x2772 Ps) case u'❳': // LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT (0x2773 Pe) case u'❴': // MEDIUM LEFT CURLY BRACKET ORNAMENT (0x2774 Ps) case u'❵': // MEDIUM RIGHT CURLY BRACKET ORNAMENT (0x2775 Pe) case u'⟅': // LEFT S-SHAPED BAG DELIMITER (0x27c5 Ps) case u'⟆': // RIGHT S-SHAPED BAG DELIMITER (0x27c6 Pe) case u'⟦': // MATHEMATICAL LEFT WHITE SQUARE BRACKET (0x27e6 Ps) case u'⟧': // MATHEMATICAL RIGHT WHITE SQUARE BRACKET (0x27e7 Pe) case u'⟨': // MATHEMATICAL LEFT ANGLE BRACKET (0x27e8 Ps) case u'⟩': // MATHEMATICAL RIGHT ANGLE BRACKET (0x27e9 Pe) case u'⟪': // MATHEMATICAL LEFT DOUBLE ANGLE BRACKET (0x27ea Ps) case u'⟫': // MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET (0x27eb Pe) case u'⟬': // MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET (0x27ec Ps) case u'⟭': // MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET (0x27ed Pe) case u'⟮': // MATHEMATICAL LEFT FLATTENED PARENTHESIS (0x27ee Ps) case u'⟯': // MATHEMATICAL RIGHT FLATTENED PARENTHESIS (0x27ef Pe) case u'⦃': // LEFT WHITE CURLY BRACKET (0x2983 Ps) case u'⦄': // RIGHT WHITE CURLY BRACKET (0x2984 Pe) case u'⦅': // LEFT WHITE PARENTHESIS (0x2985 Ps) case u'⦆': // RIGHT WHITE PARENTHESIS (0x2986 Pe) case u'⦇': // Z NOTATION LEFT IMAGE BRACKET (0x2987 Ps) case u'⦈': // Z NOTATION RIGHT IMAGE BRACKET (0x2988 Pe) case u'⦉': // Z NOTATION LEFT BINDING BRACKET (0x2989 Ps) case u'⦊': // Z NOTATION RIGHT BINDING BRACKET (0x298a Pe) case u'⦋': // LEFT SQUARE BRACKET WITH UNDERBAR (0x298b Ps) case u'⦌': // RIGHT SQUARE BRACKET WITH UNDERBAR (0x298c Pe) case u'⦍': // LEFT SQUARE BRACKET WITH TICK IN TOP CORNER (0x298d Ps) case u'⦎': // RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER (0x298e Pe) case u'⦏': // LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER (0x298f Ps) case u'⦐': // RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER (0x2990 Pe) case u'⦑': // LEFT ANGLE BRACKET WITH DOT (0x2991 Ps) case u'⦒': // RIGHT ANGLE BRACKET WITH DOT (0x2992 Pe) case u'⦓': // LEFT ARC LESS-THAN BRACKET (0x2993 Ps) case u'⦔': // RIGHT ARC GREATER-THAN BRACKET (0x2994 Pe) case u'⦗': // LEFT BLACK TORTOISE SHELL BRACKET (0x2997 Ps) case u'⦘': // RIGHT BLACK TORTOISE SHELL BRACKET (0x2998 Pe) case u'⧘': // LEFT WIGGLY FENCE (0x29d8 Ps) case u'⧙': // RIGHT WIGGLY FENCE (0x29d9 Pe) case u'⧚': // LEFT DOUBLE WIGGLY FENCE (0x29da Ps) case u'⧛': // RIGHT DOUBLE WIGGLY FENCE (0x29db Pe) case u'⧼': // LEFT-POINTING CURVED ANGLE BRACKET (0x29fc Ps) case u'⧽': // RIGHT-POINTING CURVED ANGLE BRACKET (0x29fd Pe) case u'⵰': // TIFINAGH SEPARATOR MARK (0x2d70 Po) case u'⸎': // EDITORIAL CORONIS (0x2e0e Po) case u'⸏': // PARAGRAPHOS (0x2e0f Po) case u'⸐': // FORKED PARAGRAPHOS (0x2e10 Po) case u'⸑': // REVERSED FORKED PARAGRAPHOS (0x2e11 Po) case u'⸒': // HYPODIASTOLE (0x2e12 Po) case u'⸓': // DOTTED OBELOS (0x2e13 Po) case u'⸔': // DOWNWARDS ANCORA (0x2e14 Po) case u'⸕': // UPWARDS ANCORA (0x2e15 Po) case u'⸖': // DOTTED RIGHT-POINTING ANGLE (0x2e16 Po) case u'⸗': // DOUBLE OBLIQUE HYPHEN (0x2e17 Pd) case u'⸙': // PALM BRANCH (0x2e19 Po) case u'⸚': // HYPHEN WITH DIAERESIS (0x2e1a Pd) case u'⸛': // TILDE WITH RING ABOVE (0x2e1b Po) case u'⸞': // TILDE WITH DOT ABOVE (0x2e1e Po) case u'⸟': // TILDE WITH DOT BELOW (0x2e1f Po) case u'⸪': // TWO DOTS OVER ONE DOT PUNCTUATION (0x2e2a Po) case u'⸫': // ONE DOT OVER TWO DOTS PUNCTUATION (0x2e2b Po) case u'⸬': // SQUARED FOUR DOT PUNCTUATION (0x2e2c Po) case u'⸭': // FIVE DOT MARK (0x2e2d Po) case u'⸮': // REVERSED QUESTION MARK (0x2e2e Po) case u'⸰': // RING POINT (0x2e30 Po) case u'⸱': // WORD SEPARATOR MIDDLE DOT (0x2e31 Po) case u'⸲': // TURNED COMMA (0x2e32 Po) case u'⸳': // RAISED DOT (0x2e33 Po) case u'⸴': // RAISED COMMA (0x2e34 Po) case u'⸵': // TURNED SEMICOLON (0x2e35 Po) case u'⸶': // DAGGER WITH LEFT GUARD (0x2e36 Po) case u'⸷': // DAGGER WITH RIGHT GUARD (0x2e37 Po) case u'⸸': // TURNED DAGGER (0x2e38 Po) case u'⸹': // TOP HALF SECTION SIGN (0x2e39 Po) case u'⸺': // TWO-EM DASH (0x2e3a Pd) case u'⸻': // THREE-EM DASH (0x2e3b Pd) case u'⸼': // STENOGRAPHIC FULL STOP (0x2e3c Po) case u'⸽': // VERTICAL SIX DOTS (0x2e3d Po) case u'⸾': // WIGGLY VERTICAL LINE (0x2e3e Po) case u'⸿': // CAPITULUM (0x2e3f Po) case u'⹀': // DOUBLE HYPHEN (0x2e40 Pd) case u'⹁': // REVERSED COMMA (0x2e41 Po) case u'⹂': // DOUBLE LOW-REVERSED-9 QUOTATION MARK (0x2e42 Ps) case u'⹃': // DASH WITH LEFT UPTURN (0x2e43 Po) case u'⹄': // DOUBLE SUSPENSION MARK (0x2e44 Po) case u'⹅': // INVERTED LOW KAVYKA (0x2e45 Po) case u'⹆': // INVERTED LOW KAVYKA WITH KAVYKA ABOVE (0x2e46 Po) case u'⹇': // LOW KAVYKA (0x2e47 Po) case u'⹈': // LOW KAVYKA WITH DOT (0x2e48 Po) case u'⹉': // DOUBLE STACKED COMMA (0x2e49 Po) case u'⹊': // DOTTED SOLIDUS (0x2e4a Po) case u'⹋': // TRIPLE DAGGER (0x2e4b Po) case u'⹌': // MEDIEVAL COMMA (0x2e4c Po) case u'⹍': // PARAGRAPHUS MARK (0x2e4d Po) case u'⹎': // PUNCTUS ELEVATUS MARK (0x2e4e Po) case u'⹏': // CORNISH VERSE DIVIDER (0x2e4f Po) case u'、': // IDEOGRAPHIC COMMA (0x3001 Po) case u'。': // IDEOGRAPHIC FULL STOP (0x3002 Po) case u'〃': // DITTO MARK (0x3003 Po) case u'〈': // LEFT ANGLE BRACKET (0x3008 Ps) case u'〉': // RIGHT ANGLE BRACKET (0x3009 Pe) case u'《': // LEFT DOUBLE ANGLE BRACKET (0x300a Ps) case u'》': // RIGHT DOUBLE ANGLE BRACKET (0x300b Pe) case u'「': // LEFT CORNER BRACKET (0x300c Ps) case u'」': // RIGHT CORNER BRACKET (0x300d Pe) case u'『': // LEFT WHITE CORNER BRACKET (0x300e Ps) case u'』': // RIGHT WHITE CORNER BRACKET (0x300f Pe) case u'【': // LEFT BLACK LENTICULAR BRACKET (0x3010 Ps) case u'】': // RIGHT BLACK LENTICULAR BRACKET (0x3011 Pe) case u'〔': // LEFT TORTOISE SHELL BRACKET (0x3014 Ps) case u'〕': // RIGHT TORTOISE SHELL BRACKET (0x3015 Pe) case u'〖': // LEFT WHITE LENTICULAR BRACKET (0x3016 Ps) case u'〗': // RIGHT WHITE LENTICULAR BRACKET (0x3017 Pe) case u'〘': // LEFT WHITE TORTOISE SHELL BRACKET (0x3018 Ps) case u'〙': // RIGHT WHITE TORTOISE SHELL BRACKET (0x3019 Pe) case u'〚': // LEFT WHITE SQUARE BRACKET (0x301a Ps) case u'〛': // RIGHT WHITE SQUARE BRACKET (0x301b Pe) case u'〜': // WAVE DASH (0x301c Pd) case u'〝': // REVERSED DOUBLE PRIME QUOTATION MARK (0x301d Ps) case u'〞': // DOUBLE PRIME QUOTATION MARK (0x301e Pe) case u'〟': // LOW DOUBLE PRIME QUOTATION MARK (0x301f Pe) case u'〰': // WAVY DASH (0x3030 Pd) case u'〽': // PART ALTERNATION MARK (0x303d Po) case u'゠': // KATAKANA-HIRAGANA DOUBLE HYPHEN (0x30a0 Pd) case u'・': // KATAKANA MIDDLE DOT (0x30fb Po) case u'꓾': // LISU PUNCTUATION COMMA (0xa4fe Po) case u'꓿': // LISU PUNCTUATION FULL STOP (0xa4ff Po) case u'꘍': // VAI COMMA (0xa60d Po) case u'꘎': // VAI FULL STOP (0xa60e Po) case u'꘏': // VAI QUESTION MARK (0xa60f Po) case u'꙾': // CYRILLIC KAVYKA (0xa67e Po) case u'꡴': // PHAGS-PA SINGLE HEAD MARK (0xa874 Po) case u'꡵': // PHAGS-PA DOUBLE HEAD MARK (0xa875 Po) case u'꡶': // PHAGS-PA MARK SHAD (0xa876 Po) case u'꡷': // PHAGS-PA MARK DOUBLE SHAD (0xa877 Po) case u'꣎': // SAURASHTRA DANDA (0xa8ce Po) case u'꣏': // SAURASHTRA DOUBLE DANDA (0xa8cf Po) case u'꣸': // DEVANAGARI SIGN PUSHPIKA (0xa8f8 Po) case u'꣹': // DEVANAGARI GAP FILLER (0xa8f9 Po) case u'꣺': // DEVANAGARI CARET (0xa8fa Po) case u'꣼': // DEVANAGARI SIGN SIDDHAM (0xa8fc Po) case u'꧁': // JAVANESE LEFT RERENGGAN (0xa9c1 Po) case u'꧂': // JAVANESE RIGHT RERENGGAN (0xa9c2 Po) case u'꧃': // JAVANESE PADA ANDAP (0xa9c3 Po) case u'꧄': // JAVANESE PADA MADYA (0xa9c4 Po) case u'꧅': // JAVANESE PADA LUHUR (0xa9c5 Po) case u'꧆': // JAVANESE PADA WINDU (0xa9c6 Po) case u'꧇': // JAVANESE PADA PANGKAT (0xa9c7 Po) case u'꧈': // JAVANESE PADA LINGSA (0xa9c8 Po) case u'꧉': // JAVANESE PADA LUNGSI (0xa9c9 Po) case u'꧊': // JAVANESE PADA ADEG (0xa9ca Po) case u'꧋': // JAVANESE PADA ADEG ADEG (0xa9cb Po) case u'꧌': // JAVANESE PADA PISELEH (0xa9cc Po) case u'꧍': // JAVANESE TURNED PADA PISELEH (0xa9cd Po) case u'꧞': // JAVANESE PADA TIRTA TUMETES (0xa9de Po) case u'꧟': // JAVANESE PADA ISEN-ISEN (0xa9df Po) case u'꩜': // CHAM PUNCTUATION SPIRAL (0xaa5c Po) case u'꩝': // CHAM PUNCTUATION DANDA (0xaa5d Po) case u'꩞': // CHAM PUNCTUATION DOUBLE DANDA (0xaa5e Po) case u'꩟': // CHAM PUNCTUATION TRIPLE DANDA (0xaa5f Po) case u'꫞': // TAI VIET SYMBOL HO HOI (0xaade Po) case u'꫟': // TAI VIET SYMBOL KOI KOI (0xaadf Po) case u'꫰': // MEETEI MAYEK CHEIKHAN (0xaaf0 Po) case u'꫱': // MEETEI MAYEK AHANG KHUDAM (0xaaf1 Po) case u'꯫': // MEETEI MAYEK CHEIKHEI (0xabeb Po) case u'︐': // PRESENTATION FORM FOR VERTICAL COMMA (0xfe10 Po) case u'︑': // PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA (0xfe11 Po) case u'︒': // PRESENTATION FORM FOR VERTICAL IDEO FULL STOP (0xfe12 Po) case u'︓': // PRESENTATION FORM FOR VERTICAL COLON (0xfe13 Po) case u'︔': // PRESENTATION FORM FOR VERTICAL SEMICOLON (0xfe14 Po) case u'︕': // PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (0xfe15 Po) case u'︖': // PRESENTATION FORM FOR VERTICAL QUESTION MARK (0xfe16 Po) case u'︗': // PRESENTATION ... LEFT WHITE LENTICULAR BRACKET (0xfe17 Ps) case u'︘': // PRESENTATION ... RIGHT WHITE LENTICULAR BRAKCET (0xfe18 Pe) case u'︙': // PRESENTATION ... VERTICAL HORIZONTAL ELLIPSIS (0xfe19 Po) case u'︰': // PRESENTATION FORM FOR VERTICAL TWO DOT LEADER (0xfe30 Po) case u'︱': // PRESENTATION FORM FOR VERTICAL EM DASH (0xfe31 Pd) case u'︲': // PRESENTATION FORM FOR VERTICAL EN DASH (0xfe32 Pd) case u'︳': // PRESENTATION FORM FOR VERTICAL LOW LINE (0xfe33 Pc) case u'︴': // PRESENTATION FORM FOR VERTICAL WAVY LOW LINE (0xfe34 Pc) case u'︵': // PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS (0xfe35 Ps) case u'︶': // PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS (0xfe36 Pe) case u'︷': // PRESENTATION ... VERTICAL LEFT CURLY BRACKET (0xfe37 Ps) case u'︸': // PRESENTATION ... VERTICAL RIGHT CURLY BRACKET (0xfe38 Pe) case u'︹': // PRESENTATION ... LEFT TORTOISE SHELL BRACKET (0xfe39 Ps) case u'︺': // PRESENTATION ... RIGHT TORTOISE SHELL BRACKET (0xfe3a Pe) case u'︻': // PRESENTATION ... LEFT BLACK LENTICULAR BRACKET (0xfe3b Ps) case u'︼': // PRESENTATION ... RIGHT BLACK LENTICULAR BRACKET (0xfe3c Pe) case u'︽': // PRESENTATION ... LEFT DOUBLE ANGLE BRACKET (0xfe3d Ps) case u'︾': // PRESENTATION ... RIGHT DOUBLE ANGLE BRACKET (0xfe3e Pe) case u'︿': // PRESENTATION ... LEFT ANGLE BRACKET (0xfe3f Ps) case u'﹀': // PRESENTATION ... RIGHT ANGLE BRACKET (0xfe40 Pe) case u'﹁': // PRESENTATION ... LEFT CORNER BRACKET (0xfe41 Ps) case u'﹂': // PRESENTATION ... RIGHT CORNER BRACKET (0xfe42 Pe) case u'﹃': // PRESENTATION ... LEFT WHITE CORNER BRACKET (0xfe43 Ps) case u'﹄': // PRESENTATION ... RIGHT WHITE CORNER BRACKET Pe) case u'﹅': // SESAME DOT (0xfe45 Po) case u'﹆': // WHITE SESAME DOT (0xfe46 Po) case u'﹇': // PRESENTATION ... VERTICAL LEFT SQUARE BRACKET (0xfe47 Ps) case u'﹈': // PRESENTATION ... VERTICAL RIGHT SQUARE BRACKET (0xfe48 Pe) case u'﹉': // DASHED OVERLINE (0xfe49 Po) case u'﹊': // CENTRELINE OVERLINE (0xfe4a Po) case u'﹋': // WAVY OVERLINE (0xfe4b Po) case u'﹌': // DOUBLE WAVY OVERLINE (0xfe4c Po) case u'﹍': // DASHED LOW LINE (0xfe4d Pc) case u'﹎': // CENTRELINE LOW LINE (0xfe4e Pc) case u'﹏': // WAVY LOW LINE (0xfe4f Pc) case u'﹐': // SMALL COMMA (0xfe50 Po) case u'﹑': // SMALL IDEOGRAPHIC COMMA (0xfe51 Po) case u'﹒': // SMALL FULL STOP (0xfe52 Po) case u'﹔': // SMALL SEMICOLON (0xfe54 Po) case u'﹕': // SMALL COLON (0xfe55 Po) case u'﹖': // SMALL QUESTION MARK (0xfe56 Po) case u'﹗': // SMALL EXCLAMATION MARK (0xfe57 Po) case u'﹘': // SMALL EM DASH (0xfe58 Pd) case u'﹙': // SMALL LEFT PARENTHESIS (0xfe59 Ps) case u'﹚': // SMALL RIGHT PARENTHESIS (0xfe5a Pe) case u'﹛': // SMALL LEFT CURLY BRACKET (0xfe5b Ps) case u'﹜': // SMALL RIGHT CURLY BRACKET (0xfe5c Pe) case u'﹝': // SMALL LEFT TORTOISE SHELL BRACKET (0xfe5d Ps) case u'﹞': // SMALL RIGHT TORTOISE SHELL BRACKET (0xfe5e Pe) case u'﹟': // SMALL NUMBER SIGN (0xfe5f Po) case u'﹠': // SMALL AMPERSAND (0xfe60 Po) case u'﹡': // SMALL ASTERISK (0xfe61 Po) case u'﹣': // SMALL HYPHEN-MINUS (0xfe63 Pd) case u'﹨': // SMALL REVERSE SOLIDUS (0xfe68 Po) case u'﹪': // SMALL PERCENT SIGN (0xfe6a Po) case u'﹫': // SMALL COMMERCIAL AT (0xfe6b Po) case u'!': // FULLWIDTH EXCLAMATION MARK (0xff01 Po) case u'"': // FULLWIDTH QUOTATION MARK (0xff02 Po) case u'#': // FULLWIDTH NUMBER SIGN (0xff03 Po) case u'%': // FULLWIDTH PERCENT SIGN (0xff05 Po) case u'&': // FULLWIDTH AMPERSAND (0xff06 Po) case u''': // FULLWIDTH APOSTROPHE (0xff07 Po) case u'(': // FULLWIDTH LEFT PARENTHESIS (0xff08 Ps) case u')': // FULLWIDTH RIGHT PARENTHESIS (0xff09 Pe) case u'*': // FULLWIDTH ASTERISK (0xff0a Po) case u',': // FULLWIDTH COMMA (0xff0c Po) case u'-': // FULLWIDTH HYPHEN-MINUS (0xff0d Pd) case u'.': // FULLWIDTH FULL STOP (0xff0e Po) case u'/': // FULLWIDTH SOLIDUS (0xff0f Po) case u':': // FULLWIDTH COLON (0xff1a Po) case u';': // FULLWIDTH SEMICOLON (0xff1b Po) case u'?': // FULLWIDTH QUESTION MARK (0xff1f Po) case u'@': // FULLWIDTH COMMERCIAL AT (0xff20 Po) case u'[': // FULLWIDTH LEFT SQUARE BRACKET (0xff3b Ps) case u'\': // FULLWIDTH REVERSE SOLIDUS (0xff3c Po) case u']': // FULLWIDTH RIGHT SQUARE BRACKET (0xff3d Pe) case u'_': // FULLWIDTH LOW LINE (0xff3f Pc) case u'{': // FULLWIDTH LEFT CURLY BRACKET (0xff5b Ps) case u'}': // FULLWIDTH RIGHT CURLY BRACKET (0xff5d Pe) case u'⦅': // FULLWIDTH LEFT WHITE PARENTHESIS (0xff5f Ps) case u'⦆': // FULLWIDTH RIGHT WHITE PARENTHESIS (0xff60 Pe) case u'。': // HALFWIDTH IDEOGRAPHIC FULL STOP (0xff61 Po) case u'「': // HALFWIDTH LEFT CORNER BRACKET (0xff62 Ps) case u'」': // HALFWIDTH RIGHT CORNER BRACKET (0xff63 Pe) case u'、': // HALFWIDTH IDEOGRAPHIC COMMA (0xff64 Po) case u'・': // HALFWIDTH KATAKANA MIDDLE DOT (0xff65 Po) return 1; default: return 0; } }