| /* | |
| * GPAC - Multimedia Framework C SDK | |
| * | |
| * Authors: Jean Le Feuvre | |
| * Copyright (c) Telecom ParisTech 2007-2023 | |
| * All rights reserved | |
| * | |
| * This file is part of GPAC / common tools sub-project | |
| * | |
| * GPAC is free software; you can redistribute it and/or modify | |
| * it under the terms of the GNU Lesser General Public License as published by | |
| * the Free Software Foundation; either version 2, or (at your option) | |
| * any later version. | |
| * | |
| * GPAC is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with this library; see the file COPYING. If not, write to | |
| * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | |
| * | |
| */ | |
| #include <gpac/utf.h> | |
| //for now only for SVG | |
| #if !defined(GPAC_DISABLE_SVG) && !defined(GPAC_DISABLE_COMPOSITOR) | |
| /*------------------------------------------------------------------------ | |
| Bidirectional Character Types | |
| as defined by the Unicode Bidirectional Algorithm Table 3-7. | |
| ------------------------------------------------------------------------*/ | |
| enum | |
| { | |
| // input types | |
| // ON MUST be zero, code relies on ON = N = 0 | |
| ON = 0, // Other Neutral | |
| L, // Left Letter | |
| R, // Right Letter | |
| AN, // Arabic Number | |
| EN, // European Number | |
| AL, // Arabic Letter (Right-to-left) | |
| NSM, // Non-spacing Mark | |
| CS, // Common Separator | |
| ES, // European Separator | |
| ET, // European Terminator (post/prefix e.g. $ and %) | |
| // resolved types | |
| BN, // Boundary neutral (type of RLE etc after explicit levels) | |
| // input types, | |
| S, // Segment Separator (TAB) // used only in L1 | |
| WS, // White space // used only in L1 | |
| B, // Paragraph Separator (aka as PS) | |
| // types for explicit controls | |
| RLO, // these are used only in X1-X9 | |
| RLE, | |
| LRO, | |
| LRE, | |
| PDF, | |
| // resolved types, also resolved directions | |
| N = ON, // alias, where ON, WS and S are treated the same | |
| }; | |
| /*---------------------------------------------------------------------- | |
| The following array maps character codes to types for the purpose of | |
| this sample implementation. The legend string gives a human readable | |
| explanation of the pseudo alphabet. | |
| For simplicity, characters entered by buttons are given a 1:1 mapping | |
| between their type and pseudo character value. Pseudo characters that | |
| can be typed from the keyboard are explained in the legend string. | |
| Use the Unicode Character Database for the real values in real use. | |
| ---------------------------------------------------------------------*/ | |
| #define LRM 4 | |
| #define RLM 5 | |
| #define LS 0x13 | |
| static int bidi_get_class(u32 val); | |
| GF_EXPORT | |
| Bool gf_utf8_is_right_to_left(u16 *utf_string) | |
| { | |
| u32 i = 0; | |
| while (1) { | |
| u32 c = utf_string[i]; | |
| if (!c) return GF_FALSE; | |
| switch (bidi_get_class(c)) { | |
| case L: | |
| return GF_FALSE; | |
| case R: | |
| return GF_TRUE; | |
| case AN: | |
| return GF_TRUE; | |
| case EN: | |
| return GF_FALSE; | |
| case AL: | |
| return GF_TRUE; | |
| default: | |
| break; | |
| } | |
| i++; | |
| } | |
| return GF_FALSE; | |
| } | |
| /*a very VERY basic bidi reorderer */ | |
| GF_EXPORT | |
| Bool gf_utf8_reorder_bidi(u16 *utf_string, u32 len) | |
| { | |
| u32 i, j, start, stop, cur_dir, slen, main_dir; | |
| Bool is_start; | |
| /*get main direction of the layour*/ | |
| Bool rev = gf_utf8_is_right_to_left(utf_string); | |
| if (rev) { | |
| for (i=0; i<len/2; i++) { | |
| u32 v = utf_string[i]; | |
| utf_string[i] = utf_string[len-1-i]; | |
| utf_string[len-1-i] = v; | |
| } | |
| } | |
| cur_dir = rev ? 1 : 0; | |
| main_dir = cur_dir; | |
| is_start = GF_TRUE; | |
| start = stop = 0; | |
| for (i=0; i<len; i++) { | |
| Bool rtl; | |
| u32 c = bidi_get_class(utf_string[i]); | |
| switch (c) { | |
| case R: | |
| case AN: | |
| case AL: | |
| rtl = GF_TRUE; | |
| break; | |
| case L: | |
| case EN: | |
| rtl = GF_FALSE; | |
| break; | |
| default: | |
| if (is_start) { | |
| start = i; | |
| } else if (!stop) { | |
| stop = i; | |
| } | |
| continue; | |
| } | |
| if (cur_dir != rtl) { | |
| if (!stop) | |
| stop = i; | |
| if (is_start) { | |
| is_start = GF_FALSE; | |
| } else { | |
| is_start = GF_TRUE; | |
| if (main_dir != cur_dir) { | |
| slen = stop-start+1; | |
| for (j=0; j<slen/2; j++) { | |
| u32 v = utf_string[start + j]; | |
| utf_string[start + j] = utf_string[stop-j]; | |
| utf_string[stop-j] = v; | |
| } | |
| } | |
| } | |
| cur_dir = rtl; | |
| } | |
| stop = 0; | |
| } | |
| /*not flushed yet*/ | |
| if (!is_start) { | |
| if (!stop) stop = len-1; | |
| slen = stop-start+1; | |
| for (j=0; j<slen/2; j++) { | |
| u32 v = utf_string[start + j]; | |
| utf_string[start + j] = utf_string[stop-j]; | |
| utf_string[stop-j] = v; | |
| } | |
| } | |
| return rev; | |
| } | |
| static int bidi_get_class(u32 val) | |
| { | |
| if ((val>=0x0041) && (val<=0x005A)) return L; //# L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z | |
| if ((val>=0x0061) && (val<=0x007A)) return L; //# L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z | |
| if (val==0x000000AA) return L; //# L& FEMININE ORDINAL INDICATOR | |
| if (val==0x000000B5) return L; //# L& MICRO SIGN | |
| if (val==0x000000BA) return L; //# L& MASCULINE ORDINAL INDICATOR | |
| if ((val>=0x00C0) && (val<=0x00D6)) return L; //# L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS | |
| if ((val>=0x00D8) && (val<=0x00F6)) return L; //# L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS | |
| if ((val>=0x00F8) && (val<=0x01BA)) return L; //# L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL | |
| if (val==0x000001BB) return L; //# Lo LATIN LETTER TWO WITH STROKE | |
| if ((val>=0x01BC) && (val<=0x01BF)) return L; //# L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN | |
| if ((val>=0x01C0) && (val<=0x01C3)) return L; //# Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK | |
| if ((val>=0x01C4) && (val<=0x0293)) return L; //# L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL | |
| if (val==0x00000294) return L; //# Lo LATIN LETTER GLOTTAL STOP | |
| if ((val>=0x0295) && (val<=0x02AF)) return L; //# L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL | |
| if ((val>=0x02B0) && (val<=0x02B8)) return L; //# Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y | |
| if ((val>=0x02BB) && (val<=0x02C1)) return L; //# Lm [7] MODIFIER LETTER TURNED COMMA..MODIFIER LETTER REVERSED GLOTTAL STOP | |
| if ((val>=0x02D0) && (val<=0x02D1)) return L; //# Lm [2] MODIFIER LETTER TRIANGULAR COLON..MODIFIER LETTER HALF TRIANGULAR COLON | |
| if ((val>=0x02E0) && (val<=0x02E4)) return L; //# Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP | |
| if (val==0x000002EE) return L; //# Lm MODIFIER LETTER DOUBLE APOSTROPHE | |
| if (val==0x0000037A) return L; //# Lm GREEK YPOGEGRAMMENI | |
| if ((val>=0x037B) && (val<=0x037D)) return L; //# L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL | |
| if (val==0x00000386) return L; //# L& GREEK CAPITAL LETTER ALPHA WITH TONOS | |
| if ((val>=0x0388) && (val<=0x038A)) return L; //# L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS | |
| if (val==0x0000038C) return L; //# L& GREEK CAPITAL LETTER OMICRON WITH TONOS | |
| if ((val>=0x038E) && (val<=0x03A1)) return L; //# L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO | |
| if ((val>=0x03A3) && (val<=0x03CE)) return L; //# L& [44] GREEK CAPITAL LETTER SIGMA..GREEK SMALL LETTER OMEGA WITH TONOS | |
| if ((val>=0x03D0) && (val<=0x03F5)) return L; //# L& [38] GREEK BETA SYMBOL..GREEK LUNATE EPSILON SYMBOL | |
| if ((val>=0x03F7) && (val<=0x0481)) return L; //# L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA | |
| if (val==0x00000482) return L; //# So CYRILLIC THOUSANDS SIGN | |
| if ((val>=0x048A) && (val<=0x0513)) return L; //# L& [138] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH HOOK | |
| if ((val>=0x0531) && (val<=0x0556)) return L; //# L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH | |
| if (val==0x00000559) return L; //# Lm ARMENIAN MODIFIER LETTER LEFT HALF RING | |
| if ((val>=0x055A) && (val<=0x055F)) return L; //# Po [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK | |
| if ((val>=0x0561) && (val<=0x0587)) return L; //# L& [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN | |
| if (val==0x00000589) return L; //# Po ARMENIAN FULL STOP | |
| if (val==0x00000903) return L; //# Mc DEVANAGARI SIGN VISARGA | |
| if ((val>=0x0904) && (val<=0x0939)) return L; //# Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA | |
| if (val==0x0000093D) return L; //# Lo DEVANAGARI SIGN AVAGRAHA | |
| if ((val>=0x093E) && (val<=0x0940)) return L; //# Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II | |
| if ((val>=0x0949) && (val<=0x094C)) return L; //# Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU | |
| if (val==0x00000950) return L; //# Lo DEVANAGARI OM | |
| if ((val>=0x0958) && (val<=0x0961)) return L; //# Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL | |
| if ((val>=0x0964) && (val<=0x0965)) return L; //# Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA | |
| if ((val>=0x0966) && (val<=0x096F)) return L; //# Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE | |
| if (val==0x00000970) return L; //# Po DEVANAGARI ABBREVIATION SIGN | |
| if ((val>=0x097B) && (val<=0x097F)) return L; //# Lo [5] DEVANAGARI LETTER GGA..DEVANAGARI LETTER BBA | |
| if ((val>=0x0982) && (val<=0x0983)) return L; //# Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA | |
| if ((val>=0x0985) && (val<=0x098C)) return L; //# Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L | |
| if ((val>=0x098F) && (val<=0x0990)) return L; //# Lo [2] BENGALI LETTER E..BENGALI LETTER AI | |
| if ((val>=0x0993) && (val<=0x09A8)) return L; //# Lo [22] BENGALI LETTER O..BENGALI LETTER NA | |
| if ((val>=0x09AA) && (val<=0x09B0)) return L; //# Lo [7] BENGALI LETTER PA..BENGALI LETTER RA | |
| if (val==0x000009B2) return L; //# Lo BENGALI LETTER LA | |
| if ((val>=0x09B6) && (val<=0x09B9)) return L; //# Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA | |
| if (val==0x000009BD) return L; //# Lo BENGALI SIGN AVAGRAHA | |
| if ((val>=0x09BE) && (val<=0x09C0)) return L; //# Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II | |
| if ((val>=0x09C7) && (val<=0x09C8)) return L; //# Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI | |
| if ((val>=0x09CB) && (val<=0x09CC)) return L; //# Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU | |
| if (val==0x000009CE) return L; //# Lo BENGALI LETTER KHANDA TA | |
| if (val==0x000009D7) return L; //# Mc BENGALI AU LENGTH MARK | |
| if ((val>=0x09DC) && (val<=0x09DD)) return L; //# Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA | |
| if ((val>=0x09DF) && (val<=0x09E1)) return L; //# Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL | |
| if ((val>=0x09E6) && (val<=0x09EF)) return L; //# Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE | |
| if ((val>=0x09F0) && (val<=0x09F1)) return L; //# Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL | |
| if ((val>=0x09F4) && (val<=0x09F9)) return L; //# No [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN | |
| if (val==0x000009FA) return L; //# So BENGALI ISSHAR | |
| if (val==0x00000A03) return L; //# Mc GURMUKHI SIGN VISARGA | |
| if ((val>=0x0A05) && (val<=0x0A0A)) return L; //# Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU | |
| if ((val>=0x0A0F) && (val<=0x0A10)) return L; //# Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI | |
| if ((val>=0x0A13) && (val<=0x0A28)) return L; //# Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA | |
| if ((val>=0x0A2A) && (val<=0x0A30)) return L; //# Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA | |
| if ((val>=0x0A32) && (val<=0x0A33)) return L; //# Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA | |
| if ((val>=0x0A35) && (val<=0x0A36)) return L; //# Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA | |
| if ((val>=0x0A38) && (val<=0x0A39)) return L; //# Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA | |
| if ((val>=0x0A3E) && (val<=0x0A40)) return L; //# Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II | |
| if ((val>=0x0A59) && (val<=0x0A5C)) return L; //# Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA | |
| if (val==0x00000A5E) return L; //# Lo GURMUKHI LETTER FA | |
| if ((val>=0x0A66) && (val<=0x0A6F)) return L; //# Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE | |
| if ((val>=0x0A72) && (val<=0x0A74)) return L; //# Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR | |
| if (val==0x00000A83) return L; //# Mc GUJARATI SIGN VISARGA | |
| if ((val>=0x0A85) && (val<=0x0A8D)) return L; //# Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E | |
| if ((val>=0x0A8F) && (val<=0x0A91)) return L; //# Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O | |
| if ((val>=0x0A93) && (val<=0x0AA8)) return L; //# Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA | |
| if ((val>=0x0AAA) && (val<=0x0AB0)) return L; //# Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA | |
| if ((val>=0x0AB2) && (val<=0x0AB3)) return L; //# Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA | |
| if ((val>=0x0AB5) && (val<=0x0AB9)) return L; //# Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA | |
| if (val==0x00000ABD) return L; //# Lo GUJARATI SIGN AVAGRAHA | |
| if ((val>=0x0ABE) && (val<=0x0AC0)) return L; //# Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II | |
| if (val==0x00000AC9) return L; //# Mc GUJARATI VOWEL SIGN CANDRA O | |
| if ((val>=0x0ACB) && (val<=0x0ACC)) return L; //# Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU | |
| if (val==0x00000AD0) return L; //# Lo GUJARATI OM | |
| if ((val>=0x0AE0) && (val<=0x0AE1)) return L; //# Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL | |
| if ((val>=0x0AE6) && (val<=0x0AEF)) return L; //# Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE | |
| if ((val>=0x0B02) && (val<=0x0B03)) return L; //# Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA | |
| if ((val>=0x0B05) && (val<=0x0B0C)) return L; //# Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L | |
| if ((val>=0x0B0F) && (val<=0x0B10)) return L; //# Lo [2] ORIYA LETTER E..ORIYA LETTER AI | |
| if ((val>=0x0B13) && (val<=0x0B28)) return L; //# Lo [22] ORIYA LETTER O..ORIYA LETTER NA | |
| if ((val>=0x0B2A) && (val<=0x0B30)) return L; //# Lo [7] ORIYA LETTER PA..ORIYA LETTER RA | |
| if ((val>=0x0B32) && (val<=0x0B33)) return L; //# Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA | |
| if ((val>=0x0B35) && (val<=0x0B39)) return L; //# Lo [5] ORIYA LETTER VA..ORIYA LETTER HA | |
| if (val==0x00000B3D) return L; //# Lo ORIYA SIGN AVAGRAHA | |
| if (val==0x00000B3E) return L; //# Mc ORIYA VOWEL SIGN AA | |
| if (val==0x00000B40) return L; //# Mc ORIYA VOWEL SIGN II | |
| if ((val>=0x0B47) && (val<=0x0B48)) return L; //# Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI | |
| if ((val>=0x0B4B) && (val<=0x0B4C)) return L; //# Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU | |
| if (val==0x00000B57) return L; //# Mc ORIYA AU LENGTH MARK | |
| if ((val>=0x0B5C) && (val<=0x0B5D)) return L; //# Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA | |
| if ((val>=0x0B5F) && (val<=0x0B61)) return L; //# Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL | |
| if ((val>=0x0B66) && (val<=0x0B6F)) return L; //# Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE | |
| if (val==0x00000B70) return L; //# So ORIYA ISSHAR | |
| if (val==0x00000B71) return L; //# Lo ORIYA LETTER WA | |
| if (val==0x00000B83) return L; //# Lo TAMIL SIGN VISARGA | |
| if ((val>=0x0B85) && (val<=0x0B8A)) return L; //# Lo [6] TAMIL LETTER A..TAMIL LETTER UU | |
| if ((val>=0x0B8E) && (val<=0x0B90)) return L; //# Lo [3] TAMIL LETTER E..TAMIL LETTER AI | |
| if ((val>=0x0B92) && (val<=0x0B95)) return L; //# Lo [4] TAMIL LETTER O..TAMIL LETTER KA | |
| if ((val>=0x0B99) && (val<=0x0B9A)) return L; //# Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA | |
| if (val==0x00000B9C) return L; //# Lo TAMIL LETTER JA | |
| if ((val>=0x0B9E) && (val<=0x0B9F)) return L; //# Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA | |
| if ((val>=0x0BA3) && (val<=0x0BA4)) return L; //# Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA | |
| if ((val>=0x0BA8) && (val<=0x0BAA)) return L; //# Lo [3] TAMIL LETTER NA..TAMIL LETTER PA | |
| if ((val>=0x0BAE) && (val<=0x0BB9)) return L; //# Lo [12] TAMIL LETTER MA..TAMIL LETTER HA | |
| if ((val>=0x0BBE) && (val<=0x0BBF)) return L; //# Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I | |
| if ((val>=0x0BC1) && (val<=0x0BC2)) return L; //# Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU | |
| if ((val>=0x0BC6) && (val<=0x0BC8)) return L; //# Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI | |
| if ((val>=0x0BCA) && (val<=0x0BCC)) return L; //# Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU | |
| if (val==0x00000BD7) return L; //# Mc TAMIL AU LENGTH MARK | |
| if ((val>=0x0BE6) && (val<=0x0BEF)) return L; //# Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE | |
| if ((val>=0x0BF0) && (val<=0x0BF2)) return L; //# No [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND | |
| if ((val>=0x0C01) && (val<=0x0C03)) return L; //# Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA | |
| if ((val>=0x0C05) && (val<=0x0C0C)) return L; //# Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L | |
| if ((val>=0x0C0E) && (val<=0x0C10)) return L; //# Lo [3] TELUGU LETTER E..TELUGU LETTER AI | |
| if ((val>=0x0C12) && (val<=0x0C28)) return L; //# Lo [23] TELUGU LETTER O..TELUGU LETTER NA | |
| if ((val>=0x0C2A) && (val<=0x0C33)) return L; //# Lo [10] TELUGU LETTER PA..TELUGU LETTER LLA | |
| if ((val>=0x0C35) && (val<=0x0C39)) return L; //# Lo [5] TELUGU LETTER VA..TELUGU LETTER HA | |
| if ((val>=0x0C41) && (val<=0x0C44)) return L; //# Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR | |
| if ((val>=0x0C60) && (val<=0x0C61)) return L; //# Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL | |
| if ((val>=0x0C66) && (val<=0x0C6F)) return L; //# Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE | |
| if ((val>=0x0C82) && (val<=0x0C83)) return L; //# Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA | |
| if ((val>=0x0C85) && (val<=0x0C8C)) return L; //# Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L | |
| if ((val>=0x0C8E) && (val<=0x0C90)) return L; //# Lo [3] KANNADA LETTER E..KANNADA LETTER AI | |
| if ((val>=0x0C92) && (val<=0x0CA8)) return L; //# Lo [23] KANNADA LETTER O..KANNADA LETTER NA | |
| if ((val>=0x0CAA) && (val<=0x0CB3)) return L; //# Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA | |
| if ((val>=0x0CB5) && (val<=0x0CB9)) return L; //# Lo [5] KANNADA LETTER VA..KANNADA LETTER HA | |
| if (val==0x00000CBD) return L; //# Lo KANNADA SIGN AVAGRAHA | |
| if (val==0x00000CBE) return L; //# Mc KANNADA VOWEL SIGN AA | |
| if (val==0x00000CBF) return L; //# Mn KANNADA VOWEL SIGN I | |
| if ((val>=0x0CC0) && (val<=0x0CC4)) return L; //# Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR | |
| if (val==0x00000CC6) return L; //# Mn KANNADA VOWEL SIGN E | |
| if ((val>=0x0CC7) && (val<=0x0CC8)) return L; //# Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI | |
| if ((val>=0x0CCA) && (val<=0x0CCB)) return L; //# Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO | |
| if ((val>=0x0CD5) && (val<=0x0CD6)) return L; //# Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK | |
| if (val==0x00000CDE) return L; //# Lo KANNADA LETTER FA | |
| if ((val>=0x0CE0) && (val<=0x0CE1)) return L; //# Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL | |
| if ((val>=0x0CE6) && (val<=0x0CEF)) return L; //# Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE | |
| if ((val>=0x0D02) && (val<=0x0D03)) return L; //# Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA | |
| if ((val>=0x0D05) && (val<=0x0D0C)) return L; //# Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L | |
| if ((val>=0x0D0E) && (val<=0x0D10)) return L; //# Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI | |
| if ((val>=0x0D12) && (val<=0x0D28)) return L; //# Lo [23] MALAYALAM LETTER O..MALAYALAM LETTER NA | |
| if ((val>=0x0D2A) && (val<=0x0D39)) return L; //# Lo [16] MALAYALAM LETTER PA..MALAYALAM LETTER HA | |
| if ((val>=0x0D3E) && (val<=0x0D40)) return L; //# Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II | |
| if ((val>=0x0D46) && (val<=0x0D48)) return L; //# Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI | |
| if ((val>=0x0D4A) && (val<=0x0D4C)) return L; //# Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU | |
| if (val==0x00000D57) return L; //# Mc MALAYALAM AU LENGTH MARK | |
| if ((val>=0x0D60) && (val<=0x0D61)) return L; //# Lo [2] MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL | |
| if ((val>=0x0D66) && (val<=0x0D6F)) return L; //# Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE | |
| if ((val>=0x0D82) && (val<=0x0D83)) return L; //# Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA | |
| if ((val>=0x0D85) && (val<=0x0D96)) return L; //# Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA | |
| if ((val>=0x0D9A) && (val<=0x0DB1)) return L; //# Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA | |
| if ((val>=0x0DB3) && (val<=0x0DBB)) return L; //# Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA | |
| if (val==0x00000DBD) return L; //# Lo SINHALA LETTER DANTAJA LAYANNA | |
| if ((val>=0x0DC0) && (val<=0x0DC6)) return L; //# Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA | |
| if ((val>=0x0DCF) && (val<=0x0DD1)) return L; //# Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA | |
| if ((val>=0x0DD8) && (val<=0x0DDF)) return L; //# Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA | |
| if ((val>=0x0DF2) && (val<=0x0DF3)) return L; //# Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA | |
| if (val==0x00000DF4) return L; //# Po SINHALA PUNCTUATION KUNDDALIYA | |
| if ((val>=0x0E01) && (val<=0x0E30)) return L; //# Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A | |
| if ((val>=0x0E32) && (val<=0x0E33)) return L; //# Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM | |
| if ((val>=0x0E40) && (val<=0x0E45)) return L; //# Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO | |
| if (val==0x00000E46) return L; //# Lm THAI CHARACTER MAIYAMOK | |
| if (val==0x00000E4F) return L; //# Po THAI CHARACTER FONGMAN | |
| if ((val>=0x0E50) && (val<=0x0E59)) return L; //# Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE | |
| if ((val>=0x0E5A) && (val<=0x0E5B)) return L; //# Po [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT | |
| if ((val>=0x0E81) && (val<=0x0E82)) return L; //# Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG | |
| if (val==0x00000E84) return L; //# Lo LAO LETTER KHO TAM | |
| if ((val>=0x0E87) && (val<=0x0E88)) return L; //# Lo [2] LAO LETTER NGO..LAO LETTER CO | |
| if (val==0x00000E8A) return L; //# Lo LAO LETTER SO TAM | |
| if (val==0x00000E8D) return L; //# Lo LAO LETTER NYO | |
| if ((val>=0x0E94) && (val<=0x0E97)) return L; //# Lo [4] LAO LETTER DO..LAO LETTER THO TAM | |
| if ((val>=0x0E99) && (val<=0x0E9F)) return L; //# Lo [7] LAO LETTER NO..LAO LETTER FO SUNG | |
| if ((val>=0x0EA1) && (val<=0x0EA3)) return L; //# Lo [3] LAO LETTER MO..LAO LETTER LO LING | |
| if (val==0x00000EA5) return L; //# Lo LAO LETTER LO LOOT | |
| if (val==0x00000EA7) return L; //# Lo LAO LETTER WO | |
| if ((val>=0x0EAA) && (val<=0x0EAB)) return L; //# Lo [2] LAO LETTER SO SUNG..LAO LETTER HO SUNG | |
| if ((val>=0x0EAD) && (val<=0x0EB0)) return L; //# Lo [4] LAO LETTER O..LAO VOWEL SIGN A | |
| if ((val>=0x0EB2) && (val<=0x0EB3)) return L; //# Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM | |
| if (val==0x00000EBD) return L; //# Lo LAO SEMIVOWEL SIGN NYO | |
| if ((val>=0x0EC0) && (val<=0x0EC4)) return L; //# Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI | |
| if (val==0x00000EC6) return L; //# Lm LAO KO LA | |
| if ((val>=0x0ED0) && (val<=0x0ED9)) return L; //# Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE | |
| if ((val>=0x0EDC) && (val<=0x0EDD)) return L; //# Lo [2] LAO HO NO..LAO HO MO | |
| if (val==0x00000F00) return L; //# Lo TIBETAN SYLLABLE OM | |
| if ((val>=0x0F01) && (val<=0x0F03)) return L; //# So [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA | |
| if ((val>=0x0F04) && (val<=0x0F12)) return L; //# Po [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD | |
| if ((val>=0x0F13) && (val<=0x0F17)) return L; //# So [5] TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS | |
| if ((val>=0x0F1A) && (val<=0x0F1F)) return L; //# So [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG | |
| if ((val>=0x0F20) && (val<=0x0F29)) return L; //# Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE | |
| if ((val>=0x0F2A) && (val<=0x0F33)) return L; //# No [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO | |
| if (val==0x00000F34) return L; //# So TIBETAN MARK BSDUS RTAGS | |
| if (val==0x00000F36) return L; //# So TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN | |
| if (val==0x00000F38) return L; //# So TIBETAN MARK CHE MGO | |
| if ((val>=0x0F3E) && (val<=0x0F3F)) return L; //# Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES | |
| if ((val>=0x0F40) && (val<=0x0F47)) return L; //# Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA | |
| if ((val>=0x0F49) && (val<=0x0F6A)) return L; //# Lo [34] TIBETAN LETTER NYA..TIBETAN LETTER FIXED-FORM RA | |
| if (val==0x00000F7F) return L; //# Mc TIBETAN SIGN RNAM BCAD | |
| if (val==0x00000F85) return L; //# Po TIBETAN MARK PALUTA | |
| if ((val>=0x0F88) && (val<=0x0F8B)) return L; //# Lo [4] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN GRU MED RGYINGS | |
| if ((val>=0x0FBE) && (val<=0x0FC5)) return L; //# So [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE | |
| if ((val>=0x0FC7) && (val<=0x0FCC)) return L; //# So [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL | |
| if (val==0x00000FCF) return L; //# So TIBETAN SIGN RDEL NAG GSUM | |
| if ((val>=0x0FD0) && (val<=0x0FD1)) return L; //# Po [2] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK MNYAM YIG GI MGO RGYAN | |
| if ((val>=0x1000) && (val<=0x1021)) return L; //# Lo [34] MYANMAR LETTER KA..MYANMAR LETTER A | |
| if ((val>=0x1023) && (val<=0x1027)) return L; //# Lo [5] MYANMAR LETTER I..MYANMAR LETTER E | |
| if ((val>=0x1029) && (val<=0x102A)) return L; //# Lo [2] MYANMAR LETTER O..MYANMAR LETTER AU | |
| if (val==0x0000102C) return L; //# Mc MYANMAR VOWEL SIGN AA | |
| if (val==0x00001031) return L; //# Mc MYANMAR VOWEL SIGN E | |
| if (val==0x00001038) return L; //# Mc MYANMAR SIGN VISARGA | |
| if ((val>=0x1040) && (val<=0x1049)) return L; //# Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE | |
| if ((val>=0x104A) && (val<=0x104F)) return L; //# Po [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE | |
| if ((val>=0x1050) && (val<=0x1055)) return L; //# Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL | |
| if ((val>=0x1056) && (val<=0x1057)) return L; //# Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR | |
| if ((val>=0x10A0) && (val<=0x10C5)) return L; //# L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE | |
| if ((val>=0x10D0) && (val<=0x10FA)) return L; //# Lo [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN | |
| if (val==0x000010FB) return L; //# Po GEORGIAN PARAGRAPH SEPARATOR | |
| if (val==0x000010FC) return L; //# Lm MODIFIER LETTER GEORGIAN NAR | |
| if ((val>=0x1100) && (val<=0x1159)) return L; //# Lo [90] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG YEORINHIEUH | |
| if ((val>=0x115F) && (val<=0x11A2)) return L; //# Lo [68] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG SSANGARAEA | |
| if ((val>=0x11A8) && (val<=0x11F9)) return L; //# Lo [82] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG YEORINHIEUH | |
| if ((val>=0x1200) && (val<=0x1248)) return L; //# Lo [73] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE QWA | |
| if ((val>=0x124A) && (val<=0x124D)) return L; //# Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE | |
| if ((val>=0x1250) && (val<=0x1256)) return L; //# Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO | |
| if (val==0x00001258) return L; //# Lo ETHIOPIC SYLLABLE QHWA | |
| if ((val>=0x125A) && (val<=0x125D)) return L; //# Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE | |
| if ((val>=0x1260) && (val<=0x1288)) return L; //# Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA | |
| if ((val>=0x128A) && (val<=0x128D)) return L; //# Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE | |
| if ((val>=0x1290) && (val<=0x12B0)) return L; //# Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA | |
| if ((val>=0x12B2) && (val<=0x12B5)) return L; //# Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE | |
| if ((val>=0x12B8) && (val<=0x12BE)) return L; //# Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO | |
| if (val==0x000012C0) return L; //# Lo ETHIOPIC SYLLABLE KXWA | |
| if ((val>=0x12C2) && (val<=0x12C5)) return L; //# Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE | |
| if ((val>=0x12C8) && (val<=0x12D6)) return L; //# Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O | |
| if ((val>=0x12D8) && (val<=0x1310)) return L; //# Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA | |
| if ((val>=0x1312) && (val<=0x1315)) return L; //# Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE | |
| if ((val>=0x1318) && (val<=0x135A)) return L; //# Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA | |
| if (val==0x00001360) return L; //# So ETHIOPIC SECTION MARK | |
| if ((val>=0x1361) && (val<=0x1368)) return L; //# Po [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR | |
| if ((val>=0x1369) && (val<=0x137C)) return L; //# No [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND | |
| if ((val>=0x1380) && (val<=0x138F)) return L; //# Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE | |
| if ((val>=0x13A0) && (val<=0x13F4)) return L; //# Lo [85] CHEROKEE LETTER A..CHEROKEE LETTER YV | |
| if ((val>=0x1401) && (val<=0x166C)) return L; //# Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA | |
| if ((val>=0x166D) && (val<=0x166E)) return L; //# Po [2] CANADIAN SYLLABICS CHI SIGN..CANADIAN SYLLABICS FULL STOP | |
| if ((val>=0x166F) && (val<=0x1676)) return L; //# Lo [8] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS NNGAA | |
| if ((val>=0x1681) && (val<=0x169A)) return L; //# Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH | |
| if ((val>=0x16A0) && (val<=0x16EA)) return L; //# Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X | |
| if ((val>=0x16EB) && (val<=0x16ED)) return L; //# Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION | |
| if ((val>=0x16EE) && (val<=0x16F0)) return L; //# Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL | |
| if ((val>=0x1700) && (val<=0x170C)) return L; //# Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA | |
| if ((val>=0x170E) && (val<=0x1711)) return L; //# Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA | |
| if ((val>=0x1720) && (val<=0x1731)) return L; //# Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA | |
| if ((val>=0x1735) && (val<=0x1736)) return L; //# Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION | |
| if ((val>=0x1740) && (val<=0x1751)) return L; //# Lo [18] BUHID LETTER A..BUHID LETTER HA | |
| if ((val>=0x1760) && (val<=0x176C)) return L; //# Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA | |
| if ((val>=0x176E) && (val<=0x1770)) return L; //# Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA | |
| if ((val>=0x1780) && (val<=0x17B3)) return L; //# Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU | |
| if ((val>=0x17B4) && (val<=0x17B5)) return L; //# Cf [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA | |
| if (val==0x000017B6) return L; //# Mc KHMER VOWEL SIGN AA | |
| if ((val>=0x17BE) && (val<=0x17C5)) return L; //# Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU | |
| if ((val>=0x17C7) && (val<=0x17C8)) return L; //# Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU | |
| if ((val>=0x17D4) && (val<=0x17D6)) return L; //# Po [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH | |
| if (val==0x000017D7) return L; //# Lm KHMER SIGN LEK TOO | |
| if ((val>=0x17D8) && (val<=0x17DA)) return L; //# Po [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT | |
| if (val==0x000017DC) return L; //# Lo KHMER SIGN AVAKRAHASANYA | |
| if ((val>=0x17E0) && (val<=0x17E9)) return L; //# Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE | |
| if ((val>=0x1810) && (val<=0x1819)) return L; //# Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE | |
| if ((val>=0x1820) && (val<=0x1842)) return L; //# Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI | |
| if (val==0x00001843) return L; //# Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN | |
| if ((val>=0x1844) && (val<=0x1877)) return L; //# Lo [52] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER MANCHU ZHA | |
| if ((val>=0x1880) && (val<=0x18A8)) return L; //# Lo [41] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER MANCHU ALI GALI BHA | |
| if ((val>=0x1900) && (val<=0x191C)) return L; //# Lo [29] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER HA | |
| if ((val>=0x1923) && (val<=0x1926)) return L; //# Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU | |
| if ((val>=0x1930) && (val<=0x1931)) return L; //# Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA | |
| if ((val>=0x1933) && (val<=0x1938)) return L; //# Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA | |
| if ((val>=0x1946) && (val<=0x194F)) return L; //# Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE | |
| if ((val>=0x1950) && (val<=0x196D)) return L; //# Lo [30] TAI LE LETTER KA..TAI LE LETTER AI | |
| if ((val>=0x1970) && (val<=0x1974)) return L; //# Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6 | |
| if ((val>=0x1980) && (val<=0x19A9)) return L; //# Lo [42] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW XVA | |
| if ((val>=0x19B0) && (val<=0x19C0)) return L; //# Mc [17] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN IY | |
| if ((val>=0x19C1) && (val<=0x19C7)) return L; //# Lo [7] NEW TAI LUE LETTER FINAL V..NEW TAI LUE LETTER FINAL B | |
| if ((val>=0x19C8) && (val<=0x19C9)) return L; //# Mc [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2 | |
| if ((val>=0x19D0) && (val<=0x19D9)) return L; //# Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE | |
| if ((val>=0x1A00) && (val<=0x1A16)) return L; //# Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA | |
| if ((val>=0x1A19) && (val<=0x1A1B)) return L; //# Mc [3] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN AE | |
| if ((val>=0x1A1E) && (val<=0x1A1F)) return L; //# Po [2] BUGINESE PALLAWA..BUGINESE END OF SECTION | |
| if (val==0x00001B04) return L; //# Mc BALINESE SIGN BISAH | |
| if ((val>=0x1B05) && (val<=0x1B33)) return L; //# Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA | |
| if (val==0x00001B35) return L; //# Mc BALINESE VOWEL SIGN TEDUNG | |
| if (val==0x00001B3B) return L; //# Mc BALINESE VOWEL SIGN RA REPA TEDUNG | |
| if ((val>=0x1B3D) && (val<=0x1B41)) return L; //# Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG | |
| if ((val>=0x1B43) && (val<=0x1B44)) return L; //# Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG | |
| if ((val>=0x1B45) && (val<=0x1B4B)) return L; //# Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK | |
| if ((val>=0x1B50) && (val<=0x1B59)) return L; //# Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE | |
| if ((val>=0x1B5A) && (val<=0x1B60)) return L; //# Po [7] BALINESE PANTI..BALINESE PAMENENG | |
| if ((val>=0x1B61) && (val<=0x1B6A)) return L; //# So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE | |
| if ((val>=0x1B74) && (val<=0x1B7C)) return L; //# So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING | |
| if ((val>=0x1D00) && (val<=0x1D2B)) return L; //# L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL | |
| if ((val>=0x1D2C) && (val<=0x1D61)) return L; //# Lm [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI | |
| if ((val>=0x1D62) && (val<=0x1D77)) return L; //# L& [22] LATIN SUBSCRIPT SMALL LETTER I..LATIN SMALL LETTER TURNED G | |
| if (val==0x00001D78) return L; //# Lm MODIFIER LETTER CYRILLIC EN | |
| if ((val>=0x1D79) && (val<=0x1D9A)) return L; //# L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK | |
| if ((val>=0x1D9B) && (val<=0x1DBF)) return L; //# Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA | |
| if ((val>=0x1E00) && (val<=0x1E9B)) return L; //# L& [156] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE | |
| if ((val>=0x1EA0) && (val<=0x1EF9)) return L; //# L& [90] LATIN CAPITAL LETTER A WITH DOT BELOW..LATIN SMALL LETTER Y WITH TILDE | |
| if ((val>=0x1F00) && (val<=0x1F15)) return L; //# L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA | |
| if ((val>=0x1F18) && (val<=0x1F1D)) return L; //# L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA | |
| if ((val>=0x1F20) && (val<=0x1F45)) return L; //# L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA | |
| if ((val>=0x1F48) && (val<=0x1F4D)) return L; //# L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA | |
| if ((val>=0x1F50) && (val<=0x1F57)) return L; //# L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI | |
| if (val==0x00001F59) return L; //# L& GREEK CAPITAL LETTER UPSILON WITH DASIA | |
| if (val==0x00001F5B) return L; //# L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA | |
| if (val==0x00001F5D) return L; //# L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA | |
| if ((val>=0x1F5F) && (val<=0x1F7D)) return L; //# L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA | |
| if ((val>=0x1F80) && (val<=0x1FB4)) return L; //# L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI | |
| if ((val>=0x1FB6) && (val<=0x1FBC)) return L; //# L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI | |
| if (val==0x00001FBE) return L; //# L& GREEK PROSGEGRAMMENI | |
| if ((val>=0x1FC2) && (val<=0x1FC4)) return L; //# L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI | |
| if ((val>=0x1FC6) && (val<=0x1FCC)) return L; //# L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI | |
| if ((val>=0x1FD0) && (val<=0x1FD3)) return L; //# L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA | |
| if ((val>=0x1FD6) && (val<=0x1FDB)) return L; //# L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA | |
| if ((val>=0x1FE0) && (val<=0x1FEC)) return L; //# L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA | |
| if ((val>=0x1FF2) && (val<=0x1FF4)) return L; //# L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI | |
| if ((val>=0x1FF6) && (val<=0x1FFC)) return L; //# L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI | |
| if (val==0x0000200E) return L; //# Cf LEFT-TO-RIGHT MARK | |
| if (val==0x00002071) return L; //# L& SUPERSCRIPT LATIN SMALL LETTER I | |
| if (val==0x0000207F) return L; //# L& SUPERSCRIPT LATIN SMALL LETTER N | |
| if ((val>=0x2090) && (val<=0x2094)) return L; //# Lm [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA | |
| if (val==0x00002102) return L; //# L& DOUBLE-STRUCK CAPITAL C | |
| if (val==0x00002107) return L; //# L& EULER CONSTANT | |
| if ((val>=0x210A) && (val<=0x2113)) return L; //# L& [10] SCRIPT SMALL G..SCRIPT SMALL L | |
| if (val==0x00002115) return L; //# L& DOUBLE-STRUCK CAPITAL N | |
| if ((val>=0x2119) && (val<=0x211D)) return L; //# L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R | |
| if (val==0x00002124) return L; //# L& DOUBLE-STRUCK CAPITAL Z | |
| if (val==0x00002126) return L; //# L& OHM SIGN | |
| if (val==0x00002128) return L; //# L& BLACK-LETTER CAPITAL Z | |
| if ((val>=0x212A) && (val<=0x212D)) return L; //# L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C | |
| if ((val>=0x212F) && (val<=0x2134)) return L; //# L& [6] SCRIPT SMALL E..SCRIPT SMALL O | |
| if ((val>=0x2135) && (val<=0x2138)) return L; //# Lo [4] ALEF SYMBOL..DALET SYMBOL | |
| if (val==0x00002139) return L; //# L& INFORMATION SOURCE | |
| if ((val>=0x213C) && (val<=0x213F)) return L; //# L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI | |
| if ((val>=0x2145) && (val<=0x2149)) return L; //# L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J | |
| if (val==0x0000214E) return L; //# L& TURNED SMALL F | |
| if ((val>=0x2160) && (val<=0x2182)) return L; //# Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND | |
| if ((val>=0x2183) && (val<=0x2184)) return L; //# L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C | |
| if ((val>=0x2336) && (val<=0x237A)) return L; //# So [69] APL FUNCTIONAL SYMBOL I-BEAM..APL FUNCTIONAL SYMBOL ALPHA | |
| if (val==0x00002395) return L; //# So APL FUNCTIONAL SYMBOL QUAD | |
| if ((val>=0x249C) && (val<=0x24E9)) return L; //# So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z | |
| if (val==0x000026AC) return L; //# So MEDIUM SMALL WHITE CIRCLE | |
| if ((val>=0x2800) && (val<=0x28FF)) return L; //# So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678 | |
| if ((val>=0x2C00) && (val<=0x2C2E)) return L; //# L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE | |
| if ((val>=0x2C30) && (val<=0x2C5E)) return L; //# L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE | |
| if ((val>=0x2C60) && (val<=0x2C6C)) return L; //# L& [13] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN SMALL LETTER Z WITH DESCENDER | |
| if ((val>=0x2C74) && (val<=0x2C77)) return L; //# L& [4] LATIN SMALL LETTER V WITH CURL..LATIN SMALL LETTER TAILLESS PHI | |
| if ((val>=0x2C80) && (val<=0x2CE4)) return L; //# L& [101] COPTIC CAPITAL LETTER ALFA..COPTIC SYMBOL KAI | |
| if ((val>=0x2D00) && (val<=0x2D25)) return L; //# L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE | |
| if ((val>=0x2D30) && (val<=0x2D65)) return L; //# Lo [54] TIFINAGH LETTER YA..TIFINAGH LETTER YAZZ | |
| if (val==0x00002D6F) return L; //# Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK | |
| if ((val>=0x2D80) && (val<=0x2D96)) return L; //# Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE | |
| if ((val>=0x2DA0) && (val<=0x2DA6)) return L; //# Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO | |
| if ((val>=0x2DA8) && (val<=0x2DAE)) return L; //# Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO | |
| if ((val>=0x2DB0) && (val<=0x2DB6)) return L; //# Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO | |
| if ((val>=0x2DB8) && (val<=0x2DBE)) return L; //# Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO | |
| if ((val>=0x2DC0) && (val<=0x2DC6)) return L; //# Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO | |
| if ((val>=0x2DC8) && (val<=0x2DCE)) return L; //# Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO | |
| if ((val>=0x2DD0) && (val<=0x2DD6)) return L; //# Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO | |
| if ((val>=0x2DD8) && (val<=0x2DDE)) return L; //# Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO | |
| if (val==0x00003005) return L; //# Lm IDEOGRAPHIC ITERATION MARK | |
| if (val==0x00003006) return L; //# Lo IDEOGRAPHIC CLOSING MARK | |
| if (val==0x00003007) return L; //# Nl IDEOGRAPHIC NUMBER ZERO | |
| if ((val>=0x3021) && (val<=0x3029)) return L; //# Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE | |
| if ((val>=0x3031) && (val<=0x3035)) return L; //# Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF | |
| if ((val>=0x3038) && (val<=0x303A)) return L; //# Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY | |
| if (val==0x0000303B) return L; //# Lm VERTICAL IDEOGRAPHIC ITERATION MARK | |
| if (val==0x0000303C) return L; //# Lo MASU MARK | |
| if ((val>=0x3041) && (val<=0x3096)) return L; //# Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE | |
| if ((val>=0x309D) && (val<=0x309E)) return L; //# Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK | |
| if (val==0x0000309F) return L; //# Lo HIRAGANA DIGRAPH YORI | |
| if ((val>=0x30A1) && (val<=0x30FA)) return L; //# Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO | |
| if ((val>=0x30FC) && (val<=0x30FE)) return L; //# Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK | |
| if (val==0x000030FF) return L; //# Lo KATAKANA DIGRAPH KOTO | |
| if ((val>=0x3105) && (val<=0x312C)) return L; //# Lo [40] BOPOMOFO LETTER B..BOPOMOFO LETTER GN | |
| if ((val>=0x3131) && (val<=0x318E)) return L; //# Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE | |
| if ((val>=0x3190) && (val<=0x3191)) return L; //# So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK | |
| if ((val>=0x3192) && (val<=0x3195)) return L; //# No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK | |
| if ((val>=0x3196) && (val<=0x319F)) return L; //# So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK | |
| if ((val>=0x31A0) && (val<=0x31B7)) return L; //# Lo [24] BOPOMOFO LETTER BU..BOPOMOFO FINAL LETTER H | |
| if ((val>=0x31F0) && (val<=0x31FF)) return L; //# Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO | |
| if ((val>=0x3200) && (val<=0x321C)) return L; //# So [29] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED HANGUL CIEUC U | |
| if ((val>=0x3220) && (val<=0x3229)) return L; //# No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN | |
| if ((val>=0x322A) && (val<=0x3243)) return L; //# So [26] PARENTHESIZED IDEOGRAPH MOON..PARENTHESIZED IDEOGRAPH REACH | |
| if ((val>=0x3260) && (val<=0x327B)) return L; //# So [28] CIRCLED HANGUL KIYEOK..CIRCLED HANGUL HIEUH A | |
| if (val==0x0000327F) return L; //# So KOREAN STANDARD SYMBOL | |
| if ((val>=0x3280) && (val<=0x3289)) return L; //# No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN | |
| if ((val>=0x328A) && (val<=0x32B0)) return L; //# So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT | |
| if ((val>=0x32C0) && (val<=0x32CB)) return L; //# So [12] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER | |
| if ((val>=0x32D0) && (val<=0x32FE)) return L; //# So [47] CIRCLED KATAKANA A..CIRCLED KATAKANA WO | |
| if ((val>=0x3300) && (val<=0x3376)) return L; //# So [119] SQUARE APAATO..SQUARE PC | |
| if ((val>=0x337B) && (val<=0x33DD)) return L; //# So [99] SQUARE ERA NAME HEISEI..SQUARE WB | |
| if ((val>=0x33E0) && (val<=0x33FE)) return L; //# So [31] IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE | |
| if ((val>=0x3400) && (val<=0x4DB5)) return L; //# Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5 | |
| if ((val>=0x4E00) && (val<=0x9FBB)) return L; //# Lo [20924] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FBB | |
| if ((val>=0xA000) && (val<=0xA014)) return L; //# Lo [21] YI SYLLABLE IT..YI SYLLABLE E | |
| if (val==0x0000A015) return L; //# Lm YI SYLLABLE WU | |
| if ((val>=0xA016) && (val<=0xA48C)) return L; //# Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR | |
| if ((val>=0xA800) && (val<=0xA801)) return L; //# Lo [2] SYLOTI NAGRI LETTER A..SYLOTI NAGRI LETTER I | |
| if ((val>=0xA803) && (val<=0xA805)) return L; //# Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O | |
| if ((val>=0xA807) && (val<=0xA80A)) return L; //# Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO | |
| if ((val>=0xA80C) && (val<=0xA822)) return L; //# Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO | |
| if ((val>=0xA823) && (val<=0xA824)) return L; //# Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I | |
| if (val==0x0000A827) return L; //# Mc SYLOTI NAGRI VOWEL SIGN OO | |
| if ((val>=0xA840) && (val<=0xA873)) return L; //# Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU | |
| if ((val>=0xAC00) && (val<=0xD7A3)) return L; //# Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH | |
| if ((val>=0xE000) && (val<=0xF8FF)) return L; //# Co [6400] <private-use-E000>..<private-use-F8FF> | |
| if ((val>=0xF900) && (val<=0xFA2D)) return L; //# Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D | |
| if ((val>=0xFA30) && (val<=0xFA6A)) return L; //# Lo [59] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6A | |
| if ((val>=0xFA70) && (val<=0xFAD9)) return L; //# Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 | |
| if ((val>=0xFB00) && (val<=0xFB06)) return L; //# L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST | |
| if ((val>=0xFB13) && (val<=0xFB17)) return L; //# L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH | |
| if ((val>=0xFF21) && (val<=0xFF3A)) return L; //# L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z | |
| if ((val>=0xFF41) && (val<=0xFF5A)) return L; //# L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z | |
| if ((val>=0xFF66) && (val<=0xFF6F)) return L; //# Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU | |
| if (val==0x0000FF70) return L; //# Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK | |
| if ((val>=0xFF71) && (val<=0xFF9D)) return L; //# Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N | |
| if ((val>=0xFF9E) && (val<=0xFF9F)) return L; //# Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK | |
| if ((val>=0xFFA0) && (val<=0xFFBE)) return L; //# Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH | |
| if ((val>=0xFFC2) && (val<=0xFFC7)) return L; //# Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E | |
| if ((val>=0xFFCA) && (val<=0xFFCF)) return L; //# Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE | |
| if ((val>=0xFFD2) && (val<=0xFFD7)) return L; //# Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU | |
| if ((val>=0xFFDA) && (val<=0xFFDC)) return L; //# Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I | |
| if ((val>=0x10000) && (val<=0x1000B)) return L; //# Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE | |
| if ((val>=0x1000D) && (val<=0x10026)) return L; //# Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO | |
| if ((val>=0x10028) && (val<=0x1003A)) return L; //# Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO | |
| if ((val>=0x1003C) && (val<=0x1003D)) return L; //# Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE | |
| if ((val>=0x1003F) && (val<=0x1004D)) return L; //# Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO | |
| if ((val>=0x10050) && (val<=0x1005D)) return L; //# Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089 | |
| if ((val>=0x10080) && (val<=0x100FA)) return L; //# Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305 | |
| if (val==0x00010100) return L; //# Po AEGEAN WORD SEPARATOR LINE | |
| if (val==0x00010102) return L; //# So AEGEAN CHECK MARK | |
| if ((val>=0x10107) && (val<=0x10133)) return L; //# No [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND | |
| if ((val>=0x10137) && (val<=0x1013F)) return L; //# So [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT | |
| if ((val>=0x10300) && (val<=0x1031E)) return L; //# Lo [31] OLD ITALIC LETTER A..OLD ITALIC LETTER UU | |
| if ((val>=0x10320) && (val<=0x10323)) return L; //# No [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY | |
| if ((val>=0x10330) && (val<=0x10340)) return L; //# Lo [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA | |
| if (val==0x00010341) return L; //# Nl GOTHIC LETTER NINETY | |
| if ((val>=0x10342) && (val<=0x10349)) return L; //# Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL | |
| if (val==0x0001034A) return L; //# Nl GOTHIC LETTER NINE HUNDRED | |
| if ((val>=0x10380) && (val<=0x1039D)) return L; //# Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU | |
| if (val==0x0001039F) return L; //# Po UGARITIC WORD DIVIDER | |
| if ((val>=0x103A0) && (val<=0x103C3)) return L; //# Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA | |
| if ((val>=0x103C8) && (val<=0x103CF)) return L; //# Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH | |
| if (val==0x000103D0) return L; //# Po OLD PERSIAN WORD DIVIDER | |
| if ((val>=0x103D1) && (val<=0x103D5)) return L; //# Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED | |
| if ((val>=0x10400) && (val<=0x1044F)) return L; //# L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW | |
| if ((val>=0x10450) && (val<=0x1049D)) return L; //# Lo [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO | |
| if ((val>=0x104A0) && (val<=0x104A9)) return L; //# Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE | |
| if ((val>=0x12000) && (val<=0x1236E)) return L; //# Lo [879] CUNEIFORM SIGN A..CUNEIFORM SIGN ZUM | |
| if ((val>=0x12400) && (val<=0x12462)) return L; //# Nl [99] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER | |
| if ((val>=0x12470) && (val<=0x12473)) return L; //# Po [4] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON | |
| if ((val>=0x1D000) && (val<=0x1D0F5)) return L; //# So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO | |
| if ((val>=0x1D100) && (val<=0x1D126)) return L; //# So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 | |
| if ((val>=0x1D12A) && (val<=0x1D164)) return L; //# So [59] MUSICAL SYMBOL DOUBLE SHARP..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE | |
| if ((val>=0x1D165) && (val<=0x1D166)) return L; //# Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM | |
| if ((val>=0x1D16A) && (val<=0x1D16C)) return L; //# So [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3 | |
| if ((val>=0x1D16D) && (val<=0x1D172)) return L; //# Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 | |
| if ((val>=0x1D183) && (val<=0x1D184)) return L; //# So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN | |
| if ((val>=0x1D18C) && (val<=0x1D1A9)) return L; //# So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH | |
| if ((val>=0x1D1AE) && (val<=0x1D1DD)) return L; //# So [48] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL PES SUBPUNCTIS | |
| if ((val>=0x1D360) && (val<=0x1D371)) return L; //# No [18] COUNTING ROD UNIT DIGIT ONE..COUNTING ROD TENS DIGIT NINE | |
| if ((val>=0x1D400) && (val<=0x1D454)) return L; //# L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G | |
| if ((val>=0x1D456) && (val<=0x1D49C)) return L; //# L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A | |
| if ((val>=0x1D49E) && (val<=0x1D49F)) return L; //# L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D | |
| if (val==0x0001D4A2) return L; //# L& MATHEMATICAL SCRIPT CAPITAL G | |
| if ((val>=0x1D4A5) && (val<=0x1D4A6)) return L; //# L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K | |
| if ((val>=0x1D4A9) && (val<=0x1D4AC)) return L; //# L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q | |
| if ((val>=0x1D4AE) && (val<=0x1D4B9)) return L; //# L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D | |
| if (val==0x0001D4BB) return L; //# L& MATHEMATICAL SCRIPT SMALL F | |
| if ((val>=0x1D4BD) && (val<=0x1D4C3)) return L; //# L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N | |
| if ((val>=0x1D4C5) && (val<=0x1D505)) return L; //# L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B | |
| if ((val>=0x1D507) && (val<=0x1D50A)) return L; //# L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G | |
| if ((val>=0x1D50D) && (val<=0x1D514)) return L; //# L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q | |
| if ((val>=0x1D516) && (val<=0x1D51C)) return L; //# L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y | |
| if ((val>=0x1D51E) && (val<=0x1D539)) return L; //# L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B | |
| if ((val>=0x1D53B) && (val<=0x1D53E)) return L; //# L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G | |
| if ((val>=0x1D540) && (val<=0x1D544)) return L; //# L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M | |
| if (val==0x0001D546) return L; //# L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O | |
| if ((val>=0x1D54A) && (val<=0x1D550)) return L; //# L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y | |
| if ((val>=0x1D552) && (val<=0x1D6A5)) return L; //# L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J | |
| if ((val>=0x1D6A8) && (val<=0x1D6C0)) return L; //# L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA | |
| if (val==0x0001D6C1) return L; //# Sm MATHEMATICAL BOLD NABLA | |
| if ((val>=0x1D6C2) && (val<=0x1D6DA)) return L; //# L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA | |
| if (val==0x0001D6DB) return L; //# Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL | |
| if ((val>=0x1D6DC) && (val<=0x1D6FA)) return L; //# L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA | |
| if (val==0x0001D6FB) return L; //# Sm MATHEMATICAL ITALIC NABLA | |
| if ((val>=0x1D6FC) && (val<=0x1D714)) return L; //# L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA | |
| if (val==0x0001D715) return L; //# Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL | |
| if ((val>=0x1D716) && (val<=0x1D734)) return L; //# L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA | |
| if (val==0x0001D735) return L; //# Sm MATHEMATICAL BOLD ITALIC NABLA | |
| if ((val>=0x1D736) && (val<=0x1D74E)) return L; //# L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA | |
| if (val==0x0001D74F) return L; //# Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL | |
| if ((val>=0x1D750) && (val<=0x1D76E)) return L; //# L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA | |
| if (val==0x0001D76F) return L; //# Sm MATHEMATICAL SANS-SERIF BOLD NABLA | |
| if ((val>=0x1D770) && (val<=0x1D788)) return L; //# L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA | |
| if (val==0x0001D789) return L; //# Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL | |
| if ((val>=0x1D78A) && (val<=0x1D7A8)) return L; //# L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA | |
| if (val==0x0001D7A9) return L; //# Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA | |
| if ((val>=0x1D7AA) && (val<=0x1D7C2)) return L; //# L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA | |
| if (val==0x0001D7C3) return L; //# Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL | |
| if ((val>=0x1D7C4) && (val<=0x1D7CB)) return L; //# L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA | |
| if ((val>=0x20000) && (val<=0x2A6D6)) return L; //# Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6 | |
| if ((val>=0x2F800) && (val<=0x2FA1D)) return L; //# Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D | |
| if ((val>=0xF0000) && (val<=0xFFFFD)) return L; //# Co [65534] <private-use-F0000>..<private-use-FFFFD> | |
| if ((val>=0x100000) && (val<=0x10FFFD)) return L; //# Co [65534] <private-use-100000>..<private-use-10FFFD> | |
| if (val==0x00000590) return R; //# Cn <reserved-0590> | |
| if (val==0x000005BE) return R; //# Po HEBREW PUNCTUATION MAQAF | |
| if (val==0x000005C0) return R; //# Po HEBREW PUNCTUATION PASEQ | |
| if (val==0x000005C3) return R; //# Po HEBREW PUNCTUATION SOF PASUQ | |
| if (val==0x000005C6) return R; //# Po HEBREW PUNCTUATION NUN HAFUKHA | |
| if ((val>=0x05C8) && (val<=0x05CF)) return R; //# Cn [8] <reserved-05C8>..<reserved-05CF> | |
| if ((val>=0x05D0) && (val<=0x05EA)) return R; //# Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV | |
| if ((val>=0x05EB) && (val<=0x05EF)) return R; //# Cn [5] <reserved-05EB>..<reserved-05EF> | |
| if ((val>=0x05F0) && (val<=0x05F2)) return R; //# Lo [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD | |
| if ((val>=0x05F3) && (val<=0x05F4)) return R; //# Po [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM | |
| if ((val>=0x05F5) && (val<=0x05FF)) return R; //# Cn [11] <reserved-05F5>..<reserved-05FF> | |
| if ((val>=0x07C0) && (val<=0x07C9)) return R; //# Nd [10] NKO DIGIT ZERO..NKO DIGIT NINE | |
| if ((val>=0x07CA) && (val<=0x07EA)) return R; //# Lo [33] NKO LETTER A..NKO LETTER JONA RA | |
| if ((val>=0x07F4) && (val<=0x07F5)) return R; //# Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE | |
| if (val==0x000007FA) return R; //# Lm NKO LAJANYALAN | |
| if ((val>=0x07FB) && (val<=0x08FF)) return R; //# Cn [261] <reserved-07FB>..<reserved-08FF> | |
| if (val==0x0000200F) return R; //# Cf RIGHT-TO-LEFT MARK | |
| if (val==0x0000FB1D) return R; //# Lo HEBREW LETTER YOD WITH HIRIQ | |
| if ((val>=0xFB1F) && (val<=0xFB28)) return R; //# Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV | |
| if ((val>=0xFB2A) && (val<=0xFB36)) return R; //# Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH | |
| if (val==0x0000FB37) return R; //# Cn <reserved-FB37> | |
| if ((val>=0xFB38) && (val<=0xFB3C)) return R; //# Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH | |
| if (val==0x0000FB3D) return R; //# Cn <reserved-FB3D> | |
| if (val==0x0000FB3E) return R; //# Lo HEBREW LETTER MEM WITH DAGESH | |
| if (val==0x0000FB3F) return R; //# Cn <reserved-FB3F> | |
| if ((val>=0xFB40) && (val<=0xFB41)) return R; //# Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH | |
| if (val==0x0000FB42) return R; //# Cn <reserved-FB42> | |
| if ((val>=0xFB43) && (val<=0xFB44)) return R; //# Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH | |
| if (val==0x0000FB45) return R; //# Cn <reserved-FB45> | |
| if ((val>=0xFB46) && (val<=0xFB4F)) return R; //# Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED | |
| if ((val>=0x10800) && (val<=0x10805)) return R; //# Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA | |
| if ((val>=0x10806) && (val<=0x10807)) return R; //# Cn [2] <reserved-10806>..<reserved-10807> | |
| if (val==0x00010808) return R; //# Lo CYPRIOT SYLLABLE JO | |
| if (val==0x00010809) return R; //# Cn <reserved-10809> | |
| if ((val>=0x1080A) && (val<=0x10835)) return R; //# Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO | |
| if (val==0x00010836) return R; //# Cn <reserved-10836> | |
| if ((val>=0x10837) && (val<=0x10838)) return R; //# Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE | |
| if ((val>=0x10839) && (val<=0x1083B)) return R; //# Cn [3] <reserved-10839>..<reserved-1083B> | |
| if (val==0x0001083C) return R; //# Lo CYPRIOT SYLLABLE ZA | |
| if ((val>=0x1083D) && (val<=0x1083E)) return R; //# Cn [2] <reserved-1083D>..<reserved-1083E> | |
| if (val==0x0001083F) return R; //# Lo CYPRIOT SYLLABLE ZO | |
| if ((val>=0x10840) && (val<=0x108FF)) return R; //# Cn [192] <reserved-10840>..<reserved-108FF> | |
| if ((val>=0x10900) && (val<=0x10915)) return R; //# Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU | |
| if ((val>=0x10916) && (val<=0x10919)) return R; //# No [4] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER ONE HUNDRED | |
| if ((val>=0x1091A) && (val<=0x1091E)) return R; //# Cn [5] <reserved-1091A>..<reserved-1091E> | |
| if ((val>=0x10920) && (val<=0x109FF)) return R; //# Cn [224] <reserved-10920>..<reserved-109FF> | |
| if (val==0x00010A00) return R; //# Lo KHAROSHTHI LETTER A | |
| if (val==0x00010A04) return R; //# Cn <reserved-10A04> | |
| if ((val>=0x10A07) && (val<=0x10A0B)) return R; //# Cn [5] <reserved-10A07>..<reserved-10A0B> | |
| if ((val>=0x10A10) && (val<=0x10A13)) return R; //# Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA | |
| if (val==0x00010A14) return R; //# Cn <reserved-10A14> | |
| if ((val>=0x10A15) && (val<=0x10A17)) return R; //# Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA | |
| if (val==0x00010A18) return R; //# Cn <reserved-10A18> | |
| if ((val>=0x10A19) && (val<=0x10A33)) return R; //# Lo [27] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER TTTHA | |
| if ((val>=0x10A34) && (val<=0x10A37)) return R; //# Cn [4] <reserved-10A34>..<reserved-10A37> | |
| if ((val>=0x10A3B) && (val<=0x10A3E)) return R; //# Cn [4] <reserved-10A3B>..<reserved-10A3E> | |
| if ((val>=0x10A40) && (val<=0x10A47)) return R; //# No [8] KHAROSHTHI DIGIT ONE..KHAROSHTHI NUMBER ONE THOUSAND | |
| if ((val>=0x10A48) && (val<=0x10A4F)) return R; //# Cn [8] <reserved-10A48>..<reserved-10A4F> | |
| if ((val>=0x10A50) && (val<=0x10A58)) return R; //# Po [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES | |
| if ((val>=0x10A59) && (val<=0x10FFF)) return R; //# Cn [1447] <reserved-10A59>..<reserved-10FFF> | |
| if ((val>=0x0030) && (val<=0x0039)) return EN; //# Nd [10] DIGIT ZERO..DIGIT NINE | |
| if ((val>=0x00B2) && (val<=0x00B3)) return EN; //# No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE | |
| if (val==0x000000B9) return EN; //# No SUPERSCRIPT ONE | |
| if ((val>=0x06F0) && (val<=0x06F9)) return EN; //# Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE | |
| if (val==0x00002070) return EN; //# No SUPERSCRIPT ZERO | |
| if ((val>=0x2074) && (val<=0x2079)) return EN; //# No [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE | |
| if ((val>=0x2080) && (val<=0x2089)) return EN; //# No [10] SUBSCRIPT ZERO..SUBSCRIPT NINE | |
| if ((val>=0x2488) && (val<=0x249B)) return EN; //# No [20] DIGIT ONE FULL STOP..NUMBER TWENTY FULL STOP | |
| if ((val>=0xFF10) && (val<=0xFF19)) return EN; //# Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE | |
| if ((val>=0x1D7CE) && (val<=0x1D7FF)) return EN; //# Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE | |
| if (val==0x0000002B) return ES; //# Sm PLUS SIGN | |
| if (val==0x0000002D) return ES; //# Pd HYPHEN-MINUS | |
| if ((val>=0x207A) && (val<=0x207B)) return ES; //# Sm [2] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT MINUS | |
| if ((val>=0x208A) && (val<=0x208B)) return ES; //# Sm [2] SUBSCRIPT PLUS SIGN..SUBSCRIPT MINUS | |
| if (val==0x00002212) return ES; //# Sm MINUS SIGN | |
| if (val==0x0000FB29) return ES; //# Sm HEBREW LETTER ALTERNATIVE PLUS SIGN | |
| if (val==0x0000FE62) return ES; //# Sm SMALL PLUS SIGN | |
| if (val==0x0000FE63) return ES; //# Pd SMALL HYPHEN-MINUS | |
| if (val==0x0000FF0B) return ES; //# Sm FULLWIDTH PLUS SIGN | |
| if (val==0x0000FF0D) return ES; //# Pd FULLWIDTH HYPHEN-MINUS | |
| if (val==0x00000023) return ET; //# Po NUMBER SIGN | |
| if (val==0x00000024) return ET; //# Sc DOLLAR SIGN | |
| if (val==0x00000025) return ET; //# Po PERCENT SIGN | |
| if ((val>=0x00A2) && (val<=0x00A5)) return ET; //# Sc [4] CENT SIGN..YEN SIGN | |
| if (val==0x000000B0) return ET; //# So DEGREE SIGN | |
| if (val==0x000000B1) return ET; //# Sm PLUS-MINUS SIGN | |
| if (val==0x0000066A) return ET; //# Po ARABIC PERCENT SIGN | |
| if ((val>=0x09F2) && (val<=0x09F3)) return ET; //# Sc [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN | |
| if (val==0x00000AF1) return ET; //# Sc GUJARATI RUPEE SIGN | |
| if (val==0x00000BF9) return ET; //# Sc TAMIL RUPEE SIGN | |
| if (val==0x00000E3F) return ET; //# Sc THAI CURRENCY SYMBOL BAHT | |
| if (val==0x000017DB) return ET; //# Sc KHMER CURRENCY SYMBOL RIEL | |
| if ((val>=0x2030) && (val<=0x2034)) return ET; //# Po [5] PER MILLE SIGN..TRIPLE PRIME | |
| if ((val>=0x20A0) && (val<=0x20B5)) return ET; //# Sc [22] EURO-CURRENCY SIGN..CEDI SIGN | |
| if (val==0x0000212E) return ET; //# So ESTIMATED SYMBOL | |
| if (val==0x00002213) return ET; //# Sm MINUS-OR-PLUS SIGN | |
| if (val==0x0000FE5F) return ET; //# Po SMALL NUMBER SIGN | |
| if (val==0x0000FE69) return ET; //# Sc SMALL DOLLAR SIGN | |
| if (val==0x0000FE6A) return ET; //# Po SMALL PERCENT SIGN | |
| if (val==0x0000FF03) return ET; //# Po FULLWIDTH NUMBER SIGN | |
| if (val==0x0000FF04) return ET; //# Sc FULLWIDTH DOLLAR SIGN | |
| if (val==0x0000FF05) return ET; //# Po FULLWIDTH PERCENT SIGN | |
| if ((val>=0xFFE0) && (val<=0xFFE1)) return ET; //# Sc [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN | |
| if ((val>=0xFFE5) && (val<=0xFFE6)) return ET; //# Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN | |
| if ((val>=0x0660) && (val<=0x0669)) return AN; //# Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE | |
| if ((val>=0x066B) && (val<=0x066C)) return AN; //# Po [2] ARABIC DECIMAL SEPARATOR..ARABIC THOUSANDS SEPARATOR | |
| if (val==0x0000002C) return CS; //# Po COMMA | |
| if ((val>=0x002E) && (val<=0x002F)) return CS; //# Po [2] FULL STOP..SOLIDUS | |
| if (val==0x0000003A) return CS; //# Po COLON | |
| if (val==0x000000A0) return CS; //# Zs NO-BREAK SPACE | |
| if (val==0x0000060C) return CS; //# Po ARABIC COMMA | |
| if (val==0x0000202F) return CS; //# Zs NARROW NO-BREAK SPACE | |
| if (val==0x00002044) return CS; //# Sm FRACTION SLASH | |
| if (val==0x0000FE50) return CS; //# Po SMALL COMMA | |
| if (val==0x0000FE52) return CS; //# Po SMALL FULL STOP | |
| if (val==0x0000FE55) return CS; //# Po SMALL COLON | |
| if (val==0x0000FF0C) return CS; //# Po FULLWIDTH COMMA | |
| if ((val>=0xFF0E) && (val<=0xFF0F)) return CS; //# Po [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS | |
| if (val==0x0000FF1A) return CS; //# Po FULLWIDTH COLON | |
| if (val==0x0000000A) return B; //# Cc <control-000A> | |
| if (val==0x0000000D) return B; //# Cc <control-000D> | |
| if ((val>=0x001C) && (val<=0x001E)) return B; //# Cc [3] <control-001C>..<control-001E> | |
| if (val==0x00000085) return B; //# Cc <control-0085> | |
| if (val==0x00002029) return B; //# Zp PARAGRAPH SEPARATOR | |
| if (val==0x00000009) return S; //# Cc <control-0009> | |
| if (val==0x0000000B) return S; //# Cc <control-000B> | |
| if (val==0x0000001F) return S; //# Cc <control-001F> | |
| if (val==0x0000000C) return WS; //# Cc <control-000C> | |
| if (val==0x00000020) return WS; //# Zs SPACE | |
| if (val==0x00001680) return WS; //# Zs OGHAM SPACE MARK | |
| if (val==0x0000180E) return WS; //# Zs MONGOLIAN VOWEL SEPARATOR | |
| if ((val>=0x2000) && (val<=0x200A)) return WS; //# Zs [11] EN QUAD..HAIR SPACE | |
| if (val==0x00002028) return WS; //# Zl LINE SEPARATOR | |
| if (val==0x0000205F) return WS; //# Zs MEDIUM MATHEMATICAL SPACE | |
| if (val==0x00003000) return WS; //# Zs IDEOGRAPHIC SPACE | |
| if ((val>=0x0021) && (val<=0x0022)) return ON; //# Po [2] EXCLAMATION MARK..QUOTATION MARK | |
| if ((val>=0x0026) && (val<=0x0027)) return ON; //# Po [2] AMPERSAND..APOSTROPHE | |
| if (val==0x00000028) return ON; //# Ps LEFT PARENTHESIS | |
| if (val==0x00000029) return ON; //# Pe RIGHT PARENTHESIS | |
| if (val==0x0000002A) return ON; //# Po ASTERISK | |
| if (val==0x0000003B) return ON; //# Po SEMICOLON | |
| if ((val>=0x003C) && (val<=0x003E)) return ON; //# Sm [3] LESS-THAN SIGN..GREATER-THAN SIGN | |
| if ((val>=0x003F) && (val<=0x0040)) return ON; //# Po [2] QUESTION MARK..COMMERCIAL AT | |
| if (val==0x0000005B) return ON; //# Ps LEFT SQUARE BRACKET | |
| if (val==0x0000005C) return ON; //# Po REVERSE SOLIDUS | |
| if (val==0x0000005D) return ON; //# Pe RIGHT SQUARE BRACKET | |
| if (val==0x0000005E) return ON; //# Sk CIRCUMFLEX ACCENT | |
| if (val==0x0000005F) return ON; //# Pc LOW LINE | |
| if (val==0x00000060) return ON; //# Sk GRAVE ACCENT | |
| if (val==0x0000007B) return ON; //# Ps LEFT CURLY BRACKET | |
| if (val==0x0000007C) return ON; //# Sm VERTICAL LINE | |
| if (val==0x0000007D) return ON; //# Pe RIGHT CURLY BRACKET | |
| if (val==0x0000007E) return ON; //# Sm TILDE | |
| if (val==0x000000A1) return ON; //# Po INVERTED EXCLAMATION MARK | |
| if ((val>=0x00A6) && (val<=0x00A7)) return ON; //# So [2] BROKEN BAR..SECTION SIGN | |
| if (val==0x000000A8) return ON; //# Sk DIAERESIS | |
| if (val==0x000000A9) return ON; //# So COPYRIGHT SIGN | |
| if (val==0x000000AB) return ON; //# Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
| if (val==0x000000AC) return ON; //# Sm NOT SIGN | |
| if (val==0x000000AE) return ON; //# So REGISTERED SIGN | |
| if (val==0x000000AF) return ON; //# Sk MACRON | |
| if (val==0x000000B4) return ON; //# Sk ACUTE ACCENT | |
| if (val==0x000000B6) return ON; //# So PILCROW SIGN | |
| if (val==0x000000B7) return ON; //# Po MIDDLE DOT | |
| if (val==0x000000B8) return ON; //# Sk CEDILLA | |
| if (val==0x000000BB) return ON; //# Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
| if ((val>=0x00BC) && (val<=0x00BE)) return ON; //# No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS | |
| if (val==0x000000BF) return ON; //# Po INVERTED QUESTION MARK | |
| if (val==0x000000D7) return ON; //# Sm MULTIPLICATION SIGN | |
| if (val==0x000000F7) return ON; //# Sm DIVISION SIGN | |
| if ((val>=0x02B9) && (val<=0x02BA)) return ON; //# Lm [2] MODIFIER LETTER PRIME..MODIFIER LETTER DOUBLE PRIME | |
| if ((val>=0x02C2) && (val<=0x02C5)) return ON; //# Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD | |
| if ((val>=0x02C6) && (val<=0x02CF)) return ON; //# Lm [10] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER LOW ACUTE ACCENT | |
| if ((val>=0x02D2) && (val<=0x02DF)) return ON; //# Sk [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT | |
| if ((val>=0x02E5) && (val<=0x02ED)) return ON; //# Sk [9] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER UNASPIRATED | |
| if ((val>=0x02EF) && (val<=0x02FF)) return ON; //# Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW | |
| if ((val>=0x0374) && (val<=0x0375)) return ON; //# Sk [2] GREEK NUMERAL SIGN..GREEK LOWER NUMERAL SIGN | |
| if (val==0x0000037E) return ON; //# Po GREEK QUESTION MARK | |
| if ((val>=0x0384) && (val<=0x0385)) return ON; //# Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS | |
| if (val==0x00000387) return ON; //# Po GREEK ANO TELEIA | |
| if (val==0x000003F6) return ON; //# Sm GREEK REVERSED LUNATE EPSILON SYMBOL | |
| if (val==0x0000058A) return ON; //# Pd ARMENIAN HYPHEN | |
| if ((val>=0x060E) && (val<=0x060F)) return ON; //# So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA | |
| if (val==0x000006E9) return ON; //# So ARABIC PLACE OF SAJDAH | |
| if (val==0x000007F6) return ON; //# So NKO SYMBOL OO DENNEN | |
| if ((val>=0x07F7) && (val<=0x07F9)) return ON; //# Po [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK | |
| if ((val>=0x0BF3) && (val<=0x0BF8)) return ON; //# So [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN | |
| if (val==0x00000BFA) return ON; //# So TAMIL NUMBER SIGN | |
| if ((val>=0x0CF1) && (val<=0x0CF2)) return ON; //# So [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA | |
| if (val==0x00000F3A) return ON; //# Ps TIBETAN MARK GUG RTAGS GYON | |
| if (val==0x00000F3B) return ON; //# Pe TIBETAN MARK GUG RTAGS GYAS | |
| if (val==0x00000F3C) return ON; //# Ps TIBETAN MARK ANG KHANG GYON | |
| if (val==0x00000F3D) return ON; //# Pe TIBETAN MARK ANG KHANG GYAS | |
| if ((val>=0x1390) && (val<=0x1399)) return ON; //# So [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT | |
| if (val==0x0000169B) return ON; //# Ps OGHAM FEATHER MARK | |
| if (val==0x0000169C) return ON; //# Pe OGHAM REVERSED FEATHER MARK | |
| if ((val>=0x17F0) && (val<=0x17F9)) return ON; //# No [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON | |
| if ((val>=0x1800) && (val<=0x1805)) return ON; //# Po [6] MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS | |
| if (val==0x00001806) return ON; //# Pd MONGOLIAN TODO SOFT HYPHEN | |
| if ((val>=0x1807) && (val<=0x180A)) return ON; //# Po [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU | |
| if (val==0x00001940) return ON; //# So LIMBU SIGN LOO | |
| if ((val>=0x1944) && (val<=0x1945)) return ON; //# Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK | |
| if ((val>=0x19DE) && (val<=0x19DF)) return ON; //# Po [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV | |
| if ((val>=0x19E0) && (val<=0x19FF)) return ON; //# So [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC | |
| if (val==0x00001FBD) return ON; //# Sk GREEK KORONIS | |
| if ((val>=0x1FBF) && (val<=0x1FC1)) return ON; //# Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI | |
| if ((val>=0x1FCD) && (val<=0x1FCF)) return ON; //# Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI | |
| if ((val>=0x1FDD) && (val<=0x1FDF)) return ON; //# Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI | |
| if ((val>=0x1FED) && (val<=0x1FEF)) return ON; //# Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA | |
| if ((val>=0x1FFD) && (val<=0x1FFE)) return ON; //# Sk [2] GREEK OXIA..GREEK DASIA | |
| if ((val>=0x2010) && (val<=0x2015)) return ON; //# Pd [6] HYPHEN..HORIZONTAL BAR | |
| if ((val>=0x2016) && (val<=0x2017)) return ON; //# Po [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE | |
| if (val==0x00002018) return ON; //# Pi LEFT SINGLE QUOTATION MARK | |
| if (val==0x00002019) return ON; //# Pf RIGHT SINGLE QUOTATION MARK | |
| if (val==0x0000201A) return ON; //# Ps SINGLE LOW-9 QUOTATION MARK | |
| if ((val>=0x201B) && (val<=0x201C)) return ON; //# Pi [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK | |
| if (val==0x0000201D) return ON; //# Pf RIGHT DOUBLE QUOTATION MARK | |
| if (val==0x0000201E) return ON; //# Ps DOUBLE LOW-9 QUOTATION MARK | |
| if (val==0x0000201F) return ON; //# Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK | |
| if ((val>=0x2020) && (val<=0x2027)) return ON; //# Po [8] DAGGER..HYPHENATION POINT | |
| if ((val>=0x2035) && (val<=0x2038)) return ON; //# Po [4] REVERSED PRIME..CARET | |
| if (val==0x00002039) return ON; //# Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK | |
| if (val==0x0000203A) return ON; //# Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK | |
| if ((val>=0x203B) && (val<=0x203E)) return ON; //# Po [4] REFERENCE MARK..OVERLINE | |
| if ((val>=0x203F) && (val<=0x2040)) return ON; //# Pc [2] UNDERTIE..CHARACTER TIE | |
| if ((val>=0x2041) && (val<=0x2043)) return ON; //# Po [3] CARET INSERTION POINT..HYPHEN BULLET | |
| if (val==0x00002045) return ON; //# Ps LEFT SQUARE BRACKET WITH QUILL | |
| if (val==0x00002046) return ON; //# Pe RIGHT SQUARE BRACKET WITH QUILL | |
| if ((val>=0x2047) && (val<=0x2051)) return ON; //# Po [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY | |
| if (val==0x00002052) return ON; //# Sm COMMERCIAL MINUS SIGN | |
| if (val==0x00002053) return ON; //# Po SWUNG DASH | |
| if (val==0x00002054) return ON; //# Pc INVERTED UNDERTIE | |
| if ((val>=0x2055) && (val<=0x205E)) return ON; //# Po [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS | |
| if (val==0x0000207C) return ON; //# Sm SUPERSCRIPT EQUALS SIGN | |
| if (val==0x0000207D) return ON; //# Ps SUPERSCRIPT LEFT PARENTHESIS | |
| if (val==0x0000207E) return ON; //# Pe SUPERSCRIPT RIGHT PARENTHESIS | |
| if (val==0x0000208C) return ON; //# Sm SUBSCRIPT EQUALS SIGN | |
| if (val==0x0000208D) return ON; //# Ps SUBSCRIPT LEFT PARENTHESIS | |
| if (val==0x0000208E) return ON; //# Pe SUBSCRIPT RIGHT PARENTHESIS | |
| if ((val>=0x2100) && (val<=0x2101)) return ON; //# So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT | |
| if ((val>=0x2103) && (val<=0x2106)) return ON; //# So [4] DEGREE CELSIUS..CADA UNA | |
| if ((val>=0x2108) && (val<=0x2109)) return ON; //# So [2] SCRUPLE..DEGREE FAHRENHEIT | |
| if (val==0x00002114) return ON; //# So L B BAR SYMBOL | |
| if ((val>=0x2116) && (val<=0x2118)) return ON; //# So [3] NUMERO SIGN..SCRIPT CAPITAL P | |
| if ((val>=0x211E) && (val<=0x2123)) return ON; //# So [6] PRESCRIPTION TAKE..VERSICLE | |
| if (val==0x00002125) return ON; //# So OUNCE SIGN | |
| if (val==0x00002127) return ON; //# So INVERTED OHM SIGN | |
| if (val==0x00002129) return ON; //# So TURNED GREEK SMALL LETTER IOTA | |
| if ((val>=0x213A) && (val<=0x213B)) return ON; //# So [2] ROTATED CAPITAL Q..FACSIMILE SIGN | |
| if ((val>=0x2140) && (val<=0x2144)) return ON; //# Sm [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y | |
| if (val==0x0000214A) return ON; //# So PROPERTY LINE | |
| if (val==0x0000214B) return ON; //# Sm TURNED AMPERSAND | |
| if ((val>=0x214C) && (val<=0x214D)) return ON; //# So [2] PER SIGN..AKTIESELSKAB | |
| if ((val>=0x2153) && (val<=0x215F)) return ON; //# No [13] VULGAR FRACTION ONE THIRD..FRACTION NUMERATOR ONE | |
| if ((val>=0x2190) && (val<=0x2194)) return ON; //# Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW | |
| if ((val>=0x2195) && (val<=0x2199)) return ON; //# So [5] UP DOWN ARROW..SOUTH WEST ARROW | |
| if ((val>=0x219A) && (val<=0x219B)) return ON; //# Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE | |
| if ((val>=0x219C) && (val<=0x219F)) return ON; //# So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW | |
| if (val==0x000021A0) return ON; //# Sm RIGHTWARDS TWO HEADED ARROW | |
| if ((val>=0x21A1) && (val<=0x21A2)) return ON; //# So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL | |
| if (val==0x000021A3) return ON; //# Sm RIGHTWARDS ARROW WITH TAIL | |
| if ((val>=0x21A4) && (val<=0x21A5)) return ON; //# So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR | |
| if (val==0x000021A6) return ON; //# Sm RIGHTWARDS ARROW FROM BAR | |
| if ((val>=0x21A7) && (val<=0x21AD)) return ON; //# So [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW | |
| if (val==0x000021AE) return ON; //# Sm LEFT RIGHT ARROW WITH STROKE | |
| if ((val>=0x21AF) && (val<=0x21CD)) return ON; //# So [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE | |
| if ((val>=0x21CE) && (val<=0x21CF)) return ON; //# Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE | |
| if ((val>=0x21D0) && (val<=0x21D1)) return ON; //# So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW | |
| if (val==0x000021D2) return ON; //# Sm RIGHTWARDS DOUBLE ARROW | |
| if (val==0x000021D3) return ON; //# So DOWNWARDS DOUBLE ARROW | |
| if (val==0x000021D4) return ON; //# Sm LEFT RIGHT DOUBLE ARROW | |
| if ((val>=0x21D5) && (val<=0x21F3)) return ON; //# So [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW | |
| if ((val>=0x21F4) && (val<=0x2211)) return ON; //# Sm [30] RIGHT ARROW WITH SMALL CIRCLE..N-ARY SUMMATION | |
| if ((val>=0x2214) && (val<=0x22FF)) return ON; //# Sm [236] DOT PLUS..Z NOTATION BAG MEMBERSHIP | |
| if ((val>=0x2300) && (val<=0x2307)) return ON; //# So [8] DIAMETER SIGN..WAVY LINE | |
| if ((val>=0x2308) && (val<=0x230B)) return ON; //# Sm [4] LEFT CEILING..RIGHT FLOOR | |
| if ((val>=0x230C) && (val<=0x231F)) return ON; //# So [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER | |
| if ((val>=0x2320) && (val<=0x2321)) return ON; //# Sm [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL | |
| if ((val>=0x2322) && (val<=0x2328)) return ON; //# So [7] FROWN..KEYBOARD | |
| if (val==0x00002329) return ON; //# Ps LEFT-POINTING ANGLE BRACKET | |
| if (val==0x0000232A) return ON; //# Pe RIGHT-POINTING ANGLE BRACKET | |
| if ((val>=0x232B) && (val<=0x2335)) return ON; //# So [11] ERASE TO THE LEFT..COUNTERSINK | |
| if (val==0x0000237B) return ON; //# So NOT CHECK MARK | |
| if (val==0x0000237C) return ON; //# Sm RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW | |
| if ((val>=0x237D) && (val<=0x2394)) return ON; //# So [24] SHOULDERED OPEN BOX..SOFTWARE-FUNCTION SYMBOL | |
| if ((val>=0x2396) && (val<=0x239A)) return ON; //# So [5] DECIMAL SEPARATOR KEY SYMBOL..CLEAR SCREEN SYMBOL | |
| if ((val>=0x239B) && (val<=0x23B3)) return ON; //# Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM | |
| if ((val>=0x23B4) && (val<=0x23DB)) return ON; //# So [40] TOP SQUARE BRACKET..FUSE | |
| if ((val>=0x23DC) && (val<=0x23E1)) return ON; //# Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET | |
| if ((val>=0x23E2) && (val<=0x23E7)) return ON; //# So [6] WHITE TRAPEZIUM..ELECTRICAL INTERSECTION | |
| if ((val>=0x2400) && (val<=0x2426)) return ON; //# So [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO | |
| if ((val>=0x2440) && (val<=0x244A)) return ON; //# So [11] OCR HOOK..OCR DOUBLE BACKSLASH | |
| if ((val>=0x2460) && (val<=0x2487)) return ON; //# No [40] CIRCLED DIGIT ONE..PARENTHESIZED NUMBER TWENTY | |
| if ((val>=0x24EA) && (val<=0x24FF)) return ON; //# No [22] CIRCLED DIGIT ZERO..NEGATIVE CIRCLED DIGIT ZERO | |
| if ((val>=0x2500) && (val<=0x25B6)) return ON; //# So [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE | |
| if (val==0x000025B7) return ON; //# Sm WHITE RIGHT-POINTING TRIANGLE | |
| if ((val>=0x25B8) && (val<=0x25C0)) return ON; //# So [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE | |
| if (val==0x000025C1) return ON; //# Sm WHITE LEFT-POINTING TRIANGLE | |
| if ((val>=0x25C2) && (val<=0x25F7)) return ON; //# So [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT | |
| if ((val>=0x25F8) && (val<=0x25FF)) return ON; //# Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE | |
| if ((val>=0x2600) && (val<=0x266E)) return ON; //# So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN | |
| if (val==0x0000266F) return ON; //# Sm MUSIC SHARP SIGN | |
| if ((val>=0x2670) && (val<=0x269C)) return ON; //# So [45] WEST SYRIAC CROSS..FLEUR-DE-LIS | |
| if ((val>=0x26A0) && (val<=0x26AB)) return ON; //# So [12] WARNING SIGN..MEDIUM BLACK CIRCLE | |
| if ((val>=0x26AD) && (val<=0x26B2)) return ON; //# So [6] MARRIAGE SYMBOL..NEUTER | |
| if ((val>=0x2701) && (val<=0x2704)) return ON; //# So [4] UPPER BLADE SCISSORS..WHITE SCISSORS | |
| if ((val>=0x2706) && (val<=0x2709)) return ON; //# So [4] TELEPHONE LOCATION SIGN..ENVELOPE | |
| if ((val>=0x270C) && (val<=0x2727)) return ON; //# So [28] VICTORY HAND..WHITE FOUR POINTED STAR | |
| if ((val>=0x2729) && (val<=0x274B)) return ON; //# So [35] STRESS OUTLINED WHITE STAR..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK | |
| if (val==0x0000274D) return ON; //# So SHADOWED WHITE CIRCLE | |
| if ((val>=0x274F) && (val<=0x2752)) return ON; //# So [4] LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE | |
| if (val==0x00002756) return ON; //# So BLACK DIAMOND MINUS WHITE X | |
| if ((val>=0x2758) && (val<=0x275E)) return ON; //# So [7] LIGHT VERTICAL BAR..HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT | |
| if ((val>=0x2761) && (val<=0x2767)) return ON; //# So [7] CURVED STEM PARAGRAPH SIGN ORNAMENT..ROTATED FLORAL HEART BULLET | |
| if (val==0x00002768) return ON; //# Ps MEDIUM LEFT PARENTHESIS ORNAMENT | |
| if (val==0x00002769) return ON; //# Pe MEDIUM RIGHT PARENTHESIS ORNAMENT | |
| if (val==0x0000276A) return ON; //# Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT | |
| if (val==0x0000276B) return ON; //# Pe MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT | |
| if (val==0x0000276C) return ON; //# Ps MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT | |
| if (val==0x0000276D) return ON; //# Pe MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT | |
| if (val==0x0000276E) return ON; //# Ps HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT | |
| if (val==0x0000276F) return ON; //# Pe HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT | |
| if (val==0x00002770) return ON; //# Ps HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT | |
| if (val==0x00002771) return ON; //# Pe HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT | |
| if (val==0x00002772) return ON; //# Ps LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT | |
| if (val==0x00002773) return ON; //# Pe LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT | |
| if (val==0x00002774) return ON; //# Ps MEDIUM LEFT CURLY BRACKET ORNAMENT | |
| if (val==0x00002775) return ON; //# Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT | |
| if ((val>=0x2776) && (val<=0x2793)) return ON; //# No [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN | |
| if (val==0x00002794) return ON; //# So HEAVY WIDE-HEADED RIGHTWARDS ARROW | |
| if ((val>=0x2798) && (val<=0x27AF)) return ON; //# So [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW | |
| if ((val>=0x27B1) && (val<=0x27BE)) return ON; //# So [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW | |
| if ((val>=0x27C0) && (val<=0x27C4)) return ON; //# Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET | |
| if (val==0x000027C5) return ON; //# Ps LEFT S-SHAPED BAG DELIMITER | |
| if (val==0x000027C6) return ON; //# Pe RIGHT S-SHAPED BAG DELIMITER | |
| if ((val>=0x27C7) && (val<=0x27CA)) return ON; //# Sm [4] OR WITH DOT INSIDE..VERTICAL BAR WITH HORIZONTAL STROKE | |
| if ((val>=0x27D0) && (val<=0x27E5)) return ON; //# Sm [22] WHITE DIAMOND WITH CENTRED DOT..WHITE SQUARE WITH RIGHTWARDS TICK | |
| if (val==0x000027E6) return ON; //# Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET | |
| if (val==0x000027E7) return ON; //# Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET | |
| if (val==0x000027E8) return ON; //# Ps MATHEMATICAL LEFT ANGLE BRACKET | |
| if (val==0x000027E9) return ON; //# Pe MATHEMATICAL RIGHT ANGLE BRACKET | |
| if (val==0x000027EA) return ON; //# Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET | |
| if (val==0x000027EB) return ON; //# Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET | |
| if ((val>=0x27F0) && (val<=0x27FF)) return ON; //# Sm [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW | |
| if ((val>=0x2900) && (val<=0x2982)) return ON; //# Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON | |
| if (val==0x00002983) return ON; //# Ps LEFT WHITE CURLY BRACKET | |
| if (val==0x00002984) return ON; //# Pe RIGHT WHITE CURLY BRACKET | |
| if (val==0x00002985) return ON; //# Ps LEFT WHITE PARENTHESIS | |
| if (val==0x00002986) return ON; //# Pe RIGHT WHITE PARENTHESIS | |
| if (val==0x00002987) return ON; //# Ps Z NOTATION LEFT IMAGE BRACKET | |
| if (val==0x00002988) return ON; //# Pe Z NOTATION RIGHT IMAGE BRACKET | |
| if (val==0x00002989) return ON; //# Ps Z NOTATION LEFT BINDING BRACKET | |
| if (val==0x0000298A) return ON; //# Pe Z NOTATION RIGHT BINDING BRACKET | |
| if (val==0x0000298B) return ON; //# Ps LEFT SQUARE BRACKET WITH UNDERBAR | |
| if (val==0x0000298C) return ON; //# Pe RIGHT SQUARE BRACKET WITH UNDERBAR | |
| if (val==0x0000298D) return ON; //# Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER | |
| if (val==0x0000298E) return ON; //# Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER | |
| if (val==0x0000298F) return ON; //# Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER | |
| if (val==0x00002990) return ON; //# Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER | |
| if (val==0x00002991) return ON; //# Ps LEFT ANGLE BRACKET WITH DOT | |
| if (val==0x00002992) return ON; //# Pe RIGHT ANGLE BRACKET WITH DOT | |
| if (val==0x00002993) return ON; //# Ps LEFT ARC LESS-THAN BRACKET | |
| if (val==0x00002994) return ON; //# Pe RIGHT ARC GREATER-THAN BRACKET | |
| if (val==0x00002995) return ON; //# Ps DOUBLE LEFT ARC GREATER-THAN BRACKET | |
| if (val==0x00002996) return ON; //# Pe DOUBLE RIGHT ARC LESS-THAN BRACKET | |
| if (val==0x00002997) return ON; //# Ps LEFT BLACK TORTOISE SHELL BRACKET | |
| if (val==0x00002998) return ON; //# Pe RIGHT BLACK TORTOISE SHELL BRACKET | |
| if ((val>=0x2999) && (val<=0x29D7)) return ON; //# Sm [63] DOTTED FENCE..BLACK HOURGLASS | |
| if (val==0x000029D8) return ON; //# Ps LEFT WIGGLY FENCE | |
| if (val==0x000029D9) return ON; //# Pe RIGHT WIGGLY FENCE | |
| if (val==0x000029DA) return ON; //# Ps LEFT DOUBLE WIGGLY FENCE | |
| if (val==0x000029DB) return ON; //# Pe RIGHT DOUBLE WIGGLY FENCE | |
| if ((val>=0x29DC) && (val<=0x29FB)) return ON; //# Sm [32] INCOMPLETE INFINITY..TRIPLE PLUS | |
| if (val==0x000029FC) return ON; //# Ps LEFT-POINTING CURVED ANGLE BRACKET | |
| if (val==0x000029FD) return ON; //# Pe RIGHT-POINTING CURVED ANGLE BRACKET | |
| if ((val>=0x29FE) && (val<=0x2AFF)) return ON; //# Sm [258] TINY..N-ARY WHITE VERTICAL BAR | |
| if ((val>=0x2B00) && (val<=0x2B1A)) return ON; //# So [27] NORTH EAST WHITE ARROW..DOTTED SQUARE | |
| if ((val>=0x2B20) && (val<=0x2B23)) return ON; //# So [4] WHITE PENTAGON..HORIZONTAL BLACK HEXAGON | |
| if ((val>=0x2CE5) && (val<=0x2CEA)) return ON; //# So [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA | |
| if ((val>=0x2CF9) && (val<=0x2CFC)) return ON; //# Po [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER | |
| if (val==0x00002CFD) return ON; //# No COPTIC FRACTION ONE HALF | |
| if ((val>=0x2CFE) && (val<=0x2CFF)) return ON; //# Po [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER | |
| if ((val>=0x2E00) && (val<=0x2E01)) return ON; //# Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER | |
| if (val==0x00002E02) return ON; //# Pi LEFT SUBSTITUTION BRACKET | |
| if (val==0x00002E03) return ON; //# Pf RIGHT SUBSTITUTION BRACKET | |
| if (val==0x00002E04) return ON; //# Pi LEFT DOTTED SUBSTITUTION BRACKET | |
| if (val==0x00002E05) return ON; //# Pf RIGHT DOTTED SUBSTITUTION BRACKET | |
| if ((val>=0x2E06) && (val<=0x2E08)) return ON; //# Po [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER | |
| if (val==0x00002E09) return ON; //# Pi LEFT TRANSPOSITION BRACKET | |
| if (val==0x00002E0A) return ON; //# Pf RIGHT TRANSPOSITION BRACKET | |
| if (val==0x00002E0B) return ON; //# Po RAISED SQUARE | |
| if (val==0x00002E0C) return ON; //# Pi LEFT RAISED OMISSION BRACKET | |
| if (val==0x00002E0D) return ON; //# Pf RIGHT RAISED OMISSION BRACKET | |
| if ((val>=0x2E0E) && (val<=0x2E16)) return ON; //# Po [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE | |
| if (val==0x00002E17) return ON; //# Pd DOUBLE OBLIQUE HYPHEN | |
| if (val==0x00002E1C) return ON; //# Pi LEFT LOW PARAPHRASE BRACKET | |
| if (val==0x00002E1D) return ON; //# Pf RIGHT LOW PARAPHRASE BRACKET | |
| if ((val>=0x2E80) && (val<=0x2E99)) return ON; //# So [26] CJK RADICAL REPEAT..CJK RADICAL RAP | |
| if ((val>=0x2E9B) && (val<=0x2EF3)) return ON; //# So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE | |
| if ((val>=0x2F00) && (val<=0x2FD5)) return ON; //# So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE | |
| if ((val>=0x2FF0) && (val<=0x2FFB)) return ON; //# So [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID | |
| if ((val>=0x3001) && (val<=0x3003)) return ON; //# Po [3] IDEOGRAPHIC COMMA..DITTO MARK | |
| if (val==0x00003004) return ON; //# So JAPANESE INDUSTRIAL STANDARD SYMBOL | |
| if (val==0x00003008) return ON; //# Ps LEFT ANGLE BRACKET | |
| if (val==0x00003009) return ON; //# Pe RIGHT ANGLE BRACKET | |
| if (val==0x0000300A) return ON; //# Ps LEFT DOUBLE ANGLE BRACKET | |
| if (val==0x0000300B) return ON; //# Pe RIGHT DOUBLE ANGLE BRACKET | |
| if (val==0x0000300C) return ON; //# Ps LEFT CORNER BRACKET | |
| if (val==0x0000300D) return ON; //# Pe RIGHT CORNER BRACKET | |
| if (val==0x0000300E) return ON; //# Ps LEFT WHITE CORNER BRACKET | |
| if (val==0x0000300F) return ON; //# Pe RIGHT WHITE CORNER BRACKET | |
| if (val==0x00003010) return ON; //# Ps LEFT BLACK LENTICULAR BRACKET | |
| if (val==0x00003011) return ON; //# Pe RIGHT BLACK LENTICULAR BRACKET | |
| if ((val>=0x3012) && (val<=0x3013)) return ON; //# So [2] POSTAL MARK..GETA MARK | |
| if (val==0x00003014) return ON; //# Ps LEFT TORTOISE SHELL BRACKET | |
| if (val==0x00003015) return ON; //# Pe RIGHT TORTOISE SHELL BRACKET | |
| if (val==0x00003016) return ON; //# Ps LEFT WHITE LENTICULAR BRACKET | |
| if (val==0x00003017) return ON; //# Pe RIGHT WHITE LENTICULAR BRACKET | |
| if (val==0x00003018) return ON; //# Ps LEFT WHITE TORTOISE SHELL BRACKET | |
| if (val==0x00003019) return ON; //# Pe RIGHT WHITE TORTOISE SHELL BRACKET | |
| if (val==0x0000301A) return ON; //# Ps LEFT WHITE SQUARE BRACKET | |
| if (val==0x0000301B) return ON; //# Pe RIGHT WHITE SQUARE BRACKET | |
| if (val==0x0000301C) return ON; //# Pd WAVE DASH | |
| if (val==0x0000301D) return ON; //# Ps REVERSED DOUBLE PRIME QUOTATION MARK | |
| if ((val>=0x301E) && (val<=0x301F)) return ON; //# Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK | |
| if (val==0x00003020) return ON; //# So POSTAL MARK FACE | |
| if (val==0x00003030) return ON; //# Pd WAVY DASH | |
| if ((val>=0x3036) && (val<=0x3037)) return ON; //# So [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL | |
| if (val==0x0000303D) return ON; //# Po PART ALTERNATION MARK | |
| if ((val>=0x303E) && (val<=0x303F)) return ON; //# So [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE | |
| if ((val>=0x309B) && (val<=0x309C)) return ON; //# Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK | |
| if (val==0x000030A0) return ON; //# Pd KATAKANA-HIRAGANA DOUBLE HYPHEN | |
| if (val==0x000030FB) return ON; //# Po KATAKANA MIDDLE DOT | |
| if ((val>=0x31C0) && (val<=0x31CF)) return ON; //# So [16] CJK STROKE T..CJK STROKE N | |
| if ((val>=0x321D) && (val<=0x321E)) return ON; //# So [2] PARENTHESIZED KOREAN CHARACTER OJEON..PARENTHESIZED KOREAN CHARACTER O HU | |
| if (val==0x00003250) return ON; //# So PARTNERSHIP SIGN | |
| if ((val>=0x3251) && (val<=0x325F)) return ON; //# No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE | |
| if ((val>=0x327C) && (val<=0x327E)) return ON; //# So [3] CIRCLED KOREAN CHARACTER CHAMKO..CIRCLED HANGUL IEUNG U | |
| if ((val>=0x32B1) && (val<=0x32BF)) return ON; //# No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY | |
| if ((val>=0x32CC) && (val<=0x32CF)) return ON; //# So [4] SQUARE HG..LIMITED LIABILITY SIGN | |
| if ((val>=0x3377) && (val<=0x337A)) return ON; //# So [4] SQUARE DM..SQUARE IU | |
| if ((val>=0x33DE) && (val<=0x33DF)) return ON; //# So [2] SQUARE V OVER M..SQUARE A OVER M | |
| if (val==0x000033FF) return ON; //# So SQUARE GAL | |
| if ((val>=0x4DC0) && (val<=0x4DFF)) return ON; //# So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION | |
| if ((val>=0xA490) && (val<=0xA4C6)) return ON; //# So [55] YI RADICAL QOT..YI RADICAL KE | |
| if ((val>=0xA700) && (val<=0xA716)) return ON; //# Sk [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR | |
| if ((val>=0xA717) && (val<=0xA71A)) return ON; //# Lm [4] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOWER RIGHT CORNER ANGLE | |
| if ((val>=0xA720) && (val<=0xA721)) return ON; //# Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE | |
| if ((val>=0xA828) && (val<=0xA82B)) return ON; //# So [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4 | |
| if ((val>=0xA874) && (val<=0xA877)) return ON; //# Po [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD | |
| if (val==0x0000FD3E) return ON; //# Ps ORNATE LEFT PARENTHESIS | |
| if (val==0x0000FD3F) return ON; //# Pe ORNATE RIGHT PARENTHESIS | |
| if (val==0x0000FDFD) return ON; //# So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM | |
| if ((val>=0xFE10) && (val<=0xFE16)) return ON; //# Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK | |
| if (val==0x0000FE17) return ON; //# Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET | |
| if (val==0x0000FE18) return ON; //# Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET | |
| if (val==0x0000FE19) return ON; //# Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS | |
| if (val==0x0000FE30) return ON; //# Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER | |
| if ((val>=0xFE31) && (val<=0xFE32)) return ON; //# Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH | |
| if ((val>=0xFE33) && (val<=0xFE34)) return ON; //# Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE | |
| if (val==0x0000FE35) return ON; //# Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS | |
| if (val==0x0000FE36) return ON; //# Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS | |
| if (val==0x0000FE37) return ON; //# Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET | |
| if (val==0x0000FE38) return ON; //# Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET | |
| if (val==0x0000FE39) return ON; //# Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET | |
| if (val==0x0000FE3A) return ON; //# Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET | |
| if (val==0x0000FE3B) return ON; //# Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET | |
| if (val==0x0000FE3C) return ON; //# Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET | |
| if (val==0x0000FE3D) return ON; //# Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET | |
| if (val==0x0000FE3E) return ON; //# Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET | |
| if (val==0x0000FE3F) return ON; //# Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET | |
| if (val==0x0000FE40) return ON; //# Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET | |
| if (val==0x0000FE41) return ON; //# Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET | |
| if (val==0x0000FE42) return ON; //# Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET | |
| if (val==0x0000FE43) return ON; //# Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET | |
| if (val==0x0000FE44) return ON; //# Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET | |
| if ((val>=0xFE45) && (val<=0xFE46)) return ON; //# Po [2] SESAME DOT..WHITE SESAME DOT | |
| if (val==0x0000FE47) return ON; //# Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET | |
| if (val==0x0000FE48) return ON; //# Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET | |
| if ((val>=0xFE49) && (val<=0xFE4C)) return ON; //# Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE | |
| if ((val>=0xFE4D) && (val<=0xFE4F)) return ON; //# Pc [3] DASHED LOW LINE..WAVY LOW LINE | |
| if (val==0x0000FE51) return ON; //# Po SMALL IDEOGRAPHIC COMMA | |
| if (val==0x0000FE54) return ON; //# Po SMALL SEMICOLON | |
| if ((val>=0xFE56) && (val<=0xFE57)) return ON; //# Po [2] SMALL QUESTION MARK..SMALL EXCLAMATION MARK | |
| if (val==0x0000FE58) return ON; //# Pd SMALL EM DASH | |
| if (val==0x0000FE59) return ON; //# Ps SMALL LEFT PARENTHESIS | |
| if (val==0x0000FE5A) return ON; //# Pe SMALL RIGHT PARENTHESIS | |
| if (val==0x0000FE5B) return ON; //# Ps SMALL LEFT CURLY BRACKET | |
| if (val==0x0000FE5C) return ON; //# Pe SMALL RIGHT CURLY BRACKET | |
| if (val==0x0000FE5D) return ON; //# Ps SMALL LEFT TORTOISE SHELL BRACKET | |
| if (val==0x0000FE5E) return ON; //# Pe SMALL RIGHT TORTOISE SHELL BRACKET | |
| if ((val>=0xFE60) && (val<=0xFE61)) return ON; //# Po [2] SMALL AMPERSAND..SMALL ASTERISK | |
| if ((val>=0xFE64) && (val<=0xFE66)) return ON; //# Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN | |
| if (val==0x0000FE68) return ON; //# Po SMALL REVERSE SOLIDUS | |
| if (val==0x0000FE6B) return ON; //# Po SMALL COMMERCIAL AT | |
| if ((val>=0xFF01) && (val<=0xFF02)) return ON; //# Po [2] FULLWIDTH EXCLAMATION MARK..FULLWIDTH QUOTATION MARK | |
| if ((val>=0xFF06) && (val<=0xFF07)) return ON; //# Po [2] FULLWIDTH AMPERSAND..FULLWIDTH APOSTROPHE | |
| if (val==0x0000FF08) return ON; //# Ps FULLWIDTH LEFT PARENTHESIS | |
| if (val==0x0000FF09) return ON; //# Pe FULLWIDTH RIGHT PARENTHESIS | |
| if (val==0x0000FF0A) return ON; //# Po FULLWIDTH ASTERISK | |
| if (val==0x0000FF1B) return ON; //# Po FULLWIDTH SEMICOLON | |
| if ((val>=0xFF1C) && (val<=0xFF1E)) return ON; //# Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN | |
| if ((val>=0xFF1F) && (val<=0xFF20)) return ON; //# Po [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT | |
| if (val==0x0000FF3B) return ON; //# Ps FULLWIDTH LEFT SQUARE BRACKET | |
| if (val==0x0000FF3C) return ON; //# Po FULLWIDTH REVERSE SOLIDUS | |
| if (val==0x0000FF3D) return ON; //# Pe FULLWIDTH RIGHT SQUARE BRACKET | |
| if (val==0x0000FF3E) return ON; //# Sk FULLWIDTH CIRCUMFLEX ACCENT | |
| if (val==0x0000FF3F) return ON; //# Pc FULLWIDTH LOW LINE | |
| if (val==0x0000FF40) return ON; //# Sk FULLWIDTH GRAVE ACCENT | |
| if (val==0x0000FF5B) return ON; //# Ps FULLWIDTH LEFT CURLY BRACKET | |
| if (val==0x0000FF5C) return ON; //# Sm FULLWIDTH VERTICAL LINE | |
| if (val==0x0000FF5D) return ON; //# Pe FULLWIDTH RIGHT CURLY BRACKET | |
| if (val==0x0000FF5E) return ON; //# Sm FULLWIDTH TILDE | |
| if (val==0x0000FF5F) return ON; //# Ps FULLWIDTH LEFT WHITE PARENTHESIS | |
| if (val==0x0000FF60) return ON; //# Pe FULLWIDTH RIGHT WHITE PARENTHESIS | |
| if (val==0x0000FF61) return ON; //# Po HALFWIDTH IDEOGRAPHIC FULL STOP | |
| if (val==0x0000FF62) return ON; //# Ps HALFWIDTH LEFT CORNER BRACKET | |
| if (val==0x0000FF63) return ON; //# Pe HALFWIDTH RIGHT CORNER BRACKET | |
| if ((val>=0xFF64) && (val<=0xFF65)) return ON; //# Po [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT | |
| if (val==0x0000FFE2) return ON; //# Sm FULLWIDTH NOT SIGN | |
| if (val==0x0000FFE3) return ON; //# Sk FULLWIDTH MACRON | |
| if (val==0x0000FFE4) return ON; //# So FULLWIDTH BROKEN BAR | |
| if (val==0x0000FFE8) return ON; //# So HALFWIDTH FORMS LIGHT VERTICAL | |
| if ((val>=0xFFE9) && (val<=0xFFEC)) return ON; //# Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW | |
| if ((val>=0xFFED) && (val<=0xFFEE)) return ON; //# So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE | |
| if ((val>=0xFFF9) && (val<=0xFFFB)) return ON; //# Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR | |
| if ((val>=0xFFFC) && (val<=0xFFFD)) return ON; //# So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER | |
| if (val==0x00010101) return ON; //# Po AEGEAN WORD SEPARATOR DOT | |
| if ((val>=0x10140) && (val<=0x10174)) return ON; //# Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS | |
| if ((val>=0x10175) && (val<=0x10178)) return ON; //# No [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN | |
| if ((val>=0x10179) && (val<=0x10189)) return ON; //# So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN | |
| if (val==0x0001018A) return ON; //# No GREEK ZERO SIGN | |
| if (val==0x0001091F) return ON; //# Po PHOENICIAN WORD SEPARATOR | |
| if ((val>=0x1D200) && (val<=0x1D241)) return ON; //# So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54 | |
| if (val==0x0001D245) return ON; //# So GREEK MUSICAL LEIMMA | |
| if ((val>=0x1D300) && (val<=0x1D356)) return ON; //# So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING | |
| if (/*(val>=0x0000) && */(val<=0x0008)) return BN; //# Cc [9] <control-0000>..<control-0008> | |
| if ((val>=0x000E) && (val<=0x001B)) return BN; //# Cc [14] <control-000E>..<control-001B> | |
| if ((val>=0x007F) && (val<=0x0084)) return BN; //# Cc [6] <control-007F>..<control-0084> | |
| if ((val>=0x0086) && (val<=0x009F)) return BN; //# Cc [26] <control-0086>..<control-009F> | |
| if (val==0x000000AD) return BN; //# Cf SOFT HYPHEN | |
| if (val==0x0000070F) return BN; //# Cf SYRIAC ABBREVIATION MARK | |
| if ((val>=0x200B) && (val<=0x200D)) return BN; //# Cf [3] ZERO WIDTH SPACE..ZERO WIDTH JOINER | |
| if ((val>=0x2060) && (val<=0x2063)) return BN; //# Cf [4] WORD JOINER..INVISIBLE SEPARATOR | |
| if ((val>=0x2064) && (val<=0x2069)) return BN; //# Cn [6] <reserved-2064>..<reserved-2069> | |
| if ((val>=0x206A) && (val<=0x206F)) return BN; //# Cf [6] INHIBIT SYMMETRIC SWAPPING..NOMINAL DIGIT SHAPES | |
| if ((val>=0xFDD0) && (val<=0xFDEF)) return BN; //# Cn [32] <noncharacter-FDD0>..<noncharacter-FDEF> | |
| if (val==0x0000FEFF) return BN; //# Cf ZERO WIDTH NO-BREAK SPACE | |
| if ((val>=0xFFF0) && (val<=0xFFF8)) return BN; //# Cn [9] <reserved-FFF0>..<reserved-FFF8> | |
| if ((val>=0xFFFE) && (val<=0xFFFF)) return BN; //# Cn [2] <noncharacter-FFFE>..<noncharacter-FFFF> | |
| if ((val>=0x1D173) && (val<=0x1D17A)) return BN; //# Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE | |
| if ((val>=0x1FFFE) && (val<=0x1FFFF)) return BN; //# Cn [2] <noncharacter-1FFFE>..<noncharacter-1FFFF> | |
| if ((val>=0x2FFFE) && (val<=0x2FFFF)) return BN; //# Cn [2] <noncharacter-2FFFE>..<noncharacter-2FFFF> | |
| if ((val>=0x3FFFE) && (val<=0x3FFFF)) return BN; //# Cn [2] <noncharacter-3FFFE>..<noncharacter-3FFFF> | |
| if ((val>=0x4FFFE) && (val<=0x4FFFF)) return BN; //# Cn [2] <noncharacter-4FFFE>..<noncharacter-4FFFF> | |
| if ((val>=0x5FFFE) && (val<=0x5FFFF)) return BN; //# Cn [2] <noncharacter-5FFFE>..<noncharacter-5FFFF> | |
| if ((val>=0x6FFFE) && (val<=0x6FFFF)) return BN; //# Cn [2] <noncharacter-6FFFE>..<noncharacter-6FFFF> | |
| if ((val>=0x7FFFE) && (val<=0x7FFFF)) return BN; //# Cn [2] <noncharacter-7FFFE>..<noncharacter-7FFFF> | |
| if ((val>=0x8FFFE) && (val<=0x8FFFF)) return BN; //# Cn [2] <noncharacter-8FFFE>..<noncharacter-8FFFF> | |
| if ((val>=0x9FFFE) && (val<=0x9FFFF)) return BN; //# Cn [2] <noncharacter-9FFFE>..<noncharacter-9FFFF> | |
| if ((val>=0xAFFFE) && (val<=0xAFFFF)) return BN; //# Cn [2] <noncharacter-AFFFE>..<noncharacter-AFFFF> | |
| if ((val>=0xBFFFE) && (val<=0xBFFFF)) return BN; //# Cn [2] <noncharacter-BFFFE>..<noncharacter-BFFFF> | |
| if ((val>=0xCFFFE) && (val<=0xCFFFF)) return BN; //# Cn [2] <noncharacter-CFFFE>..<noncharacter-CFFFF> | |
| if ((val>=0xDFFFE) && (val<=0xE0000)) return BN; //# Cn [3] <noncharacter-DFFFE>..<reserved-E0000> | |
| if (val==0x000E0001) return BN; //# Cf LANGUAGE TAG | |
| if ((val>=0xE0002) && (val<=0xE001F)) return BN; //# Cn [30] <reserved-E0002>..<reserved-E001F> | |
| if ((val>=0xE0020) && (val<=0xE007F)) return BN; //# Cf [96] TAG SPACE..CANCEL TAG | |
| if ((val>=0xE0080) && (val<=0xE00FF)) return BN; //# Cn [128] <reserved-E0080>..<reserved-E00FF> | |
| if ((val>=0xE01F0) && (val<=0xE0FFF)) return BN; //# Cn [3600] <reserved-E01F0>..<reserved-E0FFF> | |
| if ((val>=0xEFFFE) && (val<=0xEFFFF)) return BN; //# Cn [2] <noncharacter-EFFFE>..<noncharacter-EFFFF> | |
| if ((val>=0xFFFFE) && (val<=0xFFFFF)) return BN; //# Cn [2] <noncharacter-FFFFE>..<noncharacter-FFFFF> | |
| if ((val>=0x10FFFE) && (val<=0x10FFFF)) return BN; //# Cn [2] <noncharacter-10FFFE>..<noncharacter-10FFFF> | |
| if ((val>=0x0300) && (val<=0x036F)) return NSM; //# Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X | |
| if ((val>=0x0483) && (val<=0x0486)) return NSM; //# Mn [4] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC PSILI PNEUMATA | |
| if ((val>=0x0488) && (val<=0x0489)) return NSM; //# Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN | |
| if ((val>=0x0591) && (val<=0x05BD)) return NSM; //# Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG | |
| if (val==0x000005BF) return NSM; //# Mn HEBREW POINT RAFE | |
| if ((val>=0x05C1) && (val<=0x05C2)) return NSM; //# Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT | |
| if ((val>=0x05C4) && (val<=0x05C5)) return NSM; //# Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT | |
| if (val==0x000005C7) return NSM; //# Mn HEBREW POINT QAMATS QATAN | |
| if ((val>=0x0610) && (val<=0x0615)) return NSM; //# Mn [6] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL HIGH TAH | |
| if ((val>=0x064B) && (val<=0x065E)) return NSM; //# Mn [20] ARABIC FATHATAN..ARABIC FATHA WITH TWO DOTS | |
| if (val==0x00000670) return NSM; //# Mn ARABIC LETTER SUPERSCRIPT ALEF | |
| if ((val>=0x06D6) && (val<=0x06DC)) return NSM; //# Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN | |
| if (val==0x000006DE) return NSM; //# Me ARABIC START OF RUB EL HIZB | |
| if ((val>=0x06DF) && (val<=0x06E4)) return NSM; //# Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA | |
| if ((val>=0x06E7) && (val<=0x06E8)) return NSM; //# Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON | |
| if ((val>=0x06EA) && (val<=0x06ED)) return NSM; //# Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM | |
| if (val==0x00000711) return NSM; //# Mn SYRIAC LETTER SUPERSCRIPT ALAPH | |
| if ((val>=0x0730) && (val<=0x074A)) return NSM; //# Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH | |
| if ((val>=0x07A6) && (val<=0x07B0)) return NSM; //# Mn [11] THAANA ABAFILI..THAANA SUKUN | |
| if ((val>=0x07EB) && (val<=0x07F3)) return NSM; //# Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE | |
| if ((val>=0x0901) && (val<=0x0902)) return NSM; //# Mn [2] DEVANAGARI SIGN CANDRABINDU..DEVANAGARI SIGN ANUSVARA | |
| if (val==0x0000093C) return NSM; //# Mn DEVANAGARI SIGN NUKTA | |
| if ((val>=0x0941) && (val<=0x0948)) return NSM; //# Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI | |
| if (val==0x0000094D) return NSM; //# Mn DEVANAGARI SIGN VIRAMA | |
| if ((val>=0x0951) && (val<=0x0954)) return NSM; //# Mn [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT | |
| if ((val>=0x0962) && (val<=0x0963)) return NSM; //# Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL | |
| if (val==0x00000981) return NSM; //# Mn BENGALI SIGN CANDRABINDU | |
| if (val==0x000009BC) return NSM; //# Mn BENGALI SIGN NUKTA | |
| if ((val>=0x09C1) && (val<=0x09C4)) return NSM; //# Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR | |
| if (val==0x000009CD) return NSM; //# Mn BENGALI SIGN VIRAMA | |
| if ((val>=0x09E2) && (val<=0x09E3)) return NSM; //# Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL | |
| if ((val>=0x0A01) && (val<=0x0A02)) return NSM; //# Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI | |
| if (val==0x00000A3C) return NSM; //# Mn GURMUKHI SIGN NUKTA | |
| if ((val>=0x0A41) && (val<=0x0A42)) return NSM; //# Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU | |
| if ((val>=0x0A47) && (val<=0x0A48)) return NSM; //# Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI | |
| if ((val>=0x0A4B) && (val<=0x0A4D)) return NSM; //# Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA | |
| if ((val>=0x0A70) && (val<=0x0A71)) return NSM; //# Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK | |
| if ((val>=0x0A81) && (val<=0x0A82)) return NSM; //# Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA | |
| if (val==0x00000ABC) return NSM; //# Mn GUJARATI SIGN NUKTA | |
| if ((val>=0x0AC1) && (val<=0x0AC5)) return NSM; //# Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E | |
| if ((val>=0x0AC7) && (val<=0x0AC8)) return NSM; //# Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI | |
| if (val==0x00000ACD) return NSM; //# Mn GUJARATI SIGN VIRAMA | |
| if ((val>=0x0AE2) && (val<=0x0AE3)) return NSM; //# Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL | |
| if (val==0x00000B01) return NSM; //# Mn ORIYA SIGN CANDRABINDU | |
| if (val==0x00000B3C) return NSM; //# Mn ORIYA SIGN NUKTA | |
| if (val==0x00000B3F) return NSM; //# Mn ORIYA VOWEL SIGN I | |
| if ((val>=0x0B41) && (val<=0x0B43)) return NSM; //# Mn [3] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC R | |
| if (val==0x00000B4D) return NSM; //# Mn ORIYA SIGN VIRAMA | |
| if (val==0x00000B56) return NSM; //# Mn ORIYA AI LENGTH MARK | |
| if (val==0x00000B82) return NSM; //# Mn TAMIL SIGN ANUSVARA | |
| if (val==0x00000BC0) return NSM; //# Mn TAMIL VOWEL SIGN II | |
| if (val==0x00000BCD) return NSM; //# Mn TAMIL SIGN VIRAMA | |
| if ((val>=0x0C3E) && (val<=0x0C40)) return NSM; //# Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II | |
| if ((val>=0x0C46) && (val<=0x0C48)) return NSM; //# Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI | |
| if ((val>=0x0C4A) && (val<=0x0C4D)) return NSM; //# Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA | |
| if ((val>=0x0C55) && (val<=0x0C56)) return NSM; //# Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK | |
| if (val==0x00000CBC) return NSM; //# Mn KANNADA SIGN NUKTA | |
| if ((val>=0x0CCC) && (val<=0x0CCD)) return NSM; //# Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA | |
| if ((val>=0x0CE2) && (val<=0x0CE3)) return NSM; //# Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL | |
| if ((val>=0x0D41) && (val<=0x0D43)) return NSM; //# Mn [3] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC R | |
| if (val==0x00000D4D) return NSM; //# Mn MALAYALAM SIGN VIRAMA | |
| if (val==0x00000DCA) return NSM; //# Mn SINHALA SIGN AL-LAKUNA | |
| if ((val>=0x0DD2) && (val<=0x0DD4)) return NSM; //# Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA | |
| if (val==0x00000DD6) return NSM; //# Mn SINHALA VOWEL SIGN DIGA PAA-PILLA | |
| if (val==0x00000E31) return NSM; //# Mn THAI CHARACTER MAI HAN-AKAT | |
| if ((val>=0x0E34) && (val<=0x0E3A)) return NSM; //# Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU | |
| if ((val>=0x0E47) && (val<=0x0E4E)) return NSM; //# Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN | |
| if (val==0x00000EB1) return NSM; //# Mn LAO VOWEL SIGN MAI KAN | |
| if ((val>=0x0EB4) && (val<=0x0EB9)) return NSM; //# Mn [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU | |
| if ((val>=0x0EBB) && (val<=0x0EBC)) return NSM; //# Mn [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO | |
| if ((val>=0x0EC8) && (val<=0x0ECD)) return NSM; //# Mn [6] LAO TONE MAI EK..LAO NIGGAHITA | |
| if ((val>=0x0F18) && (val<=0x0F19)) return NSM; //# Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS | |
| if (val==0x00000F35) return NSM; //# Mn TIBETAN MARK NGAS BZUNG NYI ZLA | |
| if (val==0x00000F37) return NSM; //# Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS | |
| if (val==0x00000F39) return NSM; //# Mn TIBETAN MARK TSA -PHRU | |
| if ((val>=0x0F71) && (val<=0x0F7E)) return NSM; //# Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO | |
| if ((val>=0x0F80) && (val<=0x0F84)) return NSM; //# Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA | |
| if ((val>=0x0F86) && (val<=0x0F87)) return NSM; //# Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS | |
| if ((val>=0x0F90) && (val<=0x0F97)) return NSM; //# Mn [8] TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER JA | |
| if ((val>=0x0F99) && (val<=0x0FBC)) return NSM; //# Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA | |
| if (val==0x00000FC6) return NSM; //# Mn TIBETAN SYMBOL PADMA GDAN | |
| if ((val>=0x102D) && (val<=0x1030)) return NSM; //# Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU | |
| if (val==0x00001032) return NSM; //# Mn MYANMAR VOWEL SIGN AI | |
| if ((val>=0x1036) && (val<=0x1037)) return NSM; //# Mn [2] MYANMAR SIGN ANUSVARA..MYANMAR SIGN DOT BELOW | |
| if (val==0x00001039) return NSM; //# Mn MYANMAR SIGN VIRAMA | |
| if ((val>=0x1058) && (val<=0x1059)) return NSM; //# Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL | |
| if (val==0x0000135F) return NSM; //# Mn ETHIOPIC COMBINING GEMINATION MARK | |
| if ((val>=0x1712) && (val<=0x1714)) return NSM; //# Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA | |
| if ((val>=0x1732) && (val<=0x1734)) return NSM; //# Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD | |
| if ((val>=0x1752) && (val<=0x1753)) return NSM; //# Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U | |
| if ((val>=0x1772) && (val<=0x1773)) return NSM; //# Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U | |
| if ((val>=0x17B7) && (val<=0x17BD)) return NSM; //# Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA | |
| if (val==0x000017C6) return NSM; //# Mn KHMER SIGN NIKAHIT | |
| if ((val>=0x17C9) && (val<=0x17D3)) return NSM; //# Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT | |
| if (val==0x000017DD) return NSM; //# Mn KHMER SIGN ATTHACAN | |
| if ((val>=0x180B) && (val<=0x180D)) return NSM; //# Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE | |
| if (val==0x000018A9) return NSM; //# Mn MONGOLIAN LETTER ALI GALI DAGALGA | |
| if ((val>=0x1920) && (val<=0x1922)) return NSM; //# Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U | |
| if ((val>=0x1927) && (val<=0x1928)) return NSM; //# Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O | |
| if ((val>=0x1929) && (val<=0x192B)) return NSM; //# Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA | |
| if (val==0x00001932) return NSM; //# Mn LIMBU SMALL LETTER ANUSVARA | |
| if ((val>=0x1939) && (val<=0x193B)) return NSM; //# Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I | |
| if ((val>=0x1A17) && (val<=0x1A18)) return NSM; //# Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U | |
| if ((val>=0x1B00) && (val<=0x1B03)) return NSM; //# Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG | |
| if (val==0x00001B34) return NSM; //# Mn BALINESE SIGN REREKAN | |
| if ((val>=0x1B36) && (val<=0x1B3A)) return NSM; //# Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA | |
| if (val==0x00001B3C) return NSM; //# Mn BALINESE VOWEL SIGN LA LENGA | |
| if (val==0x00001B42) return NSM; //# Mn BALINESE VOWEL SIGN PEPET | |
| if ((val>=0x1B6B) && (val<=0x1B73)) return NSM; //# Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG | |
| if ((val>=0x1DC0) && (val<=0x1DCA)) return NSM; //# Mn [11] COMBINING DOTTED GRAVE ACCENT..COMBINING LATIN SMALL LETTER R BELOW | |
| if ((val>=0x1DFE) && (val<=0x1DFF)) return NSM; //# Mn [2] COMBINING LEFT ARROWHEAD ABOVE..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW | |
| if ((val>=0x20D0) && (val<=0x20DC)) return NSM; //# Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE | |
| if ((val>=0x20DD) && (val<=0x20E0)) return NSM; //# Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH | |
| if (val==0x000020E1) return NSM; //# Mn COMBINING LEFT RIGHT ARROW ABOVE | |
| if ((val>=0x20E2) && (val<=0x20E4)) return NSM; //# Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE | |
| if ((val>=0x20E5) && (val<=0x20EF)) return NSM; //# Mn [11] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING RIGHT ARROW BELOW | |
| if ((val>=0x302A) && (val<=0x302F)) return NSM; //# Mn [6] IDEOGRAPHIC LEVEL TONE MARK..HANGUL DOUBLE DOT TONE MARK | |
| if ((val>=0x3099) && (val<=0x309A)) return NSM; //# Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK | |
| if (val==0x0000A802) return NSM; //# Mc SYLOTI NAGRI SIGN DVISVARA | |
| if (val==0x0000A806) return NSM; //# Mn SYLOTI NAGRI SIGN HASANTA | |
| if (val==0x0000A80B) return NSM; //# Mn SYLOTI NAGRI SIGN ANUSVARA | |
| if ((val>=0xA825) && (val<=0xA826)) return NSM; //# Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E | |
| if (val==0x0000FB1E) return NSM; //# Mn HEBREW POINT JUDEO-SPANISH VARIKA | |
| if ((val>=0xFE00) && (val<=0xFE0F)) return NSM; //# Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 | |
| if ((val>=0xFE20) && (val<=0xFE23)) return NSM; //# Mn [4] COMBINING LIGATURE LEFT HALF..COMBINING DOUBLE TILDE RIGHT HALF | |
| if ((val>=0x10A01) && (val<=0x10A03)) return NSM; //# Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R | |
| if ((val>=0x10A05) && (val<=0x10A06)) return NSM; //# Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O | |
| if ((val>=0x10A0C) && (val<=0x10A0F)) return NSM; //# Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA | |
| if ((val>=0x10A38) && (val<=0x10A3A)) return NSM; //# Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW | |
| if (val==0x00010A3F) return NSM; //# Mn KHAROSHTHI VIRAMA | |
| if ((val>=0x1D167) && (val<=0x1D169)) return NSM; //# Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 | |
| if ((val>=0x1D17B) && (val<=0x1D182)) return NSM; //# Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE | |
| if ((val>=0x1D185) && (val<=0x1D18B)) return NSM; //# Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE | |
| if ((val>=0x1D1AA) && (val<=0x1D1AD)) return NSM; //# Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO | |
| if ((val>=0x1D242) && (val<=0x1D244)) return NSM; //# Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME | |
| if ((val>=0xE0100) && (val<=0xE01EF)) return NSM; //# Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 | |
| if ((val>=0x0600) && (val<=0x0603)) return AL; //# Cf [4] ARABIC NUMBER SIGN..ARABIC SIGN SAFHA | |
| if ((val>=0x0604) && (val<=0x060A)) return AL; //# Cn [7] <reserved-0604>..<reserved-060A> | |
| if (val==0x0000060B) return AL; //# Sc AFGHANI SIGN | |
| if (val==0x0000060D) return AL; //# Po ARABIC DATE SEPARATOR | |
| if ((val>=0x0616) && (val<=0x061A)) return AL; //# Cn [5] <reserved-0616>..<reserved-061A> | |
| if (val==0x0000061B) return AL; //# Po ARABIC SEMICOLON | |
| if ((val>=0x061C) && (val<=0x061D)) return AL; //# Cn [2] <reserved-061C>..<reserved-061D> | |
| if ((val>=0x061E) && (val<=0x061F)) return AL; //# Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK | |
| if (val==0x00000620) return AL; //# Cn <reserved-0620> | |
| if ((val>=0x0621) && (val<=0x063A)) return AL; //# Lo [26] ARABIC LETTER HAMZA..ARABIC LETTER GHAIN | |
| if ((val>=0x063B) && (val<=0x063F)) return AL; //# Cn [5] <reserved-063B>..<reserved-063F> | |
| if (val==0x00000640) return AL; //# Lm ARABIC TATWEEL | |
| if ((val>=0x0641) && (val<=0x064A)) return AL; //# Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH | |
| if (val==0x0000065F) return AL; //# Cn <reserved-065F> | |
| if (val==0x0000066D) return AL; //# Po ARABIC FIVE POINTED STAR | |
| if ((val>=0x066E) && (val<=0x066F)) return AL; //# Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF | |
| if ((val>=0x0671) && (val<=0x06D3)) return AL; //# Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE | |
| if (val==0x000006D4) return AL; //# Po ARABIC FULL STOP | |
| if (val==0x000006D5) return AL; //# Lo ARABIC LETTER AE | |
| if (val==0x000006DD) return AL; //# Cf ARABIC END OF AYAH | |
| if ((val>=0x06E5) && (val<=0x06E6)) return AL; //# Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH | |
| if ((val>=0x06EE) && (val<=0x06EF)) return AL; //# Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V | |
| if ((val>=0x06FA) && (val<=0x06FC)) return AL; //# Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW | |
| if ((val>=0x06FD) && (val<=0x06FE)) return AL; //# So [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN | |
| if (val==0x000006FF) return AL; //# Lo ARABIC LETTER HEH WITH INVERTED V | |
| if ((val>=0x0700) && (val<=0x070D)) return AL; //# Po [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS | |
| if (val==0x0000070E) return AL; //# Cn <reserved-070E> | |
| if (val==0x00000710) return AL; //# Lo SYRIAC LETTER ALAPH | |
| if ((val>=0x0712) && (val<=0x072F)) return AL; //# Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH | |
| if ((val>=0x074B) && (val<=0x074C)) return AL; //# Cn [2] <reserved-074B>..<reserved-074C> | |
| if ((val>=0x074D) && (val<=0x076D)) return AL; //# Lo [33] SYRIAC LETTER SOGDIAN ZHAIN..ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE | |
| if ((val>=0x076E) && (val<=0x077F)) return AL; //# Cn [18] <reserved-076E>..<reserved-077F> | |
| if ((val>=0x0780) && (val<=0x07A5)) return AL; //# Lo [38] THAANA LETTER HAA..THAANA LETTER WAAVU | |
| if (val==0x000007B1) return AL; //# Lo THAANA LETTER NAA | |
| if ((val>=0x07B2) && (val<=0x07BF)) return AL; //# Cn [14] <reserved-07B2>..<reserved-07BF> | |
| if ((val>=0xFB50) && (val<=0xFBB1)) return AL; //# Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM | |
| if ((val>=0xFBB2) && (val<=0xFBD2)) return AL; //# Cn [33] <reserved-FBB2>..<reserved-FBD2> | |
| if ((val>=0xFBD3) && (val<=0xFD3D)) return AL; //# Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM | |
| if ((val>=0xFD40) && (val<=0xFD4F)) return AL; //# Cn [16] <reserved-FD40>..<reserved-FD4F> | |
| if ((val>=0xFD50) && (val<=0xFD8F)) return AL; //# Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM | |
| if ((val>=0xFD90) && (val<=0xFD91)) return AL; //# Cn [2] <reserved-FD90>..<reserved-FD91> | |
| if ((val>=0xFD92) && (val<=0xFDC7)) return AL; //# Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM | |
| if ((val>=0xFDC8) && (val<=0xFDCF)) return AL; //# Cn [8] <reserved-FDC8>..<reserved-FDCF> | |
| if ((val>=0xFDF0) && (val<=0xFDFB)) return AL; //# Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU | |
| if (val==0x0000FDFC) return AL; //# Sc RIAL SIGN | |
| if ((val>=0xFDFE) && (val<=0xFDFF)) return AL; //# Cn [2] <reserved-FDFE>..<reserved-FDFF> | |
| if ((val>=0xFE70) && (val<=0xFE74)) return AL; //# Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM | |
| if (val==0x0000FE75) return AL; //# Cn <reserved-FE75> | |
| if ((val>=0xFE76) && (val<=0xFEFC)) return AL; //# Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM | |
| if ((val>=0xFEFD) && (val<=0xFEFE)) return AL; //# Cn [2] <reserved-FEFD>..<reserved-FEFE> | |
| if (val==0x0000202D) return LRO; //# Cf LEFT-TO-RIGHT OVERRIDE | |
| if (val==0x0000202E) return RLO; //# Cf RIGHT-TO-LEFT OVERRIDE | |
| if (val==0x0000202A) return LRE; //# Cf LEFT-TO-RIGHT EMBEDDING | |
| if (val==0x0000202B) return RLE; //# Cf RIGHT-TO-LEFT EMBEDDING | |
| if (val==0x0000202C) return PDF; //# Cf POP DIRECTIONAL FORMATTING | |
| return L; | |
| } | |
| #endif //!defined(GPAC_DISABLE_SVG) && !defined(GPAC_DISABLE_COMPOSITOR) |