1 /* == Start of generated table == */
2 /*
3 * The following table is generated by running:
4 *
5 * ./gen-tag-table.py languagetags language-subtag-registry
6 *
7 * on files with these headers:
8 *
9 * <meta name="updated_at" content="2018-09-07 07:45 PM" />
10 * File-Date: 2018-08-08
11 */
12
13 #ifndef HB_OT_TAG_TABLE_HH
14 #define HB_OT_TAG_TABLE_HH
15
16 static const LangTag ot_languages[] = {
17 {"aa", {HB_TAG('A','F','R',' ')}}, /* Afar */
18 {"aae", {HB_TAG('S','Q','I',' ')}}, /* Arbëreshë Albanian -> Albanian */
19 {"aao", {HB_TAG('A','R','A',' ')}}, /* Algerian Saharan Arabic -> Arabic */
20 {"aat", {HB_TAG('S','Q','I',' ')}}, /* Arvanitika Albanian -> Albanian */
21 {"ab", {HB_TAG('A','B','K',' ')}}, /* Abkhazian */
22 {"abh", {HB_TAG('A','R','A',' ')}}, /* Tajiki Arabic -> Arabic */
23 {"abq", {HB_TAG('A','B','A',' ')}}, /* Abaza */
24 {"abv", {HB_TAG('A','R','A',' ')}}, /* Baharna Arabic -> Arabic */
25 {"acf", {HB_TAG('F','A','N',' ')}}, /* Saint Lucian Creole French -> French Antillean */
26 {"ach", {HB_TAG('A','C','H',' ')}}, /* Acoli -> Acholi */
27 {"acm", {HB_TAG('A','R','A',' ')}}, /* Mesopotamian Arabic -> Arabic */
28 {"acq", {HB_TAG('A','R','A',' ')}}, /* Ta'izzi-Adeni Arabic -> Arabic */
29 {"acr", {HB_TAG('A','C','R',' ')}}, /* Achi */
30 {"acw", {HB_TAG('A','R','A',' ')}}, /* Hijazi Arabic -> Arabic */
31 {"acx", {HB_TAG('A','R','A',' ')}}, /* Omani Arabic -> Arabic */
32 {"acy", {HB_TAG('A','R','A',' ')}}, /* Cypriot Arabic -> Arabic */
33 {"ada", {HB_TAG('D','N','G',' ')}}, /* Adangme -> Dangme */
34 {"adf", {HB_TAG('A','R','A',' ')}}, /* Dhofari Arabic -> Arabic */
35 {"adp", {HB_TAG('D','Z','N',' ')}}, /* Adap (retired code) -> Dzongkha */
36 {"ady", {HB_TAG('A','D','Y',' ')}}, /* Adyghe */
37 {"aeb", {HB_TAG('A','R','A',' ')}}, /* Tunisian Arabic -> Arabic */
38 {"aec", {HB_TAG('A','R','A',' ')}}, /* Saidi Arabic -> Arabic */
39 {"af", {HB_TAG('A','F','K',' ')}}, /* Afrikaans */
40 {"afb", {HB_TAG('A','R','A',' ')}}, /* Gulf Arabic -> Arabic */
41 {"ahg", {HB_TAG('A','G','W',' ')}}, /* Qimant -> Agaw */
42 {"aht", {HB_TAG('A','T','H',' ')}}, /* Ahtena -> Athapaskan */
43 {"aii", {HB_TAG('S','W','A',' '), /* Assyrian Neo-Aramaic -> Swadaya Aramaic */
44 HB_TAG('S','Y','R',' ')}}, /* Assyrian Neo-Aramaic -> Syriac */
45 {"aio", {HB_TAG('A','I','O',' ')}}, /* Aiton */
46 {"aiw", {HB_TAG('A','R','I',' ')}}, /* Aari */
47 {"ajp", {HB_TAG('A','R','A',' ')}}, /* South Levantine Arabic -> Arabic */
48 {"ak", {HB_TAG('A','K','A',' '), /* Akan [macrolanguage] */
49 HB_TAG('T','W','I',' ')}}, /* Akan [macrolanguage] -> Twi */
50 {"aln", {HB_TAG('S','Q','I',' ')}}, /* Gheg Albanian -> Albanian */
51 {"als", {HB_TAG('S','Q','I',' ')}}, /* Tosk Albanian -> Albanian */
52 {"alt", {HB_TAG('A','L','T',' ')}}, /* Southern Altai -> Altai */
53 {"am", {HB_TAG('A','M','H',' ')}}, /* Amharic */
54 {"amf", {HB_TAG('H','B','N',' ')}}, /* Hamer-Banna -> Hammer-Banna */
55 {"amw", {HB_TAG('S','Y','R',' ')}}, /* Western Neo-Aramaic -> Syriac */
56 {"an", {HB_TAG('A','R','G',' ')}}, /* Aragonese */
57 {"ang", {HB_TAG('A','N','G',' ')}}, /* Old English (ca. 450-1100) -> Anglo-Saxon */
58 {"apc", {HB_TAG('A','R','A',' ')}}, /* North Levantine Arabic -> Arabic */
59 {"apd", {HB_TAG('A','R','A',' ')}}, /* Sudanese Arabic -> Arabic */
60 {"apj", {HB_TAG('A','T','H',' ')}}, /* Jicarilla Apache -> Athapaskan */
61 {"apk", {HB_TAG('A','T','H',' ')}}, /* Kiowa Apache -> Athapaskan */
62 {"apl", {HB_TAG('A','T','H',' ')}}, /* Lipan Apache -> Athapaskan */
63 {"apm", {HB_TAG('A','T','H',' ')}}, /* Mescalero-Chiricahua Apache -> Athapaskan */
64 {"apw", {HB_TAG('A','T','H',' ')}}, /* Western Apache -> Athapaskan */
65 {"ar", {HB_TAG('A','R','A',' ')}}, /* Arabic [macrolanguage] */
66 {"arb", {HB_TAG('A','R','A',' ')}}, /* Standard Arabic -> Arabic */
67 {"arn", {HB_TAG('M','A','P',' ')}}, /* Mapudungun */
68 {"arq", {HB_TAG('A','R','A',' ')}}, /* Algerian Arabic -> Arabic */
69 {"ars", {HB_TAG('A','R','A',' ')}}, /* Najdi Arabic -> Arabic */
70 {"ary", {HB_TAG('M','O','R',' ')}}, /* Moroccan Arabic -> Moroccan */
71 {"arz", {HB_TAG('A','R','A',' ')}}, /* Egyptian Arabic -> Arabic */
72 {"as", {HB_TAG('A','S','M',' ')}}, /* Assamese */
73 {"ast", {HB_TAG('A','S','T',' ')}}, /* Asturian */
74 {"ath", {HB_TAG('A','T','H',' ')}}, /* Athapascan [family] -> Athapaskan */
75 {"atj", {HB_TAG('R','C','R',' ')}}, /* Atikamekw -> R-Cree */
76 {"atv", {HB_TAG('A','L','T',' ')}}, /* Northern Altai -> Altai */
77 {"auz", {HB_TAG('A','R','A',' ')}}, /* Uzbeki Arabic -> Arabic */
78 {"av", {HB_TAG('A','V','R',' ')}}, /* Avaric -> Avar */
79 {"avl", {HB_TAG('A','R','A',' ')}}, /* Eastern Egyptian Bedawi Arabic -> Arabic */
80 {"awa", {HB_TAG('A','W','A',' ')}}, /* Awadhi */
81 {"ay", {HB_TAG('A','Y','M',' ')}}, /* Aymara [macrolanguage] */
82 {"ayc", {HB_TAG('A','Y','M',' ')}}, /* Southern Aymara -> Aymara */
83 {"ayh", {HB_TAG('A','R','A',' ')}}, /* Hadrami Arabic -> Arabic */
84 {"ayl", {HB_TAG('A','R','A',' ')}}, /* Libyan Arabic -> Arabic */
85 {"ayn", {HB_TAG('A','R','A',' ')}}, /* Sanaani Arabic -> Arabic */
86 {"ayp", {HB_TAG('A','R','A',' ')}}, /* North Mesopotamian Arabic -> Arabic */
87 {"ayr", {HB_TAG('A','Y','M',' ')}}, /* Central Aymara -> Aymara */
88 {"az", {HB_TAG('A','Z','E',' ')}}, /* Azerbaijani [macrolanguage] */
89 {"azb", {HB_TAG('A','Z','B',' ')}}, /* South Azerbaijani -> Torki */
90 {"azj", {HB_TAG('A','Z','E',' ')}}, /* North Azerbaijani -> Azerbaijani */
91 {"ba", {HB_TAG('B','S','H',' ')}}, /* Bashkir */
92 {"bad", {HB_TAG('B','A','D','0')}}, /* Banda [family] */
93 {"bai", {HB_TAG('B','M','L',' ')}}, /* Bamileke [family] */
94 {"bal", {HB_TAG('B','L','I',' ')}}, /* Baluchi [macrolanguage] */
95 {"ban", {HB_TAG('B','A','N',' ')}}, /* Balinese */
96 {"bar", {HB_TAG('B','A','R',' ')}}, /* Bavarian */
97 {"bbc", {HB_TAG('B','B','C',' ')}}, /* Batak Toba */
98 {"bbz", {HB_TAG('A','R','A',' ')}}, /* Babalia Creole Arabic -> Arabic */
99 {"bcc", {HB_TAG('B','L','I',' ')}}, /* Southern Balochi -> Baluchi */
100 {"bci", {HB_TAG('B','A','U',' ')}}, /* Baoulé -> Baulé */
101 {"bcl", {HB_TAG('B','I','K',' ')}}, /* Central Bikol -> Bikol */
102 {"bcq", {HB_TAG('B','C','H',' ')}}, /* Bench */
103 {"bcr", {HB_TAG('A','T','H',' ')}}, /* Babine -> Athapaskan */
104 {"bdy", {HB_TAG('B','D','Y',' ')}}, /* Bandjalang */
105 {"be", {HB_TAG('B','E','L',' ')}}, /* Belarusian -> Belarussian */
106 {"bea", {HB_TAG('A','T','H',' ')}}, /* Beaver -> Athapaskan */
107 {"beb", {HB_TAG('B','T','I',' ')}}, /* Bebele -> Beti */
108 {"bem", {HB_TAG('B','E','M',' ')}}, /* Bemba (Zambia) */
109 {"ber", {HB_TAG('B','B','R',' ')}}, /* Berber [family] */
110 {"bfq", {HB_TAG('B','A','D',' ')}}, /* Badaga */
111 {"bft", {HB_TAG('B','L','T',' ')}}, /* Balti */
112 {"bfu", {HB_TAG('L','A','H',' ')}}, /* Gahri -> Lahuli */
113 {"bfy", {HB_TAG('B','A','G',' ')}}, /* Bagheli -> Baghelkhandi */
114 {"bg", {HB_TAG('B','G','R',' ')}}, /* Bulgarian */
115 {"bgc", {HB_TAG('B','G','C',' ')}}, /* Haryanvi */
116 {"bgn", {HB_TAG('B','L','I',' ')}}, /* Western Balochi -> Baluchi */
117 {"bgp", {HB_TAG('B','L','I',' ')}}, /* Eastern Balochi -> Baluchi */
118 {"bgq", {HB_TAG('B','G','Q',' ')}}, /* Bagri */
119 {"bgr", {HB_TAG('Q','I','N',' ')}}, /* Bawm Chin -> Chin */
120 {"bhb", {HB_TAG('B','H','I',' ')}}, /* Bhili */
121 {"bhi", {HB_TAG('B','H','I',' ')}}, /* Bhilali -> Bhili */
122 {"bhk", {HB_TAG('B','I','K',' ')}}, /* Albay Bicolano (retired code) -> Bikol */
123 {"bho", {HB_TAG('B','H','O',' ')}}, /* Bhojpuri */
124 {"bhr", {HB_TAG('M','L','G',' ')}}, /* Bara Malagasy -> Malagasy */
125 {"bi", {HB_TAG('B','I','S',' ')}}, /* Bislama */
126 {"bik", {HB_TAG('B','I','K',' ')}}, /* Bikol [macrolanguage] */
127 {"bin", {HB_TAG('E','D','O',' ')}}, /* Edo */
128 {"bjj", {HB_TAG('B','J','J',' ')}}, /* Kanauji */
129 {"bjn", {HB_TAG('M','L','Y',' ')}}, /* Banjar -> Malay */
130 {"bjq", {HB_TAG('M','L','G',' ')}}, /* Southern Betsimisaraka Malagasy (retired code) -> Malagasy */
131 {"bjt", {HB_TAG('B','L','N',' ')}}, /* Balanta-Ganja -> Balante */
132 {"bla", {HB_TAG('B','K','F',' ')}}, /* Siksika -> Blackfoot */
133 {"ble", {HB_TAG('B','L','N',' ')}}, /* Balanta-Kentohe -> Balante */
134 {"blk", {HB_TAG('B','L','K',' ')}}, /* Pa'o Karen */
135 {"bln", {HB_TAG('B','I','K',' ')}}, /* Southern Catanduanes Bikol -> Bikol */
136 {"bm", {HB_TAG('B','M','B',' ')}}, /* Bambara (Bamanankan) */
137 {"bmm", {HB_TAG('M','L','G',' ')}}, /* Northern Betsimisaraka Malagasy -> Malagasy */
138 {"bn", {HB_TAG('B','E','N',' ')}}, /* Bengali */
139 {"bo", {HB_TAG('T','I','B',' ')}}, /* Tibetan */
140 {"bpy", {HB_TAG('B','P','Y',' ')}}, /* Bishnupriya -> Bishnupriya Manipuri */
141 {"bqi", {HB_TAG('L','R','C',' ')}}, /* Bakhtiari -> Luri */
142 {"br", {HB_TAG('B','R','E',' ')}}, /* Breton */
143 {"bra", {HB_TAG('B','R','I',' ')}}, /* Braj -> Braj Bhasha */
144 {"brh", {HB_TAG('B','R','H',' ')}}, /* Brahui */
145 {"brx", {HB_TAG('B','R','X',' ')}}, /* Bodo (India) */
146 {"bs", {HB_TAG('B','O','S',' ')}}, /* Bosnian */
147 {"bsk", {HB_TAG('B','S','K',' ')}}, /* Burushaski */
148 {"btb", {HB_TAG('B','T','I',' ')}}, /* Beti (Cameroon) (retired code) */
149 {"btj", {HB_TAG('M','L','Y',' ')}}, /* Bacanese Malay -> Malay */
150 {"bto", {HB_TAG('B','I','K',' ')}}, /* Rinconada Bikol -> Bikol */
151 {"bts", {HB_TAG('B','T','S',' ')}}, /* Batak Simalungun */
152 {"bug", {HB_TAG('B','U','G',' ')}}, /* Buginese -> Bugis */
153 {"bum", {HB_TAG('B','T','I',' ')}}, /* Bulu (Cameroon) -> Beti */
154 {"bve", {HB_TAG('M','L','Y',' ')}}, /* Berau Malay -> Malay */
155 {"bvu", {HB_TAG('M','L','Y',' ')}}, /* Bukit Malay -> Malay */
156 {"bxk", {HB_TAG('L','U','H',' ')}}, /* Bukusu -> Luyia */
157 {"bxp", {HB_TAG('B','T','I',' ')}}, /* Bebil -> Beti */
158 {"bxr", {HB_TAG('R','B','U',' ')}}, /* Russia Buriat -> Russian Buriat */
159 {"byn", {HB_TAG('B','I','L',' ')}}, /* Bilin -> Bilen */
160 {"byv", {HB_TAG('B','Y','V',' ')}}, /* Medumba */
161 {"bzc", {HB_TAG('M','L','G',' ')}}, /* Southern Betsimisaraka Malagasy -> Malagasy */
162 {"ca", {HB_TAG('C','A','T',' ')}}, /* Catalan */
163 {"caf", {HB_TAG('C','R','R',' '), /* Southern Carrier -> Carrier */
164 HB_TAG('A','T','H',' ')}}, /* Southern Carrier -> Athapaskan */
165 {"cak", {HB_TAG('C','A','K',' ')}}, /* Kaqchikel */
166 {"cbk", {HB_TAG('C','B','K',' ')}}, /* Chavacano -> Zamboanga Chavacano */
167 {"cbl", {HB_TAG('Q','I','N',' ')}}, /* Bualkhaw Chin -> Chin */
168 {"cco", {HB_TAG('C','C','H','N')}}, /* Comaltepec Chinantec -> Chinantec */
169 {"ccq", {HB_TAG('A','R','K',' ')}}, /* Chaungtha (retired code) -> Rakhine */
170 {"cdo", {HB_TAG('Z','H','S',' ')}}, /* Min Dong Chinese -> Chinese Simplified */
171 {"ce", {HB_TAG('C','H','E',' ')}}, /* Chechen */
172 {"ceb", {HB_TAG('C','E','B',' ')}}, /* Cebuano */
173 {"cfm", {HB_TAG('H','A','L',' ')}}, /* Halam (Falam Chin) */
174 {"cgg", {HB_TAG('C','G','G',' ')}}, /* Chiga */
175 {"ch", {HB_TAG('C','H','A',' ')}}, /* Chamorro */
176 {"chj", {HB_TAG('C','C','H','N')}}, /* Ojitlán Chinantec -> Chinantec */
177 {"chk", {HB_TAG('C','H','K','0')}}, /* Chuukese */
178 {"cho", {HB_TAG('C','H','O',' ')}}, /* Choctaw */
179 {"chp", {HB_TAG('C','H','P',' '), /* Chipewyan */
180 HB_TAG('S','A','Y',' '), /* Chipewyan -> Sayisi */
181 HB_TAG('A','T','H',' ')}}, /* Chipewyan -> Athapaskan */
182 {"chq", {HB_TAG('C','C','H','N')}}, /* Quiotepec Chinantec -> Chinantec */
183 {"chr", {HB_TAG('C','H','R',' ')}}, /* Cherokee */
184 {"chy", {HB_TAG('C','H','Y',' ')}}, /* Cheyenne */
185 {"chz", {HB_TAG('C','C','H','N')}}, /* Ozumacín Chinantec -> Chinantec */
186 {"ciw", {HB_TAG('O','J','B',' ')}}, /* Chippewa -> Ojibway */
187 {"cja", {HB_TAG('C','J','A',' ')}}, /* Western Cham */
188 {"cjm", {HB_TAG('C','J','M',' ')}}, /* Eastern Cham */
189 {"cjy", {HB_TAG('Z','H','S',' ')}}, /* Jinyu Chinese -> Chinese Simplified */
190 {"cka", {HB_TAG('Q','I','N',' ')}}, /* Khumi Awa Chin (retired code) -> Chin */
191 {"ckb", {HB_TAG('K','U','R',' ')}}, /* Central Kurdish -> Kurdish */
192 {"ckt", {HB_TAG('C','H','K',' ')}}, /* Chukot -> Chukchi */
193 {"clc", {HB_TAG('A','T','H',' ')}}, /* Chilcotin -> Athapaskan */
194 {"cld", {HB_TAG('S','Y','R',' ')}}, /* Chaldean Neo-Aramaic -> Syriac */
195 {"cle", {HB_TAG('C','C','H','N')}}, /* Lealao Chinantec -> Chinantec */
196 {"cmn", {HB_TAG('Z','H','S',' ')}}, /* Mandarin Chinese -> Chinese Simplified */
197 {"cmr", {HB_TAG('Q','I','N',' ')}}, /* Mro-Khimi Chin -> Chin */
198 {"cnb", {HB_TAG('Q','I','N',' ')}}, /* Chinbon Chin -> Chin */
199 {"cnh", {HB_TAG('Q','I','N',' ')}}, /* Hakha Chin -> Chin */
200 {"cnk", {HB_TAG('Q','I','N',' ')}}, /* Khumi Chin -> Chin */
201 {"cnl", {HB_TAG('C','C','H','N')}}, /* Lalana Chinantec -> Chinantec */
202 {"cnt", {HB_TAG('C','C','H','N')}}, /* Tepetotutla Chinantec -> Chinantec */
203 {"cnw", {HB_TAG('Q','I','N',' ')}}, /* Ngawn Chin -> Chin */
204 {"co", {HB_TAG('C','O','S',' ')}}, /* Corsican */
205 {"coa", {HB_TAG('M','L','Y',' ')}}, /* Cocos Islands Malay -> Malay */
206 {"cop", {HB_TAG('C','O','P',' ')}}, /* Coptic */
207 {"coq", {HB_TAG('A','T','H',' ')}}, /* Coquille -> Athapaskan */
208 {"cpa", {HB_TAG('C','C','H','N')}}, /* Palantla Chinantec -> Chinantec */
209 {"cpe", {HB_TAG('C','P','P',' ')}}, /* English-based creoles and pidgins [family] -> Creoles */
210 {"cpf", {HB_TAG('C','P','P',' ')}}, /* French-based creoles and pidgins [family] -> Creoles */
211 {"cpp", {HB_TAG('C','P','P',' ')}}, /* Portuguese-based creoles and pidgins [family] -> Creoles */
212 {"cpx", {HB_TAG('Z','H','S',' ')}}, /* Pu-Xian Chinese -> Chinese Simplified */
213 {"cqd", {HB_TAG('H','M','N',' ')}}, /* Chuanqiandian Cluster Miao -> Hmong */
214 {"cqu", {HB_TAG('Q','U','H',' ')}}, /* Chilean Quechua (retired code) -> Quechua (Bolivia) */
215 {"cr", {HB_TAG('C','R','E',' '), /* Cree [macrolanguage] */
216 HB_TAG('Y','C','R',' ')}}, /* Cree [macrolanguage] -> Y-Cree */
217 {"crh", {HB_TAG('C','R','T',' ')}}, /* Crimean Tatar */
218 {"crj", {HB_TAG('E','C','R',' ')}}, /* Southern East Cree -> Eastern Cree */
219 {"crk", {HB_TAG('W','C','R',' ')}}, /* Plains Cree -> West-Cree */
220 {"crl", {HB_TAG('E','C','R',' ')}}, /* Northern East Cree -> Eastern Cree */
221 {"crm", {HB_TAG('M','C','R',' '), /* Moose Cree */
222 HB_TAG('L','C','R',' ')}}, /* Moose Cree -> L-Cree */
223 {"crp", {HB_TAG('C','P','P',' ')}}, /* Creoles and pidgins [family] -> Creoles */
224 {"crx", {HB_TAG('C','R','R',' '), /* Carrier */
225 HB_TAG('A','T','H',' ')}}, /* Carrier -> Athapaskan */
226 {"cs", {HB_TAG('C','S','Y',' ')}}, /* Czech */
227 {"csa", {HB_TAG('C','C','H','N')}}, /* Chiltepec Chinantec -> Chinantec */
228 {"csb", {HB_TAG('C','S','B',' ')}}, /* Kashubian */
229 {"csh", {HB_TAG('Q','I','N',' ')}}, /* Asho Chin -> Chin */
230 {"cso", {HB_TAG('C','C','H','N')}}, /* Sochiapam Chinantec -> Chinantec */
231 {"csw", {HB_TAG('N','C','R',' '), /* Swampy Cree -> N-Cree */
232 HB_TAG('N','H','C',' ')}}, /* Swampy Cree -> Norway House Cree */
233 {"csy", {HB_TAG('Q','I','N',' ')}}, /* Siyin Chin -> Chin */
234 {"ctc", {HB_TAG('A','T','H',' ')}}, /* Chetco -> Athapaskan */
235 {"ctd", {HB_TAG('Q','I','N',' ')}}, /* Tedim Chin -> Chin */
236 {"cte", {HB_TAG('C','C','H','N')}}, /* Tepinapa Chinantec -> Chinantec */
237 {"ctg", {HB_TAG('C','T','G',' ')}}, /* Chittagonian */
238 {"ctl", {HB_TAG('C','C','H','N')}}, /* Tlacoatzintepec Chinantec -> Chinantec */
239 {"cts", {HB_TAG('B','I','K',' ')}}, /* Northern Catanduanes Bikol -> Bikol */
240 {"cu", {HB_TAG('C','S','L',' ')}}, /* Church Slavonic */
241 {"cuc", {HB_TAG('C','C','H','N')}}, /* Usila Chinantec -> Chinantec */
242 {"cuk", {HB_TAG('C','U','K',' ')}}, /* San Blas Kuna */
243 {"cv", {HB_TAG('C','H','U',' ')}}, /* Chuvash */
244 {"cvn", {HB_TAG('C','C','H','N')}}, /* Valle Nacional Chinantec -> Chinantec */
245 {"cwd", {HB_TAG('D','C','R',' '), /* Woods Cree */
246 HB_TAG('T','C','R',' ')}}, /* Woods Cree -> TH-Cree */
247 {"cy", {HB_TAG('W','E','L',' ')}}, /* Welsh */
248 {"czh", {HB_TAG('Z','H','S',' ')}}, /* Huizhou Chinese -> Chinese Simplified */
249 {"czo", {HB_TAG('Z','H','S',' ')}}, /* Min Zhong Chinese -> Chinese Simplified */
250 {"czt", {HB_TAG('Q','I','N',' ')}}, /* Zotung Chin -> Chin */
251 {"da", {HB_TAG('D','A','N',' ')}}, /* Danish */
252 {"dao", {HB_TAG('Q','I','N',' ')}}, /* Daai Chin -> Chin */
253 {"dap", {HB_TAG('N','I','S',' ')}}, /* Nisi (India) (retired code) */
254 {"dar", {HB_TAG('D','A','R',' ')}}, /* Dargwa */
255 {"dax", {HB_TAG('D','A','X',' ')}}, /* Dayi */
256 {"de", {HB_TAG('D','E','U',' ')}}, /* German */
257 {"den", {HB_TAG('S','L','A',' '), /* Slave (Athapascan) [macrolanguage] -> Slavey */
258 HB_TAG('A','T','H',' ')}}, /* Slave (Athapascan) [macrolanguage] -> Athapaskan */
259 {"dgo", {HB_TAG('D','G','O',' ')}}, /* Dogri */
260 {"dgr", {HB_TAG('A','T','H',' ')}}, /* Dogrib -> Athapaskan */
261 {"dhd", {HB_TAG('M','A','W',' ')}}, /* Dhundari -> Marwari */
262 {"dhg", {HB_TAG('D','H','G',' ')}}, /* Dhangu */
263 {"dib", {HB_TAG('D','N','K',' ')}}, /* South Central Dinka -> Dinka */
264 {"dik", {HB_TAG('D','N','K',' ')}}, /* Southwestern Dinka -> Dinka */
265 {"din", {HB_TAG('D','N','K',' ')}}, /* Dinka [macrolanguage] */
266 {"dip", {HB_TAG('D','N','K',' ')}}, /* Northeastern Dinka -> Dinka */
267 {"diq", {HB_TAG('D','I','Q',' ')}}, /* Dimli */
268 {"diw", {HB_TAG('D','N','K',' ')}}, /* Northwestern Dinka -> Dinka */
269 {"dje", {HB_TAG('D','J','R',' ')}}, /* Zarma */
270 {"djr", {HB_TAG('D','J','R','0')}}, /* Djambarrpuyngu */
271 {"dks", {HB_TAG('D','N','K',' ')}}, /* Southeastern Dinka -> Dinka */
272 {"dng", {HB_TAG('D','U','N',' ')}}, /* Dungan */
273 {"dnj", {HB_TAG('D','N','J',' ')}}, /* Dan */
274 {"doi", {HB_TAG('D','G','R',' ')}}, /* Dogri [macrolanguage] */
275 {"drh", {HB_TAG('M','N','G',' ')}}, /* Darkhat (retired code) -> Mongolian */
276 {"drw", {HB_TAG('D','R','I',' ')}}, /* Darwazi (retired code) -> Dari */
277 {"dsb", {HB_TAG('L','S','B',' ')}}, /* Lower Sorbian */
278 {"dty", {HB_TAG('N','E','P',' ')}}, /* Dotyali -> Nepali */
279 {"duj", {HB_TAG('D','U','J',' ')}}, /* Dhuwal (retired code) */
280 {"dup", {HB_TAG('M','L','Y',' ')}}, /* Duano -> Malay */
281 {"dv", {HB_TAG('D','I','V',' '), /* Divehi (Dhivehi, Maldivian) */
282 HB_TAG('D','H','V',' ')}}, /* Divehi (Dhivehi, Maldivian) (deprecated) */
283 {"dwu", {HB_TAG('D','U','J',' ')}}, /* Dhuwal */
284 {"dwy", {HB_TAG('D','U','J',' ')}}, /* Dhuwaya -> Dhuwal */
285 {"dyu", {HB_TAG('J','U','L',' ')}}, /* Dyula -> Jula */
286 {"dz", {HB_TAG('D','Z','N',' ')}}, /* Dzongkha */
287 {"ee", {HB_TAG('E','W','E',' ')}}, /* Ewe */
288 {"efi", {HB_TAG('E','F','I',' ')}}, /* Efik */
289 {"ekk", {HB_TAG('E','T','I',' ')}}, /* Standard Estonian -> Estonian */
290 {"el", {HB_TAG('E','L','L',' ')}}, /* Modern Greek (1453-) -> Greek */
291 {"emk", {HB_TAG('E','M','K',' '), /* Eastern Maninkakan */
292 HB_TAG('M','N','K',' ')}}, /* Eastern Maninkakan -> Maninka */
293 {"en", {HB_TAG('E','N','G',' ')}}, /* English */
294 {"enb", {HB_TAG('K','A','L',' ')}}, /* Markweeta -> Kalenjin */
295 {"enf", {HB_TAG('F','N','E',' ')}}, /* Forest Enets -> Forest Nenets */
296 {"enh", {HB_TAG('T','N','E',' ')}}, /* Tundra Enets -> Tundra Nenets */
297 {"eo", {HB_TAG('N','T','O',' ')}}, /* Esperanto */
298 {"es", {HB_TAG('E','S','P',' ')}}, /* Spanish */
299 {"esg", {HB_TAG('G','O','N',' ')}}, /* Aheri Gondi -> Gondi */
300 {"esi", {HB_TAG('I','P','K',' ')}}, /* North Alaskan Inupiatun -> Inupiat */
301 {"esk", {HB_TAG('I','P','K',' ')}}, /* Northwest Alaska Inupiatun -> Inupiat */
302 {"esu", {HB_TAG('E','S','U',' ')}}, /* Central Yupik */
303 {"et", {HB_TAG('E','T','I',' ')}}, /* Estonian [macrolanguage] */
304 {"eto", {HB_TAG('B','T','I',' ')}}, /* Eton (Cameroon) -> Beti */
305 {"eu", {HB_TAG('E','U','Q',' ')}}, /* Basque */
306 {"eve", {HB_TAG('E','V','N',' ')}}, /* Even */
307 {"evn", {HB_TAG('E','V','K',' ')}}, /* Evenki */
308 {"ewo", {HB_TAG('B','T','I',' ')}}, /* Ewondo -> Beti */
309 {"eyo", {HB_TAG('K','A','L',' ')}}, /* Keiyo -> Kalenjin */
310 {"fa", {HB_TAG('F','A','R',' ')}}, /* Persian [macrolanguage] */
311 {"fan", {HB_TAG('F','A','N','0')}}, /* Fang (Equatorial Guinea) */
312 {"fat", {HB_TAG('F','A','T',' ')}}, /* Fanti */
313 {"fbl", {HB_TAG('B','I','K',' ')}}, /* West Albay Bikol -> Bikol */
314 {"ff", {HB_TAG('F','U','L',' ')}}, /* Fulah [macrolanguage] */
315 {"ffm", {HB_TAG('F','U','L',' ')}}, /* Maasina Fulfulde -> Fulah */
316 {"fi", {HB_TAG('F','I','N',' ')}}, /* Finnish */
317 {"fil", {HB_TAG('P','I','L',' ')}}, /* Filipino */
318 {"fj", {HB_TAG('F','J','I',' ')}}, /* Fijian */
319 {"flm", {HB_TAG('H','A','L',' '), /* Halam (Falam Chin) (retired code) */
320 HB_TAG('Q','I','N',' ')}}, /* Falam Chin (retired code) -> Chin */
321 {"fmp", {HB_TAG('F','M','P',' ')}}, /* Fe'fe' */
322 {"fo", {HB_TAG('F','O','S',' ')}}, /* Faroese */
323 {"fon", {HB_TAG('F','O','N',' ')}}, /* Fon */
324 {"fr", {HB_TAG('F','R','A',' ')}}, /* French */
325 {"frc", {HB_TAG('F','R','C',' ')}}, /* Cajun French */
326 {"frp", {HB_TAG('F','R','P',' ')}}, /* Arpitan */
327 {"fub", {HB_TAG('F','U','L',' ')}}, /* Adamawa Fulfulde -> Fulah */
328 {"fuc", {HB_TAG('F','U','L',' ')}}, /* Pulaar -> Fulah */
329 {"fue", {HB_TAG('F','U','L',' ')}}, /* Borgu Fulfulde -> Fulah */
330 {"fuf", {HB_TAG('F','T','A',' ')}}, /* Pular -> Futa */
331 {"fuh", {HB_TAG('F','U','L',' ')}}, /* Western Niger Fulfulde -> Fulah */
332 {"fui", {HB_TAG('F','U','L',' ')}}, /* Bagirmi Fulfulde -> Fulah */
333 {"fuq", {HB_TAG('F','U','L',' ')}}, /* Central-Eastern Niger Fulfulde -> Fulah */
334 {"fur", {HB_TAG('F','R','L',' ')}}, /* Friulian */
335 {"fuv", {HB_TAG('F','U','V',' ')}}, /* Nigerian Fulfulde */
336 {"fy", {HB_TAG('F','R','I',' ')}}, /* Western Frisian -> Frisian */
337 {"ga", {HB_TAG('I','R','I',' ')}}, /* Irish */
338 {"gaa", {HB_TAG('G','A','D',' ')}}, /* Ga */
339 {"gag", {HB_TAG('G','A','G',' ')}}, /* Gagauz */
340 {"gan", {HB_TAG('Z','H','S',' ')}}, /* Gan Chinese -> Chinese Simplified */
341 {"gax", {HB_TAG('O','R','O',' ')}}, /* Borana-Arsi-Guji Oromo -> Oromo */
342 {"gaz", {HB_TAG('O','R','O',' ')}}, /* West Central Oromo -> Oromo */
343 {"gbm", {HB_TAG('G','A','W',' ')}}, /* Garhwali */
344 {"gce", {HB_TAG('A','T','H',' ')}}, /* Galice -> Athapaskan */
345 {"gd", {HB_TAG('G','A','E',' ')}}, /* Scottish Gaelic (Gaelic) */
346 {"gda", {HB_TAG('R','A','J',' ')}}, /* Gade Lohar -> Rajasthani */
347 {"gez", {HB_TAG('G','E','Z',' ')}}, /* Geez */
348 {"ggo", {HB_TAG('G','O','N',' ')}}, /* Southern Gondi (retired code) -> Gondi */
349 {"gih", {HB_TAG('G','I','H',' ')}}, /* Githabul */
350 {"gil", {HB_TAG('G','I','L','0')}}, /* Kiribati (Gilbertese) */
351 {"gju", {HB_TAG('R','A','J',' ')}}, /* Gujari -> Rajasthani */
352 {"gkp", {HB_TAG('G','K','P',' ')}}, /* Guinea Kpelle -> Kpelle (Guinea) */
353 {"gl", {HB_TAG('G','A','L',' ')}}, /* Galician */
354 {"gld", {HB_TAG('N','A','N',' ')}}, /* Nanai */
355 {"glk", {HB_TAG('G','L','K',' ')}}, /* Gilaki */
356 {"gn", {HB_TAG('G','U','A',' ')}}, /* Guarani [macrolanguage] */
357 {"gnn", {HB_TAG('G','N','N',' ')}}, /* Gumatj */
358 {"gno", {HB_TAG('G','O','N',' ')}}, /* Northern Gondi -> Gondi */
359 {"gnw", {HB_TAG('G','U','A',' ')}}, /* Western Bolivian Guaraní -> Guarani */
360 {"gog", {HB_TAG('G','O','G',' ')}}, /* Gogo */
361 {"gom", {HB_TAG('K','O','K',' ')}}, /* Goan Konkani -> Konkani */
362 {"gon", {HB_TAG('G','O','N',' ')}}, /* Gondi [macrolanguage] */
363 {"grt", {HB_TAG('G','R','O',' ')}}, /* Garo */
364 {"gru", {HB_TAG('S','O','G',' ')}}, /* Kistane -> Sodo Gurage */
365 {"gsw", {HB_TAG('A','L','S',' ')}}, /* Alsatian */
366 {"gu", {HB_TAG('G','U','J',' ')}}, /* Gujarati */
367 {"guc", {HB_TAG('G','U','C',' ')}}, /* Wayuu */
368 {"guf", {HB_TAG('G','U','F',' ')}}, /* Gupapuyngu */
369 {"gug", {HB_TAG('G','U','A',' ')}}, /* Paraguayan Guaraní -> Guarani */
370 {"gui", {HB_TAG('G','U','A',' ')}}, /* Eastern Bolivian Guaraní -> Guarani */
371 {"guk", {HB_TAG('G','M','Z',' '), /* Gumuz */
372 HB_TAG('G','U','K',' ')}}, /* Gumuz (SIL fonts) */
373 {"gun", {HB_TAG('G','U','A',' ')}}, /* Mbyá Guaraní -> Guarani */
374 {"guz", {HB_TAG('G','U','Z',' ')}}, /* Gusii */
375 {"gv", {HB_TAG('M','N','X',' ')}}, /* Manx */
376 {"gwi", {HB_TAG('A','T','H',' ')}}, /* Gwichʼin -> Athapaskan */
377 {"ha", {HB_TAG('H','A','U',' ')}}, /* Hausa */
378 {"haa", {HB_TAG('A','T','H',' ')}}, /* Han -> Athapaskan */
379 {"hae", {HB_TAG('O','R','O',' ')}}, /* Eastern Oromo -> Oromo */
380 {"hak", {HB_TAG('Z','H','S',' ')}}, /* Hakka Chinese -> Chinese Simplified */
381 {"har", {HB_TAG('H','R','I',' ')}}, /* Harari */
382 {"haw", {HB_TAG('H','A','W',' ')}}, /* Hawaiian */
383 {"hay", {HB_TAG('H','A','Y',' ')}}, /* Haya */
384 {"haz", {HB_TAG('H','A','Z',' ')}}, /* Hazaragi */
385 {"he", {HB_TAG('I','W','R',' ')}}, /* Hebrew */
386 {"hea", {HB_TAG('H','M','N',' ')}}, /* Northern Qiandong Miao -> Hmong */
387 {"hi", {HB_TAG('H','I','N',' ')}}, /* Hindi */
388 {"hil", {HB_TAG('H','I','L',' ')}}, /* Hiligaynon */
389 {"hji", {HB_TAG('M','L','Y',' ')}}, /* Haji -> Malay */
390 {"hlt", {HB_TAG('Q','I','N',' ')}}, /* Matu Chin -> Chin */
391 {"hma", {HB_TAG('H','M','N',' ')}}, /* Southern Mashan Hmong -> Hmong */
392 {"hmc", {HB_TAG('H','M','N',' ')}}, /* Central Huishui Hmong -> Hmong */
393 {"hmd", {HB_TAG('H','M','N',' ')}}, /* Large Flowery Miao -> Hmong */
394 {"hme", {HB_TAG('H','M','N',' ')}}, /* Eastern Huishui Hmong -> Hmong */
395 {"hmg", {HB_TAG('H','M','N',' ')}}, /* Southwestern Guiyang Hmong -> Hmong */
396 {"hmh", {HB_TAG('H','M','N',' ')}}, /* Southwestern Huishui Hmong -> Hmong */
397 {"hmi", {HB_TAG('H','M','N',' ')}}, /* Northern Huishui Hmong -> Hmong */
398 {"hmj", {HB_TAG('H','M','N',' ')}}, /* Ge -> Hmong */
399 {"hml", {HB_TAG('H','M','N',' ')}}, /* Luopohe Hmong -> Hmong */
400 {"hmm", {HB_TAG('H','M','N',' ')}}, /* Central Mashan Hmong -> Hmong */
401 {"hmn", {HB_TAG('H','M','N',' ')}}, /* Hmong [macrolanguage] */
402 {"hmp", {HB_TAG('H','M','N',' ')}}, /* Northern Mashan Hmong -> Hmong */
403 {"hmq", {HB_TAG('H','M','N',' ')}}, /* Eastern Qiandong Miao -> Hmong */
404 {"hms", {HB_TAG('H','M','N',' ')}}, /* Southern Qiandong Miao -> Hmong */
405 {"hmw", {HB_TAG('H','M','N',' ')}}, /* Western Mashan Hmong -> Hmong */
406 {"hmy", {HB_TAG('H','M','N',' ')}}, /* Southern Guiyang Hmong -> Hmong */
407 {"hmz", {HB_TAG('H','M','N',' ')}}, /* Hmong Shua -> Hmong */
408 {"hnd", {HB_TAG('H','N','D',' ')}}, /* Southern Hindko -> Hindko */
409 {"hne", {HB_TAG('C','H','H',' ')}}, /* Chhattisgarhi -> Chattisgarhi */
410 {"hnj", {HB_TAG('H','M','N',' ')}}, /* Hmong Njua -> Hmong */
411 {"hno", {HB_TAG('H','N','D',' ')}}, /* Northern Hindko -> Hindko */
412 {"ho", {HB_TAG('H','M','O',' ')}}, /* Hiri Motu */
413 {"hoc", {HB_TAG('H','O',' ',' ')}}, /* Ho */
414 {"hoi", {HB_TAG('A','T','H',' ')}}, /* Holikachuk -> Athapaskan */
415 {"hoj", {HB_TAG('H','A','R',' ')}}, /* Hadothi -> Harauti */
416 {"hr", {HB_TAG('H','R','V',' ')}}, /* Croatian */
417 {"hrm", {HB_TAG('H','M','N',' ')}}, /* Horned Miao -> Hmong */
418 {"hsb", {HB_TAG('U','S','B',' ')}}, /* Upper Sorbian */
419 {"hsn", {HB_TAG('Z','H','S',' ')}}, /* Xiang Chinese -> Chinese Simplified */
420 {"ht", {HB_TAG('H','A','I',' ')}}, /* Haitian (Haitian Creole) */
421 {"hu", {HB_TAG('H','U','N',' ')}}, /* Hungarian */
422 {"huj", {HB_TAG('H','M','N',' ')}}, /* Northern Guiyang Hmong -> Hmong */
423 {"hup", {HB_TAG('A','T','H',' ')}}, /* Hupa -> Athapaskan */
424 {"hy", {HB_TAG('H','Y','E','0'), /* Armenian -> Armenian East */
425 HB_TAG('H','Y','E',' ')}}, /* Armenian */
426 {"hyw", {HB_TAG('H','Y','E',' ')}}, /* Western Armenian -> Armenian */
427 {"hz", {HB_TAG('H','E','R',' ')}}, /* Herero */
428 {"ia", {HB_TAG('I','N','A',' ')}}, /* Interlingua (International Auxiliary Language Association) */
429 {"iba", {HB_TAG('I','B','A',' ')}}, /* Iban */
430 {"ibb", {HB_TAG('I','B','B',' ')}}, /* Ibibio */
431 {"id", {HB_TAG('I','N','D',' ')}}, /* Indonesian */
432 {"ida", {HB_TAG('L','U','H',' ')}}, /* Idakho-Isukha-Tiriki -> Luyia */
433 {"ie", {HB_TAG('I','L','E',' ')}}, /* Interlingue */
434 {"ig", {HB_TAG('I','B','O',' ')}}, /* Igbo */
435 {"igb", {HB_TAG('E','B','I',' ')}}, /* Ebira */
436 {"ii", {HB_TAG('Y','I','M',' ')}}, /* Sichuan Yi -> Yi Modern */
437 {"ijc", {HB_TAG('I','J','O',' ')}}, /* Izon -> Ijo */
438 {"ijo", {HB_TAG('I','J','O',' ')}}, /* Ijo [family] */
439 {"ik", {HB_TAG('I','P','K',' ')}}, /* Inupiaq [macrolanguage] -> Inupiat */
440 {"ike", {HB_TAG('I','N','U',' ')}}, /* Eastern Canadian Inuktitut -> Inuktitut */
441 {"ikt", {HB_TAG('I','N','U',' ')}}, /* Inuinnaqtun -> Inuktitut */
442 {"ilo", {HB_TAG('I','L','O',' ')}}, /* Iloko -> Ilokano */
443 {"in", {HB_TAG('I','N','D',' ')}}, /* Indonesian (retired code) */
444 {"ing", {HB_TAG('A','T','H',' ')}}, /* Degexit'an -> Athapaskan */
445 {"inh", {HB_TAG('I','N','G',' ')}}, /* Ingush */
446 {"io", {HB_TAG('I','D','O',' ')}}, /* Ido */
447 {"is", {HB_TAG('I','S','L',' ')}}, /* Icelandic */
448 {"it", {HB_TAG('I','T','A',' ')}}, /* Italian */
449 {"iu", {HB_TAG('I','N','U',' ')}}, /* Inuktitut [macrolanguage] */
450 {"iw", {HB_TAG('I','W','R',' ')}}, /* Hebrew (retired code) */
451 {"ja", {HB_TAG('J','A','N',' ')}}, /* Japanese */
452 {"jak", {HB_TAG('M','L','Y',' ')}}, /* Jakun -> Malay */
453 {"jam", {HB_TAG('J','A','M',' ')}}, /* Jamaican Creole English -> Jamaican Creole */
454 {"jax", {HB_TAG('M','L','Y',' ')}}, /* Jambi Malay -> Malay */
455 {"jbo", {HB_TAG('J','B','O',' ')}}, /* Lojban */
456 {"jct", {HB_TAG('J','C','T',' ')}}, /* Krymchak */
457 {"ji", {HB_TAG('J','I','I',' ')}}, /* Yiddish (retired code) */
458 {"jv", {HB_TAG('J','A','V',' ')}}, /* Javanese */
459 {"jw", {HB_TAG('J','A','V',' ')}}, /* Javanese (retired code) */
460 {"ka", {HB_TAG('K','A','T',' ')}}, /* Georgian */
461 {"kaa", {HB_TAG('K','R','K',' ')}}, /* Kara-Kalpak -> Karakalpak */
462 {"kab", {HB_TAG('K','A','B','0')}}, /* Kabyle */
463 {"kam", {HB_TAG('K','M','B',' ')}}, /* Kamba (Kenya) */
464 {"kar", {HB_TAG('K','R','N',' ')}}, /* Karen [family] */
465 {"kbd", {HB_TAG('K','A','B',' ')}}, /* Kabardian */
466 {"kby", {HB_TAG('K','N','R',' ')}}, /* Manga Kanuri -> Kanuri */
467 {"kca", {HB_TAG('K','H','K',' '), /* Khanty -> Khanty-Kazim */
468 HB_TAG('K','H','S',' '), /* Khanty -> Khanty-Shurishkar */
469 HB_TAG('K','H','V',' ')}}, /* Khanty -> Khanty-Vakhi */
470 {"kde", {HB_TAG('K','D','E',' ')}}, /* Makonde */
471 {"kdr", {HB_TAG('K','R','M',' ')}}, /* Karaim */
472 {"kdt", {HB_TAG('K','U','Y',' ')}}, /* Kuy */
473 {"kea", {HB_TAG('K','E','A',' ')}}, /* Kabuverdianu (Crioulo) */
474 {"kek", {HB_TAG('K','E','K',' ')}}, /* Kekchi */
475 {"kex", {HB_TAG('K','K','N',' ')}}, /* Kukna -> Kokni */
476 {"kfa", {HB_TAG('K','O','D',' ')}}, /* Kodava -> Kodagu */
477 {"kfr", {HB_TAG('K','A','C',' ')}}, /* Kachhi -> Kachchi */
478 {"kfx", {HB_TAG('K','U','L',' ')}}, /* Kullu Pahari -> Kulvi */
479 {"kfy", {HB_TAG('K','M','N',' ')}}, /* Kumaoni */
480 {"kg", {HB_TAG('K','O','N','0')}}, /* Kongo [macrolanguage] */
481 {"kha", {HB_TAG('K','S','I',' ')}}, /* Khasi */
482 {"khb", {HB_TAG('X','B','D',' ')}}, /* Lü */
483 {"khk", {HB_TAG('M','N','G',' ')}}, /* Halh Mongolian -> Mongolian */
484 {"kht", {HB_TAG('K','H','N',' '), /* Khamti -> Khamti Shan (Microsoft fonts) */
485 HB_TAG('K','H','T',' ')}}, /* Khamti -> Khamti Shan (OpenType spec and SIL fonts) */
486 {"khw", {HB_TAG('K','H','W',' ')}}, /* Khowar */
487 {"ki", {HB_TAG('K','I','K',' ')}}, /* Kikuyu (Gikuyu) */
488 {"kiu", {HB_TAG('K','I','U',' ')}}, /* Kirmanjki */
489 {"kj", {HB_TAG('K','U','A',' ')}}, /* Kuanyama */
490 {"kjd", {HB_TAG('K','J','D',' ')}}, /* Southern Kiwai */
491 {"kjh", {HB_TAG('K','H','A',' ')}}, /* Khakas -> Khakass */
492 {"kjp", {HB_TAG('K','J','P',' ')}}, /* Pwo Eastern Karen -> Eastern Pwo Karen */
493 {"kjz", {HB_TAG('K','J','Z',' ')}}, /* Bumthangkha */
494 {"kk", {HB_TAG('K','A','Z',' ')}}, /* Kazakh */
495 {"kkz", {HB_TAG('A','T','H',' ')}}, /* Kaska -> Athapaskan */
496 {"kl", {HB_TAG('G','R','N',' ')}}, /* Greenlandic */
497 {"kln", {HB_TAG('K','A','L',' ')}}, /* Kalenjin [macrolanguage] */
498 {"km", {HB_TAG('K','H','M',' ')}}, /* Khmer */
499 {"kmb", {HB_TAG('M','B','N',' ')}}, /* Kimbundu -> Mbundu */
500 {"kmr", {HB_TAG('K','U','R',' ')}}, /* Northern Kurdish -> Kurdish */
501 {"kmw", {HB_TAG('K','M','O',' ')}}, /* Komo (Democratic Republic of Congo) */
502 {"kmz", {HB_TAG('K','M','Z',' ')}}, /* Khorasani Turkish -> Khorasani Turkic */
503 {"kn", {HB_TAG('K','A','N',' ')}}, /* Kannada */
504 {"knc", {HB_TAG('K','N','R',' ')}}, /* Central Kanuri -> Kanuri */
505 {"kng", {HB_TAG('K','O','N','0')}}, /* Koongo -> Kongo */
506 {"knn", {HB_TAG('K','O','K',' ')}}, /* Konkani */
507 {"ko", {HB_TAG('K','O','R',' ')}}, /* Korean */
508 {"koi", {HB_TAG('K','O','P',' ')}}, /* Komi-Permyak */
509 {"kok", {HB_TAG('K','O','K',' ')}}, /* Konkani [macrolanguage] */
510 {"kos", {HB_TAG('K','O','S',' ')}}, /* Kosraean */
511 {"koy", {HB_TAG('A','T','H',' ')}}, /* Koyukon -> Athapaskan */
512 {"kpe", {HB_TAG('K','P','L',' ')}}, /* Kpelle [macrolanguage] */
513 {"kpv", {HB_TAG('K','O','Z',' ')}}, /* Komi-Zyrian */
514 {"kpy", {HB_TAG('K','Y','K',' ')}}, /* Koryak */
515 {"kqs", {HB_TAG('K','I','S',' ')}}, /* Northern Kissi -> Kisii */
516 {"kqy", {HB_TAG('K','R','T',' ')}}, /* Koorete */
517 {"kr", {HB_TAG('K','N','R',' ')}}, /* Kanuri [macrolanguage] */
518 {"krc", {HB_TAG('K','A','R',' '), /* Karachay-Balkar -> Karachay */
519 HB_TAG('B','A','L',' ')}}, /* Karachay-Balkar -> Balkar */
520 {"kri", {HB_TAG('K','R','I',' ')}}, /* Krio */
521 {"krl", {HB_TAG('K','R','L',' ')}}, /* Karelian */
522 {"krt", {HB_TAG('K','N','R',' ')}}, /* Tumari Kanuri -> Kanuri */
523 {"kru", {HB_TAG('K','U','U',' ')}}, /* Kurukh */
524 {"ks", {HB_TAG('K','S','H',' ')}}, /* Kashmiri */
525 {"ksh", {HB_TAG('K','S','H','0')}}, /* Kölsch -> Ripuarian */
526 {"kss", {HB_TAG('K','I','S',' ')}}, /* Southern Kisi -> Kisii */
527 {"ksw", {HB_TAG('K','S','W',' ')}}, /* S’gaw Karen */
528 {"ktb", {HB_TAG('K','E','B',' ')}}, /* Kambaata -> Kebena */
529 {"ktu", {HB_TAG('K','O','N',' ')}}, /* Kituba (Democratic Republic of Congo) -> Kikongo */
530 {"ktw", {HB_TAG('A','T','H',' ')}}, /* Kato -> Athapaskan */
531 {"ku", {HB_TAG('K','U','R',' ')}}, /* Kurdish [macrolanguage] */
532 {"kum", {HB_TAG('K','U','M',' ')}}, /* Kumyk */
533 {"kuu", {HB_TAG('A','T','H',' ')}}, /* Upper Kuskokwim -> Athapaskan */
534 {"kv", {HB_TAG('K','O','M',' ')}}, /* Komi [macrolanguage] */
535 {"kvb", {HB_TAG('M','L','Y',' ')}}, /* Kubu -> Malay */
536 {"kvr", {HB_TAG('M','L','Y',' ')}}, /* Kerinci -> Malay */
537 {"kw", {HB_TAG('C','O','R',' ')}}, /* Cornish */
538 {"kwy", {HB_TAG('K','O','N','0')}}, /* San Salvador Kongo -> Kongo */
539 {"kxc", {HB_TAG('K','M','S',' ')}}, /* Konso -> Komso */
540 {"kxd", {HB_TAG('M','L','Y',' ')}}, /* Brunei -> Malay */
541 {"kxu", {HB_TAG('K','U','I',' ')}}, /* Kui (India) */
542 {"ky", {HB_TAG('K','I','R',' ')}}, /* Kirghiz (Kyrgyz) */
543 {"kyu", {HB_TAG('K','Y','U',' ')}}, /* Western Kayah */
544 {"la", {HB_TAG('L','A','T',' ')}}, /* Latin */
545 {"lad", {HB_TAG('J','U','D',' ')}}, /* Ladino */
546 {"lb", {HB_TAG('L','T','Z',' ')}}, /* Luxembourgish */
547 {"lbe", {HB_TAG('L','A','K',' ')}}, /* Lak */
548 {"lbj", {HB_TAG('L','D','K',' ')}}, /* Ladakhi */
549 {"lbl", {HB_TAG('B','I','K',' ')}}, /* Libon Bikol -> Bikol */
550 {"lce", {HB_TAG('M','L','Y',' ')}}, /* Loncong -> Malay */
551 {"lcf", {HB_TAG('M','L','Y',' ')}}, /* Lubu -> Malay */
552 {"ldi", {HB_TAG('K','O','N','0')}}, /* Laari -> Kongo */
553 {"lez", {HB_TAG('L','E','Z',' ')}}, /* Lezghian -> Lezgi */
554 {"lg", {HB_TAG('L','U','G',' ')}}, /* Ganda */
555 {"li", {HB_TAG('L','I','M',' ')}}, /* Limburgish */
556 {"lif", {HB_TAG('L','M','B',' ')}}, /* Limbu */
557 {"lij", {HB_TAG('L','I','J',' ')}}, /* Ligurian */
558 {"lis", {HB_TAG('L','I','S',' ')}}, /* Lisu */
559 {"liw", {HB_TAG('M','L','Y',' ')}}, /* Col -> Malay */
560 {"ljp", {HB_TAG('L','J','P',' ')}}, /* Lampung Api -> Lampung */
561 {"lkb", {HB_TAG('L','U','H',' ')}}, /* Kabras -> Luyia */
562 {"lki", {HB_TAG('L','K','I',' ')}}, /* Laki */
563 {"lko", {HB_TAG('L','U','H',' ')}}, /* Khayo -> Luyia */
564 {"lks", {HB_TAG('L','U','H',' ')}}, /* Kisa -> Luyia */
565 {"lld", {HB_TAG('L','A','D',' ')}}, /* Ladin */
566 {"lmn", {HB_TAG('L','A','M',' ')}}, /* Lambadi -> Lambani */
567 {"lmo", {HB_TAG('L','M','O',' ')}}, /* Lombard */
568 {"ln", {HB_TAG('L','I','N',' ')}}, /* Lingala */
569 {"lo", {HB_TAG('L','A','O',' ')}}, /* Lao */
570 {"lom", {HB_TAG('L','O','M',' ')}}, /* Loma (Liberia) */
571 {"lrc", {HB_TAG('L','R','C',' ')}}, /* Northern Luri -> Luri */
572 {"lri", {HB_TAG('L','U','H',' ')}}, /* Marachi -> Luyia */
573 {"lrm", {HB_TAG('L','U','H',' ')}}, /* Marama -> Luyia */
574 {"lsm", {HB_TAG('L','U','H',' ')}}, /* Saamia -> Luyia */
575 {"lt", {HB_TAG('L','T','H',' ')}}, /* Lithuanian */
576 {"ltg", {HB_TAG('L','V','I',' ')}}, /* Latgalian -> Latvian */
577 {"lto", {HB_TAG('L','U','H',' ')}}, /* Tsotso -> Luyia */
578 {"lts", {HB_TAG('L','U','H',' ')}}, /* Tachoni -> Luyia */
579 {"lu", {HB_TAG('L','U','B',' ')}}, /* Luba-Katanga */
580 {"lua", {HB_TAG('L','U','A',' ')}}, /* Luba-Lulua */
581 {"luo", {HB_TAG('L','U','O',' ')}}, /* Luo (Kenya and Tanzania) */
582 {"lus", {HB_TAG('M','I','Z',' ')}}, /* Lushai -> Mizo */
583 {"luy", {HB_TAG('L','U','H',' ')}}, /* Luyia [macrolanguage] */
584 {"luz", {HB_TAG('L','R','C',' ')}}, /* Southern Luri -> Luri */
585 {"lv", {HB_TAG('L','V','I',' ')}}, /* Latvian [macrolanguage] */
586 {"lvs", {HB_TAG('L','V','I',' ')}}, /* Standard Latvian -> Latvian */
587 {"lwg", {HB_TAG('L','U','H',' ')}}, /* Wanga -> Luyia */
588 {"lzh", {HB_TAG('Z','H','T',' ')}}, /* Literary Chinese -> Chinese Traditional */
589 {"lzz", {HB_TAG('L','A','Z',' ')}}, /* Laz */
590 {"mad", {HB_TAG('M','A','D',' ')}}, /* Madurese -> Madura */
591 {"mag", {HB_TAG('M','A','G',' ')}}, /* Magahi */
592 {"mai", {HB_TAG('M','T','H',' ')}}, /* Maithili */
593 {"mak", {HB_TAG('M','K','R',' ')}}, /* Makasar */
594 {"mam", {HB_TAG('M','A','M',' ')}}, /* Mam */
595 {"man", {HB_TAG('M','N','K',' ')}}, /* Mandingo [macrolanguage] -> Maninka */
596 {"max", {HB_TAG('M','L','Y',' ')}}, /* North Moluccan Malay -> Malay */
597 {"mbo", {HB_TAG('M','B','O',' ')}}, /* Mbo (Cameroon) */
598 {"mct", {HB_TAG('B','T','I',' ')}}, /* Mengisa -> Beti */
599 {"mdf", {HB_TAG('M','O','K',' ')}}, /* Moksha */
600 {"mdr", {HB_TAG('M','D','R',' ')}}, /* Mandar */
601 {"mdy", {HB_TAG('M','L','E',' ')}}, /* Male (Ethiopia) */
602 {"men", {HB_TAG('M','D','E',' ')}}, /* Mende (Sierra Leone) */
603 {"meo", {HB_TAG('M','L','Y',' ')}}, /* Kedah Malay -> Malay */
604 {"mer", {HB_TAG('M','E','R',' ')}}, /* Meru */
605 {"mfa", {HB_TAG('M','F','A',' ')}}, /* Pattani Malay */
606 {"mfb", {HB_TAG('M','L','Y',' ')}}, /* Bangka -> Malay */
607 {"mfe", {HB_TAG('M','F','E',' ')}}, /* Morisyen */
608 {"mg", {HB_TAG('M','L','G',' ')}}, /* Malagasy [macrolanguage] */
609 {"mh", {HB_TAG('M','A','H',' ')}}, /* Marshallese */
610 {"mhr", {HB_TAG('L','M','A',' ')}}, /* Eastern Mari -> Low Mari */
611 {"mhv", {HB_TAG('A','R','K',' ')}}, /* Arakanese (retired code) -> Rakhine */
612 {"mi", {HB_TAG('M','R','I',' ')}}, /* Maori */
613 {"min", {HB_TAG('M','I','N',' ')}}, /* Minangkabau */
614 {"mk", {HB_TAG('M','K','D',' ')}}, /* Macedonian */
615 {"mku", {HB_TAG('M','N','K',' ')}}, /* Konyanka Maninka -> Maninka */
616 {"mkw", {HB_TAG('M','K','W',' ')}}, /* Kituba (Congo) */
617 {"ml", {HB_TAG('M','A','L',' '), /* Malayalam -> Malayalam Traditional */
618 HB_TAG('M','L','R',' ')}}, /* Malayalam -> Malayalam Reformed */
619 {"mlq", {HB_TAG('M','L','N',' '), /* Western Maninkakan -> Malinke */
620 HB_TAG('M','N','K',' ')}}, /* Western Maninkakan -> Maninka */
621 {"mmr", {HB_TAG('H','M','N',' ')}}, /* Western Xiangxi Miao -> Hmong */
622 {"mn", {HB_TAG('M','N','G',' ')}}, /* Mongolian [macrolanguage] */
623 {"mnc", {HB_TAG('M','C','H',' ')}}, /* Manchu */
624 {"mni", {HB_TAG('M','N','I',' ')}}, /* Manipuri */
625 {"mnk", {HB_TAG('M','N','D',' '), /* Mandinka */
626 HB_TAG('M','N','K',' ')}}, /* Mandinka -> Maninka */
627 {"mnp", {HB_TAG('Z','H','S',' ')}}, /* Min Bei Chinese -> Chinese Simplified */
628 {"mns", {HB_TAG('M','A','N',' ')}}, /* Mansi */
629 {"mnw", {HB_TAG('M','O','N',' ')}}, /* Mon */
630 {"mo", {HB_TAG('M','O','L',' ')}}, /* Moldavian (retired code) */
631 {"moh", {HB_TAG('M','O','H',' ')}}, /* Mohawk */
632 {"mos", {HB_TAG('M','O','S',' ')}}, /* Mossi */
633 {"mpe", {HB_TAG('M','A','J',' ')}}, /* Majang */
634 {"mqg", {HB_TAG('M','L','Y',' ')}}, /* Kota Bangun Kutai Malay -> Malay */
635 {"mr", {HB_TAG('M','A','R',' ')}}, /* Marathi */
636 {"mrh", {HB_TAG('Q','I','N',' ')}}, /* Mara Chin -> Chin */
637 {"mrj", {HB_TAG('H','M','A',' ')}}, /* Western Mari -> High Mari */
638 {"ms", {HB_TAG('M','L','Y',' ')}}, /* Malay [macrolanguage] */
639 {"msc", {HB_TAG('M','N','K',' ')}}, /* Sankaran Maninka -> Maninka */
640 {"msh", {HB_TAG('M','L','G',' ')}}, /* Masikoro Malagasy -> Malagasy */
641 {"msi", {HB_TAG('M','L','Y',' ')}}, /* Sabah Malay -> Malay */
642 {"mt", {HB_TAG('M','T','S',' ')}}, /* Maltese */
643 {"mtr", {HB_TAG('M','A','W',' ')}}, /* Mewari -> Marwari */
644 {"mui", {HB_TAG('M','L','Y',' ')}}, /* Musi -> Malay */
645 {"mup", {HB_TAG('R','A','J',' ')}}, /* Malvi -> Rajasthani */
646 {"muq", {HB_TAG('H','M','N',' ')}}, /* Eastern Xiangxi Miao -> Hmong */
647 {"mus", {HB_TAG('M','U','S',' ')}}, /* Creek -> Muscogee */
648 {"mvb", {HB_TAG('A','T','H',' ')}}, /* Mattole -> Athapaskan */
649 {"mve", {HB_TAG('M','A','W',' ')}}, /* Marwari (Pakistan) */
650 {"mvf", {HB_TAG('M','N','G',' ')}}, /* Peripheral Mongolian -> Mongolian */
651 {"mwk", {HB_TAG('M','N','K',' ')}}, /* Kita Maninkakan -> Maninka */
652 {"mwl", {HB_TAG('M','W','L',' ')}}, /* Mirandese */
653 {"mwr", {HB_TAG('M','A','W',' ')}}, /* Marwari [macrolanguage] */
654 {"mww", {HB_TAG('M','W','W',' ')}}, /* Hmong Daw */
655 {"my", {HB_TAG('B','R','M',' ')}}, /* Burmese */
656 {"mym", {HB_TAG('M','E','N',' ')}}, /* Me'en */
657 {"myn", {HB_TAG('M','Y','N',' ')}}, /* Mayan [family] */
658 {"myq", {HB_TAG('M','N','K',' ')}}, /* Forest Maninka (retired code) -> Maninka */
659 {"myv", {HB_TAG('E','R','Z',' ')}}, /* Erzya */
660 {"mzn", {HB_TAG('M','Z','N',' ')}}, /* Mazanderani */
661 {"na", {HB_TAG('N','A','U',' ')}}, /* Nauru -> Nauruan */
662 {"nag", {HB_TAG('N','A','G',' ')}}, /* Naga Pidgin -> Naga-Assamese */
663 {"nah", {HB_TAG('N','A','H',' ')}}, /* Nahuatl [family] */
664 {"nan", {HB_TAG('Z','H','S',' ')}}, /* Min Nan Chinese -> Chinese Simplified */
665 {"nap", {HB_TAG('N','A','P',' ')}}, /* Neapolitan */
666 {"nb", {HB_TAG('N','O','R',' ')}}, /* Norwegian Bokmål -> Norwegian */
667 {"nd", {HB_TAG('N','D','B',' ')}}, /* North Ndebele -> Ndebele */
668 {"ndc", {HB_TAG('N','D','C',' ')}}, /* Ndau */
669 {"nds", {HB_TAG('N','D','S',' ')}}, /* Low Saxon */
670 {"ne", {HB_TAG('N','E','P',' ')}}, /* Nepali [macrolanguage] */
671 {"new", {HB_TAG('N','E','W',' ')}}, /* Newari */
672 {"ng", {HB_TAG('N','D','G',' ')}}, /* Ndonga */
673 {"nga", {HB_TAG('N','G','A',' ')}}, /* Ngbaka */
674 {"ngl", {HB_TAG('L','M','W',' ')}}, /* Lomwe */
675 {"ngo", {HB_TAG('S','X','T',' ')}}, /* Ngoni -> Sutu */
676 {"nhd", {HB_TAG('G','U','A',' ')}}, /* Chiripá -> Guarani */
677 {"niq", {HB_TAG('K','A','L',' ')}}, /* Nandi -> Kalenjin */
678 {"niu", {HB_TAG('N','I','U',' ')}}, /* Niuean */
679 {"niv", {HB_TAG('G','I','L',' ')}}, /* Gilyak */
680 {"njz", {HB_TAG('N','I','S',' ')}}, /* Nyishi -> Nisi */
681 {"nl", {HB_TAG('N','L','D',' ')}}, /* Dutch */
682 {"nle", {HB_TAG('L','U','H',' ')}}, /* East Nyala -> Luyia */
683 {"nn", {HB_TAG('N','Y','N',' ')}}, /* Norwegian Nynorsk (Nynorsk, Norwegian) */
684 {"no", {HB_TAG('N','O','R',' ')}}, /* Norwegian [macrolanguage] */
685 {"nod", {HB_TAG('N','T','A',' ')}}, /* Northern Thai -> Northern Tai */
686 {"noe", {HB_TAG('N','O','E',' ')}}, /* Nimadi */
687 {"nog", {HB_TAG('N','O','G',' ')}}, /* Nogai */
688 {"nov", {HB_TAG('N','O','V',' ')}}, /* Novial */
689 {"npi", {HB_TAG('N','E','P',' ')}}, /* Nepali */
690 {"nqo", {HB_TAG('N','K','O',' ')}}, /* N'Ko */
691 {"nr", {HB_TAG('N','D','B',' ')}}, /* South Ndebele -> Ndebele */
692 {"nsk", {HB_TAG('N','A','S',' ')}}, /* Naskapi */
693 {"nso", {HB_TAG('N','S','O',' ')}}, /* Pedi -> Sotho, Northern */
694 {"nv", {HB_TAG('N','A','V',' '), /* Navajo */
695 HB_TAG('A','T','H',' ')}}, /* Navajo -> Athapaskan */
696 {"ny", {HB_TAG('C','H','I',' ')}}, /* Chichewa (Chewa, Nyanja) */
697 {"nyd", {HB_TAG('L','U','H',' ')}}, /* Nyore -> Luyia */
698 {"nym", {HB_TAG('N','Y','M',' ')}}, /* Nyamwezi */
699 {"nyn", {HB_TAG('N','K','L',' ')}}, /* Nyankole */
700 {"nza", {HB_TAG('N','Z','A',' ')}}, /* Tigon Mbembe -> Mbembe Tigon */
701 {"oc", {HB_TAG('O','C','I',' ')}}, /* Occitan (post 1500) */
702 {"oj", {HB_TAG('O','J','B',' ')}}, /* Ojibwa [macrolanguage] -> Ojibway */
703 {"ojb", {HB_TAG('O','J','B',' ')}}, /* Northwestern Ojibwa -> Ojibway */
704 {"ojc", {HB_TAG('O','J','B',' ')}}, /* Central Ojibwa -> Ojibway */
705 {"ojg", {HB_TAG('O','J','B',' ')}}, /* Eastern Ojibwa -> Ojibway */
706 {"ojs", {HB_TAG('O','C','R',' ')}}, /* Severn Ojibwa -> Oji-Cree */
707 {"ojw", {HB_TAG('O','J','B',' ')}}, /* Western Ojibwa -> Ojibway */
708 {"oki", {HB_TAG('K','A','L',' ')}}, /* Okiek -> Kalenjin */
709 {"okm", {HB_TAG('K','O','H',' ')}}, /* Middle Korean (10th-16th cent.) -> Korean Old Hangul */
710 {"om", {HB_TAG('O','R','O',' ')}}, /* Oromo [macrolanguage] */
711 {"or", {HB_TAG('O','R','I',' ')}}, /* Odia (formerly Oriya) [macrolanguage] */
712 {"orc", {HB_TAG('O','R','O',' ')}}, /* Orma -> Oromo */
713 {"orn", {HB_TAG('M','L','Y',' ')}}, /* Orang Kanaq -> Malay */
714 {"ors", {HB_TAG('M','L','Y',' ')}}, /* Orang Seletar -> Malay */
715 {"ory", {HB_TAG('O','R','I',' ')}}, /* Odia (formerly Oriya) */
716 {"os", {HB_TAG('O','S','S',' ')}}, /* Ossetian */
717 {"otw", {HB_TAG('O','J','B',' ')}}, /* Ottawa -> Ojibway */
718 {"pa", {HB_TAG('P','A','N',' ')}}, /* Punjabi */
719 {"pag", {HB_TAG('P','A','G',' ')}}, /* Pangasinan */
720 {"pam", {HB_TAG('P','A','M',' ')}}, /* Pampanga -> Pampangan */
721 {"pap", {HB_TAG('P','A','P','0')}}, /* Papiamento -> Papiamentu */
722 {"pau", {HB_TAG('P','A','U',' ')}}, /* Palauan */
723 {"pbt", {HB_TAG('P','A','S',' ')}}, /* Southern Pashto -> Pashto */
724 {"pbu", {HB_TAG('P','A','S',' ')}}, /* Northern Pashto -> Pashto */
725 {"pcc", {HB_TAG('P','C','C',' ')}}, /* Bouyei */
726 {"pcd", {HB_TAG('P','C','D',' ')}}, /* Picard */
727 {"pce", {HB_TAG('P','L','G',' ')}}, /* Ruching Palaung -> Palaung */
728 {"pck", {HB_TAG('Q','I','N',' ')}}, /* Paite Chin -> Chin */
729 {"pdc", {HB_TAG('P','D','C',' ')}}, /* Pennsylvania German */
730 {"pel", {HB_TAG('M','L','Y',' ')}}, /* Pekal -> Malay */
731 {"pes", {HB_TAG('F','A','R',' ')}}, /* Iranian Persian -> Persian */
732 {"pga", {HB_TAG('A','R','A',' ')}}, /* Sudanese Creole Arabic -> Arabic */
733 {"phk", {HB_TAG('P','H','K',' ')}}, /* Phake */
734 {"pi", {HB_TAG('P','A','L',' ')}}, /* Pali */
735 {"pih", {HB_TAG('P','I','H',' ')}}, /* Pitcairn-Norfolk -> Norfolk */
736 {"pko", {HB_TAG('K','A','L',' ')}}, /* Pökoot -> Kalenjin */
737 {"pl", {HB_TAG('P','L','K',' ')}}, /* Polish */
738 {"pll", {HB_TAG('P','L','G',' ')}}, /* Shwe Palaung -> Palaung */
739 {"plp", {HB_TAG('P','A','P',' ')}}, /* Palpa */
740 {"plt", {HB_TAG('M','L','G',' ')}}, /* Plateau Malagasy -> Malagasy */
741 {"pms", {HB_TAG('P','M','S',' ')}}, /* Piemontese */
742 {"pnb", {HB_TAG('P','N','B',' ')}}, /* Western Panjabi */
743 {"poh", {HB_TAG('P','O','H',' ')}}, /* Poqomchi' -> Pocomchi */
744 {"pon", {HB_TAG('P','O','N',' ')}}, /* Pohnpeian */
745 {"ppa", {HB_TAG('B','A','G',' ')}}, /* Pao (retired code) -> Baghelkhandi */
746 {"pro", {HB_TAG('P','R','O',' ')}}, /* Old Provençal (to 1500) -> Provençal / Old Provençal */
747 {"prs", {HB_TAG('D','R','I',' ')}}, /* Dari */
748 {"ps", {HB_TAG('P','A','S',' ')}}, /* Pashto [macrolanguage] */
749 {"pse", {HB_TAG('M','L','Y',' ')}}, /* Central Malay -> Malay */
750 {"pst", {HB_TAG('P','A','S',' ')}}, /* Central Pashto -> Pashto */
751 {"pt", {HB_TAG('P','T','G',' ')}}, /* Portuguese */
752 {"pwo", {HB_TAG('P','W','O',' ')}}, /* Pwo Western Karen -> Western Pwo Karen */
753 {"qu", {HB_TAG('Q','U','Z',' ')}}, /* Quechua [macrolanguage] */
754 {"qub", {HB_TAG('Q','W','H',' ')}}, /* Huallaga Huánuco Quechua -> Quechua (Peru) */
755 {"quc", {HB_TAG('Q','U','C',' ')}}, /* K’iche’ */
756 {"qud", {HB_TAG('Q','V','I',' ')}}, /* Calderón Highland Quichua -> Quechua (Ecuador) */
757 {"quf", {HB_TAG('Q','U','Z',' ')}}, /* Lambayeque Quechua -> Quechua */
758 {"qug", {HB_TAG('Q','V','I',' ')}}, /* Chimborazo Highland Quichua -> Quechua (Ecuador) */
759 {"quh", {HB_TAG('Q','U','H',' ')}}, /* South Bolivian Quechua -> Quechua (Bolivia) */
760 {"quk", {HB_TAG('Q','U','Z',' ')}}, /* Chachapoyas Quechua -> Quechua */
761 {"qul", {HB_TAG('Q','U','Z',' ')}}, /* North Bolivian Quechua -> Quechua */
762 {"qup", {HB_TAG('Q','V','I',' ')}}, /* Southern Pastaza Quechua -> Quechua (Ecuador) */
763 {"qur", {HB_TAG('Q','W','H',' ')}}, /* Yanahuanca Pasco Quechua -> Quechua (Peru) */
764 {"qus", {HB_TAG('Q','U','H',' ')}}, /* Santiago del Estero Quichua -> Quechua (Bolivia) */
765 {"quw", {HB_TAG('Q','V','I',' ')}}, /* Tena Lowland Quichua -> Quechua (Ecuador) */
766 {"qux", {HB_TAG('Q','W','H',' ')}}, /* Yauyos Quechua -> Quechua (Peru) */
767 {"quy", {HB_TAG('Q','U','Z',' ')}}, /* Ayacucho Quechua -> Quechua */
768 {"quz", {HB_TAG('Q','U','Z',' ')}}, /* Cusco Quechua -> Quechua */
769 {"qva", {HB_TAG('Q','W','H',' ')}}, /* Ambo-Pasco Quechua -> Quechua (Peru) */
770 {"qvc", {HB_TAG('Q','U','Z',' ')}}, /* Cajamarca Quechua -> Quechua */
771 {"qve", {HB_TAG('Q','U','Z',' ')}}, /* Eastern Apurímac Quechua -> Quechua */
772 {"qvh", {HB_TAG('Q','W','H',' ')}}, /* Huamalíes-Dos de Mayo Huánuco Quechua -> Quechua (Peru) */
773 {"qvi", {HB_TAG('Q','V','I',' ')}}, /* Imbabura Highland Quichua -> Quechua (Ecuador) */
774 {"qvj", {HB_TAG('Q','V','I',' ')}}, /* Loja Highland Quichua -> Quechua (Ecuador) */
775 {"qvl", {HB_TAG('Q','W','H',' ')}}, /* Cajatambo North Lima Quechua -> Quechua (Peru) */
776 {"qvm", {HB_TAG('Q','W','H',' ')}}, /* Margos-Yarowilca-Lauricocha Quechua -> Quechua (Peru) */
777 {"qvn", {HB_TAG('Q','W','H',' ')}}, /* North Junín Quechua -> Quechua (Peru) */
778 {"qvo", {HB_TAG('Q','V','I',' ')}}, /* Napo Lowland Quechua -> Quechua (Ecuador) */
779 {"qvp", {HB_TAG('Q','W','H',' ')}}, /* Pacaraos Quechua -> Quechua (Peru) */
780 {"qvs", {HB_TAG('Q','U','Z',' ')}}, /* San Martín Quechua -> Quechua */
781 {"qvw", {HB_TAG('Q','W','H',' ')}}, /* Huaylla Wanca Quechua -> Quechua (Peru) */
782 {"qvz", {HB_TAG('Q','V','I',' ')}}, /* Northern Pastaza Quichua -> Quechua (Ecuador) */
783 {"qwa", {HB_TAG('Q','W','H',' ')}}, /* Corongo Ancash Quechua -> Quechua (Peru) */
784 {"qwc", {HB_TAG('Q','U','Z',' ')}}, /* Classical Quechua -> Quechua */
785 {"qwh", {HB_TAG('Q','W','H',' ')}}, /* Huaylas Ancash Quechua -> Quechua (Peru) */
786 {"qws", {HB_TAG('Q','W','H',' ')}}, /* Sihuas Ancash Quechua -> Quechua (Peru) */
787 {"qxa", {HB_TAG('Q','W','H',' ')}}, /* Chiquián Ancash Quechua -> Quechua (Peru) */
788 {"qxc", {HB_TAG('Q','W','H',' ')}}, /* Chincha Quechua -> Quechua (Peru) */
789 {"qxh", {HB_TAG('Q','W','H',' ')}}, /* Panao Huánuco Quechua -> Quechua (Peru) */
790 {"qxl", {HB_TAG('Q','V','I',' ')}}, /* Salasaca Highland Quichua -> Quechua (Ecuador) */
791 {"qxn", {HB_TAG('Q','W','H',' ')}}, /* Northern Conchucos Ancash Quechua -> Quechua (Peru) */
792 {"qxo", {HB_TAG('Q','W','H',' ')}}, /* Southern Conchucos Ancash Quechua -> Quechua (Peru) */
793 {"qxp", {HB_TAG('Q','U','Z',' ')}}, /* Puno Quechua -> Quechua */
794 {"qxr", {HB_TAG('Q','V','I',' ')}}, /* Cañar Highland Quichua -> Quechua (Ecuador) */
795 {"qxt", {HB_TAG('Q','W','H',' ')}}, /* Santa Ana de Tusi Pasco Quechua -> Quechua (Peru) */
796 {"qxu", {HB_TAG('Q','U','Z',' ')}}, /* Arequipa-La Unión Quechua -> Quechua */
797 {"qxw", {HB_TAG('Q','W','H',' ')}}, /* Jauja Wanca Quechua -> Quechua (Peru) */
798 {"rag", {HB_TAG('L','U','H',' ')}}, /* Logooli -> Luyia */
799 {"raj", {HB_TAG('R','A','J',' ')}}, /* Rajasthani [macrolanguage] */
800 {"rar", {HB_TAG('R','A','R',' ')}}, /* Rarotongan */
801 {"rbb", {HB_TAG('P','L','G',' ')}}, /* Rumai Palaung -> Palaung */
802 {"rbl", {HB_TAG('B','I','K',' ')}}, /* Miraya Bikol -> Bikol */
803 {"rej", {HB_TAG('R','E','J',' ')}}, /* Rejang */
804 {"ria", {HB_TAG('R','I','A',' ')}}, /* Riang (India) */
805 {"rif", {HB_TAG('R','I','F',' ')}}, /* Tarifit */
806 {"rit", {HB_TAG('R','I','T',' ')}}, /* Ritarungo */
807 {"rki", {HB_TAG('A','R','K',' ')}}, /* Rakhine */
808 {"rkw", {HB_TAG('R','K','W',' ')}}, /* Arakwal */
809 {"rm", {HB_TAG('R','M','S',' ')}}, /* Romansh */
810 {"rmc", {HB_TAG('R','O','Y',' ')}}, /* Carpathian Romani -> Romany */
811 {"rmf", {HB_TAG('R','O','Y',' ')}}, /* Kalo Finnish Romani -> Romany */
812 {"rml", {HB_TAG('R','O','Y',' ')}}, /* Baltic Romani -> Romany */
813 {"rmn", {HB_TAG('R','O','Y',' ')}}, /* Balkan Romani -> Romany */
814 {"rmo", {HB_TAG('R','O','Y',' ')}}, /* Sinte Romani -> Romany */
815 {"rmw", {HB_TAG('R','O','Y',' ')}}, /* Welsh Romani -> Romany */
816 {"rmy", {HB_TAG('R','M','Y',' ')}}, /* Vlax Romani */
817 {"rmz", {HB_TAG('A','R','K',' ')}}, /* Marma -> Rakhine */
818 {"rn", {HB_TAG('R','U','N',' ')}}, /* Rundi */
819 {"rnl", {HB_TAG('H','A','L',' ')}}, /* Ranglong -> Halam (Falam Chin) */
820 {"ro", {HB_TAG('R','O','M',' ')}}, /* Romanian */
821 {"rom", {HB_TAG('R','O','Y',' ')}}, /* Romany [macrolanguage] */
822 {"rtm", {HB_TAG('R','T','M',' ')}}, /* Rotuman */
823 {"ru", {HB_TAG('R','U','S',' ')}}, /* Russian */
824 {"rue", {HB_TAG('R','S','Y',' ')}}, /* Rusyn */
825 {"rup", {HB_TAG('R','U','P',' ')}}, /* Aromanian */
826 {"rw", {HB_TAG('R','U','A',' ')}}, /* Kinyarwanda */
827 {"rwr", {HB_TAG('M','A','W',' ')}}, /* Marwari (India) */
828 {"sa", {HB_TAG('S','A','N',' ')}}, /* Sanskrit */
829 {"sah", {HB_TAG('Y','A','K',' ')}}, /* Yakut -> Sakha */
830 {"sam", {HB_TAG('P','A','A',' ')}}, /* Samaritan Aramaic -> Palestinian Aramaic */
831 {"sas", {HB_TAG('S','A','S',' ')}}, /* Sasak */
832 {"sat", {HB_TAG('S','A','T',' ')}}, /* Santali */
833 {"sc", {HB_TAG('S','R','D',' ')}}, /* Sardinian [macrolanguage] */
834 {"sck", {HB_TAG('S','A','D',' ')}}, /* Sadri */
835 {"scn", {HB_TAG('S','C','N',' ')}}, /* Sicilian */
836 {"sco", {HB_TAG('S','C','O',' ')}}, /* Scots */
837 {"scs", {HB_TAG('S','C','S',' '), /* North Slavey */
838 HB_TAG('S','L','A',' '), /* North Slavey -> Slavey */
839 HB_TAG('A','T','H',' ')}}, /* North Slavey -> Athapaskan */
840 {"sd", {HB_TAG('S','N','D',' ')}}, /* Sindhi */
841 {"sdc", {HB_TAG('S','R','D',' ')}}, /* Sassarese Sardinian -> Sardinian */
842 {"sdh", {HB_TAG('K','U','R',' ')}}, /* Southern Kurdish -> Kurdish */
843 {"sdn", {HB_TAG('S','R','D',' ')}}, /* Gallurese Sardinian -> Sardinian */
844 {"se", {HB_TAG('N','S','M',' ')}}, /* Northern Sami */
845 {"seh", {HB_TAG('S','N','A',' ')}}, /* Sena */
846 {"sek", {HB_TAG('A','T','H',' ')}}, /* Sekani -> Athapaskan */
847 {"sel", {HB_TAG('S','E','L',' ')}}, /* Selkup */
848 {"sez", {HB_TAG('Q','I','N',' ')}}, /* Senthang Chin -> Chin */
849 {"sfm", {HB_TAG('H','M','N',' ')}}, /* Small Flowery Miao -> Hmong */
850 {"sg", {HB_TAG('S','G','O',' ')}}, /* Sango */
851 {"sga", {HB_TAG('S','G','A',' ')}}, /* Old Irish (to 900) */
852 {"sgc", {HB_TAG('K','A','L',' ')}}, /* Kipsigis -> Kalenjin */
853 {"sgs", {HB_TAG('S','G','S',' ')}}, /* Samogitian */
854 {"sgw", {HB_TAG('C','H','G',' '), /* Sebat Bet Gurage -> Chaha Gurage */
855 HB_TAG('S','G','W',' ')}}, /* Sebat Bet Gurage -> Chaha Gurage (SIL fonts) */
856 {"shi", {HB_TAG('S','H','I',' ')}}, /* Tachelhit */
857 {"shn", {HB_TAG('S','H','N',' ')}}, /* Shan */
858 {"shu", {HB_TAG('A','R','A',' ')}}, /* Chadian Arabic -> Arabic */
859 {"si", {HB_TAG('S','N','H',' ')}}, /* Sinhala (Sinhalese) */
860 {"sid", {HB_TAG('S','I','D',' ')}}, /* Sidamo */
861 {"sjd", {HB_TAG('K','S','M',' ')}}, /* Kildin Sami */
862 {"sjo", {HB_TAG('S','I','B',' ')}}, /* Xibe -> Sibe */
863 {"sk", {HB_TAG('S','K','Y',' ')}}, /* Slovak */
864 {"skg", {HB_TAG('M','L','G',' ')}}, /* Sakalava Malagasy -> Malagasy */
865 {"skr", {HB_TAG('S','R','K',' ')}}, /* Saraiki */
866 {"sl", {HB_TAG('S','L','V',' ')}}, /* Slovenian */
867 {"sm", {HB_TAG('S','M','O',' ')}}, /* Samoan */
868 {"sma", {HB_TAG('S','S','M',' ')}}, /* Southern Sami */
869 {"smj", {HB_TAG('L','S','M',' ')}}, /* Lule Sami */
870 {"smn", {HB_TAG('I','S','M',' ')}}, /* Inari Sami */
871 {"sms", {HB_TAG('S','K','S',' ')}}, /* Skolt Sami */
872 {"sn", {HB_TAG('S','N','A','0')}}, /* Shona */
873 {"snk", {HB_TAG('S','N','K',' ')}}, /* Soninke */
874 {"so", {HB_TAG('S','M','L',' ')}}, /* Somali */
875 {"sop", {HB_TAG('S','O','P',' ')}}, /* Songe */
876 {"spv", {HB_TAG('O','R','I',' ')}}, /* Sambalpuri -> Odia (formerly Oriya) */
877 {"spy", {HB_TAG('K','A','L',' ')}}, /* Sabaot -> Kalenjin */
878 {"sq", {HB_TAG('S','Q','I',' ')}}, /* Albanian [macrolanguage] */
879 {"sr", {HB_TAG('S','R','B',' ')}}, /* Serbian */
880 {"src", {HB_TAG('S','R','D',' ')}}, /* Logudorese Sardinian -> Sardinian */
881 {"sro", {HB_TAG('S','R','D',' ')}}, /* Campidanese Sardinian -> Sardinian */
882 {"srr", {HB_TAG('S','R','R',' ')}}, /* Serer */
883 {"srs", {HB_TAG('A','T','H',' ')}}, /* Sarsi -> Athapaskan */
884 {"ss", {HB_TAG('S','W','Z',' ')}}, /* Swati */
885 {"ssh", {HB_TAG('A','R','A',' ')}}, /* Shihhi Arabic -> Arabic */
886 {"st", {HB_TAG('S','O','T',' ')}}, /* Southern Sotho -> Sotho, Southern */
887 {"stq", {HB_TAG('S','T','Q',' ')}}, /* Saterfriesisch -> Saterland Frisian */
888 {"stv", {HB_TAG('S','I','G',' ')}}, /* Silt'e -> Silte Gurage */
889 {"su", {HB_TAG('S','U','N',' ')}}, /* Sundanese */
890 {"suk", {HB_TAG('S','U','K',' ')}}, /* Sukuma */
891 {"suq", {HB_TAG('S','U','R',' ')}}, /* Suri */
892 {"sv", {HB_TAG('S','V','E',' ')}}, /* Swedish */
893 {"sva", {HB_TAG('S','V','A',' ')}}, /* Svan */
894 {"sw", {HB_TAG('S','W','K',' ')}}, /* Swahili [macrolanguage] */
895 {"swb", {HB_TAG('C','M','R',' ')}}, /* Maore Comorian -> Comorian */
896 {"swc", {HB_TAG('S','W','K',' ')}}, /* Congo Swahili -> Swahili */
897 {"swh", {HB_TAG('S','W','K',' ')}}, /* Swahili */
898 {"swv", {HB_TAG('M','A','W',' ')}}, /* Shekhawati -> Marwari */
899 {"sxu", {HB_TAG('S','X','U',' ')}}, /* Upper Saxon */
900 {"syc", {HB_TAG('S','Y','R',' ')}}, /* Classical Syriac -> Syriac */
901 {"syl", {HB_TAG('S','Y','L',' ')}}, /* Sylheti */
902 {"syr", {HB_TAG('S','Y','R',' ')}}, /* Syriac [macrolanguage] */
903 {"szl", {HB_TAG('S','Z','L',' ')}}, /* Silesian */
904 {"ta", {HB_TAG('T','A','M',' ')}}, /* Tamil */
905 {"taa", {HB_TAG('A','T','H',' ')}}, /* Lower Tanana -> Athapaskan */
906 {"tab", {HB_TAG('T','A','B',' ')}}, /* Tabassaran -> Tabasaran */
907 {"taq", {HB_TAG('T','M','H',' ')}}, /* Tamasheq -> Tamashek */
908 {"tau", {HB_TAG('A','T','H',' ')}}, /* Upper Tanana -> Athapaskan */
909 {"tcb", {HB_TAG('A','T','H',' ')}}, /* Tanacross -> Athapaskan */
910 {"tce", {HB_TAG('A','T','H',' ')}}, /* Southern Tutchone -> Athapaskan */
911 {"tcp", {HB_TAG('Q','I','N',' ')}}, /* Tawr Chin -> Chin */
912 {"tcy", {HB_TAG('T','U','L',' ')}}, /* Tulu -> Tumbuka */
913 {"tcz", {HB_TAG('Q','I','N',' ')}}, /* Thado Chin -> Chin */
914 {"tdd", {HB_TAG('T','D','D',' ')}}, /* Tai Nüa -> Dehong Dai */
915 {"tdx", {HB_TAG('M','L','G',' ')}}, /* Tandroy-Mahafaly Malagasy -> Malagasy */
916 {"te", {HB_TAG('T','E','L',' ')}}, /* Telugu */
917 {"tec", {HB_TAG('K','A','L',' ')}}, /* Terik -> Kalenjin */
918 {"tem", {HB_TAG('T','M','N',' ')}}, /* Timne -> Temne */
919 {"tet", {HB_TAG('T','E','T',' ')}}, /* Tetum */
920 {"tfn", {HB_TAG('A','T','H',' ')}}, /* Tanaina -> Athapaskan */
921 {"tg", {HB_TAG('T','A','J',' ')}}, /* Tajik -> Tajiki */
922 {"tgj", {HB_TAG('N','I','S',' ')}}, /* Tagin -> Nisi */
923 {"tgx", {HB_TAG('A','T','H',' ')}}, /* Tagish -> Athapaskan */
924 {"th", {HB_TAG('T','H','A',' ')}}, /* Thai */
925 {"tht", {HB_TAG('A','T','H',' ')}}, /* Tahltan -> Athapaskan */
926 {"thv", {HB_TAG('T','M','H',' ')}}, /* Tahaggart Tamahaq -> Tamashek */
927 {"thz", {HB_TAG('T','M','H',' ')}}, /* Tayart Tamajeq -> Tamashek */
928 {"ti", {HB_TAG('T','G','Y',' ')}}, /* Tigrinya */
929 {"tig", {HB_TAG('T','G','R',' ')}}, /* Tigre */
930 {"tiv", {HB_TAG('T','I','V',' ')}}, /* Tiv */
931 {"tk", {HB_TAG('T','K','M',' ')}}, /* Turkmen */
932 {"tkg", {HB_TAG('M','L','G',' ')}}, /* Tesaka Malagasy -> Malagasy */
933 {"tl", {HB_TAG('T','G','L',' ')}}, /* Tagalog */
934 {"tmh", {HB_TAG('T','M','H',' ')}}, /* Tamashek [macrolanguage] */
935 {"tmw", {HB_TAG('M','L','Y',' ')}}, /* Temuan -> Malay */
936 {"tn", {HB_TAG('T','N','A',' ')}}, /* Tswana */
937 {"tnf", {HB_TAG('D','R','I',' ')}}, /* Tangshewi (retired code) -> Dari */
938 {"to", {HB_TAG('T','G','N',' ')}}, /* Tonga (Tonga Islands) -> Tongan */
939 {"tod", {HB_TAG('T','O','D','0')}}, /* Toma */
940 {"toi", {HB_TAG('T','N','G',' ')}}, /* Tonga (Zambia) */
941 {"tol", {HB_TAG('A','T','H',' ')}}, /* Tolowa -> Athapaskan */
942 {"tpi", {HB_TAG('T','P','I',' ')}}, /* Tok Pisin */
943 {"tr", {HB_TAG('T','R','K',' ')}}, /* Turkish */
944 {"tru", {HB_TAG('T','U','A',' '), /* Turoyo -> Turoyo Aramaic */
945 HB_TAG('S','Y','R',' ')}}, /* Turoyo -> Syriac */
946 {"ts", {HB_TAG('T','S','G',' ')}}, /* Tsonga */
947 {"tsj", {HB_TAG('T','S','J',' ')}}, /* Tshangla */
948 {"tt", {HB_TAG('T','A','T',' ')}}, /* Tatar */
949 {"ttm", {HB_TAG('A','T','H',' ')}}, /* Northern Tutchone -> Athapaskan */
950 {"ttq", {HB_TAG('T','M','H',' ')}}, /* Tawallammat Tamajaq -> Tamashek */
951 {"tum", {HB_TAG('T','U','M',' ')}}, /* Tumbuka -> Tulu */
952 {"tuu", {HB_TAG('A','T','H',' ')}}, /* Tututni -> Athapaskan */
953 {"tuy", {HB_TAG('K','A','L',' ')}}, /* Tugen -> Kalenjin */
954 {"tvl", {HB_TAG('T','V','L',' ')}}, /* Tuvalu */
955 {"tw", {HB_TAG('T','W','I',' '), /* Twi */
956 HB_TAG('A','K','A',' ')}}, /* Twi -> Akan */
957 {"txc", {HB_TAG('A','T','H',' ')}}, /* Tsetsaut -> Athapaskan */
958 {"txy", {HB_TAG('M','L','G',' ')}}, /* Tanosy Malagasy -> Malagasy */
959 {"ty", {HB_TAG('T','H','T',' ')}}, /* Tahitian */
960 {"tyv", {HB_TAG('T','U','V',' ')}}, /* Tuvinian -> Tuvin */
961 {"tyz", {HB_TAG('T','Y','Z',' ')}}, /* Tày */
962 {"tzm", {HB_TAG('T','Z','M',' ')}}, /* Central Atlas Tamazight -> Tamazight */
963 {"tzo", {HB_TAG('T','Z','O',' ')}}, /* Tzotzil */
964 {"ubl", {HB_TAG('B','I','K',' ')}}, /* Buhi'non Bikol -> Bikol */
965 {"udm", {HB_TAG('U','D','M',' ')}}, /* Udmurt */
966 {"ug", {HB_TAG('U','Y','G',' ')}}, /* Uyghur */
967 {"uk", {HB_TAG('U','K','R',' ')}}, /* Ukrainian */
968 {"umb", {HB_TAG('U','M','B',' ')}}, /* Umbundu */
969 {"unr", {HB_TAG('M','U','N',' ')}}, /* Mundari */
970 {"ur", {HB_TAG('U','R','D',' ')}}, /* Urdu */
971 {"urk", {HB_TAG('M','L','Y',' ')}}, /* Urak Lawoi' -> Malay */
972 {"uz", {HB_TAG('U','Z','B',' ')}}, /* Uzbek [macrolanguage] */
973 {"uzn", {HB_TAG('U','Z','B',' ')}}, /* Northern Uzbek -> Uzbek */
974 {"uzs", {HB_TAG('U','Z','B',' ')}}, /* Southern Uzbek -> Uzbek */
975 {"ve", {HB_TAG('V','E','N',' ')}}, /* Venda */
976 {"vec", {HB_TAG('V','E','C',' ')}}, /* Venetian */
977 {"vi", {HB_TAG('V','I','T',' ')}}, /* Vietnamese */
978 {"vkk", {HB_TAG('M','L','Y',' ')}}, /* Kaur -> Malay */
979 {"vkt", {HB_TAG('M','L','Y',' ')}}, /* Tenggarong Kutai Malay -> Malay */
980 {"vls", {HB_TAG('F','L','E',' ')}}, /* Vlaams -> Dutch (Flemish) */
981 {"vmw", {HB_TAG('M','A','K',' ')}}, /* Makhuwa */
982 {"vo", {HB_TAG('V','O','L',' ')}}, /* Volapük */
983 {"vro", {HB_TAG('V','R','O',' ')}}, /* Võro */
984 {"wa", {HB_TAG('W','L','N',' ')}}, /* Walloon */
985 {"war", {HB_TAG('W','A','R',' ')}}, /* Waray (Philippines) -> Waray-Waray */
986 {"wbm", {HB_TAG('W','A',' ',' ')}}, /* Wa */
987 {"wbr", {HB_TAG('W','A','G',' ')}}, /* Wagdi */
988 {"wlc", {HB_TAG('C','M','R',' ')}}, /* Mwali Comorian -> Comorian */
989 {"wle", {HB_TAG('S','I','G',' ')}}, /* Wolane -> Silte Gurage */
990 {"wlk", {HB_TAG('A','T','H',' ')}}, /* Wailaki -> Athapaskan */
991 {"wni", {HB_TAG('C','M','R',' ')}}, /* Ndzwani Comorian -> Comorian */
992 {"wo", {HB_TAG('W','L','F',' ')}}, /* Wolof */
993 {"wry", {HB_TAG('M','A','W',' ')}}, /* Merwari -> Marwari */
994 {"wsg", {HB_TAG('G','O','N',' ')}}, /* Adilabad Gondi -> Gondi */
995 {"wtm", {HB_TAG('W','T','M',' ')}}, /* Mewati */
996 {"wuu", {HB_TAG('Z','H','S',' ')}}, /* Wu Chinese -> Chinese Simplified */
997 {"xal", {HB_TAG('K','L','M',' '), /* Kalmyk */
998 HB_TAG('T','O','D',' ')}}, /* Kalmyk -> Todo */
999 {"xan", {HB_TAG('S','E','K',' ')}}, /* Xamtanga -> Sekota */
1000 {"xh", {HB_TAG('X','H','S',' ')}}, /* Xhosa */
1001 {"xjb", {HB_TAG('X','J','B',' ')}}, /* Minjungbal -> Minjangbal */
1002 {"xkf", {HB_TAG('X','K','F',' ')}}, /* Khengkha */
1003 {"xmm", {HB_TAG('M','L','Y',' ')}}, /* Manado Malay -> Malay */
1004 {"xmv", {HB_TAG('M','L','G',' ')}}, /* Antankarana Malagasy -> Malagasy */
1005 {"xmw", {HB_TAG('M','L','G',' ')}}, /* Tsimihety Malagasy -> Malagasy */
1006 {"xnr", {HB_TAG('D','G','R',' ')}}, /* Kangri -> Dogri */
1007 {"xog", {HB_TAG('X','O','G',' ')}}, /* Soga */
1008 {"xpe", {HB_TAG('X','P','E',' ')}}, /* Liberia Kpelle -> Kpelle (Liberia) */
1009 {"xsl", {HB_TAG('S','S','L',' '), /* South Slavey */
1010 HB_TAG('S','L','A',' '), /* South Slavey -> Slavey */
1011 HB_TAG('A','T','H',' ')}}, /* South Slavey -> Athapaskan */
1012 {"xst", {HB_TAG('S','I','G',' ')}}, /* Silt'e (retired code) -> Silte Gurage */
1013 {"xwo", {HB_TAG('T','O','D',' ')}}, /* Written Oirat -> Todo */
1014 {"yao", {HB_TAG('Y','A','O',' ')}}, /* Yao */
1015 {"yap", {HB_TAG('Y','A','P',' ')}}, /* Yapese */
1016 {"ybd", {HB_TAG('A','R','K',' ')}}, /* Yangbye (retired code) -> Rakhine */
1017 {"ydd", {HB_TAG('J','I','I',' ')}}, /* Eastern Yiddish -> Yiddish */
1018 {"yi", {HB_TAG('J','I','I',' ')}}, /* Yiddish [macrolanguage] */
1019 {"yih", {HB_TAG('J','I','I',' ')}}, /* Western Yiddish -> Yiddish */
1020 {"yo", {HB_TAG('Y','B','A',' ')}}, /* Yoruba */
1021 {"yos", {HB_TAG('Q','I','N',' ')}}, /* Yos (retired code) -> Chin */
1022 {"yrk", {HB_TAG('T','N','E',' '), /* Nenets -> Tundra Nenets */
1023 HB_TAG('F','N','E',' ')}}, /* Nenets -> Forest Nenets */
1024 {"yue", {HB_TAG('Z','H','H',' ')}}, /* Yue Chinese -> Chinese, Hong Kong SAR */
1025 {"za", {HB_TAG('Z','H','A',' ')}}, /* Zhuang [macrolanguage] */
1026 {"zch", {HB_TAG('Z','H','A',' ')}}, /* Central Hongshuihe Zhuang -> Zhuang */
1027 {"zdj", {HB_TAG('C','M','R',' ')}}, /* Ngazidja Comorian -> Comorian */
1028 {"zea", {HB_TAG('Z','E','A',' ')}}, /* Zeeuws -> Zealandic */
1029 {"zeh", {HB_TAG('Z','H','A',' ')}}, /* Eastern Hongshuihe Zhuang -> Zhuang */
1030 {"zgb", {HB_TAG('Z','H','A',' ')}}, /* Guibei Zhuang -> Zhuang */
1031 {"zgh", {HB_TAG('Z','G','H',' ')}}, /* Standard Moroccan Tamazight */
1032 {"zgm", {HB_TAG('Z','H','A',' ')}}, /* Minz Zhuang -> Zhuang */
1033 {"zgn", {HB_TAG('Z','H','A',' ')}}, /* Guibian Zhuang -> Zhuang */
1034 {"zh", {HB_TAG('Z','H','S',' ')}}, /* Chinese [macrolanguage] -> Chinese Simplified */
1035 {"zhd", {HB_TAG('Z','H','A',' ')}}, /* Dai Zhuang -> Zhuang */
1036 {"zhn", {HB_TAG('Z','H','A',' ')}}, /* Nong Zhuang -> Zhuang */
1037 {"zlj", {HB_TAG('Z','H','A',' ')}}, /* Liujiang Zhuang -> Zhuang */
1038 {"zlm", {HB_TAG('M','L','Y',' ')}}, /* Malay */
1039 {"zln", {HB_TAG('Z','H','A',' ')}}, /* Lianshan Zhuang -> Zhuang */
1040 {"zlq", {HB_TAG('Z','H','A',' ')}}, /* Liuqian Zhuang -> Zhuang */
1041 {"zmi", {HB_TAG('M','L','Y',' ')}}, /* Negeri Sembilan Malay -> Malay */
1042 {"zne", {HB_TAG('Z','N','D',' ')}}, /* Zande */
1043 {"zom", {HB_TAG('Q','I','N',' ')}}, /* Zou -> Chin */
1044 {"zqe", {HB_TAG('Z','H','A',' ')}}, /* Qiubei Zhuang -> Zhuang */
1045 {"zsm", {HB_TAG('M','L','Y',' ')}}, /* Standard Malay -> Malay */
1046 {"zu", {HB_TAG('Z','U','L',' ')}}, /* Zulu */
1047 {"zum", {HB_TAG('L','R','C',' ')}}, /* Kumzari -> Luri */
1048 {"zyb", {HB_TAG('Z','H','A',' ')}}, /* Yongbei Zhuang -> Zhuang */
1049 {"zyg", {HB_TAG('Z','H','A',' ')}}, /* Yang Zhuang -> Zhuang */
1050 {"zyj", {HB_TAG('Z','H','A',' ')}}, /* Youjiang Zhuang -> Zhuang */
1051 {"zyn", {HB_TAG('Z','H','A',' ')}}, /* Yongnan Zhuang -> Zhuang */
1052 {"zza", {HB_TAG('Z','Z','A',' ')}}, /* Zazaki [macrolanguage] */
1053 {"zzj", {HB_TAG('Z','H','A',' ')}}, /* Zuojiang Zhuang -> Zhuang */
1054 };
1055
1056 static_assert (HB_OT_MAX_TAGS_PER_LANGUAGE == 3u, "");
1057
1058 /**
1059 * hb_ot_tags_from_complex_language:
1060 * @lang_str: a BCP 47 language tag to convert.
1061 * @limit: a pointer to the end of the substring of @lang_str to consider for
1062 * conversion.
1063 * @count: maximum number of language tags to retrieve (IN) and actual number of
1064 * language tags retrieved (OUT). If no tags are retrieved, it is not modified.
1065 * @tags: array of size at least @language_count to store the language tag
1066 * results
1067 *
1068 * Converts a multi-subtag BCP 47 language tag to language tags.
1069 *
1070 * Return value: Whether any language systems were retrieved.
1071 **/
1072 static bool
hb_ot_tags_from_complex_language(const char * lang_str,const char * limit,unsigned int * count,hb_tag_t * tags)1073 hb_ot_tags_from_complex_language (const char *lang_str,
1074 const char *limit,
1075 unsigned int *count /* IN/OUT */,
1076 hb_tag_t *tags /* OUT */)
1077 {
1078 if (subtag_matches (lang_str, limit, "-fonnapa"))
1079 {
1080 /* Undetermined; North American Phonetic Alphabet */
1081 tags[0] = HB_TAG('A','P','P','H'); /* Phonetic transcription—Americanist conventions */
1082 *count = 1;
1083 return true;
1084 }
1085 if (subtag_matches (lang_str, limit, "-polyton"))
1086 {
1087 /* Modern Greek (1453-); Polytonic Greek */
1088 tags[0] = HB_TAG('P','G','R',' '); /* Polytonic Greek */
1089 *count = 1;
1090 return true;
1091 }
1092 if (subtag_matches (lang_str, limit, "-provenc"))
1093 {
1094 /* Occitan (post 1500); Provençal */
1095 tags[0] = HB_TAG('P','R','O',' '); /* Provençal / Old Provençal */
1096 *count = 1;
1097 return true;
1098 }
1099 if (subtag_matches (lang_str, limit, "-fonipa"))
1100 {
1101 /* Undetermined; International Phonetic Alphabet */
1102 tags[0] = HB_TAG('I','P','P','H'); /* Phonetic transcription—IPA conventions */
1103 *count = 1;
1104 return true;
1105 }
1106 if (subtag_matches (lang_str, limit, "-geok"))
1107 {
1108 /* Undetermined; Khutsuri (Asomtavruli and Nuskhuri) */
1109 tags[0] = HB_TAG('K','G','E',' '); /* Khutsuri Georgian */
1110 *count = 1;
1111 return true;
1112 }
1113 if (subtag_matches (lang_str, limit, "-syre"))
1114 {
1115 /* Undetermined; Syriac (Estrangelo variant) */
1116 tags[0] = HB_TAG('S','Y','R','E'); /* Syriac, Estrangela script-variant (equivalent to ISO 15924 'Syre') */
1117 *count = 1;
1118 return true;
1119 }
1120 if (subtag_matches (lang_str, limit, "-syrj"))
1121 {
1122 /* Undetermined; Syriac (Western variant) */
1123 tags[0] = HB_TAG('S','Y','R','J'); /* Syriac, Western script-variant (equivalent to ISO 15924 'Syrj') */
1124 *count = 1;
1125 return true;
1126 }
1127 if (subtag_matches (lang_str, limit, "-syrn"))
1128 {
1129 /* Undetermined; Syriac (Eastern variant) */
1130 tags[0] = HB_TAG('S','Y','R','N'); /* Syriac, Eastern script-variant (equivalent to ISO 15924 'Syrn') */
1131 *count = 1;
1132 return true;
1133 }
1134 switch (lang_str[0])
1135 {
1136 case 'a':
1137 if (0 == strcmp (&lang_str[1], "rt-lojban"))
1138 {
1139 /* Lojban */
1140 tags[0] = HB_TAG('J','B','O',' '); /* Lojban */
1141 *count = 1;
1142 return true;
1143 }
1144 break;
1145 case 'c':
1146 if (lang_matches (&lang_str[1], "do-hant-hk"))
1147 {
1148 /* Min Dong Chinese */
1149 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1150 *count = 1;
1151 return true;
1152 }
1153 if (lang_matches (&lang_str[1], "do-hant-mo"))
1154 {
1155 /* Min Dong Chinese */
1156 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1157 *count = 1;
1158 return true;
1159 }
1160 if (lang_matches (&lang_str[1], "jy-hant-hk"))
1161 {
1162 /* Jinyu Chinese */
1163 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1164 *count = 1;
1165 return true;
1166 }
1167 if (lang_matches (&lang_str[1], "jy-hant-mo"))
1168 {
1169 /* Jinyu Chinese */
1170 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1171 *count = 1;
1172 return true;
1173 }
1174 if (lang_matches (&lang_str[1], "mn-hant-hk"))
1175 {
1176 /* Mandarin Chinese */
1177 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1178 *count = 1;
1179 return true;
1180 }
1181 if (lang_matches (&lang_str[1], "mn-hant-mo"))
1182 {
1183 /* Mandarin Chinese */
1184 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1185 *count = 1;
1186 return true;
1187 }
1188 if (lang_matches (&lang_str[1], "px-hant-hk"))
1189 {
1190 /* Pu-Xian Chinese */
1191 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1192 *count = 1;
1193 return true;
1194 }
1195 if (lang_matches (&lang_str[1], "px-hant-mo"))
1196 {
1197 /* Pu-Xian Chinese */
1198 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1199 *count = 1;
1200 return true;
1201 }
1202 if (lang_matches (&lang_str[1], "zh-hant-hk"))
1203 {
1204 /* Huizhou Chinese */
1205 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1206 *count = 1;
1207 return true;
1208 }
1209 if (lang_matches (&lang_str[1], "zh-hant-mo"))
1210 {
1211 /* Huizhou Chinese */
1212 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1213 *count = 1;
1214 return true;
1215 }
1216 if (lang_matches (&lang_str[1], "zo-hant-hk"))
1217 {
1218 /* Min Zhong Chinese */
1219 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1220 *count = 1;
1221 return true;
1222 }
1223 if (lang_matches (&lang_str[1], "zo-hant-mo"))
1224 {
1225 /* Min Zhong Chinese */
1226 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1227 *count = 1;
1228 return true;
1229 }
1230 if (lang_matches (&lang_str[1], "do-hans"))
1231 {
1232 /* Min Dong Chinese */
1233 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese Simplified */
1234 *count = 1;
1235 return true;
1236 }
1237 if (lang_matches (&lang_str[1], "do-hant"))
1238 {
1239 /* Min Dong Chinese */
1240 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1241 *count = 1;
1242 return true;
1243 }
1244 if (lang_matches (&lang_str[1], "jy-hans"))
1245 {
1246 /* Jinyu Chinese */
1247 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese Simplified */
1248 *count = 1;
1249 return true;
1250 }
1251 if (lang_matches (&lang_str[1], "jy-hant"))
1252 {
1253 /* Jinyu Chinese */
1254 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1255 *count = 1;
1256 return true;
1257 }
1258 if (lang_matches (&lang_str[1], "mn-hans"))
1259 {
1260 /* Mandarin Chinese */
1261 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese Simplified */
1262 *count = 1;
1263 return true;
1264 }
1265 if (lang_matches (&lang_str[1], "mn-hant"))
1266 {
1267 /* Mandarin Chinese */
1268 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1269 *count = 1;
1270 return true;
1271 }
1272 if (lang_matches (&lang_str[1], "px-hans"))
1273 {
1274 /* Pu-Xian Chinese */
1275 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese Simplified */
1276 *count = 1;
1277 return true;
1278 }
1279 if (lang_matches (&lang_str[1], "px-hant"))
1280 {
1281 /* Pu-Xian Chinese */
1282 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1283 *count = 1;
1284 return true;
1285 }
1286 if (lang_matches (&lang_str[1], "zh-hans"))
1287 {
1288 /* Huizhou Chinese */
1289 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese Simplified */
1290 *count = 1;
1291 return true;
1292 }
1293 if (lang_matches (&lang_str[1], "zh-hant"))
1294 {
1295 /* Huizhou Chinese */
1296 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1297 *count = 1;
1298 return true;
1299 }
1300 if (lang_matches (&lang_str[1], "zo-hans"))
1301 {
1302 /* Min Zhong Chinese */
1303 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese Simplified */
1304 *count = 1;
1305 return true;
1306 }
1307 if (lang_matches (&lang_str[1], "zo-hant"))
1308 {
1309 /* Min Zhong Chinese */
1310 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1311 *count = 1;
1312 return true;
1313 }
1314 if (0 == strncmp (&lang_str[1], "do-", 3)
1315 && subtag_matches (lang_str, limit, "-hk"))
1316 {
1317 /* Min Dong Chinese; Hong Kong */
1318 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1319 *count = 1;
1320 return true;
1321 }
1322 if (0 == strncmp (&lang_str[1], "do-", 3)
1323 && subtag_matches (lang_str, limit, "-mo"))
1324 {
1325 /* Min Dong Chinese; Macao */
1326 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1327 *count = 1;
1328 return true;
1329 }
1330 if (0 == strncmp (&lang_str[1], "do-", 3)
1331 && subtag_matches (lang_str, limit, "-tw"))
1332 {
1333 /* Min Dong Chinese; Taiwan, Province of China */
1334 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1335 *count = 1;
1336 return true;
1337 }
1338 if (0 == strncmp (&lang_str[1], "jy-", 3)
1339 && subtag_matches (lang_str, limit, "-hk"))
1340 {
1341 /* Jinyu Chinese; Hong Kong */
1342 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1343 *count = 1;
1344 return true;
1345 }
1346 if (0 == strncmp (&lang_str[1], "jy-", 3)
1347 && subtag_matches (lang_str, limit, "-mo"))
1348 {
1349 /* Jinyu Chinese; Macao */
1350 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1351 *count = 1;
1352 return true;
1353 }
1354 if (0 == strncmp (&lang_str[1], "jy-", 3)
1355 && subtag_matches (lang_str, limit, "-tw"))
1356 {
1357 /* Jinyu Chinese; Taiwan, Province of China */
1358 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1359 *count = 1;
1360 return true;
1361 }
1362 if (0 == strncmp (&lang_str[1], "mn-", 3)
1363 && subtag_matches (lang_str, limit, "-hk"))
1364 {
1365 /* Mandarin Chinese; Hong Kong */
1366 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1367 *count = 1;
1368 return true;
1369 }
1370 if (0 == strncmp (&lang_str[1], "mn-", 3)
1371 && subtag_matches (lang_str, limit, "-mo"))
1372 {
1373 /* Mandarin Chinese; Macao */
1374 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1375 *count = 1;
1376 return true;
1377 }
1378 if (0 == strncmp (&lang_str[1], "mn-", 3)
1379 && subtag_matches (lang_str, limit, "-tw"))
1380 {
1381 /* Mandarin Chinese; Taiwan, Province of China */
1382 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1383 *count = 1;
1384 return true;
1385 }
1386 if (0 == strncmp (&lang_str[1], "px-", 3)
1387 && subtag_matches (lang_str, limit, "-hk"))
1388 {
1389 /* Pu-Xian Chinese; Hong Kong */
1390 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1391 *count = 1;
1392 return true;
1393 }
1394 if (0 == strncmp (&lang_str[1], "px-", 3)
1395 && subtag_matches (lang_str, limit, "-mo"))
1396 {
1397 /* Pu-Xian Chinese; Macao */
1398 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1399 *count = 1;
1400 return true;
1401 }
1402 if (0 == strncmp (&lang_str[1], "px-", 3)
1403 && subtag_matches (lang_str, limit, "-tw"))
1404 {
1405 /* Pu-Xian Chinese; Taiwan, Province of China */
1406 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1407 *count = 1;
1408 return true;
1409 }
1410 if (0 == strncmp (&lang_str[1], "zh-", 3)
1411 && subtag_matches (lang_str, limit, "-hk"))
1412 {
1413 /* Huizhou Chinese; Hong Kong */
1414 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1415 *count = 1;
1416 return true;
1417 }
1418 if (0 == strncmp (&lang_str[1], "zh-", 3)
1419 && subtag_matches (lang_str, limit, "-mo"))
1420 {
1421 /* Huizhou Chinese; Macao */
1422 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1423 *count = 1;
1424 return true;
1425 }
1426 if (0 == strncmp (&lang_str[1], "zh-", 3)
1427 && subtag_matches (lang_str, limit, "-tw"))
1428 {
1429 /* Huizhou Chinese; Taiwan, Province of China */
1430 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1431 *count = 1;
1432 return true;
1433 }
1434 if (0 == strncmp (&lang_str[1], "zo-", 3)
1435 && subtag_matches (lang_str, limit, "-hk"))
1436 {
1437 /* Min Zhong Chinese; Hong Kong */
1438 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1439 *count = 1;
1440 return true;
1441 }
1442 if (0 == strncmp (&lang_str[1], "zo-", 3)
1443 && subtag_matches (lang_str, limit, "-mo"))
1444 {
1445 /* Min Zhong Chinese; Macao */
1446 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1447 *count = 1;
1448 return true;
1449 }
1450 if (0 == strncmp (&lang_str[1], "zo-", 3)
1451 && subtag_matches (lang_str, limit, "-tw"))
1452 {
1453 /* Min Zhong Chinese; Taiwan, Province of China */
1454 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1455 *count = 1;
1456 return true;
1457 }
1458 break;
1459 case 'g':
1460 if (lang_matches (&lang_str[1], "an-hant-hk"))
1461 {
1462 /* Gan Chinese */
1463 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1464 *count = 1;
1465 return true;
1466 }
1467 if (lang_matches (&lang_str[1], "an-hant-mo"))
1468 {
1469 /* Gan Chinese */
1470 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1471 *count = 1;
1472 return true;
1473 }
1474 if (lang_matches (&lang_str[1], "an-hans"))
1475 {
1476 /* Gan Chinese */
1477 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese Simplified */
1478 *count = 1;
1479 return true;
1480 }
1481 if (lang_matches (&lang_str[1], "an-hant"))
1482 {
1483 /* Gan Chinese */
1484 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1485 *count = 1;
1486 return true;
1487 }
1488 if (lang_matches (&lang_str[1], "a-latg"))
1489 {
1490 /* Irish */
1491 tags[0] = HB_TAG('I','R','T',' '); /* Irish Traditional */
1492 *count = 1;
1493 return true;
1494 }
1495 if (0 == strncmp (&lang_str[1], "an-", 3)
1496 && subtag_matches (lang_str, limit, "-hk"))
1497 {
1498 /* Gan Chinese; Hong Kong */
1499 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1500 *count = 1;
1501 return true;
1502 }
1503 if (0 == strncmp (&lang_str[1], "an-", 3)
1504 && subtag_matches (lang_str, limit, "-mo"))
1505 {
1506 /* Gan Chinese; Macao */
1507 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1508 *count = 1;
1509 return true;
1510 }
1511 if (0 == strncmp (&lang_str[1], "an-", 3)
1512 && subtag_matches (lang_str, limit, "-tw"))
1513 {
1514 /* Gan Chinese; Taiwan, Province of China */
1515 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1516 *count = 1;
1517 return true;
1518 }
1519 break;
1520 case 'h':
1521 if (lang_matches (&lang_str[1], "ak-hant-hk"))
1522 {
1523 /* Hakka Chinese */
1524 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1525 *count = 1;
1526 return true;
1527 }
1528 if (lang_matches (&lang_str[1], "ak-hant-mo"))
1529 {
1530 /* Hakka Chinese */
1531 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1532 *count = 1;
1533 return true;
1534 }
1535 if (lang_matches (&lang_str[1], "sn-hant-hk"))
1536 {
1537 /* Xiang Chinese */
1538 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1539 *count = 1;
1540 return true;
1541 }
1542 if (lang_matches (&lang_str[1], "sn-hant-mo"))
1543 {
1544 /* Xiang Chinese */
1545 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1546 *count = 1;
1547 return true;
1548 }
1549 if (lang_matches (&lang_str[1], "ak-hans"))
1550 {
1551 /* Hakka Chinese */
1552 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese Simplified */
1553 *count = 1;
1554 return true;
1555 }
1556 if (lang_matches (&lang_str[1], "ak-hant"))
1557 {
1558 /* Hakka Chinese */
1559 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1560 *count = 1;
1561 return true;
1562 }
1563 if (lang_matches (&lang_str[1], "sn-hans"))
1564 {
1565 /* Xiang Chinese */
1566 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese Simplified */
1567 *count = 1;
1568 return true;
1569 }
1570 if (lang_matches (&lang_str[1], "sn-hant"))
1571 {
1572 /* Xiang Chinese */
1573 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1574 *count = 1;
1575 return true;
1576 }
1577 if (0 == strncmp (&lang_str[1], "ak-", 3)
1578 && subtag_matches (lang_str, limit, "-hk"))
1579 {
1580 /* Hakka Chinese; Hong Kong */
1581 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1582 *count = 1;
1583 return true;
1584 }
1585 if (0 == strncmp (&lang_str[1], "ak-", 3)
1586 && subtag_matches (lang_str, limit, "-mo"))
1587 {
1588 /* Hakka Chinese; Macao */
1589 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1590 *count = 1;
1591 return true;
1592 }
1593 if (0 == strncmp (&lang_str[1], "ak-", 3)
1594 && subtag_matches (lang_str, limit, "-tw"))
1595 {
1596 /* Hakka Chinese; Taiwan, Province of China */
1597 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1598 *count = 1;
1599 return true;
1600 }
1601 if (0 == strncmp (&lang_str[1], "sn-", 3)
1602 && subtag_matches (lang_str, limit, "-hk"))
1603 {
1604 /* Xiang Chinese; Hong Kong */
1605 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1606 *count = 1;
1607 return true;
1608 }
1609 if (0 == strncmp (&lang_str[1], "sn-", 3)
1610 && subtag_matches (lang_str, limit, "-mo"))
1611 {
1612 /* Xiang Chinese; Macao */
1613 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1614 *count = 1;
1615 return true;
1616 }
1617 if (0 == strncmp (&lang_str[1], "sn-", 3)
1618 && subtag_matches (lang_str, limit, "-tw"))
1619 {
1620 /* Xiang Chinese; Taiwan, Province of China */
1621 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1622 *count = 1;
1623 return true;
1624 }
1625 break;
1626 case 'i':
1627 if (0 == strcmp (&lang_str[1], "-navajo"))
1628 {
1629 /* Navajo */
1630 unsigned int i;
1631 hb_tag_t possible_tags[] = {
1632 HB_TAG('N','A','V',' '), /* Navajo */
1633 HB_TAG('A','T','H',' '), /* Athapaskan */
1634 };
1635 for (i = 0; i < 2 && i < *count; i++)
1636 tags[i] = possible_tags[i];
1637 *count = i;
1638 return true;
1639 }
1640 if (0 == strcmp (&lang_str[1], "-hak"))
1641 {
1642 /* Hakka */
1643 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese Simplified */
1644 *count = 1;
1645 return true;
1646 }
1647 if (0 == strcmp (&lang_str[1], "-lux"))
1648 {
1649 /* Luxembourgish */
1650 tags[0] = HB_TAG('L','T','Z',' '); /* Luxembourgish */
1651 *count = 1;
1652 return true;
1653 }
1654 break;
1655 case 'l':
1656 if (lang_matches (&lang_str[1], "zh-hans"))
1657 {
1658 /* Literary Chinese */
1659 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese Simplified */
1660 *count = 1;
1661 return true;
1662 }
1663 break;
1664 case 'm':
1665 if (lang_matches (&lang_str[1], "np-hant-hk"))
1666 {
1667 /* Min Bei Chinese */
1668 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1669 *count = 1;
1670 return true;
1671 }
1672 if (lang_matches (&lang_str[1], "np-hant-mo"))
1673 {
1674 /* Min Bei Chinese */
1675 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1676 *count = 1;
1677 return true;
1678 }
1679 if (lang_matches (&lang_str[1], "np-hans"))
1680 {
1681 /* Min Bei Chinese */
1682 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese Simplified */
1683 *count = 1;
1684 return true;
1685 }
1686 if (lang_matches (&lang_str[1], "np-hant"))
1687 {
1688 /* Min Bei Chinese */
1689 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1690 *count = 1;
1691 return true;
1692 }
1693 if (0 == strncmp (&lang_str[1], "np-", 3)
1694 && subtag_matches (lang_str, limit, "-hk"))
1695 {
1696 /* Min Bei Chinese; Hong Kong */
1697 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1698 *count = 1;
1699 return true;
1700 }
1701 if (0 == strncmp (&lang_str[1], "np-", 3)
1702 && subtag_matches (lang_str, limit, "-mo"))
1703 {
1704 /* Min Bei Chinese; Macao */
1705 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1706 *count = 1;
1707 return true;
1708 }
1709 if (0 == strncmp (&lang_str[1], "np-", 3)
1710 && subtag_matches (lang_str, limit, "-tw"))
1711 {
1712 /* Min Bei Chinese; Taiwan, Province of China */
1713 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1714 *count = 1;
1715 return true;
1716 }
1717 break;
1718 case 'n':
1719 if (lang_matches (&lang_str[1], "an-hant-hk"))
1720 {
1721 /* Min Nan Chinese */
1722 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1723 *count = 1;
1724 return true;
1725 }
1726 if (lang_matches (&lang_str[1], "an-hant-mo"))
1727 {
1728 /* Min Nan Chinese */
1729 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1730 *count = 1;
1731 return true;
1732 }
1733 if (lang_matches (&lang_str[1], "an-hans"))
1734 {
1735 /* Min Nan Chinese */
1736 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese Simplified */
1737 *count = 1;
1738 return true;
1739 }
1740 if (lang_matches (&lang_str[1], "an-hant"))
1741 {
1742 /* Min Nan Chinese */
1743 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1744 *count = 1;
1745 return true;
1746 }
1747 if (0 == strncmp (&lang_str[1], "an-", 3)
1748 && subtag_matches (lang_str, limit, "-hk"))
1749 {
1750 /* Min Nan Chinese; Hong Kong */
1751 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1752 *count = 1;
1753 return true;
1754 }
1755 if (0 == strncmp (&lang_str[1], "an-", 3)
1756 && subtag_matches (lang_str, limit, "-mo"))
1757 {
1758 /* Min Nan Chinese; Macao */
1759 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1760 *count = 1;
1761 return true;
1762 }
1763 if (0 == strncmp (&lang_str[1], "an-", 3)
1764 && subtag_matches (lang_str, limit, "-tw"))
1765 {
1766 /* Min Nan Chinese; Taiwan, Province of China */
1767 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1768 *count = 1;
1769 return true;
1770 }
1771 if (0 == strcmp (&lang_str[1], "o-bok"))
1772 {
1773 /* Norwegian Bokmal */
1774 tags[0] = HB_TAG('N','O','R',' '); /* Norwegian */
1775 *count = 1;
1776 return true;
1777 }
1778 if (0 == strcmp (&lang_str[1], "o-nyn"))
1779 {
1780 /* Norwegian Nynorsk */
1781 tags[0] = HB_TAG('N','Y','N',' '); /* Norwegian Nynorsk (Nynorsk, Norwegian) */
1782 *count = 1;
1783 return true;
1784 }
1785 break;
1786 case 'r':
1787 if (0 == strncmp (&lang_str[1], "o-", 2)
1788 && subtag_matches (lang_str, limit, "-md"))
1789 {
1790 /* Romanian; Moldova */
1791 tags[0] = HB_TAG('M','O','L',' '); /* Moldavian */
1792 *count = 1;
1793 return true;
1794 }
1795 break;
1796 case 'w':
1797 if (lang_matches (&lang_str[1], "uu-hant-hk"))
1798 {
1799 /* Wu Chinese */
1800 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1801 *count = 1;
1802 return true;
1803 }
1804 if (lang_matches (&lang_str[1], "uu-hant-mo"))
1805 {
1806 /* Wu Chinese */
1807 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1808 *count = 1;
1809 return true;
1810 }
1811 if (lang_matches (&lang_str[1], "uu-hans"))
1812 {
1813 /* Wu Chinese */
1814 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese Simplified */
1815 *count = 1;
1816 return true;
1817 }
1818 if (lang_matches (&lang_str[1], "uu-hant"))
1819 {
1820 /* Wu Chinese */
1821 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1822 *count = 1;
1823 return true;
1824 }
1825 if (0 == strncmp (&lang_str[1], "uu-", 3)
1826 && subtag_matches (lang_str, limit, "-hk"))
1827 {
1828 /* Wu Chinese; Hong Kong */
1829 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1830 *count = 1;
1831 return true;
1832 }
1833 if (0 == strncmp (&lang_str[1], "uu-", 3)
1834 && subtag_matches (lang_str, limit, "-mo"))
1835 {
1836 /* Wu Chinese; Macao */
1837 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1838 *count = 1;
1839 return true;
1840 }
1841 if (0 == strncmp (&lang_str[1], "uu-", 3)
1842 && subtag_matches (lang_str, limit, "-tw"))
1843 {
1844 /* Wu Chinese; Taiwan, Province of China */
1845 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1846 *count = 1;
1847 return true;
1848 }
1849 break;
1850 case 'y':
1851 if (lang_matches (&lang_str[1], "ue-hans"))
1852 {
1853 /* Yue Chinese */
1854 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese Simplified */
1855 *count = 1;
1856 return true;
1857 }
1858 break;
1859 case 'z':
1860 if (lang_matches (&lang_str[1], "h-hant-hk"))
1861 {
1862 /* Chinese */
1863 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1864 *count = 1;
1865 return true;
1866 }
1867 if (lang_matches (&lang_str[1], "h-hant-mo"))
1868 {
1869 /* Chinese */
1870 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1871 *count = 1;
1872 return true;
1873 }
1874 if (0 == strcmp (&lang_str[1], "h-min-nan"))
1875 {
1876 /* Minnan, Hokkien, Amoy, Taiwanese, Southern Min, Southern Fujian, Hoklo, Southern Fukien, Ho-lo */
1877 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese Simplified */
1878 *count = 1;
1879 return true;
1880 }
1881 if (lang_matches (&lang_str[1], "h-hans"))
1882 {
1883 /* Chinese */
1884 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese Simplified */
1885 *count = 1;
1886 return true;
1887 }
1888 if (lang_matches (&lang_str[1], "h-hant"))
1889 {
1890 /* Chinese */
1891 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1892 *count = 1;
1893 return true;
1894 }
1895 if (0 == strcmp (&lang_str[1], "h-min"))
1896 {
1897 /* Min, Fuzhou, Hokkien, Amoy, or Taiwanese */
1898 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese Simplified */
1899 *count = 1;
1900 return true;
1901 }
1902 if (0 == strncmp (&lang_str[1], "h-", 2)
1903 && subtag_matches (lang_str, limit, "-hk"))
1904 {
1905 /* Chinese; Hong Kong */
1906 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1907 *count = 1;
1908 return true;
1909 }
1910 if (0 == strncmp (&lang_str[1], "h-", 2)
1911 && subtag_matches (lang_str, limit, "-mo"))
1912 {
1913 /* Chinese; Macao */
1914 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Hong Kong SAR */
1915 *count = 1;
1916 return true;
1917 }
1918 if (0 == strncmp (&lang_str[1], "h-", 2)
1919 && subtag_matches (lang_str, limit, "-tw"))
1920 {
1921 /* Chinese; Taiwan, Province of China */
1922 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese Traditional */
1923 *count = 1;
1924 return true;
1925 }
1926 break;
1927 }
1928 return false;
1929 }
1930
1931 /**
1932 * hb_ot_ambiguous_tag_to_language
1933 * @tag: A language tag.
1934 *
1935 * Converts @tag to a BCP 47 language tag if it is ambiguous (it corresponds to
1936 * many language tags) and the best tag is not the alphabetically first, or if
1937 * the best tag consists of multiple subtags.
1938 *
1939 * Return value: The #hb_language_t corresponding to the BCP 47 language tag,
1940 * or #HB_LANGUAGE_INVALID if @tag is not ambiguous.
1941 **/
1942 static hb_language_t
hb_ot_ambiguous_tag_to_language(hb_tag_t tag)1943 hb_ot_ambiguous_tag_to_language (hb_tag_t tag)
1944 {
1945 switch (tag)
1946 {
1947 case HB_TAG('A','P','P','H'): /* Phonetic transcription—Americanist conventions */
1948 return hb_language_from_string ("und-fonnapa", -1); /* Undetermined; North American Phonetic Alphabet */
1949 case HB_TAG('A','R','A',' '): /* Arabic */
1950 return hb_language_from_string ("ar", -1); /* Arabic */
1951 case HB_TAG('A','R','K',' '): /* Rakhine */
1952 return hb_language_from_string ("rki", -1); /* Rakhine */
1953 case HB_TAG('A','T','H',' '): /* Athapaskan */
1954 return hb_language_from_string ("ath", -1); /* Athapascan */
1955 case HB_TAG('B','I','K',' '): /* Bikol */
1956 return hb_language_from_string ("bik", -1); /* Bikol */
1957 case HB_TAG('C','P','P',' '): /* Creoles */
1958 return hb_language_from_string ("crp", -1); /* Creoles and pidgins */
1959 case HB_TAG('C','R','R',' '): /* Carrier */
1960 return hb_language_from_string ("crx", -1); /* Carrier */
1961 case HB_TAG('D','N','K',' '): /* Dinka */
1962 return hb_language_from_string ("din", -1); /* Dinka */
1963 case HB_TAG('D','R','I',' '): /* Dari */
1964 return hb_language_from_string ("prs", -1); /* Dari */
1965 case HB_TAG('D','U','J',' '): /* Dhuwal */
1966 return hb_language_from_string ("dwu", -1); /* Dhuwal */
1967 case HB_TAG('D','Z','N',' '): /* Dzongkha */
1968 return hb_language_from_string ("dz", -1); /* Dzongkha */
1969 case HB_TAG('E','T','I',' '): /* Estonian */
1970 return hb_language_from_string ("et", -1); /* Estonian */
1971 case HB_TAG('G','O','N',' '): /* Gondi */
1972 return hb_language_from_string ("gon", -1); /* Gondi */
1973 case HB_TAG('H','M','N',' '): /* Hmong */
1974 return hb_language_from_string ("hmn", -1); /* Hmong */
1975 case HB_TAG('I','J','O',' '): /* Ijo */
1976 return hb_language_from_string ("ijo", -1); /* Ijo */
1977 case HB_TAG('I','N','U',' '): /* Inuktitut */
1978 return hb_language_from_string ("iu", -1); /* Inuktitut */
1979 case HB_TAG('I','P','K',' '): /* Inupiat */
1980 return hb_language_from_string ("ik", -1); /* Inupiaq */
1981 case HB_TAG('I','P','P','H'): /* Phonetic transcription—IPA conventions */
1982 return hb_language_from_string ("und-fonipa", -1); /* Undetermined; International Phonetic Alphabet */
1983 case HB_TAG('I','R','T',' '): /* Irish Traditional */
1984 return hb_language_from_string ("ga-Latg", -1); /* Irish; Latin (Gaelic variant) */
1985 case HB_TAG('J','I','I',' '): /* Yiddish */
1986 return hb_language_from_string ("yi", -1); /* Yiddish */
1987 case HB_TAG('K','A','L',' '): /* Kalenjin */
1988 return hb_language_from_string ("kln", -1); /* Kalenjin */
1989 case HB_TAG('K','G','E',' '): /* Khutsuri Georgian */
1990 return hb_language_from_string ("und-Geok", -1); /* Undetermined; Khutsuri (Asomtavruli and Nuskhuri) */
1991 case HB_TAG('K','N','R',' '): /* Kanuri */
1992 return hb_language_from_string ("kr", -1); /* Kanuri */
1993 case HB_TAG('K','O','K',' '): /* Konkani */
1994 return hb_language_from_string ("kok", -1); /* Konkani */
1995 case HB_TAG('K','U','R',' '): /* Kurdish */
1996 return hb_language_from_string ("ku", -1); /* Kurdish */
1997 case HB_TAG('L','U','H',' '): /* Luyia */
1998 return hb_language_from_string ("luy", -1); /* Luyia */
1999 case HB_TAG('L','V','I',' '): /* Latvian */
2000 return hb_language_from_string ("lv", -1); /* Latvian */
2001 case HB_TAG('M','A','W',' '): /* Marwari */
2002 return hb_language_from_string ("mwr", -1); /* Marwari */
2003 case HB_TAG('M','L','G',' '): /* Malagasy */
2004 return hb_language_from_string ("mg", -1); /* Malagasy */
2005 case HB_TAG('M','L','Y',' '): /* Malay */
2006 return hb_language_from_string ("ms", -1); /* Malay */
2007 case HB_TAG('M','N','G',' '): /* Mongolian */
2008 return hb_language_from_string ("mn", -1); /* Mongolian */
2009 case HB_TAG('M','O','L',' '): /* Moldavian */
2010 return hb_language_from_string ("ro-MD", -1); /* Romanian; Moldova */
2011 case HB_TAG('N','E','P',' '): /* Nepali */
2012 return hb_language_from_string ("ne", -1); /* Nepali */
2013 case HB_TAG('N','I','S',' '): /* Nisi */
2014 return hb_language_from_string ("njz", -1); /* Nyishi */
2015 case HB_TAG('N','O','R',' '): /* Norwegian */
2016 return hb_language_from_string ("no", -1); /* Norwegian */
2017 case HB_TAG('O','J','B',' '): /* Ojibway */
2018 return hb_language_from_string ("oj", -1); /* Ojibwa */
2019 case HB_TAG('O','R','O',' '): /* Oromo */
2020 return hb_language_from_string ("om", -1); /* Oromo */
2021 case HB_TAG('P','A','S',' '): /* Pashto */
2022 return hb_language_from_string ("ps", -1); /* Pashto */
2023 case HB_TAG('P','G','R',' '): /* Polytonic Greek */
2024 return hb_language_from_string ("el-polyton", -1); /* Modern Greek (1453-); Polytonic Greek */
2025 case HB_TAG('P','R','O',' '): /* Provençal / Old Provençal */
2026 return hb_language_from_string ("pro", -1); /* Old Provençal (to 1500) */
2027 case HB_TAG('Q','U','H',' '): /* Quechua (Bolivia) */
2028 return hb_language_from_string ("quh", -1); /* South Bolivian Quechua */
2029 case HB_TAG('Q','V','I',' '): /* Quechua (Ecuador) */
2030 return hb_language_from_string ("qvi", -1); /* Imbabura Highland Quichua */
2031 case HB_TAG('Q','W','H',' '): /* Quechua (Peru) */
2032 return hb_language_from_string ("qwh", -1); /* Huaylas Ancash Quechua */
2033 case HB_TAG('R','A','J',' '): /* Rajasthani */
2034 return hb_language_from_string ("raj", -1); /* Rajasthani */
2035 case HB_TAG('R','O','Y',' '): /* Romany */
2036 return hb_language_from_string ("rom", -1); /* Romany */
2037 case HB_TAG('S','Q','I',' '): /* Albanian */
2038 return hb_language_from_string ("sq", -1); /* Albanian */
2039 case HB_TAG('S','Y','R',' '): /* Syriac */
2040 return hb_language_from_string ("syr", -1); /* Syriac */
2041 case HB_TAG('S','Y','R','E'): /* Syriac, Estrangela script-variant (equivalent to ISO 15924 'Syre') */
2042 return hb_language_from_string ("und-Syre", -1); /* Undetermined; Syriac (Estrangelo variant) */
2043 case HB_TAG('S','Y','R','J'): /* Syriac, Western script-variant (equivalent to ISO 15924 'Syrj') */
2044 return hb_language_from_string ("und-Syrj", -1); /* Undetermined; Syriac (Western variant) */
2045 case HB_TAG('S','Y','R','N'): /* Syriac, Eastern script-variant (equivalent to ISO 15924 'Syrn') */
2046 return hb_language_from_string ("und-Syrn", -1); /* Undetermined; Syriac (Eastern variant) */
2047 case HB_TAG('T','M','H',' '): /* Tamashek */
2048 return hb_language_from_string ("tmh", -1); /* Tamashek */
2049 case HB_TAG('T','N','E',' '): /* Tundra Nenets */
2050 return hb_language_from_string ("yrk", -1); /* Nenets */
2051 case HB_TAG('Z','H','H',' '): /* Chinese, Hong Kong SAR */
2052 return hb_language_from_string ("zh-HK", -1); /* Chinese; Hong Kong */
2053 case HB_TAG('Z','H','S',' '): /* Chinese Simplified */
2054 return hb_language_from_string ("zh-Hans", -1); /* Chinese; Han (Simplified variant) */
2055 case HB_TAG('Z','H','T',' '): /* Chinese Traditional */
2056 return hb_language_from_string ("zh-Hant", -1); /* Chinese; Han (Traditional variant) */
2057 default:
2058 return HB_LANGUAGE_INVALID;
2059 }
2060 }
2061
2062 #endif /* HB_OT_TAG_TABLE_HH */
2063
2064 /* == End of generated table == */
2065