• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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="2021-09-02 09:40 PM" />
10  * File-Date: 2021-08-06
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   {"aba",	HB_TAG_NONE	       },	/* Abé != Abaza */
23   {"abh",	HB_TAG('A','R','A',' ')},	/* Tajiki Arabic -> Arabic */
24   {"abq",	HB_TAG('A','B','A',' ')},	/* Abaza */
25   {"abs",	HB_TAG('C','P','P',' ')},	/* Ambonese Malay -> Creoles */
26   {"abv",	HB_TAG('A','R','A',' ')},	/* Baharna Arabic -> Arabic */
27   {"acf",	HB_TAG('F','A','N',' ')},	/* Saint Lucian Creole French -> French Antillean */
28   {"acf",	HB_TAG('C','P','P',' ')},	/* Saint Lucian Creole French -> Creoles */
29 /*{"ach",	HB_TAG('A','C','H',' ')},*/	/* Acoli -> Acholi */
30   {"acm",	HB_TAG('A','R','A',' ')},	/* Mesopotamian Arabic -> Arabic */
31   {"acq",	HB_TAG('A','R','A',' ')},	/* Ta'izzi-Adeni Arabic -> Arabic */
32   {"acr",	HB_TAG('A','C','R',' ')},	/* Achi */
33   {"acr",	HB_TAG('M','Y','N',' ')},	/* Achi -> Mayan */
34   {"acw",	HB_TAG('A','R','A',' ')},	/* Hijazi Arabic -> Arabic */
35   {"acx",	HB_TAG('A','R','A',' ')},	/* Omani Arabic -> Arabic */
36   {"acy",	HB_TAG('A','R','A',' ')},	/* Cypriot Arabic -> Arabic */
37   {"ada",	HB_TAG('D','N','G',' ')},	/* Adangme -> Dangme */
38   {"adf",	HB_TAG('A','R','A',' ')},	/* Dhofari Arabic -> Arabic */
39   {"adp",	HB_TAG('D','Z','N',' ')},	/* Adap (retired code) -> Dzongkha */
40 /*{"ady",	HB_TAG('A','D','Y',' ')},*/	/* Adyghe */
41   {"aeb",	HB_TAG('A','R','A',' ')},	/* Tunisian Arabic -> Arabic */
42   {"aec",	HB_TAG('A','R','A',' ')},	/* Saidi Arabic -> Arabic */
43   {"af",	HB_TAG('A','F','K',' ')},	/* Afrikaans */
44   {"afb",	HB_TAG('A','R','A',' ')},	/* Gulf Arabic -> Arabic */
45   {"afk",	HB_TAG_NONE	       },	/* Nanubae != Afrikaans */
46   {"afs",	HB_TAG('C','P','P',' ')},	/* Afro-Seminole Creole -> Creoles */
47   {"agu",	HB_TAG('M','Y','N',' ')},	/* Aguacateco -> Mayan */
48   {"agw",	HB_TAG_NONE	       },	/* Kahua != Agaw */
49   {"ahg",	HB_TAG('A','G','W',' ')},	/* Qimant -> Agaw */
50   {"aht",	HB_TAG('A','T','H',' ')},	/* Ahtena -> Athapaskan */
51   {"aig",	HB_TAG('C','P','P',' ')},	/* Antigua and Barbuda Creole English -> Creoles */
52   {"aii",	HB_TAG('S','W','A',' ')},	/* Assyrian Neo-Aramaic -> Swadaya Aramaic */
53   {"aii",	HB_TAG('S','Y','R',' ')},	/* Assyrian Neo-Aramaic -> Syriac */
54 /*{"aio",	HB_TAG('A','I','O',' ')},*/	/* Aiton */
55   {"aiw",	HB_TAG('A','R','I',' ')},	/* Aari */
56   {"ajp",	HB_TAG('A','R','A',' ')},	/* South Levantine Arabic -> Arabic */
57   {"ak",	HB_TAG('A','K','A',' ')},	/* Akan [macrolanguage] */
58   {"akb",	HB_TAG('A','K','B',' ')},	/* Batak Angkola */
59   {"akb",	HB_TAG('B','T','K',' ')},	/* Batak Angkola -> Batak */
60   {"aln",	HB_TAG('S','Q','I',' ')},	/* Gheg Albanian -> Albanian */
61   {"als",	HB_TAG('S','Q','I',' ')},	/* Tosk Albanian -> Albanian */
62 /*{"alt",	HB_TAG('A','L','T',' ')},*/	/* Southern Altai -> Altai */
63   {"am",	HB_TAG('A','M','H',' ')},	/* Amharic */
64   {"amf",	HB_TAG('H','B','N',' ')},	/* Hamer-Banna -> Hammer-Banna */
65   {"amw",	HB_TAG('S','Y','R',' ')},	/* Western Neo-Aramaic -> Syriac */
66   {"an",	HB_TAG('A','R','G',' ')},	/* Aragonese */
67 /*{"ang",	HB_TAG('A','N','G',' ')},*/	/* Old English (ca. 450-1100) -> Anglo-Saxon */
68   {"aoa",	HB_TAG('C','P','P',' ')},	/* Angolar -> Creoles */
69   {"apa",	HB_TAG('A','T','H',' ')},	/* Apache [family] -> Athapaskan */
70   {"apc",	HB_TAG('A','R','A',' ')},	/* North Levantine Arabic -> Arabic */
71   {"apd",	HB_TAG('A','R','A',' ')},	/* Sudanese Arabic -> Arabic */
72   {"apj",	HB_TAG('A','T','H',' ')},	/* Jicarilla Apache -> Athapaskan */
73   {"apk",	HB_TAG('A','T','H',' ')},	/* Kiowa Apache -> Athapaskan */
74   {"apl",	HB_TAG('A','T','H',' ')},	/* Lipan Apache -> Athapaskan */
75   {"apm",	HB_TAG('A','T','H',' ')},	/* Mescalero-Chiricahua Apache -> Athapaskan */
76   {"apw",	HB_TAG('A','T','H',' ')},	/* Western Apache -> Athapaskan */
77   {"ar",	HB_TAG('A','R','A',' ')},	/* Arabic [macrolanguage] */
78   {"arb",	HB_TAG('A','R','A',' ')},	/* Standard Arabic -> Arabic */
79   {"ari",	HB_TAG_NONE	       },	/* Arikara != Aari */
80   {"ark",	HB_TAG_NONE	       },	/* Arikapú != Rakhine */
81   {"arn",	HB_TAG('M','A','P',' ')},	/* Mapudungun */
82   {"arq",	HB_TAG('A','R','A',' ')},	/* Algerian Arabic -> Arabic */
83   {"ars",	HB_TAG('A','R','A',' ')},	/* Najdi Arabic -> Arabic */
84   {"ary",	HB_TAG('M','O','R',' ')},	/* Moroccan Arabic -> Moroccan */
85   {"ary",	HB_TAG('A','R','A',' ')},	/* Moroccan Arabic -> Arabic */
86   {"arz",	HB_TAG('A','R','A',' ')},	/* Egyptian Arabic -> Arabic */
87   {"as",	HB_TAG('A','S','M',' ')},	/* Assamese */
88 /*{"ast",	HB_TAG('A','S','T',' ')},*/	/* Asturian */
89 /*{"ath",	HB_TAG('A','T','H',' ')},*/	/* Athapascan [family] -> Athapaskan */
90   {"atj",	HB_TAG('R','C','R',' ')},	/* Atikamekw -> R-Cree */
91   {"atv",	HB_TAG('A','L','T',' ')},	/* Northern Altai -> Altai */
92   {"auj",	HB_TAG('B','B','R',' ')},	/* Awjilah -> Berber */
93   {"auz",	HB_TAG('A','R','A',' ')},	/* Uzbeki Arabic -> Arabic */
94   {"av",	HB_TAG('A','V','R',' ')},	/* Avaric -> Avar */
95   {"avl",	HB_TAG('A','R','A',' ')},	/* Eastern Egyptian Bedawi Arabic -> Arabic */
96 /*{"avn",	HB_TAG('A','V','N',' ')},*/	/* Avatime */
97 /*{"awa",	HB_TAG('A','W','A',' ')},*/	/* Awadhi */
98   {"ay",	HB_TAG('A','Y','M',' ')},	/* Aymara [macrolanguage] */
99   {"ayc",	HB_TAG('A','Y','M',' ')},	/* Southern Aymara -> Aymara */
100   {"ayh",	HB_TAG('A','R','A',' ')},	/* Hadrami Arabic -> Arabic */
101   {"ayl",	HB_TAG('A','R','A',' ')},	/* Libyan Arabic -> Arabic */
102   {"ayn",	HB_TAG('A','R','A',' ')},	/* Sanaani Arabic -> Arabic */
103   {"ayp",	HB_TAG('A','R','A',' ')},	/* North Mesopotamian Arabic -> Arabic */
104   {"ayr",	HB_TAG('A','Y','M',' ')},	/* Central Aymara -> Aymara */
105   {"az",	HB_TAG('A','Z','E',' ')},	/* Azerbaijani [macrolanguage] */
106   {"azb",	HB_TAG('A','Z','B',' ')},	/* South Azerbaijani -> Torki */
107   {"azb",	HB_TAG('A','Z','E',' ')},	/* South Azerbaijani -> Azerbaijani */
108   {"azd",	HB_TAG('N','A','H',' ')},	/* Eastern Durango Nahuatl -> Nahuatl */
109   {"azj",	HB_TAG('A','Z','E',' ')},	/* North Azerbaijani -> Azerbaijani */
110   {"azn",	HB_TAG('N','A','H',' ')},	/* Western Durango Nahuatl -> Nahuatl */
111   {"azz",	HB_TAG('N','A','H',' ')},	/* Highland Puebla Nahuatl -> Nahuatl */
112   {"ba",	HB_TAG('B','S','H',' ')},	/* Bashkir */
113   {"bad",	HB_TAG('B','A','D','0')},	/* Banda [family] */
114   {"bag",	HB_TAG_NONE	       },	/* Tuki != Baghelkhandi */
115   {"bah",	HB_TAG('C','P','P',' ')},	/* Bahamas Creole English -> Creoles */
116   {"bai",	HB_TAG('B','M','L',' ')},	/* Bamileke [family] */
117   {"bal",	HB_TAG('B','L','I',' ')},	/* Baluchi [macrolanguage] */
118 /*{"ban",	HB_TAG('B','A','N',' ')},*/	/* Balinese */
119 /*{"bar",	HB_TAG('B','A','R',' ')},*/	/* Bavarian */
120   {"bau",	HB_TAG_NONE	       },	/* Bada (Nigeria) != Baulé */
121   {"bbc",	HB_TAG('B','B','C',' ')},	/* Batak Toba */
122   {"bbc",	HB_TAG('B','T','K',' ')},	/* Batak Toba -> Batak */
123   {"bbj",	HB_TAG('B','M','L',' ')},	/* Ghomálá' -> Bamileke */
124   {"bbp",	HB_TAG('B','A','D','0')},	/* West Central Banda -> Banda */
125   {"bbr",	HB_TAG_NONE	       },	/* Girawa != Berber */
126   {"bbz",	HB_TAG('A','R','A',' ')},	/* Babalia Creole Arabic (retired code) -> Arabic */
127   {"bcc",	HB_TAG('B','L','I',' ')},	/* Southern Balochi -> Baluchi */
128   {"bch",	HB_TAG_NONE	       },	/* Bariai != Bench */
129   {"bci",	HB_TAG('B','A','U',' ')},	/* Baoulé -> Baulé */
130   {"bcl",	HB_TAG('B','I','K',' ')},	/* Central Bikol -> Bikol */
131   {"bcq",	HB_TAG('B','C','H',' ')},	/* Bench */
132   {"bcr",	HB_TAG('A','T','H',' ')},	/* Babine -> Athapaskan */
133 /*{"bdy",	HB_TAG('B','D','Y',' ')},*/	/* Bandjalang */
134   {"be",	HB_TAG('B','E','L',' ')},	/* Belarusian -> Belarussian */
135   {"bea",	HB_TAG('A','T','H',' ')},	/* Beaver -> Athapaskan */
136   {"beb",	HB_TAG('B','T','I',' ')},	/* Bebele -> Beti */
137 /*{"bem",	HB_TAG('B','E','M',' ')},*/	/* Bemba (Zambia) */
138   {"ber",	HB_TAG('B','B','R',' ')},	/* Berber [family] */
139   {"bew",	HB_TAG('C','P','P',' ')},	/* Betawi -> Creoles */
140   {"bfl",	HB_TAG('B','A','D','0')},	/* Banda-Ndélé -> Banda */
141   {"bfq",	HB_TAG('B','A','D',' ')},	/* Badaga */
142   {"bft",	HB_TAG('B','L','T',' ')},	/* Balti */
143   {"bfu",	HB_TAG('L','A','H',' ')},	/* Gahri -> Lahuli */
144   {"bfy",	HB_TAG('B','A','G',' ')},	/* Bagheli -> Baghelkhandi */
145   {"bg",	HB_TAG('B','G','R',' ')},	/* Bulgarian */
146 /*{"bgc",	HB_TAG('B','G','C',' ')},*/	/* Haryanvi */
147   {"bgn",	HB_TAG('B','L','I',' ')},	/* Western Balochi -> Baluchi */
148   {"bgp",	HB_TAG('B','L','I',' ')},	/* Eastern Balochi -> Baluchi */
149   {"bgq",	HB_TAG('B','G','Q',' ')},	/* Bagri */
150   {"bgq",	HB_TAG('R','A','J',' ')},	/* Bagri -> Rajasthani */
151   {"bgr",	HB_TAG('Q','I','N',' ')},	/* Bawm Chin -> Chin */
152   {"bhb",	HB_TAG('B','H','I',' ')},	/* Bhili */
153 /*{"bhi",	HB_TAG('B','H','I',' ')},*/	/* Bhilali -> Bhili */
154   {"bhk",	HB_TAG('B','I','K',' ')},	/* Albay Bicolano (retired code) -> Bikol */
155 /*{"bho",	HB_TAG('B','H','O',' ')},*/	/* Bhojpuri */
156   {"bhr",	HB_TAG('M','L','G',' ')},	/* Bara Malagasy -> Malagasy */
157   {"bi",	HB_TAG('B','I','S',' ')},	/* Bislama */
158   {"bi",	HB_TAG('C','P','P',' ')},	/* Bislama -> Creoles */
159 /*{"bik",	HB_TAG('B','I','K',' ')},*/	/* Bikol [macrolanguage] */
160   {"bil",	HB_TAG_NONE	       },	/* Bile != Bilen */
161   {"bin",	HB_TAG('E','D','O',' ')},	/* Edo */
162   {"biu",	HB_TAG('Q','I','N',' ')},	/* Biete -> Chin */
163 /*{"bjj",	HB_TAG('B','J','J',' ')},*/	/* Kanauji */
164   {"bjn",	HB_TAG('M','L','Y',' ')},	/* Banjar -> Malay */
165   {"bjo",	HB_TAG('B','A','D','0')},	/* Mid-Southern Banda -> Banda */
166   {"bjq",	HB_TAG('M','L','G',' ')},	/* Southern Betsimisaraka Malagasy (retired code) -> Malagasy */
167   {"bjs",	HB_TAG('C','P','P',' ')},	/* Bajan -> Creoles */
168   {"bjt",	HB_TAG('B','L','N',' ')},	/* Balanta-Ganja -> Balante */
169   {"bkf",	HB_TAG_NONE	       },	/* Beeke != Blackfoot */
170   {"bko",	HB_TAG('B','M','L',' ')},	/* Kwa' -> Bamileke */
171   {"bla",	HB_TAG('B','K','F',' ')},	/* Siksika -> Blackfoot */
172   {"ble",	HB_TAG('B','L','N',' ')},	/* Balanta-Kentohe -> Balante */
173   {"blg",	HB_TAG('I','B','A',' ')},	/* Balau (retired code) -> Iban */
174   {"bli",	HB_TAG_NONE	       },	/* Bolia != Baluchi */
175   {"blk",	HB_TAG('B','L','K',' ')},	/* Pa’o Karen */
176   {"blk",	HB_TAG('K','R','N',' ')},	/* Pa'o Karen -> Karen */
177   {"bln",	HB_TAG('B','I','K',' ')},	/* Southern Catanduanes Bikol -> Bikol */
178   {"blt",	HB_TAG_NONE	       },	/* Tai Dam != Balti */
179   {"bm",	HB_TAG('B','M','B',' ')},	/* Bambara (Bamanankan) */
180   {"bmb",	HB_TAG_NONE	       },	/* Bembe != Bambara (Bamanankan) */
181   {"bml",	HB_TAG_NONE	       },	/* Bomboli != Bamileke */
182   {"bmm",	HB_TAG('M','L','G',' ')},	/* Northern Betsimisaraka Malagasy -> Malagasy */
183   {"bn",	HB_TAG('B','E','N',' ')},	/* Bengali */
184   {"bo",	HB_TAG('T','I','B',' ')},	/* Tibetan */
185   {"bpd",	HB_TAG('B','A','D','0')},	/* Banda-Banda -> Banda */
186   {"bpl",	HB_TAG('C','P','P',' ')},	/* Broome Pearling Lugger Pidgin -> Creoles */
187   {"bpq",	HB_TAG('C','P','P',' ')},	/* Banda Malay -> Creoles */
188 /*{"bpy",	HB_TAG('B','P','Y',' ')},*/	/* Bishnupriya -> Bishnupriya Manipuri */
189   {"bqi",	HB_TAG('L','R','C',' ')},	/* Bakhtiari -> Luri */
190   {"bqk",	HB_TAG('B','A','D','0')},	/* Banda-Mbrès -> Banda */
191   {"br",	HB_TAG('B','R','E',' ')},	/* Breton */
192   {"bra",	HB_TAG('B','R','I',' ')},	/* Braj -> Braj Bhasha */
193   {"brc",	HB_TAG('C','P','P',' ')},	/* Berbice Creole Dutch -> Creoles */
194 /*{"brh",	HB_TAG('B','R','H',' ')},*/	/* Brahui */
195   {"bri",	HB_TAG_NONE	       },	/* Mokpwe != Braj Bhasha */
196   {"brm",	HB_TAG_NONE	       },	/* Barambu != Burmese */
197 /*{"brx",	HB_TAG('B','R','X',' ')},*/	/* Bodo (India) */
198   {"bs",	HB_TAG('B','O','S',' ')},	/* Bosnian */
199   {"bsh",	HB_TAG_NONE	       },	/* Kati != Bashkir */
200 /*{"bsk",	HB_TAG('B','S','K',' ')},*/	/* Burushaski */
201   {"btb",	HB_TAG('B','T','I',' ')},	/* Beti (Cameroon) (retired code) */
202   {"btd",	HB_TAG('B','T','D',' ')},	/* Batak Dairi (Pakpak) */
203   {"btd",	HB_TAG('B','T','K',' ')},	/* Batak Dairi -> Batak */
204   {"bti",	HB_TAG_NONE	       },	/* Burate != Beti */
205   {"btj",	HB_TAG('M','L','Y',' ')},	/* Bacanese Malay -> Malay */
206 /*{"btk",	HB_TAG('B','T','K',' ')},*/	/* Batak [family] */
207   {"btm",	HB_TAG('B','T','M',' ')},	/* Batak Mandailing */
208   {"btm",	HB_TAG('B','T','K',' ')},	/* Batak Mandailing -> Batak */
209   {"bto",	HB_TAG('B','I','K',' ')},	/* Rinconada Bikol -> Bikol */
210   {"bts",	HB_TAG('B','T','S',' ')},	/* Batak Simalungun */
211   {"bts",	HB_TAG('B','T','K',' ')},	/* Batak Simalungun -> Batak */
212   {"btx",	HB_TAG('B','T','X',' ')},	/* Batak Karo */
213   {"btx",	HB_TAG('B','T','K',' ')},	/* Batak Karo -> Batak */
214   {"btz",	HB_TAG('B','T','Z',' ')},	/* Batak Alas-Kluet */
215   {"btz",	HB_TAG('B','T','K',' ')},	/* Batak Alas-Kluet -> Batak */
216 /*{"bug",	HB_TAG('B','U','G',' ')},*/	/* Buginese -> Bugis */
217   {"bum",	HB_TAG('B','T','I',' ')},	/* Bulu (Cameroon) -> Beti */
218   {"bve",	HB_TAG('M','L','Y',' ')},	/* Berau Malay -> Malay */
219   {"bvu",	HB_TAG('M','L','Y',' ')},	/* Bukit Malay -> Malay */
220   {"bwe",	HB_TAG('K','R','N',' ')},	/* Bwe Karen -> Karen */
221   {"bxk",	HB_TAG('L','U','H',' ')},	/* Bukusu -> Luyia */
222   {"bxo",	HB_TAG('C','P','P',' ')},	/* Barikanchi -> Creoles */
223   {"bxp",	HB_TAG('B','T','I',' ')},	/* Bebil -> Beti */
224   {"bxr",	HB_TAG('R','B','U',' ')},	/* Russia Buriat -> Russian Buriat */
225   {"byn",	HB_TAG('B','I','L',' ')},	/* Bilin -> Bilen */
226   {"byv",	HB_TAG('B','Y','V',' ')},	/* Medumba */
227   {"byv",	HB_TAG('B','M','L',' ')},	/* Medumba -> Bamileke */
228   {"bzc",	HB_TAG('M','L','G',' ')},	/* Southern Betsimisaraka Malagasy -> Malagasy */
229   {"bzj",	HB_TAG('C','P','P',' ')},	/* Belize Kriol English -> Creoles */
230   {"bzk",	HB_TAG('C','P','P',' ')},	/* Nicaragua Creole English -> Creoles */
231   {"ca",	HB_TAG('C','A','T',' ')},	/* Catalan */
232   {"caa",	HB_TAG('M','Y','N',' ')},	/* Chortí -> Mayan */
233   {"cac",	HB_TAG('M','Y','N',' ')},	/* Chuj -> Mayan */
234   {"caf",	HB_TAG('C','R','R',' ')},	/* Southern Carrier -> Carrier */
235   {"caf",	HB_TAG('A','T','H',' ')},	/* Southern Carrier -> Athapaskan */
236   {"cak",	HB_TAG('C','A','K',' ')},	/* Kaqchikel */
237   {"cak",	HB_TAG('M','Y','N',' ')},	/* Kaqchikel -> Mayan */
238   {"cbk",	HB_TAG('C','B','K',' ')},	/* Chavacano -> Zamboanga Chavacano */
239   {"cbk",	HB_TAG('C','P','P',' ')},	/* Chavacano -> Creoles */
240   {"cbl",	HB_TAG('Q','I','N',' ')},	/* Bualkhaw Chin -> Chin */
241   {"ccl",	HB_TAG('C','P','P',' ')},	/* Cutchi-Swahili -> Creoles */
242   {"ccm",	HB_TAG('C','P','P',' ')},	/* Malaccan Creole Malay -> Creoles */
243   {"cco",	HB_TAG('C','C','H','N')},	/* Comaltepec Chinantec -> Chinantec */
244   {"ccq",	HB_TAG('A','R','K',' ')},	/* Chaungtha (retired code) -> Rakhine */
245   {"cdo",	HB_TAG('Z','H','S',' ')},	/* Min Dong Chinese -> Chinese, Simplified */
246   {"ce",	HB_TAG('C','H','E',' ')},	/* Chechen */
247 /*{"ceb",	HB_TAG('C','E','B',' ')},*/	/* Cebuano */
248   {"cek",	HB_TAG('Q','I','N',' ')},	/* Eastern Khumi Chin -> Chin */
249   {"cey",	HB_TAG('Q','I','N',' ')},	/* Ekai Chin -> Chin */
250   {"cfm",	HB_TAG('H','A','L',' ')},	/* Halam (Falam Chin) */
251   {"cfm",	HB_TAG('Q','I','N',' ')},	/* Falam Chin -> Chin */
252 /*{"cgg",	HB_TAG('C','G','G',' ')},*/	/* Chiga */
253   {"ch",	HB_TAG('C','H','A',' ')},	/* Chamorro */
254   {"chf",	HB_TAG('M','Y','N',' ')},	/* Tabasco Chontal -> Mayan */
255   {"chg",	HB_TAG_NONE	       },	/* Chagatai != Chaha Gurage */
256   {"chh",	HB_TAG_NONE	       },	/* Chinook != Chattisgarhi */
257   {"chj",	HB_TAG('C','C','H','N')},	/* Ojitlán Chinantec -> Chinantec */
258   {"chk",	HB_TAG('C','H','K','0')},	/* Chuukese */
259   {"chn",	HB_TAG('C','P','P',' ')},	/* Chinook jargon -> Creoles */
260 /*{"cho",	HB_TAG('C','H','O',' ')},*/	/* Choctaw */
261   {"chp",	HB_TAG('C','H','P',' ')},	/* Chipewyan */
262   {"chp",	HB_TAG('S','A','Y',' ')},	/* Chipewyan -> Sayisi */
263   {"chp",	HB_TAG('A','T','H',' ')},	/* Chipewyan -> Athapaskan */
264   {"chq",	HB_TAG('C','C','H','N')},	/* Quiotepec Chinantec -> Chinantec */
265 /*{"chr",	HB_TAG('C','H','R',' ')},*/	/* Cherokee */
266 /*{"chy",	HB_TAG('C','H','Y',' ')},*/	/* Cheyenne */
267   {"chz",	HB_TAG('C','C','H','N')},	/* Ozumacín Chinantec -> Chinantec */
268   {"ciw",	HB_TAG('O','J','B',' ')},	/* Chippewa -> Ojibway */
269 /*{"cja",	HB_TAG('C','J','A',' ')},*/	/* Western Cham */
270 /*{"cjm",	HB_TAG('C','J','M',' ')},*/	/* Eastern Cham */
271   {"cjy",	HB_TAG('Z','H','S',' ')},	/* Jinyu Chinese -> Chinese, Simplified */
272   {"cka",	HB_TAG('Q','I','N',' ')},	/* Khumi Awa Chin (retired code) -> Chin */
273   {"ckb",	HB_TAG('K','U','R',' ')},	/* Central Kurdish -> Kurdish */
274   {"ckn",	HB_TAG('Q','I','N',' ')},	/* Kaang Chin -> Chin */
275   {"cks",	HB_TAG('C','P','P',' ')},	/* Tayo -> Creoles */
276   {"ckt",	HB_TAG('C','H','K',' ')},	/* Chukot -> Chukchi */
277   {"ckz",	HB_TAG('M','Y','N',' ')},	/* Cakchiquel-Quiché Mixed Language -> Mayan */
278   {"clc",	HB_TAG('A','T','H',' ')},	/* Chilcotin -> Athapaskan */
279   {"cld",	HB_TAG('S','Y','R',' ')},	/* Chaldean Neo-Aramaic -> Syriac */
280   {"cle",	HB_TAG('C','C','H','N')},	/* Lealao Chinantec -> Chinantec */
281   {"clj",	HB_TAG('Q','I','N',' ')},	/* Laitu Chin -> Chin */
282   {"clt",	HB_TAG('Q','I','N',' ')},	/* Lautu Chin -> Chin */
283   {"cmn",	HB_TAG('Z','H','S',' ')},	/* Mandarin Chinese -> Chinese, Simplified */
284   {"cmr",	HB_TAG('Q','I','N',' ')},	/* Mro-Khimi Chin -> Chin */
285   {"cnb",	HB_TAG('Q','I','N',' ')},	/* Chinbon Chin -> Chin */
286   {"cnh",	HB_TAG('Q','I','N',' ')},	/* Hakha Chin -> Chin */
287   {"cnk",	HB_TAG('Q','I','N',' ')},	/* Khumi Chin -> Chin */
288   {"cnl",	HB_TAG('C','C','H','N')},	/* Lalana Chinantec -> Chinantec */
289   {"cnp",	HB_TAG('Z','H','S',' ')},	/* Northern Ping Chinese -> Chinese, Simplified */
290   {"cnr",	HB_TAG('S','R','B',' ')},	/* Montenegrin -> Serbian */
291   {"cnt",	HB_TAG('C','C','H','N')},	/* Tepetotutla Chinantec -> Chinantec */
292   {"cnu",	HB_TAG('B','B','R',' ')},	/* Chenoua -> Berber */
293   {"cnw",	HB_TAG('Q','I','N',' ')},	/* Ngawn Chin -> Chin */
294   {"co",	HB_TAG('C','O','S',' ')},	/* Corsican */
295   {"coa",	HB_TAG('M','L','Y',' ')},	/* Cocos Islands Malay -> Malay */
296   {"cob",	HB_TAG('M','Y','N',' ')},	/* Chicomuceltec -> Mayan */
297 /*{"cop",	HB_TAG('C','O','P',' ')},*/	/* Coptic */
298   {"coq",	HB_TAG('A','T','H',' ')},	/* Coquille -> Athapaskan */
299   {"cpa",	HB_TAG('C','C','H','N')},	/* Palantla Chinantec -> Chinantec */
300   {"cpe",	HB_TAG('C','P','P',' ')},	/* English-based creoles and pidgins [family] -> Creoles */
301   {"cpf",	HB_TAG('C','P','P',' ')},	/* French-based creoles and pidgins [family] -> Creoles */
302   {"cpi",	HB_TAG('C','P','P',' ')},	/* Chinese Pidgin English -> Creoles */
303 /*{"cpp",	HB_TAG('C','P','P',' ')},*/	/* Portuguese-based creoles and pidgins [family] -> Creoles */
304   {"cpx",	HB_TAG('Z','H','S',' ')},	/* Pu-Xian Chinese -> Chinese, Simplified */
305   {"cqd",	HB_TAG('H','M','N',' ')},	/* Chuanqiandian Cluster Miao -> Hmong */
306   {"cqu",	HB_TAG('Q','U','H',' ')},	/* Chilean Quechua (retired code) -> Quechua (Bolivia) */
307   {"cqu",	HB_TAG('Q','U','Z',' ')},	/* Chilean Quechua (retired code) -> Quechua */
308   {"cr",	HB_TAG('C','R','E',' ')},	/* Cree [macrolanguage] */
309   {"crh",	HB_TAG('C','R','T',' ')},	/* Crimean Tatar */
310   {"cri",	HB_TAG('C','P','P',' ')},	/* Sãotomense -> Creoles */
311   {"crj",	HB_TAG('E','C','R',' ')},	/* Southern East Cree -> Eastern Cree */
312   {"crj",	HB_TAG('Y','C','R',' ')},	/* Southern East Cree -> Y-Cree */
313   {"crj",	HB_TAG('C','R','E',' ')},	/* Southern East Cree -> Cree */
314   {"crk",	HB_TAG('W','C','R',' ')},	/* Plains Cree -> West-Cree */
315   {"crk",	HB_TAG('Y','C','R',' ')},	/* Plains Cree -> Y-Cree */
316   {"crk",	HB_TAG('C','R','E',' ')},	/* Plains Cree -> Cree */
317   {"crl",	HB_TAG('E','C','R',' ')},	/* Northern East Cree -> Eastern Cree */
318   {"crl",	HB_TAG('Y','C','R',' ')},	/* Northern East Cree -> Y-Cree */
319   {"crl",	HB_TAG('C','R','E',' ')},	/* Northern East Cree -> Cree */
320   {"crm",	HB_TAG('M','C','R',' ')},	/* Moose Cree */
321   {"crm",	HB_TAG('L','C','R',' ')},	/* Moose Cree -> L-Cree */
322   {"crm",	HB_TAG('C','R','E',' ')},	/* Moose Cree -> Cree */
323   {"crp",	HB_TAG('C','P','P',' ')},	/* Creoles and pidgins [family] -> Creoles */
324   {"crr",	HB_TAG_NONE	       },	/* Carolina Algonquian != Carrier */
325   {"crs",	HB_TAG('C','P','P',' ')},	/* Seselwa Creole French -> Creoles */
326   {"crt",	HB_TAG_NONE	       },	/* Iyojwa'ja Chorote != Crimean Tatar */
327   {"crx",	HB_TAG('C','R','R',' ')},	/* Carrier */
328   {"crx",	HB_TAG('A','T','H',' ')},	/* Carrier -> Athapaskan */
329   {"cs",	HB_TAG('C','S','Y',' ')},	/* Czech */
330   {"csa",	HB_TAG('C','C','H','N')},	/* Chiltepec Chinantec -> Chinantec */
331 /*{"csb",	HB_TAG('C','S','B',' ')},*/	/* Kashubian */
332   {"csh",	HB_TAG('Q','I','N',' ')},	/* Asho Chin -> Chin */
333   {"csj",	HB_TAG('Q','I','N',' ')},	/* Songlai Chin -> Chin */
334   {"csl",	HB_TAG_NONE	       },	/* Chinese Sign Language != Church Slavonic */
335   {"cso",	HB_TAG('C','C','H','N')},	/* Sochiapam Chinantec -> Chinantec */
336   {"csp",	HB_TAG('Z','H','S',' ')},	/* Southern Ping Chinese -> Chinese, Simplified */
337   {"csv",	HB_TAG('Q','I','N',' ')},	/* Sumtu Chin -> Chin */
338   {"csw",	HB_TAG('N','C','R',' ')},	/* Swampy Cree -> N-Cree */
339   {"csw",	HB_TAG('N','H','C',' ')},	/* Swampy Cree -> Norway House Cree */
340   {"csw",	HB_TAG('C','R','E',' ')},	/* Swampy Cree -> Cree */
341   {"csy",	HB_TAG('Q','I','N',' ')},	/* Siyin Chin -> Chin */
342   {"ctc",	HB_TAG('A','T','H',' ')},	/* Chetco -> Athapaskan */
343   {"ctd",	HB_TAG('Q','I','N',' ')},	/* Tedim Chin -> Chin */
344   {"cte",	HB_TAG('C','C','H','N')},	/* Tepinapa Chinantec -> Chinantec */
345 /*{"ctg",	HB_TAG('C','T','G',' ')},*/	/* Chittagonian */
346   {"cth",	HB_TAG('Q','I','N',' ')},	/* Thaiphum Chin -> Chin */
347   {"ctl",	HB_TAG('C','C','H','N')},	/* Tlacoatzintepec Chinantec -> Chinantec */
348   {"cts",	HB_TAG('B','I','K',' ')},	/* Northern Catanduanes Bikol -> Bikol */
349 /*{"ctt",	HB_TAG('C','T','T',' ')},*/	/* Wayanad Chetti */
350   {"ctu",	HB_TAG('M','Y','N',' ')},	/* Chol -> Mayan */
351   {"cu",	HB_TAG('C','S','L',' ')},	/* Church Slavonic */
352   {"cuc",	HB_TAG('C','C','H','N')},	/* Usila Chinantec -> Chinantec */
353 /*{"cuk",	HB_TAG('C','U','K',' ')},*/	/* San Blas Kuna */
354   {"cv",	HB_TAG('C','H','U',' ')},	/* Chuvash */
355   {"cvn",	HB_TAG('C','C','H','N')},	/* Valle Nacional Chinantec -> Chinantec */
356   {"cwd",	HB_TAG('D','C','R',' ')},	/* Woods Cree */
357   {"cwd",	HB_TAG('T','C','R',' ')},	/* Woods Cree -> TH-Cree */
358   {"cwd",	HB_TAG('C','R','E',' ')},	/* Woods Cree -> Cree */
359   {"cy",	HB_TAG('W','E','L',' ')},	/* Welsh */
360   {"czh",	HB_TAG('Z','H','S',' ')},	/* Huizhou Chinese -> Chinese, Simplified */
361   {"czo",	HB_TAG('Z','H','S',' ')},	/* Min Zhong Chinese -> Chinese, Simplified */
362   {"czt",	HB_TAG('Q','I','N',' ')},	/* Zotung Chin -> Chin */
363   {"da",	HB_TAG('D','A','N',' ')},	/* Danish */
364 /*{"dag",	HB_TAG('D','A','G',' ')},*/	/* Dagbani */
365   {"dao",	HB_TAG('Q','I','N',' ')},	/* Daai Chin -> Chin */
366   {"dap",	HB_TAG('N','I','S',' ')},	/* Nisi (India) (retired code) */
367 /*{"dar",	HB_TAG('D','A','R',' ')},*/	/* Dargwa */
368 /*{"dax",	HB_TAG('D','A','X',' ')},*/	/* Dayi */
369   {"dcr",	HB_TAG('C','P','P',' ')},	/* Negerhollands -> Creoles */
370   {"de",	HB_TAG('D','E','U',' ')},	/* German */
371   {"den",	HB_TAG('S','L','A',' ')},	/* Slave (Athapascan) [macrolanguage] -> Slavey */
372   {"den",	HB_TAG('A','T','H',' ')},	/* Slave (Athapascan) [macrolanguage] -> Athapaskan */
373   {"dep",	HB_TAG('C','P','P',' ')},	/* Pidgin Delaware -> Creoles */
374   {"dgo",	HB_TAG('D','G','O',' ')},	/* Dogri (individual language) */
375   {"dgo",	HB_TAG('D','G','R',' ')},	/* Dogri (macrolanguage) */
376   {"dgr",	HB_TAG('A','T','H',' ')},	/* Dogrib -> Athapaskan */
377   {"dhd",	HB_TAG('M','A','W',' ')},	/* Dhundari -> Marwari */
378 /*{"dhg",	HB_TAG('D','H','G',' ')},*/	/* Dhangu */
379   {"dhv",	HB_TAG_NONE	       },	/* Dehu != Divehi (Dhivehi, Maldivian) (deprecated) */
380   {"dib",	HB_TAG('D','N','K',' ')},	/* South Central Dinka -> Dinka */
381   {"dik",	HB_TAG('D','N','K',' ')},	/* Southwestern Dinka -> Dinka */
382   {"din",	HB_TAG('D','N','K',' ')},	/* Dinka [macrolanguage] */
383   {"dip",	HB_TAG('D','N','K',' ')},	/* Northeastern Dinka -> Dinka */
384   {"diq",	HB_TAG('D','I','Q',' ')},	/* Dimli */
385   {"diq",	HB_TAG('Z','Z','A',' ')},	/* Dimli -> Zazaki */
386   {"diw",	HB_TAG('D','N','K',' ')},	/* Northwestern Dinka -> Dinka */
387   {"dje",	HB_TAG('D','J','R',' ')},	/* Zarma */
388   {"djk",	HB_TAG('C','P','P',' ')},	/* Eastern Maroon Creole -> Creoles */
389   {"djr",	HB_TAG('D','J','R','0')},	/* Djambarrpuyngu */
390   {"dks",	HB_TAG('D','N','K',' ')},	/* Southeastern Dinka -> Dinka */
391   {"dng",	HB_TAG('D','U','N',' ')},	/* Dungan */
392 /*{"dnj",	HB_TAG('D','N','J',' ')},*/	/* Dan */
393   {"dnk",	HB_TAG_NONE	       },	/* Dengka != Dinka */
394   {"doi",	HB_TAG('D','G','R',' ')},	/* Dogri (macrolanguage) [macrolanguage] */
395   {"drh",	HB_TAG('M','N','G',' ')},	/* Darkhat (retired code) -> Mongolian */
396   {"dri",	HB_TAG_NONE	       },	/* C'Lela != Dari */
397   {"drw",	HB_TAG('D','R','I',' ')},	/* Darwazi (retired code) -> Dari */
398   {"drw",	HB_TAG('F','A','R',' ')},	/* Darwazi (retired code) -> Persian */
399   {"dsb",	HB_TAG('L','S','B',' ')},	/* Lower Sorbian */
400   {"dty",	HB_TAG('N','E','P',' ')},	/* Dotyali -> Nepali */
401 /*{"duj",	HB_TAG('D','U','J',' ')},*/	/* Dhuwal (retired code) */
402   {"dun",	HB_TAG_NONE	       },	/* Dusun Deyah != Dungan */
403   {"dup",	HB_TAG('M','L','Y',' ')},	/* Duano -> Malay */
404   {"dv",	HB_TAG('D','I','V',' ')},	/* Divehi (Dhivehi, Maldivian) */
405   {"dv",	HB_TAG('D','H','V',' ')},	/* Divehi (Dhivehi, Maldivian) (deprecated) */
406   {"dwk",	HB_TAG('K','U','I',' ')},	/* Dawik Kui -> Kui */
407   {"dwu",	HB_TAG('D','U','J',' ')},	/* Dhuwal */
408   {"dwy",	HB_TAG('D','U','J',' ')},	/* Dhuwaya -> Dhuwal */
409   {"dyu",	HB_TAG('J','U','L',' ')},	/* Dyula -> Jula */
410   {"dz",	HB_TAG('D','Z','N',' ')},	/* Dzongkha */
411   {"dzn",	HB_TAG_NONE	       },	/* Dzando != Dzongkha */
412   {"ecr",	HB_TAG_NONE	       },	/* Eteocretan != Eastern Cree */
413   {"ee",	HB_TAG('E','W','E',' ')},	/* Ewe */
414 /*{"efi",	HB_TAG('E','F','I',' ')},*/	/* Efik */
415   {"ekk",	HB_TAG('E','T','I',' ')},	/* Standard Estonian -> Estonian */
416   {"eky",	HB_TAG('K','R','N',' ')},	/* Eastern Kayah -> Karen */
417   {"el",	HB_TAG('E','L','L',' ')},	/* Modern Greek (1453-) -> Greek */
418   {"emk",	HB_TAG('E','M','K',' ')},	/* Eastern Maninkakan */
419   {"emk",	HB_TAG('M','N','K',' ')},	/* Eastern Maninkakan -> Maninka */
420   {"emy",	HB_TAG('M','Y','N',' ')},	/* Epigraphic Mayan -> Mayan */
421   {"en",	HB_TAG('E','N','G',' ')},	/* English */
422   {"enb",	HB_TAG('K','A','L',' ')},	/* Markweeta -> Kalenjin */
423   {"enf",	HB_TAG('F','N','E',' ')},	/* Forest Enets */
424   {"enh",	HB_TAG('T','N','E',' ')},	/* Tundra Enets */
425   {"eo",	HB_TAG('N','T','O',' ')},	/* Esperanto */
426   {"es",	HB_TAG('E','S','P',' ')},	/* Spanish */
427   {"esg",	HB_TAG('G','O','N',' ')},	/* Aheri Gondi -> Gondi */
428   {"esi",	HB_TAG('I','P','K',' ')},	/* North Alaskan Inupiatun -> Inupiat */
429   {"esk",	HB_TAG('I','P','K',' ')},	/* Northwest Alaska Inupiatun -> Inupiat */
430 /*{"esu",	HB_TAG('E','S','U',' ')},*/	/* Central Yupik */
431   {"et",	HB_TAG('E','T','I',' ')},	/* Estonian [macrolanguage] */
432   {"eto",	HB_TAG('B','T','I',' ')},	/* Eton (Cameroon) -> Beti */
433   {"eu",	HB_TAG('E','U','Q',' ')},	/* Basque */
434   {"euq",	HB_TAG_NONE	       },	/* Basque [family] != Basque */
435   {"eve",	HB_TAG('E','V','N',' ')},	/* Even */
436   {"evn",	HB_TAG('E','V','K',' ')},	/* Evenki */
437   {"ewo",	HB_TAG('B','T','I',' ')},	/* Ewondo -> Beti */
438   {"eyo",	HB_TAG('K','A','L',' ')},	/* Keiyo -> Kalenjin */
439   {"fa",	HB_TAG('F','A','R',' ')},	/* Persian [macrolanguage] */
440   {"fab",	HB_TAG('C','P','P',' ')},	/* Fa d'Ambu -> Creoles */
441   {"fan",	HB_TAG('F','A','N','0')},	/* Fang (Equatorial Guinea) */
442   {"fan",	HB_TAG('B','T','I',' ')},	/* Fang (Equatorial Guinea) -> Beti */
443   {"far",	HB_TAG_NONE	       },	/* Fataleka != Persian */
444   {"fat",	HB_TAG('F','A','T',' ')},	/* Fanti */
445   {"fat",	HB_TAG('A','K','A',' ')},	/* Fanti -> Akan */
446   {"fbl",	HB_TAG('B','I','K',' ')},	/* West Albay Bikol -> Bikol */
447   {"ff",	HB_TAG('F','U','L',' ')},	/* Fulah [macrolanguage] */
448   {"ffm",	HB_TAG('F','U','L',' ')},	/* Maasina Fulfulde -> Fulah */
449   {"fi",	HB_TAG('F','I','N',' ')},	/* Finnish */
450   {"fil",	HB_TAG('P','I','L',' ')},	/* Filipino */
451   {"fj",	HB_TAG('F','J','I',' ')},	/* Fijian */
452   {"flm",	HB_TAG('H','A','L',' ')},	/* Halam (Falam Chin) (retired code) */
453   {"flm",	HB_TAG('Q','I','N',' ')},	/* Falam Chin (retired code) -> Chin */
454   {"fmp",	HB_TAG('F','M','P',' ')},	/* Fe’fe’ */
455   {"fmp",	HB_TAG('B','M','L',' ')},	/* Fe'fe' -> Bamileke */
456   {"fng",	HB_TAG('C','P','P',' ')},	/* Fanagalo -> Creoles */
457   {"fo",	HB_TAG('F','O','S',' ')},	/* Faroese */
458 /*{"fon",	HB_TAG('F','O','N',' ')},*/	/* Fon */
459   {"fos",	HB_TAG_NONE	       },	/* Siraya != Faroese */
460   {"fpe",	HB_TAG('C','P','P',' ')},	/* Fernando Po Creole English -> Creoles */
461   {"fr",	HB_TAG('F','R','A',' ')},	/* French */
462 /*{"frc",	HB_TAG('F','R','C',' ')},*/	/* Cajun French */
463 /*{"frp",	HB_TAG('F','R','P',' ')},*/	/* Arpitan */
464   {"fub",	HB_TAG('F','U','L',' ')},	/* Adamawa Fulfulde -> Fulah */
465   {"fuc",	HB_TAG('F','U','L',' ')},	/* Pulaar -> Fulah */
466   {"fue",	HB_TAG('F','U','L',' ')},	/* Borgu Fulfulde -> Fulah */
467   {"fuf",	HB_TAG('F','T','A',' ')},	/* Pular -> Futa */
468   {"fuf",	HB_TAG('F','U','L',' ')},	/* Pular -> Fulah */
469   {"fuh",	HB_TAG('F','U','L',' ')},	/* Western Niger Fulfulde -> Fulah */
470   {"fui",	HB_TAG('F','U','L',' ')},	/* Bagirmi Fulfulde -> Fulah */
471   {"fuq",	HB_TAG('F','U','L',' ')},	/* Central-Eastern Niger Fulfulde -> Fulah */
472   {"fur",	HB_TAG('F','R','L',' ')},	/* Friulian */
473   {"fuv",	HB_TAG('F','U','V',' ')},	/* Nigerian Fulfulde */
474   {"fuv",	HB_TAG('F','U','L',' ')},	/* Nigerian Fulfulde -> Fulah */
475   {"fy",	HB_TAG('F','R','I',' ')},	/* Western Frisian -> Frisian */
476   {"ga",	HB_TAG('I','R','I',' ')},	/* Irish */
477   {"gaa",	HB_TAG('G','A','D',' ')},	/* Ga */
478   {"gac",	HB_TAG('C','P','P',' ')},	/* Mixed Great Andamanese -> Creoles */
479   {"gad",	HB_TAG_NONE	       },	/* Gaddang != Ga */
480   {"gae",	HB_TAG_NONE	       },	/* Guarequena != Scottish Gaelic (Gaelic) */
481 /*{"gag",	HB_TAG('G','A','G',' ')},*/	/* Gagauz */
482   {"gal",	HB_TAG_NONE	       },	/* Galolen != Galician */
483   {"gan",	HB_TAG('Z','H','S',' ')},	/* Gan Chinese -> Chinese, Simplified */
484   {"gar",	HB_TAG_NONE	       },	/* Galeya != Garshuni */
485   {"gaw",	HB_TAG_NONE	       },	/* Nobonob != Garhwali */
486   {"gax",	HB_TAG('O','R','O',' ')},	/* Borana-Arsi-Guji Oromo -> Oromo */
487   {"gaz",	HB_TAG('O','R','O',' ')},	/* West Central Oromo -> Oromo */
488   {"gbm",	HB_TAG('G','A','W',' ')},	/* Garhwali */
489   {"gce",	HB_TAG('A','T','H',' ')},	/* Galice -> Athapaskan */
490   {"gcf",	HB_TAG('C','P','P',' ')},	/* Guadeloupean Creole French -> Creoles */
491   {"gcl",	HB_TAG('C','P','P',' ')},	/* Grenadian Creole English -> Creoles */
492   {"gcr",	HB_TAG('C','P','P',' ')},	/* Guianese Creole French -> Creoles */
493   {"gd",	HB_TAG('G','A','E',' ')},	/* Scottish Gaelic (Gaelic) */
494   {"gda",	HB_TAG('R','A','J',' ')},	/* Gade Lohar -> Rajasthani */
495 /*{"gez",	HB_TAG('G','E','Z',' ')},*/	/* Geez */
496   {"ggo",	HB_TAG('G','O','N',' ')},	/* Southern Gondi (retired code) -> Gondi */
497   {"gha",	HB_TAG('B','B','R',' ')},	/* Ghadamès -> Berber */
498   {"ghk",	HB_TAG('K','R','N',' ')},	/* Geko Karen -> Karen */
499   {"gho",	HB_TAG('B','B','R',' ')},	/* Ghomara -> Berber */
500   {"gib",	HB_TAG('C','P','P',' ')},	/* Gibanawa -> Creoles */
501 /*{"gih",	HB_TAG('G','I','H',' ')},*/	/* Githabul */
502   {"gil",	HB_TAG('G','I','L','0')},	/* Kiribati (Gilbertese) */
503   {"gju",	HB_TAG('R','A','J',' ')},	/* Gujari -> Rajasthani */
504   {"gkp",	HB_TAG('G','K','P',' ')},	/* Guinea Kpelle -> Kpelle (Guinea) */
505   {"gkp",	HB_TAG('K','P','L',' ')},	/* Guinea Kpelle -> Kpelle */
506   {"gl",	HB_TAG('G','A','L',' ')},	/* Galician */
507   {"gld",	HB_TAG('N','A','N',' ')},	/* Nanai */
508 /*{"glk",	HB_TAG('G','L','K',' ')},*/	/* Gilaki */
509   {"gmz",	HB_TAG_NONE	       },	/* Mgbolizhia != Gumuz */
510   {"gn",	HB_TAG('G','U','A',' ')},	/* Guarani [macrolanguage] */
511   {"gnb",	HB_TAG('Q','I','N',' ')},	/* Gangte -> Chin */
512 /*{"gnn",	HB_TAG('G','N','N',' ')},*/	/* Gumatj */
513   {"gno",	HB_TAG('G','O','N',' ')},	/* Northern Gondi -> Gondi */
514   {"gnw",	HB_TAG('G','U','A',' ')},	/* Western Bolivian Guaraní -> Guarani */
515 /*{"gog",	HB_TAG('G','O','G',' ')},*/	/* Gogo */
516   {"gom",	HB_TAG('K','O','K',' ')},	/* Goan Konkani -> Konkani */
517 /*{"gon",	HB_TAG('G','O','N',' ')},*/	/* Gondi [macrolanguage] */
518   {"goq",	HB_TAG('C','P','P',' ')},	/* Gorap -> Creoles */
519   {"gox",	HB_TAG('B','A','D','0')},	/* Gobu -> Banda */
520   {"gpe",	HB_TAG('C','P','P',' ')},	/* Ghanaian Pidgin English -> Creoles */
521   {"gro",	HB_TAG_NONE	       },	/* Groma != Garo */
522   {"grr",	HB_TAG('B','B','R',' ')},	/* Taznatit -> Berber */
523   {"grt",	HB_TAG('G','R','O',' ')},	/* Garo */
524   {"gru",	HB_TAG('S','O','G',' ')},	/* Kistane -> Sodo Gurage */
525   {"gsw",	HB_TAG('A','L','S',' ')},	/* Alsatian */
526   {"gu",	HB_TAG('G','U','J',' ')},	/* Gujarati */
527   {"gua",	HB_TAG_NONE	       },	/* Shiki != Guarani */
528 /*{"guc",	HB_TAG('G','U','C',' ')},*/	/* Wayuu */
529 /*{"guf",	HB_TAG('G','U','F',' ')},*/	/* Gupapuyngu */
530   {"gug",	HB_TAG('G','U','A',' ')},	/* Paraguayan Guaraní -> Guarani */
531   {"gui",	HB_TAG('G','U','A',' ')},	/* Eastern Bolivian Guaraní -> Guarani */
532   {"guk",	HB_TAG('G','M','Z',' ')},	/* Gumuz */
533   {"gul",	HB_TAG('C','P','P',' ')},	/* Sea Island Creole English -> Creoles */
534   {"gun",	HB_TAG('G','U','A',' ')},	/* Mbyá Guaraní -> Guarani */
535 /*{"guz",	HB_TAG('G','U','Z',' ')},*/	/* Gusii */
536   {"gv",	HB_TAG('M','N','X',' ')},	/* Manx */
537   {"gwi",	HB_TAG('A','T','H',' ')},	/* Gwichʼin -> Athapaskan */
538   {"gyn",	HB_TAG('C','P','P',' ')},	/* Guyanese Creole English -> Creoles */
539   {"ha",	HB_TAG('H','A','U',' ')},	/* Hausa */
540   {"haa",	HB_TAG('A','T','H',' ')},	/* Han -> Athapaskan */
541   {"hae",	HB_TAG('O','R','O',' ')},	/* Eastern Oromo -> Oromo */
542   {"hai",	HB_TAG('H','A','I','0')},	/* Haida [macrolanguage] */
543   {"hak",	HB_TAG('Z','H','S',' ')},	/* Hakka Chinese -> Chinese, Simplified */
544   {"hal",	HB_TAG_NONE	       },	/* Halang != Halam (Falam Chin) */
545   {"har",	HB_TAG('H','R','I',' ')},	/* Harari */
546 /*{"haw",	HB_TAG('H','A','W',' ')},*/	/* Hawaiian */
547   {"hax",	HB_TAG('H','A','I','0')},	/* Southern Haida -> Haida */
548 /*{"hay",	HB_TAG('H','A','Y',' ')},*/	/* Haya */
549 /*{"haz",	HB_TAG('H','A','Z',' ')},*/	/* Hazaragi */
550   {"hbn",	HB_TAG_NONE	       },	/* Heiban != Hammer-Banna */
551   {"hca",	HB_TAG('C','P','P',' ')},	/* Andaman Creole Hindi -> Creoles */
552   {"hdn",	HB_TAG('H','A','I','0')},	/* Northern Haida -> Haida */
553   {"he",	HB_TAG('I','W','R',' ')},	/* Hebrew */
554   {"hea",	HB_TAG('H','M','N',' ')},	/* Northern Qiandong Miao -> Hmong */
555 /*{"hei",	HB_TAG('H','E','I',' ')},*/	/* Heiltsuk */
556   {"hi",	HB_TAG('H','I','N',' ')},	/* Hindi */
557 /*{"hil",	HB_TAG('H','I','L',' ')},*/	/* Hiligaynon */
558   {"hji",	HB_TAG('M','L','Y',' ')},	/* Haji -> Malay */
559   {"hlt",	HB_TAG('Q','I','N',' ')},	/* Matu Chin -> Chin */
560   {"hma",	HB_TAG('H','M','N',' ')},	/* Southern Mashan Hmong -> Hmong */
561   {"hmc",	HB_TAG('H','M','N',' ')},	/* Central Huishui Hmong -> Hmong */
562   {"hmd",	HB_TAG('H','M','D',' ')},	/* Large Flowery Miao -> A-Hmao */
563   {"hmd",	HB_TAG('H','M','N',' ')},	/* Large Flowery Miao -> Hmong */
564   {"hme",	HB_TAG('H','M','N',' ')},	/* Eastern Huishui Hmong -> Hmong */
565   {"hmg",	HB_TAG('H','M','N',' ')},	/* Southwestern Guiyang Hmong -> Hmong */
566   {"hmh",	HB_TAG('H','M','N',' ')},	/* Southwestern Huishui Hmong -> Hmong */
567   {"hmi",	HB_TAG('H','M','N',' ')},	/* Northern Huishui Hmong -> Hmong */
568   {"hmj",	HB_TAG('H','M','N',' ')},	/* Ge -> Hmong */
569   {"hml",	HB_TAG('H','M','N',' ')},	/* Luopohe Hmong -> Hmong */
570   {"hmm",	HB_TAG('H','M','N',' ')},	/* Central Mashan Hmong -> Hmong */
571 /*{"hmn",	HB_TAG('H','M','N',' ')},*/	/* Hmong [macrolanguage] */
572   {"hmp",	HB_TAG('H','M','N',' ')},	/* Northern Mashan Hmong -> Hmong */
573   {"hmq",	HB_TAG('H','M','N',' ')},	/* Eastern Qiandong Miao -> Hmong */
574   {"hmr",	HB_TAG('Q','I','N',' ')},	/* Hmar -> Chin */
575   {"hms",	HB_TAG('H','M','N',' ')},	/* Southern Qiandong Miao -> Hmong */
576   {"hmw",	HB_TAG('H','M','N',' ')},	/* Western Mashan Hmong -> Hmong */
577   {"hmy",	HB_TAG('H','M','N',' ')},	/* Southern Guiyang Hmong -> Hmong */
578   {"hmz",	HB_TAG('H','M','Z',' ')},	/* Hmong Shua -> Hmong Shuat */
579   {"hmz",	HB_TAG('H','M','N',' ')},	/* Hmong Shua -> Hmong */
580 /*{"hnd",	HB_TAG('H','N','D',' ')},*/	/* Southern Hindko -> Hindko */
581   {"hne",	HB_TAG('C','H','H',' ')},	/* Chhattisgarhi -> Chattisgarhi */
582   {"hnj",	HB_TAG('H','M','N',' ')},	/* Hmong Njua -> Hmong */
583   {"hno",	HB_TAG('H','N','D',' ')},	/* Northern Hindko -> Hindko */
584   {"ho",	HB_TAG('H','M','O',' ')},	/* Hiri Motu */
585   {"ho",	HB_TAG('C','P','P',' ')},	/* Hiri Motu -> Creoles */
586   {"hoc",	HB_TAG('H','O',' ',' ')},	/* Ho */
587   {"hoi",	HB_TAG('A','T','H',' ')},	/* Holikachuk -> Athapaskan */
588   {"hoj",	HB_TAG('H','A','R',' ')},	/* Hadothi -> Harauti */
589   {"hoj",	HB_TAG('R','A','J',' ')},	/* Hadothi -> Rajasthani */
590   {"hr",	HB_TAG('H','R','V',' ')},	/* Croatian */
591   {"hra",	HB_TAG('Q','I','N',' ')},	/* Hrangkhol -> Chin */
592   {"hrm",	HB_TAG('H','M','N',' ')},	/* Horned Miao -> Hmong */
593   {"hsb",	HB_TAG('U','S','B',' ')},	/* Upper Sorbian */
594   {"hsn",	HB_TAG('Z','H','S',' ')},	/* Xiang Chinese -> Chinese, Simplified */
595   {"ht",	HB_TAG('H','A','I',' ')},	/* Haitian (Haitian Creole) */
596   {"ht",	HB_TAG('C','P','P',' ')},	/* Haitian -> Creoles */
597   {"hu",	HB_TAG('H','U','N',' ')},	/* Hungarian */
598   {"huj",	HB_TAG('H','M','N',' ')},	/* Northern Guiyang Hmong -> Hmong */
599   {"hup",	HB_TAG('A','T','H',' ')},	/* Hupa -> Athapaskan */
600   {"hus",	HB_TAG('M','Y','N',' ')},	/* Huastec -> Mayan */
601   {"hwc",	HB_TAG('C','P','P',' ')},	/* Hawai'i Creole English -> Creoles */
602   {"hy",	HB_TAG('H','Y','E','0')},	/* Armenian -> Armenian East */
603   {"hy",	HB_TAG('H','Y','E',' ')},	/* Armenian */
604   {"hyw",	HB_TAG('H','Y','E',' ')},	/* Western Armenian -> Armenian */
605   {"hz",	HB_TAG('H','E','R',' ')},	/* Herero */
606   {"ia",	HB_TAG('I','N','A',' ')},	/* Interlingua (International Auxiliary Language Association) */
607 /*{"iba",	HB_TAG('I','B','A',' ')},*/	/* Iban */
608 /*{"ibb",	HB_TAG('I','B','B',' ')},*/	/* Ibibio */
609   {"iby",	HB_TAG('I','J','O',' ')},	/* Ibani -> Ijo */
610   {"icr",	HB_TAG('C','P','P',' ')},	/* Islander Creole English -> Creoles */
611   {"id",	HB_TAG('I','N','D',' ')},	/* Indonesian */
612   {"id",	HB_TAG('M','L','Y',' ')},	/* Indonesian -> Malay */
613   {"ida",	HB_TAG('L','U','H',' ')},	/* Idakho-Isukha-Tiriki -> Luyia */
614   {"idb",	HB_TAG('C','P','P',' ')},	/* Indo-Portuguese -> Creoles */
615   {"ie",	HB_TAG('I','L','E',' ')},	/* Interlingue */
616   {"ig",	HB_TAG('I','B','O',' ')},	/* Igbo */
617   {"igb",	HB_TAG('E','B','I',' ')},	/* Ebira */
618   {"ihb",	HB_TAG('C','P','P',' ')},	/* Iha Based Pidgin -> Creoles */
619   {"ii",	HB_TAG('Y','I','M',' ')},	/* Sichuan Yi -> Yi Modern */
620   {"ijc",	HB_TAG('I','J','O',' ')},	/* Izon -> Ijo */
621   {"ije",	HB_TAG('I','J','O',' ')},	/* Biseni -> Ijo */
622   {"ijn",	HB_TAG('I','J','O',' ')},	/* Kalabari -> Ijo */
623 /*{"ijo",	HB_TAG('I','J','O',' ')},*/	/* Ijo [family] */
624   {"ijs",	HB_TAG('I','J','O',' ')},	/* Southeast Ijo -> Ijo */
625   {"ik",	HB_TAG('I','P','K',' ')},	/* Inupiaq [macrolanguage] -> Inupiat */
626   {"ike",	HB_TAG('I','N','U',' ')},	/* Eastern Canadian Inuktitut -> Inuktitut */
627   {"ikt",	HB_TAG('I','N','U',' ')},	/* Inuinnaqtun -> Inuktitut */
628 /*{"ilo",	HB_TAG('I','L','O',' ')},*/	/* Iloko -> Ilokano */
629   {"in",	HB_TAG('I','N','D',' ')},	/* Indonesian (retired code) */
630   {"in",	HB_TAG('M','L','Y',' ')},	/* Indonesian (retired code) -> Malay */
631   {"ing",	HB_TAG('A','T','H',' ')},	/* Degexit'an -> Athapaskan */
632   {"inh",	HB_TAG('I','N','G',' ')},	/* Ingush */
633   {"io",	HB_TAG('I','D','O',' ')},	/* Ido */
634   {"iri",	HB_TAG_NONE	       },	/* Rigwe != Irish */
635 /*{"iru",	HB_TAG('I','R','U',' ')},*/	/* Irula */
636   {"is",	HB_TAG('I','S','L',' ')},	/* Icelandic */
637   {"ism",	HB_TAG_NONE	       },	/* Masimasi != Inari Sami */
638   {"it",	HB_TAG('I','T','A',' ')},	/* Italian */
639   {"itz",	HB_TAG('M','Y','N',' ')},	/* Itzá -> Mayan */
640   {"iu",	HB_TAG('I','N','U',' ')},	/* Inuktitut [macrolanguage] */
641   {"iw",	HB_TAG('I','W','R',' ')},	/* Hebrew (retired code) */
642   {"ixl",	HB_TAG('M','Y','N',' ')},	/* Ixil -> Mayan */
643   {"ja",	HB_TAG('J','A','N',' ')},	/* Japanese */
644   {"jac",	HB_TAG('M','Y','N',' ')},	/* Popti' -> Mayan */
645   {"jak",	HB_TAG('M','L','Y',' ')},	/* Jakun -> Malay */
646   {"jam",	HB_TAG('J','A','M',' ')},	/* Jamaican Creole English -> Jamaican Creole */
647   {"jam",	HB_TAG('C','P','P',' ')},	/* Jamaican Creole English -> Creoles */
648   {"jan",	HB_TAG_NONE	       },	/* Jandai != Japanese */
649   {"jax",	HB_TAG('M','L','Y',' ')},	/* Jambi Malay -> Malay */
650   {"jbe",	HB_TAG('B','B','R',' ')},	/* Judeo-Berber -> Berber */
651   {"jbn",	HB_TAG('B','B','R',' ')},	/* Nafusi -> Berber */
652 /*{"jbo",	HB_TAG('J','B','O',' ')},*/	/* Lojban */
653 /*{"jct",	HB_TAG('J','C','T',' ')},*/	/* Krymchak */
654   {"jgo",	HB_TAG('B','M','L',' ')},	/* Ngomba -> Bamileke */
655   {"ji",	HB_TAG('J','I','I',' ')},	/* Yiddish (retired code) */
656   {"jii",	HB_TAG_NONE	       },	/* Jiiddu != Yiddish */
657   {"jkm",	HB_TAG('K','R','N',' ')},	/* Mobwa Karen -> Karen */
658   {"jkp",	HB_TAG('K','R','N',' ')},	/* Paku Karen -> Karen */
659   {"jud",	HB_TAG_NONE	       },	/* Worodougou != Ladino */
660   {"jul",	HB_TAG_NONE	       },	/* Jirel != Jula */
661   {"jv",	HB_TAG('J','A','V',' ')},	/* Javanese */
662   {"jvd",	HB_TAG('C','P','P',' ')},	/* Javindo -> Creoles */
663   {"jw",	HB_TAG('J','A','V',' ')},	/* Javanese (retired code) */
664   {"ka",	HB_TAG('K','A','T',' ')},	/* Georgian */
665   {"kaa",	HB_TAG('K','R','K',' ')},	/* Karakalpak */
666   {"kab",	HB_TAG('K','A','B','0')},	/* Kabyle */
667   {"kab",	HB_TAG('B','B','R',' ')},	/* Kabyle -> Berber */
668   {"kac",	HB_TAG_NONE	       },	/* Kachin != Kachchi */
669   {"kam",	HB_TAG('K','M','B',' ')},	/* Kamba (Kenya) */
670   {"kar",	HB_TAG('K','R','N',' ')},	/* Karen [family] */
671 /*{"kaw",	HB_TAG('K','A','W',' ')},*/	/* Kawi (Old Javanese) */
672   {"kbd",	HB_TAG('K','A','B',' ')},	/* Kabardian */
673   {"kby",	HB_TAG('K','N','R',' ')},	/* Manga Kanuri -> Kanuri */
674   {"kca",	HB_TAG('K','H','K',' ')},	/* Khanty -> Khanty-Kazim */
675   {"kca",	HB_TAG('K','H','S',' ')},	/* Khanty -> Khanty-Shurishkar */
676   {"kca",	HB_TAG('K','H','V',' ')},	/* Khanty -> Khanty-Vakhi */
677   {"kcn",	HB_TAG('C','P','P',' ')},	/* Nubi -> Creoles */
678 /*{"kde",	HB_TAG('K','D','E',' ')},*/	/* Makonde */
679   {"kdr",	HB_TAG('K','R','M',' ')},	/* Karaim */
680   {"kdt",	HB_TAG('K','U','Y',' ')},	/* Kuy */
681   {"kea",	HB_TAG('K','E','A',' ')},	/* Kabuverdianu (Crioulo) */
682   {"kea",	HB_TAG('C','P','P',' ')},	/* Kabuverdianu -> Creoles */
683   {"keb",	HB_TAG_NONE	       },	/* Kélé != Kebena */
684   {"kek",	HB_TAG('K','E','K',' ')},	/* Kekchi */
685   {"kek",	HB_TAG('M','Y','N',' ')},	/* Kekchí -> Mayan */
686   {"kex",	HB_TAG('K','K','N',' ')},	/* Kukna -> Kokni */
687   {"kfa",	HB_TAG('K','O','D',' ')},	/* Kodava -> Kodagu */
688   {"kfr",	HB_TAG('K','A','C',' ')},	/* Kachhi -> Kachchi */
689   {"kfx",	HB_TAG('K','U','L',' ')},	/* Kullu Pahari -> Kulvi */
690   {"kfy",	HB_TAG('K','M','N',' ')},	/* Kumaoni */
691   {"kg",	HB_TAG('K','O','N','0')},	/* Kongo [macrolanguage] */
692   {"kge",	HB_TAG_NONE	       },	/* Komering != Khutsuri Georgian */
693   {"kha",	HB_TAG('K','S','I',' ')},	/* Khasi */
694   {"khb",	HB_TAG('X','B','D',' ')},	/* Lü */
695   {"khk",	HB_TAG('M','N','G',' ')},	/* Halh Mongolian -> Mongolian */
696   {"khn",	HB_TAG_NONE	       },	/* Khandesi != Khamti Shan (Microsoft fonts) */
697   {"khs",	HB_TAG_NONE	       },	/* Kasua != Khanty-Shurishkar */
698   {"kht",	HB_TAG('K','H','T',' ')},	/* Khamti -> Khamti Shan */
699   {"kht",	HB_TAG('K','H','N',' ')},	/* Khamti -> Khamti Shan (Microsoft fonts) */
700   {"khv",	HB_TAG_NONE	       },	/* Khvarshi != Khanty-Vakhi */
701 /*{"khw",	HB_TAG('K','H','W',' ')},*/	/* Khowar */
702   {"ki",	HB_TAG('K','I','K',' ')},	/* Kikuyu (Gikuyu) */
703   {"kis",	HB_TAG_NONE	       },	/* Kis != Kisii */
704   {"kiu",	HB_TAG('K','I','U',' ')},	/* Kirmanjki */
705   {"kiu",	HB_TAG('Z','Z','A',' ')},	/* Kirmanjki -> Zazaki */
706   {"kj",	HB_TAG('K','U','A',' ')},	/* Kuanyama */
707   {"kjb",	HB_TAG('M','Y','N',' ')},	/* Q'anjob'al -> Mayan */
708 /*{"kjd",	HB_TAG('K','J','D',' ')},*/	/* Southern Kiwai */
709   {"kjh",	HB_TAG('K','H','A',' ')},	/* Khakas -> Khakass */
710   {"kjp",	HB_TAG('K','J','P',' ')},	/* Pwo Eastern Karen -> Eastern Pwo Karen */
711   {"kjp",	HB_TAG('K','R','N',' ')},	/* Pwo Eastern Karen -> Karen */
712   {"kjt",	HB_TAG('K','R','N',' ')},	/* Phrae Pwo Karen -> Karen */
713 /*{"kjz",	HB_TAG('K','J','Z',' ')},*/	/* Bumthangkha */
714   {"kk",	HB_TAG('K','A','Z',' ')},	/* Kazakh */
715   {"kkn",	HB_TAG_NONE	       },	/* Kon Keu != Kokni */
716   {"kkz",	HB_TAG('A','T','H',' ')},	/* Kaska -> Athapaskan */
717   {"kl",	HB_TAG('G','R','N',' ')},	/* Greenlandic */
718   {"klm",	HB_TAG_NONE	       },	/* Migum != Kalmyk */
719   {"kln",	HB_TAG('K','A','L',' ')},	/* Kalenjin [macrolanguage] */
720   {"km",	HB_TAG('K','H','M',' ')},	/* Khmer */
721   {"kmb",	HB_TAG('M','B','N',' ')},	/* Kimbundu -> Mbundu */
722   {"kmn",	HB_TAG_NONE	       },	/* Awtuw != Kumaoni */
723   {"kmo",	HB_TAG_NONE	       },	/* Kwoma != Komo */
724   {"kmr",	HB_TAG('K','U','R',' ')},	/* Northern Kurdish -> Kurdish */
725   {"kms",	HB_TAG_NONE	       },	/* Kamasau != Komso */
726   {"kmv",	HB_TAG('C','P','P',' ')},	/* Karipúna Creole French -> Creoles */
727   {"kmw",	HB_TAG('K','M','O',' ')},	/* Komo (Democratic Republic of Congo) */
728 /*{"kmz",	HB_TAG('K','M','Z',' ')},*/	/* Khorasani Turkish -> Khorasani Turkic */
729   {"kn",	HB_TAG('K','A','N',' ')},	/* Kannada */
730   {"knc",	HB_TAG('K','N','R',' ')},	/* Central Kanuri -> Kanuri */
731   {"kng",	HB_TAG('K','O','N','0')},	/* Koongo -> Kongo */
732   {"knj",	HB_TAG('M','Y','N',' ')},	/* Western Kanjobal -> Mayan */
733   {"knn",	HB_TAG('K','O','K',' ')},	/* Konkani */
734   {"knr",	HB_TAG_NONE	       },	/* Kaningra != Kanuri */
735   {"ko",	HB_TAG('K','O','R',' ')},	/* Korean */
736   {"ko",	HB_TAG('K','O','H',' ')},	/* Korean -> Korean Old Hangul */
737   {"kod",	HB_TAG_NONE	       },	/* Kodi != Kodagu */
738   {"koh",	HB_TAG_NONE	       },	/* Koyo != Korean Old Hangul */
739   {"koi",	HB_TAG('K','O','P',' ')},	/* Komi-Permyak */
740   {"koi",	HB_TAG('K','O','M',' ')},	/* Komi-Permyak -> Komi */
741 /*{"kok",	HB_TAG('K','O','K',' ')},*/	/* Konkani [macrolanguage] */
742   {"kop",	HB_TAG_NONE	       },	/* Waube != Komi-Permyak */
743 /*{"kos",	HB_TAG('K','O','S',' ')},*/	/* Kosraean */
744   {"koy",	HB_TAG('A','T','H',' ')},	/* Koyukon -> Athapaskan */
745   {"koz",	HB_TAG_NONE	       },	/* Korak != Komi-Zyrian */
746   {"kpe",	HB_TAG('K','P','L',' ')},	/* Kpelle [macrolanguage] */
747   {"kpl",	HB_TAG_NONE	       },	/* Kpala != Kpelle */
748   {"kpp",	HB_TAG('K','R','N',' ')},	/* Paku Karen (retired code) -> Karen */
749   {"kpv",	HB_TAG('K','O','Z',' ')},	/* Komi-Zyrian */
750   {"kpv",	HB_TAG('K','O','M',' ')},	/* Komi-Zyrian -> Komi */
751   {"kpy",	HB_TAG('K','Y','K',' ')},	/* Koryak */
752   {"kqs",	HB_TAG('K','I','S',' ')},	/* Northern Kissi -> Kisii */
753   {"kqy",	HB_TAG('K','R','T',' ')},	/* Koorete */
754   {"kr",	HB_TAG('K','N','R',' ')},	/* Kanuri [macrolanguage] */
755   {"krc",	HB_TAG('K','A','R',' ')},	/* Karachay-Balkar -> Karachay */
756   {"krc",	HB_TAG('B','A','L',' ')},	/* Karachay-Balkar -> Balkar */
757   {"kri",	HB_TAG('K','R','I',' ')},	/* Krio */
758   {"kri",	HB_TAG('C','P','P',' ')},	/* Krio -> Creoles */
759   {"krk",	HB_TAG_NONE	       },	/* Kerek != Karakalpak */
760 /*{"krl",	HB_TAG('K','R','L',' ')},*/	/* Karelian */
761   {"krm",	HB_TAG_NONE	       },	/* Krim (retired code) != Karaim */
762   {"krn",	HB_TAG_NONE	       },	/* Sapo != Karen */
763   {"krt",	HB_TAG('K','N','R',' ')},	/* Tumari Kanuri -> Kanuri */
764   {"kru",	HB_TAG('K','U','U',' ')},	/* Kurukh */
765   {"ks",	HB_TAG('K','S','H',' ')},	/* Kashmiri */
766   {"ksh",	HB_TAG('K','S','H','0')},	/* Kölsch -> Ripuarian */
767   {"ksi",	HB_TAG_NONE	       },	/* Krisa != Khasi */
768   {"ksm",	HB_TAG_NONE	       },	/* Kumba != Kildin Sami */
769   {"kss",	HB_TAG('K','I','S',' ')},	/* Southern Kisi -> Kisii */
770   {"ksw",	HB_TAG('K','S','W',' ')},	/* S’gaw Karen */
771   {"ksw",	HB_TAG('K','R','N',' ')},	/* S'gaw Karen -> Karen */
772   {"ktb",	HB_TAG('K','E','B',' ')},	/* Kambaata -> Kebena */
773   {"ktu",	HB_TAG('K','O','N',' ')},	/* Kituba (Democratic Republic of Congo) -> Kikongo */
774   {"ktw",	HB_TAG('A','T','H',' ')},	/* Kato -> Athapaskan */
775   {"ku",	HB_TAG('K','U','R',' ')},	/* Kurdish [macrolanguage] */
776   {"kui",	HB_TAG_NONE	       },	/* Kuikúro-Kalapálo != Kui */
777   {"kul",	HB_TAG_NONE	       },	/* Kulere != Kulvi */
778 /*{"kum",	HB_TAG('K','U','M',' ')},*/	/* Kumyk */
779   {"kuu",	HB_TAG('A','T','H',' ')},	/* Upper Kuskokwim -> Athapaskan */
780   {"kuw",	HB_TAG('B','A','D','0')},	/* Kpagua -> Banda */
781   {"kuy",	HB_TAG_NONE	       },	/* Kuuku-Ya'u != Kuy */
782   {"kv",	HB_TAG('K','O','M',' ')},	/* Komi [macrolanguage] */
783   {"kvb",	HB_TAG('M','L','Y',' ')},	/* Kubu -> Malay */
784   {"kvl",	HB_TAG('K','R','N',' ')},	/* Kayaw -> Karen */
785   {"kvq",	HB_TAG('K','R','N',' ')},	/* Geba Karen -> Karen */
786   {"kvr",	HB_TAG('M','L','Y',' ')},	/* Kerinci -> Malay */
787   {"kvt",	HB_TAG('K','R','N',' ')},	/* Lahta Karen -> Karen */
788   {"kvu",	HB_TAG('K','R','N',' ')},	/* Yinbaw Karen -> Karen */
789   {"kvy",	HB_TAG('K','R','N',' ')},	/* Yintale Karen -> Karen */
790   {"kw",	HB_TAG('C','O','R',' ')},	/* Cornish */
791 /*{"kwk",	HB_TAG('K','W','K',' ')},*/	/* Kwakiutl -> Kwakʼwala */
792   {"kww",	HB_TAG('C','P','P',' ')},	/* Kwinti -> Creoles */
793   {"kwy",	HB_TAG('K','O','N','0')},	/* San Salvador Kongo -> Kongo */
794   {"kxc",	HB_TAG('K','M','S',' ')},	/* Konso -> Komso */
795   {"kxd",	HB_TAG('M','L','Y',' ')},	/* Brunei -> Malay */
796   {"kxf",	HB_TAG('K','R','N',' ')},	/* Manumanaw Karen -> Karen */
797   {"kxk",	HB_TAG('K','R','N',' ')},	/* Zayein Karen -> Karen */
798   {"kxl",	HB_TAG('K','U','U',' ')},	/* Nepali Kurux (retired code) -> Kurukh */
799   {"kxu",	HB_TAG('K','U','I',' ')},	/* Kui (India) (retired code) */
800   {"ky",	HB_TAG('K','I','R',' ')},	/* Kirghiz (Kyrgyz) */
801   {"kyk",	HB_TAG_NONE	       },	/* Kamayo != Koryak */
802   {"kyu",	HB_TAG('K','Y','U',' ')},	/* Western Kayah */
803   {"kyu",	HB_TAG('K','R','N',' ')},	/* Western Kayah -> Karen */
804   {"la",	HB_TAG('L','A','T',' ')},	/* Latin */
805   {"lac",	HB_TAG('M','Y','N',' ')},	/* Lacandon -> Mayan */
806   {"lad",	HB_TAG('J','U','D',' ')},	/* Ladino */
807   {"lah",	HB_TAG_NONE	       },	/* Lahnda [macrolanguage] != Lahuli */
808   {"lak",	HB_TAG_NONE	       },	/* Laka (Nigeria) != Lak */
809   {"lam",	HB_TAG_NONE	       },	/* Lamba != Lambani */
810   {"laz",	HB_TAG_NONE	       },	/* Aribwatsa != Laz */
811   {"lb",	HB_TAG('L','T','Z',' ')},	/* Luxembourgish */
812   {"lbe",	HB_TAG('L','A','K',' ')},	/* Lak */
813   {"lbj",	HB_TAG('L','D','K',' ')},	/* Ladakhi */
814   {"lbl",	HB_TAG('B','I','K',' ')},	/* Libon Bikol -> Bikol */
815   {"lce",	HB_TAG('M','L','Y',' ')},	/* Loncong -> Malay */
816   {"lcf",	HB_TAG('M','L','Y',' ')},	/* Lubu -> Malay */
817   {"ldi",	HB_TAG('K','O','N','0')},	/* Laari -> Kongo */
818   {"ldk",	HB_TAG_NONE	       },	/* Leelau != Ladakhi */
819 /*{"lef",	HB_TAG('L','E','F',' ')},*/	/* Lelemi */
820 /*{"lez",	HB_TAG('L','E','Z',' ')},*/	/* Lezghian -> Lezgi */
821   {"lg",	HB_TAG('L','U','G',' ')},	/* Ganda */
822   {"li",	HB_TAG('L','I','M',' ')},	/* Limburgish */
823   {"lif",	HB_TAG('L','M','B',' ')},	/* Limbu */
824 /*{"lij",	HB_TAG('L','I','J',' ')},*/	/* Ligurian */
825   {"lir",	HB_TAG('C','P','P',' ')},	/* Liberian English -> Creoles */
826 /*{"lis",	HB_TAG('L','I','S',' ')},*/	/* Lisu */
827   {"liw",	HB_TAG('M','L','Y',' ')},	/* Col -> Malay */
828   {"liy",	HB_TAG('B','A','D','0')},	/* Banda-Bambari -> Banda */
829 /*{"ljp",	HB_TAG('L','J','P',' ')},*/	/* Lampung Api -> Lampung */
830   {"lkb",	HB_TAG('L','U','H',' ')},	/* Kabras -> Luyia */
831 /*{"lki",	HB_TAG('L','K','I',' ')},*/	/* Laki */
832   {"lko",	HB_TAG('L','U','H',' ')},	/* Khayo -> Luyia */
833   {"lks",	HB_TAG('L','U','H',' ')},	/* Kisa -> Luyia */
834   {"lld",	HB_TAG('L','A','D',' ')},	/* Ladin */
835   {"lma",	HB_TAG_NONE	       },	/* East Limba != Low Mari */
836   {"lmb",	HB_TAG_NONE	       },	/* Merei != Limbu */
837   {"lmn",	HB_TAG('L','A','M',' ')},	/* Lambadi -> Lambani */
838 /*{"lmo",	HB_TAG('L','M','O',' ')},*/	/* Lombard */
839   {"lmw",	HB_TAG_NONE	       },	/* Lake Miwok != Lomwe */
840   {"ln",	HB_TAG('L','I','N',' ')},	/* Lingala */
841   {"lna",	HB_TAG('B','A','D','0')},	/* Langbashe -> Banda */
842   {"lnl",	HB_TAG('B','A','D','0')},	/* South Central Banda -> Banda */
843   {"lo",	HB_TAG('L','A','O',' ')},	/* Lao */
844 /*{"lom",	HB_TAG('L','O','M',' ')},*/	/* Loma (Liberia) */
845   {"lou",	HB_TAG('C','P','P',' ')},	/* Louisiana Creole -> Creoles */
846 /*{"lpo",	HB_TAG('L','P','O',' ')},*/	/* Lipo */
847 /*{"lrc",	HB_TAG('L','R','C',' ')},*/	/* Northern Luri -> Luri */
848   {"lri",	HB_TAG('L','U','H',' ')},	/* Marachi -> Luyia */
849   {"lrm",	HB_TAG('L','U','H',' ')},	/* Marama -> Luyia */
850   {"lrt",	HB_TAG('C','P','P',' ')},	/* Larantuka Malay -> Creoles */
851   {"lsb",	HB_TAG_NONE	       },	/* Burundian Sign Language != Lower Sorbian */
852   {"lsm",	HB_TAG('L','U','H',' ')},	/* Saamia -> Luyia */
853   {"lt",	HB_TAG('L','T','H',' ')},	/* Lithuanian */
854   {"ltg",	HB_TAG('L','V','I',' ')},	/* Latgalian -> Latvian */
855   {"lth",	HB_TAG_NONE	       },	/* Thur != Lithuanian */
856   {"lto",	HB_TAG('L','U','H',' ')},	/* Tsotso -> Luyia */
857   {"lts",	HB_TAG('L','U','H',' ')},	/* Tachoni -> Luyia */
858   {"lu",	HB_TAG('L','U','B',' ')},	/* Luba-Katanga */
859 /*{"lua",	HB_TAG('L','U','A',' ')},*/	/* Luba-Lulua */
860 /*{"luo",	HB_TAG('L','U','O',' ')},*/	/* Luo (Kenya and Tanzania) */
861   {"lus",	HB_TAG('M','I','Z',' ')},	/* Lushai -> Mizo */
862   {"lus",	HB_TAG('Q','I','N',' ')},	/* Lushai -> Chin */
863   {"luy",	HB_TAG('L','U','H',' ')},	/* Luyia [macrolanguage] */
864   {"luz",	HB_TAG('L','R','C',' ')},	/* Southern Luri -> Luri */
865   {"lv",	HB_TAG('L','V','I',' ')},	/* Latvian [macrolanguage] */
866   {"lvi",	HB_TAG_NONE	       },	/* Lavi != Latvian */
867   {"lvs",	HB_TAG('L','V','I',' ')},	/* Standard Latvian -> Latvian */
868   {"lwg",	HB_TAG('L','U','H',' ')},	/* Wanga -> Luyia */
869   {"lzh",	HB_TAG('Z','H','T',' ')},	/* Literary Chinese -> Chinese, Traditional */
870   {"lzz",	HB_TAG('L','A','Z',' ')},	/* Laz */
871 /*{"mad",	HB_TAG('M','A','D',' ')},*/	/* Madurese -> Madura */
872 /*{"mag",	HB_TAG('M','A','G',' ')},*/	/* Magahi */
873   {"mai",	HB_TAG('M','T','H',' ')},	/* Maithili */
874   {"maj",	HB_TAG_NONE	       },	/* Jalapa De Díaz Mazatec != Majang */
875   {"mak",	HB_TAG('M','K','R',' ')},	/* Makasar */
876   {"mam",	HB_TAG('M','A','M',' ')},	/* Mam */
877   {"mam",	HB_TAG('M','Y','N',' ')},	/* Mam -> Mayan */
878   {"man",	HB_TAG('M','N','K',' ')},	/* Mandingo [macrolanguage] -> Maninka */
879   {"map",	HB_TAG_NONE	       },	/* Austronesian [family] != Mapudungun */
880   {"maw",	HB_TAG_NONE	       },	/* Mampruli != Marwari */
881   {"max",	HB_TAG('M','L','Y',' ')},	/* North Moluccan Malay -> Malay */
882   {"max",	HB_TAG('C','P','P',' ')},	/* North Moluccan Malay -> Creoles */
883   {"mbf",	HB_TAG('C','P','P',' ')},	/* Baba Malay -> Creoles */
884   {"mbn",	HB_TAG_NONE	       },	/* Macaguán != Mbundu */
885 /*{"mbo",	HB_TAG('M','B','O',' ')},*/	/* Mbo (Cameroon) */
886   {"mch",	HB_TAG_NONE	       },	/* Maquiritari != Manchu */
887   {"mcm",	HB_TAG('C','P','P',' ')},	/* Malaccan Creole Portuguese -> Creoles */
888   {"mcr",	HB_TAG_NONE	       },	/* Menya != Moose Cree */
889   {"mct",	HB_TAG('B','T','I',' ')},	/* Mengisa -> Beti */
890   {"mde",	HB_TAG_NONE	       },	/* Maba (Chad) != Mende */
891   {"mdf",	HB_TAG('M','O','K',' ')},	/* Moksha */
892 /*{"mdr",	HB_TAG('M','D','R',' ')},*/	/* Mandar */
893   {"mdy",	HB_TAG('M','L','E',' ')},	/* Male (Ethiopia) */
894   {"men",	HB_TAG('M','D','E',' ')},	/* Mende (Sierra Leone) */
895   {"meo",	HB_TAG('M','L','Y',' ')},	/* Kedah Malay -> Malay */
896 /*{"mer",	HB_TAG('M','E','R',' ')},*/	/* Meru */
897   {"mfa",	HB_TAG('M','F','A',' ')},	/* Pattani Malay */
898   {"mfa",	HB_TAG('M','L','Y',' ')},	/* Pattani Malay -> Malay */
899   {"mfb",	HB_TAG('M','L','Y',' ')},	/* Bangka -> Malay */
900   {"mfe",	HB_TAG('M','F','E',' ')},	/* Morisyen */
901   {"mfe",	HB_TAG('C','P','P',' ')},	/* Morisyen -> Creoles */
902   {"mfp",	HB_TAG('C','P','P',' ')},	/* Makassar Malay -> Creoles */
903   {"mg",	HB_TAG('M','L','G',' ')},	/* Malagasy [macrolanguage] */
904   {"mh",	HB_TAG('M','A','H',' ')},	/* Marshallese */
905   {"mhc",	HB_TAG('M','Y','N',' ')},	/* Mocho -> Mayan */
906   {"mhr",	HB_TAG('L','M','A',' ')},	/* Eastern Mari -> Low Mari */
907   {"mhv",	HB_TAG('A','R','K',' ')},	/* Arakanese (retired code) -> Rakhine */
908   {"mi",	HB_TAG('M','R','I',' ')},	/* Maori */
909   {"min",	HB_TAG('M','I','N',' ')},	/* Minangkabau */
910   {"min",	HB_TAG('M','L','Y',' ')},	/* Minangkabau -> Malay */
911   {"miz",	HB_TAG_NONE	       },	/* Coatzospan Mixtec != Mizo */
912   {"mk",	HB_TAG('M','K','D',' ')},	/* Macedonian */
913   {"mkn",	HB_TAG('C','P','P',' ')},	/* Kupang Malay -> Creoles */
914   {"mkr",	HB_TAG_NONE	       },	/* Malas != Makasar */
915   {"mku",	HB_TAG('M','N','K',' ')},	/* Konyanka Maninka -> Maninka */
916 /*{"mkw",	HB_TAG('M','K','W',' ')},*/	/* Kituba (Congo) */
917   {"ml",	HB_TAG('M','A','L',' ')},	/* Malayalam -> Malayalam Traditional */
918   {"ml",	HB_TAG('M','L','R',' ')},	/* Malayalam -> Malayalam Reformed */
919   {"mle",	HB_TAG_NONE	       },	/* Manambu != Male */
920   {"mln",	HB_TAG_NONE	       },	/* Malango != Malinke */
921   {"mlq",	HB_TAG('M','L','N',' ')},	/* Western Maninkakan -> Malinke */
922   {"mlq",	HB_TAG('M','N','K',' ')},	/* Western Maninkakan -> Maninka */
923   {"mlr",	HB_TAG_NONE	       },	/* Vame != Malayalam Reformed */
924   {"mmr",	HB_TAG('H','M','N',' ')},	/* Western Xiangxi Miao -> Hmong */
925   {"mn",	HB_TAG('M','N','G',' ')},	/* Mongolian [macrolanguage] */
926   {"mnc",	HB_TAG('M','C','H',' ')},	/* Manchu */
927   {"mnd",	HB_TAG_NONE	       },	/* Mondé != Mandinka */
928   {"mng",	HB_TAG_NONE	       },	/* Eastern Mnong != Mongolian */
929   {"mnh",	HB_TAG('B','A','D','0')},	/* Mono (Democratic Republic of Congo) -> Banda */
930 /*{"mni",	HB_TAG('M','N','I',' ')},*/	/* Manipuri */
931   {"mnk",	HB_TAG('M','N','D',' ')},	/* Mandinka */
932   {"mnk",	HB_TAG('M','N','K',' ')},	/* Mandinka -> Maninka */
933   {"mnp",	HB_TAG('Z','H','S',' ')},	/* Min Bei Chinese -> Chinese, Simplified */
934   {"mns",	HB_TAG('M','A','N',' ')},	/* Mansi */
935   {"mnw",	HB_TAG('M','O','N',' ')},	/* Mon */
936   {"mnx",	HB_TAG_NONE	       },	/* Manikion != Manx */
937   {"mo",	HB_TAG('M','O','L',' ')},	/* Moldavian (retired code) */
938   {"mod",	HB_TAG('C','P','P',' ')},	/* Mobilian -> Creoles */
939 /*{"moh",	HB_TAG('M','O','H',' ')},*/	/* Mohawk */
940   {"mok",	HB_TAG_NONE	       },	/* Morori != Moksha */
941   {"mop",	HB_TAG('M','Y','N',' ')},	/* Mopán Maya -> Mayan */
942   {"mor",	HB_TAG_NONE	       },	/* Moro != Moroccan */
943 /*{"mos",	HB_TAG('M','O','S',' ')},*/	/* Mossi */
944   {"mpe",	HB_TAG('M','A','J',' ')},	/* Majang */
945   {"mqg",	HB_TAG('M','L','Y',' ')},	/* Kota Bangun Kutai Malay -> Malay */
946   {"mr",	HB_TAG('M','A','R',' ')},	/* Marathi */
947   {"mrh",	HB_TAG('Q','I','N',' ')},	/* Mara Chin -> Chin */
948   {"mrj",	HB_TAG('H','M','A',' ')},	/* Western Mari -> High Mari */
949   {"ms",	HB_TAG('M','L','Y',' ')},	/* Malay [macrolanguage] */
950   {"msc",	HB_TAG('M','N','K',' ')},	/* Sankaran Maninka -> Maninka */
951   {"msh",	HB_TAG('M','L','G',' ')},	/* Masikoro Malagasy -> Malagasy */
952   {"msi",	HB_TAG('M','L','Y',' ')},	/* Sabah Malay -> Malay */
953   {"msi",	HB_TAG('C','P','P',' ')},	/* Sabah Malay -> Creoles */
954   {"mt",	HB_TAG('M','T','S',' ')},	/* Maltese */
955   {"mth",	HB_TAG_NONE	       },	/* Munggui != Maithili */
956   {"mtr",	HB_TAG('M','A','W',' ')},	/* Mewari -> Marwari */
957   {"mts",	HB_TAG_NONE	       },	/* Yora != Maltese */
958   {"mud",	HB_TAG('C','P','P',' ')},	/* Mednyj Aleut -> Creoles */
959   {"mui",	HB_TAG('M','L','Y',' ')},	/* Musi -> Malay */
960   {"mun",	HB_TAG_NONE	       },	/* Munda [family] != Mundari */
961   {"mup",	HB_TAG('R','A','J',' ')},	/* Malvi -> Rajasthani */
962   {"muq",	HB_TAG('H','M','N',' ')},	/* Eastern Xiangxi Miao -> Hmong */
963 /*{"mus",	HB_TAG('M','U','S',' ')},*/	/* Creek -> Muscogee */
964   {"mvb",	HB_TAG('A','T','H',' ')},	/* Mattole -> Athapaskan */
965   {"mve",	HB_TAG('M','A','W',' ')},	/* Marwari (Pakistan) */
966   {"mvf",	HB_TAG('M','N','G',' ')},	/* Peripheral Mongolian -> Mongolian */
967   {"mwk",	HB_TAG('M','N','K',' ')},	/* Kita Maninkakan -> Maninka */
968 /*{"mwl",	HB_TAG('M','W','L',' ')},*/	/* Mirandese */
969   {"mwq",	HB_TAG('Q','I','N',' ')},	/* Mün Chin -> Chin */
970   {"mwr",	HB_TAG('M','A','W',' ')},	/* Marwari [macrolanguage] */
971   {"mww",	HB_TAG('M','W','W',' ')},	/* Hmong Daw */
972   {"mww",	HB_TAG('H','M','N',' ')},	/* Hmong Daw -> Hmong */
973   {"my",	HB_TAG('B','R','M',' ')},	/* Burmese */
974   {"mym",	HB_TAG('M','E','N',' ')},	/* Me’en */
975 /*{"myn",	HB_TAG('M','Y','N',' ')},*/	/* Mayan [family] */
976   {"myq",	HB_TAG('M','N','K',' ')},	/* Forest Maninka (retired code) -> Maninka */
977   {"myv",	HB_TAG('E','R','Z',' ')},	/* Erzya */
978   {"mzb",	HB_TAG('B','B','R',' ')},	/* Tumzabt -> Berber */
979 /*{"mzn",	HB_TAG('M','Z','N',' ')},*/	/* Mazanderani */
980   {"mzs",	HB_TAG('C','P','P',' ')},	/* Macanese -> Creoles */
981   {"na",	HB_TAG('N','A','U',' ')},	/* Nauru -> Nauruan */
982   {"nag",	HB_TAG('N','A','G',' ')},	/* Naga Pidgin -> Naga-Assamese */
983   {"nag",	HB_TAG('C','P','P',' ')},	/* Naga Pidgin -> Creoles */
984 /*{"nah",	HB_TAG('N','A','H',' ')},*/	/* Nahuatl [family] */
985   {"nan",	HB_TAG('Z','H','S',' ')},	/* Min Nan Chinese -> Chinese, Simplified */
986 /*{"nap",	HB_TAG('N','A','P',' ')},*/	/* Neapolitan */
987   {"nas",	HB_TAG_NONE	       },	/* Naasioi != Naskapi */
988   {"naz",	HB_TAG('N','A','H',' ')},	/* Coatepec Nahuatl -> Nahuatl */
989   {"nb",	HB_TAG('N','O','R',' ')},	/* Norwegian Bokmål -> Norwegian */
990   {"nch",	HB_TAG('N','A','H',' ')},	/* Central Huasteca Nahuatl -> Nahuatl */
991   {"nci",	HB_TAG('N','A','H',' ')},	/* Classical Nahuatl -> Nahuatl */
992   {"ncj",	HB_TAG('N','A','H',' ')},	/* Northern Puebla Nahuatl -> Nahuatl */
993   {"ncl",	HB_TAG('N','A','H',' ')},	/* Michoacán Nahuatl -> Nahuatl */
994   {"ncr",	HB_TAG_NONE	       },	/* Ncane != N-Cree */
995   {"ncx",	HB_TAG('N','A','H',' ')},	/* Central Puebla Nahuatl -> Nahuatl */
996   {"nd",	HB_TAG('N','D','B',' ')},	/* North Ndebele -> Ndebele */
997   {"ndb",	HB_TAG_NONE	       },	/* Kenswei Nsei != Ndebele */
998 /*{"ndc",	HB_TAG('N','D','C',' ')},*/	/* Ndau */
999   {"ndg",	HB_TAG_NONE	       },	/* Ndengereko != Ndonga */
1000 /*{"nds",	HB_TAG('N','D','S',' ')},*/	/* Low Saxon */
1001   {"ne",	HB_TAG('N','E','P',' ')},	/* Nepali [macrolanguage] */
1002   {"nef",	HB_TAG('C','P','P',' ')},	/* Nefamese -> Creoles */
1003 /*{"new",	HB_TAG('N','E','W',' ')},*/	/* Newari */
1004   {"ng",	HB_TAG('N','D','G',' ')},	/* Ndonga */
1005 /*{"nga",	HB_TAG('N','G','A',' ')},*/	/* Ngbaka */
1006   {"ngl",	HB_TAG('L','M','W',' ')},	/* Lomwe */
1007   {"ngm",	HB_TAG('C','P','P',' ')},	/* Ngatik Men's Creole -> Creoles */
1008   {"ngo",	HB_TAG('S','X','T',' ')},	/* Ngoni (retired code) -> Sutu */
1009   {"ngr",	HB_TAG_NONE	       },	/* Engdewu != Nagari */
1010   {"ngu",	HB_TAG('N','A','H',' ')},	/* Guerrero Nahuatl -> Nahuatl */
1011   {"nhc",	HB_TAG('N','A','H',' ')},	/* Tabasco Nahuatl -> Nahuatl */
1012   {"nhd",	HB_TAG('G','U','A',' ')},	/* Chiripá -> Guarani */
1013   {"nhe",	HB_TAG('N','A','H',' ')},	/* Eastern Huasteca Nahuatl -> Nahuatl */
1014   {"nhg",	HB_TAG('N','A','H',' ')},	/* Tetelcingo Nahuatl -> Nahuatl */
1015   {"nhi",	HB_TAG('N','A','H',' ')},	/* Zacatlán-Ahuacatlán-Tepetzintla Nahuatl -> Nahuatl */
1016   {"nhk",	HB_TAG('N','A','H',' ')},	/* Isthmus-Cosoleacaque Nahuatl -> Nahuatl */
1017   {"nhm",	HB_TAG('N','A','H',' ')},	/* Morelos Nahuatl -> Nahuatl */
1018   {"nhn",	HB_TAG('N','A','H',' ')},	/* Central Nahuatl -> Nahuatl */
1019   {"nhp",	HB_TAG('N','A','H',' ')},	/* Isthmus-Pajapan Nahuatl -> Nahuatl */
1020   {"nhq",	HB_TAG('N','A','H',' ')},	/* Huaxcaleca Nahuatl -> Nahuatl */
1021   {"nht",	HB_TAG('N','A','H',' ')},	/* Ometepec Nahuatl -> Nahuatl */
1022   {"nhv",	HB_TAG('N','A','H',' ')},	/* Temascaltepec Nahuatl -> Nahuatl */
1023   {"nhw",	HB_TAG('N','A','H',' ')},	/* Western Huasteca Nahuatl -> Nahuatl */
1024   {"nhx",	HB_TAG('N','A','H',' ')},	/* Isthmus-Mecayapan Nahuatl -> Nahuatl */
1025   {"nhy",	HB_TAG('N','A','H',' ')},	/* Northern Oaxaca Nahuatl -> Nahuatl */
1026   {"nhz",	HB_TAG('N','A','H',' ')},	/* Santa María La Alta Nahuatl -> Nahuatl */
1027   {"niq",	HB_TAG('K','A','L',' ')},	/* Nandi -> Kalenjin */
1028   {"nis",	HB_TAG_NONE	       },	/* Nimi != Nisi */
1029 /*{"niu",	HB_TAG('N','I','U',' ')},*/	/* Niuean */
1030   {"niv",	HB_TAG('G','I','L',' ')},	/* Gilyak */
1031   {"njt",	HB_TAG('C','P','P',' ')},	/* Ndyuka-Trio Pidgin -> Creoles */
1032   {"njz",	HB_TAG('N','I','S',' ')},	/* Nyishi -> Nisi */
1033   {"nko",	HB_TAG_NONE	       },	/* Nkonya != N’Ko */
1034   {"nkx",	HB_TAG('I','J','O',' ')},	/* Nkoroo -> Ijo */
1035   {"nl",	HB_TAG('N','L','D',' ')},	/* Dutch */
1036   {"nla",	HB_TAG('B','M','L',' ')},	/* Ngombale -> Bamileke */
1037   {"nle",	HB_TAG('L','U','H',' ')},	/* East Nyala -> Luyia */
1038   {"nln",	HB_TAG('N','A','H',' ')},	/* Durango Nahuatl (retired code) -> Nahuatl */
1039   {"nlv",	HB_TAG('N','A','H',' ')},	/* Orizaba Nahuatl -> Nahuatl */
1040   {"nn",	HB_TAG('N','Y','N',' ')},	/* Norwegian Nynorsk (Nynorsk, Norwegian) */
1041   {"nn",	HB_TAG('N','O','R',' ')},	/* Norwegian Nynorsk -> Norwegian */
1042   {"nnh",	HB_TAG('B','M','L',' ')},	/* Ngiemboon -> Bamileke */
1043   {"nnz",	HB_TAG('B','M','L',' ')},	/* Nda'nda' -> Bamileke */
1044   {"no",	HB_TAG('N','O','R',' ')},	/* Norwegian [macrolanguage] */
1045   {"nod",	HB_TAG('N','T','A',' ')},	/* Northern Thai -> Northern Tai */
1046 /*{"noe",	HB_TAG('N','O','E',' ')},*/	/* Nimadi */
1047 /*{"nog",	HB_TAG('N','O','G',' ')},*/	/* Nogai */
1048 /*{"nov",	HB_TAG('N','O','V',' ')},*/	/* Novial */
1049   {"npi",	HB_TAG('N','E','P',' ')},	/* Nepali */
1050   {"npl",	HB_TAG('N','A','H',' ')},	/* Southeastern Puebla Nahuatl -> Nahuatl */
1051   {"nqo",	HB_TAG('N','K','O',' ')},	/* N’Ko */
1052   {"nr",	HB_TAG('N','D','B',' ')},	/* South Ndebele -> Ndebele */
1053   {"nsk",	HB_TAG('N','A','S',' ')},	/* Naskapi */
1054   {"nsm",	HB_TAG_NONE	       },	/* Sumi Naga != Northern Sami */
1055 /*{"nso",	HB_TAG('N','S','O',' ')},*/	/* Northern Sotho */
1056   {"nsu",	HB_TAG('N','A','H',' ')},	/* Sierra Negra Nahuatl -> Nahuatl */
1057   {"nto",	HB_TAG_NONE	       },	/* Ntomba != Esperanto */
1058   {"nue",	HB_TAG('B','A','D','0')},	/* Ngundu -> Banda */
1059   {"nuu",	HB_TAG('B','A','D','0')},	/* Ngbundu -> Banda */
1060   {"nuz",	HB_TAG('N','A','H',' ')},	/* Tlamacazapa Nahuatl -> Nahuatl */
1061   {"nv",	HB_TAG('N','A','V',' ')},	/* Navajo */
1062   {"nv",	HB_TAG('A','T','H',' ')},	/* Navajo -> Athapaskan */
1063   {"nwe",	HB_TAG('B','M','L',' ')},	/* Ngwe -> Bamileke */
1064   {"ny",	HB_TAG('C','H','I',' ')},	/* Chichewa (Chewa, Nyanja) */
1065   {"nyd",	HB_TAG('L','U','H',' ')},	/* Nyore -> Luyia */
1066 /*{"nym",	HB_TAG('N','Y','M',' ')},*/	/* Nyamwezi */
1067   {"nyn",	HB_TAG('N','K','L',' ')},	/* Nyankole */
1068 /*{"nza",	HB_TAG('N','Z','A',' ')},*/	/* Tigon Mbembe -> Mbembe Tigon */
1069   {"oc",	HB_TAG('O','C','I',' ')},	/* Occitan (post 1500) */
1070   {"oj",	HB_TAG('O','J','B',' ')},	/* Ojibwa [macrolanguage] -> Ojibway */
1071 /*{"ojb",	HB_TAG('O','J','B',' ')},*/	/* Northwestern Ojibwa -> Ojibway */
1072   {"ojc",	HB_TAG('O','J','B',' ')},	/* Central Ojibwa -> Ojibway */
1073   {"ojg",	HB_TAG('O','J','B',' ')},	/* Eastern Ojibwa -> Ojibway */
1074   {"ojs",	HB_TAG('O','C','R',' ')},	/* Severn Ojibwa -> Oji-Cree */
1075   {"ojs",	HB_TAG('O','J','B',' ')},	/* Severn Ojibwa -> Ojibway */
1076   {"ojw",	HB_TAG('O','J','B',' ')},	/* Western Ojibwa -> Ojibway */
1077   {"okd",	HB_TAG('I','J','O',' ')},	/* Okodia -> Ijo */
1078   {"oki",	HB_TAG('K','A','L',' ')},	/* Okiek -> Kalenjin */
1079   {"okm",	HB_TAG('K','O','H',' ')},	/* Middle Korean (10th-16th cent.) -> Korean Old Hangul */
1080   {"okr",	HB_TAG('I','J','O',' ')},	/* Kirike -> Ijo */
1081   {"om",	HB_TAG('O','R','O',' ')},	/* Oromo [macrolanguage] */
1082   {"onx",	HB_TAG('C','P','P',' ')},	/* Onin Based Pidgin -> Creoles */
1083   {"oor",	HB_TAG('C','P','P',' ')},	/* Oorlams -> Creoles */
1084   {"or",	HB_TAG('O','R','I',' ')},	/* Odia (formerly Oriya) [macrolanguage] */
1085   {"orc",	HB_TAG('O','R','O',' ')},	/* Orma -> Oromo */
1086   {"orn",	HB_TAG('M','L','Y',' ')},	/* Orang Kanaq -> Malay */
1087   {"oro",	HB_TAG_NONE	       },	/* Orokolo != Oromo */
1088   {"orr",	HB_TAG('I','J','O',' ')},	/* Oruma -> Ijo */
1089   {"ors",	HB_TAG('M','L','Y',' ')},	/* Orang Seletar -> Malay */
1090   {"ory",	HB_TAG('O','R','I',' ')},	/* Odia (formerly Oriya) */
1091   {"os",	HB_TAG('O','S','S',' ')},	/* Ossetian */
1092   {"otw",	HB_TAG('O','J','B',' ')},	/* Ottawa -> Ojibway */
1093   {"oua",	HB_TAG('B','B','R',' ')},	/* Tagargrent -> Berber */
1094   {"pa",	HB_TAG('P','A','N',' ')},	/* Punjabi */
1095   {"paa",	HB_TAG_NONE	       },	/* Papuan [family] != Palestinian Aramaic */
1096 /*{"pag",	HB_TAG('P','A','G',' ')},*/	/* Pangasinan */
1097   {"pal",	HB_TAG_NONE	       },	/* Pahlavi != Pali */
1098 /*{"pam",	HB_TAG('P','A','M',' ')},*/	/* Pampanga -> Pampangan */
1099   {"pap",	HB_TAG('P','A','P','0')},	/* Papiamento -> Papiamentu */
1100   {"pap",	HB_TAG('C','P','P',' ')},	/* Papiamento -> Creoles */
1101   {"pas",	HB_TAG_NONE	       },	/* Papasena != Pashto */
1102 /*{"pau",	HB_TAG('P','A','U',' ')},*/	/* Palauan */
1103   {"pbt",	HB_TAG('P','A','S',' ')},	/* Southern Pashto -> Pashto */
1104   {"pbu",	HB_TAG('P','A','S',' ')},	/* Northern Pashto -> Pashto */
1105 /*{"pcc",	HB_TAG('P','C','C',' ')},*/	/* Bouyei */
1106 /*{"pcd",	HB_TAG('P','C','D',' ')},*/	/* Picard */
1107   {"pce",	HB_TAG('P','L','G',' ')},	/* Ruching Palaung -> Palaung */
1108   {"pck",	HB_TAG('Q','I','N',' ')},	/* Paite Chin -> Chin */
1109   {"pcm",	HB_TAG('C','P','P',' ')},	/* Nigerian Pidgin -> Creoles */
1110 /*{"pdc",	HB_TAG('P','D','C',' ')},*/	/* Pennsylvania German */
1111   {"pdu",	HB_TAG('K','R','N',' ')},	/* Kayan -> Karen */
1112   {"pea",	HB_TAG('C','P','P',' ')},	/* Peranakan Indonesian -> Creoles */
1113   {"pel",	HB_TAG('M','L','Y',' ')},	/* Pekal -> Malay */
1114   {"pes",	HB_TAG('F','A','R',' ')},	/* Iranian Persian -> Persian */
1115   {"pey",	HB_TAG('C','P','P',' ')},	/* Petjo -> Creoles */
1116   {"pga",	HB_TAG('A','R','A',' ')},	/* Sudanese Creole Arabic -> Arabic */
1117   {"pga",	HB_TAG('C','P','P',' ')},	/* Sudanese Creole Arabic -> Creoles */
1118 /*{"phk",	HB_TAG('P','H','K',' ')},*/	/* Phake */
1119   {"pi",	HB_TAG('P','A','L',' ')},	/* Pali */
1120   {"pih",	HB_TAG('P','I','H',' ')},	/* Pitcairn-Norfolk -> Norfolk */
1121   {"pih",	HB_TAG('C','P','P',' ')},	/* Pitcairn-Norfolk -> Creoles */
1122   {"pil",	HB_TAG_NONE	       },	/* Yom != Filipino */
1123   {"pis",	HB_TAG('C','P','P',' ')},	/* Pijin -> Creoles */
1124   {"pkh",	HB_TAG('Q','I','N',' ')},	/* Pankhu -> Chin */
1125   {"pko",	HB_TAG('K','A','L',' ')},	/* Pökoot -> Kalenjin */
1126   {"pl",	HB_TAG('P','L','K',' ')},	/* Polish */
1127   {"plg",	HB_TAG_NONE	       },	/* Pilagá != Palaung */
1128   {"plk",	HB_TAG_NONE	       },	/* Kohistani Shina != Polish */
1129   {"pll",	HB_TAG('P','L','G',' ')},	/* Shwe Palaung -> Palaung */
1130   {"pln",	HB_TAG('C','P','P',' ')},	/* Palenquero -> Creoles */
1131   {"plp",	HB_TAG('P','A','P',' ')},	/* Palpa (retired code) */
1132   {"plt",	HB_TAG('M','L','G',' ')},	/* Plateau Malagasy -> Malagasy */
1133   {"pml",	HB_TAG('C','P','P',' ')},	/* Lingua Franca -> Creoles */
1134 /*{"pms",	HB_TAG('P','M','S',' ')},*/	/* Piemontese */
1135   {"pmy",	HB_TAG('C','P','P',' ')},	/* Papuan Malay -> Creoles */
1136 /*{"pnb",	HB_TAG('P','N','B',' ')},*/	/* Western Panjabi */
1137   {"poc",	HB_TAG('M','Y','N',' ')},	/* Poqomam -> Mayan */
1138   {"poh",	HB_TAG('P','O','H',' ')},	/* Poqomchi' -> Pocomchi */
1139   {"poh",	HB_TAG('M','Y','N',' ')},	/* Poqomchi' -> Mayan */
1140 /*{"pon",	HB_TAG('P','O','N',' ')},*/	/* Pohnpeian */
1141   {"pov",	HB_TAG('C','P','P',' ')},	/* Upper Guinea Crioulo -> Creoles */
1142   {"ppa",	HB_TAG('B','A','G',' ')},	/* Pao (retired code) -> Baghelkhandi */
1143   {"pre",	HB_TAG('C','P','P',' ')},	/* Principense -> Creoles */
1144 /*{"pro",	HB_TAG('P','R','O',' ')},*/	/* Old Provençal (to 1500) -> Provençal / Old Provençal */
1145   {"prs",	HB_TAG('D','R','I',' ')},	/* Dari */
1146   {"prs",	HB_TAG('F','A','R',' ')},	/* Dari -> Persian */
1147   {"ps",	HB_TAG('P','A','S',' ')},	/* Pashto [macrolanguage] */
1148   {"pse",	HB_TAG('M','L','Y',' ')},	/* Central Malay -> Malay */
1149   {"pst",	HB_TAG('P','A','S',' ')},	/* Central Pashto -> Pashto */
1150   {"pt",	HB_TAG('P','T','G',' ')},	/* Portuguese */
1151   {"pub",	HB_TAG('Q','I','N',' ')},	/* Purum -> Chin */
1152   {"puz",	HB_TAG('Q','I','N',' ')},	/* Purum Naga (retired code) -> Chin */
1153   {"pwo",	HB_TAG('P','W','O',' ')},	/* Pwo Western Karen -> Western Pwo Karen */
1154   {"pwo",	HB_TAG('K','R','N',' ')},	/* Pwo Western Karen -> Karen */
1155   {"pww",	HB_TAG('K','R','N',' ')},	/* Pwo Northern Karen -> Karen */
1156   {"qu",	HB_TAG('Q','U','Z',' ')},	/* Quechua [macrolanguage] */
1157   {"qub",	HB_TAG('Q','W','H',' ')},	/* Huallaga Huánuco Quechua -> Quechua (Peru) */
1158   {"qub",	HB_TAG('Q','U','Z',' ')},	/* Huallaga Huánuco Quechua -> Quechua */
1159   {"quc",	HB_TAG('Q','U','C',' ')},	/* K’iche’ */
1160   {"quc",	HB_TAG('M','Y','N',' ')},	/* K'iche' -> Mayan */
1161   {"qud",	HB_TAG('Q','V','I',' ')},	/* Calderón Highland Quichua -> Quechua (Ecuador) */
1162   {"qud",	HB_TAG('Q','U','Z',' ')},	/* Calderón Highland Quichua -> Quechua */
1163   {"quf",	HB_TAG('Q','U','Z',' ')},	/* Lambayeque Quechua -> Quechua */
1164   {"qug",	HB_TAG('Q','V','I',' ')},	/* Chimborazo Highland Quichua -> Quechua (Ecuador) */
1165   {"qug",	HB_TAG('Q','U','Z',' ')},	/* Chimborazo Highland Quichua -> Quechua */
1166   {"quh",	HB_TAG('Q','U','H',' ')},	/* South Bolivian Quechua -> Quechua (Bolivia) */
1167   {"quh",	HB_TAG('Q','U','Z',' ')},	/* South Bolivian Quechua -> Quechua */
1168   {"quk",	HB_TAG('Q','U','Z',' ')},	/* Chachapoyas Quechua -> Quechua */
1169   {"qul",	HB_TAG('Q','U','H',' ')},	/* North Bolivian Quechua -> Quechua (Bolivia) */
1170   {"qul",	HB_TAG('Q','U','Z',' ')},	/* North Bolivian Quechua -> Quechua */
1171   {"qum",	HB_TAG('M','Y','N',' ')},	/* Sipacapense -> Mayan */
1172   {"qup",	HB_TAG('Q','V','I',' ')},	/* Southern Pastaza Quechua -> Quechua (Ecuador) */
1173   {"qup",	HB_TAG('Q','U','Z',' ')},	/* Southern Pastaza Quechua -> Quechua */
1174   {"qur",	HB_TAG('Q','W','H',' ')},	/* Yanahuanca Pasco Quechua -> Quechua (Peru) */
1175   {"qur",	HB_TAG('Q','U','Z',' ')},	/* Yanahuanca Pasco Quechua -> Quechua */
1176   {"qus",	HB_TAG('Q','U','H',' ')},	/* Santiago del Estero Quichua -> Quechua (Bolivia) */
1177   {"qus",	HB_TAG('Q','U','Z',' ')},	/* Santiago del Estero Quichua -> Quechua */
1178   {"quv",	HB_TAG('M','Y','N',' ')},	/* Sacapulteco -> Mayan */
1179   {"quw",	HB_TAG('Q','V','I',' ')},	/* Tena Lowland Quichua -> Quechua (Ecuador) */
1180   {"quw",	HB_TAG('Q','U','Z',' ')},	/* Tena Lowland Quichua -> Quechua */
1181   {"qux",	HB_TAG('Q','W','H',' ')},	/* Yauyos Quechua -> Quechua (Peru) */
1182   {"qux",	HB_TAG('Q','U','Z',' ')},	/* Yauyos Quechua -> Quechua */
1183   {"quy",	HB_TAG('Q','U','Z',' ')},	/* Ayacucho Quechua -> Quechua */
1184 /*{"quz",	HB_TAG('Q','U','Z',' ')},*/	/* Cusco Quechua -> Quechua */
1185   {"qva",	HB_TAG('Q','W','H',' ')},	/* Ambo-Pasco Quechua -> Quechua (Peru) */
1186   {"qva",	HB_TAG('Q','U','Z',' ')},	/* Ambo-Pasco Quechua -> Quechua */
1187   {"qvc",	HB_TAG('Q','U','Z',' ')},	/* Cajamarca Quechua -> Quechua */
1188   {"qve",	HB_TAG('Q','U','Z',' ')},	/* Eastern Apurímac Quechua -> Quechua */
1189   {"qvh",	HB_TAG('Q','W','H',' ')},	/* Huamalíes-Dos de Mayo Huánuco Quechua -> Quechua (Peru) */
1190   {"qvh",	HB_TAG('Q','U','Z',' ')},	/* Huamalíes-Dos de Mayo Huánuco Quechua -> Quechua */
1191   {"qvi",	HB_TAG('Q','V','I',' ')},	/* Imbabura Highland Quichua -> Quechua (Ecuador) */
1192   {"qvi",	HB_TAG('Q','U','Z',' ')},	/* Imbabura Highland Quichua -> Quechua */
1193   {"qvj",	HB_TAG('Q','V','I',' ')},	/* Loja Highland Quichua -> Quechua (Ecuador) */
1194   {"qvj",	HB_TAG('Q','U','Z',' ')},	/* Loja Highland Quichua -> Quechua */
1195   {"qvl",	HB_TAG('Q','W','H',' ')},	/* Cajatambo North Lima Quechua -> Quechua (Peru) */
1196   {"qvl",	HB_TAG('Q','U','Z',' ')},	/* Cajatambo North Lima Quechua -> Quechua */
1197   {"qvm",	HB_TAG('Q','W','H',' ')},	/* Margos-Yarowilca-Lauricocha Quechua -> Quechua (Peru) */
1198   {"qvm",	HB_TAG('Q','U','Z',' ')},	/* Margos-Yarowilca-Lauricocha Quechua -> Quechua */
1199   {"qvn",	HB_TAG('Q','W','H',' ')},	/* North Junín Quechua -> Quechua (Peru) */
1200   {"qvn",	HB_TAG('Q','U','Z',' ')},	/* North Junín Quechua -> Quechua */
1201   {"qvo",	HB_TAG('Q','V','I',' ')},	/* Napo Lowland Quechua -> Quechua (Ecuador) */
1202   {"qvo",	HB_TAG('Q','U','Z',' ')},	/* Napo Lowland Quechua -> Quechua */
1203   {"qvp",	HB_TAG('Q','W','H',' ')},	/* Pacaraos Quechua -> Quechua (Peru) */
1204   {"qvp",	HB_TAG('Q','U','Z',' ')},	/* Pacaraos Quechua -> Quechua */
1205   {"qvs",	HB_TAG('Q','U','Z',' ')},	/* San Martín Quechua -> Quechua */
1206   {"qvw",	HB_TAG('Q','W','H',' ')},	/* Huaylla Wanca Quechua -> Quechua (Peru) */
1207   {"qvw",	HB_TAG('Q','U','Z',' ')},	/* Huaylla Wanca Quechua -> Quechua */
1208   {"qvz",	HB_TAG('Q','V','I',' ')},	/* Northern Pastaza Quichua -> Quechua (Ecuador) */
1209   {"qvz",	HB_TAG('Q','U','Z',' ')},	/* Northern Pastaza Quichua -> Quechua */
1210   {"qwa",	HB_TAG('Q','W','H',' ')},	/* Corongo Ancash Quechua -> Quechua (Peru) */
1211   {"qwa",	HB_TAG('Q','U','Z',' ')},	/* Corongo Ancash Quechua -> Quechua */
1212   {"qwc",	HB_TAG('Q','U','Z',' ')},	/* Classical Quechua -> Quechua */
1213   {"qwh",	HB_TAG('Q','W','H',' ')},	/* Huaylas Ancash Quechua -> Quechua (Peru) */
1214   {"qwh",	HB_TAG('Q','U','Z',' ')},	/* Huaylas Ancash Quechua -> Quechua */
1215   {"qws",	HB_TAG('Q','W','H',' ')},	/* Sihuas Ancash Quechua -> Quechua (Peru) */
1216   {"qws",	HB_TAG('Q','U','Z',' ')},	/* Sihuas Ancash Quechua -> Quechua */
1217   {"qwt",	HB_TAG('A','T','H',' ')},	/* Kwalhioqua-Tlatskanai -> Athapaskan */
1218   {"qxa",	HB_TAG('Q','W','H',' ')},	/* Chiquián Ancash Quechua -> Quechua (Peru) */
1219   {"qxa",	HB_TAG('Q','U','Z',' ')},	/* Chiquián Ancash Quechua -> Quechua */
1220   {"qxc",	HB_TAG('Q','W','H',' ')},	/* Chincha Quechua -> Quechua (Peru) */
1221   {"qxc",	HB_TAG('Q','U','Z',' ')},	/* Chincha Quechua -> Quechua */
1222   {"qxh",	HB_TAG('Q','W','H',' ')},	/* Panao Huánuco Quechua -> Quechua (Peru) */
1223   {"qxh",	HB_TAG('Q','U','Z',' ')},	/* Panao Huánuco Quechua -> Quechua */
1224   {"qxl",	HB_TAG('Q','V','I',' ')},	/* Salasaca Highland Quichua -> Quechua (Ecuador) */
1225   {"qxl",	HB_TAG('Q','U','Z',' ')},	/* Salasaca Highland Quichua -> Quechua */
1226   {"qxn",	HB_TAG('Q','W','H',' ')},	/* Northern Conchucos Ancash Quechua -> Quechua (Peru) */
1227   {"qxn",	HB_TAG('Q','U','Z',' ')},	/* Northern Conchucos Ancash Quechua -> Quechua */
1228   {"qxo",	HB_TAG('Q','W','H',' ')},	/* Southern Conchucos Ancash Quechua -> Quechua (Peru) */
1229   {"qxo",	HB_TAG('Q','U','Z',' ')},	/* Southern Conchucos Ancash Quechua -> Quechua */
1230   {"qxp",	HB_TAG('Q','U','Z',' ')},	/* Puno Quechua -> Quechua */
1231   {"qxr",	HB_TAG('Q','V','I',' ')},	/* Cañar Highland Quichua -> Quechua (Ecuador) */
1232   {"qxr",	HB_TAG('Q','U','Z',' ')},	/* Cañar Highland Quichua -> Quechua */
1233   {"qxt",	HB_TAG('Q','W','H',' ')},	/* Santa Ana de Tusi Pasco Quechua -> Quechua (Peru) */
1234   {"qxt",	HB_TAG('Q','U','Z',' ')},	/* Santa Ana de Tusi Pasco Quechua -> Quechua */
1235   {"qxu",	HB_TAG('Q','U','Z',' ')},	/* Arequipa-La Unión Quechua -> Quechua */
1236   {"qxw",	HB_TAG('Q','W','H',' ')},	/* Jauja Wanca Quechua -> Quechua (Peru) */
1237   {"qxw",	HB_TAG('Q','U','Z',' ')},	/* Jauja Wanca Quechua -> Quechua */
1238   {"rag",	HB_TAG('L','U','H',' ')},	/* Logooli -> Luyia */
1239 /*{"raj",	HB_TAG('R','A','J',' ')},*/	/* Rajasthani [macrolanguage] */
1240   {"ral",	HB_TAG('Q','I','N',' ')},	/* Ralte -> Chin */
1241 /*{"rar",	HB_TAG('R','A','R',' ')},*/	/* Rarotongan */
1242   {"rbb",	HB_TAG('P','L','G',' ')},	/* Rumai Palaung -> Palaung */
1243   {"rbl",	HB_TAG('B','I','K',' ')},	/* Miraya Bikol -> Bikol */
1244   {"rcf",	HB_TAG('C','P','P',' ')},	/* Réunion Creole French -> Creoles */
1245 /*{"rej",	HB_TAG('R','E','J',' ')},*/	/* Rejang */
1246 /*{"rhg",	HB_TAG('R','H','G',' ')},*/	/* Rohingya */
1247 /*{"ria",	HB_TAG('R','I','A',' ')},*/	/* Riang (India) */
1248   {"rif",	HB_TAG('R','I','F',' ')},	/* Tarifit */
1249   {"rif",	HB_TAG('B','B','R',' ')},	/* Tarifit -> Berber */
1250 /*{"rit",	HB_TAG('R','I','T',' ')},*/	/* Ritharrngu -> Ritarungo */
1251   {"rki",	HB_TAG('A','R','K',' ')},	/* Rakhine */
1252 /*{"rkw",	HB_TAG('R','K','W',' ')},*/	/* Arakwal */
1253   {"rm",	HB_TAG('R','M','S',' ')},	/* Romansh */
1254   {"rmc",	HB_TAG('R','O','Y',' ')},	/* Carpathian Romani -> Romany */
1255   {"rmf",	HB_TAG('R','O','Y',' ')},	/* Kalo Finnish Romani -> Romany */
1256   {"rml",	HB_TAG('R','O','Y',' ')},	/* Baltic Romani -> Romany */
1257   {"rmn",	HB_TAG('R','O','Y',' ')},	/* Balkan Romani -> Romany */
1258   {"rmo",	HB_TAG('R','O','Y',' ')},	/* Sinte Romani -> Romany */
1259   {"rms",	HB_TAG_NONE	       },	/* Romanian Sign Language != Romansh */
1260   {"rmw",	HB_TAG('R','O','Y',' ')},	/* Welsh Romani -> Romany */
1261   {"rmy",	HB_TAG('R','M','Y',' ')},	/* Vlax Romani */
1262   {"rmy",	HB_TAG('R','O','Y',' ')},	/* Vlax Romani -> Romany */
1263   {"rmz",	HB_TAG('A','R','K',' ')},	/* Marma -> Rakhine */
1264   {"rn",	HB_TAG('R','U','N',' ')},	/* Rundi */
1265   {"ro",	HB_TAG('R','O','M',' ')},	/* Romanian */
1266   {"rom",	HB_TAG('R','O','Y',' ')},	/* Romany [macrolanguage] */
1267   {"rop",	HB_TAG('C','P','P',' ')},	/* Kriol -> Creoles */
1268   {"rtc",	HB_TAG('Q','I','N',' ')},	/* Rungtu Chin -> Chin */
1269 /*{"rtm",	HB_TAG('R','T','M',' ')},*/	/* Rotuman */
1270   {"ru",	HB_TAG('R','U','S',' ')},	/* Russian */
1271   {"rue",	HB_TAG('R','S','Y',' ')},	/* Rusyn */
1272 /*{"rup",	HB_TAG('R','U','P',' ')},*/	/* Aromanian */
1273   {"rw",	HB_TAG('R','U','A',' ')},	/* Kinyarwanda */
1274   {"rwr",	HB_TAG('M','A','W',' ')},	/* Marwari (India) */
1275   {"sa",	HB_TAG('S','A','N',' ')},	/* Sanskrit */
1276   {"sad",	HB_TAG_NONE	       },	/* Sandawe != Sadri */
1277   {"sah",	HB_TAG('Y','A','K',' ')},	/* Yakut -> Sakha */
1278   {"sam",	HB_TAG('P','A','A',' ')},	/* Samaritan Aramaic -> Palestinian Aramaic */
1279 /*{"sas",	HB_TAG('S','A','S',' ')},*/	/* Sasak */
1280 /*{"sat",	HB_TAG('S','A','T',' ')},*/	/* Santali */
1281   {"say",	HB_TAG_NONE	       },	/* Saya != Sayisi */
1282   {"sc",	HB_TAG('S','R','D',' ')},	/* Sardinian [macrolanguage] */
1283   {"scf",	HB_TAG('C','P','P',' ')},	/* San Miguel Creole French -> Creoles */
1284   {"sch",	HB_TAG('Q','I','N',' ')},	/* Sakachep -> Chin */
1285   {"sci",	HB_TAG('C','P','P',' ')},	/* Sri Lankan Creole Malay -> Creoles */
1286   {"sck",	HB_TAG('S','A','D',' ')},	/* Sadri */
1287 /*{"scn",	HB_TAG('S','C','N',' ')},*/	/* Sicilian */
1288 /*{"sco",	HB_TAG('S','C','O',' ')},*/	/* Scots */
1289   {"scs",	HB_TAG('S','C','S',' ')},	/* North Slavey */
1290   {"scs",	HB_TAG('S','L','A',' ')},	/* North Slavey -> Slavey */
1291   {"scs",	HB_TAG('A','T','H',' ')},	/* North Slavey -> Athapaskan */
1292   {"sd",	HB_TAG('S','N','D',' ')},	/* Sindhi */
1293   {"sdc",	HB_TAG('S','R','D',' ')},	/* Sassarese Sardinian -> Sardinian */
1294   {"sdh",	HB_TAG('K','U','R',' ')},	/* Southern Kurdish -> Kurdish */
1295   {"sdn",	HB_TAG('S','R','D',' ')},	/* Gallurese Sardinian -> Sardinian */
1296   {"sds",	HB_TAG('B','B','R',' ')},	/* Sened -> Berber */
1297   {"se",	HB_TAG('N','S','M',' ')},	/* Northern Sami */
1298   {"seh",	HB_TAG('S','N','A',' ')},	/* Sena */
1299   {"sek",	HB_TAG('A','T','H',' ')},	/* Sekani -> Athapaskan */
1300 /*{"sel",	HB_TAG('S','E','L',' ')},*/	/* Selkup */
1301   {"sez",	HB_TAG('Q','I','N',' ')},	/* Senthang Chin -> Chin */
1302   {"sfm",	HB_TAG('S','F','M',' ')},	/* Small Flowery Miao */
1303   {"sfm",	HB_TAG('H','M','N',' ')},	/* Small Flowery Miao -> Hmong */
1304   {"sg",	HB_TAG('S','G','O',' ')},	/* Sango */
1305 /*{"sga",	HB_TAG('S','G','A',' ')},*/	/* Old Irish (to 900) */
1306   {"sgc",	HB_TAG('K','A','L',' ')},	/* Kipsigis -> Kalenjin */
1307   {"sgo",	HB_TAG_NONE	       },	/* Songa (retired code) != Sango */
1308 /*{"sgs",	HB_TAG('S','G','S',' ')},*/	/* Samogitian */
1309   {"sgw",	HB_TAG('C','H','G',' ')},	/* Sebat Bet Gurage -> Chaha Gurage */
1310   {"shi",	HB_TAG('S','H','I',' ')},	/* Tachelhit */
1311   {"shi",	HB_TAG('B','B','R',' ')},	/* Tachelhit -> Berber */
1312   {"shl",	HB_TAG('Q','I','N',' ')},	/* Shendu -> Chin */
1313 /*{"shn",	HB_TAG('S','H','N',' ')},*/	/* Shan */
1314   {"shu",	HB_TAG('A','R','A',' ')},	/* Chadian Arabic -> Arabic */
1315   {"shy",	HB_TAG('B','B','R',' ')},	/* Tachawit -> Berber */
1316   {"si",	HB_TAG('S','N','H',' ')},	/* Sinhala (Sinhalese) */
1317   {"sib",	HB_TAG_NONE	       },	/* Sebop != Sibe */
1318 /*{"sid",	HB_TAG('S','I','D',' ')},*/	/* Sidamo */
1319   {"sig",	HB_TAG_NONE	       },	/* Paasaal != Silte Gurage */
1320   {"siz",	HB_TAG('B','B','R',' ')},	/* Siwi -> Berber */
1321   {"sjd",	HB_TAG('K','S','M',' ')},	/* Kildin Sami */
1322   {"sjo",	HB_TAG('S','I','B',' ')},	/* Xibe -> Sibe */
1323   {"sjs",	HB_TAG('B','B','R',' ')},	/* Senhaja De Srair -> Berber */
1324   {"sk",	HB_TAG('S','K','Y',' ')},	/* Slovak */
1325   {"skg",	HB_TAG('M','L','G',' ')},	/* Sakalava Malagasy -> Malagasy */
1326   {"skr",	HB_TAG('S','R','K',' ')},	/* Saraiki */
1327   {"sks",	HB_TAG_NONE	       },	/* Maia != Skolt Sami */
1328   {"skw",	HB_TAG('C','P','P',' ')},	/* Skepi Creole Dutch -> Creoles */
1329   {"sky",	HB_TAG_NONE	       },	/* Sikaiana != Slovak */
1330   {"sl",	HB_TAG('S','L','V',' ')},	/* Slovenian */
1331   {"sla",	HB_TAG_NONE	       },	/* Slavic [family] != Slavey */
1332   {"sm",	HB_TAG('S','M','O',' ')},	/* Samoan */
1333   {"sma",	HB_TAG('S','S','M',' ')},	/* Southern Sami */
1334   {"smj",	HB_TAG('L','S','M',' ')},	/* Lule Sami */
1335   {"sml",	HB_TAG_NONE	       },	/* Central Sama != Somali */
1336   {"smn",	HB_TAG('I','S','M',' ')},	/* Inari Sami */
1337   {"sms",	HB_TAG('S','K','S',' ')},	/* Skolt Sami */
1338   {"smt",	HB_TAG('Q','I','N',' ')},	/* Simte -> Chin */
1339   {"sn",	HB_TAG('S','N','A','0')},	/* Shona */
1340   {"snh",	HB_TAG_NONE	       },	/* Shinabo (retired code) != Sinhala (Sinhalese) */
1341 /*{"snk",	HB_TAG('S','N','K',' ')},*/	/* Soninke */
1342   {"so",	HB_TAG('S','M','L',' ')},	/* Somali */
1343   {"sog",	HB_TAG_NONE	       },	/* Sogdian != Sodo Gurage */
1344 /*{"sop",	HB_TAG('S','O','P',' ')},*/	/* Songe */
1345   {"spv",	HB_TAG('O','R','I',' ')},	/* Sambalpuri -> Odia (formerly Oriya) */
1346   {"spy",	HB_TAG('K','A','L',' ')},	/* Sabaot -> Kalenjin */
1347   {"sq",	HB_TAG('S','Q','I',' ')},	/* Albanian [macrolanguage] */
1348   {"sr",	HB_TAG('S','R','B',' ')},	/* Serbian */
1349   {"srb",	HB_TAG_NONE	       },	/* Sora != Serbian */
1350   {"src",	HB_TAG('S','R','D',' ')},	/* Logudorese Sardinian -> Sardinian */
1351   {"srk",	HB_TAG_NONE	       },	/* Serudung Murut != Saraiki */
1352   {"srm",	HB_TAG('C','P','P',' ')},	/* Saramaccan -> Creoles */
1353   {"srn",	HB_TAG('C','P','P',' ')},	/* Sranan Tongo -> Creoles */
1354   {"sro",	HB_TAG('S','R','D',' ')},	/* Campidanese Sardinian -> Sardinian */
1355 /*{"srr",	HB_TAG('S','R','R',' ')},*/	/* Serer */
1356   {"srs",	HB_TAG('A','T','H',' ')},	/* Sarsi -> Athapaskan */
1357   {"ss",	HB_TAG('S','W','Z',' ')},	/* Swati */
1358   {"ssh",	HB_TAG('A','R','A',' ')},	/* Shihhi Arabic -> Arabic */
1359   {"ssl",	HB_TAG_NONE	       },	/* Western Sisaala != South Slavey */
1360   {"ssm",	HB_TAG_NONE	       },	/* Semnam != Southern Sami */
1361   {"st",	HB_TAG('S','O','T',' ')},	/* Southern Sotho */
1362   {"sta",	HB_TAG('C','P','P',' ')},	/* Settla -> Creoles */
1363 /*{"stq",	HB_TAG('S','T','Q',' ')},*/	/* Saterfriesisch -> Saterland Frisian */
1364   {"stv",	HB_TAG('S','I','G',' ')},	/* Silt'e -> Silte Gurage */
1365   {"su",	HB_TAG('S','U','N',' ')},	/* Sundanese */
1366 /*{"suk",	HB_TAG('S','U','K',' ')},*/	/* Sukuma */
1367   {"suq",	HB_TAG('S','U','R',' ')},	/* Suri */
1368   {"sur",	HB_TAG_NONE	       },	/* Mwaghavul != Suri */
1369   {"sv",	HB_TAG('S','V','E',' ')},	/* Swedish */
1370 /*{"sva",	HB_TAG('S','V','A',' ')},*/	/* Svan */
1371   {"svc",	HB_TAG('C','P','P',' ')},	/* Vincentian Creole English -> Creoles */
1372   {"sve",	HB_TAG_NONE	       },	/* Serili != Swedish */
1373   {"sw",	HB_TAG('S','W','K',' ')},	/* Swahili [macrolanguage] */
1374   {"swb",	HB_TAG('C','M','R',' ')},	/* Maore Comorian -> Comorian */
1375   {"swc",	HB_TAG('S','W','K',' ')},	/* Congo Swahili -> Swahili */
1376   {"swh",	HB_TAG('S','W','K',' ')},	/* Swahili */
1377   {"swk",	HB_TAG_NONE	       },	/* Malawi Sena != Swahili */
1378   {"swn",	HB_TAG('B','B','R',' ')},	/* Sawknah -> Berber */
1379   {"swv",	HB_TAG('M','A','W',' ')},	/* Shekhawati -> Marwari */
1380 /*{"sxu",	HB_TAG('S','X','U',' ')},*/	/* Upper Saxon */
1381   {"syc",	HB_TAG('S','Y','R',' ')},	/* Classical Syriac -> Syriac */
1382 /*{"syl",	HB_TAG('S','Y','L',' ')},*/	/* Sylheti */
1383 /*{"syr",	HB_TAG('S','Y','R',' ')},*/	/* Syriac [macrolanguage] */
1384 /*{"szl",	HB_TAG('S','Z','L',' ')},*/	/* Silesian */
1385   {"ta",	HB_TAG('T','A','M',' ')},	/* Tamil */
1386   {"taa",	HB_TAG('A','T','H',' ')},	/* Lower Tanana -> Athapaskan */
1387 /*{"tab",	HB_TAG('T','A','B',' ')},*/	/* Tabassaran -> Tabasaran */
1388   {"taj",	HB_TAG_NONE	       },	/* Eastern Tamang != Tajiki */
1389   {"taq",	HB_TAG('T','M','H',' ')},	/* Tamasheq -> Tamashek */
1390   {"taq",	HB_TAG('B','B','R',' ')},	/* Tamasheq -> Berber */
1391   {"tas",	HB_TAG('C','P','P',' ')},	/* Tay Boi -> Creoles */
1392   {"tau",	HB_TAG('A','T','H',' ')},	/* Upper Tanana -> Athapaskan */
1393   {"tcb",	HB_TAG('A','T','H',' ')},	/* Tanacross -> Athapaskan */
1394   {"tce",	HB_TAG('A','T','H',' ')},	/* Southern Tutchone -> Athapaskan */
1395   {"tch",	HB_TAG('C','P','P',' ')},	/* Turks And Caicos Creole English -> Creoles */
1396   {"tcp",	HB_TAG('Q','I','N',' ')},	/* Tawr Chin -> Chin */
1397   {"tcs",	HB_TAG('C','P','P',' ')},	/* Torres Strait Creole -> Creoles */
1398   {"tcy",	HB_TAG('T','U','L',' ')},	/* Tulu -> Tumbuka */
1399   {"tcz",	HB_TAG('Q','I','N',' ')},	/* Thado Chin -> Chin */
1400 /*{"tdd",	HB_TAG('T','D','D',' ')},*/	/* Tai Nüa -> Dehong Dai */
1401   {"tdx",	HB_TAG('M','L','G',' ')},	/* Tandroy-Mahafaly Malagasy -> Malagasy */
1402   {"te",	HB_TAG('T','E','L',' ')},	/* Telugu */
1403   {"tec",	HB_TAG('K','A','L',' ')},	/* Terik -> Kalenjin */
1404   {"tem",	HB_TAG('T','M','N',' ')},	/* Timne -> Temne */
1405 /*{"tet",	HB_TAG('T','E','T',' ')},*/	/* Tetum */
1406   {"tez",	HB_TAG('B','B','R',' ')},	/* Tetserret -> Berber */
1407   {"tfn",	HB_TAG('A','T','H',' ')},	/* Tanaina -> Athapaskan */
1408   {"tg",	HB_TAG('T','A','J',' ')},	/* Tajik -> Tajiki */
1409   {"tgh",	HB_TAG('C','P','P',' ')},	/* Tobagonian Creole English -> Creoles */
1410   {"tgj",	HB_TAG('N','I','S',' ')},	/* Tagin -> Nisi */
1411   {"tgn",	HB_TAG_NONE	       },	/* Tandaganon != Tongan */
1412   {"tgr",	HB_TAG_NONE	       },	/* Tareng != Tigre */
1413   {"tgx",	HB_TAG('A','T','H',' ')},	/* Tagish -> Athapaskan */
1414   {"tgy",	HB_TAG_NONE	       },	/* Togoyo != Tigrinya */
1415   {"th",	HB_TAG('T','H','A',' ')},	/* Thai */
1416   {"tht",	HB_TAG('A','T','H',' ')},	/* Tahltan -> Athapaskan */
1417   {"thv",	HB_TAG('T','M','H',' ')},	/* Tahaggart Tamahaq -> Tamashek */
1418   {"thv",	HB_TAG('B','B','R',' ')},	/* Tahaggart Tamahaq -> Berber */
1419   {"thz",	HB_TAG('T','M','H',' ')},	/* Tayart Tamajeq -> Tamashek */
1420   {"thz",	HB_TAG('B','B','R',' ')},	/* Tayart Tamajeq -> Berber */
1421   {"ti",	HB_TAG('T','G','Y',' ')},	/* Tigrinya */
1422   {"tia",	HB_TAG('B','B','R',' ')},	/* Tidikelt Tamazight -> Berber */
1423   {"tig",	HB_TAG('T','G','R',' ')},	/* Tigre */
1424 /*{"tiv",	HB_TAG('T','I','V',' ')},*/	/* Tiv */
1425   {"tjo",	HB_TAG('B','B','R',' ')},	/* Temacine Tamazight -> Berber */
1426   {"tk",	HB_TAG('T','K','M',' ')},	/* Turkmen */
1427   {"tkg",	HB_TAG('M','L','G',' ')},	/* Tesaka Malagasy -> Malagasy */
1428   {"tkm",	HB_TAG_NONE	       },	/* Takelma != Turkmen */
1429   {"tl",	HB_TAG('T','G','L',' ')},	/* Tagalog */
1430 /*{"tli",	HB_TAG('T','L','I',' ')},*/	/* Tlingit */
1431   {"tmg",	HB_TAG('C','P','P',' ')},	/* Ternateño -> Creoles */
1432   {"tmh",	HB_TAG('T','M','H',' ')},	/* Tamashek [macrolanguage] */
1433   {"tmh",	HB_TAG('B','B','R',' ')},	/* Tamashek [macrolanguage] -> Berber */
1434   {"tmn",	HB_TAG_NONE	       },	/* Taman (Indonesia) != Temne */
1435   {"tmw",	HB_TAG('M','L','Y',' ')},	/* Temuan -> Malay */
1436   {"tn",	HB_TAG('T','N','A',' ')},	/* Tswana */
1437   {"tna",	HB_TAG_NONE	       },	/* Tacana != Tswana */
1438   {"tne",	HB_TAG_NONE	       },	/* Tinoc Kallahan (retired code) != Tundra Enets */
1439   {"tnf",	HB_TAG('D','R','I',' ')},	/* Tangshewi (retired code) -> Dari */
1440   {"tnf",	HB_TAG('F','A','R',' ')},	/* Tangshewi (retired code) -> Persian */
1441   {"tng",	HB_TAG_NONE	       },	/* Tobanga != Tonga */
1442   {"to",	HB_TAG('T','G','N',' ')},	/* Tonga (Tonga Islands) -> Tongan */
1443   {"tod",	HB_TAG('T','O','D','0')},	/* Toma */
1444   {"toi",	HB_TAG('T','N','G',' ')},	/* Tonga (Zambia) */
1445   {"toj",	HB_TAG('M','Y','N',' ')},	/* Tojolabal -> Mayan */
1446   {"tol",	HB_TAG('A','T','H',' ')},	/* Tolowa -> Athapaskan */
1447   {"tor",	HB_TAG('B','A','D','0')},	/* Togbo-Vara Banda -> Banda */
1448   {"tpi",	HB_TAG('T','P','I',' ')},	/* Tok Pisin */
1449   {"tpi",	HB_TAG('C','P','P',' ')},	/* Tok Pisin -> Creoles */
1450   {"tr",	HB_TAG('T','R','K',' ')},	/* Turkish */
1451   {"trf",	HB_TAG('C','P','P',' ')},	/* Trinidadian Creole English -> Creoles */
1452   {"trk",	HB_TAG_NONE	       },	/* Turkic [family] != Turkish */
1453   {"tru",	HB_TAG('T','U','A',' ')},	/* Turoyo -> Turoyo Aramaic */
1454   {"tru",	HB_TAG('S','Y','R',' ')},	/* Turoyo -> Syriac */
1455   {"ts",	HB_TAG('T','S','G',' ')},	/* Tsonga */
1456   {"tsg",	HB_TAG_NONE	       },	/* Tausug != Tsonga */
1457 /*{"tsj",	HB_TAG('T','S','J',' ')},*/	/* Tshangla */
1458   {"tt",	HB_TAG('T','A','T',' ')},	/* Tatar */
1459   {"ttc",	HB_TAG('M','Y','N',' ')},	/* Tektiteko -> Mayan */
1460   {"ttm",	HB_TAG('A','T','H',' ')},	/* Northern Tutchone -> Athapaskan */
1461   {"ttq",	HB_TAG('T','M','H',' ')},	/* Tawallammat Tamajaq -> Tamashek */
1462   {"ttq",	HB_TAG('B','B','R',' ')},	/* Tawallammat Tamajaq -> Berber */
1463   {"tua",	HB_TAG_NONE	       },	/* Wiarumus != Turoyo Aramaic */
1464   {"tul",	HB_TAG_NONE	       },	/* Tula != Tumbuka */
1465 /*{"tum",	HB_TAG('T','U','M',' ')},*/	/* Tumbuka -> Tulu */
1466   {"tuu",	HB_TAG('A','T','H',' ')},	/* Tututni -> Athapaskan */
1467   {"tuv",	HB_TAG_NONE	       },	/* Turkana != Tuvin */
1468   {"tuy",	HB_TAG('K','A','L',' ')},	/* Tugen -> Kalenjin */
1469 /*{"tvl",	HB_TAG('T','V','L',' ')},*/	/* Tuvalu */
1470   {"tvy",	HB_TAG('C','P','P',' ')},	/* Timor Pidgin -> Creoles */
1471   {"tw",	HB_TAG('T','W','I',' ')},	/* Twi */
1472   {"tw",	HB_TAG('A','K','A',' ')},	/* Twi -> Akan */
1473   {"txc",	HB_TAG('A','T','H',' ')},	/* Tsetsaut -> Athapaskan */
1474   {"txy",	HB_TAG('M','L','G',' ')},	/* Tanosy Malagasy -> Malagasy */
1475   {"ty",	HB_TAG('T','H','T',' ')},	/* Tahitian */
1476   {"tyv",	HB_TAG('T','U','V',' ')},	/* Tuvinian -> Tuvin */
1477 /*{"tyz",	HB_TAG('T','Y','Z',' ')},*/	/* Tày */
1478   {"tzh",	HB_TAG('M','Y','N',' ')},	/* Tzeltal -> Mayan */
1479   {"tzj",	HB_TAG('M','Y','N',' ')},	/* Tz'utujil -> Mayan */
1480   {"tzm",	HB_TAG('T','Z','M',' ')},	/* Central Atlas Tamazight -> Tamazight */
1481   {"tzm",	HB_TAG('B','B','R',' ')},	/* Central Atlas Tamazight -> Berber */
1482   {"tzo",	HB_TAG('T','Z','O',' ')},	/* Tzotzil */
1483   {"tzo",	HB_TAG('M','Y','N',' ')},	/* Tzotzil -> Mayan */
1484   {"ubl",	HB_TAG('B','I','K',' ')},	/* Buhi'non Bikol -> Bikol */
1485 /*{"udm",	HB_TAG('U','D','M',' ')},*/	/* Udmurt */
1486   {"ug",	HB_TAG('U','Y','G',' ')},	/* Uyghur */
1487   {"uk",	HB_TAG('U','K','R',' ')},	/* Ukrainian */
1488   {"uki",	HB_TAG('K','U','I',' ')},	/* Kui (India) */
1489   {"uln",	HB_TAG('C','P','P',' ')},	/* Unserdeutsch -> Creoles */
1490 /*{"umb",	HB_TAG('U','M','B',' ')},*/	/* Umbundu */
1491   {"unr",	HB_TAG('M','U','N',' ')},	/* Mundari */
1492   {"ur",	HB_TAG('U','R','D',' ')},	/* Urdu */
1493   {"urk",	HB_TAG('M','L','Y',' ')},	/* Urak Lawoi' -> Malay */
1494   {"usp",	HB_TAG('M','Y','N',' ')},	/* Uspanteco -> Mayan */
1495   {"uz",	HB_TAG('U','Z','B',' ')},	/* Uzbek [macrolanguage] */
1496   {"uzn",	HB_TAG('U','Z','B',' ')},	/* Northern Uzbek -> Uzbek */
1497   {"uzs",	HB_TAG('U','Z','B',' ')},	/* Southern Uzbek -> Uzbek */
1498   {"vap",	HB_TAG('Q','I','N',' ')},	/* Vaiphei -> Chin */
1499   {"ve",	HB_TAG('V','E','N',' ')},	/* Venda */
1500 /*{"vec",	HB_TAG('V','E','C',' ')},*/	/* Venetian */
1501   {"vi",	HB_TAG('V','I','T',' ')},	/* Vietnamese */
1502   {"vic",	HB_TAG('C','P','P',' ')},	/* Virgin Islands Creole English -> Creoles */
1503   {"vit",	HB_TAG_NONE	       },	/* Viti != Vietnamese */
1504   {"vkk",	HB_TAG('M','L','Y',' ')},	/* Kaur -> Malay */
1505   {"vkp",	HB_TAG('C','P','P',' ')},	/* Korlai Creole Portuguese -> Creoles */
1506   {"vkt",	HB_TAG('M','L','Y',' ')},	/* Tenggarong Kutai Malay -> Malay */
1507   {"vls",	HB_TAG('F','L','E',' ')},	/* Vlaams -> Dutch (Flemish) */
1508   {"vmw",	HB_TAG('M','A','K',' ')},	/* Makhuwa */
1509   {"vo",	HB_TAG('V','O','L',' ')},	/* Volapük */
1510 /*{"vro",	HB_TAG('V','R','O',' ')},*/	/* Võro */
1511   {"wa",	HB_TAG('W','L','N',' ')},	/* Walloon */
1512   {"wag",	HB_TAG_NONE	       },	/* Wa'ema != Wagdi */
1513 /*{"war",	HB_TAG('W','A','R',' ')},*/	/* Waray (Philippines) -> Waray-Waray */
1514   {"wbm",	HB_TAG('W','A',' ',' ')},	/* Wa */
1515   {"wbr",	HB_TAG('W','A','G',' ')},	/* Wagdi */
1516   {"wbr",	HB_TAG('R','A','J',' ')},	/* Wagdi -> Rajasthani */
1517 /*{"wci",	HB_TAG('W','C','I',' ')},*/	/* Waci Gbe */
1518   {"wea",	HB_TAG('K','R','N',' ')},	/* Wewaw -> Karen */
1519   {"wes",	HB_TAG('C','P','P',' ')},	/* Cameroon Pidgin -> Creoles */
1520   {"weu",	HB_TAG('Q','I','N',' ')},	/* Rawngtu Chin -> Chin */
1521   {"wlc",	HB_TAG('C','M','R',' ')},	/* Mwali Comorian -> Comorian */
1522   {"wle",	HB_TAG('S','I','G',' ')},	/* Wolane -> Silte Gurage */
1523   {"wlk",	HB_TAG('A','T','H',' ')},	/* Wailaki -> Athapaskan */
1524   {"wni",	HB_TAG('C','M','R',' ')},	/* Ndzwani Comorian -> Comorian */
1525   {"wo",	HB_TAG('W','L','F',' ')},	/* Wolof */
1526   {"wry",	HB_TAG('M','A','W',' ')},	/* Merwari -> Marwari */
1527   {"wsg",	HB_TAG('G','O','N',' ')},	/* Adilabad Gondi -> Gondi */
1528 /*{"wtm",	HB_TAG('W','T','M',' ')},*/	/* Mewati */
1529   {"wuu",	HB_TAG('Z','H','S',' ')},	/* Wu Chinese -> Chinese, Simplified */
1530   {"xal",	HB_TAG('K','L','M',' ')},	/* Kalmyk */
1531   {"xal",	HB_TAG('T','O','D',' ')},	/* Kalmyk -> Todo */
1532   {"xan",	HB_TAG('S','E','K',' ')},	/* Xamtanga -> Sekota */
1533   {"xbd",	HB_TAG_NONE	       },	/* Bindal != Lü */
1534   {"xh",	HB_TAG('X','H','S',' ')},	/* Xhosa */
1535 /*{"xjb",	HB_TAG('X','J','B',' ')},*/	/* Minjungbal -> Minjangbal */
1536 /*{"xkf",	HB_TAG('X','K','F',' ')},*/	/* Khengkha */
1537   {"xmg",	HB_TAG('B','M','L',' ')},	/* Mengaka -> Bamileke */
1538   {"xmm",	HB_TAG('M','L','Y',' ')},	/* Manado Malay -> Malay */
1539   {"xmm",	HB_TAG('C','P','P',' ')},	/* Manado Malay -> Creoles */
1540   {"xmv",	HB_TAG('M','L','G',' ')},	/* Antankarana Malagasy -> Malagasy */
1541   {"xmw",	HB_TAG('M','L','G',' ')},	/* Tsimihety Malagasy -> Malagasy */
1542   {"xnj",	HB_TAG('S','X','T',' ')},	/* Ngoni (Tanzania) -> Sutu */
1543   {"xnq",	HB_TAG('S','X','T',' ')},	/* Ngoni (Mozambique) -> Sutu */
1544   {"xnr",	HB_TAG('D','G','R',' ')},	/* Kangri -> Dogri (macrolanguage) */
1545 /*{"xog",	HB_TAG('X','O','G',' ')},*/	/* Soga */
1546   {"xpe",	HB_TAG('X','P','E',' ')},	/* Liberia Kpelle -> Kpelle (Liberia) */
1547   {"xpe",	HB_TAG('K','P','L',' ')},	/* Liberia Kpelle -> Kpelle */
1548   {"xsl",	HB_TAG('S','S','L',' ')},	/* South Slavey */
1549   {"xsl",	HB_TAG('S','L','A',' ')},	/* South Slavey -> Slavey */
1550   {"xsl",	HB_TAG('A','T','H',' ')},	/* South Slavey -> Athapaskan */
1551   {"xst",	HB_TAG('S','I','G',' ')},	/* Silt'e (retired code) -> Silte Gurage */
1552 /*{"xub",	HB_TAG('X','U','B',' ')},*/	/* Betta Kurumba -> Bette Kuruma */
1553 /*{"xuj",	HB_TAG('X','U','J',' ')},*/	/* Jennu Kurumba -> Jennu Kuruma */
1554   {"xup",	HB_TAG('A','T','H',' ')},	/* Upper Umpqua -> Athapaskan */
1555   {"xwo",	HB_TAG('T','O','D',' ')},	/* Written Oirat -> Todo */
1556   {"yaj",	HB_TAG('B','A','D','0')},	/* Banda-Yangere -> Banda */
1557   {"yak",	HB_TAG_NONE	       },	/* Yakama != Sakha */
1558 /*{"yao",	HB_TAG('Y','A','O',' ')},*/	/* Yao */
1559 /*{"yap",	HB_TAG('Y','A','P',' ')},*/	/* Yapese */
1560   {"yba",	HB_TAG_NONE	       },	/* Yala != Yoruba */
1561   {"ybb",	HB_TAG('B','M','L',' ')},	/* Yemba -> Bamileke */
1562   {"ybd",	HB_TAG('A','R','K',' ')},	/* Yangbye (retired code) -> Rakhine */
1563   {"ydd",	HB_TAG('J','I','I',' ')},	/* Eastern Yiddish -> Yiddish */
1564 /*{"ygp",	HB_TAG('Y','G','P',' ')},*/	/* Gepo */
1565   {"yi",	HB_TAG('J','I','I',' ')},	/* Yiddish [macrolanguage] */
1566   {"yih",	HB_TAG('J','I','I',' ')},	/* Western Yiddish -> Yiddish */
1567   {"yim",	HB_TAG_NONE	       },	/* Yimchungru Naga != Yi Modern */
1568 /*{"yna",	HB_TAG('Y','N','A',' ')},*/	/* Aluo */
1569   {"yo",	HB_TAG('Y','B','A',' ')},	/* Yoruba */
1570   {"yos",	HB_TAG('Q','I','N',' ')},	/* Yos (retired code) -> Chin */
1571   {"yua",	HB_TAG('M','Y','N',' ')},	/* Yucateco -> Mayan */
1572   {"yue",	HB_TAG('Z','H','H',' ')},	/* Yue Chinese -> Chinese, Traditional, Hong Kong SAR */
1573 /*{"ywq",	HB_TAG('Y','W','Q',' ')},*/	/* Wuding-Luquan Yi */
1574   {"za",	HB_TAG('Z','H','A',' ')},	/* Zhuang [macrolanguage] */
1575   {"zch",	HB_TAG('Z','H','A',' ')},	/* Central Hongshuihe Zhuang -> Zhuang */
1576   {"zdj",	HB_TAG('C','M','R',' ')},	/* Ngazidja Comorian -> Comorian */
1577 /*{"zea",	HB_TAG('Z','E','A',' ')},*/	/* Zeeuws -> Zealandic */
1578   {"zeh",	HB_TAG('Z','H','A',' ')},	/* Eastern Hongshuihe Zhuang -> Zhuang */
1579   {"zen",	HB_TAG('B','B','R',' ')},	/* Zenaga -> Berber */
1580   {"zgb",	HB_TAG('Z','H','A',' ')},	/* Guibei Zhuang -> Zhuang */
1581   {"zgh",	HB_TAG('Z','G','H',' ')},	/* Standard Moroccan Tamazight */
1582   {"zgh",	HB_TAG('B','B','R',' ')},	/* Standard Moroccan Tamazight -> Berber */
1583   {"zgm",	HB_TAG('Z','H','A',' ')},	/* Minz Zhuang -> Zhuang */
1584   {"zgn",	HB_TAG('Z','H','A',' ')},	/* Guibian Zhuang -> Zhuang */
1585   {"zh",	HB_TAG('Z','H','S',' ')},	/* Chinese, Simplified [macrolanguage] */
1586   {"zhd",	HB_TAG('Z','H','A',' ')},	/* Dai Zhuang -> Zhuang */
1587   {"zhn",	HB_TAG('Z','H','A',' ')},	/* Nong Zhuang -> Zhuang */
1588   {"zlj",	HB_TAG('Z','H','A',' ')},	/* Liujiang Zhuang -> Zhuang */
1589   {"zlm",	HB_TAG('M','L','Y',' ')},	/* Malay */
1590   {"zln",	HB_TAG('Z','H','A',' ')},	/* Lianshan Zhuang -> Zhuang */
1591   {"zlq",	HB_TAG('Z','H','A',' ')},	/* Liuqian Zhuang -> Zhuang */
1592   {"zmi",	HB_TAG('M','L','Y',' ')},	/* Negeri Sembilan Malay -> Malay */
1593   {"zmz",	HB_TAG('B','A','D','0')},	/* Mbandja -> Banda */
1594   {"znd",	HB_TAG_NONE	       },	/* Zande [family] != Zande */
1595   {"zne",	HB_TAG('Z','N','D',' ')},	/* Zande */
1596   {"zom",	HB_TAG('Q','I','N',' ')},	/* Zou -> Chin */
1597   {"zqe",	HB_TAG('Z','H','A',' ')},	/* Qiubei Zhuang -> Zhuang */
1598   {"zsm",	HB_TAG('M','L','Y',' ')},	/* Standard Malay -> Malay */
1599   {"zu",	HB_TAG('Z','U','L',' ')},	/* Zulu */
1600   {"zum",	HB_TAG('L','R','C',' ')},	/* Kumzari -> Luri */
1601   {"zyb",	HB_TAG('Z','H','A',' ')},	/* Yongbei Zhuang -> Zhuang */
1602   {"zyg",	HB_TAG('Z','H','A',' ')},	/* Yang Zhuang -> Zhuang */
1603   {"zyj",	HB_TAG('Z','H','A',' ')},	/* Youjiang Zhuang -> Zhuang */
1604   {"zyn",	HB_TAG('Z','H','A',' ')},	/* Yongnan Zhuang -> Zhuang */
1605   {"zyp",	HB_TAG('Q','I','N',' ')},	/* Zyphe Chin -> Chin */
1606 /*{"zza",	HB_TAG('Z','Z','A',' ')},*/	/* Zazaki [macrolanguage] */
1607   {"zzj",	HB_TAG('Z','H','A',' ')},	/* Zuojiang Zhuang -> Zhuang */
1608 };
1609 
1610 /**
1611  * hb_ot_tags_from_complex_language:
1612  * @lang_str: a BCP 47 language tag to convert.
1613  * @limit: a pointer to the end of the substring of @lang_str to consider for
1614  * conversion.
1615  * @count: maximum number of language tags to retrieve (IN) and actual number of
1616  * language tags retrieved (OUT). If no tags are retrieved, it is not modified.
1617  * @tags: array of size at least @language_count to store the language tag
1618  * results
1619  *
1620  * Converts a multi-subtag BCP 47 language tag to language tags.
1621  *
1622  * Return value: Whether any language systems were retrieved.
1623  **/
1624 static bool
hb_ot_tags_from_complex_language(const char * lang_str,const char * limit,unsigned int * count,hb_tag_t * tags)1625 hb_ot_tags_from_complex_language (const char   *lang_str,
1626 				  const char   *limit,
1627 				  unsigned int *count /* IN/OUT */,
1628 				  hb_tag_t     *tags /* OUT */)
1629 {
1630   if (subtag_matches (lang_str, limit, "-fonnapa"))
1631   {
1632     /* Undetermined; North American Phonetic Alphabet */
1633     tags[0] = HB_TAG('A','P','P','H');  /* Phonetic transcription—Americanist conventions */
1634     *count = 1;
1635     return true;
1636   }
1637   if (subtag_matches (lang_str, limit, "-polyton"))
1638   {
1639     /* Modern Greek (1453-); Polytonic Greek */
1640     tags[0] = HB_TAG('P','G','R',' ');  /* Polytonic Greek */
1641     *count = 1;
1642     return true;
1643   }
1644   if (subtag_matches (lang_str, limit, "-arevmda"))
1645   {
1646     /* Armenian; Western Armenian (retired code) */
1647     tags[0] = HB_TAG('H','Y','E',' ');  /* Armenian */
1648     *count = 1;
1649     return true;
1650   }
1651   if (subtag_matches (lang_str, limit, "-provenc"))
1652   {
1653     /* Occitan (post 1500); Provençal */
1654     tags[0] = HB_TAG('P','R','O',' ');  /* Provençal / Old Provençal */
1655     *count = 1;
1656     return true;
1657   }
1658   if (subtag_matches (lang_str, limit, "-fonipa"))
1659   {
1660     /* Undetermined; International Phonetic Alphabet */
1661     tags[0] = HB_TAG('I','P','P','H');  /* Phonetic transcription—IPA conventions */
1662     *count = 1;
1663     return true;
1664   }
1665   if (subtag_matches (lang_str, limit, "-geok"))
1666   {
1667     /* Undetermined; Khutsuri (Asomtavruli and Nuskhuri) */
1668     tags[0] = HB_TAG('K','G','E',' ');  /* Khutsuri Georgian */
1669     *count = 1;
1670     return true;
1671   }
1672   if (subtag_matches (lang_str, limit, "-syre"))
1673   {
1674     /* Undetermined; Syriac (Estrangelo variant) */
1675     tags[0] = HB_TAG('S','Y','R','E');  /* Syriac, Estrangela script-variant (equivalent to ISO 15924 'Syre') */
1676     *count = 1;
1677     return true;
1678   }
1679   if (subtag_matches (lang_str, limit, "-syrj"))
1680   {
1681     /* Undetermined; Syriac (Western variant) */
1682     tags[0] = HB_TAG('S','Y','R','J');  /* Syriac, Western script-variant (equivalent to ISO 15924 'Syrj') */
1683     *count = 1;
1684     return true;
1685   }
1686   if (subtag_matches (lang_str, limit, "-syrn"))
1687   {
1688     /* Undetermined; Syriac (Eastern variant) */
1689     tags[0] = HB_TAG('S','Y','R','N');  /* Syriac, Eastern script-variant (equivalent to ISO 15924 'Syrn') */
1690     *count = 1;
1691     return true;
1692   }
1693   switch (lang_str[0])
1694   {
1695   case 'a':
1696     if (0 == strcmp (&lang_str[1], "rt-lojban"))
1697     {
1698       /* Lojban (retired code) */
1699       tags[0] = HB_TAG('J','B','O',' ');  /* Lojban */
1700       *count = 1;
1701       return true;
1702     }
1703     break;
1704   case 'c':
1705     if (lang_matches (&lang_str[1], "do-hant-hk"))
1706     {
1707       /* Min Dong Chinese; Han (Traditional variant); Hong Kong */
1708       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
1709       *count = 1;
1710       return true;
1711     }
1712     if (lang_matches (&lang_str[1], "do-hant-mo"))
1713     {
1714       /* Min Dong Chinese; Han (Traditional variant); Macao */
1715       unsigned int i;
1716       hb_tag_t possible_tags[] = {
1717 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
1718 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
1719       };
1720       for (i = 0; i < 2 && i < *count; i++)
1721 	tags[i] = possible_tags[i];
1722       *count = i;
1723       return true;
1724     }
1725     if (lang_matches (&lang_str[1], "jy-hant-hk"))
1726     {
1727       /* Jinyu Chinese; Han (Traditional variant); Hong Kong */
1728       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
1729       *count = 1;
1730       return true;
1731     }
1732     if (lang_matches (&lang_str[1], "jy-hant-mo"))
1733     {
1734       /* Jinyu Chinese; Han (Traditional variant); Macao */
1735       unsigned int i;
1736       hb_tag_t possible_tags[] = {
1737 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
1738 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
1739       };
1740       for (i = 0; i < 2 && i < *count; i++)
1741 	tags[i] = possible_tags[i];
1742       *count = i;
1743       return true;
1744     }
1745     if (lang_matches (&lang_str[1], "mn-hant-hk"))
1746     {
1747       /* Mandarin Chinese; Han (Traditional variant); Hong Kong */
1748       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
1749       *count = 1;
1750       return true;
1751     }
1752     if (lang_matches (&lang_str[1], "mn-hant-mo"))
1753     {
1754       /* Mandarin Chinese; Han (Traditional variant); Macao */
1755       unsigned int i;
1756       hb_tag_t possible_tags[] = {
1757 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
1758 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
1759       };
1760       for (i = 0; i < 2 && i < *count; i++)
1761 	tags[i] = possible_tags[i];
1762       *count = i;
1763       return true;
1764     }
1765     if (lang_matches (&lang_str[1], "np-hant-hk"))
1766     {
1767       /* Northern Ping Chinese; Han (Traditional variant); Hong Kong */
1768       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
1769       *count = 1;
1770       return true;
1771     }
1772     if (lang_matches (&lang_str[1], "np-hant-mo"))
1773     {
1774       /* Northern Ping Chinese; Han (Traditional variant); Macao */
1775       unsigned int i;
1776       hb_tag_t possible_tags[] = {
1777 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
1778 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
1779       };
1780       for (i = 0; i < 2 && i < *count; i++)
1781 	tags[i] = possible_tags[i];
1782       *count = i;
1783       return true;
1784     }
1785     if (lang_matches (&lang_str[1], "px-hant-hk"))
1786     {
1787       /* Pu-Xian Chinese; Han (Traditional variant); Hong Kong */
1788       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
1789       *count = 1;
1790       return true;
1791     }
1792     if (lang_matches (&lang_str[1], "px-hant-mo"))
1793     {
1794       /* Pu-Xian Chinese; Han (Traditional variant); Macao */
1795       unsigned int i;
1796       hb_tag_t possible_tags[] = {
1797 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
1798 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
1799       };
1800       for (i = 0; i < 2 && i < *count; i++)
1801 	tags[i] = possible_tags[i];
1802       *count = i;
1803       return true;
1804     }
1805     if (lang_matches (&lang_str[1], "sp-hant-hk"))
1806     {
1807       /* Southern Ping Chinese; Han (Traditional variant); Hong Kong */
1808       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
1809       *count = 1;
1810       return true;
1811     }
1812     if (lang_matches (&lang_str[1], "sp-hant-mo"))
1813     {
1814       /* Southern Ping Chinese; Han (Traditional variant); Macao */
1815       unsigned int i;
1816       hb_tag_t possible_tags[] = {
1817 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
1818 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
1819       };
1820       for (i = 0; i < 2 && i < *count; i++)
1821 	tags[i] = possible_tags[i];
1822       *count = i;
1823       return true;
1824     }
1825     if (lang_matches (&lang_str[1], "zh-hant-hk"))
1826     {
1827       /* Huizhou Chinese; Han (Traditional variant); Hong Kong */
1828       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
1829       *count = 1;
1830       return true;
1831     }
1832     if (lang_matches (&lang_str[1], "zh-hant-mo"))
1833     {
1834       /* Huizhou Chinese; Han (Traditional variant); Macao */
1835       unsigned int i;
1836       hb_tag_t possible_tags[] = {
1837 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
1838 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
1839       };
1840       for (i = 0; i < 2 && i < *count; i++)
1841 	tags[i] = possible_tags[i];
1842       *count = i;
1843       return true;
1844     }
1845     if (lang_matches (&lang_str[1], "zo-hant-hk"))
1846     {
1847       /* Min Zhong Chinese; Han (Traditional variant); Hong Kong */
1848       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
1849       *count = 1;
1850       return true;
1851     }
1852     if (lang_matches (&lang_str[1], "zo-hant-mo"))
1853     {
1854       /* Min Zhong Chinese; Han (Traditional variant); Macao */
1855       unsigned int i;
1856       hb_tag_t possible_tags[] = {
1857 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
1858 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
1859       };
1860       for (i = 0; i < 2 && i < *count; i++)
1861 	tags[i] = possible_tags[i];
1862       *count = i;
1863       return true;
1864     }
1865     if (lang_matches (&lang_str[1], "do-hans"))
1866     {
1867       /* Min Dong Chinese; Han (Simplified variant) */
1868       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
1869       *count = 1;
1870       return true;
1871     }
1872     if (lang_matches (&lang_str[1], "do-hant"))
1873     {
1874       /* Min Dong Chinese; Han (Traditional variant) */
1875       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
1876       *count = 1;
1877       return true;
1878     }
1879     if (lang_matches (&lang_str[1], "jy-hans"))
1880     {
1881       /* Jinyu Chinese; Han (Simplified variant) */
1882       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
1883       *count = 1;
1884       return true;
1885     }
1886     if (lang_matches (&lang_str[1], "jy-hant"))
1887     {
1888       /* Jinyu Chinese; Han (Traditional variant) */
1889       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
1890       *count = 1;
1891       return true;
1892     }
1893     if (lang_matches (&lang_str[1], "mn-hans"))
1894     {
1895       /* Mandarin Chinese; Han (Simplified variant) */
1896       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
1897       *count = 1;
1898       return true;
1899     }
1900     if (lang_matches (&lang_str[1], "mn-hant"))
1901     {
1902       /* Mandarin Chinese; Han (Traditional variant) */
1903       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
1904       *count = 1;
1905       return true;
1906     }
1907     if (lang_matches (&lang_str[1], "np-hans"))
1908     {
1909       /* Northern Ping Chinese; Han (Simplified variant) */
1910       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
1911       *count = 1;
1912       return true;
1913     }
1914     if (lang_matches (&lang_str[1], "np-hant"))
1915     {
1916       /* Northern Ping Chinese; Han (Traditional variant) */
1917       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
1918       *count = 1;
1919       return true;
1920     }
1921     if (lang_matches (&lang_str[1], "px-hans"))
1922     {
1923       /* Pu-Xian Chinese; Han (Simplified variant) */
1924       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
1925       *count = 1;
1926       return true;
1927     }
1928     if (lang_matches (&lang_str[1], "px-hant"))
1929     {
1930       /* Pu-Xian Chinese; Han (Traditional variant) */
1931       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
1932       *count = 1;
1933       return true;
1934     }
1935     if (lang_matches (&lang_str[1], "sp-hans"))
1936     {
1937       /* Southern Ping Chinese; Han (Simplified variant) */
1938       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
1939       *count = 1;
1940       return true;
1941     }
1942     if (lang_matches (&lang_str[1], "sp-hant"))
1943     {
1944       /* Southern Ping Chinese; Han (Traditional variant) */
1945       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
1946       *count = 1;
1947       return true;
1948     }
1949     if (lang_matches (&lang_str[1], "zh-hans"))
1950     {
1951       /* Huizhou Chinese; Han (Simplified variant) */
1952       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
1953       *count = 1;
1954       return true;
1955     }
1956     if (lang_matches (&lang_str[1], "zh-hant"))
1957     {
1958       /* Huizhou Chinese; Han (Traditional variant) */
1959       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
1960       *count = 1;
1961       return true;
1962     }
1963     if (lang_matches (&lang_str[1], "zo-hans"))
1964     {
1965       /* Min Zhong Chinese; Han (Simplified variant) */
1966       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
1967       *count = 1;
1968       return true;
1969     }
1970     if (lang_matches (&lang_str[1], "zo-hant"))
1971     {
1972       /* Min Zhong Chinese; Han (Traditional variant) */
1973       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
1974       *count = 1;
1975       return true;
1976     }
1977     if (0 == strncmp (&lang_str[1], "do-", 3)
1978 	&& subtag_matches (lang_str, limit, "-hk"))
1979     {
1980       /* Min Dong Chinese; Hong Kong */
1981       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
1982       *count = 1;
1983       return true;
1984     }
1985     if (0 == strncmp (&lang_str[1], "do-", 3)
1986 	&& subtag_matches (lang_str, limit, "-mo"))
1987     {
1988       /* Min Dong Chinese; Macao */
1989       unsigned int i;
1990       hb_tag_t possible_tags[] = {
1991 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
1992 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
1993       };
1994       for (i = 0; i < 2 && i < *count; i++)
1995 	tags[i] = possible_tags[i];
1996       *count = i;
1997       return true;
1998     }
1999     if (0 == strncmp (&lang_str[1], "do-", 3)
2000 	&& subtag_matches (lang_str, limit, "-tw"))
2001     {
2002       /* Min Dong Chinese; Taiwan, Province of China */
2003       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
2004       *count = 1;
2005       return true;
2006     }
2007     if (0 == strncmp (&lang_str[1], "jy-", 3)
2008 	&& subtag_matches (lang_str, limit, "-hk"))
2009     {
2010       /* Jinyu Chinese; Hong Kong */
2011       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
2012       *count = 1;
2013       return true;
2014     }
2015     if (0 == strncmp (&lang_str[1], "jy-", 3)
2016 	&& subtag_matches (lang_str, limit, "-mo"))
2017     {
2018       /* Jinyu Chinese; Macao */
2019       unsigned int i;
2020       hb_tag_t possible_tags[] = {
2021 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
2022 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
2023       };
2024       for (i = 0; i < 2 && i < *count; i++)
2025 	tags[i] = possible_tags[i];
2026       *count = i;
2027       return true;
2028     }
2029     if (0 == strncmp (&lang_str[1], "jy-", 3)
2030 	&& subtag_matches (lang_str, limit, "-tw"))
2031     {
2032       /* Jinyu Chinese; Taiwan, Province of China */
2033       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
2034       *count = 1;
2035       return true;
2036     }
2037     if (0 == strncmp (&lang_str[1], "mn-", 3)
2038 	&& subtag_matches (lang_str, limit, "-hk"))
2039     {
2040       /* Mandarin Chinese; Hong Kong */
2041       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
2042       *count = 1;
2043       return true;
2044     }
2045     if (0 == strncmp (&lang_str[1], "mn-", 3)
2046 	&& subtag_matches (lang_str, limit, "-mo"))
2047     {
2048       /* Mandarin Chinese; Macao */
2049       unsigned int i;
2050       hb_tag_t possible_tags[] = {
2051 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
2052 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
2053       };
2054       for (i = 0; i < 2 && i < *count; i++)
2055 	tags[i] = possible_tags[i];
2056       *count = i;
2057       return true;
2058     }
2059     if (0 == strncmp (&lang_str[1], "mn-", 3)
2060 	&& subtag_matches (lang_str, limit, "-tw"))
2061     {
2062       /* Mandarin Chinese; Taiwan, Province of China */
2063       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
2064       *count = 1;
2065       return true;
2066     }
2067     if (0 == strncmp (&lang_str[1], "np-", 3)
2068 	&& subtag_matches (lang_str, limit, "-hk"))
2069     {
2070       /* Northern Ping Chinese; Hong Kong */
2071       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
2072       *count = 1;
2073       return true;
2074     }
2075     if (0 == strncmp (&lang_str[1], "np-", 3)
2076 	&& subtag_matches (lang_str, limit, "-mo"))
2077     {
2078       /* Northern Ping Chinese; Macao */
2079       unsigned int i;
2080       hb_tag_t possible_tags[] = {
2081 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
2082 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
2083       };
2084       for (i = 0; i < 2 && i < *count; i++)
2085 	tags[i] = possible_tags[i];
2086       *count = i;
2087       return true;
2088     }
2089     if (0 == strncmp (&lang_str[1], "np-", 3)
2090 	&& subtag_matches (lang_str, limit, "-tw"))
2091     {
2092       /* Northern Ping Chinese; Taiwan, Province of China */
2093       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
2094       *count = 1;
2095       return true;
2096     }
2097     if (0 == strncmp (&lang_str[1], "px-", 3)
2098 	&& subtag_matches (lang_str, limit, "-hk"))
2099     {
2100       /* Pu-Xian Chinese; Hong Kong */
2101       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
2102       *count = 1;
2103       return true;
2104     }
2105     if (0 == strncmp (&lang_str[1], "px-", 3)
2106 	&& subtag_matches (lang_str, limit, "-mo"))
2107     {
2108       /* Pu-Xian Chinese; Macao */
2109       unsigned int i;
2110       hb_tag_t possible_tags[] = {
2111 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
2112 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
2113       };
2114       for (i = 0; i < 2 && i < *count; i++)
2115 	tags[i] = possible_tags[i];
2116       *count = i;
2117       return true;
2118     }
2119     if (0 == strncmp (&lang_str[1], "px-", 3)
2120 	&& subtag_matches (lang_str, limit, "-tw"))
2121     {
2122       /* Pu-Xian Chinese; Taiwan, Province of China */
2123       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
2124       *count = 1;
2125       return true;
2126     }
2127     if (0 == strncmp (&lang_str[1], "sp-", 3)
2128 	&& subtag_matches (lang_str, limit, "-hk"))
2129     {
2130       /* Southern Ping Chinese; Hong Kong */
2131       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
2132       *count = 1;
2133       return true;
2134     }
2135     if (0 == strncmp (&lang_str[1], "sp-", 3)
2136 	&& subtag_matches (lang_str, limit, "-mo"))
2137     {
2138       /* Southern Ping Chinese; Macao */
2139       unsigned int i;
2140       hb_tag_t possible_tags[] = {
2141 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
2142 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
2143       };
2144       for (i = 0; i < 2 && i < *count; i++)
2145 	tags[i] = possible_tags[i];
2146       *count = i;
2147       return true;
2148     }
2149     if (0 == strncmp (&lang_str[1], "sp-", 3)
2150 	&& subtag_matches (lang_str, limit, "-tw"))
2151     {
2152       /* Southern Ping Chinese; Taiwan, Province of China */
2153       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
2154       *count = 1;
2155       return true;
2156     }
2157     if (0 == strncmp (&lang_str[1], "zh-", 3)
2158 	&& subtag_matches (lang_str, limit, "-hk"))
2159     {
2160       /* Huizhou Chinese; Hong Kong */
2161       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
2162       *count = 1;
2163       return true;
2164     }
2165     if (0 == strncmp (&lang_str[1], "zh-", 3)
2166 	&& subtag_matches (lang_str, limit, "-mo"))
2167     {
2168       /* Huizhou Chinese; Macao */
2169       unsigned int i;
2170       hb_tag_t possible_tags[] = {
2171 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
2172 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
2173       };
2174       for (i = 0; i < 2 && i < *count; i++)
2175 	tags[i] = possible_tags[i];
2176       *count = i;
2177       return true;
2178     }
2179     if (0 == strncmp (&lang_str[1], "zh-", 3)
2180 	&& subtag_matches (lang_str, limit, "-tw"))
2181     {
2182       /* Huizhou Chinese; Taiwan, Province of China */
2183       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
2184       *count = 1;
2185       return true;
2186     }
2187     if (0 == strncmp (&lang_str[1], "zo-", 3)
2188 	&& subtag_matches (lang_str, limit, "-hk"))
2189     {
2190       /* Min Zhong Chinese; Hong Kong */
2191       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
2192       *count = 1;
2193       return true;
2194     }
2195     if (0 == strncmp (&lang_str[1], "zo-", 3)
2196 	&& subtag_matches (lang_str, limit, "-mo"))
2197     {
2198       /* Min Zhong Chinese; Macao */
2199       unsigned int i;
2200       hb_tag_t possible_tags[] = {
2201 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
2202 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
2203       };
2204       for (i = 0; i < 2 && i < *count; i++)
2205 	tags[i] = possible_tags[i];
2206       *count = i;
2207       return true;
2208     }
2209     if (0 == strncmp (&lang_str[1], "zo-", 3)
2210 	&& subtag_matches (lang_str, limit, "-tw"))
2211     {
2212       /* Min Zhong Chinese; Taiwan, Province of China */
2213       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
2214       *count = 1;
2215       return true;
2216     }
2217     break;
2218   case 'g':
2219     if (lang_matches (&lang_str[1], "an-hant-hk"))
2220     {
2221       /* Gan Chinese; Han (Traditional variant); Hong Kong */
2222       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
2223       *count = 1;
2224       return true;
2225     }
2226     if (lang_matches (&lang_str[1], "an-hant-mo"))
2227     {
2228       /* Gan Chinese; Han (Traditional variant); Macao */
2229       unsigned int i;
2230       hb_tag_t possible_tags[] = {
2231 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
2232 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
2233       };
2234       for (i = 0; i < 2 && i < *count; i++)
2235 	tags[i] = possible_tags[i];
2236       *count = i;
2237       return true;
2238     }
2239     if (lang_matches (&lang_str[1], "an-hans"))
2240     {
2241       /* Gan Chinese; Han (Simplified variant) */
2242       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
2243       *count = 1;
2244       return true;
2245     }
2246     if (lang_matches (&lang_str[1], "an-hant"))
2247     {
2248       /* Gan Chinese; Han (Traditional variant) */
2249       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
2250       *count = 1;
2251       return true;
2252     }
2253     if (lang_matches (&lang_str[1], "a-latg"))
2254     {
2255       /* Irish; Latin (Gaelic variant) */
2256       tags[0] = HB_TAG('I','R','T',' ');  /* Irish Traditional */
2257       *count = 1;
2258       return true;
2259     }
2260     if (0 == strncmp (&lang_str[1], "an-", 3)
2261 	&& subtag_matches (lang_str, limit, "-hk"))
2262     {
2263       /* Gan Chinese; Hong Kong */
2264       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
2265       *count = 1;
2266       return true;
2267     }
2268     if (0 == strncmp (&lang_str[1], "an-", 3)
2269 	&& subtag_matches (lang_str, limit, "-mo"))
2270     {
2271       /* Gan Chinese; Macao */
2272       unsigned int i;
2273       hb_tag_t possible_tags[] = {
2274 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
2275 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
2276       };
2277       for (i = 0; i < 2 && i < *count; i++)
2278 	tags[i] = possible_tags[i];
2279       *count = i;
2280       return true;
2281     }
2282     if (0 == strncmp (&lang_str[1], "an-", 3)
2283 	&& subtag_matches (lang_str, limit, "-tw"))
2284     {
2285       /* Gan Chinese; Taiwan, Province of China */
2286       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
2287       *count = 1;
2288       return true;
2289     }
2290     break;
2291   case 'h':
2292     if (lang_matches (&lang_str[1], "ak-hant-hk"))
2293     {
2294       /* Hakka Chinese; Han (Traditional variant); Hong Kong */
2295       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
2296       *count = 1;
2297       return true;
2298     }
2299     if (lang_matches (&lang_str[1], "ak-hant-mo"))
2300     {
2301       /* Hakka Chinese; Han (Traditional variant); Macao */
2302       unsigned int i;
2303       hb_tag_t possible_tags[] = {
2304 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
2305 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
2306       };
2307       for (i = 0; i < 2 && i < *count; i++)
2308 	tags[i] = possible_tags[i];
2309       *count = i;
2310       return true;
2311     }
2312     if (lang_matches (&lang_str[1], "sn-hant-hk"))
2313     {
2314       /* Xiang Chinese; Han (Traditional variant); Hong Kong */
2315       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
2316       *count = 1;
2317       return true;
2318     }
2319     if (lang_matches (&lang_str[1], "sn-hant-mo"))
2320     {
2321       /* Xiang Chinese; Han (Traditional variant); Macao */
2322       unsigned int i;
2323       hb_tag_t possible_tags[] = {
2324 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
2325 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
2326       };
2327       for (i = 0; i < 2 && i < *count; i++)
2328 	tags[i] = possible_tags[i];
2329       *count = i;
2330       return true;
2331     }
2332     if (lang_matches (&lang_str[1], "ak-hans"))
2333     {
2334       /* Hakka Chinese; Han (Simplified variant) */
2335       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
2336       *count = 1;
2337       return true;
2338     }
2339     if (lang_matches (&lang_str[1], "ak-hant"))
2340     {
2341       /* Hakka Chinese; Han (Traditional variant) */
2342       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
2343       *count = 1;
2344       return true;
2345     }
2346     if (lang_matches (&lang_str[1], "sn-hans"))
2347     {
2348       /* Xiang Chinese; Han (Simplified variant) */
2349       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
2350       *count = 1;
2351       return true;
2352     }
2353     if (lang_matches (&lang_str[1], "sn-hant"))
2354     {
2355       /* Xiang Chinese; Han (Traditional variant) */
2356       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
2357       *count = 1;
2358       return true;
2359     }
2360     if (0 == strncmp (&lang_str[1], "ak-", 3)
2361 	&& subtag_matches (lang_str, limit, "-hk"))
2362     {
2363       /* Hakka Chinese; Hong Kong */
2364       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
2365       *count = 1;
2366       return true;
2367     }
2368     if (0 == strncmp (&lang_str[1], "ak-", 3)
2369 	&& subtag_matches (lang_str, limit, "-mo"))
2370     {
2371       /* Hakka Chinese; Macao */
2372       unsigned int i;
2373       hb_tag_t possible_tags[] = {
2374 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
2375 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
2376       };
2377       for (i = 0; i < 2 && i < *count; i++)
2378 	tags[i] = possible_tags[i];
2379       *count = i;
2380       return true;
2381     }
2382     if (0 == strncmp (&lang_str[1], "ak-", 3)
2383 	&& subtag_matches (lang_str, limit, "-tw"))
2384     {
2385       /* Hakka Chinese; Taiwan, Province of China */
2386       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
2387       *count = 1;
2388       return true;
2389     }
2390     if (0 == strncmp (&lang_str[1], "sn-", 3)
2391 	&& subtag_matches (lang_str, limit, "-hk"))
2392     {
2393       /* Xiang Chinese; Hong Kong */
2394       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
2395       *count = 1;
2396       return true;
2397     }
2398     if (0 == strncmp (&lang_str[1], "sn-", 3)
2399 	&& subtag_matches (lang_str, limit, "-mo"))
2400     {
2401       /* Xiang Chinese; Macao */
2402       unsigned int i;
2403       hb_tag_t possible_tags[] = {
2404 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
2405 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
2406       };
2407       for (i = 0; i < 2 && i < *count; i++)
2408 	tags[i] = possible_tags[i];
2409       *count = i;
2410       return true;
2411     }
2412     if (0 == strncmp (&lang_str[1], "sn-", 3)
2413 	&& subtag_matches (lang_str, limit, "-tw"))
2414     {
2415       /* Xiang Chinese; Taiwan, Province of China */
2416       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
2417       *count = 1;
2418       return true;
2419     }
2420     break;
2421   case 'i':
2422     if (0 == strcmp (&lang_str[1], "-navajo"))
2423     {
2424       /* Navajo (retired code) */
2425       unsigned int i;
2426       hb_tag_t possible_tags[] = {
2427 	HB_TAG('N','A','V',' '),  /* Navajo */
2428 	HB_TAG('A','T','H',' '),  /* Athapaskan */
2429       };
2430       for (i = 0; i < 2 && i < *count; i++)
2431 	tags[i] = possible_tags[i];
2432       *count = i;
2433       return true;
2434     }
2435     if (0 == strcmp (&lang_str[1], "-hak"))
2436     {
2437       /* Hakka (retired code) */
2438       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
2439       *count = 1;
2440       return true;
2441     }
2442     if (0 == strcmp (&lang_str[1], "-lux"))
2443     {
2444       /* Luxembourgish (retired code) */
2445       tags[0] = HB_TAG('L','T','Z',' ');  /* Luxembourgish */
2446       *count = 1;
2447       return true;
2448     }
2449     break;
2450   case 'l':
2451     if (lang_matches (&lang_str[1], "zh-hans"))
2452     {
2453       /* Literary Chinese; Han (Simplified variant) */
2454       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
2455       *count = 1;
2456       return true;
2457     }
2458     break;
2459   case 'm':
2460     if (lang_matches (&lang_str[1], "np-hant-hk"))
2461     {
2462       /* Min Bei Chinese; Han (Traditional variant); Hong Kong */
2463       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
2464       *count = 1;
2465       return true;
2466     }
2467     if (lang_matches (&lang_str[1], "np-hant-mo"))
2468     {
2469       /* Min Bei Chinese; Han (Traditional variant); Macao */
2470       unsigned int i;
2471       hb_tag_t possible_tags[] = {
2472 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
2473 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
2474       };
2475       for (i = 0; i < 2 && i < *count; i++)
2476 	tags[i] = possible_tags[i];
2477       *count = i;
2478       return true;
2479     }
2480     if (lang_matches (&lang_str[1], "np-hans"))
2481     {
2482       /* Min Bei Chinese; Han (Simplified variant) */
2483       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
2484       *count = 1;
2485       return true;
2486     }
2487     if (lang_matches (&lang_str[1], "np-hant"))
2488     {
2489       /* Min Bei Chinese; Han (Traditional variant) */
2490       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
2491       *count = 1;
2492       return true;
2493     }
2494     if (0 == strncmp (&lang_str[1], "np-", 3)
2495 	&& subtag_matches (lang_str, limit, "-hk"))
2496     {
2497       /* Min Bei Chinese; Hong Kong */
2498       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
2499       *count = 1;
2500       return true;
2501     }
2502     if (0 == strncmp (&lang_str[1], "np-", 3)
2503 	&& subtag_matches (lang_str, limit, "-mo"))
2504     {
2505       /* Min Bei Chinese; Macao */
2506       unsigned int i;
2507       hb_tag_t possible_tags[] = {
2508 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
2509 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
2510       };
2511       for (i = 0; i < 2 && i < *count; i++)
2512 	tags[i] = possible_tags[i];
2513       *count = i;
2514       return true;
2515     }
2516     if (0 == strncmp (&lang_str[1], "np-", 3)
2517 	&& subtag_matches (lang_str, limit, "-tw"))
2518     {
2519       /* Min Bei Chinese; Taiwan, Province of China */
2520       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
2521       *count = 1;
2522       return true;
2523     }
2524     break;
2525   case 'n':
2526     if (lang_matches (&lang_str[1], "an-hant-hk"))
2527     {
2528       /* Min Nan Chinese; Han (Traditional variant); Hong Kong */
2529       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
2530       *count = 1;
2531       return true;
2532     }
2533     if (lang_matches (&lang_str[1], "an-hant-mo"))
2534     {
2535       /* Min Nan Chinese; Han (Traditional variant); Macao */
2536       unsigned int i;
2537       hb_tag_t possible_tags[] = {
2538 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
2539 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
2540       };
2541       for (i = 0; i < 2 && i < *count; i++)
2542 	tags[i] = possible_tags[i];
2543       *count = i;
2544       return true;
2545     }
2546     if (lang_matches (&lang_str[1], "an-hans"))
2547     {
2548       /* Min Nan Chinese; Han (Simplified variant) */
2549       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
2550       *count = 1;
2551       return true;
2552     }
2553     if (lang_matches (&lang_str[1], "an-hant"))
2554     {
2555       /* Min Nan Chinese; Han (Traditional variant) */
2556       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
2557       *count = 1;
2558       return true;
2559     }
2560     if (0 == strncmp (&lang_str[1], "an-", 3)
2561 	&& subtag_matches (lang_str, limit, "-hk"))
2562     {
2563       /* Min Nan Chinese; Hong Kong */
2564       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
2565       *count = 1;
2566       return true;
2567     }
2568     if (0 == strncmp (&lang_str[1], "an-", 3)
2569 	&& subtag_matches (lang_str, limit, "-mo"))
2570     {
2571       /* Min Nan Chinese; Macao */
2572       unsigned int i;
2573       hb_tag_t possible_tags[] = {
2574 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
2575 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
2576       };
2577       for (i = 0; i < 2 && i < *count; i++)
2578 	tags[i] = possible_tags[i];
2579       *count = i;
2580       return true;
2581     }
2582     if (0 == strncmp (&lang_str[1], "an-", 3)
2583 	&& subtag_matches (lang_str, limit, "-tw"))
2584     {
2585       /* Min Nan Chinese; Taiwan, Province of China */
2586       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
2587       *count = 1;
2588       return true;
2589     }
2590     if (0 == strcmp (&lang_str[1], "o-bok"))
2591     {
2592       /* Norwegian Bokmal (retired code) */
2593       tags[0] = HB_TAG('N','O','R',' ');  /* Norwegian */
2594       *count = 1;
2595       return true;
2596     }
2597     if (0 == strcmp (&lang_str[1], "o-nyn"))
2598     {
2599       /* Norwegian Nynorsk (retired code) */
2600       unsigned int i;
2601       hb_tag_t possible_tags[] = {
2602 	HB_TAG('N','Y','N',' '),  /* Norwegian Nynorsk (Nynorsk, Norwegian) */
2603 	HB_TAG('N','O','R',' '),  /* Norwegian */
2604       };
2605       for (i = 0; i < 2 && i < *count; i++)
2606 	tags[i] = possible_tags[i];
2607       *count = i;
2608       return true;
2609     }
2610     break;
2611   case 'r':
2612     if (0 == strncmp (&lang_str[1], "o-", 2)
2613 	&& subtag_matches (lang_str, limit, "-md"))
2614     {
2615       /* Romanian; Moldova */
2616       tags[0] = HB_TAG('M','O','L',' ');  /* Moldavian */
2617       *count = 1;
2618       return true;
2619     }
2620     break;
2621   case 'w':
2622     if (lang_matches (&lang_str[1], "uu-hant-hk"))
2623     {
2624       /* Wu Chinese; Han (Traditional variant); Hong Kong */
2625       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
2626       *count = 1;
2627       return true;
2628     }
2629     if (lang_matches (&lang_str[1], "uu-hant-mo"))
2630     {
2631       /* Wu Chinese; Han (Traditional variant); Macao */
2632       unsigned int i;
2633       hb_tag_t possible_tags[] = {
2634 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
2635 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
2636       };
2637       for (i = 0; i < 2 && i < *count; i++)
2638 	tags[i] = possible_tags[i];
2639       *count = i;
2640       return true;
2641     }
2642     if (lang_matches (&lang_str[1], "uu-hans"))
2643     {
2644       /* Wu Chinese; Han (Simplified variant) */
2645       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
2646       *count = 1;
2647       return true;
2648     }
2649     if (lang_matches (&lang_str[1], "uu-hant"))
2650     {
2651       /* Wu Chinese; Han (Traditional variant) */
2652       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
2653       *count = 1;
2654       return true;
2655     }
2656     if (0 == strncmp (&lang_str[1], "uu-", 3)
2657 	&& subtag_matches (lang_str, limit, "-hk"))
2658     {
2659       /* Wu Chinese; Hong Kong */
2660       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
2661       *count = 1;
2662       return true;
2663     }
2664     if (0 == strncmp (&lang_str[1], "uu-", 3)
2665 	&& subtag_matches (lang_str, limit, "-mo"))
2666     {
2667       /* Wu Chinese; Macao */
2668       unsigned int i;
2669       hb_tag_t possible_tags[] = {
2670 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
2671 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
2672       };
2673       for (i = 0; i < 2 && i < *count; i++)
2674 	tags[i] = possible_tags[i];
2675       *count = i;
2676       return true;
2677     }
2678     if (0 == strncmp (&lang_str[1], "uu-", 3)
2679 	&& subtag_matches (lang_str, limit, "-tw"))
2680     {
2681       /* Wu Chinese; Taiwan, Province of China */
2682       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
2683       *count = 1;
2684       return true;
2685     }
2686     break;
2687   case 'y':
2688     if (lang_matches (&lang_str[1], "ue-hans"))
2689     {
2690       /* Yue Chinese; Han (Simplified variant) */
2691       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
2692       *count = 1;
2693       return true;
2694     }
2695     break;
2696   case 'z':
2697     if (lang_matches (&lang_str[1], "h-hant-hk"))
2698     {
2699       /* Chinese [macrolanguage]; Han (Traditional variant); Hong Kong */
2700       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
2701       *count = 1;
2702       return true;
2703     }
2704     if (lang_matches (&lang_str[1], "h-hant-mo"))
2705     {
2706       /* Chinese [macrolanguage]; Han (Traditional variant); Macao */
2707       unsigned int i;
2708       hb_tag_t possible_tags[] = {
2709 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
2710 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
2711       };
2712       for (i = 0; i < 2 && i < *count; i++)
2713 	tags[i] = possible_tags[i];
2714       *count = i;
2715       return true;
2716     }
2717     if (0 == strcmp (&lang_str[1], "h-min-nan"))
2718     {
2719       /* Minnan, Hokkien, Amoy, Taiwanese, Southern Min, Southern Fujian, Hoklo, Southern Fukien, Ho-lo (retired code) */
2720       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
2721       *count = 1;
2722       return true;
2723     }
2724     if (lang_matches (&lang_str[1], "h-hans"))
2725     {
2726       /* Chinese [macrolanguage]; Han (Simplified variant) */
2727       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
2728       *count = 1;
2729       return true;
2730     }
2731     if (lang_matches (&lang_str[1], "h-hant"))
2732     {
2733       /* Chinese [macrolanguage]; Han (Traditional variant) */
2734       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
2735       *count = 1;
2736       return true;
2737     }
2738     if (0 == strcmp (&lang_str[1], "h-min"))
2739     {
2740       /* Min, Fuzhou, Hokkien, Amoy, or Taiwanese (retired code) */
2741       tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
2742       *count = 1;
2743       return true;
2744     }
2745     if (0 == strncmp (&lang_str[1], "h-", 2)
2746 	&& subtag_matches (lang_str, limit, "-hk"))
2747     {
2748       /* Chinese [macrolanguage]; Hong Kong */
2749       tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
2750       *count = 1;
2751       return true;
2752     }
2753     if (0 == strncmp (&lang_str[1], "h-", 2)
2754 	&& subtag_matches (lang_str, limit, "-mo"))
2755     {
2756       /* Chinese [macrolanguage]; Macao */
2757       unsigned int i;
2758       hb_tag_t possible_tags[] = {
2759 	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
2760 	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
2761       };
2762       for (i = 0; i < 2 && i < *count; i++)
2763 	tags[i] = possible_tags[i];
2764       *count = i;
2765       return true;
2766     }
2767     if (0 == strncmp (&lang_str[1], "h-", 2)
2768 	&& subtag_matches (lang_str, limit, "-tw"))
2769     {
2770       /* Chinese [macrolanguage]; Taiwan, Province of China */
2771       tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
2772       *count = 1;
2773       return true;
2774     }
2775     break;
2776   }
2777   return false;
2778 }
2779 
2780 /**
2781  * hb_ot_ambiguous_tag_to_language
2782  * @tag: A language tag.
2783  *
2784  * Converts @tag to a BCP 47 language tag if it is ambiguous (it corresponds to
2785  * many language tags) and the best tag is not the alphabetically first, or if
2786  * the best tag consists of multiple subtags, or if the best tag does not appear
2787  * in #ot_languages.
2788  *
2789  * Return value: The #hb_language_t corresponding to the BCP 47 language tag,
2790  * or #HB_LANGUAGE_INVALID if @tag is not ambiguous.
2791  **/
2792 static hb_language_t
hb_ot_ambiguous_tag_to_language(hb_tag_t tag)2793 hb_ot_ambiguous_tag_to_language (hb_tag_t tag)
2794 {
2795   switch (tag)
2796   {
2797   case HB_TAG('A','L','T',' '):  /* Altai */
2798     return hb_language_from_string ("alt", -1);  /* Southern Altai */
2799   case HB_TAG('A','P','P','H'):  /* Phonetic transcription—Americanist conventions */
2800     return hb_language_from_string ("und-fonnapa", -1);  /* Undetermined; North American Phonetic Alphabet */
2801   case HB_TAG('A','R','A',' '):  /* Arabic */
2802     return hb_language_from_string ("ar", -1);  /* Arabic [macrolanguage] */
2803   case HB_TAG('A','R','K',' '):  /* Rakhine */
2804     return hb_language_from_string ("rki", -1);  /* Rakhine */
2805   case HB_TAG('A','T','H',' '):  /* Athapaskan */
2806     return hb_language_from_string ("ath", -1);  /* Athapascan [family] */
2807   case HB_TAG('B','B','R',' '):  /* Berber */
2808     return hb_language_from_string ("ber", -1);  /* Berber [family] */
2809   case HB_TAG('B','I','K',' '):  /* Bikol */
2810     return hb_language_from_string ("bik", -1);  /* Bikol [macrolanguage] */
2811   case HB_TAG('B','T','K',' '):  /* Batak */
2812     return hb_language_from_string ("btk", -1);  /* Batak [family] */
2813   case HB_TAG('C','P','P',' '):  /* Creoles */
2814     return hb_language_from_string ("crp", -1);  /* Creoles and pidgins [family] */
2815   case HB_TAG('C','R','R',' '):  /* Carrier */
2816     return hb_language_from_string ("crx", -1);  /* Carrier */
2817   case HB_TAG('D','G','R',' '):  /* Dogri (macrolanguage) */
2818     return hb_language_from_string ("doi", -1);  /* Dogri [macrolanguage] */
2819   case HB_TAG('D','N','K',' '):  /* Dinka */
2820     return hb_language_from_string ("din", -1);  /* Dinka [macrolanguage] */
2821   case HB_TAG('D','R','I',' '):  /* Dari */
2822     return hb_language_from_string ("prs", -1);  /* Dari */
2823   case HB_TAG('D','Z','N',' '):  /* Dzongkha */
2824     return hb_language_from_string ("dz", -1);  /* Dzongkha */
2825   case HB_TAG('E','T','I',' '):  /* Estonian */
2826     return hb_language_from_string ("et", -1);  /* Estonian [macrolanguage] */
2827   case HB_TAG('F','A','R',' '):  /* Persian */
2828     return hb_language_from_string ("fa", -1);  /* Persian [macrolanguage] */
2829   case HB_TAG('G','O','N',' '):  /* Gondi */
2830     return hb_language_from_string ("gon", -1);  /* Gondi [macrolanguage] */
2831   case HB_TAG('H','M','N',' '):  /* Hmong */
2832     return hb_language_from_string ("hmn", -1);  /* Hmong [macrolanguage] */
2833   case HB_TAG('H','N','D',' '):  /* Hindko */
2834     return hb_language_from_string ("hnd", -1);  /* Southern Hindko */
2835   case HB_TAG('H','Y','E',' '):  /* Armenian */
2836     return hb_language_from_string ("hyw", -1);  /* Western Armenian */
2837   case HB_TAG('I','B','A',' '):  /* Iban */
2838     return hb_language_from_string ("iba", -1);  /* Iban */
2839   case HB_TAG('I','J','O',' '):  /* Ijo */
2840     return hb_language_from_string ("ijo", -1);  /* Ijo [family] */
2841   case HB_TAG('I','N','U',' '):  /* Inuktitut */
2842     return hb_language_from_string ("iu", -1);  /* Inuktitut [macrolanguage] */
2843   case HB_TAG('I','P','K',' '):  /* Inupiat */
2844     return hb_language_from_string ("ik", -1);  /* Inupiaq [macrolanguage] */
2845   case HB_TAG('I','P','P','H'):  /* Phonetic transcription—IPA conventions */
2846     return hb_language_from_string ("und-fonipa", -1);  /* Undetermined; International Phonetic Alphabet */
2847   case HB_TAG('I','R','T',' '):  /* Irish Traditional */
2848     return hb_language_from_string ("ga-Latg", -1);  /* Irish; Latin (Gaelic variant) */
2849   case HB_TAG('J','I','I',' '):  /* Yiddish */
2850     return hb_language_from_string ("yi", -1);  /* Yiddish [macrolanguage] */
2851   case HB_TAG('K','A','L',' '):  /* Kalenjin */
2852     return hb_language_from_string ("kln", -1);  /* Kalenjin [macrolanguage] */
2853   case HB_TAG('K','G','E',' '):  /* Khutsuri Georgian */
2854     return hb_language_from_string ("und-Geok", -1);  /* Undetermined; Khutsuri (Asomtavruli and Nuskhuri) */
2855   case HB_TAG('K','N','R',' '):  /* Kanuri */
2856     return hb_language_from_string ("kr", -1);  /* Kanuri [macrolanguage] */
2857   case HB_TAG('K','O','H',' '):  /* Korean Old Hangul */
2858     return hb_language_from_string ("okm", -1);  /* Middle Korean (10th-16th cent.) */
2859   case HB_TAG('K','O','K',' '):  /* Konkani */
2860     return hb_language_from_string ("kok", -1);  /* Konkani [macrolanguage] */
2861   case HB_TAG('K','O','M',' '):  /* Komi */
2862     return hb_language_from_string ("kv", -1);  /* Komi [macrolanguage] */
2863   case HB_TAG('K','P','L',' '):  /* Kpelle */
2864     return hb_language_from_string ("kpe", -1);  /* Kpelle [macrolanguage] */
2865   case HB_TAG('K','R','N',' '):  /* Karen */
2866     return hb_language_from_string ("kar", -1);  /* Karen [family] */
2867   case HB_TAG('K','U','I',' '):  /* Kui */
2868     return hb_language_from_string ("uki", -1);  /* Kui (India) */
2869   case HB_TAG('K','U','R',' '):  /* Kurdish */
2870     return hb_language_from_string ("ku", -1);  /* Kurdish [macrolanguage] */
2871   case HB_TAG('L','U','H',' '):  /* Luyia */
2872     return hb_language_from_string ("luy", -1);  /* Luyia [macrolanguage] */
2873   case HB_TAG('L','V','I',' '):  /* Latvian */
2874     return hb_language_from_string ("lv", -1);  /* Latvian [macrolanguage] */
2875   case HB_TAG('M','A','W',' '):  /* Marwari */
2876     return hb_language_from_string ("mwr", -1);  /* Marwari [macrolanguage] */
2877   case HB_TAG('M','L','G',' '):  /* Malagasy */
2878     return hb_language_from_string ("mg", -1);  /* Malagasy [macrolanguage] */
2879   case HB_TAG('M','L','Y',' '):  /* Malay */
2880     return hb_language_from_string ("ms", -1);  /* Malay [macrolanguage] */
2881   case HB_TAG('M','N','G',' '):  /* Mongolian */
2882     return hb_language_from_string ("mn", -1);  /* Mongolian [macrolanguage] */
2883   case HB_TAG('M','N','K',' '):  /* Maninka */
2884     return hb_language_from_string ("man", -1);  /* Mandingo [macrolanguage] */
2885   case HB_TAG('M','O','L',' '):  /* Moldavian */
2886     return hb_language_from_string ("ro-MD", -1);  /* Romanian; Moldova */
2887   case HB_TAG('M','Y','N',' '):  /* Mayan */
2888     return hb_language_from_string ("myn", -1);  /* Mayan [family] */
2889   case HB_TAG('N','A','H',' '):  /* Nahuatl */
2890     return hb_language_from_string ("nah", -1);  /* Nahuatl [family] */
2891   case HB_TAG('N','E','P',' '):  /* Nepali */
2892     return hb_language_from_string ("ne", -1);  /* Nepali [macrolanguage] */
2893   case HB_TAG('N','I','S',' '):  /* Nisi */
2894     return hb_language_from_string ("njz", -1);  /* Nyishi */
2895   case HB_TAG('N','O','R',' '):  /* Norwegian */
2896     return hb_language_from_string ("no", -1);  /* Norwegian [macrolanguage] */
2897   case HB_TAG('O','J','B',' '):  /* Ojibway */
2898     return hb_language_from_string ("oj", -1);  /* Ojibwa [macrolanguage] */
2899   case HB_TAG('O','R','O',' '):  /* Oromo */
2900     return hb_language_from_string ("om", -1);  /* Oromo [macrolanguage] */
2901   case HB_TAG('P','A','S',' '):  /* Pashto */
2902     return hb_language_from_string ("ps", -1);  /* Pashto [macrolanguage] */
2903   case HB_TAG('P','G','R',' '):  /* Polytonic Greek */
2904     return hb_language_from_string ("el-polyton", -1);  /* Modern Greek (1453-); Polytonic Greek */
2905   case HB_TAG('P','R','O',' '):  /* Provençal / Old Provençal */
2906     return hb_language_from_string ("pro", -1);  /* Old Provençal (to 1500) */
2907   case HB_TAG('Q','U','H',' '):  /* Quechua (Bolivia) */
2908     return hb_language_from_string ("quh", -1);  /* South Bolivian Quechua */
2909   case HB_TAG('Q','U','Z',' '):  /* Quechua */
2910     return hb_language_from_string ("qu", -1);  /* Quechua [macrolanguage] */
2911   case HB_TAG('Q','V','I',' '):  /* Quechua (Ecuador) */
2912     return hb_language_from_string ("qvi", -1);  /* Imbabura Highland Quichua */
2913   case HB_TAG('Q','W','H',' '):  /* Quechua (Peru) */
2914     return hb_language_from_string ("qwh", -1);  /* Huaylas Ancash Quechua */
2915   case HB_TAG('R','A','J',' '):  /* Rajasthani */
2916     return hb_language_from_string ("raj", -1);  /* Rajasthani [macrolanguage] */
2917   case HB_TAG('R','O','Y',' '):  /* Romany */
2918     return hb_language_from_string ("rom", -1);  /* Romany [macrolanguage] */
2919   case HB_TAG('S','Q','I',' '):  /* Albanian */
2920     return hb_language_from_string ("sq", -1);  /* Albanian [macrolanguage] */
2921   case HB_TAG('S','R','B',' '):  /* Serbian */
2922     return hb_language_from_string ("sr", -1);  /* Serbian */
2923   case HB_TAG('S','X','T',' '):  /* Sutu */
2924     return hb_language_from_string ("xnj", -1);  /* Ngoni (Tanzania) */
2925   case HB_TAG('S','Y','R',' '):  /* Syriac */
2926     return hb_language_from_string ("syr", -1);  /* Syriac [macrolanguage] */
2927   case HB_TAG('S','Y','R','E'):  /* Syriac, Estrangela script-variant (equivalent to ISO 15924 'Syre') */
2928     return hb_language_from_string ("und-Syre", -1);  /* Undetermined; Syriac (Estrangelo variant) */
2929   case HB_TAG('S','Y','R','J'):  /* Syriac, Western script-variant (equivalent to ISO 15924 'Syrj') */
2930     return hb_language_from_string ("und-Syrj", -1);  /* Undetermined; Syriac (Western variant) */
2931   case HB_TAG('S','Y','R','N'):  /* Syriac, Eastern script-variant (equivalent to ISO 15924 'Syrn') */
2932     return hb_language_from_string ("und-Syrn", -1);  /* Undetermined; Syriac (Eastern variant) */
2933   case HB_TAG('T','M','H',' '):  /* Tamashek */
2934     return hb_language_from_string ("tmh", -1);  /* Tamashek [macrolanguage] */
2935   case HB_TAG('T','O','D',' '):  /* Todo */
2936     return hb_language_from_string ("xwo", -1);  /* Written Oirat */
2937   case HB_TAG('Z','H','H',' '):  /* Chinese, Traditional, Hong Kong SAR */
2938     return hb_language_from_string ("zh-HK", -1);  /* Chinese [macrolanguage]; Hong Kong */
2939   case HB_TAG('Z','H','S',' '):  /* Chinese, Simplified */
2940     return hb_language_from_string ("zh-Hans", -1);  /* Chinese [macrolanguage]; Han (Simplified variant) */
2941   case HB_TAG('Z','H','T',' '):  /* Chinese, Traditional */
2942     return hb_language_from_string ("zh-Hant", -1);  /* Chinese [macrolanguage]; Han (Traditional variant) */
2943   case HB_TAG('Z','H','T','M'):  /* Chinese, Traditional, Macao SAR */
2944     return hb_language_from_string ("zh-MO", -1);  /* Chinese [macrolanguage]; Macao */
2945   case HB_TAG('Z','Z','A',' '):  /* Zazaki */
2946     return hb_language_from_string ("zza", -1);  /* Zazaki [macrolanguage] */
2947   default:
2948     return HB_LANGUAGE_INVALID;
2949   }
2950 }
2951 
2952 #endif /* HB_OT_TAG_TABLE_HH */
2953 
2954 /* == End of generated table == */
2955