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-11-18 05:25 AM" />
10  * File-Date: 2019-04-03
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   {"aii",	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   {"ak",	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   {"caf",	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   {"chp",	HB_TAG('S','A','Y',' ')},	/* Chipewyan -> Sayisi */
181   {"chp",	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   {"cr",	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   {"crm",	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   {"crx",	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   {"csw",	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   {"cwd",	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   {"den",	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   {"dv",	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   {"emk",	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   {"flm",	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   {"guk",	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   {"hy",	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   {"kca",	HB_TAG('K','H','S',' ')},	/* Khanty -> Khanty-Shurishkar */
469   {"kca",	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   {"kht",	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   {"krc",	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   {"ml",	HB_TAG('M','L','R',' ')},	/* Malayalam -> Malayalam Reformed */
619   {"mlq",	HB_TAG('M','L','N',' ')},	/* Western Maninkakan -> Malinke */
620   {"mlq",	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   {"mnk",	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   {"nv",	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   {"scs",	HB_TAG('S','L','A',' ')},	/* North Slavey -> Slavey */
839   {"scs",	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   {"sgw",	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   {"tru",	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   {"tw",	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   {"xal",	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   {"xsl",	HB_TAG('S','L','A',' ')},	/* South Slavey -> Slavey */
1011   {"xsl",	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   {"yrk",	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 /**
1057  * hb_ot_tags_from_complex_language:
1058  * @lang_str: a BCP 47 language tag to convert.
1059  * @limit: a pointer to the end of the substring of @lang_str to consider for
1060  * conversion.
1061  * @count: maximum number of language tags to retrieve (IN) and actual number of
1062  * language tags retrieved (OUT). If no tags are retrieved, it is not modified.
1063  * @tags: array of size at least @language_count to store the language tag
1064  * results
1065  *
1066  * Converts a multi-subtag BCP 47 language tag to language tags.
1067  *
1068  * Return value: Whether any language systems were retrieved.
1069  **/
1070 static bool
hb_ot_tags_from_complex_language(const char * lang_str,const char * limit,unsigned int * count,hb_tag_t * tags)1071 hb_ot_tags_from_complex_language (const char   *lang_str,
1072 				  const char   *limit,
1073 				  unsigned int *count /* IN/OUT */,
1074 				  hb_tag_t     *tags /* OUT */)
1075 {
1076   if (subtag_matches (lang_str, limit, "-fonnapa"))
1077   {
1078     /* Undetermined; North American Phonetic Alphabet */
1079     tags[0] = HB_TAG('A','P','P','H');  /* Phonetic transcription—Americanist conventions */
1080     *count = 1;
1081     return true;
1082   }
1083   if (subtag_matches (lang_str, limit, "-polyton"))
1084   {
1085     /* Modern Greek (1453-); Polytonic Greek */
1086     tags[0] = HB_TAG('P','G','R',' ');  /* Polytonic Greek */
1087     *count = 1;
1088     return true;
1089   }
1090   if (subtag_matches (lang_str, limit, "-provenc"))
1091   {
1092     /* Occitan (post 1500); Provençal */
1093     tags[0] = HB_TAG('P','R','O',' ');  /* Provençal / Old Provençal */
1094     *count = 1;
1095     return true;
1096   }
1097   if (subtag_matches (lang_str, limit, "-fonipa"))
1098   {
1099     /* Undetermined; International Phonetic Alphabet */
1100     tags[0] = HB_TAG('I','P','P','H');  /* Phonetic transcription—IPA conventions */
1101     *count = 1;
1102     return true;
1103   }
1104   if (subtag_matches (lang_str, limit, "-geok"))
1105   {
1106     /* Undetermined; Khutsuri (Asomtavruli and Nuskhuri) */
1107     tags[0] = HB_TAG('K','G','E',' ');  /* Khutsuri Georgian */
1108     *count = 1;
1109     return true;
1110   }
1111   if (subtag_matches (lang_str, limit, "-syre"))
1112   {
1113     /* Undetermined; Syriac (Estrangelo variant) */
1114     tags[0] = HB_TAG('S','Y','R','E');  /* Syriac, Estrangela script-variant (equivalent to ISO 15924 'Syre') */
1115     *count = 1;
1116     return true;
1117   }
1118   if (subtag_matches (lang_str, limit, "-syrj"))
1119   {
1120     /* Undetermined; Syriac (Western variant) */
1121     tags[0] = HB_TAG('S','Y','R','J');  /* Syriac, Western script-variant (equivalent to ISO 15924 'Syrj') */
1122     *count = 1;
1123     return true;
1124   }
1125   if (subtag_matches (lang_str, limit, "-syrn"))
1126   {
1127     /* Undetermined; Syriac (Eastern variant) */
1128     tags[0] = HB_TAG('S','Y','R','N');  /* Syriac, Eastern script-variant (equivalent to ISO 15924 'Syrn') */
1129     *count = 1;
1130     return true;
1131   }
1132   switch (lang_str[0])
1133   {
1134   case 'a':
1135     if (0 == strcmp (&lang_str[1], "rt-lojban"))
1136     {
1137       /* Lojban */
1138       tags[0] = HB_TAG('J','B','O',' ');  /* Lojban */
1139       *count = 1;
1140       return true;
1141     }
1142     break;
1143   case 'c':
1144     if (lang_matches (&lang_str[1], "do-hant-hk"))
1145     {
1146       /* Min Dong Chinese */
1147       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1148       *count = 1;
1149       return true;
1150     }
1151     if (lang_matches (&lang_str[1], "do-hant-mo"))
1152     {
1153       /* Min Dong Chinese */
1154       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1155       *count = 1;
1156       return true;
1157     }
1158     if (lang_matches (&lang_str[1], "jy-hant-hk"))
1159     {
1160       /* Jinyu Chinese */
1161       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1162       *count = 1;
1163       return true;
1164     }
1165     if (lang_matches (&lang_str[1], "jy-hant-mo"))
1166     {
1167       /* Jinyu Chinese */
1168       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1169       *count = 1;
1170       return true;
1171     }
1172     if (lang_matches (&lang_str[1], "mn-hant-hk"))
1173     {
1174       /* Mandarin Chinese */
1175       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1176       *count = 1;
1177       return true;
1178     }
1179     if (lang_matches (&lang_str[1], "mn-hant-mo"))
1180     {
1181       /* Mandarin Chinese */
1182       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1183       *count = 1;
1184       return true;
1185     }
1186     if (lang_matches (&lang_str[1], "px-hant-hk"))
1187     {
1188       /* Pu-Xian Chinese */
1189       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1190       *count = 1;
1191       return true;
1192     }
1193     if (lang_matches (&lang_str[1], "px-hant-mo"))
1194     {
1195       /* Pu-Xian Chinese */
1196       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1197       *count = 1;
1198       return true;
1199     }
1200     if (lang_matches (&lang_str[1], "zh-hant-hk"))
1201     {
1202       /* Huizhou Chinese */
1203       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1204       *count = 1;
1205       return true;
1206     }
1207     if (lang_matches (&lang_str[1], "zh-hant-mo"))
1208     {
1209       /* Huizhou Chinese */
1210       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1211       *count = 1;
1212       return true;
1213     }
1214     if (lang_matches (&lang_str[1], "zo-hant-hk"))
1215     {
1216       /* Min Zhong Chinese */
1217       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1218       *count = 1;
1219       return true;
1220     }
1221     if (lang_matches (&lang_str[1], "zo-hant-mo"))
1222     {
1223       /* Min Zhong Chinese */
1224       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1225       *count = 1;
1226       return true;
1227     }
1228     if (lang_matches (&lang_str[1], "do-hans"))
1229     {
1230       /* Min Dong Chinese */
1231       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese Simplified */
1232       *count = 1;
1233       return true;
1234     }
1235     if (lang_matches (&lang_str[1], "do-hant"))
1236     {
1237       /* Min Dong Chinese */
1238       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1239       *count = 1;
1240       return true;
1241     }
1242     if (lang_matches (&lang_str[1], "jy-hans"))
1243     {
1244       /* Jinyu Chinese */
1245       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese Simplified */
1246       *count = 1;
1247       return true;
1248     }
1249     if (lang_matches (&lang_str[1], "jy-hant"))
1250     {
1251       /* Jinyu Chinese */
1252       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1253       *count = 1;
1254       return true;
1255     }
1256     if (lang_matches (&lang_str[1], "mn-hans"))
1257     {
1258       /* Mandarin Chinese */
1259       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese Simplified */
1260       *count = 1;
1261       return true;
1262     }
1263     if (lang_matches (&lang_str[1], "mn-hant"))
1264     {
1265       /* Mandarin Chinese */
1266       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1267       *count = 1;
1268       return true;
1269     }
1270     if (lang_matches (&lang_str[1], "px-hans"))
1271     {
1272       /* Pu-Xian Chinese */
1273       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese Simplified */
1274       *count = 1;
1275       return true;
1276     }
1277     if (lang_matches (&lang_str[1], "px-hant"))
1278     {
1279       /* Pu-Xian Chinese */
1280       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1281       *count = 1;
1282       return true;
1283     }
1284     if (lang_matches (&lang_str[1], "zh-hans"))
1285     {
1286       /* Huizhou Chinese */
1287       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese Simplified */
1288       *count = 1;
1289       return true;
1290     }
1291     if (lang_matches (&lang_str[1], "zh-hant"))
1292     {
1293       /* Huizhou Chinese */
1294       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1295       *count = 1;
1296       return true;
1297     }
1298     if (lang_matches (&lang_str[1], "zo-hans"))
1299     {
1300       /* Min Zhong Chinese */
1301       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese Simplified */
1302       *count = 1;
1303       return true;
1304     }
1305     if (lang_matches (&lang_str[1], "zo-hant"))
1306     {
1307       /* Min Zhong Chinese */
1308       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1309       *count = 1;
1310       return true;
1311     }
1312     if (0 == strncmp (&lang_str[1], "do-", 3)
1313 	&& subtag_matches (lang_str, limit, "-hk"))
1314     {
1315       /* Min Dong Chinese; Hong Kong */
1316       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1317       *count = 1;
1318       return true;
1319     }
1320     if (0 == strncmp (&lang_str[1], "do-", 3)
1321 	&& subtag_matches (lang_str, limit, "-mo"))
1322     {
1323       /* Min Dong Chinese; Macao */
1324       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1325       *count = 1;
1326       return true;
1327     }
1328     if (0 == strncmp (&lang_str[1], "do-", 3)
1329 	&& subtag_matches (lang_str, limit, "-tw"))
1330     {
1331       /* Min Dong Chinese; Taiwan, Province of China */
1332       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1333       *count = 1;
1334       return true;
1335     }
1336     if (0 == strncmp (&lang_str[1], "jy-", 3)
1337 	&& subtag_matches (lang_str, limit, "-hk"))
1338     {
1339       /* Jinyu Chinese; Hong Kong */
1340       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1341       *count = 1;
1342       return true;
1343     }
1344     if (0 == strncmp (&lang_str[1], "jy-", 3)
1345 	&& subtag_matches (lang_str, limit, "-mo"))
1346     {
1347       /* Jinyu Chinese; Macao */
1348       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1349       *count = 1;
1350       return true;
1351     }
1352     if (0 == strncmp (&lang_str[1], "jy-", 3)
1353 	&& subtag_matches (lang_str, limit, "-tw"))
1354     {
1355       /* Jinyu Chinese; Taiwan, Province of China */
1356       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1357       *count = 1;
1358       return true;
1359     }
1360     if (0 == strncmp (&lang_str[1], "mn-", 3)
1361 	&& subtag_matches (lang_str, limit, "-hk"))
1362     {
1363       /* Mandarin Chinese; Hong Kong */
1364       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1365       *count = 1;
1366       return true;
1367     }
1368     if (0 == strncmp (&lang_str[1], "mn-", 3)
1369 	&& subtag_matches (lang_str, limit, "-mo"))
1370     {
1371       /* Mandarin Chinese; Macao */
1372       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1373       *count = 1;
1374       return true;
1375     }
1376     if (0 == strncmp (&lang_str[1], "mn-", 3)
1377 	&& subtag_matches (lang_str, limit, "-tw"))
1378     {
1379       /* Mandarin Chinese; Taiwan, Province of China */
1380       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1381       *count = 1;
1382       return true;
1383     }
1384     if (0 == strncmp (&lang_str[1], "px-", 3)
1385 	&& subtag_matches (lang_str, limit, "-hk"))
1386     {
1387       /* Pu-Xian Chinese; Hong Kong */
1388       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1389       *count = 1;
1390       return true;
1391     }
1392     if (0 == strncmp (&lang_str[1], "px-", 3)
1393 	&& subtag_matches (lang_str, limit, "-mo"))
1394     {
1395       /* Pu-Xian Chinese; Macao */
1396       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1397       *count = 1;
1398       return true;
1399     }
1400     if (0 == strncmp (&lang_str[1], "px-", 3)
1401 	&& subtag_matches (lang_str, limit, "-tw"))
1402     {
1403       /* Pu-Xian Chinese; Taiwan, Province of China */
1404       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1405       *count = 1;
1406       return true;
1407     }
1408     if (0 == strncmp (&lang_str[1], "zh-", 3)
1409 	&& subtag_matches (lang_str, limit, "-hk"))
1410     {
1411       /* Huizhou Chinese; Hong Kong */
1412       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1413       *count = 1;
1414       return true;
1415     }
1416     if (0 == strncmp (&lang_str[1], "zh-", 3)
1417 	&& subtag_matches (lang_str, limit, "-mo"))
1418     {
1419       /* Huizhou Chinese; Macao */
1420       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1421       *count = 1;
1422       return true;
1423     }
1424     if (0 == strncmp (&lang_str[1], "zh-", 3)
1425 	&& subtag_matches (lang_str, limit, "-tw"))
1426     {
1427       /* Huizhou Chinese; Taiwan, Province of China */
1428       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1429       *count = 1;
1430       return true;
1431     }
1432     if (0 == strncmp (&lang_str[1], "zo-", 3)
1433 	&& subtag_matches (lang_str, limit, "-hk"))
1434     {
1435       /* Min Zhong Chinese; Hong Kong */
1436       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1437       *count = 1;
1438       return true;
1439     }
1440     if (0 == strncmp (&lang_str[1], "zo-", 3)
1441 	&& subtag_matches (lang_str, limit, "-mo"))
1442     {
1443       /* Min Zhong Chinese; Macao */
1444       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1445       *count = 1;
1446       return true;
1447     }
1448     if (0 == strncmp (&lang_str[1], "zo-", 3)
1449 	&& subtag_matches (lang_str, limit, "-tw"))
1450     {
1451       /* Min Zhong Chinese; Taiwan, Province of China */
1452       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1453       *count = 1;
1454       return true;
1455     }
1456     break;
1457   case 'g':
1458     if (lang_matches (&lang_str[1], "an-hant-hk"))
1459     {
1460       /* Gan Chinese */
1461       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1462       *count = 1;
1463       return true;
1464     }
1465     if (lang_matches (&lang_str[1], "an-hant-mo"))
1466     {
1467       /* Gan Chinese */
1468       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1469       *count = 1;
1470       return true;
1471     }
1472     if (lang_matches (&lang_str[1], "an-hans"))
1473     {
1474       /* Gan Chinese */
1475       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese Simplified */
1476       *count = 1;
1477       return true;
1478     }
1479     if (lang_matches (&lang_str[1], "an-hant"))
1480     {
1481       /* Gan Chinese */
1482       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1483       *count = 1;
1484       return true;
1485     }
1486     if (lang_matches (&lang_str[1], "a-latg"))
1487     {
1488       /* Irish */
1489       tags[0] = HB_TAG('I','R','T',' ');  /* Irish Traditional */
1490       *count = 1;
1491       return true;
1492     }
1493     if (0 == strncmp (&lang_str[1], "an-", 3)
1494 	&& subtag_matches (lang_str, limit, "-hk"))
1495     {
1496       /* Gan Chinese; Hong Kong */
1497       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1498       *count = 1;
1499       return true;
1500     }
1501     if (0 == strncmp (&lang_str[1], "an-", 3)
1502 	&& subtag_matches (lang_str, limit, "-mo"))
1503     {
1504       /* Gan Chinese; Macao */
1505       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1506       *count = 1;
1507       return true;
1508     }
1509     if (0 == strncmp (&lang_str[1], "an-", 3)
1510 	&& subtag_matches (lang_str, limit, "-tw"))
1511     {
1512       /* Gan Chinese; Taiwan, Province of China */
1513       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1514       *count = 1;
1515       return true;
1516     }
1517     break;
1518   case 'h':
1519     if (lang_matches (&lang_str[1], "ak-hant-hk"))
1520     {
1521       /* Hakka Chinese */
1522       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1523       *count = 1;
1524       return true;
1525     }
1526     if (lang_matches (&lang_str[1], "ak-hant-mo"))
1527     {
1528       /* Hakka Chinese */
1529       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1530       *count = 1;
1531       return true;
1532     }
1533     if (lang_matches (&lang_str[1], "sn-hant-hk"))
1534     {
1535       /* Xiang Chinese */
1536       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1537       *count = 1;
1538       return true;
1539     }
1540     if (lang_matches (&lang_str[1], "sn-hant-mo"))
1541     {
1542       /* Xiang Chinese */
1543       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1544       *count = 1;
1545       return true;
1546     }
1547     if (lang_matches (&lang_str[1], "ak-hans"))
1548     {
1549       /* Hakka Chinese */
1550       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese Simplified */
1551       *count = 1;
1552       return true;
1553     }
1554     if (lang_matches (&lang_str[1], "ak-hant"))
1555     {
1556       /* Hakka Chinese */
1557       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1558       *count = 1;
1559       return true;
1560     }
1561     if (lang_matches (&lang_str[1], "sn-hans"))
1562     {
1563       /* Xiang Chinese */
1564       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese Simplified */
1565       *count = 1;
1566       return true;
1567     }
1568     if (lang_matches (&lang_str[1], "sn-hant"))
1569     {
1570       /* Xiang Chinese */
1571       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1572       *count = 1;
1573       return true;
1574     }
1575     if (0 == strncmp (&lang_str[1], "ak-", 3)
1576 	&& subtag_matches (lang_str, limit, "-hk"))
1577     {
1578       /* Hakka Chinese; Hong Kong */
1579       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1580       *count = 1;
1581       return true;
1582     }
1583     if (0 == strncmp (&lang_str[1], "ak-", 3)
1584 	&& subtag_matches (lang_str, limit, "-mo"))
1585     {
1586       /* Hakka Chinese; Macao */
1587       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1588       *count = 1;
1589       return true;
1590     }
1591     if (0 == strncmp (&lang_str[1], "ak-", 3)
1592 	&& subtag_matches (lang_str, limit, "-tw"))
1593     {
1594       /* Hakka Chinese; Taiwan, Province of China */
1595       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1596       *count = 1;
1597       return true;
1598     }
1599     if (0 == strncmp (&lang_str[1], "sn-", 3)
1600 	&& subtag_matches (lang_str, limit, "-hk"))
1601     {
1602       /* Xiang Chinese; Hong Kong */
1603       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1604       *count = 1;
1605       return true;
1606     }
1607     if (0 == strncmp (&lang_str[1], "sn-", 3)
1608 	&& subtag_matches (lang_str, limit, "-mo"))
1609     {
1610       /* Xiang Chinese; Macao */
1611       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1612       *count = 1;
1613       return true;
1614     }
1615     if (0 == strncmp (&lang_str[1], "sn-", 3)
1616 	&& subtag_matches (lang_str, limit, "-tw"))
1617     {
1618       /* Xiang Chinese; Taiwan, Province of China */
1619       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1620       *count = 1;
1621       return true;
1622     }
1623     break;
1624   case 'i':
1625     if (0 == strcmp (&lang_str[1], "-navajo"))
1626     {
1627       /* Navajo */
1628       unsigned int i;
1629       hb_tag_t possible_tags[] = {
1630 	HB_TAG('N','A','V',' '),  /* Navajo */
1631 	HB_TAG('A','T','H',' '),  /* Athapaskan */
1632       };
1633       for (i = 0; i < 2 && i < *count; i++)
1634 	tags[i] = possible_tags[i];
1635       *count = i;
1636       return true;
1637     }
1638     if (0 == strcmp (&lang_str[1], "-hak"))
1639     {
1640       /* Hakka */
1641       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese Simplified */
1642       *count = 1;
1643       return true;
1644     }
1645     if (0 == strcmp (&lang_str[1], "-lux"))
1646     {
1647       /* Luxembourgish */
1648       tags[0] = HB_TAG('L','T','Z',' ');  /* Luxembourgish */
1649       *count = 1;
1650       return true;
1651     }
1652     break;
1653   case 'l':
1654     if (lang_matches (&lang_str[1], "zh-hans"))
1655     {
1656       /* Literary Chinese */
1657       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese Simplified */
1658       *count = 1;
1659       return true;
1660     }
1661     break;
1662   case 'm':
1663     if (lang_matches (&lang_str[1], "np-hant-hk"))
1664     {
1665       /* Min Bei Chinese */
1666       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1667       *count = 1;
1668       return true;
1669     }
1670     if (lang_matches (&lang_str[1], "np-hant-mo"))
1671     {
1672       /* Min Bei Chinese */
1673       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1674       *count = 1;
1675       return true;
1676     }
1677     if (lang_matches (&lang_str[1], "np-hans"))
1678     {
1679       /* Min Bei Chinese */
1680       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese Simplified */
1681       *count = 1;
1682       return true;
1683     }
1684     if (lang_matches (&lang_str[1], "np-hant"))
1685     {
1686       /* Min Bei Chinese */
1687       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1688       *count = 1;
1689       return true;
1690     }
1691     if (0 == strncmp (&lang_str[1], "np-", 3)
1692 	&& subtag_matches (lang_str, limit, "-hk"))
1693     {
1694       /* Min Bei Chinese; Hong Kong */
1695       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1696       *count = 1;
1697       return true;
1698     }
1699     if (0 == strncmp (&lang_str[1], "np-", 3)
1700 	&& subtag_matches (lang_str, limit, "-mo"))
1701     {
1702       /* Min Bei Chinese; Macao */
1703       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1704       *count = 1;
1705       return true;
1706     }
1707     if (0 == strncmp (&lang_str[1], "np-", 3)
1708 	&& subtag_matches (lang_str, limit, "-tw"))
1709     {
1710       /* Min Bei Chinese; Taiwan, Province of China */
1711       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1712       *count = 1;
1713       return true;
1714     }
1715     break;
1716   case 'n':
1717     if (lang_matches (&lang_str[1], "an-hant-hk"))
1718     {
1719       /* Min Nan Chinese */
1720       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1721       *count = 1;
1722       return true;
1723     }
1724     if (lang_matches (&lang_str[1], "an-hant-mo"))
1725     {
1726       /* Min Nan Chinese */
1727       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1728       *count = 1;
1729       return true;
1730     }
1731     if (lang_matches (&lang_str[1], "an-hans"))
1732     {
1733       /* Min Nan Chinese */
1734       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese Simplified */
1735       *count = 1;
1736       return true;
1737     }
1738     if (lang_matches (&lang_str[1], "an-hant"))
1739     {
1740       /* Min Nan Chinese */
1741       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1742       *count = 1;
1743       return true;
1744     }
1745     if (0 == strncmp (&lang_str[1], "an-", 3)
1746 	&& subtag_matches (lang_str, limit, "-hk"))
1747     {
1748       /* Min Nan Chinese; Hong Kong */
1749       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1750       *count = 1;
1751       return true;
1752     }
1753     if (0 == strncmp (&lang_str[1], "an-", 3)
1754 	&& subtag_matches (lang_str, limit, "-mo"))
1755     {
1756       /* Min Nan Chinese; Macao */
1757       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1758       *count = 1;
1759       return true;
1760     }
1761     if (0 == strncmp (&lang_str[1], "an-", 3)
1762 	&& subtag_matches (lang_str, limit, "-tw"))
1763     {
1764       /* Min Nan Chinese; Taiwan, Province of China */
1765       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1766       *count = 1;
1767       return true;
1768     }
1769     if (0 == strcmp (&lang_str[1], "o-bok"))
1770     {
1771       /* Norwegian Bokmal */
1772       tags[0] = HB_TAG('N','O','R',' ');  /* Norwegian */
1773       *count = 1;
1774       return true;
1775     }
1776     if (0 == strcmp (&lang_str[1], "o-nyn"))
1777     {
1778       /* Norwegian Nynorsk */
1779       tags[0] = HB_TAG('N','Y','N',' ');  /* Norwegian Nynorsk (Nynorsk, Norwegian) */
1780       *count = 1;
1781       return true;
1782     }
1783     break;
1784   case 'r':
1785     if (0 == strncmp (&lang_str[1], "o-", 2)
1786 	&& subtag_matches (lang_str, limit, "-md"))
1787     {
1788       /* Romanian; Moldova */
1789       tags[0] = HB_TAG('M','O','L',' ');  /* Moldavian */
1790       *count = 1;
1791       return true;
1792     }
1793     break;
1794   case 'w':
1795     if (lang_matches (&lang_str[1], "uu-hant-hk"))
1796     {
1797       /* Wu Chinese */
1798       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1799       *count = 1;
1800       return true;
1801     }
1802     if (lang_matches (&lang_str[1], "uu-hant-mo"))
1803     {
1804       /* Wu Chinese */
1805       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1806       *count = 1;
1807       return true;
1808     }
1809     if (lang_matches (&lang_str[1], "uu-hans"))
1810     {
1811       /* Wu Chinese */
1812       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese Simplified */
1813       *count = 1;
1814       return true;
1815     }
1816     if (lang_matches (&lang_str[1], "uu-hant"))
1817     {
1818       /* Wu Chinese */
1819       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1820       *count = 1;
1821       return true;
1822     }
1823     if (0 == strncmp (&lang_str[1], "uu-", 3)
1824 	&& subtag_matches (lang_str, limit, "-hk"))
1825     {
1826       /* Wu Chinese; Hong Kong */
1827       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1828       *count = 1;
1829       return true;
1830     }
1831     if (0 == strncmp (&lang_str[1], "uu-", 3)
1832 	&& subtag_matches (lang_str, limit, "-mo"))
1833     {
1834       /* Wu Chinese; Macao */
1835       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1836       *count = 1;
1837       return true;
1838     }
1839     if (0 == strncmp (&lang_str[1], "uu-", 3)
1840 	&& subtag_matches (lang_str, limit, "-tw"))
1841     {
1842       /* Wu Chinese; Taiwan, Province of China */
1843       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1844       *count = 1;
1845       return true;
1846     }
1847     break;
1848   case 'y':
1849     if (lang_matches (&lang_str[1], "ue-hans"))
1850     {
1851       /* Yue Chinese */
1852       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese Simplified */
1853       *count = 1;
1854       return true;
1855     }
1856     break;
1857   case 'z':
1858     if (lang_matches (&lang_str[1], "h-hant-hk"))
1859     {
1860       /* Chinese */
1861       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1862       *count = 1;
1863       return true;
1864     }
1865     if (lang_matches (&lang_str[1], "h-hant-mo"))
1866     {
1867       /* Chinese */
1868       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1869       *count = 1;
1870       return true;
1871     }
1872     if (0 == strcmp (&lang_str[1], "h-min-nan"))
1873     {
1874       /* Minnan, Hokkien, Amoy, Taiwanese, Southern Min, Southern Fujian, Hoklo, Southern Fukien, Ho-lo */
1875       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese Simplified */
1876       *count = 1;
1877       return true;
1878     }
1879     if (lang_matches (&lang_str[1], "h-hans"))
1880     {
1881       /* Chinese */
1882       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese Simplified */
1883       *count = 1;
1884       return true;
1885     }
1886     if (lang_matches (&lang_str[1], "h-hant"))
1887     {
1888       /* Chinese */
1889       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1890       *count = 1;
1891       return true;
1892     }
1893     if (0 == strcmp (&lang_str[1], "h-min"))
1894     {
1895       /* Min, Fuzhou, Hokkien, Amoy, or Taiwanese */
1896       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese Simplified */
1897       *count = 1;
1898       return true;
1899     }
1900     if (0 == strncmp (&lang_str[1], "h-", 2)
1901 	&& subtag_matches (lang_str, limit, "-hk"))
1902     {
1903       /* Chinese; Hong Kong */
1904       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1905       *count = 1;
1906       return true;
1907     }
1908     if (0 == strncmp (&lang_str[1], "h-", 2)
1909 	&& subtag_matches (lang_str, limit, "-mo"))
1910     {
1911       /* Chinese; Macao */
1912       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Hong Kong SAR */
1913       *count = 1;
1914       return true;
1915     }
1916     if (0 == strncmp (&lang_str[1], "h-", 2)
1917 	&& subtag_matches (lang_str, limit, "-tw"))
1918     {
1919       /* Chinese; Taiwan, Province of China */
1920       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese Traditional */
1921       *count = 1;
1922       return true;
1923     }
1924     break;
1925   }
1926   return false;
1927 }
1928 
1929 /**
1930  * hb_ot_ambiguous_tag_to_language
1931  * @tag: A language tag.
1932  *
1933  * Converts @tag to a BCP 47 language tag if it is ambiguous (it corresponds to
1934  * many language tags) and the best tag is not the alphabetically first, or if
1935  * the best tag consists of multiple subtags, or if the best tag does not appear
1936  * in #ot_languages.
1937  *
1938  * Return value: The #hb_language_t corresponding to the BCP 47 language tag,
1939  * or #HB_LANGUAGE_INVALID if @tag is not ambiguous.
1940  **/
1941 static hb_language_t
hb_ot_ambiguous_tag_to_language(hb_tag_t tag)1942 hb_ot_ambiguous_tag_to_language (hb_tag_t tag)
1943 {
1944   switch (tag)
1945   {
1946   case HB_TAG('A','L','T',' '):  /* Altai */
1947     return hb_language_from_string ("alt", -1);  /* Southern Altai */
1948   case HB_TAG('A','P','P','H'):  /* Phonetic transcription—Americanist conventions */
1949     return hb_language_from_string ("und-fonnapa", -1);  /* Undetermined; North American Phonetic Alphabet */
1950   case HB_TAG('A','R','A',' '):  /* Arabic */
1951     return hb_language_from_string ("ar", -1);  /* Arabic */
1952   case HB_TAG('A','R','K',' '):  /* Rakhine */
1953     return hb_language_from_string ("rki", -1);  /* Rakhine */
1954   case HB_TAG('A','T','H',' '):  /* Athapaskan */
1955     return hb_language_from_string ("ath", -1);  /* Athapascan */
1956   case HB_TAG('B','I','K',' '):  /* Bikol */
1957     return hb_language_from_string ("bik", -1);  /* Bikol */
1958   case HB_TAG('C','P','P',' '):  /* Creoles */
1959     return hb_language_from_string ("crp", -1);  /* Creoles and pidgins */
1960   case HB_TAG('C','R','R',' '):  /* Carrier */
1961     return hb_language_from_string ("crx", -1);  /* Carrier */
1962   case HB_TAG('D','N','K',' '):  /* Dinka */
1963     return hb_language_from_string ("din", -1);  /* Dinka */
1964   case HB_TAG('D','R','I',' '):  /* Dari */
1965     return hb_language_from_string ("prs", -1);  /* Dari */
1966   case HB_TAG('D','Z','N',' '):  /* Dzongkha */
1967     return hb_language_from_string ("dz", -1);  /* Dzongkha */
1968   case HB_TAG('E','T','I',' '):  /* Estonian */
1969     return hb_language_from_string ("et", -1);  /* Estonian */
1970   case HB_TAG('G','O','N',' '):  /* Gondi */
1971     return hb_language_from_string ("gon", -1);  /* Gondi */
1972   case HB_TAG('H','M','N',' '):  /* Hmong */
1973     return hb_language_from_string ("hmn", -1);  /* Hmong */
1974   case HB_TAG('H','N','D',' '):  /* Hindko */
1975     return hb_language_from_string ("hnd", -1);  /* Southern Hindko */
1976   case HB_TAG('I','J','O',' '):  /* Ijo */
1977     return hb_language_from_string ("ijo", -1);  /* Ijo */
1978   case HB_TAG('I','N','U',' '):  /* Inuktitut */
1979     return hb_language_from_string ("iu", -1);  /* Inuktitut */
1980   case HB_TAG('I','P','K',' '):  /* Inupiat */
1981     return hb_language_from_string ("ik", -1);  /* Inupiaq */
1982   case HB_TAG('I','P','P','H'):  /* Phonetic transcription—IPA conventions */
1983     return hb_language_from_string ("und-fonipa", -1);  /* Undetermined; International Phonetic Alphabet */
1984   case HB_TAG('I','R','T',' '):  /* Irish Traditional */
1985     return hb_language_from_string ("ga-Latg", -1);  /* Irish; Latin (Gaelic variant) */
1986   case HB_TAG('J','I','I',' '):  /* Yiddish */
1987     return hb_language_from_string ("yi", -1);  /* Yiddish */
1988   case HB_TAG('K','A','L',' '):  /* Kalenjin */
1989     return hb_language_from_string ("kln", -1);  /* Kalenjin */
1990   case HB_TAG('K','G','E',' '):  /* Khutsuri Georgian */
1991     return hb_language_from_string ("und-Geok", -1);  /* Undetermined; Khutsuri (Asomtavruli and Nuskhuri) */
1992   case HB_TAG('K','N','R',' '):  /* Kanuri */
1993     return hb_language_from_string ("kr", -1);  /* Kanuri */
1994   case HB_TAG('K','O','K',' '):  /* Konkani */
1995     return hb_language_from_string ("kok", -1);  /* Konkani */
1996   case HB_TAG('K','U','R',' '):  /* Kurdish */
1997     return hb_language_from_string ("ku", -1);  /* Kurdish */
1998   case HB_TAG('L','U','H',' '):  /* Luyia */
1999     return hb_language_from_string ("luy", -1);  /* Luyia */
2000   case HB_TAG('L','V','I',' '):  /* Latvian */
2001     return hb_language_from_string ("lv", -1);  /* Latvian */
2002   case HB_TAG('M','A','W',' '):  /* Marwari */
2003     return hb_language_from_string ("mwr", -1);  /* Marwari */
2004   case HB_TAG('M','L','G',' '):  /* Malagasy */
2005     return hb_language_from_string ("mg", -1);  /* Malagasy */
2006   case HB_TAG('M','L','Y',' '):  /* Malay */
2007     return hb_language_from_string ("ms", -1);  /* Malay */
2008   case HB_TAG('M','N','G',' '):  /* Mongolian */
2009     return hb_language_from_string ("mn", -1);  /* Mongolian */
2010   case HB_TAG('M','O','L',' '):  /* Moldavian */
2011     return hb_language_from_string ("ro-MD", -1);  /* Romanian; Moldova */
2012   case HB_TAG('N','E','P',' '):  /* Nepali */
2013     return hb_language_from_string ("ne", -1);  /* Nepali */
2014   case HB_TAG('N','I','S',' '):  /* Nisi */
2015     return hb_language_from_string ("njz", -1);  /* Nyishi */
2016   case HB_TAG('N','O','R',' '):  /* Norwegian */
2017     return hb_language_from_string ("no", -1);  /* Norwegian */
2018   case HB_TAG('O','J','B',' '):  /* Ojibway */
2019     return hb_language_from_string ("oj", -1);  /* Ojibwa */
2020   case HB_TAG('O','R','O',' '):  /* Oromo */
2021     return hb_language_from_string ("om", -1);  /* Oromo */
2022   case HB_TAG('P','A','S',' '):  /* Pashto */
2023     return hb_language_from_string ("ps", -1);  /* Pashto */
2024   case HB_TAG('P','G','R',' '):  /* Polytonic Greek */
2025     return hb_language_from_string ("el-polyton", -1);  /* Modern Greek (1453-); Polytonic Greek */
2026   case HB_TAG('P','R','O',' '):  /* Provençal / Old Provençal */
2027     return hb_language_from_string ("pro", -1);  /* Old Provençal (to 1500) */
2028   case HB_TAG('Q','U','H',' '):  /* Quechua (Bolivia) */
2029     return hb_language_from_string ("quh", -1);  /* South Bolivian Quechua */
2030   case HB_TAG('Q','V','I',' '):  /* Quechua (Ecuador) */
2031     return hb_language_from_string ("qvi", -1);  /* Imbabura Highland Quichua */
2032   case HB_TAG('Q','W','H',' '):  /* Quechua (Peru) */
2033     return hb_language_from_string ("qwh", -1);  /* Huaylas Ancash Quechua */
2034   case HB_TAG('R','A','J',' '):  /* Rajasthani */
2035     return hb_language_from_string ("raj", -1);  /* Rajasthani */
2036   case HB_TAG('R','O','Y',' '):  /* Romany */
2037     return hb_language_from_string ("rom", -1);  /* Romany */
2038   case HB_TAG('S','Q','I',' '):  /* Albanian */
2039     return hb_language_from_string ("sq", -1);  /* Albanian */
2040   case HB_TAG('S','Y','R',' '):  /* Syriac */
2041     return hb_language_from_string ("syr", -1);  /* Syriac */
2042   case HB_TAG('S','Y','R','E'):  /* Syriac, Estrangela script-variant (equivalent to ISO 15924 'Syre') */
2043     return hb_language_from_string ("und-Syre", -1);  /* Undetermined; Syriac (Estrangelo variant) */
2044   case HB_TAG('S','Y','R','J'):  /* Syriac, Western script-variant (equivalent to ISO 15924 'Syrj') */
2045     return hb_language_from_string ("und-Syrj", -1);  /* Undetermined; Syriac (Western variant) */
2046   case HB_TAG('S','Y','R','N'):  /* Syriac, Eastern script-variant (equivalent to ISO 15924 'Syrn') */
2047     return hb_language_from_string ("und-Syrn", -1);  /* Undetermined; Syriac (Eastern variant) */
2048   case HB_TAG('T','M','H',' '):  /* Tamashek */
2049     return hb_language_from_string ("tmh", -1);  /* Tamashek */
2050   case HB_TAG('T','N','E',' '):  /* Tundra Nenets */
2051     return hb_language_from_string ("yrk", -1);  /* Nenets */
2052   case HB_TAG('Z','H','H',' '):  /* Chinese, Hong Kong SAR */
2053     return hb_language_from_string ("zh-HK", -1);  /* Chinese; Hong Kong */
2054   case HB_TAG('Z','H','S',' '):  /* Chinese Simplified */
2055     return hb_language_from_string ("zh-Hans", -1);  /* Chinese; Han (Simplified variant) */
2056   case HB_TAG('Z','H','T',' '):  /* Chinese Traditional */
2057     return hb_language_from_string ("zh-Hant", -1);  /* Chinese; Han (Traditional variant) */
2058   default:
2059     return HB_LANGUAGE_INVALID;
2060   }
2061 }
2062 
2063 #endif /* HB_OT_TAG_TABLE_HH */
2064 
2065 /* == End of generated table == */
2066