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