Line data Source code
1 : /*
2 : * GPAC - Multimedia Framework C SDK
3 : *
4 : * Authors: Jean Le Feuvre
5 : * Copyright (c) Telecom ParisTech 2007-2012
6 : * All rights reserved
7 : *
8 : * This file is part of GPAC / common tools sub-project
9 : *
10 : * GPAC is free software; you can redistribute it and/or modify
11 : * it under the terms of the GNU Lesser General Public License as published by
12 : * the Free Software Foundation; either version 2, or (at your option)
13 : * any later version.
14 : *
15 : * GPAC is distributed in the hope that it will be useful,
16 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 : * GNU Lesser General Public License for more details.
19 : *
20 : * You should have received a copy of the GNU Lesser General Public
21 : * License along with this library; see the file COPYING. If not, write to
22 : * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
23 : *
24 : */
25 :
26 : #include <gpac/utf.h>
27 :
28 :
29 : /*------------------------------------------------------------------------
30 : Bidirectional Character Types
31 :
32 : as defined by the Unicode Bidirectional Algorithm Table 3-7.
33 :
34 : ------------------------------------------------------------------------*/
35 : enum
36 : {
37 : // input types
38 : // ON MUST be zero, code relies on ON = N = 0
39 : ON = 0, // Other Neutral
40 : L, // Left Letter
41 : R, // Right Letter
42 : AN, // Arabic Number
43 : EN, // European Number
44 : AL, // Arabic Letter (Right-to-left)
45 : NSM, // Non-spacing Mark
46 : CS, // Common Separator
47 : ES, // European Separator
48 : ET, // European Terminator (post/prefix e.g. $ and %)
49 :
50 : // resolved types
51 : BN, // Boundary neutral (type of RLE etc after explicit levels)
52 :
53 : // input types,
54 : S, // Segment Separator (TAB) // used only in L1
55 : WS, // White space // used only in L1
56 : B, // Paragraph Separator (aka as PS)
57 :
58 : // types for explicit controls
59 : RLO, // these are used only in X1-X9
60 : RLE,
61 : LRO,
62 : LRE,
63 : PDF,
64 :
65 : // resolved types, also resolved directions
66 : N = ON, // alias, where ON, WS and S are treated the same
67 : };
68 :
69 : /*----------------------------------------------------------------------
70 : The following array maps character codes to types for the purpose of
71 : this sample implementation. The legend string gives a human readable
72 : explanation of the pseudo alphabet.
73 :
74 : For simplicity, characters entered by buttons are given a 1:1 mapping
75 : between their type and pseudo character value. Pseudo characters that
76 : can be typed from the keyboard are explained in the legend string.
77 :
78 : Use the Unicode Character Database for the real values in real use.
79 : ---------------------------------------------------------------------*/
80 :
81 : #define LRM 4
82 : #define RLM 5
83 : #define LS 0x13
84 :
85 : static int bidi_get_class(u32 val);
86 :
87 :
88 :
89 : GF_EXPORT
90 3831 : Bool gf_utf8_is_right_to_left(u16 *utf_string)
91 : {
92 : u32 i = 0;
93 1366 : while (1) {
94 5197 : u32 c = utf_string[i];
95 5197 : if (!c) return GF_FALSE;
96 5069 : switch (bidi_get_class(c)) {
97 : case L:
98 : return GF_FALSE;
99 0 : case R:
100 0 : return GF_TRUE;
101 0 : case AN:
102 0 : return GF_TRUE;
103 : case EN:
104 : return GF_FALSE;
105 0 : case AL:
106 0 : return GF_TRUE;
107 : default:
108 : break;
109 : }
110 1366 : i++;
111 : }
112 : return GF_FALSE;
113 : }
114 :
115 :
116 : /*a very VERY basic bidi reorderer */
117 : GF_EXPORT
118 3831 : Bool gf_utf8_reorder_bidi(u16 *utf_string, u32 len)
119 : {
120 : u32 i, j, start, stop, cur_dir, slen, main_dir;
121 : Bool is_start;
122 :
123 : /*get main direction of the layour*/
124 3831 : Bool rev = gf_utf8_is_right_to_left(utf_string);
125 :
126 3831 : if (rev) {
127 0 : for (i=0; i<len/2; i++) {
128 0 : u32 v = utf_string[i];
129 0 : utf_string[i] = utf_string[len-1-i];
130 0 : utf_string[len-1-i] = v;
131 : }
132 : }
133 3831 : cur_dir = rev ? 1 : 0;
134 : main_dir = cur_dir;
135 : is_start = GF_TRUE;
136 :
137 : start = stop = 0;
138 :
139 276119 : for (i=0; i<len; i++) {
140 : Bool rtl;
141 272288 : u32 c = bidi_get_class(utf_string[i]);
142 : switch (c) {
143 : case R:
144 : case AN:
145 : case AL:
146 : rtl = GF_TRUE;
147 : break;
148 : case L:
149 : case EN:
150 : rtl = GF_FALSE;
151 : break;
152 55430 : default:
153 55430 : if (is_start) {
154 : start = i;
155 0 : } else if (!stop) {
156 : stop = i;
157 : }
158 55430 : continue;
159 : }
160 216858 : if (cur_dir != rtl) {
161 0 : if (!stop)
162 : stop = i;
163 :
164 0 : if (is_start) {
165 : is_start = GF_FALSE;
166 : } else {
167 : is_start = GF_TRUE;
168 :
169 0 : if (main_dir != cur_dir) {
170 0 : slen = stop-start+1;
171 0 : for (j=0; j<slen/2; j++) {
172 0 : u32 v = utf_string[start + j];
173 0 : utf_string[start + j] = utf_string[stop-j];
174 0 : utf_string[stop-j] = v;
175 : }
176 : }
177 : }
178 : cur_dir = rtl;
179 : }
180 : stop = 0;
181 : }
182 :
183 : /*not flushed yet*/
184 3831 : if (!is_start) {
185 0 : if (!stop) stop = len-1;
186 0 : slen = stop-start+1;
187 0 : for (j=0; j<slen/2; j++) {
188 0 : u32 v = utf_string[start + j];
189 0 : utf_string[start + j] = utf_string[stop-j];
190 0 : utf_string[stop-j] = v;
191 : }
192 : }
193 3831 : return rev;
194 : }
195 :
196 :
197 277357 : static int bidi_get_class(u32 val)
198 : {
199 277357 : if ((val>=0x0041) && (val<=0x005A)) return L; //# L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
200 265955 : if ((val>=0x0061) && (val<=0x007A)) return L; //# L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
201 66338 : if (val==0x000000AA) return L; //# L& FEMININE ORDINAL INDICATOR
202 66338 : if (val==0x000000B5) return L; //# L& MICRO SIGN
203 66338 : if (val==0x000000BA) return L; //# L& MASCULINE ORDINAL INDICATOR
204 66338 : if ((val>=0x00C0) && (val<=0x00D6)) return L; //# L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
205 66333 : if ((val>=0x00D8) && (val<=0x00F6)) return L; //# L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
206 66303 : if ((val>=0x00F8) && (val<=0x01BA)) return L; //# L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
207 66295 : if (val==0x000001BB) return L; //# Lo LATIN LETTER TWO WITH STROKE
208 66295 : if ((val>=0x01BC) && (val<=0x01BF)) return L; //# L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
209 66295 : if ((val>=0x01C0) && (val<=0x01C3)) return L; //# Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
210 66295 : if ((val>=0x01C4) && (val<=0x0293)) return L; //# L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL
211 66295 : if (val==0x00000294) return L; //# Lo LATIN LETTER GLOTTAL STOP
212 66295 : if ((val>=0x0295) && (val<=0x02AF)) return L; //# L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
213 66295 : if ((val>=0x02B0) && (val<=0x02B8)) return L; //# Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y
214 66295 : if ((val>=0x02BB) && (val<=0x02C1)) return L; //# Lm [7] MODIFIER LETTER TURNED COMMA..MODIFIER LETTER REVERSED GLOTTAL STOP
215 66295 : if ((val>=0x02D0) && (val<=0x02D1)) return L; //# Lm [2] MODIFIER LETTER TRIANGULAR COLON..MODIFIER LETTER HALF TRIANGULAR COLON
216 66295 : if ((val>=0x02E0) && (val<=0x02E4)) return L; //# Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
217 66295 : if (val==0x000002EE) return L; //# Lm MODIFIER LETTER DOUBLE APOSTROPHE
218 66295 : if (val==0x0000037A) return L; //# Lm GREEK YPOGEGRAMMENI
219 66295 : if ((val>=0x037B) && (val<=0x037D)) return L; //# L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
220 66295 : if (val==0x00000386) return L; //# L& GREEK CAPITAL LETTER ALPHA WITH TONOS
221 66295 : if ((val>=0x0388) && (val<=0x038A)) return L; //# L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
222 66295 : if (val==0x0000038C) return L; //# L& GREEK CAPITAL LETTER OMICRON WITH TONOS
223 66295 : if ((val>=0x038E) && (val<=0x03A1)) return L; //# L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
224 66295 : if ((val>=0x03A3) && (val<=0x03CE)) return L; //# L& [44] GREEK CAPITAL LETTER SIGMA..GREEK SMALL LETTER OMEGA WITH TONOS
225 66295 : if ((val>=0x03D0) && (val<=0x03F5)) return L; //# L& [38] GREEK BETA SYMBOL..GREEK LUNATE EPSILON SYMBOL
226 66295 : if ((val>=0x03F7) && (val<=0x0481)) return L; //# L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA
227 66295 : if (val==0x00000482) return L; //# So CYRILLIC THOUSANDS SIGN
228 66295 : if ((val>=0x048A) && (val<=0x0513)) return L; //# L& [138] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH HOOK
229 66295 : if ((val>=0x0531) && (val<=0x0556)) return L; //# L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
230 66295 : if (val==0x00000559) return L; //# Lm ARMENIAN MODIFIER LETTER LEFT HALF RING
231 66295 : if ((val>=0x055A) && (val<=0x055F)) return L; //# Po [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK
232 66295 : if ((val>=0x0561) && (val<=0x0587)) return L; //# L& [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
233 66295 : if (val==0x00000589) return L; //# Po ARMENIAN FULL STOP
234 66295 : if (val==0x00000903) return L; //# Mc DEVANAGARI SIGN VISARGA
235 66295 : if ((val>=0x0904) && (val<=0x0939)) return L; //# Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
236 66295 : if (val==0x0000093D) return L; //# Lo DEVANAGARI SIGN AVAGRAHA
237 66295 : if ((val>=0x093E) && (val<=0x0940)) return L; //# Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
238 66295 : if ((val>=0x0949) && (val<=0x094C)) return L; //# Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
239 66295 : if (val==0x00000950) return L; //# Lo DEVANAGARI OM
240 66295 : if ((val>=0x0958) && (val<=0x0961)) return L; //# Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
241 66295 : if ((val>=0x0964) && (val<=0x0965)) return L; //# Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
242 66295 : if ((val>=0x0966) && (val<=0x096F)) return L; //# Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
243 66295 : if (val==0x00000970) return L; //# Po DEVANAGARI ABBREVIATION SIGN
244 66295 : if ((val>=0x097B) && (val<=0x097F)) return L; //# Lo [5] DEVANAGARI LETTER GGA..DEVANAGARI LETTER BBA
245 66295 : if ((val>=0x0982) && (val<=0x0983)) return L; //# Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
246 66295 : if ((val>=0x0985) && (val<=0x098C)) return L; //# Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
247 66295 : if ((val>=0x098F) && (val<=0x0990)) return L; //# Lo [2] BENGALI LETTER E..BENGALI LETTER AI
248 66295 : if ((val>=0x0993) && (val<=0x09A8)) return L; //# Lo [22] BENGALI LETTER O..BENGALI LETTER NA
249 66295 : if ((val>=0x09AA) && (val<=0x09B0)) return L; //# Lo [7] BENGALI LETTER PA..BENGALI LETTER RA
250 66295 : if (val==0x000009B2) return L; //# Lo BENGALI LETTER LA
251 66295 : if ((val>=0x09B6) && (val<=0x09B9)) return L; //# Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA
252 66295 : if (val==0x000009BD) return L; //# Lo BENGALI SIGN AVAGRAHA
253 66295 : if ((val>=0x09BE) && (val<=0x09C0)) return L; //# Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
254 66295 : if ((val>=0x09C7) && (val<=0x09C8)) return L; //# Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
255 66295 : if ((val>=0x09CB) && (val<=0x09CC)) return L; //# Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
256 66295 : if (val==0x000009CE) return L; //# Lo BENGALI LETTER KHANDA TA
257 66295 : if (val==0x000009D7) return L; //# Mc BENGALI AU LENGTH MARK
258 66295 : if ((val>=0x09DC) && (val<=0x09DD)) return L; //# Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
259 66295 : if ((val>=0x09DF) && (val<=0x09E1)) return L; //# Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
260 66295 : if ((val>=0x09E6) && (val<=0x09EF)) return L; //# Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
261 66295 : if ((val>=0x09F0) && (val<=0x09F1)) return L; //# Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
262 66295 : if ((val>=0x09F4) && (val<=0x09F9)) return L; //# No [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN
263 66295 : if (val==0x000009FA) return L; //# So BENGALI ISSHAR
264 66295 : if (val==0x00000A03) return L; //# Mc GURMUKHI SIGN VISARGA
265 66295 : if ((val>=0x0A05) && (val<=0x0A0A)) return L; //# Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
266 66295 : if ((val>=0x0A0F) && (val<=0x0A10)) return L; //# Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
267 66295 : if ((val>=0x0A13) && (val<=0x0A28)) return L; //# Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
268 66295 : if ((val>=0x0A2A) && (val<=0x0A30)) return L; //# Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
269 66295 : if ((val>=0x0A32) && (val<=0x0A33)) return L; //# Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
270 66295 : if ((val>=0x0A35) && (val<=0x0A36)) return L; //# Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
271 66295 : if ((val>=0x0A38) && (val<=0x0A39)) return L; //# Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
272 66295 : if ((val>=0x0A3E) && (val<=0x0A40)) return L; //# Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
273 66295 : if ((val>=0x0A59) && (val<=0x0A5C)) return L; //# Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
274 66295 : if (val==0x00000A5E) return L; //# Lo GURMUKHI LETTER FA
275 66295 : if ((val>=0x0A66) && (val<=0x0A6F)) return L; //# Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
276 66295 : if ((val>=0x0A72) && (val<=0x0A74)) return L; //# Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR
277 66295 : if (val==0x00000A83) return L; //# Mc GUJARATI SIGN VISARGA
278 66295 : if ((val>=0x0A85) && (val<=0x0A8D)) return L; //# Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
279 66295 : if ((val>=0x0A8F) && (val<=0x0A91)) return L; //# Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
280 66295 : if ((val>=0x0A93) && (val<=0x0AA8)) return L; //# Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA
281 66295 : if ((val>=0x0AAA) && (val<=0x0AB0)) return L; //# Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA
282 66295 : if ((val>=0x0AB2) && (val<=0x0AB3)) return L; //# Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
283 66295 : if ((val>=0x0AB5) && (val<=0x0AB9)) return L; //# Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA
284 66295 : if (val==0x00000ABD) return L; //# Lo GUJARATI SIGN AVAGRAHA
285 66295 : if ((val>=0x0ABE) && (val<=0x0AC0)) return L; //# Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
286 66295 : if (val==0x00000AC9) return L; //# Mc GUJARATI VOWEL SIGN CANDRA O
287 66295 : if ((val>=0x0ACB) && (val<=0x0ACC)) return L; //# Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
288 66295 : if (val==0x00000AD0) return L; //# Lo GUJARATI OM
289 66295 : if ((val>=0x0AE0) && (val<=0x0AE1)) return L; //# Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
290 66295 : if ((val>=0x0AE6) && (val<=0x0AEF)) return L; //# Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
291 66295 : if ((val>=0x0B02) && (val<=0x0B03)) return L; //# Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
292 66295 : if ((val>=0x0B05) && (val<=0x0B0C)) return L; //# Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
293 66295 : if ((val>=0x0B0F) && (val<=0x0B10)) return L; //# Lo [2] ORIYA LETTER E..ORIYA LETTER AI
294 66295 : if ((val>=0x0B13) && (val<=0x0B28)) return L; //# Lo [22] ORIYA LETTER O..ORIYA LETTER NA
295 66295 : if ((val>=0x0B2A) && (val<=0x0B30)) return L; //# Lo [7] ORIYA LETTER PA..ORIYA LETTER RA
296 66295 : if ((val>=0x0B32) && (val<=0x0B33)) return L; //# Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA
297 66295 : if ((val>=0x0B35) && (val<=0x0B39)) return L; //# Lo [5] ORIYA LETTER VA..ORIYA LETTER HA
298 66295 : if (val==0x00000B3D) return L; //# Lo ORIYA SIGN AVAGRAHA
299 66295 : if (val==0x00000B3E) return L; //# Mc ORIYA VOWEL SIGN AA
300 66295 : if (val==0x00000B40) return L; //# Mc ORIYA VOWEL SIGN II
301 66295 : if ((val>=0x0B47) && (val<=0x0B48)) return L; //# Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
302 66295 : if ((val>=0x0B4B) && (val<=0x0B4C)) return L; //# Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
303 66295 : if (val==0x00000B57) return L; //# Mc ORIYA AU LENGTH MARK
304 66295 : if ((val>=0x0B5C) && (val<=0x0B5D)) return L; //# Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
305 66295 : if ((val>=0x0B5F) && (val<=0x0B61)) return L; //# Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
306 66295 : if ((val>=0x0B66) && (val<=0x0B6F)) return L; //# Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
307 66295 : if (val==0x00000B70) return L; //# So ORIYA ISSHAR
308 66295 : if (val==0x00000B71) return L; //# Lo ORIYA LETTER WA
309 66295 : if (val==0x00000B83) return L; //# Lo TAMIL SIGN VISARGA
310 66295 : if ((val>=0x0B85) && (val<=0x0B8A)) return L; //# Lo [6] TAMIL LETTER A..TAMIL LETTER UU
311 66295 : if ((val>=0x0B8E) && (val<=0x0B90)) return L; //# Lo [3] TAMIL LETTER E..TAMIL LETTER AI
312 66295 : if ((val>=0x0B92) && (val<=0x0B95)) return L; //# Lo [4] TAMIL LETTER O..TAMIL LETTER KA
313 66295 : if ((val>=0x0B99) && (val<=0x0B9A)) return L; //# Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA
314 66295 : if (val==0x00000B9C) return L; //# Lo TAMIL LETTER JA
315 66295 : if ((val>=0x0B9E) && (val<=0x0B9F)) return L; //# Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA
316 66295 : if ((val>=0x0BA3) && (val<=0x0BA4)) return L; //# Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA
317 66295 : if ((val>=0x0BA8) && (val<=0x0BAA)) return L; //# Lo [3] TAMIL LETTER NA..TAMIL LETTER PA
318 66295 : if ((val>=0x0BAE) && (val<=0x0BB9)) return L; //# Lo [12] TAMIL LETTER MA..TAMIL LETTER HA
319 66295 : if ((val>=0x0BBE) && (val<=0x0BBF)) return L; //# Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
320 66295 : if ((val>=0x0BC1) && (val<=0x0BC2)) return L; //# Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
321 66295 : if ((val>=0x0BC6) && (val<=0x0BC8)) return L; //# Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
322 66295 : if ((val>=0x0BCA) && (val<=0x0BCC)) return L; //# Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
323 66295 : if (val==0x00000BD7) return L; //# Mc TAMIL AU LENGTH MARK
324 66295 : if ((val>=0x0BE6) && (val<=0x0BEF)) return L; //# Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
325 66295 : if ((val>=0x0BF0) && (val<=0x0BF2)) return L; //# No [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND
326 66295 : if ((val>=0x0C01) && (val<=0x0C03)) return L; //# Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
327 66295 : if ((val>=0x0C05) && (val<=0x0C0C)) return L; //# Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
328 66295 : if ((val>=0x0C0E) && (val<=0x0C10)) return L; //# Lo [3] TELUGU LETTER E..TELUGU LETTER AI
329 66295 : if ((val>=0x0C12) && (val<=0x0C28)) return L; //# Lo [23] TELUGU LETTER O..TELUGU LETTER NA
330 66295 : if ((val>=0x0C2A) && (val<=0x0C33)) return L; //# Lo [10] TELUGU LETTER PA..TELUGU LETTER LLA
331 66295 : if ((val>=0x0C35) && (val<=0x0C39)) return L; //# Lo [5] TELUGU LETTER VA..TELUGU LETTER HA
332 66295 : if ((val>=0x0C41) && (val<=0x0C44)) return L; //# Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
333 66295 : if ((val>=0x0C60) && (val<=0x0C61)) return L; //# Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
334 66295 : if ((val>=0x0C66) && (val<=0x0C6F)) return L; //# Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
335 66295 : if ((val>=0x0C82) && (val<=0x0C83)) return L; //# Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
336 66295 : if ((val>=0x0C85) && (val<=0x0C8C)) return L; //# Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
337 66295 : if ((val>=0x0C8E) && (val<=0x0C90)) return L; //# Lo [3] KANNADA LETTER E..KANNADA LETTER AI
338 66295 : if ((val>=0x0C92) && (val<=0x0CA8)) return L; //# Lo [23] KANNADA LETTER O..KANNADA LETTER NA
339 66295 : if ((val>=0x0CAA) && (val<=0x0CB3)) return L; //# Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA
340 66295 : if ((val>=0x0CB5) && (val<=0x0CB9)) return L; //# Lo [5] KANNADA LETTER VA..KANNADA LETTER HA
341 66295 : if (val==0x00000CBD) return L; //# Lo KANNADA SIGN AVAGRAHA
342 66295 : if (val==0x00000CBE) return L; //# Mc KANNADA VOWEL SIGN AA
343 66295 : if (val==0x00000CBF) return L; //# Mn KANNADA VOWEL SIGN I
344 66295 : if ((val>=0x0CC0) && (val<=0x0CC4)) return L; //# Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
345 66295 : if (val==0x00000CC6) return L; //# Mn KANNADA VOWEL SIGN E
346 66295 : if ((val>=0x0CC7) && (val<=0x0CC8)) return L; //# Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
347 66295 : if ((val>=0x0CCA) && (val<=0x0CCB)) return L; //# Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
348 66295 : if ((val>=0x0CD5) && (val<=0x0CD6)) return L; //# Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
349 66295 : if (val==0x00000CDE) return L; //# Lo KANNADA LETTER FA
350 66295 : if ((val>=0x0CE0) && (val<=0x0CE1)) return L; //# Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
351 66295 : if ((val>=0x0CE6) && (val<=0x0CEF)) return L; //# Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
352 66295 : if ((val>=0x0D02) && (val<=0x0D03)) return L; //# Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
353 66295 : if ((val>=0x0D05) && (val<=0x0D0C)) return L; //# Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
354 66295 : if ((val>=0x0D0E) && (val<=0x0D10)) return L; //# Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
355 66295 : if ((val>=0x0D12) && (val<=0x0D28)) return L; //# Lo [23] MALAYALAM LETTER O..MALAYALAM LETTER NA
356 66295 : if ((val>=0x0D2A) && (val<=0x0D39)) return L; //# Lo [16] MALAYALAM LETTER PA..MALAYALAM LETTER HA
357 66295 : if ((val>=0x0D3E) && (val<=0x0D40)) return L; //# Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
358 66295 : if ((val>=0x0D46) && (val<=0x0D48)) return L; //# Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
359 66295 : if ((val>=0x0D4A) && (val<=0x0D4C)) return L; //# Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
360 66295 : if (val==0x00000D57) return L; //# Mc MALAYALAM AU LENGTH MARK
361 66295 : if ((val>=0x0D60) && (val<=0x0D61)) return L; //# Lo [2] MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL
362 66295 : if ((val>=0x0D66) && (val<=0x0D6F)) return L; //# Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
363 66295 : if ((val>=0x0D82) && (val<=0x0D83)) return L; //# Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
364 66295 : if ((val>=0x0D85) && (val<=0x0D96)) return L; //# Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
365 66295 : if ((val>=0x0D9A) && (val<=0x0DB1)) return L; //# Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
366 66295 : if ((val>=0x0DB3) && (val<=0x0DBB)) return L; //# Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
367 66295 : if (val==0x00000DBD) return L; //# Lo SINHALA LETTER DANTAJA LAYANNA
368 66295 : if ((val>=0x0DC0) && (val<=0x0DC6)) return L; //# Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
369 66295 : if ((val>=0x0DCF) && (val<=0x0DD1)) return L; //# Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
370 66295 : if ((val>=0x0DD8) && (val<=0x0DDF)) return L; //# Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
371 66295 : if ((val>=0x0DF2) && (val<=0x0DF3)) return L; //# Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
372 66295 : if (val==0x00000DF4) return L; //# Po SINHALA PUNCTUATION KUNDDALIYA
373 66295 : if ((val>=0x0E01) && (val<=0x0E30)) return L; //# Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
374 66295 : if ((val>=0x0E32) && (val<=0x0E33)) return L; //# Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
375 66295 : if ((val>=0x0E40) && (val<=0x0E45)) return L; //# Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
376 66295 : if (val==0x00000E46) return L; //# Lm THAI CHARACTER MAIYAMOK
377 66295 : if (val==0x00000E4F) return L; //# Po THAI CHARACTER FONGMAN
378 66295 : if ((val>=0x0E50) && (val<=0x0E59)) return L; //# Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE
379 66295 : if ((val>=0x0E5A) && (val<=0x0E5B)) return L; //# Po [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT
380 66295 : if ((val>=0x0E81) && (val<=0x0E82)) return L; //# Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG
381 66295 : if (val==0x00000E84) return L; //# Lo LAO LETTER KHO TAM
382 66295 : if ((val>=0x0E87) && (val<=0x0E88)) return L; //# Lo [2] LAO LETTER NGO..LAO LETTER CO
383 66295 : if (val==0x00000E8A) return L; //# Lo LAO LETTER SO TAM
384 66295 : if (val==0x00000E8D) return L; //# Lo LAO LETTER NYO
385 66295 : if ((val>=0x0E94) && (val<=0x0E97)) return L; //# Lo [4] LAO LETTER DO..LAO LETTER THO TAM
386 66295 : if ((val>=0x0E99) && (val<=0x0E9F)) return L; //# Lo [7] LAO LETTER NO..LAO LETTER FO SUNG
387 66295 : if ((val>=0x0EA1) && (val<=0x0EA3)) return L; //# Lo [3] LAO LETTER MO..LAO LETTER LO LING
388 66295 : if (val==0x00000EA5) return L; //# Lo LAO LETTER LO LOOT
389 66295 : if (val==0x00000EA7) return L; //# Lo LAO LETTER WO
390 66295 : if ((val>=0x0EAA) && (val<=0x0EAB)) return L; //# Lo [2] LAO LETTER SO SUNG..LAO LETTER HO SUNG
391 66295 : if ((val>=0x0EAD) && (val<=0x0EB0)) return L; //# Lo [4] LAO LETTER O..LAO VOWEL SIGN A
392 66295 : if ((val>=0x0EB2) && (val<=0x0EB3)) return L; //# Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
393 66295 : if (val==0x00000EBD) return L; //# Lo LAO SEMIVOWEL SIGN NYO
394 66295 : if ((val>=0x0EC0) && (val<=0x0EC4)) return L; //# Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
395 66295 : if (val==0x00000EC6) return L; //# Lm LAO KO LA
396 66295 : if ((val>=0x0ED0) && (val<=0x0ED9)) return L; //# Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE
397 66295 : if ((val>=0x0EDC) && (val<=0x0EDD)) return L; //# Lo [2] LAO HO NO..LAO HO MO
398 66295 : if (val==0x00000F00) return L; //# Lo TIBETAN SYLLABLE OM
399 66295 : 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
400 66295 : if ((val>=0x0F04) && (val<=0x0F12)) return L; //# Po [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD
401 66295 : if ((val>=0x0F13) && (val<=0x0F17)) return L; //# So [5] TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
402 66295 : if ((val>=0x0F1A) && (val<=0x0F1F)) return L; //# So [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG
403 66295 : if ((val>=0x0F20) && (val<=0x0F29)) return L; //# Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
404 66295 : if ((val>=0x0F2A) && (val<=0x0F33)) return L; //# No [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO
405 66295 : if (val==0x00000F34) return L; //# So TIBETAN MARK BSDUS RTAGS
406 66295 : if (val==0x00000F36) return L; //# So TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
407 66295 : if (val==0x00000F38) return L; //# So TIBETAN MARK CHE MGO
408 66295 : if ((val>=0x0F3E) && (val<=0x0F3F)) return L; //# Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
409 66295 : if ((val>=0x0F40) && (val<=0x0F47)) return L; //# Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA
410 66295 : if ((val>=0x0F49) && (val<=0x0F6A)) return L; //# Lo [34] TIBETAN LETTER NYA..TIBETAN LETTER FIXED-FORM RA
411 66295 : if (val==0x00000F7F) return L; //# Mc TIBETAN SIGN RNAM BCAD
412 66295 : if (val==0x00000F85) return L; //# Po TIBETAN MARK PALUTA
413 66295 : if ((val>=0x0F88) && (val<=0x0F8B)) return L; //# Lo [4] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN GRU MED RGYINGS
414 66295 : if ((val>=0x0FBE) && (val<=0x0FC5)) return L; //# So [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE
415 66295 : if ((val>=0x0FC7) && (val<=0x0FCC)) return L; //# So [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL
416 66295 : if (val==0x00000FCF) return L; //# So TIBETAN SIGN RDEL NAG GSUM
417 66295 : if ((val>=0x0FD0) && (val<=0x0FD1)) return L; //# Po [2] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK MNYAM YIG GI MGO RGYAN
418 66295 : if ((val>=0x1000) && (val<=0x1021)) return L; //# Lo [34] MYANMAR LETTER KA..MYANMAR LETTER A
419 66295 : if ((val>=0x1023) && (val<=0x1027)) return L; //# Lo [5] MYANMAR LETTER I..MYANMAR LETTER E
420 66295 : if ((val>=0x1029) && (val<=0x102A)) return L; //# Lo [2] MYANMAR LETTER O..MYANMAR LETTER AU
421 66295 : if (val==0x0000102C) return L; //# Mc MYANMAR VOWEL SIGN AA
422 66295 : if (val==0x00001031) return L; //# Mc MYANMAR VOWEL SIGN E
423 66295 : if (val==0x00001038) return L; //# Mc MYANMAR SIGN VISARGA
424 66295 : if ((val>=0x1040) && (val<=0x1049)) return L; //# Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
425 66295 : if ((val>=0x104A) && (val<=0x104F)) return L; //# Po [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE
426 66295 : if ((val>=0x1050) && (val<=0x1055)) return L; //# Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
427 66295 : if ((val>=0x1056) && (val<=0x1057)) return L; //# Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
428 66295 : if ((val>=0x10A0) && (val<=0x10C5)) return L; //# L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
429 66295 : if ((val>=0x10D0) && (val<=0x10FA)) return L; //# Lo [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
430 66295 : if (val==0x000010FB) return L; //# Po GEORGIAN PARAGRAPH SEPARATOR
431 66295 : if (val==0x000010FC) return L; //# Lm MODIFIER LETTER GEORGIAN NAR
432 66295 : if ((val>=0x1100) && (val<=0x1159)) return L; //# Lo [90] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG YEORINHIEUH
433 66295 : if ((val>=0x115F) && (val<=0x11A2)) return L; //# Lo [68] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG SSANGARAEA
434 66295 : if ((val>=0x11A8) && (val<=0x11F9)) return L; //# Lo [82] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG YEORINHIEUH
435 66295 : if ((val>=0x1200) && (val<=0x1248)) return L; //# Lo [73] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE QWA
436 66295 : if ((val>=0x124A) && (val<=0x124D)) return L; //# Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
437 66295 : if ((val>=0x1250) && (val<=0x1256)) return L; //# Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
438 66295 : if (val==0x00001258) return L; //# Lo ETHIOPIC SYLLABLE QHWA
439 66295 : if ((val>=0x125A) && (val<=0x125D)) return L; //# Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
440 66295 : if ((val>=0x1260) && (val<=0x1288)) return L; //# Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
441 66295 : if ((val>=0x128A) && (val<=0x128D)) return L; //# Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
442 66295 : if ((val>=0x1290) && (val<=0x12B0)) return L; //# Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
443 66295 : if ((val>=0x12B2) && (val<=0x12B5)) return L; //# Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
444 66295 : if ((val>=0x12B8) && (val<=0x12BE)) return L; //# Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
445 66295 : if (val==0x000012C0) return L; //# Lo ETHIOPIC SYLLABLE KXWA
446 66295 : if ((val>=0x12C2) && (val<=0x12C5)) return L; //# Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
447 66295 : if ((val>=0x12C8) && (val<=0x12D6)) return L; //# Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
448 66295 : if ((val>=0x12D8) && (val<=0x1310)) return L; //# Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
449 66295 : if ((val>=0x1312) && (val<=0x1315)) return L; //# Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
450 66295 : if ((val>=0x1318) && (val<=0x135A)) return L; //# Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
451 66295 : if (val==0x00001360) return L; //# So ETHIOPIC SECTION MARK
452 66295 : if ((val>=0x1361) && (val<=0x1368)) return L; //# Po [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR
453 66295 : if ((val>=0x1369) && (val<=0x137C)) return L; //# No [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND
454 66295 : if ((val>=0x1380) && (val<=0x138F)) return L; //# Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
455 66295 : if ((val>=0x13A0) && (val<=0x13F4)) return L; //# Lo [85] CHEROKEE LETTER A..CHEROKEE LETTER YV
456 66295 : if ((val>=0x1401) && (val<=0x166C)) return L; //# Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
457 66295 : if ((val>=0x166D) && (val<=0x166E)) return L; //# Po [2] CANADIAN SYLLABICS CHI SIGN..CANADIAN SYLLABICS FULL STOP
458 66295 : if ((val>=0x166F) && (val<=0x1676)) return L; //# Lo [8] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS NNGAA
459 66295 : if ((val>=0x1681) && (val<=0x169A)) return L; //# Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
460 66295 : if ((val>=0x16A0) && (val<=0x16EA)) return L; //# Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
461 66295 : if ((val>=0x16EB) && (val<=0x16ED)) return L; //# Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION
462 66295 : if ((val>=0x16EE) && (val<=0x16F0)) return L; //# Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
463 66295 : if ((val>=0x1700) && (val<=0x170C)) return L; //# Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA
464 66295 : if ((val>=0x170E) && (val<=0x1711)) return L; //# Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA
465 66295 : if ((val>=0x1720) && (val<=0x1731)) return L; //# Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA
466 66295 : if ((val>=0x1735) && (val<=0x1736)) return L; //# Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
467 66295 : if ((val>=0x1740) && (val<=0x1751)) return L; //# Lo [18] BUHID LETTER A..BUHID LETTER HA
468 66295 : if ((val>=0x1760) && (val<=0x176C)) return L; //# Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
469 66295 : if ((val>=0x176E) && (val<=0x1770)) return L; //# Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
470 66295 : if ((val>=0x1780) && (val<=0x17B3)) return L; //# Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
471 66295 : if ((val>=0x17B4) && (val<=0x17B5)) return L; //# Cf [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
472 66295 : if (val==0x000017B6) return L; //# Mc KHMER VOWEL SIGN AA
473 66295 : if ((val>=0x17BE) && (val<=0x17C5)) return L; //# Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
474 66295 : if ((val>=0x17C7) && (val<=0x17C8)) return L; //# Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
475 66295 : if ((val>=0x17D4) && (val<=0x17D6)) return L; //# Po [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH
476 66295 : if (val==0x000017D7) return L; //# Lm KHMER SIGN LEK TOO
477 66295 : if ((val>=0x17D8) && (val<=0x17DA)) return L; //# Po [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT
478 66295 : if (val==0x000017DC) return L; //# Lo KHMER SIGN AVAKRAHASANYA
479 66295 : if ((val>=0x17E0) && (val<=0x17E9)) return L; //# Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
480 66295 : if ((val>=0x1810) && (val<=0x1819)) return L; //# Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
481 66295 : if ((val>=0x1820) && (val<=0x1842)) return L; //# Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
482 66295 : if (val==0x00001843) return L; //# Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
483 66295 : if ((val>=0x1844) && (val<=0x1877)) return L; //# Lo [52] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER MANCHU ZHA
484 66295 : if ((val>=0x1880) && (val<=0x18A8)) return L; //# Lo [41] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER MANCHU ALI GALI BHA
485 66295 : if ((val>=0x1900) && (val<=0x191C)) return L; //# Lo [29] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER HA
486 66295 : if ((val>=0x1923) && (val<=0x1926)) return L; //# Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
487 66295 : if ((val>=0x1930) && (val<=0x1931)) return L; //# Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
488 66295 : if ((val>=0x1933) && (val<=0x1938)) return L; //# Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
489 66295 : if ((val>=0x1946) && (val<=0x194F)) return L; //# Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE
490 66295 : if ((val>=0x1950) && (val<=0x196D)) return L; //# Lo [30] TAI LE LETTER KA..TAI LE LETTER AI
491 66295 : if ((val>=0x1970) && (val<=0x1974)) return L; //# Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
492 66295 : if ((val>=0x1980) && (val<=0x19A9)) return L; //# Lo [42] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW XVA
493 66295 : if ((val>=0x19B0) && (val<=0x19C0)) return L; //# Mc [17] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN IY
494 66295 : if ((val>=0x19C1) && (val<=0x19C7)) return L; //# Lo [7] NEW TAI LUE LETTER FINAL V..NEW TAI LUE LETTER FINAL B
495 66295 : if ((val>=0x19C8) && (val<=0x19C9)) return L; //# Mc [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2
496 66295 : if ((val>=0x19D0) && (val<=0x19D9)) return L; //# Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE
497 66295 : if ((val>=0x1A00) && (val<=0x1A16)) return L; //# Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA
498 66295 : if ((val>=0x1A19) && (val<=0x1A1B)) return L; //# Mc [3] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN AE
499 66295 : if ((val>=0x1A1E) && (val<=0x1A1F)) return L; //# Po [2] BUGINESE PALLAWA..BUGINESE END OF SECTION
500 66295 : if (val==0x00001B04) return L; //# Mc BALINESE SIGN BISAH
501 66295 : if ((val>=0x1B05) && (val<=0x1B33)) return L; //# Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA
502 66295 : if (val==0x00001B35) return L; //# Mc BALINESE VOWEL SIGN TEDUNG
503 66295 : if (val==0x00001B3B) return L; //# Mc BALINESE VOWEL SIGN RA REPA TEDUNG
504 66295 : if ((val>=0x1B3D) && (val<=0x1B41)) return L; //# Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
505 66295 : if ((val>=0x1B43) && (val<=0x1B44)) return L; //# Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG
506 66295 : if ((val>=0x1B45) && (val<=0x1B4B)) return L; //# Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK
507 66295 : if ((val>=0x1B50) && (val<=0x1B59)) return L; //# Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE
508 66295 : if ((val>=0x1B5A) && (val<=0x1B60)) return L; //# Po [7] BALINESE PANTI..BALINESE PAMENENG
509 66295 : if ((val>=0x1B61) && (val<=0x1B6A)) return L; //# So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE
510 66295 : if ((val>=0x1B74) && (val<=0x1B7C)) return L; //# So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
511 66295 : if ((val>=0x1D00) && (val<=0x1D2B)) return L; //# L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
512 66295 : if ((val>=0x1D2C) && (val<=0x1D61)) return L; //# Lm [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI
513 66295 : if ((val>=0x1D62) && (val<=0x1D77)) return L; //# L& [22] LATIN SUBSCRIPT SMALL LETTER I..LATIN SMALL LETTER TURNED G
514 66295 : if (val==0x00001D78) return L; //# Lm MODIFIER LETTER CYRILLIC EN
515 66295 : if ((val>=0x1D79) && (val<=0x1D9A)) return L; //# L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
516 66295 : if ((val>=0x1D9B) && (val<=0x1DBF)) return L; //# Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
517 66295 : if ((val>=0x1E00) && (val<=0x1E9B)) return L; //# L& [156] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE
518 66295 : if ((val>=0x1EA0) && (val<=0x1EF9)) return L; //# L& [90] LATIN CAPITAL LETTER A WITH DOT BELOW..LATIN SMALL LETTER Y WITH TILDE
519 66295 : if ((val>=0x1F00) && (val<=0x1F15)) return L; //# L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
520 66295 : if ((val>=0x1F18) && (val<=0x1F1D)) return L; //# L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
521 66295 : if ((val>=0x1F20) && (val<=0x1F45)) return L; //# L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
522 66295 : if ((val>=0x1F48) && (val<=0x1F4D)) return L; //# L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
523 66295 : if ((val>=0x1F50) && (val<=0x1F57)) return L; //# L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
524 66295 : if (val==0x00001F59) return L; //# L& GREEK CAPITAL LETTER UPSILON WITH DASIA
525 66295 : if (val==0x00001F5B) return L; //# L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
526 66295 : if (val==0x00001F5D) return L; //# L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
527 66295 : if ((val>=0x1F5F) && (val<=0x1F7D)) return L; //# L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
528 66295 : 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
529 66295 : if ((val>=0x1FB6) && (val<=0x1FBC)) return L; //# L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
530 66295 : if (val==0x00001FBE) return L; //# L& GREEK PROSGEGRAMMENI
531 66295 : 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
532 66295 : if ((val>=0x1FC6) && (val<=0x1FCC)) return L; //# L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
533 66295 : if ((val>=0x1FD0) && (val<=0x1FD3)) return L; //# L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
534 66295 : if ((val>=0x1FD6) && (val<=0x1FDB)) return L; //# L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
535 66295 : if ((val>=0x1FE0) && (val<=0x1FEC)) return L; //# L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
536 66295 : 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
537 66295 : if ((val>=0x1FF6) && (val<=0x1FFC)) return L; //# L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
538 66295 : if (val==0x0000200E) return L; //# Cf LEFT-TO-RIGHT MARK
539 66295 : if (val==0x00002071) return L; //# L& SUPERSCRIPT LATIN SMALL LETTER I
540 66295 : if (val==0x0000207F) return L; //# L& SUPERSCRIPT LATIN SMALL LETTER N
541 66295 : if ((val>=0x2090) && (val<=0x2094)) return L; //# Lm [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA
542 66295 : if (val==0x00002102) return L; //# L& DOUBLE-STRUCK CAPITAL C
543 66295 : if (val==0x00002107) return L; //# L& EULER CONSTANT
544 66295 : if ((val>=0x210A) && (val<=0x2113)) return L; //# L& [10] SCRIPT SMALL G..SCRIPT SMALL L
545 66295 : if (val==0x00002115) return L; //# L& DOUBLE-STRUCK CAPITAL N
546 66295 : if ((val>=0x2119) && (val<=0x211D)) return L; //# L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
547 66295 : if (val==0x00002124) return L; //# L& DOUBLE-STRUCK CAPITAL Z
548 66295 : if (val==0x00002126) return L; //# L& OHM SIGN
549 66295 : if (val==0x00002128) return L; //# L& BLACK-LETTER CAPITAL Z
550 66295 : if ((val>=0x212A) && (val<=0x212D)) return L; //# L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
551 66295 : if ((val>=0x212F) && (val<=0x2134)) return L; //# L& [6] SCRIPT SMALL E..SCRIPT SMALL O
552 66295 : if ((val>=0x2135) && (val<=0x2138)) return L; //# Lo [4] ALEF SYMBOL..DALET SYMBOL
553 66295 : if (val==0x00002139) return L; //# L& INFORMATION SOURCE
554 66295 : if ((val>=0x213C) && (val<=0x213F)) return L; //# L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
555 66295 : if ((val>=0x2145) && (val<=0x2149)) return L; //# L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
556 66295 : if (val==0x0000214E) return L; //# L& TURNED SMALL F
557 66295 : if ((val>=0x2160) && (val<=0x2182)) return L; //# Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND
558 66295 : if ((val>=0x2183) && (val<=0x2184)) return L; //# L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
559 66295 : if ((val>=0x2336) && (val<=0x237A)) return L; //# So [69] APL FUNCTIONAL SYMBOL I-BEAM..APL FUNCTIONAL SYMBOL ALPHA
560 66295 : if (val==0x00002395) return L; //# So APL FUNCTIONAL SYMBOL QUAD
561 66295 : if ((val>=0x249C) && (val<=0x24E9)) return L; //# So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
562 66295 : if (val==0x000026AC) return L; //# So MEDIUM SMALL WHITE CIRCLE
563 66295 : if ((val>=0x2800) && (val<=0x28FF)) return L; //# So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678
564 66295 : if ((val>=0x2C00) && (val<=0x2C2E)) return L; //# L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
565 66295 : if ((val>=0x2C30) && (val<=0x2C5E)) return L; //# L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
566 66295 : if ((val>=0x2C60) && (val<=0x2C6C)) return L; //# L& [13] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN SMALL LETTER Z WITH DESCENDER
567 66295 : if ((val>=0x2C74) && (val<=0x2C77)) return L; //# L& [4] LATIN SMALL LETTER V WITH CURL..LATIN SMALL LETTER TAILLESS PHI
568 66295 : if ((val>=0x2C80) && (val<=0x2CE4)) return L; //# L& [101] COPTIC CAPITAL LETTER ALFA..COPTIC SYMBOL KAI
569 66295 : if ((val>=0x2D00) && (val<=0x2D25)) return L; //# L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
570 66295 : if ((val>=0x2D30) && (val<=0x2D65)) return L; //# Lo [54] TIFINAGH LETTER YA..TIFINAGH LETTER YAZZ
571 66295 : if (val==0x00002D6F) return L; //# Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK
572 66295 : if ((val>=0x2D80) && (val<=0x2D96)) return L; //# Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
573 66295 : if ((val>=0x2DA0) && (val<=0x2DA6)) return L; //# Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
574 66295 : if ((val>=0x2DA8) && (val<=0x2DAE)) return L; //# Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
575 66295 : if ((val>=0x2DB0) && (val<=0x2DB6)) return L; //# Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
576 66295 : if ((val>=0x2DB8) && (val<=0x2DBE)) return L; //# Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
577 66295 : if ((val>=0x2DC0) && (val<=0x2DC6)) return L; //# Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
578 66295 : if ((val>=0x2DC8) && (val<=0x2DCE)) return L; //# Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
579 66295 : if ((val>=0x2DD0) && (val<=0x2DD6)) return L; //# Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
580 66295 : if ((val>=0x2DD8) && (val<=0x2DDE)) return L; //# Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
581 66295 : if (val==0x00003005) return L; //# Lm IDEOGRAPHIC ITERATION MARK
582 66295 : if (val==0x00003006) return L; //# Lo IDEOGRAPHIC CLOSING MARK
583 66295 : if (val==0x00003007) return L; //# Nl IDEOGRAPHIC NUMBER ZERO
584 66295 : if ((val>=0x3021) && (val<=0x3029)) return L; //# Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
585 66295 : if ((val>=0x3031) && (val<=0x3035)) return L; //# Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
586 66295 : if ((val>=0x3038) && (val<=0x303A)) return L; //# Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
587 66295 : if (val==0x0000303B) return L; //# Lm VERTICAL IDEOGRAPHIC ITERATION MARK
588 66295 : if (val==0x0000303C) return L; //# Lo MASU MARK
589 66295 : if ((val>=0x3041) && (val<=0x3096)) return L; //# Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
590 66295 : if ((val>=0x309D) && (val<=0x309E)) return L; //# Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
591 66295 : if (val==0x0000309F) return L; //# Lo HIRAGANA DIGRAPH YORI
592 66295 : if ((val>=0x30A1) && (val<=0x30FA)) return L; //# Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
593 66295 : if ((val>=0x30FC) && (val<=0x30FE)) return L; //# Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
594 66295 : if (val==0x000030FF) return L; //# Lo KATAKANA DIGRAPH KOTO
595 66295 : if ((val>=0x3105) && (val<=0x312C)) return L; //# Lo [40] BOPOMOFO LETTER B..BOPOMOFO LETTER GN
596 66295 : if ((val>=0x3131) && (val<=0x318E)) return L; //# Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
597 66295 : if ((val>=0x3190) && (val<=0x3191)) return L; //# So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
598 66295 : if ((val>=0x3192) && (val<=0x3195)) return L; //# No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
599 66295 : if ((val>=0x3196) && (val<=0x319F)) return L; //# So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
600 66295 : if ((val>=0x31A0) && (val<=0x31B7)) return L; //# Lo [24] BOPOMOFO LETTER BU..BOPOMOFO FINAL LETTER H
601 66295 : if ((val>=0x31F0) && (val<=0x31FF)) return L; //# Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
602 66295 : if ((val>=0x3200) && (val<=0x321C)) return L; //# So [29] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED HANGUL CIEUC U
603 66295 : if ((val>=0x3220) && (val<=0x3229)) return L; //# No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
604 66295 : if ((val>=0x322A) && (val<=0x3243)) return L; //# So [26] PARENTHESIZED IDEOGRAPH MOON..PARENTHESIZED IDEOGRAPH REACH
605 66295 : if ((val>=0x3260) && (val<=0x327B)) return L; //# So [28] CIRCLED HANGUL KIYEOK..CIRCLED HANGUL HIEUH A
606 66295 : if (val==0x0000327F) return L; //# So KOREAN STANDARD SYMBOL
607 66295 : if ((val>=0x3280) && (val<=0x3289)) return L; //# No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
608 66295 : if ((val>=0x328A) && (val<=0x32B0)) return L; //# So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
609 66295 : if ((val>=0x32C0) && (val<=0x32CB)) return L; //# So [12] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
610 66295 : if ((val>=0x32D0) && (val<=0x32FE)) return L; //# So [47] CIRCLED KATAKANA A..CIRCLED KATAKANA WO
611 66295 : if ((val>=0x3300) && (val<=0x3376)) return L; //# So [119] SQUARE APAATO..SQUARE PC
612 66295 : if ((val>=0x337B) && (val<=0x33DD)) return L; //# So [99] SQUARE ERA NAME HEISEI..SQUARE WB
613 66295 : if ((val>=0x33E0) && (val<=0x33FE)) return L; //# So [31] IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
614 66295 : if ((val>=0x3400) && (val<=0x4DB5)) return L; //# Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
615 66295 : if ((val>=0x4E00) && (val<=0x9FBB)) return L; //# Lo [20924] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FBB
616 66295 : if ((val>=0xA000) && (val<=0xA014)) return L; //# Lo [21] YI SYLLABLE IT..YI SYLLABLE E
617 66295 : if (val==0x0000A015) return L; //# Lm YI SYLLABLE WU
618 66295 : if ((val>=0xA016) && (val<=0xA48C)) return L; //# Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
619 66295 : if ((val>=0xA800) && (val<=0xA801)) return L; //# Lo [2] SYLOTI NAGRI LETTER A..SYLOTI NAGRI LETTER I
620 66295 : if ((val>=0xA803) && (val<=0xA805)) return L; //# Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
621 66295 : if ((val>=0xA807) && (val<=0xA80A)) return L; //# Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
622 66295 : if ((val>=0xA80C) && (val<=0xA822)) return L; //# Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
623 66295 : if ((val>=0xA823) && (val<=0xA824)) return L; //# Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
624 66295 : if (val==0x0000A827) return L; //# Mc SYLOTI NAGRI VOWEL SIGN OO
625 66295 : if ((val>=0xA840) && (val<=0xA873)) return L; //# Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
626 66295 : if ((val>=0xAC00) && (val<=0xD7A3)) return L; //# Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
627 66295 : if ((val>=0xE000) && (val<=0xF8FF)) return L; //# Co [6400] <private-use-E000>..<private-use-F8FF>
628 66295 : if ((val>=0xF900) && (val<=0xFA2D)) return L; //# Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D
629 66295 : if ((val>=0xFA30) && (val<=0xFA6A)) return L; //# Lo [59] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6A
630 66295 : if ((val>=0xFA70) && (val<=0xFAD9)) return L; //# Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
631 66295 : if ((val>=0xFB00) && (val<=0xFB06)) return L; //# L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
632 66295 : if ((val>=0xFB13) && (val<=0xFB17)) return L; //# L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
633 66295 : if ((val>=0xFF21) && (val<=0xFF3A)) return L; //# L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
634 66295 : if ((val>=0xFF41) && (val<=0xFF5A)) return L; //# L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
635 66295 : if ((val>=0xFF66) && (val<=0xFF6F)) return L; //# Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
636 66295 : if (val==0x0000FF70) return L; //# Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
637 66295 : if ((val>=0xFF71) && (val<=0xFF9D)) return L; //# Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
638 66295 : if ((val>=0xFF9E) && (val<=0xFF9F)) return L; //# Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
639 66295 : if ((val>=0xFFA0) && (val<=0xFFBE)) return L; //# Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
640 66295 : if ((val>=0xFFC2) && (val<=0xFFC7)) return L; //# Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
641 66295 : if ((val>=0xFFCA) && (val<=0xFFCF)) return L; //# Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
642 66295 : if ((val>=0xFFD2) && (val<=0xFFD7)) return L; //# Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
643 66295 : if ((val>=0xFFDA) && (val<=0xFFDC)) return L; //# Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
644 66295 : if ((val>=0x10000) && (val<=0x1000B)) return L; //# Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
645 66295 : if ((val>=0x1000D) && (val<=0x10026)) return L; //# Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
646 66295 : if ((val>=0x10028) && (val<=0x1003A)) return L; //# Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
647 66295 : if ((val>=0x1003C) && (val<=0x1003D)) return L; //# Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
648 66295 : if ((val>=0x1003F) && (val<=0x1004D)) return L; //# Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
649 66295 : if ((val>=0x10050) && (val<=0x1005D)) return L; //# Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
650 66295 : if ((val>=0x10080) && (val<=0x100FA)) return L; //# Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
651 66295 : if (val==0x00010100) return L; //# Po AEGEAN WORD SEPARATOR LINE
652 66295 : if (val==0x00010102) return L; //# So AEGEAN CHECK MARK
653 66295 : if ((val>=0x10107) && (val<=0x10133)) return L; //# No [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND
654 66295 : if ((val>=0x10137) && (val<=0x1013F)) return L; //# So [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT
655 66295 : if ((val>=0x10300) && (val<=0x1031E)) return L; //# Lo [31] OLD ITALIC LETTER A..OLD ITALIC LETTER UU
656 66295 : if ((val>=0x10320) && (val<=0x10323)) return L; //# No [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY
657 66295 : if ((val>=0x10330) && (val<=0x10340)) return L; //# Lo [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA
658 66295 : if (val==0x00010341) return L; //# Nl GOTHIC LETTER NINETY
659 66295 : if ((val>=0x10342) && (val<=0x10349)) return L; //# Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
660 66295 : if (val==0x0001034A) return L; //# Nl GOTHIC LETTER NINE HUNDRED
661 66295 : if ((val>=0x10380) && (val<=0x1039D)) return L; //# Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
662 66295 : if (val==0x0001039F) return L; //# Po UGARITIC WORD DIVIDER
663 66295 : if ((val>=0x103A0) && (val<=0x103C3)) return L; //# Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
664 66295 : if ((val>=0x103C8) && (val<=0x103CF)) return L; //# Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
665 66295 : if (val==0x000103D0) return L; //# Po OLD PERSIAN WORD DIVIDER
666 66295 : if ((val>=0x103D1) && (val<=0x103D5)) return L; //# Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
667 66295 : if ((val>=0x10400) && (val<=0x1044F)) return L; //# L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
668 66295 : if ((val>=0x10450) && (val<=0x1049D)) return L; //# Lo [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO
669 66295 : if ((val>=0x104A0) && (val<=0x104A9)) return L; //# Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE
670 66295 : if ((val>=0x12000) && (val<=0x1236E)) return L; //# Lo [879] CUNEIFORM SIGN A..CUNEIFORM SIGN ZUM
671 66295 : if ((val>=0x12400) && (val<=0x12462)) return L; //# Nl [99] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER
672 66295 : if ((val>=0x12470) && (val<=0x12473)) return L; //# Po [4] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON
673 66295 : if ((val>=0x1D000) && (val<=0x1D0F5)) return L; //# So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
674 66295 : if ((val>=0x1D100) && (val<=0x1D126)) return L; //# So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2
675 66295 : if ((val>=0x1D12A) && (val<=0x1D164)) return L; //# So [59] MUSICAL SYMBOL DOUBLE SHARP..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
676 66295 : if ((val>=0x1D165) && (val<=0x1D166)) return L; //# Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
677 66295 : if ((val>=0x1D16A) && (val<=0x1D16C)) return L; //# So [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3
678 66295 : if ((val>=0x1D16D) && (val<=0x1D172)) return L; //# Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
679 66295 : if ((val>=0x1D183) && (val<=0x1D184)) return L; //# So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN
680 66295 : if ((val>=0x1D18C) && (val<=0x1D1A9)) return L; //# So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH
681 66295 : if ((val>=0x1D1AE) && (val<=0x1D1DD)) return L; //# So [48] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL PES SUBPUNCTIS
682 66295 : if ((val>=0x1D360) && (val<=0x1D371)) return L; //# No [18] COUNTING ROD UNIT DIGIT ONE..COUNTING ROD TENS DIGIT NINE
683 66295 : if ((val>=0x1D400) && (val<=0x1D454)) return L; //# L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
684 66295 : if ((val>=0x1D456) && (val<=0x1D49C)) return L; //# L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
685 66295 : if ((val>=0x1D49E) && (val<=0x1D49F)) return L; //# L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
686 66295 : if (val==0x0001D4A2) return L; //# L& MATHEMATICAL SCRIPT CAPITAL G
687 66295 : if ((val>=0x1D4A5) && (val<=0x1D4A6)) return L; //# L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
688 66295 : if ((val>=0x1D4A9) && (val<=0x1D4AC)) return L; //# L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
689 66295 : if ((val>=0x1D4AE) && (val<=0x1D4B9)) return L; //# L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
690 66295 : if (val==0x0001D4BB) return L; //# L& MATHEMATICAL SCRIPT SMALL F
691 66295 : if ((val>=0x1D4BD) && (val<=0x1D4C3)) return L; //# L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
692 66295 : if ((val>=0x1D4C5) && (val<=0x1D505)) return L; //# L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
693 66295 : if ((val>=0x1D507) && (val<=0x1D50A)) return L; //# L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
694 66295 : if ((val>=0x1D50D) && (val<=0x1D514)) return L; //# L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
695 66295 : if ((val>=0x1D516) && (val<=0x1D51C)) return L; //# L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
696 66295 : if ((val>=0x1D51E) && (val<=0x1D539)) return L; //# L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
697 66295 : if ((val>=0x1D53B) && (val<=0x1D53E)) return L; //# L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
698 66295 : if ((val>=0x1D540) && (val<=0x1D544)) return L; //# L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
699 66295 : if (val==0x0001D546) return L; //# L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O
700 66295 : if ((val>=0x1D54A) && (val<=0x1D550)) return L; //# L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
701 66295 : if ((val>=0x1D552) && (val<=0x1D6A5)) return L; //# L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
702 66295 : if ((val>=0x1D6A8) && (val<=0x1D6C0)) return L; //# L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
703 66295 : if (val==0x0001D6C1) return L; //# Sm MATHEMATICAL BOLD NABLA
704 66295 : if ((val>=0x1D6C2) && (val<=0x1D6DA)) return L; //# L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
705 66295 : if (val==0x0001D6DB) return L; //# Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
706 66295 : if ((val>=0x1D6DC) && (val<=0x1D6FA)) return L; //# L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
707 66295 : if (val==0x0001D6FB) return L; //# Sm MATHEMATICAL ITALIC NABLA
708 66295 : if ((val>=0x1D6FC) && (val<=0x1D714)) return L; //# L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
709 66295 : if (val==0x0001D715) return L; //# Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
710 66295 : if ((val>=0x1D716) && (val<=0x1D734)) return L; //# L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
711 66295 : if (val==0x0001D735) return L; //# Sm MATHEMATICAL BOLD ITALIC NABLA
712 66295 : if ((val>=0x1D736) && (val<=0x1D74E)) return L; //# L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
713 66295 : if (val==0x0001D74F) return L; //# Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
714 66295 : if ((val>=0x1D750) && (val<=0x1D76E)) return L; //# L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
715 66295 : if (val==0x0001D76F) return L; //# Sm MATHEMATICAL SANS-SERIF BOLD NABLA
716 66295 : if ((val>=0x1D770) && (val<=0x1D788)) return L; //# L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
717 66295 : if (val==0x0001D789) return L; //# Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
718 66295 : if ((val>=0x1D78A) && (val<=0x1D7A8)) return L; //# L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
719 66295 : if (val==0x0001D7A9) return L; //# Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
720 66295 : if ((val>=0x1D7AA) && (val<=0x1D7C2)) return L; //# L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
721 66295 : if (val==0x0001D7C3) return L; //# Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
722 66295 : if ((val>=0x1D7C4) && (val<=0x1D7CB)) return L; //# L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
723 66295 : if ((val>=0x20000) && (val<=0x2A6D6)) return L; //# Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
724 66295 : if ((val>=0x2F800) && (val<=0x2FA1D)) return L; //# Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
725 66295 : if ((val>=0xF0000) && (val<=0xFFFFD)) return L; //# Co [65534] <private-use-F0000>..<private-use-FFFFD>
726 66295 : if ((val>=0x100000) && (val<=0x10FFFD)) return L; //# Co [65534] <private-use-100000>..<private-use-10FFFD>
727 66295 : if (val==0x00000590) return R; //# Cn <reserved-0590>
728 66295 : if (val==0x000005BE) return R; //# Po HEBREW PUNCTUATION MAQAF
729 66295 : if (val==0x000005C0) return R; //# Po HEBREW PUNCTUATION PASEQ
730 66295 : if (val==0x000005C3) return R; //# Po HEBREW PUNCTUATION SOF PASUQ
731 66295 : if (val==0x000005C6) return R; //# Po HEBREW PUNCTUATION NUN HAFUKHA
732 66295 : if ((val>=0x05C8) && (val<=0x05CF)) return R; //# Cn [8] <reserved-05C8>..<reserved-05CF>
733 66295 : if ((val>=0x05D0) && (val<=0x05EA)) return R; //# Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
734 66295 : if ((val>=0x05EB) && (val<=0x05EF)) return R; //# Cn [5] <reserved-05EB>..<reserved-05EF>
735 66295 : if ((val>=0x05F0) && (val<=0x05F2)) return R; //# Lo [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD
736 66295 : if ((val>=0x05F3) && (val<=0x05F4)) return R; //# Po [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM
737 66295 : if ((val>=0x05F5) && (val<=0x05FF)) return R; //# Cn [11] <reserved-05F5>..<reserved-05FF>
738 66295 : if ((val>=0x07C0) && (val<=0x07C9)) return R; //# Nd [10] NKO DIGIT ZERO..NKO DIGIT NINE
739 66295 : if ((val>=0x07CA) && (val<=0x07EA)) return R; //# Lo [33] NKO LETTER A..NKO LETTER JONA RA
740 66295 : if ((val>=0x07F4) && (val<=0x07F5)) return R; //# Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
741 66295 : if (val==0x000007FA) return R; //# Lm NKO LAJANYALAN
742 66295 : if ((val>=0x07FB) && (val<=0x08FF)) return R; //# Cn [261] <reserved-07FB>..<reserved-08FF>
743 66295 : if (val==0x0000200F) return R; //# Cf RIGHT-TO-LEFT MARK
744 66295 : if (val==0x0000FB1D) return R; //# Lo HEBREW LETTER YOD WITH HIRIQ
745 66295 : if ((val>=0xFB1F) && (val<=0xFB28)) return R; //# Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
746 66295 : if ((val>=0xFB2A) && (val<=0xFB36)) return R; //# Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
747 66295 : if (val==0x0000FB37) return R; //# Cn <reserved-FB37>
748 66295 : if ((val>=0xFB38) && (val<=0xFB3C)) return R; //# Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
749 66295 : if (val==0x0000FB3D) return R; //# Cn <reserved-FB3D>
750 66295 : if (val==0x0000FB3E) return R; //# Lo HEBREW LETTER MEM WITH DAGESH
751 66295 : if (val==0x0000FB3F) return R; //# Cn <reserved-FB3F>
752 66295 : if ((val>=0xFB40) && (val<=0xFB41)) return R; //# Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
753 66295 : if (val==0x0000FB42) return R; //# Cn <reserved-FB42>
754 66295 : if ((val>=0xFB43) && (val<=0xFB44)) return R; //# Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
755 66295 : if (val==0x0000FB45) return R; //# Cn <reserved-FB45>
756 66295 : if ((val>=0xFB46) && (val<=0xFB4F)) return R; //# Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED
757 66295 : if ((val>=0x10800) && (val<=0x10805)) return R; //# Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
758 66295 : if ((val>=0x10806) && (val<=0x10807)) return R; //# Cn [2] <reserved-10806>..<reserved-10807>
759 66295 : if (val==0x00010808) return R; //# Lo CYPRIOT SYLLABLE JO
760 66295 : if (val==0x00010809) return R; //# Cn <reserved-10809>
761 66295 : if ((val>=0x1080A) && (val<=0x10835)) return R; //# Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
762 66295 : if (val==0x00010836) return R; //# Cn <reserved-10836>
763 66295 : if ((val>=0x10837) && (val<=0x10838)) return R; //# Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
764 66295 : if ((val>=0x10839) && (val<=0x1083B)) return R; //# Cn [3] <reserved-10839>..<reserved-1083B>
765 66295 : if (val==0x0001083C) return R; //# Lo CYPRIOT SYLLABLE ZA
766 66295 : if ((val>=0x1083D) && (val<=0x1083E)) return R; //# Cn [2] <reserved-1083D>..<reserved-1083E>
767 66295 : if (val==0x0001083F) return R; //# Lo CYPRIOT SYLLABLE ZO
768 66295 : if ((val>=0x10840) && (val<=0x108FF)) return R; //# Cn [192] <reserved-10840>..<reserved-108FF>
769 66295 : if ((val>=0x10900) && (val<=0x10915)) return R; //# Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
770 66295 : if ((val>=0x10916) && (val<=0x10919)) return R; //# No [4] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER ONE HUNDRED
771 66295 : if ((val>=0x1091A) && (val<=0x1091E)) return R; //# Cn [5] <reserved-1091A>..<reserved-1091E>
772 66295 : if ((val>=0x10920) && (val<=0x109FF)) return R; //# Cn [224] <reserved-10920>..<reserved-109FF>
773 66295 : if (val==0x00010A00) return R; //# Lo KHAROSHTHI LETTER A
774 66295 : if (val==0x00010A04) return R; //# Cn <reserved-10A04>
775 66295 : if ((val>=0x10A07) && (val<=0x10A0B)) return R; //# Cn [5] <reserved-10A07>..<reserved-10A0B>
776 66295 : if ((val>=0x10A10) && (val<=0x10A13)) return R; //# Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
777 66295 : if (val==0x00010A14) return R; //# Cn <reserved-10A14>
778 66295 : if ((val>=0x10A15) && (val<=0x10A17)) return R; //# Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
779 66295 : if (val==0x00010A18) return R; //# Cn <reserved-10A18>
780 66295 : if ((val>=0x10A19) && (val<=0x10A33)) return R; //# Lo [27] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER TTTHA
781 66295 : if ((val>=0x10A34) && (val<=0x10A37)) return R; //# Cn [4] <reserved-10A34>..<reserved-10A37>
782 66295 : if ((val>=0x10A3B) && (val<=0x10A3E)) return R; //# Cn [4] <reserved-10A3B>..<reserved-10A3E>
783 66295 : if ((val>=0x10A40) && (val<=0x10A47)) return R; //# No [8] KHAROSHTHI DIGIT ONE..KHAROSHTHI NUMBER ONE THOUSAND
784 66295 : if ((val>=0x10A48) && (val<=0x10A4F)) return R; //# Cn [8] <reserved-10A48>..<reserved-10A4F>
785 66295 : if ((val>=0x10A50) && (val<=0x10A58)) return R; //# Po [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES
786 66295 : if ((val>=0x10A59) && (val<=0x10FFF)) return R; //# Cn [1447] <reserved-10A59>..<reserved-10FFF>
787 66295 : if ((val>=0x0030) && (val<=0x0039)) return EN; //# Nd [10] DIGIT ZERO..DIGIT NINE
788 56796 : if ((val>=0x00B2) && (val<=0x00B3)) return EN; //# No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE
789 56796 : if (val==0x000000B9) return EN; //# No SUPERSCRIPT ONE
790 56796 : if ((val>=0x06F0) && (val<=0x06F9)) return EN; //# Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
791 56796 : if (val==0x00002070) return EN; //# No SUPERSCRIPT ZERO
792 56796 : if ((val>=0x2074) && (val<=0x2079)) return EN; //# No [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE
793 56796 : if ((val>=0x2080) && (val<=0x2089)) return EN; //# No [10] SUBSCRIPT ZERO..SUBSCRIPT NINE
794 56796 : if ((val>=0x2488) && (val<=0x249B)) return EN; //# No [20] DIGIT ONE FULL STOP..NUMBER TWENTY FULL STOP
795 56796 : if ((val>=0xFF10) && (val<=0xFF19)) return EN; //# Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
796 56796 : if ((val>=0x1D7CE) && (val<=0x1D7FF)) return EN; //# Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
797 56796 : if (val==0x0000002B) return ES; //# Sm PLUS SIGN
798 56796 : if (val==0x0000002D) return ES; //# Pd HYPHEN-MINUS
799 55770 : if ((val>=0x207A) && (val<=0x207B)) return ES; //# Sm [2] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT MINUS
800 55770 : if ((val>=0x208A) && (val<=0x208B)) return ES; //# Sm [2] SUBSCRIPT PLUS SIGN..SUBSCRIPT MINUS
801 55770 : if (val==0x00002212) return ES; //# Sm MINUS SIGN
802 55770 : if (val==0x0000FB29) return ES; //# Sm HEBREW LETTER ALTERNATIVE PLUS SIGN
803 55770 : if (val==0x0000FE62) return ES; //# Sm SMALL PLUS SIGN
804 55770 : if (val==0x0000FE63) return ES; //# Pd SMALL HYPHEN-MINUS
805 55770 : if (val==0x0000FF0B) return ES; //# Sm FULLWIDTH PLUS SIGN
806 55770 : if (val==0x0000FF0D) return ES; //# Pd FULLWIDTH HYPHEN-MINUS
807 55770 : if (val==0x00000023) return ET; //# Po NUMBER SIGN
808 55606 : if (val==0x00000024) return ET; //# Sc DOLLAR SIGN
809 55522 : if (val==0x00000025) return ET; //# Po PERCENT SIGN
810 55513 : if ((val>=0x00A2) && (val<=0x00A5)) return ET; //# Sc [4] CENT SIGN..YEN SIGN
811 55513 : if (val==0x000000B0) return ET; //# So DEGREE SIGN
812 55513 : if (val==0x000000B1) return ET; //# Sm PLUS-MINUS SIGN
813 55513 : if (val==0x0000066A) return ET; //# Po ARABIC PERCENT SIGN
814 55513 : if ((val>=0x09F2) && (val<=0x09F3)) return ET; //# Sc [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN
815 55513 : if (val==0x00000AF1) return ET; //# Sc GUJARATI RUPEE SIGN
816 55513 : if (val==0x00000BF9) return ET; //# Sc TAMIL RUPEE SIGN
817 55513 : if (val==0x00000E3F) return ET; //# Sc THAI CURRENCY SYMBOL BAHT
818 55513 : if (val==0x000017DB) return ET; //# Sc KHMER CURRENCY SYMBOL RIEL
819 55513 : if ((val>=0x2030) && (val<=0x2034)) return ET; //# Po [5] PER MILLE SIGN..TRIPLE PRIME
820 55513 : if ((val>=0x20A0) && (val<=0x20B5)) return ET; //# Sc [22] EURO-CURRENCY SIGN..CEDI SIGN
821 55513 : if (val==0x0000212E) return ET; //# So ESTIMATED SYMBOL
822 55513 : if (val==0x00002213) return ET; //# Sm MINUS-OR-PLUS SIGN
823 55513 : if (val==0x0000FE5F) return ET; //# Po SMALL NUMBER SIGN
824 55513 : if (val==0x0000FE69) return ET; //# Sc SMALL DOLLAR SIGN
825 55513 : if (val==0x0000FE6A) return ET; //# Po SMALL PERCENT SIGN
826 55513 : if (val==0x0000FF03) return ET; //# Po FULLWIDTH NUMBER SIGN
827 55513 : if (val==0x0000FF04) return ET; //# Sc FULLWIDTH DOLLAR SIGN
828 55513 : if (val==0x0000FF05) return ET; //# Po FULLWIDTH PERCENT SIGN
829 55513 : if ((val>=0xFFE0) && (val<=0xFFE1)) return ET; //# Sc [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN
830 55513 : if ((val>=0xFFE5) && (val<=0xFFE6)) return ET; //# Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN
831 55513 : if ((val>=0x0660) && (val<=0x0669)) return AN; //# Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
832 55513 : if ((val>=0x066B) && (val<=0x066C)) return AN; //# Po [2] ARABIC DECIMAL SEPARATOR..ARABIC THOUSANDS SEPARATOR
833 55513 : if (val==0x0000002C) return CS; //# Po COMMA
834 52686 : if ((val>=0x002E) && (val<=0x002F)) return CS; //# Po [2] FULL STOP..SOLIDUS
835 49395 : if (val==0x0000003A) return CS; //# Po COLON
836 48069 : if (val==0x000000A0) return CS; //# Zs NO-BREAK SPACE
837 48069 : if (val==0x0000060C) return CS; //# Po ARABIC COMMA
838 48069 : if (val==0x0000202F) return CS; //# Zs NARROW NO-BREAK SPACE
839 48069 : if (val==0x00002044) return CS; //# Sm FRACTION SLASH
840 48069 : if (val==0x0000FE50) return CS; //# Po SMALL COMMA
841 48069 : if (val==0x0000FE52) return CS; //# Po SMALL FULL STOP
842 48069 : if (val==0x0000FE55) return CS; //# Po SMALL COLON
843 48069 : if (val==0x0000FF0C) return CS; //# Po FULLWIDTH COMMA
844 48069 : if ((val>=0xFF0E) && (val<=0xFF0F)) return CS; //# Po [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS
845 48069 : if (val==0x0000FF1A) return CS; //# Po FULLWIDTH COLON
846 48069 : if (val==0x0000000A) return B; //# Cc <control-000A>
847 48069 : if (val==0x0000000D) return B; //# Cc <control-000D>
848 48069 : if ((val>=0x001C) && (val<=0x001E)) return B; //# Cc [3] <control-001C>..<control-001E>
849 48069 : if (val==0x00000085) return B; //# Cc <control-0085>
850 48069 : if (val==0x00002029) return B; //# Zp PARAGRAPH SEPARATOR
851 48069 : if (val==0x00000009) return S; //# Cc <control-0009>
852 48063 : if (val==0x0000000B) return S; //# Cc <control-000B>
853 48063 : if (val==0x0000001F) return S; //# Cc <control-001F>
854 48063 : if (val==0x0000000C) return WS; //# Cc <control-000C>
855 48063 : if (val==0x00000020) return WS; //# Zs SPACE
856 1322 : if (val==0x00001680) return WS; //# Zs OGHAM SPACE MARK
857 1322 : if (val==0x0000180E) return WS; //# Zs MONGOLIAN VOWEL SEPARATOR
858 1322 : if ((val>=0x2000) && (val<=0x200A)) return WS; //# Zs [11] EN QUAD..HAIR SPACE
859 1322 : if (val==0x00002028) return WS; //# Zl LINE SEPARATOR
860 1322 : if (val==0x0000205F) return WS; //# Zs MEDIUM MATHEMATICAL SPACE
861 1322 : if (val==0x00003000) return WS; //# Zs IDEOGRAPHIC SPACE
862 1322 : if ((val>=0x0021) && (val<=0x0022)) return ON; //# Po [2] EXCLAMATION MARK..QUOTATION MARK
863 663 : if ((val>=0x0026) && (val<=0x0027)) return ON; //# Po [2] AMPERSAND..APOSTROPHE
864 362 : if (val==0x00000028) return ON; //# Ps LEFT PARENTHESIS
865 334 : if (val==0x00000029) return ON; //# Pe RIGHT PARENTHESIS
866 310 : if (val==0x0000002A) return ON; //# Po ASTERISK
867 271 : if (val==0x0000003B) return ON; //# Po SEMICOLON
868 271 : if ((val>=0x003C) && (val<=0x003E)) return ON; //# Sm [3] LESS-THAN SIGN..GREATER-THAN SIGN
869 154 : if ((val>=0x003F) && (val<=0x0040)) return ON; //# Po [2] QUESTION MARK..COMMERCIAL AT
870 144 : if (val==0x0000005B) return ON; //# Ps LEFT SQUARE BRACKET
871 62 : if (val==0x0000005C) return ON; //# Po REVERSE SOLIDUS
872 58 : if (val==0x0000005D) return ON; //# Pe RIGHT SQUARE BRACKET
873 3 : if (val==0x0000005E) return ON; //# Sk CIRCUMFLEX ACCENT
874 3 : if (val==0x0000005F) return ON; //# Pc LOW LINE
875 0 : if (val==0x00000060) return ON; //# Sk GRAVE ACCENT
876 0 : if (val==0x0000007B) return ON; //# Ps LEFT CURLY BRACKET
877 0 : if (val==0x0000007C) return ON; //# Sm VERTICAL LINE
878 0 : if (val==0x0000007D) return ON; //# Pe RIGHT CURLY BRACKET
879 0 : if (val==0x0000007E) return ON; //# Sm TILDE
880 0 : if (val==0x000000A1) return ON; //# Po INVERTED EXCLAMATION MARK
881 0 : if ((val>=0x00A6) && (val<=0x00A7)) return ON; //# So [2] BROKEN BAR..SECTION SIGN
882 0 : if (val==0x000000A8) return ON; //# Sk DIAERESIS
883 0 : if (val==0x000000A9) return ON; //# So COPYRIGHT SIGN
884 0 : if (val==0x000000AB) return ON; //# Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
885 0 : if (val==0x000000AC) return ON; //# Sm NOT SIGN
886 0 : if (val==0x000000AE) return ON; //# So REGISTERED SIGN
887 0 : if (val==0x000000AF) return ON; //# Sk MACRON
888 0 : if (val==0x000000B4) return ON; //# Sk ACUTE ACCENT
889 0 : if (val==0x000000B6) return ON; //# So PILCROW SIGN
890 0 : if (val==0x000000B7) return ON; //# Po MIDDLE DOT
891 0 : if (val==0x000000B8) return ON; //# Sk CEDILLA
892 0 : if (val==0x000000BB) return ON; //# Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
893 0 : if ((val>=0x00BC) && (val<=0x00BE)) return ON; //# No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS
894 0 : if (val==0x000000BF) return ON; //# Po INVERTED QUESTION MARK
895 0 : if (val==0x000000D7) return ON; //# Sm MULTIPLICATION SIGN
896 0 : if (val==0x000000F7) return ON; //# Sm DIVISION SIGN
897 0 : if ((val>=0x02B9) && (val<=0x02BA)) return ON; //# Lm [2] MODIFIER LETTER PRIME..MODIFIER LETTER DOUBLE PRIME
898 0 : if ((val>=0x02C2) && (val<=0x02C5)) return ON; //# Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD
899 0 : if ((val>=0x02C6) && (val<=0x02CF)) return ON; //# Lm [10] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER LOW ACUTE ACCENT
900 0 : if ((val>=0x02D2) && (val<=0x02DF)) return ON; //# Sk [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT
901 0 : if ((val>=0x02E5) && (val<=0x02ED)) return ON; //# Sk [9] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER UNASPIRATED
902 0 : if ((val>=0x02EF) && (val<=0x02FF)) return ON; //# Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW
903 0 : if ((val>=0x0374) && (val<=0x0375)) return ON; //# Sk [2] GREEK NUMERAL SIGN..GREEK LOWER NUMERAL SIGN
904 0 : if (val==0x0000037E) return ON; //# Po GREEK QUESTION MARK
905 0 : if ((val>=0x0384) && (val<=0x0385)) return ON; //# Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS
906 0 : if (val==0x00000387) return ON; //# Po GREEK ANO TELEIA
907 0 : if (val==0x000003F6) return ON; //# Sm GREEK REVERSED LUNATE EPSILON SYMBOL
908 0 : if (val==0x0000058A) return ON; //# Pd ARMENIAN HYPHEN
909 0 : if ((val>=0x060E) && (val<=0x060F)) return ON; //# So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA
910 0 : if (val==0x000006E9) return ON; //# So ARABIC PLACE OF SAJDAH
911 0 : if (val==0x000007F6) return ON; //# So NKO SYMBOL OO DENNEN
912 0 : if ((val>=0x07F7) && (val<=0x07F9)) return ON; //# Po [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK
913 0 : if ((val>=0x0BF3) && (val<=0x0BF8)) return ON; //# So [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN
914 0 : if (val==0x00000BFA) return ON; //# So TAMIL NUMBER SIGN
915 0 : if ((val>=0x0CF1) && (val<=0x0CF2)) return ON; //# So [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
916 0 : if (val==0x00000F3A) return ON; //# Ps TIBETAN MARK GUG RTAGS GYON
917 0 : if (val==0x00000F3B) return ON; //# Pe TIBETAN MARK GUG RTAGS GYAS
918 0 : if (val==0x00000F3C) return ON; //# Ps TIBETAN MARK ANG KHANG GYON
919 0 : if (val==0x00000F3D) return ON; //# Pe TIBETAN MARK ANG KHANG GYAS
920 0 : if ((val>=0x1390) && (val<=0x1399)) return ON; //# So [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT
921 0 : if (val==0x0000169B) return ON; //# Ps OGHAM FEATHER MARK
922 0 : if (val==0x0000169C) return ON; //# Pe OGHAM REVERSED FEATHER MARK
923 0 : if ((val>=0x17F0) && (val<=0x17F9)) return ON; //# No [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON
924 0 : if ((val>=0x1800) && (val<=0x1805)) return ON; //# Po [6] MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS
925 0 : if (val==0x00001806) return ON; //# Pd MONGOLIAN TODO SOFT HYPHEN
926 0 : if ((val>=0x1807) && (val<=0x180A)) return ON; //# Po [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU
927 0 : if (val==0x00001940) return ON; //# So LIMBU SIGN LOO
928 0 : if ((val>=0x1944) && (val<=0x1945)) return ON; //# Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK
929 0 : if ((val>=0x19DE) && (val<=0x19DF)) return ON; //# Po [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV
930 0 : if ((val>=0x19E0) && (val<=0x19FF)) return ON; //# So [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC
931 0 : if (val==0x00001FBD) return ON; //# Sk GREEK KORONIS
932 0 : if ((val>=0x1FBF) && (val<=0x1FC1)) return ON; //# Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
933 0 : if ((val>=0x1FCD) && (val<=0x1FCF)) return ON; //# Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
934 0 : if ((val>=0x1FDD) && (val<=0x1FDF)) return ON; //# Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
935 0 : if ((val>=0x1FED) && (val<=0x1FEF)) return ON; //# Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
936 0 : if ((val>=0x1FFD) && (val<=0x1FFE)) return ON; //# Sk [2] GREEK OXIA..GREEK DASIA
937 0 : if ((val>=0x2010) && (val<=0x2015)) return ON; //# Pd [6] HYPHEN..HORIZONTAL BAR
938 0 : if ((val>=0x2016) && (val<=0x2017)) return ON; //# Po [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE
939 0 : if (val==0x00002018) return ON; //# Pi LEFT SINGLE QUOTATION MARK
940 0 : if (val==0x00002019) return ON; //# Pf RIGHT SINGLE QUOTATION MARK
941 0 : if (val==0x0000201A) return ON; //# Ps SINGLE LOW-9 QUOTATION MARK
942 0 : if ((val>=0x201B) && (val<=0x201C)) return ON; //# Pi [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK
943 0 : if (val==0x0000201D) return ON; //# Pf RIGHT DOUBLE QUOTATION MARK
944 0 : if (val==0x0000201E) return ON; //# Ps DOUBLE LOW-9 QUOTATION MARK
945 0 : if (val==0x0000201F) return ON; //# Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK
946 0 : if ((val>=0x2020) && (val<=0x2027)) return ON; //# Po [8] DAGGER..HYPHENATION POINT
947 0 : if ((val>=0x2035) && (val<=0x2038)) return ON; //# Po [4] REVERSED PRIME..CARET
948 0 : if (val==0x00002039) return ON; //# Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK
949 0 : if (val==0x0000203A) return ON; //# Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
950 0 : if ((val>=0x203B) && (val<=0x203E)) return ON; //# Po [4] REFERENCE MARK..OVERLINE
951 0 : if ((val>=0x203F) && (val<=0x2040)) return ON; //# Pc [2] UNDERTIE..CHARACTER TIE
952 0 : if ((val>=0x2041) && (val<=0x2043)) return ON; //# Po [3] CARET INSERTION POINT..HYPHEN BULLET
953 0 : if (val==0x00002045) return ON; //# Ps LEFT SQUARE BRACKET WITH QUILL
954 0 : if (val==0x00002046) return ON; //# Pe RIGHT SQUARE BRACKET WITH QUILL
955 0 : if ((val>=0x2047) && (val<=0x2051)) return ON; //# Po [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY
956 0 : if (val==0x00002052) return ON; //# Sm COMMERCIAL MINUS SIGN
957 0 : if (val==0x00002053) return ON; //# Po SWUNG DASH
958 0 : if (val==0x00002054) return ON; //# Pc INVERTED UNDERTIE
959 0 : if ((val>=0x2055) && (val<=0x205E)) return ON; //# Po [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS
960 0 : if (val==0x0000207C) return ON; //# Sm SUPERSCRIPT EQUALS SIGN
961 0 : if (val==0x0000207D) return ON; //# Ps SUPERSCRIPT LEFT PARENTHESIS
962 0 : if (val==0x0000207E) return ON; //# Pe SUPERSCRIPT RIGHT PARENTHESIS
963 0 : if (val==0x0000208C) return ON; //# Sm SUBSCRIPT EQUALS SIGN
964 0 : if (val==0x0000208D) return ON; //# Ps SUBSCRIPT LEFT PARENTHESIS
965 0 : if (val==0x0000208E) return ON; //# Pe SUBSCRIPT RIGHT PARENTHESIS
966 0 : if ((val>=0x2100) && (val<=0x2101)) return ON; //# So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
967 0 : if ((val>=0x2103) && (val<=0x2106)) return ON; //# So [4] DEGREE CELSIUS..CADA UNA
968 0 : if ((val>=0x2108) && (val<=0x2109)) return ON; //# So [2] SCRUPLE..DEGREE FAHRENHEIT
969 0 : if (val==0x00002114) return ON; //# So L B BAR SYMBOL
970 0 : if ((val>=0x2116) && (val<=0x2118)) return ON; //# So [3] NUMERO SIGN..SCRIPT CAPITAL P
971 0 : if ((val>=0x211E) && (val<=0x2123)) return ON; //# So [6] PRESCRIPTION TAKE..VERSICLE
972 0 : if (val==0x00002125) return ON; //# So OUNCE SIGN
973 0 : if (val==0x00002127) return ON; //# So INVERTED OHM SIGN
974 0 : if (val==0x00002129) return ON; //# So TURNED GREEK SMALL LETTER IOTA
975 0 : if ((val>=0x213A) && (val<=0x213B)) return ON; //# So [2] ROTATED CAPITAL Q..FACSIMILE SIGN
976 0 : if ((val>=0x2140) && (val<=0x2144)) return ON; //# Sm [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y
977 0 : if (val==0x0000214A) return ON; //# So PROPERTY LINE
978 0 : if (val==0x0000214B) return ON; //# Sm TURNED AMPERSAND
979 0 : if ((val>=0x214C) && (val<=0x214D)) return ON; //# So [2] PER SIGN..AKTIESELSKAB
980 0 : if ((val>=0x2153) && (val<=0x215F)) return ON; //# No [13] VULGAR FRACTION ONE THIRD..FRACTION NUMERATOR ONE
981 0 : if ((val>=0x2190) && (val<=0x2194)) return ON; //# Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
982 0 : if ((val>=0x2195) && (val<=0x2199)) return ON; //# So [5] UP DOWN ARROW..SOUTH WEST ARROW
983 0 : if ((val>=0x219A) && (val<=0x219B)) return ON; //# Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
984 0 : if ((val>=0x219C) && (val<=0x219F)) return ON; //# So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
985 0 : if (val==0x000021A0) return ON; //# Sm RIGHTWARDS TWO HEADED ARROW
986 0 : if ((val>=0x21A1) && (val<=0x21A2)) return ON; //# So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
987 0 : if (val==0x000021A3) return ON; //# Sm RIGHTWARDS ARROW WITH TAIL
988 0 : if ((val>=0x21A4) && (val<=0x21A5)) return ON; //# So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
989 0 : if (val==0x000021A6) return ON; //# Sm RIGHTWARDS ARROW FROM BAR
990 0 : if ((val>=0x21A7) && (val<=0x21AD)) return ON; //# So [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW
991 0 : if (val==0x000021AE) return ON; //# Sm LEFT RIGHT ARROW WITH STROKE
992 0 : if ((val>=0x21AF) && (val<=0x21CD)) return ON; //# So [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE
993 0 : if ((val>=0x21CE) && (val<=0x21CF)) return ON; //# Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
994 0 : if ((val>=0x21D0) && (val<=0x21D1)) return ON; //# So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
995 0 : if (val==0x000021D2) return ON; //# Sm RIGHTWARDS DOUBLE ARROW
996 0 : if (val==0x000021D3) return ON; //# So DOWNWARDS DOUBLE ARROW
997 0 : if (val==0x000021D4) return ON; //# Sm LEFT RIGHT DOUBLE ARROW
998 0 : if ((val>=0x21D5) && (val<=0x21F3)) return ON; //# So [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW
999 0 : if ((val>=0x21F4) && (val<=0x2211)) return ON; //# Sm [30] RIGHT ARROW WITH SMALL CIRCLE..N-ARY SUMMATION
1000 0 : if ((val>=0x2214) && (val<=0x22FF)) return ON; //# Sm [236] DOT PLUS..Z NOTATION BAG MEMBERSHIP
1001 0 : if ((val>=0x2300) && (val<=0x2307)) return ON; //# So [8] DIAMETER SIGN..WAVY LINE
1002 0 : if ((val>=0x2308) && (val<=0x230B)) return ON; //# Sm [4] LEFT CEILING..RIGHT FLOOR
1003 0 : if ((val>=0x230C) && (val<=0x231F)) return ON; //# So [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER
1004 0 : if ((val>=0x2320) && (val<=0x2321)) return ON; //# Sm [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL
1005 0 : if ((val>=0x2322) && (val<=0x2328)) return ON; //# So [7] FROWN..KEYBOARD
1006 0 : if (val==0x00002329) return ON; //# Ps LEFT-POINTING ANGLE BRACKET
1007 0 : if (val==0x0000232A) return ON; //# Pe RIGHT-POINTING ANGLE BRACKET
1008 0 : if ((val>=0x232B) && (val<=0x2335)) return ON; //# So [11] ERASE TO THE LEFT..COUNTERSINK
1009 0 : if (val==0x0000237B) return ON; //# So NOT CHECK MARK
1010 0 : if (val==0x0000237C) return ON; //# Sm RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
1011 0 : if ((val>=0x237D) && (val<=0x2394)) return ON; //# So [24] SHOULDERED OPEN BOX..SOFTWARE-FUNCTION SYMBOL
1012 0 : if ((val>=0x2396) && (val<=0x239A)) return ON; //# So [5] DECIMAL SEPARATOR KEY SYMBOL..CLEAR SCREEN SYMBOL
1013 0 : if ((val>=0x239B) && (val<=0x23B3)) return ON; //# Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
1014 0 : if ((val>=0x23B4) && (val<=0x23DB)) return ON; //# So [40] TOP SQUARE BRACKET..FUSE
1015 0 : if ((val>=0x23DC) && (val<=0x23E1)) return ON; //# Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET
1016 0 : if ((val>=0x23E2) && (val<=0x23E7)) return ON; //# So [6] WHITE TRAPEZIUM..ELECTRICAL INTERSECTION
1017 0 : if ((val>=0x2400) && (val<=0x2426)) return ON; //# So [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO
1018 0 : if ((val>=0x2440) && (val<=0x244A)) return ON; //# So [11] OCR HOOK..OCR DOUBLE BACKSLASH
1019 0 : if ((val>=0x2460) && (val<=0x2487)) return ON; //# No [40] CIRCLED DIGIT ONE..PARENTHESIZED NUMBER TWENTY
1020 0 : if ((val>=0x24EA) && (val<=0x24FF)) return ON; //# No [22] CIRCLED DIGIT ZERO..NEGATIVE CIRCLED DIGIT ZERO
1021 0 : if ((val>=0x2500) && (val<=0x25B6)) return ON; //# So [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE
1022 0 : if (val==0x000025B7) return ON; //# Sm WHITE RIGHT-POINTING TRIANGLE
1023 0 : if ((val>=0x25B8) && (val<=0x25C0)) return ON; //# So [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE
1024 0 : if (val==0x000025C1) return ON; //# Sm WHITE LEFT-POINTING TRIANGLE
1025 0 : if ((val>=0x25C2) && (val<=0x25F7)) return ON; //# So [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT
1026 0 : if ((val>=0x25F8) && (val<=0x25FF)) return ON; //# Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE
1027 0 : if ((val>=0x2600) && (val<=0x266E)) return ON; //# So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN
1028 0 : if (val==0x0000266F) return ON; //# Sm MUSIC SHARP SIGN
1029 0 : if ((val>=0x2670) && (val<=0x269C)) return ON; //# So [45] WEST SYRIAC CROSS..FLEUR-DE-LIS
1030 0 : if ((val>=0x26A0) && (val<=0x26AB)) return ON; //# So [12] WARNING SIGN..MEDIUM BLACK CIRCLE
1031 0 : if ((val>=0x26AD) && (val<=0x26B2)) return ON; //# So [6] MARRIAGE SYMBOL..NEUTER
1032 0 : if ((val>=0x2701) && (val<=0x2704)) return ON; //# So [4] UPPER BLADE SCISSORS..WHITE SCISSORS
1033 0 : if ((val>=0x2706) && (val<=0x2709)) return ON; //# So [4] TELEPHONE LOCATION SIGN..ENVELOPE
1034 0 : if ((val>=0x270C) && (val<=0x2727)) return ON; //# So [28] VICTORY HAND..WHITE FOUR POINTED STAR
1035 0 : if ((val>=0x2729) && (val<=0x274B)) return ON; //# So [35] STRESS OUTLINED WHITE STAR..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
1036 0 : if (val==0x0000274D) return ON; //# So SHADOWED WHITE CIRCLE
1037 0 : if ((val>=0x274F) && (val<=0x2752)) return ON; //# So [4] LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE
1038 0 : if (val==0x00002756) return ON; //# So BLACK DIAMOND MINUS WHITE X
1039 0 : if ((val>=0x2758) && (val<=0x275E)) return ON; //# So [7] LIGHT VERTICAL BAR..HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
1040 0 : if ((val>=0x2761) && (val<=0x2767)) return ON; //# So [7] CURVED STEM PARAGRAPH SIGN ORNAMENT..ROTATED FLORAL HEART BULLET
1041 0 : if (val==0x00002768) return ON; //# Ps MEDIUM LEFT PARENTHESIS ORNAMENT
1042 0 : if (val==0x00002769) return ON; //# Pe MEDIUM RIGHT PARENTHESIS ORNAMENT
1043 0 : if (val==0x0000276A) return ON; //# Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
1044 0 : if (val==0x0000276B) return ON; //# Pe MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
1045 0 : if (val==0x0000276C) return ON; //# Ps MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
1046 0 : if (val==0x0000276D) return ON; //# Pe MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
1047 0 : if (val==0x0000276E) return ON; //# Ps HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
1048 0 : if (val==0x0000276F) return ON; //# Pe HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
1049 0 : if (val==0x00002770) return ON; //# Ps HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
1050 0 : if (val==0x00002771) return ON; //# Pe HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
1051 0 : if (val==0x00002772) return ON; //# Ps LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
1052 0 : if (val==0x00002773) return ON; //# Pe LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
1053 0 : if (val==0x00002774) return ON; //# Ps MEDIUM LEFT CURLY BRACKET ORNAMENT
1054 0 : if (val==0x00002775) return ON; //# Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT
1055 0 : if ((val>=0x2776) && (val<=0x2793)) return ON; //# No [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
1056 0 : if (val==0x00002794) return ON; //# So HEAVY WIDE-HEADED RIGHTWARDS ARROW
1057 0 : if ((val>=0x2798) && (val<=0x27AF)) return ON; //# So [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
1058 0 : if ((val>=0x27B1) && (val<=0x27BE)) return ON; //# So [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW
1059 0 : if ((val>=0x27C0) && (val<=0x27C4)) return ON; //# Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
1060 0 : if (val==0x000027C5) return ON; //# Ps LEFT S-SHAPED BAG DELIMITER
1061 0 : if (val==0x000027C6) return ON; //# Pe RIGHT S-SHAPED BAG DELIMITER
1062 0 : if ((val>=0x27C7) && (val<=0x27CA)) return ON; //# Sm [4] OR WITH DOT INSIDE..VERTICAL BAR WITH HORIZONTAL STROKE
1063 0 : if ((val>=0x27D0) && (val<=0x27E5)) return ON; //# Sm [22] WHITE DIAMOND WITH CENTRED DOT..WHITE SQUARE WITH RIGHTWARDS TICK
1064 0 : if (val==0x000027E6) return ON; //# Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET
1065 0 : if (val==0x000027E7) return ON; //# Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET
1066 0 : if (val==0x000027E8) return ON; //# Ps MATHEMATICAL LEFT ANGLE BRACKET
1067 0 : if (val==0x000027E9) return ON; //# Pe MATHEMATICAL RIGHT ANGLE BRACKET
1068 0 : if (val==0x000027EA) return ON; //# Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
1069 0 : if (val==0x000027EB) return ON; //# Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
1070 0 : if ((val>=0x27F0) && (val<=0x27FF)) return ON; //# Sm [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW
1071 0 : if ((val>=0x2900) && (val<=0x2982)) return ON; //# Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON
1072 0 : if (val==0x00002983) return ON; //# Ps LEFT WHITE CURLY BRACKET
1073 0 : if (val==0x00002984) return ON; //# Pe RIGHT WHITE CURLY BRACKET
1074 0 : if (val==0x00002985) return ON; //# Ps LEFT WHITE PARENTHESIS
1075 0 : if (val==0x00002986) return ON; //# Pe RIGHT WHITE PARENTHESIS
1076 0 : if (val==0x00002987) return ON; //# Ps Z NOTATION LEFT IMAGE BRACKET
1077 0 : if (val==0x00002988) return ON; //# Pe Z NOTATION RIGHT IMAGE BRACKET
1078 0 : if (val==0x00002989) return ON; //# Ps Z NOTATION LEFT BINDING BRACKET
1079 0 : if (val==0x0000298A) return ON; //# Pe Z NOTATION RIGHT BINDING BRACKET
1080 0 : if (val==0x0000298B) return ON; //# Ps LEFT SQUARE BRACKET WITH UNDERBAR
1081 0 : if (val==0x0000298C) return ON; //# Pe RIGHT SQUARE BRACKET WITH UNDERBAR
1082 0 : if (val==0x0000298D) return ON; //# Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
1083 0 : if (val==0x0000298E) return ON; //# Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
1084 0 : if (val==0x0000298F) return ON; //# Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
1085 0 : if (val==0x00002990) return ON; //# Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
1086 0 : if (val==0x00002991) return ON; //# Ps LEFT ANGLE BRACKET WITH DOT
1087 0 : if (val==0x00002992) return ON; //# Pe RIGHT ANGLE BRACKET WITH DOT
1088 0 : if (val==0x00002993) return ON; //# Ps LEFT ARC LESS-THAN BRACKET
1089 0 : if (val==0x00002994) return ON; //# Pe RIGHT ARC GREATER-THAN BRACKET
1090 0 : if (val==0x00002995) return ON; //# Ps DOUBLE LEFT ARC GREATER-THAN BRACKET
1091 0 : if (val==0x00002996) return ON; //# Pe DOUBLE RIGHT ARC LESS-THAN BRACKET
1092 0 : if (val==0x00002997) return ON; //# Ps LEFT BLACK TORTOISE SHELL BRACKET
1093 0 : if (val==0x00002998) return ON; //# Pe RIGHT BLACK TORTOISE SHELL BRACKET
1094 0 : if ((val>=0x2999) && (val<=0x29D7)) return ON; //# Sm [63] DOTTED FENCE..BLACK HOURGLASS
1095 0 : if (val==0x000029D8) return ON; //# Ps LEFT WIGGLY FENCE
1096 0 : if (val==0x000029D9) return ON; //# Pe RIGHT WIGGLY FENCE
1097 0 : if (val==0x000029DA) return ON; //# Ps LEFT DOUBLE WIGGLY FENCE
1098 0 : if (val==0x000029DB) return ON; //# Pe RIGHT DOUBLE WIGGLY FENCE
1099 0 : if ((val>=0x29DC) && (val<=0x29FB)) return ON; //# Sm [32] INCOMPLETE INFINITY..TRIPLE PLUS
1100 0 : if (val==0x000029FC) return ON; //# Ps LEFT-POINTING CURVED ANGLE BRACKET
1101 0 : if (val==0x000029FD) return ON; //# Pe RIGHT-POINTING CURVED ANGLE BRACKET
1102 0 : if ((val>=0x29FE) && (val<=0x2AFF)) return ON; //# Sm [258] TINY..N-ARY WHITE VERTICAL BAR
1103 0 : if ((val>=0x2B00) && (val<=0x2B1A)) return ON; //# So [27] NORTH EAST WHITE ARROW..DOTTED SQUARE
1104 0 : if ((val>=0x2B20) && (val<=0x2B23)) return ON; //# So [4] WHITE PENTAGON..HORIZONTAL BLACK HEXAGON
1105 0 : if ((val>=0x2CE5) && (val<=0x2CEA)) return ON; //# So [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA
1106 0 : if ((val>=0x2CF9) && (val<=0x2CFC)) return ON; //# Po [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER
1107 0 : if (val==0x00002CFD) return ON; //# No COPTIC FRACTION ONE HALF
1108 0 : if ((val>=0x2CFE) && (val<=0x2CFF)) return ON; //# Po [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER
1109 0 : if ((val>=0x2E00) && (val<=0x2E01)) return ON; //# Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
1110 0 : if (val==0x00002E02) return ON; //# Pi LEFT SUBSTITUTION BRACKET
1111 0 : if (val==0x00002E03) return ON; //# Pf RIGHT SUBSTITUTION BRACKET
1112 0 : if (val==0x00002E04) return ON; //# Pi LEFT DOTTED SUBSTITUTION BRACKET
1113 0 : if (val==0x00002E05) return ON; //# Pf RIGHT DOTTED SUBSTITUTION BRACKET
1114 0 : if ((val>=0x2E06) && (val<=0x2E08)) return ON; //# Po [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER
1115 0 : if (val==0x00002E09) return ON; //# Pi LEFT TRANSPOSITION BRACKET
1116 0 : if (val==0x00002E0A) return ON; //# Pf RIGHT TRANSPOSITION BRACKET
1117 0 : if (val==0x00002E0B) return ON; //# Po RAISED SQUARE
1118 0 : if (val==0x00002E0C) return ON; //# Pi LEFT RAISED OMISSION BRACKET
1119 0 : if (val==0x00002E0D) return ON; //# Pf RIGHT RAISED OMISSION BRACKET
1120 0 : if ((val>=0x2E0E) && (val<=0x2E16)) return ON; //# Po [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE
1121 0 : if (val==0x00002E17) return ON; //# Pd DOUBLE OBLIQUE HYPHEN
1122 0 : if (val==0x00002E1C) return ON; //# Pi LEFT LOW PARAPHRASE BRACKET
1123 0 : if (val==0x00002E1D) return ON; //# Pf RIGHT LOW PARAPHRASE BRACKET
1124 0 : if ((val>=0x2E80) && (val<=0x2E99)) return ON; //# So [26] CJK RADICAL REPEAT..CJK RADICAL RAP
1125 0 : if ((val>=0x2E9B) && (val<=0x2EF3)) return ON; //# So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
1126 0 : if ((val>=0x2F00) && (val<=0x2FD5)) return ON; //# So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
1127 0 : if ((val>=0x2FF0) && (val<=0x2FFB)) return ON; //# So [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
1128 0 : if ((val>=0x3001) && (val<=0x3003)) return ON; //# Po [3] IDEOGRAPHIC COMMA..DITTO MARK
1129 0 : if (val==0x00003004) return ON; //# So JAPANESE INDUSTRIAL STANDARD SYMBOL
1130 0 : if (val==0x00003008) return ON; //# Ps LEFT ANGLE BRACKET
1131 0 : if (val==0x00003009) return ON; //# Pe RIGHT ANGLE BRACKET
1132 0 : if (val==0x0000300A) return ON; //# Ps LEFT DOUBLE ANGLE BRACKET
1133 0 : if (val==0x0000300B) return ON; //# Pe RIGHT DOUBLE ANGLE BRACKET
1134 0 : if (val==0x0000300C) return ON; //# Ps LEFT CORNER BRACKET
1135 0 : if (val==0x0000300D) return ON; //# Pe RIGHT CORNER BRACKET
1136 0 : if (val==0x0000300E) return ON; //# Ps LEFT WHITE CORNER BRACKET
1137 0 : if (val==0x0000300F) return ON; //# Pe RIGHT WHITE CORNER BRACKET
1138 0 : if (val==0x00003010) return ON; //# Ps LEFT BLACK LENTICULAR BRACKET
1139 0 : if (val==0x00003011) return ON; //# Pe RIGHT BLACK LENTICULAR BRACKET
1140 0 : if ((val>=0x3012) && (val<=0x3013)) return ON; //# So [2] POSTAL MARK..GETA MARK
1141 0 : if (val==0x00003014) return ON; //# Ps LEFT TORTOISE SHELL BRACKET
1142 0 : if (val==0x00003015) return ON; //# Pe RIGHT TORTOISE SHELL BRACKET
1143 0 : if (val==0x00003016) return ON; //# Ps LEFT WHITE LENTICULAR BRACKET
1144 0 : if (val==0x00003017) return ON; //# Pe RIGHT WHITE LENTICULAR BRACKET
1145 0 : if (val==0x00003018) return ON; //# Ps LEFT WHITE TORTOISE SHELL BRACKET
1146 0 : if (val==0x00003019) return ON; //# Pe RIGHT WHITE TORTOISE SHELL BRACKET
1147 0 : if (val==0x0000301A) return ON; //# Ps LEFT WHITE SQUARE BRACKET
1148 0 : if (val==0x0000301B) return ON; //# Pe RIGHT WHITE SQUARE BRACKET
1149 0 : if (val==0x0000301C) return ON; //# Pd WAVE DASH
1150 0 : if (val==0x0000301D) return ON; //# Ps REVERSED DOUBLE PRIME QUOTATION MARK
1151 0 : if ((val>=0x301E) && (val<=0x301F)) return ON; //# Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
1152 0 : if (val==0x00003020) return ON; //# So POSTAL MARK FACE
1153 0 : if (val==0x00003030) return ON; //# Pd WAVY DASH
1154 0 : if ((val>=0x3036) && (val<=0x3037)) return ON; //# So [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
1155 0 : if (val==0x0000303D) return ON; //# Po PART ALTERNATION MARK
1156 0 : if ((val>=0x303E) && (val<=0x303F)) return ON; //# So [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE
1157 0 : if ((val>=0x309B) && (val<=0x309C)) return ON; //# Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
1158 0 : if (val==0x000030A0) return ON; //# Pd KATAKANA-HIRAGANA DOUBLE HYPHEN
1159 0 : if (val==0x000030FB) return ON; //# Po KATAKANA MIDDLE DOT
1160 0 : if ((val>=0x31C0) && (val<=0x31CF)) return ON; //# So [16] CJK STROKE T..CJK STROKE N
1161 0 : if ((val>=0x321D) && (val<=0x321E)) return ON; //# So [2] PARENTHESIZED KOREAN CHARACTER OJEON..PARENTHESIZED KOREAN CHARACTER O HU
1162 0 : if (val==0x00003250) return ON; //# So PARTNERSHIP SIGN
1163 0 : if ((val>=0x3251) && (val<=0x325F)) return ON; //# No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
1164 0 : if ((val>=0x327C) && (val<=0x327E)) return ON; //# So [3] CIRCLED KOREAN CHARACTER CHAMKO..CIRCLED HANGUL IEUNG U
1165 0 : if ((val>=0x32B1) && (val<=0x32BF)) return ON; //# No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
1166 0 : if ((val>=0x32CC) && (val<=0x32CF)) return ON; //# So [4] SQUARE HG..LIMITED LIABILITY SIGN
1167 0 : if ((val>=0x3377) && (val<=0x337A)) return ON; //# So [4] SQUARE DM..SQUARE IU
1168 0 : if ((val>=0x33DE) && (val<=0x33DF)) return ON; //# So [2] SQUARE V OVER M..SQUARE A OVER M
1169 0 : if (val==0x000033FF) return ON; //# So SQUARE GAL
1170 0 : if ((val>=0x4DC0) && (val<=0x4DFF)) return ON; //# So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
1171 0 : if ((val>=0xA490) && (val<=0xA4C6)) return ON; //# So [55] YI RADICAL QOT..YI RADICAL KE
1172 0 : if ((val>=0xA700) && (val<=0xA716)) return ON; //# Sk [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
1173 0 : if ((val>=0xA717) && (val<=0xA71A)) return ON; //# Lm [4] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOWER RIGHT CORNER ANGLE
1174 0 : if ((val>=0xA720) && (val<=0xA721)) return ON; //# Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE
1175 0 : if ((val>=0xA828) && (val<=0xA82B)) return ON; //# So [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4
1176 0 : if ((val>=0xA874) && (val<=0xA877)) return ON; //# Po [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD
1177 0 : if (val==0x0000FD3E) return ON; //# Ps ORNATE LEFT PARENTHESIS
1178 0 : if (val==0x0000FD3F) return ON; //# Pe ORNATE RIGHT PARENTHESIS
1179 0 : if (val==0x0000FDFD) return ON; //# So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
1180 0 : if ((val>=0xFE10) && (val<=0xFE16)) return ON; //# Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK
1181 0 : if (val==0x0000FE17) return ON; //# Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
1182 0 : if (val==0x0000FE18) return ON; //# Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
1183 0 : if (val==0x0000FE19) return ON; //# Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
1184 0 : if (val==0x0000FE30) return ON; //# Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
1185 0 : if ((val>=0xFE31) && (val<=0xFE32)) return ON; //# Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
1186 0 : if ((val>=0xFE33) && (val<=0xFE34)) return ON; //# Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
1187 0 : if (val==0x0000FE35) return ON; //# Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
1188 0 : if (val==0x0000FE36) return ON; //# Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
1189 0 : if (val==0x0000FE37) return ON; //# Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
1190 0 : if (val==0x0000FE38) return ON; //# Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
1191 0 : if (val==0x0000FE39) return ON; //# Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
1192 0 : if (val==0x0000FE3A) return ON; //# Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
1193 0 : if (val==0x0000FE3B) return ON; //# Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
1194 0 : if (val==0x0000FE3C) return ON; //# Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
1195 0 : if (val==0x0000FE3D) return ON; //# Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
1196 0 : if (val==0x0000FE3E) return ON; //# Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
1197 0 : if (val==0x0000FE3F) return ON; //# Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
1198 0 : if (val==0x0000FE40) return ON; //# Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
1199 0 : if (val==0x0000FE41) return ON; //# Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
1200 0 : if (val==0x0000FE42) return ON; //# Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
1201 0 : if (val==0x0000FE43) return ON; //# Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
1202 0 : if (val==0x0000FE44) return ON; //# Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
1203 0 : if ((val>=0xFE45) && (val<=0xFE46)) return ON; //# Po [2] SESAME DOT..WHITE SESAME DOT
1204 0 : if (val==0x0000FE47) return ON; //# Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
1205 0 : if (val==0x0000FE48) return ON; //# Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
1206 0 : if ((val>=0xFE49) && (val<=0xFE4C)) return ON; //# Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE
1207 0 : if ((val>=0xFE4D) && (val<=0xFE4F)) return ON; //# Pc [3] DASHED LOW LINE..WAVY LOW LINE
1208 0 : if (val==0x0000FE51) return ON; //# Po SMALL IDEOGRAPHIC COMMA
1209 0 : if (val==0x0000FE54) return ON; //# Po SMALL SEMICOLON
1210 0 : if ((val>=0xFE56) && (val<=0xFE57)) return ON; //# Po [2] SMALL QUESTION MARK..SMALL EXCLAMATION MARK
1211 0 : if (val==0x0000FE58) return ON; //# Pd SMALL EM DASH
1212 0 : if (val==0x0000FE59) return ON; //# Ps SMALL LEFT PARENTHESIS
1213 0 : if (val==0x0000FE5A) return ON; //# Pe SMALL RIGHT PARENTHESIS
1214 0 : if (val==0x0000FE5B) return ON; //# Ps SMALL LEFT CURLY BRACKET
1215 0 : if (val==0x0000FE5C) return ON; //# Pe SMALL RIGHT CURLY BRACKET
1216 0 : if (val==0x0000FE5D) return ON; //# Ps SMALL LEFT TORTOISE SHELL BRACKET
1217 0 : if (val==0x0000FE5E) return ON; //# Pe SMALL RIGHT TORTOISE SHELL BRACKET
1218 0 : if ((val>=0xFE60) && (val<=0xFE61)) return ON; //# Po [2] SMALL AMPERSAND..SMALL ASTERISK
1219 0 : if ((val>=0xFE64) && (val<=0xFE66)) return ON; //# Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN
1220 0 : if (val==0x0000FE68) return ON; //# Po SMALL REVERSE SOLIDUS
1221 0 : if (val==0x0000FE6B) return ON; //# Po SMALL COMMERCIAL AT
1222 0 : if ((val>=0xFF01) && (val<=0xFF02)) return ON; //# Po [2] FULLWIDTH EXCLAMATION MARK..FULLWIDTH QUOTATION MARK
1223 0 : if ((val>=0xFF06) && (val<=0xFF07)) return ON; //# Po [2] FULLWIDTH AMPERSAND..FULLWIDTH APOSTROPHE
1224 0 : if (val==0x0000FF08) return ON; //# Ps FULLWIDTH LEFT PARENTHESIS
1225 0 : if (val==0x0000FF09) return ON; //# Pe FULLWIDTH RIGHT PARENTHESIS
1226 0 : if (val==0x0000FF0A) return ON; //# Po FULLWIDTH ASTERISK
1227 0 : if (val==0x0000FF1B) return ON; //# Po FULLWIDTH SEMICOLON
1228 0 : if ((val>=0xFF1C) && (val<=0xFF1E)) return ON; //# Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN
1229 0 : if ((val>=0xFF1F) && (val<=0xFF20)) return ON; //# Po [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT
1230 0 : if (val==0x0000FF3B) return ON; //# Ps FULLWIDTH LEFT SQUARE BRACKET
1231 0 : if (val==0x0000FF3C) return ON; //# Po FULLWIDTH REVERSE SOLIDUS
1232 0 : if (val==0x0000FF3D) return ON; //# Pe FULLWIDTH RIGHT SQUARE BRACKET
1233 0 : if (val==0x0000FF3E) return ON; //# Sk FULLWIDTH CIRCUMFLEX ACCENT
1234 0 : if (val==0x0000FF3F) return ON; //# Pc FULLWIDTH LOW LINE
1235 0 : if (val==0x0000FF40) return ON; //# Sk FULLWIDTH GRAVE ACCENT
1236 0 : if (val==0x0000FF5B) return ON; //# Ps FULLWIDTH LEFT CURLY BRACKET
1237 0 : if (val==0x0000FF5C) return ON; //# Sm FULLWIDTH VERTICAL LINE
1238 0 : if (val==0x0000FF5D) return ON; //# Pe FULLWIDTH RIGHT CURLY BRACKET
1239 0 : if (val==0x0000FF5E) return ON; //# Sm FULLWIDTH TILDE
1240 0 : if (val==0x0000FF5F) return ON; //# Ps FULLWIDTH LEFT WHITE PARENTHESIS
1241 0 : if (val==0x0000FF60) return ON; //# Pe FULLWIDTH RIGHT WHITE PARENTHESIS
1242 0 : if (val==0x0000FF61) return ON; //# Po HALFWIDTH IDEOGRAPHIC FULL STOP
1243 0 : if (val==0x0000FF62) return ON; //# Ps HALFWIDTH LEFT CORNER BRACKET
1244 0 : if (val==0x0000FF63) return ON; //# Pe HALFWIDTH RIGHT CORNER BRACKET
1245 0 : if ((val>=0xFF64) && (val<=0xFF65)) return ON; //# Po [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT
1246 0 : if (val==0x0000FFE2) return ON; //# Sm FULLWIDTH NOT SIGN
1247 0 : if (val==0x0000FFE3) return ON; //# Sk FULLWIDTH MACRON
1248 0 : if (val==0x0000FFE4) return ON; //# So FULLWIDTH BROKEN BAR
1249 0 : if (val==0x0000FFE8) return ON; //# So HALFWIDTH FORMS LIGHT VERTICAL
1250 0 : if ((val>=0xFFE9) && (val<=0xFFEC)) return ON; //# Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW
1251 0 : if ((val>=0xFFED) && (val<=0xFFEE)) return ON; //# So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
1252 0 : if ((val>=0xFFF9) && (val<=0xFFFB)) return ON; //# Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
1253 0 : if ((val>=0xFFFC) && (val<=0xFFFD)) return ON; //# So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
1254 0 : if (val==0x00010101) return ON; //# Po AEGEAN WORD SEPARATOR DOT
1255 0 : if ((val>=0x10140) && (val<=0x10174)) return ON; //# Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
1256 0 : if ((val>=0x10175) && (val<=0x10178)) return ON; //# No [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN
1257 0 : if ((val>=0x10179) && (val<=0x10189)) return ON; //# So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
1258 0 : if (val==0x0001018A) return ON; //# No GREEK ZERO SIGN
1259 0 : if (val==0x0001091F) return ON; //# Po PHOENICIAN WORD SEPARATOR
1260 0 : if ((val>=0x1D200) && (val<=0x1D241)) return ON; //# So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54
1261 0 : if (val==0x0001D245) return ON; //# So GREEK MUSICAL LEIMMA
1262 0 : if ((val>=0x1D300) && (val<=0x1D356)) return ON; //# So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING
1263 0 : if (/*(val>=0x0000) && */(val<=0x0008)) return BN; //# Cc [9] <control-0000>..<control-0008>
1264 0 : if ((val>=0x000E) && (val<=0x001B)) return BN; //# Cc [14] <control-000E>..<control-001B>
1265 0 : if ((val>=0x007F) && (val<=0x0084)) return BN; //# Cc [6] <control-007F>..<control-0084>
1266 0 : if ((val>=0x0086) && (val<=0x009F)) return BN; //# Cc [26] <control-0086>..<control-009F>
1267 0 : if (val==0x000000AD) return BN; //# Cf SOFT HYPHEN
1268 0 : if (val==0x0000070F) return BN; //# Cf SYRIAC ABBREVIATION MARK
1269 0 : if ((val>=0x200B) && (val<=0x200D)) return BN; //# Cf [3] ZERO WIDTH SPACE..ZERO WIDTH JOINER
1270 0 : if ((val>=0x2060) && (val<=0x2063)) return BN; //# Cf [4] WORD JOINER..INVISIBLE SEPARATOR
1271 0 : if ((val>=0x2064) && (val<=0x2069)) return BN; //# Cn [6] <reserved-2064>..<reserved-2069>
1272 0 : if ((val>=0x206A) && (val<=0x206F)) return BN; //# Cf [6] INHIBIT SYMMETRIC SWAPPING..NOMINAL DIGIT SHAPES
1273 0 : if ((val>=0xFDD0) && (val<=0xFDEF)) return BN; //# Cn [32] <noncharacter-FDD0>..<noncharacter-FDEF>
1274 0 : if (val==0x0000FEFF) return BN; //# Cf ZERO WIDTH NO-BREAK SPACE
1275 0 : if ((val>=0xFFF0) && (val<=0xFFF8)) return BN; //# Cn [9] <reserved-FFF0>..<reserved-FFF8>
1276 0 : if ((val>=0xFFFE) && (val<=0xFFFF)) return BN; //# Cn [2] <noncharacter-FFFE>..<noncharacter-FFFF>
1277 0 : if ((val>=0x1D173) && (val<=0x1D17A)) return BN; //# Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
1278 0 : if ((val>=0x1FFFE) && (val<=0x1FFFF)) return BN; //# Cn [2] <noncharacter-1FFFE>..<noncharacter-1FFFF>
1279 0 : if ((val>=0x2FFFE) && (val<=0x2FFFF)) return BN; //# Cn [2] <noncharacter-2FFFE>..<noncharacter-2FFFF>
1280 0 : if ((val>=0x3FFFE) && (val<=0x3FFFF)) return BN; //# Cn [2] <noncharacter-3FFFE>..<noncharacter-3FFFF>
1281 0 : if ((val>=0x4FFFE) && (val<=0x4FFFF)) return BN; //# Cn [2] <noncharacter-4FFFE>..<noncharacter-4FFFF>
1282 0 : if ((val>=0x5FFFE) && (val<=0x5FFFF)) return BN; //# Cn [2] <noncharacter-5FFFE>..<noncharacter-5FFFF>
1283 0 : if ((val>=0x6FFFE) && (val<=0x6FFFF)) return BN; //# Cn [2] <noncharacter-6FFFE>..<noncharacter-6FFFF>
1284 0 : if ((val>=0x7FFFE) && (val<=0x7FFFF)) return BN; //# Cn [2] <noncharacter-7FFFE>..<noncharacter-7FFFF>
1285 0 : if ((val>=0x8FFFE) && (val<=0x8FFFF)) return BN; //# Cn [2] <noncharacter-8FFFE>..<noncharacter-8FFFF>
1286 0 : if ((val>=0x9FFFE) && (val<=0x9FFFF)) return BN; //# Cn [2] <noncharacter-9FFFE>..<noncharacter-9FFFF>
1287 0 : if ((val>=0xAFFFE) && (val<=0xAFFFF)) return BN; //# Cn [2] <noncharacter-AFFFE>..<noncharacter-AFFFF>
1288 0 : if ((val>=0xBFFFE) && (val<=0xBFFFF)) return BN; //# Cn [2] <noncharacter-BFFFE>..<noncharacter-BFFFF>
1289 0 : if ((val>=0xCFFFE) && (val<=0xCFFFF)) return BN; //# Cn [2] <noncharacter-CFFFE>..<noncharacter-CFFFF>
1290 0 : if ((val>=0xDFFFE) && (val<=0xE0000)) return BN; //# Cn [3] <noncharacter-DFFFE>..<reserved-E0000>
1291 0 : if (val==0x000E0001) return BN; //# Cf LANGUAGE TAG
1292 0 : if ((val>=0xE0002) && (val<=0xE001F)) return BN; //# Cn [30] <reserved-E0002>..<reserved-E001F>
1293 0 : if ((val>=0xE0020) && (val<=0xE007F)) return BN; //# Cf [96] TAG SPACE..CANCEL TAG
1294 0 : if ((val>=0xE0080) && (val<=0xE00FF)) return BN; //# Cn [128] <reserved-E0080>..<reserved-E00FF>
1295 0 : if ((val>=0xE01F0) && (val<=0xE0FFF)) return BN; //# Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
1296 0 : if ((val>=0xEFFFE) && (val<=0xEFFFF)) return BN; //# Cn [2] <noncharacter-EFFFE>..<noncharacter-EFFFF>
1297 0 : if ((val>=0xFFFFE) && (val<=0xFFFFF)) return BN; //# Cn [2] <noncharacter-FFFFE>..<noncharacter-FFFFF>
1298 0 : if ((val>=0x10FFFE) && (val<=0x10FFFF)) return BN; //# Cn [2] <noncharacter-10FFFE>..<noncharacter-10FFFF>
1299 0 : if ((val>=0x0300) && (val<=0x036F)) return NSM; //# Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
1300 0 : if ((val>=0x0483) && (val<=0x0486)) return NSM; //# Mn [4] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC PSILI PNEUMATA
1301 0 : if ((val>=0x0488) && (val<=0x0489)) return NSM; //# Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
1302 0 : if ((val>=0x0591) && (val<=0x05BD)) return NSM; //# Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
1303 0 : if (val==0x000005BF) return NSM; //# Mn HEBREW POINT RAFE
1304 0 : if ((val>=0x05C1) && (val<=0x05C2)) return NSM; //# Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
1305 0 : if ((val>=0x05C4) && (val<=0x05C5)) return NSM; //# Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
1306 0 : if (val==0x000005C7) return NSM; //# Mn HEBREW POINT QAMATS QATAN
1307 0 : if ((val>=0x0610) && (val<=0x0615)) return NSM; //# Mn [6] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL HIGH TAH
1308 0 : if ((val>=0x064B) && (val<=0x065E)) return NSM; //# Mn [20] ARABIC FATHATAN..ARABIC FATHA WITH TWO DOTS
1309 0 : if (val==0x00000670) return NSM; //# Mn ARABIC LETTER SUPERSCRIPT ALEF
1310 0 : if ((val>=0x06D6) && (val<=0x06DC)) return NSM; //# Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
1311 0 : if (val==0x000006DE) return NSM; //# Me ARABIC START OF RUB EL HIZB
1312 0 : if ((val>=0x06DF) && (val<=0x06E4)) return NSM; //# Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
1313 0 : if ((val>=0x06E7) && (val<=0x06E8)) return NSM; //# Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
1314 0 : if ((val>=0x06EA) && (val<=0x06ED)) return NSM; //# Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
1315 0 : if (val==0x00000711) return NSM; //# Mn SYRIAC LETTER SUPERSCRIPT ALAPH
1316 0 : if ((val>=0x0730) && (val<=0x074A)) return NSM; //# Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
1317 0 : if ((val>=0x07A6) && (val<=0x07B0)) return NSM; //# Mn [11] THAANA ABAFILI..THAANA SUKUN
1318 0 : if ((val>=0x07EB) && (val<=0x07F3)) return NSM; //# Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
1319 0 : if ((val>=0x0901) && (val<=0x0902)) return NSM; //# Mn [2] DEVANAGARI SIGN CANDRABINDU..DEVANAGARI SIGN ANUSVARA
1320 0 : if (val==0x0000093C) return NSM; //# Mn DEVANAGARI SIGN NUKTA
1321 0 : if ((val>=0x0941) && (val<=0x0948)) return NSM; //# Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
1322 0 : if (val==0x0000094D) return NSM; //# Mn DEVANAGARI SIGN VIRAMA
1323 0 : if ((val>=0x0951) && (val<=0x0954)) return NSM; //# Mn [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT
1324 0 : if ((val>=0x0962) && (val<=0x0963)) return NSM; //# Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
1325 0 : if (val==0x00000981) return NSM; //# Mn BENGALI SIGN CANDRABINDU
1326 0 : if (val==0x000009BC) return NSM; //# Mn BENGALI SIGN NUKTA
1327 0 : if ((val>=0x09C1) && (val<=0x09C4)) return NSM; //# Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
1328 0 : if (val==0x000009CD) return NSM; //# Mn BENGALI SIGN VIRAMA
1329 0 : if ((val>=0x09E2) && (val<=0x09E3)) return NSM; //# Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
1330 0 : if ((val>=0x0A01) && (val<=0x0A02)) return NSM; //# Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
1331 0 : if (val==0x00000A3C) return NSM; //# Mn GURMUKHI SIGN NUKTA
1332 0 : if ((val>=0x0A41) && (val<=0x0A42)) return NSM; //# Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
1333 0 : if ((val>=0x0A47) && (val<=0x0A48)) return NSM; //# Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
1334 0 : if ((val>=0x0A4B) && (val<=0x0A4D)) return NSM; //# Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
1335 0 : if ((val>=0x0A70) && (val<=0x0A71)) return NSM; //# Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK
1336 0 : if ((val>=0x0A81) && (val<=0x0A82)) return NSM; //# Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
1337 0 : if (val==0x00000ABC) return NSM; //# Mn GUJARATI SIGN NUKTA
1338 0 : if ((val>=0x0AC1) && (val<=0x0AC5)) return NSM; //# Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
1339 0 : if ((val>=0x0AC7) && (val<=0x0AC8)) return NSM; //# Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
1340 0 : if (val==0x00000ACD) return NSM; //# Mn GUJARATI SIGN VIRAMA
1341 0 : if ((val>=0x0AE2) && (val<=0x0AE3)) return NSM; //# Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
1342 0 : if (val==0x00000B01) return NSM; //# Mn ORIYA SIGN CANDRABINDU
1343 0 : if (val==0x00000B3C) return NSM; //# Mn ORIYA SIGN NUKTA
1344 0 : if (val==0x00000B3F) return NSM; //# Mn ORIYA VOWEL SIGN I
1345 0 : if ((val>=0x0B41) && (val<=0x0B43)) return NSM; //# Mn [3] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC R
1346 0 : if (val==0x00000B4D) return NSM; //# Mn ORIYA SIGN VIRAMA
1347 0 : if (val==0x00000B56) return NSM; //# Mn ORIYA AI LENGTH MARK
1348 0 : if (val==0x00000B82) return NSM; //# Mn TAMIL SIGN ANUSVARA
1349 0 : if (val==0x00000BC0) return NSM; //# Mn TAMIL VOWEL SIGN II
1350 0 : if (val==0x00000BCD) return NSM; //# Mn TAMIL SIGN VIRAMA
1351 0 : if ((val>=0x0C3E) && (val<=0x0C40)) return NSM; //# Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
1352 0 : if ((val>=0x0C46) && (val<=0x0C48)) return NSM; //# Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
1353 0 : if ((val>=0x0C4A) && (val<=0x0C4D)) return NSM; //# Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
1354 0 : if ((val>=0x0C55) && (val<=0x0C56)) return NSM; //# Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
1355 0 : if (val==0x00000CBC) return NSM; //# Mn KANNADA SIGN NUKTA
1356 0 : if ((val>=0x0CCC) && (val<=0x0CCD)) return NSM; //# Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
1357 0 : if ((val>=0x0CE2) && (val<=0x0CE3)) return NSM; //# Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
1358 0 : if ((val>=0x0D41) && (val<=0x0D43)) return NSM; //# Mn [3] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC R
1359 0 : if (val==0x00000D4D) return NSM; //# Mn MALAYALAM SIGN VIRAMA
1360 0 : if (val==0x00000DCA) return NSM; //# Mn SINHALA SIGN AL-LAKUNA
1361 0 : if ((val>=0x0DD2) && (val<=0x0DD4)) return NSM; //# Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
1362 0 : if (val==0x00000DD6) return NSM; //# Mn SINHALA VOWEL SIGN DIGA PAA-PILLA
1363 0 : if (val==0x00000E31) return NSM; //# Mn THAI CHARACTER MAI HAN-AKAT
1364 0 : if ((val>=0x0E34) && (val<=0x0E3A)) return NSM; //# Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
1365 0 : if ((val>=0x0E47) && (val<=0x0E4E)) return NSM; //# Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
1366 0 : if (val==0x00000EB1) return NSM; //# Mn LAO VOWEL SIGN MAI KAN
1367 0 : if ((val>=0x0EB4) && (val<=0x0EB9)) return NSM; //# Mn [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU
1368 0 : if ((val>=0x0EBB) && (val<=0x0EBC)) return NSM; //# Mn [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO
1369 0 : if ((val>=0x0EC8) && (val<=0x0ECD)) return NSM; //# Mn [6] LAO TONE MAI EK..LAO NIGGAHITA
1370 0 : if ((val>=0x0F18) && (val<=0x0F19)) return NSM; //# Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
1371 0 : if (val==0x00000F35) return NSM; //# Mn TIBETAN MARK NGAS BZUNG NYI ZLA
1372 0 : if (val==0x00000F37) return NSM; //# Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS
1373 0 : if (val==0x00000F39) return NSM; //# Mn TIBETAN MARK TSA -PHRU
1374 0 : if ((val>=0x0F71) && (val<=0x0F7E)) return NSM; //# Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
1375 0 : if ((val>=0x0F80) && (val<=0x0F84)) return NSM; //# Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
1376 0 : if ((val>=0x0F86) && (val<=0x0F87)) return NSM; //# Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
1377 0 : if ((val>=0x0F90) && (val<=0x0F97)) return NSM; //# Mn [8] TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER JA
1378 0 : if ((val>=0x0F99) && (val<=0x0FBC)) return NSM; //# Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
1379 0 : if (val==0x00000FC6) return NSM; //# Mn TIBETAN SYMBOL PADMA GDAN
1380 0 : if ((val>=0x102D) && (val<=0x1030)) return NSM; //# Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
1381 0 : if (val==0x00001032) return NSM; //# Mn MYANMAR VOWEL SIGN AI
1382 0 : if ((val>=0x1036) && (val<=0x1037)) return NSM; //# Mn [2] MYANMAR SIGN ANUSVARA..MYANMAR SIGN DOT BELOW
1383 0 : if (val==0x00001039) return NSM; //# Mn MYANMAR SIGN VIRAMA
1384 0 : if ((val>=0x1058) && (val<=0x1059)) return NSM; //# Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
1385 0 : if (val==0x0000135F) return NSM; //# Mn ETHIOPIC COMBINING GEMINATION MARK
1386 0 : if ((val>=0x1712) && (val<=0x1714)) return NSM; //# Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
1387 0 : if ((val>=0x1732) && (val<=0x1734)) return NSM; //# Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD
1388 0 : if ((val>=0x1752) && (val<=0x1753)) return NSM; //# Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
1389 0 : if ((val>=0x1772) && (val<=0x1773)) return NSM; //# Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
1390 0 : if ((val>=0x17B7) && (val<=0x17BD)) return NSM; //# Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
1391 0 : if (val==0x000017C6) return NSM; //# Mn KHMER SIGN NIKAHIT
1392 0 : if ((val>=0x17C9) && (val<=0x17D3)) return NSM; //# Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
1393 0 : if (val==0x000017DD) return NSM; //# Mn KHMER SIGN ATTHACAN
1394 0 : if ((val>=0x180B) && (val<=0x180D)) return NSM; //# Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
1395 0 : if (val==0x000018A9) return NSM; //# Mn MONGOLIAN LETTER ALI GALI DAGALGA
1396 0 : if ((val>=0x1920) && (val<=0x1922)) return NSM; //# Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
1397 0 : if ((val>=0x1927) && (val<=0x1928)) return NSM; //# Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
1398 0 : if ((val>=0x1929) && (val<=0x192B)) return NSM; //# Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
1399 0 : if (val==0x00001932) return NSM; //# Mn LIMBU SMALL LETTER ANUSVARA
1400 0 : if ((val>=0x1939) && (val<=0x193B)) return NSM; //# Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
1401 0 : if ((val>=0x1A17) && (val<=0x1A18)) return NSM; //# Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
1402 0 : if ((val>=0x1B00) && (val<=0x1B03)) return NSM; //# Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
1403 0 : if (val==0x00001B34) return NSM; //# Mn BALINESE SIGN REREKAN
1404 0 : if ((val>=0x1B36) && (val<=0x1B3A)) return NSM; //# Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
1405 0 : if (val==0x00001B3C) return NSM; //# Mn BALINESE VOWEL SIGN LA LENGA
1406 0 : if (val==0x00001B42) return NSM; //# Mn BALINESE VOWEL SIGN PEPET
1407 0 : if ((val>=0x1B6B) && (val<=0x1B73)) return NSM; //# Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
1408 0 : if ((val>=0x1DC0) && (val<=0x1DCA)) return NSM; //# Mn [11] COMBINING DOTTED GRAVE ACCENT..COMBINING LATIN SMALL LETTER R BELOW
1409 0 : if ((val>=0x1DFE) && (val<=0x1DFF)) return NSM; //# Mn [2] COMBINING LEFT ARROWHEAD ABOVE..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
1410 0 : if ((val>=0x20D0) && (val<=0x20DC)) return NSM; //# Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
1411 0 : if ((val>=0x20DD) && (val<=0x20E0)) return NSM; //# Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
1412 0 : if (val==0x000020E1) return NSM; //# Mn COMBINING LEFT RIGHT ARROW ABOVE
1413 0 : if ((val>=0x20E2) && (val<=0x20E4)) return NSM; //# Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
1414 0 : if ((val>=0x20E5) && (val<=0x20EF)) return NSM; //# Mn [11] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING RIGHT ARROW BELOW
1415 0 : if ((val>=0x302A) && (val<=0x302F)) return NSM; //# Mn [6] IDEOGRAPHIC LEVEL TONE MARK..HANGUL DOUBLE DOT TONE MARK
1416 0 : if ((val>=0x3099) && (val<=0x309A)) return NSM; //# Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
1417 0 : if (val==0x0000A802) return NSM; //# Mc SYLOTI NAGRI SIGN DVISVARA
1418 0 : if (val==0x0000A806) return NSM; //# Mn SYLOTI NAGRI SIGN HASANTA
1419 0 : if (val==0x0000A80B) return NSM; //# Mn SYLOTI NAGRI SIGN ANUSVARA
1420 0 : if ((val>=0xA825) && (val<=0xA826)) return NSM; //# Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
1421 0 : if (val==0x0000FB1E) return NSM; //# Mn HEBREW POINT JUDEO-SPANISH VARIKA
1422 0 : if ((val>=0xFE00) && (val<=0xFE0F)) return NSM; //# Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
1423 0 : if ((val>=0xFE20) && (val<=0xFE23)) return NSM; //# Mn [4] COMBINING LIGATURE LEFT HALF..COMBINING DOUBLE TILDE RIGHT HALF
1424 0 : if ((val>=0x10A01) && (val<=0x10A03)) return NSM; //# Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
1425 0 : if ((val>=0x10A05) && (val<=0x10A06)) return NSM; //# Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
1426 0 : if ((val>=0x10A0C) && (val<=0x10A0F)) return NSM; //# Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
1427 0 : if ((val>=0x10A38) && (val<=0x10A3A)) return NSM; //# Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
1428 0 : if (val==0x00010A3F) return NSM; //# Mn KHAROSHTHI VIRAMA
1429 0 : if ((val>=0x1D167) && (val<=0x1D169)) return NSM; //# Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
1430 0 : if ((val>=0x1D17B) && (val<=0x1D182)) return NSM; //# Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
1431 0 : if ((val>=0x1D185) && (val<=0x1D18B)) return NSM; //# Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
1432 0 : if ((val>=0x1D1AA) && (val<=0x1D1AD)) return NSM; //# Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
1433 0 : if ((val>=0x1D242) && (val<=0x1D244)) return NSM; //# Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
1434 0 : if ((val>=0xE0100) && (val<=0xE01EF)) return NSM; //# Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
1435 0 : if ((val>=0x0600) && (val<=0x0603)) return AL; //# Cf [4] ARABIC NUMBER SIGN..ARABIC SIGN SAFHA
1436 0 : if ((val>=0x0604) && (val<=0x060A)) return AL; //# Cn [7] <reserved-0604>..<reserved-060A>
1437 0 : if (val==0x0000060B) return AL; //# Sc AFGHANI SIGN
1438 0 : if (val==0x0000060D) return AL; //# Po ARABIC DATE SEPARATOR
1439 0 : if ((val>=0x0616) && (val<=0x061A)) return AL; //# Cn [5] <reserved-0616>..<reserved-061A>
1440 0 : if (val==0x0000061B) return AL; //# Po ARABIC SEMICOLON
1441 0 : if ((val>=0x061C) && (val<=0x061D)) return AL; //# Cn [2] <reserved-061C>..<reserved-061D>
1442 0 : if ((val>=0x061E) && (val<=0x061F)) return AL; //# Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK
1443 0 : if (val==0x00000620) return AL; //# Cn <reserved-0620>
1444 0 : if ((val>=0x0621) && (val<=0x063A)) return AL; //# Lo [26] ARABIC LETTER HAMZA..ARABIC LETTER GHAIN
1445 0 : if ((val>=0x063B) && (val<=0x063F)) return AL; //# Cn [5] <reserved-063B>..<reserved-063F>
1446 0 : if (val==0x00000640) return AL; //# Lm ARABIC TATWEEL
1447 0 : if ((val>=0x0641) && (val<=0x064A)) return AL; //# Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH
1448 0 : if (val==0x0000065F) return AL; //# Cn <reserved-065F>
1449 0 : if (val==0x0000066D) return AL; //# Po ARABIC FIVE POINTED STAR
1450 0 : if ((val>=0x066E) && (val<=0x066F)) return AL; //# Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
1451 0 : if ((val>=0x0671) && (val<=0x06D3)) return AL; //# Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
1452 0 : if (val==0x000006D4) return AL; //# Po ARABIC FULL STOP
1453 0 : if (val==0x000006D5) return AL; //# Lo ARABIC LETTER AE
1454 0 : if (val==0x000006DD) return AL; //# Cf ARABIC END OF AYAH
1455 0 : if ((val>=0x06E5) && (val<=0x06E6)) return AL; //# Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH
1456 0 : if ((val>=0x06EE) && (val<=0x06EF)) return AL; //# Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
1457 0 : if ((val>=0x06FA) && (val<=0x06FC)) return AL; //# Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
1458 0 : if ((val>=0x06FD) && (val<=0x06FE)) return AL; //# So [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN
1459 0 : if (val==0x000006FF) return AL; //# Lo ARABIC LETTER HEH WITH INVERTED V
1460 0 : if ((val>=0x0700) && (val<=0x070D)) return AL; //# Po [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS
1461 0 : if (val==0x0000070E) return AL; //# Cn <reserved-070E>
1462 0 : if (val==0x00000710) return AL; //# Lo SYRIAC LETTER ALAPH
1463 0 : if ((val>=0x0712) && (val<=0x072F)) return AL; //# Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
1464 0 : if ((val>=0x074B) && (val<=0x074C)) return AL; //# Cn [2] <reserved-074B>..<reserved-074C>
1465 0 : if ((val>=0x074D) && (val<=0x076D)) return AL; //# Lo [33] SYRIAC LETTER SOGDIAN ZHAIN..ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE
1466 0 : if ((val>=0x076E) && (val<=0x077F)) return AL; //# Cn [18] <reserved-076E>..<reserved-077F>
1467 0 : if ((val>=0x0780) && (val<=0x07A5)) return AL; //# Lo [38] THAANA LETTER HAA..THAANA LETTER WAAVU
1468 0 : if (val==0x000007B1) return AL; //# Lo THAANA LETTER NAA
1469 0 : if ((val>=0x07B2) && (val<=0x07BF)) return AL; //# Cn [14] <reserved-07B2>..<reserved-07BF>
1470 0 : if ((val>=0xFB50) && (val<=0xFBB1)) return AL; //# Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
1471 0 : if ((val>=0xFBB2) && (val<=0xFBD2)) return AL; //# Cn [33] <reserved-FBB2>..<reserved-FBD2>
1472 0 : if ((val>=0xFBD3) && (val<=0xFD3D)) return AL; //# Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
1473 0 : if ((val>=0xFD40) && (val<=0xFD4F)) return AL; //# Cn [16] <reserved-FD40>..<reserved-FD4F>
1474 0 : 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
1475 0 : if ((val>=0xFD90) && (val<=0xFD91)) return AL; //# Cn [2] <reserved-FD90>..<reserved-FD91>
1476 0 : 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
1477 0 : if ((val>=0xFDC8) && (val<=0xFDCF)) return AL; //# Cn [8] <reserved-FDC8>..<reserved-FDCF>
1478 0 : if ((val>=0xFDF0) && (val<=0xFDFB)) return AL; //# Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
1479 0 : if (val==0x0000FDFC) return AL; //# Sc RIAL SIGN
1480 0 : if ((val>=0xFDFE) && (val<=0xFDFF)) return AL; //# Cn [2] <reserved-FDFE>..<reserved-FDFF>
1481 0 : if ((val>=0xFE70) && (val<=0xFE74)) return AL; //# Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
1482 0 : if (val==0x0000FE75) return AL; //# Cn <reserved-FE75>
1483 0 : if ((val>=0xFE76) && (val<=0xFEFC)) return AL; //# Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
1484 0 : if ((val>=0xFEFD) && (val<=0xFEFE)) return AL; //# Cn [2] <reserved-FEFD>..<reserved-FEFE>
1485 0 : if (val==0x0000202D) return LRO; //# Cf LEFT-TO-RIGHT OVERRIDE
1486 0 : if (val==0x0000202E) return RLO; //# Cf RIGHT-TO-LEFT OVERRIDE
1487 0 : if (val==0x0000202A) return LRE; //# Cf LEFT-TO-RIGHT EMBEDDING
1488 0 : if (val==0x0000202B) return RLE; //# Cf RIGHT-TO-LEFT EMBEDDING
1489 0 : if (val==0x0000202C) return PDF; //# Cf POP DIRECTIONAL FORMATTING
1490 0 : return L;
1491 : }
|