1 /*
2  * Copyright (C) 2018-2019 Muhammad Tayyab Akram
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef _SB_PUBLIC_SCRIPT_H
18 #define _SB_PUBLIC_SCRIPT_H
19 
20 #include "SBBase.h"
21 
22 /**
23  * Constants that specify the script of a character.
24  */
25 enum {
26     SBScriptNil  = 0x00,
27 
28     SBScriptZINH = 0x01,    /**< Inherited */
29     SBScriptZYYY = 0x02,    /**< Common */
30     SBScriptZZZZ = 0x03,    /**< Unknown */
31 
32     /* Unicode 1.1  */
33     SBScriptARAB = 0x04,    /**< Arabic */
34     SBScriptARMN = 0x05,    /**< Armenian */
35     SBScriptBENG = 0x06,    /**< Bengali */
36     SBScriptBOPO = 0x07,    /**< Bopomofo */
37     SBScriptCYRL = 0x08,    /**< Cyrillic */
38     SBScriptDEVA = 0x09,    /**< Devanagari */
39     SBScriptGEOR = 0x0A,    /**< Georgian */
40     SBScriptGREK = 0x0B,    /**< Greek */
41     SBScriptGUJR = 0x0C,    /**< Gujarati */
42     SBScriptGURU = 0x0D,    /**< Gurmukhi */
43     SBScriptHANG = 0x0E,    /**< Hangul */
44     SBScriptHANI = 0x0F,    /**< Han */
45     SBScriptHEBR = 0x10,    /**< Hebrew */
46     SBScriptHIRA = 0x11,    /**< Hiragana */
47     SBScriptKANA = 0x12,    /**< Katakana */
48     SBScriptKNDA = 0x13,    /**< Kannada */
49     SBScriptLAOO = 0x14,    /**< Lao */
50     SBScriptLATN = 0x15,    /**< Latin */
51     SBScriptMLYM = 0x16,    /**< Malayalam */
52     SBScriptORYA = 0x17,    /**< Oriya */
53     SBScriptTAML = 0x18,    /**< Tamil */
54     SBScriptTELU = 0x19,    /**< Telugu */
55     SBScriptTHAI = 0x1A,    /**< Thai */
56 
57     /* Unicode 2.0 */
58     SBScriptTIBT = 0x1B,    /**< Tibetan */
59 
60     /* Unicode 3.0 */
61     SBScriptBRAI = 0x1C,    /**< Braille */
62     SBScriptCANS = 0x1D,    /**< Canadian_Aboriginal */
63     SBScriptCHER = 0x1E,    /**< Cherokee */
64     SBScriptETHI = 0x1F,    /**< Ethiopic */
65     SBScriptKHMR = 0x20,    /**< Khmer */
66     SBScriptMONG = 0x21,    /**< Mongolian */
67     SBScriptMYMR = 0x22,    /**< Myanmar */
68     SBScriptOGAM = 0x23,    /**< Ogham */
69     SBScriptRUNR = 0x24,    /**< Runic */
70     SBScriptSINH = 0x25,    /**< Sinhala */
71     SBScriptSYRC = 0x26,    /**< Syriac */
72     SBScriptTHAA = 0x27,    /**< Thaana */
73     SBScriptYIII = 0x28,    /**< Yi */
74 
75     /* Unicode 3.1 */
76     SBScriptDSRT = 0x29,    /**< Deseret */
77     SBScriptGOTH = 0x2A,    /**< Gothic */
78     SBScriptITAL = 0x2B,    /**< Old_Italic */
79 
80     /* Unicode 3.2 */
81     SBScriptBUHD = 0x2C,    /**< Buhid */
82     SBScriptHANO = 0x2D,    /**< Hanunoo */
83     SBScriptTAGB = 0x2E,    /**< Tagbanwa */
84     SBScriptTGLG = 0x2F,    /**< Tagalog */
85 
86     /* Unicode 4.0 */
87     SBScriptCPRT = 0x30,    /**< Cypriot */
88     SBScriptLIMB = 0x31,    /**< Limbu */
89     SBScriptLINB = 0x32,    /**< Linear_B */
90     SBScriptOSMA = 0x33,    /**< Osmanya */
91     SBScriptSHAW = 0x34,    /**< Shavian */
92     SBScriptTALE = 0x35,    /**< Tai_Le */
93     SBScriptUGAR = 0x36,    /**< Ugaritic */
94 
95     /* Unicode 4.1 */
96     SBScriptBUGI = 0x37,    /**< Buginese */
97     SBScriptCOPT = 0x38,    /**< Coptic */
98     SBScriptGLAG = 0x39,    /**< Glagolitic */
99     SBScriptKHAR = 0x3A,    /**< Kharoshthi */
100     SBScriptSYLO = 0x3B,    /**< Syloti_Nagri */
101     SBScriptTALU = 0x3C,    /**< New_Tai_Lue */
102     SBScriptTFNG = 0x3D,    /**< Tifinagh */
103     SBScriptXPEO = 0x3E,    /**< Old_Persian */
104 
105     /* Unicode 5.0 */
106     SBScriptBALI = 0x3F,    /**< Balinese */
107     SBScriptNKOO = 0x40,    /**< Nko */
108     SBScriptPHAG = 0x41,    /**< Phags_Pa */
109     SBScriptPHNX = 0x42,    /**< Phoenician */
110     SBScriptXSUX = 0x43,    /**< Cuneiform */
111 
112     /* Unicode 5.1 */
113     SBScriptCARI = 0x44,    /**< Carian */
114     SBScriptCHAM = 0x45,    /**< Cham */
115     SBScriptKALI = 0x46,    /**< Kayah_Li */
116     SBScriptLEPC = 0x47,    /**< Lepcha */
117     SBScriptLYCI = 0x48,    /**< Lycian */
118     SBScriptLYDI = 0x49,    /**< Lydian */
119     SBScriptOLCK = 0x4A,    /**< Ol_Chiki */
120     SBScriptRJNG = 0x4B,    /**< Rejang */
121     SBScriptSAUR = 0x4C,    /**< Saurashtra */
122     SBScriptSUND = 0x4D,    /**< Sundanese */
123     SBScriptVAII = 0x4E,    /**< Vai */
124 
125     /* Unicode 5.2 */
126     SBScriptARMI = 0x4F,    /**< Imperial_Aramaic */
127     SBScriptAVST = 0x50,    /**< Avestan */
128     SBScriptBAMU = 0x51,    /**< Bamum */
129     SBScriptEGYP = 0x52,    /**< Egyptian_Hieroglyphs */
130     SBScriptJAVA = 0x53,    /**< Javanese */
131     SBScriptKTHI = 0x54,    /**< Kaithi */
132     SBScriptLANA = 0x55,    /**< Tai_Tham */
133     SBScriptLISU = 0x56,    /**< Lisu */
134     SBScriptMTEI = 0x57,    /**< Meetei_Mayek */
135     SBScriptORKH = 0x58,    /**< Old_Turkic */
136     SBScriptPHLI = 0x59,    /**< Inscriptional_Pahlavi */
137     SBScriptPRTI = 0x5A,    /**< Inscriptional_Parthian */
138     SBScriptSAMR = 0x5B,    /**< Samaritan */
139     SBScriptSARB = 0x5C,    /**< Old_South_Arabian */
140     SBScriptTAVT = 0x5D,    /**< Tai_Viet */
141 
142     /* Unicode 6.0 */
143     SBScriptBATK = 0x5E,    /**< Batak */
144     SBScriptBRAH = 0x5F,    /**< Brahmi */
145     SBScriptMAND = 0x60,    /**< Mandaic */
146 
147     /* Unicode 6.1 */
148     SBScriptCAKM = 0x61,    /**< Chakma */
149     SBScriptMERC = 0x62,    /**< Meroitic_Cursive */
150     SBScriptMERO = 0x63,    /**< Meroitic_Hieroglyphs */
151     SBScriptPLRD = 0x64,    /**< Miao */
152     SBScriptSHRD = 0x65,    /**< Sharada */
153     SBScriptSORA = 0x66,    /**< Sora_Sompeng */
154     SBScriptTAKR = 0x67,    /**< Takri */
155 
156     /* Unicode 7.0 */
157     SBScriptAGHB = 0x68,    /**< Caucasian_Albanian */
158     SBScriptBASS = 0x69,    /**< Bassa_Vah */
159     SBScriptDUPL = 0x6A,    /**< Duployan */
160     SBScriptELBA = 0x6B,    /**< Elbasan */
161     SBScriptGRAN = 0x6C,    /**< Grantha */
162     SBScriptHMNG = 0x6D,    /**< Pahawh_Hmong */
163     SBScriptKHOJ = 0x6E,    /**< Khojki */
164     SBScriptLINA = 0x6F,    /**< Linear_A */
165     SBScriptMAHJ = 0x70,    /**< Mahajani */
166     SBScriptMANI = 0x71,    /**< Manichaean */
167     SBScriptMEND = 0x72,    /**< Mende_Kikakui */
168     SBScriptMODI = 0x73,    /**< Modi */
169     SBScriptMROO = 0x74,    /**< Mro */
170     SBScriptNARB = 0x75,    /**< Old_North_Arabian */
171     SBScriptNBAT = 0x76,    /**< Nabataean */
172     SBScriptPALM = 0x77,    /**< Palmyrene */
173     SBScriptPAUC = 0x78,    /**< Pau_Cin_Hau */
174     SBScriptPERM = 0x79,    /**< Old_Permic */
175     SBScriptPHLP = 0x7A,    /**< Psalter_Pahlavi */
176     SBScriptSIDD = 0x7B,    /**< Siddham */
177     SBScriptSIND = 0x7C,    /**< Khudawadi */
178     SBScriptTIRH = 0x7D,    /**< Tirhuta */
179     SBScriptWARA = 0x7E,    /**< Warang_Citi */
180 
181     /* Unicode 8.0 */
182     SBScriptAHOM = 0x7F,    /**< Ahom */
183     SBScriptHATR = 0x80,    /**< Hatran */
184     SBScriptHLUW = 0x81,    /**< Anatolian_Hieroglyphs */
185     SBScriptHUNG = 0x82,    /**< Old_Hungarian */
186     SBScriptMULT = 0x83,    /**< Multani */
187     SBScriptSGNW = 0x84,    /**< SignWriting */
188 
189     /* Unicode 9.0 */
190     SBScriptADLM = 0x85,    /**< Adlam */
191     SBScriptBHKS = 0x86,    /**< Bhaiksuki */
192     SBScriptMARC = 0x87,    /**< Marchen */
193     SBScriptNEWA = 0x88,    /**< Newa */
194     SBScriptOSGE = 0x89,    /**< Osage */
195     SBScriptTANG = 0x8A,    /**< Tangut */
196 
197     /* Unicode 10.0 */
198     SBScriptGONM = 0x8B,    /**< Masaram_Gondi */
199     SBScriptNSHU = 0x8C,    /**< Nushu */
200     SBScriptSOYO = 0x8D,    /**< Soyombo */
201     SBScriptZANB = 0x8E,    /**< Zanabazar_Square */
202 
203     /* Unicode 11.0 */
204     SBScriptDOGR = 0x8F,    /**< Dogra */
205     SBScriptGONG = 0x90,    /**< Gunjala_Gondi */
206     SBScriptMAKA = 0x91,    /**< Makasar */
207     SBScriptMEDF = 0x92,    /**< Medefaidrin */
208     SBScriptROHG = 0x93,    /**< Hanifi_Rohingya */
209     SBScriptSOGD = 0x94,    /**< Sogdian */
210     SBScriptSOGO = 0x95,    /**< Old_Sogdian */
211 
212     /* Unicode 12.0 */
213     SBScriptELYM = 0x96,    /**< Elymaic */
214     SBScriptHMNP = 0x97,    /**< Nyiakeng_Puachue_Hmong */
215     SBScriptNAND = 0x98,    /**< Nandinagari */
216     SBScriptWCHO = 0x99,    /**< Wancho */
217 
218     /* Unicde 13.0 */
219     SBScriptCHRS = 0x9A,    /**< Chorasmian */
220     SBScriptDIAK = 0x9B,    /**< Dives_Akuru */
221     SBScriptKITS = 0x9C,    /**< Khitan_Small_Script */
222     SBScriptYEZI = 0x9D     /**< Yezidi */
223 };
224 
225 /**
226  * A type to represent the script of a character.
227  */
228 typedef SBUInt8 SBScript;
229 
230 /**
231  * Returns the OpenType tag of a script as UInt32 in big endian byte order. The association between
232  * Unicode Script property and OpenType script tags is taken from the specification:
233  * https://docs.microsoft.com/en-us/typography/opentype/spec/scripttags.
234  *
235  * If more than one tag is associated with a script, then the latest one is retured. For example,
236  * Devanagari script has two tags, `deva` and `dev2`. So in this case, `dev2` will be returned.
237  *
238  * If no tag is associated with a script, then `DFLT` is returned.
239  *
240  * @param script
241  *      The script whose OpenType tag is returned.
242  * @return
243  *      The OpenType tag of specified script as UInt32 in big endian byte order.
244  */
245 SBUInt32 SBScriptGetOpenTypeTag(SBScript script);
246 
247 #endif
248