in src/utils/uni_bidi.c [197:1491]
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;
}