1 /* ====================================================================
2 * Copyright (c) 2004-2013 Open Source Applications Foundation.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included
12 * in all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20 * DEALINGS IN THE SOFTWARE.
21 * ====================================================================
22 */
23
24 #include <stdlib.h>
25 #include <string.h>
26
27 #include "common.h"
28 #include "structmember.h"
29
30 #include "bases.h"
31 #include "script.h"
32 #include "macros.h"
33
34 DECLARE_CONSTANTS_TYPE(UScriptCode);
35 #if U_ICU_VERSION_HEX >= VERSION_HEX(51, 0, 0)
36 DECLARE_CONSTANTS_TYPE(UScriptUsage);
37 #endif
38
39 /* Script */
40
41 class t_script : public _wrapper {
42 public:
43 UNone *object;
44 UScriptCode code;
45 };
46
47 static int t_script_init(t_script *self, PyObject *args, PyObject *kwds);
48 static PyObject *t_script_getName(t_script *self);
49 static PyObject *t_script_getShortName(t_script *self);
50 static PyObject *t_script_getScriptCode(t_script *self);
51 static PyObject *t_script_getCode(PyTypeObject *type, PyObject *arg);
52 static PyObject *t_script_getScript(PyTypeObject *type, PyObject *arg);
53 #if U_ICU_VERSION_HEX >= VERSION_HEX(49, 0, 0)
54 static PyObject *t_script_hasScript(PyTypeObject *type, PyObject *args);
55 static PyObject *t_script_getScriptExtensions(PyTypeObject *type, PyObject *arg);
56 #endif
57 #if U_ICU_VERSION_HEX >= VERSION_HEX(51, 0, 0)
58 static PyObject *t_script_isRightToLeft(t_script *self);
59 static PyObject *t_script_isCased(t_script *self);
60 static PyObject *t_script_breaksBetweenLetters(t_script *self);
61 static PyObject *t_script_getSampleString(t_script *self);
62 static PyObject *t_script_getUsage(t_script *self);
63 #endif
64
65 static PyMethodDef t_script_methods[] = {
66 DECLARE_METHOD(t_script, getName, METH_NOARGS),
67 DECLARE_METHOD(t_script, getShortName, METH_NOARGS),
68 DECLARE_METHOD(t_script, getScriptCode, METH_NOARGS),
69 DECLARE_METHOD(t_script, getCode, METH_O | METH_CLASS),
70 DECLARE_METHOD(t_script, getScript, METH_O | METH_CLASS),
71 #if U_ICU_VERSION_HEX >= VERSION_HEX(49, 0, 0)
72 DECLARE_METHOD(t_script, hasScript, METH_VARARGS | METH_CLASS),
73 DECLARE_METHOD(t_script, getScriptExtensions, METH_O | METH_CLASS),
74 #endif
75 #if U_ICU_VERSION_HEX >= VERSION_HEX(51, 0, 0)
76 DECLARE_METHOD(t_script, isRightToLeft, METH_NOARGS),
77 DECLARE_METHOD(t_script, isCased, METH_NOARGS),
78 DECLARE_METHOD(t_script, breaksBetweenLetters, METH_NOARGS),
79 DECLARE_METHOD(t_script, getSampleString, METH_NOARGS),
80 DECLARE_METHOD(t_script, getUsage, METH_NOARGS),
81 #endif
82 { NULL, NULL, 0, NULL }
83 };
84
t_script_dealloc(t_script * self)85 static void t_script_dealloc(t_script *self)
86 {
87 Py_TYPE(self)->tp_free((PyObject *) self);
88 }
89
90 DECLARE_STRUCT(Script, t_script, UNone, t_script_init, t_script_dealloc);
91
92
93 /* Script */
94
t_script_init(t_script * self,PyObject * args,PyObject * kwds)95 static int t_script_init(t_script *self, PyObject *args, PyObject *kwds)
96 {
97 UScriptCode code;
98
99 switch (PyTuple_Size(args)) {
100 case 1:
101 if (!parseArgs(args, "i", &code))
102 {
103 if (uscript_getName(code) == NULL)
104 {
105 PyErr_Format(PyExc_ValueError, "Invalid script code: %d",
106 code);
107 return -1;
108 }
109 self->object = NULL; /* there is no ICU struct for this */
110 self->code = code;
111 self->flags = T_OWNED;
112
113 return 0;
114 }
115 PyErr_SetArgsError((PyObject *) self, "__init__", args);
116 return -1;
117 default:
118 PyErr_SetArgsError((PyObject *) self, "__init__", args);
119 return -1;
120 }
121 }
122
t_script_getName(t_script * self)123 static PyObject *t_script_getName(t_script *self)
124 {
125 return PyString_FromString(uscript_getName(self->code));
126 }
127
t_script_getShortName(t_script * self)128 static PyObject *t_script_getShortName(t_script *self)
129 {
130 return PyString_FromString(uscript_getShortName(self->code));
131 }
132
t_script_getScriptCode(t_script * self)133 static PyObject *t_script_getScriptCode(t_script *self)
134 {
135 return PyInt_FromLong(self->code);
136 }
137
t_script_getCode(PyTypeObject * type,PyObject * arg)138 static PyObject *t_script_getCode(PyTypeObject *type, PyObject *arg)
139 {
140 charsArg name;
141
142 if (!parseArg(arg, "n", &name))
143 {
144 UScriptCode codes[256];
145 int count;
146
147 STATUS_CALL(count = uscript_getCode(
148 name, codes, sizeof(codes) / sizeof(UScriptCode), &status));
149
150 PyObject *tuple = PyTuple_New(count);
151
152 for (int i = 0; i < count; ++i)
153 PyTuple_SET_ITEM(tuple, i, PyInt_FromLong(codes[i]));
154
155 return tuple;
156 }
157
158 return PyErr_SetArgsError((PyObject *) type, "getCode", arg);
159 }
160
t_script_getScript(PyTypeObject * type,PyObject * arg)161 static PyObject *t_script_getScript(PyTypeObject *type, PyObject *arg)
162 {
163 UnicodeString *u, _u;
164 int cp;
165
166 if (!parseArg(arg, "S", &u, &_u))
167 {
168 UScriptCode code;
169
170 if (u->countChar32() != 1)
171 {
172 PyObject *tuple = Py_BuildValue(
173 "(sO)", "string must contain only one codepoint", arg);
174
175 PyErr_SetObject(PyExc_ValueError, tuple);
176 Py_DECREF(tuple);
177
178 return NULL;
179 }
180
181 STATUS_CALL(code = uscript_getScript(u->char32At(0), &status));
182
183 return PyObject_CallFunction((PyObject *) type, (char *) "i", code);
184 }
185 if (!parseArg(arg, "i", &cp))
186 {
187 UScriptCode code;
188
189 STATUS_CALL(code = uscript_getScript((UChar32) cp, &status));
190
191 return PyObject_CallFunction((PyObject *) type, (char *) "i", code);
192 }
193
194 return PyErr_SetArgsError((PyObject *) type, "getScript", arg);
195 }
196
197 #if U_ICU_VERSION_HEX >= VERSION_HEX(49, 0, 0)
t_script_hasScript(PyTypeObject * type,PyObject * args)198 static PyObject *t_script_hasScript(PyTypeObject *type, PyObject *args)
199 {
200 UnicodeString *u, _u;
201 UScriptCode code;
202 int cp;
203
204 switch (PyTuple_Size(args)) {
205 case 2:
206 if (!parseArgs(args, "Si", &u, &_u, &code))
207 {
208 if (u->countChar32() != 1)
209 {
210 PyObject *tuple = Py_BuildValue(
211 "(sO)", "string must contain only one codepoint",
212 PyTuple_GET_ITEM(args, 0));
213
214 PyErr_SetObject(PyExc_ValueError, tuple);
215 Py_DECREF(tuple);
216
217 return NULL;
218 }
219
220 if (uscript_hasScript(u->char32At(0), code))
221 Py_RETURN_TRUE;
222
223 Py_RETURN_FALSE;
224 }
225 if (!parseArgs(args, "ii", &cp, &code))
226 {
227 if (uscript_hasScript((UChar32) cp, code))
228 Py_RETURN_TRUE;
229
230 Py_RETURN_FALSE;
231 }
232 break;
233 }
234
235 return PyErr_SetArgsError((PyObject *) type, "hasScript", args);
236 }
237
t_script_getScriptExtensions(PyTypeObject * type,PyObject * arg)238 static PyObject *t_script_getScriptExtensions(PyTypeObject *type, PyObject *arg)
239 {
240 UnicodeString *u, _u;
241 int cp;
242
243 if (!parseArg(arg, "S", &u, &_u))
244 {
245 if (u->countChar32() != 1)
246 {
247 PyObject *tuple = Py_BuildValue(
248 "(sO)", "string must contain only one codepoint", arg);
249
250 PyErr_SetObject(PyExc_ValueError, tuple);
251 Py_DECREF(tuple);
252
253 return NULL;
254 }
255
256 UScriptCode codes[256];
257 int count;
258
259 STATUS_CALL(count = uscript_getScriptExtensions(
260 u->char32At(0), codes, sizeof(codes) / sizeof(UScriptCode),
261 &status));
262
263 PyObject *tuple = PyTuple_New(count);
264
265 for (int i = 0; i < count; ++i)
266 PyTuple_SET_ITEM(tuple, i, PyInt_FromLong(codes[i]));
267
268 return tuple;
269 }
270 if (!parseArg(arg, "i", &cp))
271 {
272 UScriptCode codes[256];
273 int count;
274
275 STATUS_CALL(count = uscript_getScriptExtensions(
276 (UChar32) cp, codes, sizeof(codes) / sizeof(UScriptCode),
277 &status));
278
279 PyObject *tuple = PyTuple_New(count);
280
281 for (int i = 0; i < count; ++i)
282 PyTuple_SET_ITEM(tuple, i, PyInt_FromLong(codes[i]));
283
284 return tuple;
285 }
286
287 return PyErr_SetArgsError((PyObject *) type, "getScriptExtensions", arg);
288 }
289 #endif
290
291 #if U_ICU_VERSION_HEX >= VERSION_HEX(51, 0, 0)
t_script_isRightToLeft(t_script * self)292 static PyObject *t_script_isRightToLeft(t_script *self)
293 {
294 if (uscript_isRightToLeft(self->code))
295 Py_RETURN_TRUE;
296
297 Py_RETURN_FALSE;
298 }
299
t_script_isCased(t_script * self)300 static PyObject *t_script_isCased(t_script *self)
301 {
302 if (uscript_isCased(self->code))
303 Py_RETURN_TRUE;
304
305 Py_RETURN_FALSE;
306 }
307
t_script_breaksBetweenLetters(t_script * self)308 static PyObject *t_script_breaksBetweenLetters(t_script *self)
309 {
310 if (uscript_breaksBetweenLetters(self->code))
311 Py_RETURN_TRUE;
312
313 Py_RETURN_FALSE;
314 }
315
t_script_getSampleString(t_script * self)316 static PyObject *t_script_getSampleString(t_script *self)
317 {
318 UChar dest[32];
319 int32_t count;
320
321 STATUS_CALL(count = uscript_getSampleString(self->code, dest, sizeof(dest),
322 &status));
323
324 return PyUnicode_FromUnicodeString(dest, count);
325 }
326
t_script_getUsage(t_script * self)327 static PyObject *t_script_getUsage(t_script *self)
328 {
329 return PyInt_FromLong(uscript_getUsage(self->code));
330 }
331 #endif
332
333
t_script__getCode(t_script * self,void * data)334 static PyObject *t_script__getCode(t_script *self, void *data)
335 {
336 return PyInt_FromLong(self->code);
337 }
338
339 static PyGetSetDef t_script_properties[] = {
340 { (char *) "code", (getter) t_script__getCode, NULL, (char *) "", NULL },
341 { NULL, NULL, NULL, NULL, NULL }
342 };
343
344
_init_script(PyObject * m)345 void _init_script(PyObject *m)
346 {
347 ScriptType_.tp_getset = t_script_properties;
348
349 INSTALL_CONSTANTS_TYPE(UScriptCode, m);
350 #if U_ICU_VERSION_HEX >= VERSION_HEX(51, 0, 0)
351 INSTALL_CONSTANTS_TYPE(UScriptUsage, m);
352 #endif
353 INSTALL_STRUCT(Script, m);
354
355 INSTALL_ENUM(UScriptCode, "COMMON", USCRIPT_COMMON);
356 INSTALL_ENUM(UScriptCode, "INHERITED", USCRIPT_INHERITED);
357 INSTALL_ENUM(UScriptCode, "ARABIC", USCRIPT_ARABIC);
358 INSTALL_ENUM(UScriptCode, "ARMENIAN", USCRIPT_ARMENIAN);
359 INSTALL_ENUM(UScriptCode, "BENGALI", USCRIPT_BENGALI);
360 INSTALL_ENUM(UScriptCode, "BOPOMOFO", USCRIPT_BOPOMOFO);
361 INSTALL_ENUM(UScriptCode, "CHEROKEE", USCRIPT_CHEROKEE);
362 INSTALL_ENUM(UScriptCode, "COPTIC", USCRIPT_COPTIC);
363 INSTALL_ENUM(UScriptCode, "CYRILLIC", USCRIPT_CYRILLIC);
364 INSTALL_ENUM(UScriptCode, "DESERET", USCRIPT_DESERET);
365 INSTALL_ENUM(UScriptCode, "DEVANAGARI", USCRIPT_DEVANAGARI);
366 INSTALL_ENUM(UScriptCode, "ETHIOPIC", USCRIPT_ETHIOPIC);
367 INSTALL_ENUM(UScriptCode, "GEORGIAN", USCRIPT_GEORGIAN);
368 INSTALL_ENUM(UScriptCode, "GOTHIC", USCRIPT_GOTHIC);
369 INSTALL_ENUM(UScriptCode, "GREEK", USCRIPT_GREEK);
370 INSTALL_ENUM(UScriptCode, "GUJARATI", USCRIPT_GUJARATI);
371 INSTALL_ENUM(UScriptCode, "GURMUKHI", USCRIPT_GURMUKHI);
372 INSTALL_ENUM(UScriptCode, "HAN", USCRIPT_HAN);
373 INSTALL_ENUM(UScriptCode, "HANGUL", USCRIPT_HANGUL);
374 INSTALL_ENUM(UScriptCode, "HEBREW", USCRIPT_HEBREW);
375 INSTALL_ENUM(UScriptCode, "HIRAGANA", USCRIPT_HIRAGANA);
376 INSTALL_ENUM(UScriptCode, "KANNADA", USCRIPT_KANNADA);
377 INSTALL_ENUM(UScriptCode, "KATAKANA", USCRIPT_KATAKANA);
378 INSTALL_ENUM(UScriptCode, "KHMER", USCRIPT_KHMER);
379 INSTALL_ENUM(UScriptCode, "LAO", USCRIPT_LAO);
380 INSTALL_ENUM(UScriptCode, "LATIN", USCRIPT_LATIN);
381 INSTALL_ENUM(UScriptCode, "MALAYALAM", USCRIPT_MALAYALAM);
382 INSTALL_ENUM(UScriptCode, "MONGOLIAN", USCRIPT_MONGOLIAN);
383 INSTALL_ENUM(UScriptCode, "MYANMAR", USCRIPT_MYANMAR);
384 INSTALL_ENUM(UScriptCode, "OGHAM", USCRIPT_OGHAM);
385 INSTALL_ENUM(UScriptCode, "OLD_ITALIC", USCRIPT_OLD_ITALIC);
386 INSTALL_ENUM(UScriptCode, "ORIYA", USCRIPT_ORIYA);
387 INSTALL_ENUM(UScriptCode, "RUNIC", USCRIPT_RUNIC);
388 INSTALL_ENUM(UScriptCode, "SINHALA", USCRIPT_SINHALA);
389 INSTALL_ENUM(UScriptCode, "SYRIAC", USCRIPT_SYRIAC);
390 INSTALL_ENUM(UScriptCode, "TAMIL", USCRIPT_TAMIL);
391 INSTALL_ENUM(UScriptCode, "TELUGU", USCRIPT_TELUGU);
392 INSTALL_ENUM(UScriptCode, "THAANA", USCRIPT_THAANA);
393 INSTALL_ENUM(UScriptCode, "THAI", USCRIPT_THAI);
394 INSTALL_ENUM(UScriptCode, "TIBETAN", USCRIPT_TIBETAN);
395 INSTALL_ENUM(UScriptCode, "CANADIAN_ABORIGINAL", USCRIPT_CANADIAN_ABORIGINAL);
396 INSTALL_ENUM(UScriptCode, "UCAS", USCRIPT_UCAS);
397 INSTALL_ENUM(UScriptCode, "YI", USCRIPT_YI);
398 INSTALL_ENUM(UScriptCode, "TAGALOG", USCRIPT_TAGALOG);
399 INSTALL_ENUM(UScriptCode, "HANUNOO", USCRIPT_HANUNOO);
400 INSTALL_ENUM(UScriptCode, "BUHID", USCRIPT_BUHID);
401 INSTALL_ENUM(UScriptCode, "TAGBANWA", USCRIPT_TAGBANWA);
402 INSTALL_ENUM(UScriptCode, "BRAILLE", USCRIPT_BRAILLE);
403 INSTALL_ENUM(UScriptCode, "CYPRIOT", USCRIPT_CYPRIOT);
404 INSTALL_ENUM(UScriptCode, "LIMBU", USCRIPT_LIMBU);
405 INSTALL_ENUM(UScriptCode, "LINEAR_B", USCRIPT_LINEAR_B);
406 INSTALL_ENUM(UScriptCode, "OSMANYA", USCRIPT_OSMANYA);
407 INSTALL_ENUM(UScriptCode, "SHAVIAN", USCRIPT_SHAVIAN);
408 INSTALL_ENUM(UScriptCode, "TAI_LE", USCRIPT_TAI_LE);
409 INSTALL_ENUM(UScriptCode, "UGARITIC", USCRIPT_UGARITIC);
410 INSTALL_ENUM(UScriptCode, "KATAKANA_OR_HIRAGANA", USCRIPT_KATAKANA_OR_HIRAGANA);
411 INSTALL_ENUM(UScriptCode, "BUGINESE", USCRIPT_BUGINESE);
412 INSTALL_ENUM(UScriptCode, "GLAGOLITIC", USCRIPT_GLAGOLITIC);
413 INSTALL_ENUM(UScriptCode, "KHAROSHTHI", USCRIPT_KHAROSHTHI);
414 INSTALL_ENUM(UScriptCode, "SYLOTI_NAGRI", USCRIPT_SYLOTI_NAGRI);
415 INSTALL_ENUM(UScriptCode, "NEW_TAI_LUE", USCRIPT_NEW_TAI_LUE);
416 INSTALL_ENUM(UScriptCode, "TIFINAGH", USCRIPT_TIFINAGH);
417 INSTALL_ENUM(UScriptCode, "OLD_PERSIAN", USCRIPT_OLD_PERSIAN);
418 INSTALL_ENUM(UScriptCode, "BALINESE", USCRIPT_BALINESE);
419 INSTALL_ENUM(UScriptCode, "BATAK", USCRIPT_BATAK);
420 INSTALL_ENUM(UScriptCode, "BLISSYMBOLS", USCRIPT_BLISSYMBOLS);
421 INSTALL_ENUM(UScriptCode, "BRAHMI", USCRIPT_BRAHMI);
422 INSTALL_ENUM(UScriptCode, "CHAM", USCRIPT_CHAM);
423 INSTALL_ENUM(UScriptCode, "CIRTH", USCRIPT_CIRTH);
424 INSTALL_ENUM(UScriptCode, "OLD_CHURCH_SLAVONIC_CYRILLIC", USCRIPT_OLD_CHURCH_SLAVONIC_CYRILLIC);
425 INSTALL_ENUM(UScriptCode, "DEMOTIC_EGYPTIAN", USCRIPT_DEMOTIC_EGYPTIAN);
426 INSTALL_ENUM(UScriptCode, "HIERATIC_EGYPTIAN", USCRIPT_HIERATIC_EGYPTIAN);
427 INSTALL_ENUM(UScriptCode, "EGYPTIAN_HIEROGLYPHS", USCRIPT_EGYPTIAN_HIEROGLYPHS);
428 INSTALL_ENUM(UScriptCode, "KHUTSURI", USCRIPT_KHUTSURI);
429 INSTALL_ENUM(UScriptCode, "SIMPLIFIED_HAN", USCRIPT_SIMPLIFIED_HAN);
430 INSTALL_ENUM(UScriptCode, "TRADITIONAL_HAN", USCRIPT_TRADITIONAL_HAN);
431 INSTALL_ENUM(UScriptCode, "PAHAWH_HMONG", USCRIPT_PAHAWH_HMONG);
432 INSTALL_ENUM(UScriptCode, "OLD_HUNGARIAN", USCRIPT_OLD_HUNGARIAN);
433 INSTALL_ENUM(UScriptCode, "HARAPPAN_INDUS", USCRIPT_HARAPPAN_INDUS);
434 INSTALL_ENUM(UScriptCode, "JAVANESE", USCRIPT_JAVANESE);
435 INSTALL_ENUM(UScriptCode, "KAYAH_LI", USCRIPT_KAYAH_LI);
436 INSTALL_ENUM(UScriptCode, "LATIN_FRAKTUR", USCRIPT_LATIN_FRAKTUR);
437 INSTALL_ENUM(UScriptCode, "LATIN_GAELIC", USCRIPT_LATIN_GAELIC);
438 INSTALL_ENUM(UScriptCode, "LEPCHA", USCRIPT_LEPCHA);
439 INSTALL_ENUM(UScriptCode, "LINEAR_A", USCRIPT_LINEAR_A);
440 INSTALL_ENUM(UScriptCode, "MANDAEAN", USCRIPT_MANDAEAN);
441 INSTALL_ENUM(UScriptCode, "MEROITIC", USCRIPT_MEROITIC);
442 INSTALL_ENUM(UScriptCode, "ORKHON", USCRIPT_ORKHON);
443 INSTALL_ENUM(UScriptCode, "OLD_PERMIC", USCRIPT_OLD_PERMIC);
444 INSTALL_ENUM(UScriptCode, "PHAGS_PA", USCRIPT_PHAGS_PA);
445 INSTALL_ENUM(UScriptCode, "PHOENICIAN", USCRIPT_PHOENICIAN);
446 INSTALL_ENUM(UScriptCode, "PHONETIC_POLLARD", USCRIPT_PHONETIC_POLLARD);
447 INSTALL_ENUM(UScriptCode, "RONGORONGO", USCRIPT_RONGORONGO);
448 INSTALL_ENUM(UScriptCode, "SARATI", USCRIPT_SARATI);
449 INSTALL_ENUM(UScriptCode, "ESTRANGELO_SYRIAC", USCRIPT_ESTRANGELO_SYRIAC);
450 INSTALL_ENUM(UScriptCode, "WESTERN_SYRIAC", USCRIPT_WESTERN_SYRIAC);
451 INSTALL_ENUM(UScriptCode, "EASTERN_SYRIAC", USCRIPT_EASTERN_SYRIAC);
452 INSTALL_ENUM(UScriptCode, "TENGWAR", USCRIPT_TENGWAR);
453 INSTALL_ENUM(UScriptCode, "VAI", USCRIPT_VAI);
454 INSTALL_ENUM(UScriptCode, "VISIBLE_SPEECH", USCRIPT_VISIBLE_SPEECH);
455 INSTALL_ENUM(UScriptCode, "CUNEIFORM", USCRIPT_CUNEIFORM);
456 INSTALL_ENUM(UScriptCode, "UNWRITTEN_LANGUAGES", USCRIPT_UNWRITTEN_LANGUAGES);
457 INSTALL_ENUM(UScriptCode, "UNKNOWN", USCRIPT_UNKNOWN);
458 INSTALL_ENUM(UScriptCode, "CARIAN", USCRIPT_CARIAN);
459 INSTALL_ENUM(UScriptCode, "JAPANESE", USCRIPT_JAPANESE);
460 INSTALL_ENUM(UScriptCode, "LANNA", USCRIPT_LANNA);
461 INSTALL_ENUM(UScriptCode, "LYCIAN", USCRIPT_LYCIAN);
462 INSTALL_ENUM(UScriptCode, "LYDIAN", USCRIPT_LYDIAN);
463 INSTALL_ENUM(UScriptCode, "OL_CHIKI", USCRIPT_OL_CHIKI);
464 INSTALL_ENUM(UScriptCode, "REJANG", USCRIPT_REJANG);
465 INSTALL_ENUM(UScriptCode, "SAURASHTRA", USCRIPT_SAURASHTRA);
466 INSTALL_ENUM(UScriptCode, "SIGN_WRITING", USCRIPT_SIGN_WRITING);
467 INSTALL_ENUM(UScriptCode, "SUNDANESE", USCRIPT_SUNDANESE);
468 INSTALL_ENUM(UScriptCode, "MOON", USCRIPT_MOON);
469 INSTALL_ENUM(UScriptCode, "MEITEI_MAYEK", USCRIPT_MEITEI_MAYEK);
470
471 #if U_ICU_VERSION_HEX >= 0x04000000
472 INSTALL_ENUM(UScriptCode, "IMPERIAL_ARAMAIC", USCRIPT_IMPERIAL_ARAMAIC);
473 INSTALL_ENUM(UScriptCode, "AVESTAN", USCRIPT_AVESTAN);
474 INSTALL_ENUM(UScriptCode, "CHAKMA", USCRIPT_CHAKMA);
475 INSTALL_ENUM(UScriptCode, "KOREAN", USCRIPT_KOREAN);
476 INSTALL_ENUM(UScriptCode, "KAITHI", USCRIPT_KAITHI);
477 INSTALL_ENUM(UScriptCode, "MANICHAEAN", USCRIPT_MANICHAEAN);
478 INSTALL_ENUM(UScriptCode, "INSCRIPTIONAL_PAHLAVI", USCRIPT_INSCRIPTIONAL_PAHLAVI);
479 INSTALL_ENUM(UScriptCode, "PSALTER_PAHLAVI", USCRIPT_PSALTER_PAHLAVI);
480 INSTALL_ENUM(UScriptCode, "BOOK_PAHLAVI", USCRIPT_BOOK_PAHLAVI);
481 INSTALL_ENUM(UScriptCode, "INSCRIPTIONAL_PARTHIAN", USCRIPT_INSCRIPTIONAL_PARTHIAN);
482 INSTALL_ENUM(UScriptCode, "SAMARITAN", USCRIPT_SAMARITAN);
483 INSTALL_ENUM(UScriptCode, "TAI_VIET", USCRIPT_TAI_VIET);
484 INSTALL_ENUM(UScriptCode, "MATHEMATICAL_NOTATION", USCRIPT_MATHEMATICAL_NOTATION);
485 INSTALL_ENUM(UScriptCode, "SYMBOLS", USCRIPT_SYMBOLS);
486 #endif
487
488 #if U_ICU_VERSION_HEX >= 0x04040000
489 INSTALL_ENUM(UScriptCode, "BAMUM", USCRIPT_BAMUM);
490 INSTALL_ENUM(UScriptCode, "LISU", USCRIPT_LISU);
491 INSTALL_ENUM(UScriptCode, "NAKHI_GEBA", USCRIPT_NAKHI_GEBA);
492 INSTALL_ENUM(UScriptCode, "OLD_SOUTH_ARABIAN", USCRIPT_OLD_SOUTH_ARABIAN);
493 #endif
494
495 #if U_ICU_VERSION_HEX >= 0x04060000
496 INSTALL_ENUM(UScriptCode, "BASSA_VAH", USCRIPT_BASSA_VAH);
497 INSTALL_ENUM(UScriptCode, "DUPLOYAN_SHORTAND", USCRIPT_DUPLOYAN_SHORTAND);
498 INSTALL_ENUM(UScriptCode, "ELBASAN", USCRIPT_ELBASAN);
499 INSTALL_ENUM(UScriptCode, "GRANTHA", USCRIPT_GRANTHA);
500 INSTALL_ENUM(UScriptCode, "KPELLE", USCRIPT_KPELLE);
501 INSTALL_ENUM(UScriptCode, "LOMA", USCRIPT_LOMA);
502 INSTALL_ENUM(UScriptCode, "MANDAIC", USCRIPT_MANDAIC);
503 INSTALL_ENUM(UScriptCode, "MENDE", USCRIPT_MENDE);
504 INSTALL_ENUM(UScriptCode, "MEROITIC_CURSIVE", USCRIPT_MEROITIC_CURSIVE);
505 INSTALL_ENUM(UScriptCode, "MEROITIC_HIEROGLYPHS", USCRIPT_MEROITIC_HIEROGLYPHS);
506 INSTALL_ENUM(UScriptCode, "OLD_NORTH_ARABIAN", USCRIPT_OLD_NORTH_ARABIAN);
507 INSTALL_ENUM(UScriptCode, "NABATAEAN", USCRIPT_NABATAEAN);
508 INSTALL_ENUM(UScriptCode, "PALMYRENE", USCRIPT_PALMYRENE);
509 INSTALL_ENUM(UScriptCode, "SINDHI", USCRIPT_SINDHI);
510 INSTALL_ENUM(UScriptCode, "WARANG_CITI", USCRIPT_WARANG_CITI);
511 #endif
512
513 #if U_ICU_VERSION_HEX >= 0x04080000
514 INSTALL_ENUM(UScriptCode, "AFAKA", USCRIPT_AFAKA);
515 INSTALL_ENUM(UScriptCode, "JURCHEN", USCRIPT_JURCHEN);
516 INSTALL_ENUM(UScriptCode, "MRO", USCRIPT_MRO);
517 INSTALL_ENUM(UScriptCode, "NUSHU", USCRIPT_NUSHU);
518 INSTALL_ENUM(UScriptCode, "SHARADA", USCRIPT_SHARADA);
519 INSTALL_ENUM(UScriptCode, "SORA_SOMPENG", USCRIPT_SORA_SOMPENG);
520 INSTALL_ENUM(UScriptCode, "TAKRI", USCRIPT_TAKRI);
521 INSTALL_ENUM(UScriptCode, "TANGUT", USCRIPT_TANGUT);
522 INSTALL_ENUM(UScriptCode, "WOLEAI", USCRIPT_WOLEAI);
523 #endif
524
525 #if U_ICU_VERSION_HEX >= VERSION_HEX(49, 0, 0)
526 INSTALL_ENUM(UScriptCode, "ANATOLIAN_HIEROGLYPHS", USCRIPT_ANATOLIAN_HIEROGLYPHS);
527 INSTALL_ENUM(UScriptCode, "KHOJKI", USCRIPT_KHOJKI);
528 INSTALL_ENUM(UScriptCode, "TIRHUTA", USCRIPT_TIRHUTA);
529 #endif
530 #if U_ICU_VERSION_HEX >= VERSION_HEX(52, 0, 0)
531 INSTALL_ENUM(UScriptCode, "MIAO", USCRIPT_MIAO);
532 INSTALL_ENUM(UScriptCode, "CAUCASIAN_ALBANIAN", USCRIPT_CAUCASIAN_ALBANIAN);
533 INSTALL_ENUM(UScriptCode, "MAHAJANI", USCRIPT_MAHAJANI);
534 #endif
535 #if U_ICU_VERSION_HEX >= VERSION_HEX(54, 0, 0)
536 INSTALL_ENUM(UScriptCode, "DUPLOYAN", USCRIPT_DUPLOYAN);
537 INSTALL_ENUM(UScriptCode, "KHUDAWADI", USCRIPT_KHUDAWADI);
538 INSTALL_ENUM(UScriptCode, "AHOM", USCRIPT_AHOM);
539 INSTALL_ENUM(UScriptCode, "HATRAN", USCRIPT_HATRAN);
540 INSTALL_ENUM(UScriptCode, "MODI", USCRIPT_MODI);
541 INSTALL_ENUM(UScriptCode, "MULTANI", USCRIPT_MULTANI);
542 INSTALL_ENUM(UScriptCode, "PAU_CIN_HAU", USCRIPT_PAU_CIN_HAU);
543 INSTALL_ENUM(UScriptCode, "SIDDHAM", USCRIPT_SIDDHAM);
544 #endif
545 #if U_ICU_VERSION_HEX >= VERSION_HEX(58, 0, 0)
546 INSTALL_ENUM(UScriptCode, "ADLAM", USCRIPT_ADLAM);
547 INSTALL_ENUM(UScriptCode, "BHAIKSUKI", USCRIPT_BHAIKSUKI);
548 INSTALL_ENUM(UScriptCode, "MARCHEN", USCRIPT_MARCHEN);
549 INSTALL_ENUM(UScriptCode, "NEWA", USCRIPT_NEWA);
550 INSTALL_ENUM(UScriptCode, "OSAGE", USCRIPT_OSAGE);
551 INSTALL_ENUM(UScriptCode, "HAN_WITH_BOPOMOFO", USCRIPT_HAN_WITH_BOPOMOFO);
552 INSTALL_ENUM(UScriptCode, "JAMO", USCRIPT_JAMO);
553 INSTALL_ENUM(UScriptCode, "SYMBOLS_EMOJI", USCRIPT_SYMBOLS_EMOJI);
554 #endif
555 #if U_ICU_VERSION_HEX >= VERSION_HEX(60, 0, 0)
556 INSTALL_ENUM(UScriptCode, "MASARAM_GONDI", USCRIPT_MASARAM_GONDI);
557 INSTALL_ENUM(UScriptCode, "SOYOMBO", USCRIPT_SOYOMBO);
558 INSTALL_ENUM(UScriptCode, "ZANABAZAR_SQUARE", USCRIPT_ZANABAZAR_SQUARE);
559 #endif
560 #if U_ICU_VERSION_HEX >= VERSION_HEX(62, 0, 0)
561 INSTALL_ENUM(UScriptCode, "DOGRA", USCRIPT_DOGRA);
562 INSTALL_ENUM(UScriptCode, "GUNJALA_GONDI", USCRIPT_GUNJALA_GONDI);
563 INSTALL_ENUM(UScriptCode, "MAKASAR", USCRIPT_MAKASAR);
564 INSTALL_ENUM(UScriptCode, "MEDEFAIDRIN", USCRIPT_MEDEFAIDRIN);
565 INSTALL_ENUM(UScriptCode, "HANIFI_ROHINGYA", USCRIPT_HANIFI_ROHINGYA);
566 INSTALL_ENUM(UScriptCode, "SOGDIAN", USCRIPT_SOGDIAN);
567 INSTALL_ENUM(UScriptCode, "OLD_SOGDIAN", USCRIPT_OLD_SOGDIAN);
568 #endif
569 #if U_ICU_VERSION_HEX >= VERSION_HEX(64, 0, 0)
570 INSTALL_ENUM(UScriptCode, "ELYMAIC", USCRIPT_ELYMAIC);
571 INSTALL_ENUM(UScriptCode, "NANDINAGARI", USCRIPT_NANDINAGARI);
572 INSTALL_ENUM(UScriptCode, "NYIAKENG_PUACHUE_HMONG", USCRIPT_NYIAKENG_PUACHUE_HMONG);
573 INSTALL_ENUM(UScriptCode, "WANCHO", USCRIPT_WANCHO);
574 #endif
575
576 #if U_ICU_VERSION_HEX >= VERSION_HEX(51, 0, 0)
577 INSTALL_ENUM(UScriptUsage, "NOT_ENCODED", USCRIPT_USAGE_NOT_ENCODED);
578 INSTALL_ENUM(UScriptUsage, "UNKNOWN", USCRIPT_USAGE_UNKNOWN);
579 INSTALL_ENUM(UScriptUsage, "EXCLUDED", USCRIPT_USAGE_EXCLUDED);
580 INSTALL_ENUM(UScriptUsage, "LIMITED_USE", USCRIPT_USAGE_LIMITED_USE);
581 INSTALL_ENUM(UScriptUsage, "ASPIRATIONAL", USCRIPT_USAGE_ASPIRATIONAL);
582 INSTALL_ENUM(UScriptUsage, "RECOMMENDED", USCRIPT_USAGE_RECOMMENDED);
583 #endif
584 }
585