xref: /aosp_15_r20/external/icu/icu4c/source/common/uscript_props.cpp (revision 0e209d3975ff4a8c132096b14b0e9364a753506e)
1*0e209d39SAndroid Build Coastguard Worker // © 2016 and later: Unicode, Inc. and others.
2*0e209d39SAndroid Build Coastguard Worker // License & terms of use: http://www.unicode.org/copyright.html
3*0e209d39SAndroid Build Coastguard Worker /*
4*0e209d39SAndroid Build Coastguard Worker *******************************************************************************
5*0e209d39SAndroid Build Coastguard Worker *   Copyright (C) 2013-2016, International Business Machines
6*0e209d39SAndroid Build Coastguard Worker *   Corporation and others.  All Rights Reserved.
7*0e209d39SAndroid Build Coastguard Worker *******************************************************************************
8*0e209d39SAndroid Build Coastguard Worker *   file name:  uscript_props.cpp
9*0e209d39SAndroid Build Coastguard Worker *   encoding:   UTF-8
10*0e209d39SAndroid Build Coastguard Worker *   tab size:   8 (not used)
11*0e209d39SAndroid Build Coastguard Worker *   indentation:4
12*0e209d39SAndroid Build Coastguard Worker *
13*0e209d39SAndroid Build Coastguard Worker *   created on: 2013feb16
14*0e209d39SAndroid Build Coastguard Worker *   created by: Markus W. Scherer
15*0e209d39SAndroid Build Coastguard Worker */
16*0e209d39SAndroid Build Coastguard Worker 
17*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h"
18*0e209d39SAndroid Build Coastguard Worker #include "unicode/unistr.h"
19*0e209d39SAndroid Build Coastguard Worker #include "unicode/uscript.h"
20*0e209d39SAndroid Build Coastguard Worker #include "unicode/utf16.h"
21*0e209d39SAndroid Build Coastguard Worker #include "ustr_imp.h"
22*0e209d39SAndroid Build Coastguard Worker #include "cmemory.h"
23*0e209d39SAndroid Build Coastguard Worker 
24*0e209d39SAndroid Build Coastguard Worker namespace {
25*0e209d39SAndroid Build Coastguard Worker 
26*0e209d39SAndroid Build Coastguard Worker // Script metadata (script properties).
27*0e209d39SAndroid Build Coastguard Worker // See http://unicode.org/cldr/trac/browser/trunk/common/properties/scriptMetadata.txt
28*0e209d39SAndroid Build Coastguard Worker 
29*0e209d39SAndroid Build Coastguard Worker // 0 = NOT_ENCODED, no sample character, default false script properties.
30*0e209d39SAndroid Build Coastguard Worker // Bits 20.. 0: sample character
31*0e209d39SAndroid Build Coastguard Worker 
32*0e209d39SAndroid Build Coastguard Worker // Bits 23..21: usage
33*0e209d39SAndroid Build Coastguard Worker const int32_t UNKNOWN = 1 << 21;
34*0e209d39SAndroid Build Coastguard Worker const int32_t EXCLUSION = 2 << 21;
35*0e209d39SAndroid Build Coastguard Worker const int32_t LIMITED_USE = 3 << 21;
36*0e209d39SAndroid Build Coastguard Worker // st int32_t ASPIRATIONAL = 4 << 21; -- not used any more since Unicode 10
37*0e209d39SAndroid Build Coastguard Worker const int32_t RECOMMENDED = 5 << 21;
38*0e209d39SAndroid Build Coastguard Worker 
39*0e209d39SAndroid Build Coastguard Worker // Bits 31..24: Single-bit flags
40*0e209d39SAndroid Build Coastguard Worker const int32_t RTL = 1 << 24;
41*0e209d39SAndroid Build Coastguard Worker const int32_t LB_LETTERS = 1 << 25;
42*0e209d39SAndroid Build Coastguard Worker const int32_t CASED = 1 << 26;
43*0e209d39SAndroid Build Coastguard Worker 
44*0e209d39SAndroid Build Coastguard Worker const int32_t SCRIPT_PROPS[] = {
45*0e209d39SAndroid Build Coastguard Worker     // Begin copy-paste output from
46*0e209d39SAndroid Build Coastguard Worker     // tools/trunk/unicode/py/parsescriptmetadata.py
47*0e209d39SAndroid Build Coastguard Worker     0x0040 | RECOMMENDED,  // Zyyy
48*0e209d39SAndroid Build Coastguard Worker     0x0308 | RECOMMENDED,  // Zinh
49*0e209d39SAndroid Build Coastguard Worker     0x0628 | RECOMMENDED | RTL,  // Arab
50*0e209d39SAndroid Build Coastguard Worker     0x0531 | RECOMMENDED | CASED,  // Armn
51*0e209d39SAndroid Build Coastguard Worker     0x0995 | RECOMMENDED,  // Beng
52*0e209d39SAndroid Build Coastguard Worker     0x3105 | RECOMMENDED | LB_LETTERS,  // Bopo
53*0e209d39SAndroid Build Coastguard Worker     0x13C4 | LIMITED_USE | CASED,  // Cher
54*0e209d39SAndroid Build Coastguard Worker     0x03E2 | EXCLUSION | CASED,  // Copt
55*0e209d39SAndroid Build Coastguard Worker     0x042F | RECOMMENDED | CASED,  // Cyrl
56*0e209d39SAndroid Build Coastguard Worker     0x10414 | EXCLUSION | CASED,  // Dsrt
57*0e209d39SAndroid Build Coastguard Worker     0x0905 | RECOMMENDED,  // Deva
58*0e209d39SAndroid Build Coastguard Worker     0x12A0 | RECOMMENDED,  // Ethi
59*0e209d39SAndroid Build Coastguard Worker     0x10D3 | RECOMMENDED,  // Geor
60*0e209d39SAndroid Build Coastguard Worker     0x10330 | EXCLUSION,  // Goth
61*0e209d39SAndroid Build Coastguard Worker     0x03A9 | RECOMMENDED | CASED,  // Grek
62*0e209d39SAndroid Build Coastguard Worker     0x0A95 | RECOMMENDED,  // Gujr
63*0e209d39SAndroid Build Coastguard Worker     0x0A15 | RECOMMENDED,  // Guru
64*0e209d39SAndroid Build Coastguard Worker     0x5B57 | RECOMMENDED | LB_LETTERS,  // Hani
65*0e209d39SAndroid Build Coastguard Worker     0xAC00 | RECOMMENDED,  // Hang
66*0e209d39SAndroid Build Coastguard Worker     0x05D0 | RECOMMENDED | RTL,  // Hebr
67*0e209d39SAndroid Build Coastguard Worker     0x304B | RECOMMENDED | LB_LETTERS,  // Hira
68*0e209d39SAndroid Build Coastguard Worker     0x0C95 | RECOMMENDED,  // Knda
69*0e209d39SAndroid Build Coastguard Worker     0x30AB | RECOMMENDED | LB_LETTERS,  // Kana
70*0e209d39SAndroid Build Coastguard Worker     0x1780 | RECOMMENDED | LB_LETTERS,  // Khmr
71*0e209d39SAndroid Build Coastguard Worker     0x0EA5 | RECOMMENDED | LB_LETTERS,  // Laoo
72*0e209d39SAndroid Build Coastguard Worker     0x004C | RECOMMENDED | CASED,  // Latn
73*0e209d39SAndroid Build Coastguard Worker     0x0D15 | RECOMMENDED,  // Mlym
74*0e209d39SAndroid Build Coastguard Worker     0x1826 | EXCLUSION,  // Mong
75*0e209d39SAndroid Build Coastguard Worker     0x1000 | RECOMMENDED | LB_LETTERS,  // Mymr
76*0e209d39SAndroid Build Coastguard Worker     0x168F | EXCLUSION,  // Ogam
77*0e209d39SAndroid Build Coastguard Worker     0x10300 | EXCLUSION,  // Ital
78*0e209d39SAndroid Build Coastguard Worker     0x0B15 | RECOMMENDED,  // Orya
79*0e209d39SAndroid Build Coastguard Worker     0x16A0 | EXCLUSION,  // Runr
80*0e209d39SAndroid Build Coastguard Worker     0x0D85 | RECOMMENDED,  // Sinh
81*0e209d39SAndroid Build Coastguard Worker     0x0710 | LIMITED_USE | RTL,  // Syrc
82*0e209d39SAndroid Build Coastguard Worker     0x0B95 | RECOMMENDED,  // Taml
83*0e209d39SAndroid Build Coastguard Worker     0x0C15 | RECOMMENDED,  // Telu
84*0e209d39SAndroid Build Coastguard Worker     0x078C | RECOMMENDED | RTL,  // Thaa
85*0e209d39SAndroid Build Coastguard Worker     0x0E17 | RECOMMENDED | LB_LETTERS,  // Thai
86*0e209d39SAndroid Build Coastguard Worker     0x0F40 | RECOMMENDED,  // Tibt
87*0e209d39SAndroid Build Coastguard Worker     0x14C0 | LIMITED_USE,  // Cans
88*0e209d39SAndroid Build Coastguard Worker     0xA288 | LIMITED_USE | LB_LETTERS,  // Yiii
89*0e209d39SAndroid Build Coastguard Worker     0x1703 | EXCLUSION,  // Tglg
90*0e209d39SAndroid Build Coastguard Worker     0x1723 | EXCLUSION,  // Hano
91*0e209d39SAndroid Build Coastguard Worker     0x1743 | EXCLUSION,  // Buhd
92*0e209d39SAndroid Build Coastguard Worker     0x1763 | EXCLUSION,  // Tagb
93*0e209d39SAndroid Build Coastguard Worker     0x280E | UNKNOWN,  // Brai
94*0e209d39SAndroid Build Coastguard Worker     0x10800 | EXCLUSION | RTL,  // Cprt
95*0e209d39SAndroid Build Coastguard Worker     0x1900 | LIMITED_USE,  // Limb
96*0e209d39SAndroid Build Coastguard Worker     0x10000 | EXCLUSION,  // Linb
97*0e209d39SAndroid Build Coastguard Worker     0x10480 | EXCLUSION,  // Osma
98*0e209d39SAndroid Build Coastguard Worker     0x10450 | EXCLUSION,  // Shaw
99*0e209d39SAndroid Build Coastguard Worker     0x1950 | LIMITED_USE | LB_LETTERS,  // Tale
100*0e209d39SAndroid Build Coastguard Worker     0x10380 | EXCLUSION,  // Ugar
101*0e209d39SAndroid Build Coastguard Worker     0,
102*0e209d39SAndroid Build Coastguard Worker     0x1A00 | EXCLUSION,  // Bugi
103*0e209d39SAndroid Build Coastguard Worker     0x2C00 | EXCLUSION | CASED,  // Glag
104*0e209d39SAndroid Build Coastguard Worker     0x10A00 | EXCLUSION | RTL,  // Khar
105*0e209d39SAndroid Build Coastguard Worker     0xA800 | LIMITED_USE,  // Sylo
106*0e209d39SAndroid Build Coastguard Worker     0x1980 | LIMITED_USE | LB_LETTERS,  // Talu
107*0e209d39SAndroid Build Coastguard Worker     0x2D30 | LIMITED_USE,  // Tfng
108*0e209d39SAndroid Build Coastguard Worker     0x103A0 | EXCLUSION,  // Xpeo
109*0e209d39SAndroid Build Coastguard Worker     0x1B05 | LIMITED_USE,  // Bali
110*0e209d39SAndroid Build Coastguard Worker     0x1BC0 | LIMITED_USE,  // Batk
111*0e209d39SAndroid Build Coastguard Worker     0,
112*0e209d39SAndroid Build Coastguard Worker     0x11005 | EXCLUSION,  // Brah
113*0e209d39SAndroid Build Coastguard Worker     0xAA00 | LIMITED_USE,  // Cham
114*0e209d39SAndroid Build Coastguard Worker     0,
115*0e209d39SAndroid Build Coastguard Worker     0,
116*0e209d39SAndroid Build Coastguard Worker     0,
117*0e209d39SAndroid Build Coastguard Worker     0,
118*0e209d39SAndroid Build Coastguard Worker     0x13153 | EXCLUSION,  // Egyp
119*0e209d39SAndroid Build Coastguard Worker     0,
120*0e209d39SAndroid Build Coastguard Worker     0x5B57 | RECOMMENDED | LB_LETTERS,  // Hans
121*0e209d39SAndroid Build Coastguard Worker     0x5B57 | RECOMMENDED | LB_LETTERS,  // Hant
122*0e209d39SAndroid Build Coastguard Worker     0x16B1C | EXCLUSION,  // Hmng
123*0e209d39SAndroid Build Coastguard Worker     0x10CA1 | EXCLUSION | RTL | CASED,  // Hung
124*0e209d39SAndroid Build Coastguard Worker     0,
125*0e209d39SAndroid Build Coastguard Worker     0xA984 | LIMITED_USE,  // Java
126*0e209d39SAndroid Build Coastguard Worker     0xA90A | LIMITED_USE,  // Kali
127*0e209d39SAndroid Build Coastguard Worker     0,
128*0e209d39SAndroid Build Coastguard Worker     0,
129*0e209d39SAndroid Build Coastguard Worker     0x1C00 | LIMITED_USE,  // Lepc
130*0e209d39SAndroid Build Coastguard Worker     0x10647 | EXCLUSION,  // Lina
131*0e209d39SAndroid Build Coastguard Worker     0x0840 | LIMITED_USE | RTL,  // Mand
132*0e209d39SAndroid Build Coastguard Worker     0,
133*0e209d39SAndroid Build Coastguard Worker     0x10980 | EXCLUSION | RTL,  // Mero
134*0e209d39SAndroid Build Coastguard Worker     0x07CA | LIMITED_USE | RTL,  // Nkoo
135*0e209d39SAndroid Build Coastguard Worker     0x10C00 | EXCLUSION | RTL,  // Orkh
136*0e209d39SAndroid Build Coastguard Worker     0x1036B | EXCLUSION,  // Perm
137*0e209d39SAndroid Build Coastguard Worker     0xA840 | EXCLUSION,  // Phag
138*0e209d39SAndroid Build Coastguard Worker     0x10900 | EXCLUSION | RTL,  // Phnx
139*0e209d39SAndroid Build Coastguard Worker     0x16F00 | LIMITED_USE,  // Plrd
140*0e209d39SAndroid Build Coastguard Worker     0,
141*0e209d39SAndroid Build Coastguard Worker     0,
142*0e209d39SAndroid Build Coastguard Worker     0,
143*0e209d39SAndroid Build Coastguard Worker     0,
144*0e209d39SAndroid Build Coastguard Worker     0,
145*0e209d39SAndroid Build Coastguard Worker     0,
146*0e209d39SAndroid Build Coastguard Worker     0xA549 | LIMITED_USE,  // Vaii
147*0e209d39SAndroid Build Coastguard Worker     0,
148*0e209d39SAndroid Build Coastguard Worker     0x12000 | EXCLUSION,  // Xsux
149*0e209d39SAndroid Build Coastguard Worker     0,
150*0e209d39SAndroid Build Coastguard Worker     0xFDD0 | UNKNOWN,  // Zzzz
151*0e209d39SAndroid Build Coastguard Worker     0x102A0 | EXCLUSION,  // Cari
152*0e209d39SAndroid Build Coastguard Worker     0x304B | RECOMMENDED | LB_LETTERS,  // Jpan
153*0e209d39SAndroid Build Coastguard Worker     0x1A20 | LIMITED_USE | LB_LETTERS,  // Lana
154*0e209d39SAndroid Build Coastguard Worker     0x10280 | EXCLUSION,  // Lyci
155*0e209d39SAndroid Build Coastguard Worker     0x10920 | EXCLUSION | RTL,  // Lydi
156*0e209d39SAndroid Build Coastguard Worker     0x1C5A | LIMITED_USE,  // Olck
157*0e209d39SAndroid Build Coastguard Worker     0xA930 | EXCLUSION,  // Rjng
158*0e209d39SAndroid Build Coastguard Worker     0xA882 | LIMITED_USE,  // Saur
159*0e209d39SAndroid Build Coastguard Worker     0x1D850 | EXCLUSION,  // Sgnw
160*0e209d39SAndroid Build Coastguard Worker     0x1B83 | LIMITED_USE,  // Sund
161*0e209d39SAndroid Build Coastguard Worker     0,
162*0e209d39SAndroid Build Coastguard Worker     0xABC0 | LIMITED_USE,  // Mtei
163*0e209d39SAndroid Build Coastguard Worker     0x10840 | EXCLUSION | RTL,  // Armi
164*0e209d39SAndroid Build Coastguard Worker     0x10B00 | EXCLUSION | RTL,  // Avst
165*0e209d39SAndroid Build Coastguard Worker     0x11103 | LIMITED_USE,  // Cakm
166*0e209d39SAndroid Build Coastguard Worker     0xAC00 | RECOMMENDED,  // Kore
167*0e209d39SAndroid Build Coastguard Worker     0x11083 | EXCLUSION,  // Kthi
168*0e209d39SAndroid Build Coastguard Worker     0x10AD8 | EXCLUSION | RTL,  // Mani
169*0e209d39SAndroid Build Coastguard Worker     0x10B60 | EXCLUSION | RTL,  // Phli
170*0e209d39SAndroid Build Coastguard Worker     0x10B8F | EXCLUSION | RTL,  // Phlp
171*0e209d39SAndroid Build Coastguard Worker     0,
172*0e209d39SAndroid Build Coastguard Worker     0x10B40 | EXCLUSION | RTL,  // Prti
173*0e209d39SAndroid Build Coastguard Worker     0x0800 | EXCLUSION | RTL,  // Samr
174*0e209d39SAndroid Build Coastguard Worker     0xAA80 | LIMITED_USE | LB_LETTERS,  // Tavt
175*0e209d39SAndroid Build Coastguard Worker     0,
176*0e209d39SAndroid Build Coastguard Worker     0,
177*0e209d39SAndroid Build Coastguard Worker     0xA6A0 | LIMITED_USE,  // Bamu
178*0e209d39SAndroid Build Coastguard Worker     0xA4D0 | LIMITED_USE,  // Lisu
179*0e209d39SAndroid Build Coastguard Worker     0,
180*0e209d39SAndroid Build Coastguard Worker     0x10A60 | EXCLUSION | RTL,  // Sarb
181*0e209d39SAndroid Build Coastguard Worker     0x16AE6 | EXCLUSION,  // Bass
182*0e209d39SAndroid Build Coastguard Worker     0x1BC20 | EXCLUSION,  // Dupl
183*0e209d39SAndroid Build Coastguard Worker     0x10500 | EXCLUSION,  // Elba
184*0e209d39SAndroid Build Coastguard Worker     0x11315 | EXCLUSION,  // Gran
185*0e209d39SAndroid Build Coastguard Worker     0,
186*0e209d39SAndroid Build Coastguard Worker     0,
187*0e209d39SAndroid Build Coastguard Worker     0x1E802 | EXCLUSION | RTL,  // Mend
188*0e209d39SAndroid Build Coastguard Worker     0x109A0 | EXCLUSION | RTL,  // Merc
189*0e209d39SAndroid Build Coastguard Worker     0x10A95 | EXCLUSION | RTL,  // Narb
190*0e209d39SAndroid Build Coastguard Worker     0x10896 | EXCLUSION | RTL,  // Nbat
191*0e209d39SAndroid Build Coastguard Worker     0x10873 | EXCLUSION | RTL,  // Palm
192*0e209d39SAndroid Build Coastguard Worker     0x112BE | EXCLUSION,  // Sind
193*0e209d39SAndroid Build Coastguard Worker     0x118B4 | EXCLUSION | CASED,  // Wara
194*0e209d39SAndroid Build Coastguard Worker     0,
195*0e209d39SAndroid Build Coastguard Worker     0,
196*0e209d39SAndroid Build Coastguard Worker     0x16A4F | EXCLUSION,  // Mroo
197*0e209d39SAndroid Build Coastguard Worker     0x1B1C4 | EXCLUSION | LB_LETTERS,  // Nshu
198*0e209d39SAndroid Build Coastguard Worker     0x11183 | EXCLUSION,  // Shrd
199*0e209d39SAndroid Build Coastguard Worker     0x110D0 | EXCLUSION,  // Sora
200*0e209d39SAndroid Build Coastguard Worker     0x11680 | EXCLUSION,  // Takr
201*0e209d39SAndroid Build Coastguard Worker     0x18229 | EXCLUSION | LB_LETTERS,  // Tang
202*0e209d39SAndroid Build Coastguard Worker     0,
203*0e209d39SAndroid Build Coastguard Worker     0x14400 | EXCLUSION,  // Hluw
204*0e209d39SAndroid Build Coastguard Worker     0x11208 | EXCLUSION,  // Khoj
205*0e209d39SAndroid Build Coastguard Worker     0x11484 | EXCLUSION,  // Tirh
206*0e209d39SAndroid Build Coastguard Worker     0x10537 | EXCLUSION,  // Aghb
207*0e209d39SAndroid Build Coastguard Worker     0x11152 | EXCLUSION,  // Mahj
208*0e209d39SAndroid Build Coastguard Worker     0x11717 | EXCLUSION | LB_LETTERS,  // Ahom
209*0e209d39SAndroid Build Coastguard Worker     0x108F4 | EXCLUSION | RTL,  // Hatr
210*0e209d39SAndroid Build Coastguard Worker     0x1160E | EXCLUSION,  // Modi
211*0e209d39SAndroid Build Coastguard Worker     0x1128F | EXCLUSION,  // Mult
212*0e209d39SAndroid Build Coastguard Worker     0x11AC0 | EXCLUSION,  // Pauc
213*0e209d39SAndroid Build Coastguard Worker     0x1158E | EXCLUSION,  // Sidd
214*0e209d39SAndroid Build Coastguard Worker     0x1E909 | LIMITED_USE | RTL | CASED,  // Adlm
215*0e209d39SAndroid Build Coastguard Worker     0x11C0E | EXCLUSION,  // Bhks
216*0e209d39SAndroid Build Coastguard Worker     0x11C72 | EXCLUSION,  // Marc
217*0e209d39SAndroid Build Coastguard Worker     0x11412 | LIMITED_USE,  // Newa
218*0e209d39SAndroid Build Coastguard Worker     0x104B5 | LIMITED_USE | CASED,  // Osge
219*0e209d39SAndroid Build Coastguard Worker     0x5B57 | RECOMMENDED | LB_LETTERS,  // Hanb
220*0e209d39SAndroid Build Coastguard Worker     0x1112 | RECOMMENDED,  // Jamo
221*0e209d39SAndroid Build Coastguard Worker     0,
222*0e209d39SAndroid Build Coastguard Worker     0x11D10 | EXCLUSION,  // Gonm
223*0e209d39SAndroid Build Coastguard Worker     0x11A5C | EXCLUSION,  // Soyo
224*0e209d39SAndroid Build Coastguard Worker     0x11A0B | EXCLUSION,  // Zanb
225*0e209d39SAndroid Build Coastguard Worker     0x1180B | EXCLUSION,  // Dogr
226*0e209d39SAndroid Build Coastguard Worker     0x11D71 | LIMITED_USE,  // Gong
227*0e209d39SAndroid Build Coastguard Worker     0x11EE5 | EXCLUSION,  // Maka
228*0e209d39SAndroid Build Coastguard Worker     0x16E40 | EXCLUSION | CASED,  // Medf
229*0e209d39SAndroid Build Coastguard Worker     0x10D12 | LIMITED_USE | RTL,  // Rohg
230*0e209d39SAndroid Build Coastguard Worker     0x10F42 | EXCLUSION | RTL,  // Sogd
231*0e209d39SAndroid Build Coastguard Worker     0x10F19 | EXCLUSION | RTL,  // Sogo
232*0e209d39SAndroid Build Coastguard Worker     0x10FF1 | EXCLUSION | RTL,  // Elym
233*0e209d39SAndroid Build Coastguard Worker     0x1E108 | LIMITED_USE,  // Hmnp
234*0e209d39SAndroid Build Coastguard Worker     0x119CE | EXCLUSION,  // Nand
235*0e209d39SAndroid Build Coastguard Worker     0x1E2E1 | LIMITED_USE,  // Wcho
236*0e209d39SAndroid Build Coastguard Worker     0x10FBF | EXCLUSION | RTL,  // Chrs
237*0e209d39SAndroid Build Coastguard Worker     0x1190C | EXCLUSION,  // Diak
238*0e209d39SAndroid Build Coastguard Worker     0x18C65 | EXCLUSION | LB_LETTERS,  // Kits
239*0e209d39SAndroid Build Coastguard Worker     0x10E88 | EXCLUSION | RTL,  // Yezi
240*0e209d39SAndroid Build Coastguard Worker     0x12FE5 | EXCLUSION,  // Cpmn
241*0e209d39SAndroid Build Coastguard Worker     0x10F7C | EXCLUSION | RTL,  // Ougr
242*0e209d39SAndroid Build Coastguard Worker     0x16ABC | EXCLUSION,  // Tnsa
243*0e209d39SAndroid Build Coastguard Worker     0x1E290 | EXCLUSION,  // Toto
244*0e209d39SAndroid Build Coastguard Worker     0x10582 | EXCLUSION | CASED,  // Vith
245*0e209d39SAndroid Build Coastguard Worker     0x11F1B | EXCLUSION | LB_LETTERS,  // Kawi
246*0e209d39SAndroid Build Coastguard Worker     0x1E4E6 | EXCLUSION,  // Nagm
247*0e209d39SAndroid Build Coastguard Worker     // End copy-paste from parsescriptmetadata.py
248*0e209d39SAndroid Build Coastguard Worker };
249*0e209d39SAndroid Build Coastguard Worker 
getScriptProps(UScriptCode script)250*0e209d39SAndroid Build Coastguard Worker int32_t getScriptProps(UScriptCode script) {
251*0e209d39SAndroid Build Coastguard Worker     if (0 <= script && script < UPRV_LENGTHOF(SCRIPT_PROPS)) {
252*0e209d39SAndroid Build Coastguard Worker         return SCRIPT_PROPS[script];
253*0e209d39SAndroid Build Coastguard Worker     } else {
254*0e209d39SAndroid Build Coastguard Worker         return 0;
255*0e209d39SAndroid Build Coastguard Worker     }
256*0e209d39SAndroid Build Coastguard Worker }
257*0e209d39SAndroid Build Coastguard Worker 
258*0e209d39SAndroid Build Coastguard Worker }  // namespace
259*0e209d39SAndroid Build Coastguard Worker 
260*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
uscript_getSampleString(UScriptCode script,char16_t * dest,int32_t capacity,UErrorCode * pErrorCode)261*0e209d39SAndroid Build Coastguard Worker uscript_getSampleString(UScriptCode script, char16_t *dest, int32_t capacity, UErrorCode *pErrorCode) {
262*0e209d39SAndroid Build Coastguard Worker     if(U_FAILURE(*pErrorCode)) { return 0; }
263*0e209d39SAndroid Build Coastguard Worker     if(capacity < 0 || (capacity > 0 && dest == nullptr)) {
264*0e209d39SAndroid Build Coastguard Worker         *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR;
265*0e209d39SAndroid Build Coastguard Worker         return 0;
266*0e209d39SAndroid Build Coastguard Worker     }
267*0e209d39SAndroid Build Coastguard Worker     int32_t sampleChar = getScriptProps(script) & 0x1fffff;
268*0e209d39SAndroid Build Coastguard Worker     int32_t length;
269*0e209d39SAndroid Build Coastguard Worker     if(sampleChar == 0) {
270*0e209d39SAndroid Build Coastguard Worker         length = 0;
271*0e209d39SAndroid Build Coastguard Worker     } else {
272*0e209d39SAndroid Build Coastguard Worker         length = U16_LENGTH(sampleChar);
273*0e209d39SAndroid Build Coastguard Worker         if(length <= capacity) {
274*0e209d39SAndroid Build Coastguard Worker             int32_t i = 0;
275*0e209d39SAndroid Build Coastguard Worker             U16_APPEND_UNSAFE(dest, i, sampleChar);
276*0e209d39SAndroid Build Coastguard Worker         }
277*0e209d39SAndroid Build Coastguard Worker     }
278*0e209d39SAndroid Build Coastguard Worker     return u_terminateUChars(dest, capacity, length, pErrorCode);
279*0e209d39SAndroid Build Coastguard Worker }
280*0e209d39SAndroid Build Coastguard Worker 
281*0e209d39SAndroid Build Coastguard Worker U_COMMON_API icu::UnicodeString U_EXPORT2
uscript_getSampleUnicodeString(UScriptCode script)282*0e209d39SAndroid Build Coastguard Worker uscript_getSampleUnicodeString(UScriptCode script) {
283*0e209d39SAndroid Build Coastguard Worker     icu::UnicodeString sample;
284*0e209d39SAndroid Build Coastguard Worker     int32_t sampleChar = getScriptProps(script) & 0x1fffff;
285*0e209d39SAndroid Build Coastguard Worker     if(sampleChar != 0) {
286*0e209d39SAndroid Build Coastguard Worker         sample.append(sampleChar);
287*0e209d39SAndroid Build Coastguard Worker     }
288*0e209d39SAndroid Build Coastguard Worker     return sample;
289*0e209d39SAndroid Build Coastguard Worker }
290*0e209d39SAndroid Build Coastguard Worker 
291*0e209d39SAndroid Build Coastguard Worker U_CAPI UScriptUsage U_EXPORT2
uscript_getUsage(UScriptCode script)292*0e209d39SAndroid Build Coastguard Worker uscript_getUsage(UScriptCode script) {
293*0e209d39SAndroid Build Coastguard Worker     return (UScriptUsage)((getScriptProps(script) >> 21) & 7);
294*0e209d39SAndroid Build Coastguard Worker }
295*0e209d39SAndroid Build Coastguard Worker 
296*0e209d39SAndroid Build Coastguard Worker U_CAPI UBool U_EXPORT2
uscript_isRightToLeft(UScriptCode script)297*0e209d39SAndroid Build Coastguard Worker uscript_isRightToLeft(UScriptCode script) {
298*0e209d39SAndroid Build Coastguard Worker     return (getScriptProps(script) & RTL) != 0;
299*0e209d39SAndroid Build Coastguard Worker }
300*0e209d39SAndroid Build Coastguard Worker 
301*0e209d39SAndroid Build Coastguard Worker U_CAPI UBool U_EXPORT2
uscript_breaksBetweenLetters(UScriptCode script)302*0e209d39SAndroid Build Coastguard Worker uscript_breaksBetweenLetters(UScriptCode script) {
303*0e209d39SAndroid Build Coastguard Worker     return (getScriptProps(script) & LB_LETTERS) != 0;
304*0e209d39SAndroid Build Coastguard Worker }
305*0e209d39SAndroid Build Coastguard Worker 
306*0e209d39SAndroid Build Coastguard Worker U_CAPI UBool U_EXPORT2
uscript_isCased(UScriptCode script)307*0e209d39SAndroid Build Coastguard Worker uscript_isCased(UScriptCode script) {
308*0e209d39SAndroid Build Coastguard Worker     return (getScriptProps(script) & CASED) != 0;
309*0e209d39SAndroid Build Coastguard Worker }
310