blob: fc9bffc23f574b760cd576a9d46fa40ef9629034 [file] [log] [blame]
David Corbett2f1f9612017-12-08 22:45:52 -05001/* == 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 *
David Corbettf4559d22021-09-02 17:56:17 -04009 * <meta name="updated_at" content="2021-09-02 09:40 PM" />
10 * File-Date: 2021-08-06
David Corbett2f1f9612017-12-08 22:45:52 -050011 */
12
13#ifndef HB_OT_TAG_TABLE_HH
14#define HB_OT_TAG_TABLE_HH
15
16static const LangTag ot_languages[] = {
David Corbett1ce11b42019-04-16 10:04:45 -040017 {"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 */
David Corbettb2e7bb22020-10-27 19:50:33 -040022 {"aba", HB_TAG_NONE }, /* Abé != Abaza */
David Corbett1ce11b42019-04-16 10:04:45 -040023 {"abh", HB_TAG('A','R','A',' ')}, /* Tajiki Arabic -> Arabic */
24 {"abq", HB_TAG('A','B','A',' ')}, /* Abaza */
David Corbett17da41b2020-11-17 14:29:05 -050025 {"abs", HB_TAG('C','P','P',' ')}, /* Ambonese Malay -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -040026 {"abv", HB_TAG('A','R','A',' ')}, /* Baharna Arabic -> Arabic */
27 {"acf", HB_TAG('F','A','N',' ')}, /* Saint Lucian Creole French -> French Antillean */
David Corbett17da41b2020-11-17 14:29:05 -050028 {"acf", HB_TAG('C','P','P',' ')}, /* Saint Lucian Creole French -> Creoles */
David Corbett6745a602019-04-16 17:29:34 -040029/*{"ach", HB_TAG('A','C','H',' ')},*/ /* Acoli -> Acholi */
David Corbett1ce11b42019-04-16 10:04:45 -040030 {"acm", HB_TAG('A','R','A',' ')}, /* Mesopotamian Arabic -> Arabic */
31 {"acq", HB_TAG('A','R','A',' ')}, /* Ta'izzi-Adeni Arabic -> Arabic */
David Corbett17da41b2020-11-17 14:29:05 -050032 {"acr", HB_TAG('A','C','R',' ')}, /* Achi */
33 {"acr", HB_TAG('M','Y','N',' ')}, /* Achi -> Mayan */
David Corbett1ce11b42019-04-16 10:04:45 -040034 {"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 */
David Corbett6745a602019-04-16 17:29:34 -040040/*{"ady", HB_TAG('A','D','Y',' ')},*/ /* Adyghe */
David Corbett1ce11b42019-04-16 10:04:45 -040041 {"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 */
David Corbettb2e7bb22020-10-27 19:50:33 -040045 {"afk", HB_TAG_NONE }, /* Nanubae != Afrikaans */
David Corbett17da41b2020-11-17 14:29:05 -050046 {"afs", HB_TAG('C','P','P',' ')}, /* Afro-Seminole Creole -> Creoles */
47 {"agu", HB_TAG('M','Y','N',' ')}, /* Aguacateco -> Mayan */
David Corbettb2e7bb22020-10-27 19:50:33 -040048 {"agw", HB_TAG_NONE }, /* Kahua != Agaw */
David Corbett1ce11b42019-04-16 10:04:45 -040049 {"ahg", HB_TAG('A','G','W',' ')}, /* Qimant -> Agaw */
50 {"aht", HB_TAG('A','T','H',' ')}, /* Ahtena -> Athapaskan */
David Corbett17da41b2020-11-17 14:29:05 -050051 {"aig", HB_TAG('C','P','P',' ')}, /* Antigua and Barbuda Creole English -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -040052 {"aii", HB_TAG('S','W','A',' ')}, /* Assyrian Neo-Aramaic -> Swadaya Aramaic */
53 {"aii", HB_TAG('S','Y','R',' ')}, /* Assyrian Neo-Aramaic -> Syriac */
David Corbett6745a602019-04-16 17:29:34 -040054/*{"aio", HB_TAG('A','I','O',' ')},*/ /* Aiton */
David Corbett1ce11b42019-04-16 10:04:45 -040055 {"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] */
David Corbett17da41b2020-11-17 14:29:05 -050058 {"akb", HB_TAG('A','K','B',' ')}, /* Batak Angkola */
59 {"akb", HB_TAG('B','T','K',' ')}, /* Batak Angkola -> Batak */
David Corbett1ce11b42019-04-16 10:04:45 -040060 {"aln", HB_TAG('S','Q','I',' ')}, /* Gheg Albanian -> Albanian */
61 {"als", HB_TAG('S','Q','I',' ')}, /* Tosk Albanian -> Albanian */
David Corbett6745a602019-04-16 17:29:34 -040062/*{"alt", HB_TAG('A','L','T',' ')},*/ /* Southern Altai -> Altai */
David Corbett1ce11b42019-04-16 10:04:45 -040063 {"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 */
David Corbett6745a602019-04-16 17:29:34 -040067/*{"ang", HB_TAG('A','N','G',' ')},*/ /* Old English (ca. 450-1100) -> Anglo-Saxon */
David Corbett17da41b2020-11-17 14:29:05 -050068 {"aoa", HB_TAG('C','P','P',' ')}, /* Angolar -> Creoles */
69 {"apa", HB_TAG('A','T','H',' ')}, /* Apache [family] -> Athapaskan */
David Corbett1ce11b42019-04-16 10:04:45 -040070 {"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 */
David Corbettb2e7bb22020-10-27 19:50:33 -040079 {"ari", HB_TAG_NONE }, /* Arikara != Aari */
80 {"ark", HB_TAG_NONE }, /* Arikapú != Rakhine */
David Corbett1ce11b42019-04-16 10:04:45 -040081 {"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 */
David Corbettdec52002020-10-10 14:49:55 -040085 {"ary", HB_TAG('A','R','A',' ')}, /* Moroccan Arabic -> Arabic */
David Corbett1ce11b42019-04-16 10:04:45 -040086 {"arz", HB_TAG('A','R','A',' ')}, /* Egyptian Arabic -> Arabic */
87 {"as", HB_TAG('A','S','M',' ')}, /* Assamese */
David Corbett6745a602019-04-16 17:29:34 -040088/*{"ast", HB_TAG('A','S','T',' ')},*/ /* Asturian */
89/*{"ath", HB_TAG('A','T','H',' ')},*/ /* Athapascan [family] -> Athapaskan */
David Corbett1ce11b42019-04-16 10:04:45 -040090 {"atj", HB_TAG('R','C','R',' ')}, /* Atikamekw -> R-Cree */
91 {"atv", HB_TAG('A','L','T',' ')}, /* Northern Altai -> Altai */
David Corbett17da41b2020-11-17 14:29:05 -050092 {"auj", HB_TAG('B','B','R',' ')}, /* Awjilah -> Berber */
David Corbett1ce11b42019-04-16 10:04:45 -040093 {"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 */
David Corbettf4559d22021-09-02 17:56:17 -040096/*{"avn", HB_TAG('A','V','N',' ')},*/ /* Avatime */
David Corbett6745a602019-04-16 17:29:34 -040097/*{"awa", HB_TAG('A','W','A',' ')},*/ /* Awadhi */
David Corbett1ce11b42019-04-16 10:04:45 -040098 {"ay", HB_TAG('A','Y','M',' ')}, /* Aymara [macrolanguage] */
99 {"ayc", HB_TAG('A','Y','M',' ')}, /* Southern Aymara -> Aymara */
100 {"ayh", HB_TAG('A','R','A',' ')}, /* Hadrami Arabic -> Arabic */
101 {"ayl", HB_TAG('A','R','A',' ')}, /* Libyan Arabic -> Arabic */
102 {"ayn", HB_TAG('A','R','A',' ')}, /* Sanaani Arabic -> Arabic */
103 {"ayp", HB_TAG('A','R','A',' ')}, /* North Mesopotamian Arabic -> Arabic */
104 {"ayr", HB_TAG('A','Y','M',' ')}, /* Central Aymara -> Aymara */
105 {"az", HB_TAG('A','Z','E',' ')}, /* Azerbaijani [macrolanguage] */
David Corbettdec52002020-10-10 14:49:55 -0400106 {"azb", HB_TAG('A','Z','B',' ')}, /* South Azerbaijani -> Torki */
107 {"azb", HB_TAG('A','Z','E',' ')}, /* South Azerbaijani -> Azerbaijani */
David Corbett17da41b2020-11-17 14:29:05 -0500108 {"azd", HB_TAG('N','A','H',' ')}, /* Eastern Durango Nahuatl -> Nahuatl */
David Corbett1ce11b42019-04-16 10:04:45 -0400109 {"azj", HB_TAG('A','Z','E',' ')}, /* North Azerbaijani -> Azerbaijani */
David Corbett17da41b2020-11-17 14:29:05 -0500110 {"azn", HB_TAG('N','A','H',' ')}, /* Western Durango Nahuatl -> Nahuatl */
111 {"azz", HB_TAG('N','A','H',' ')}, /* Highland Puebla Nahuatl -> Nahuatl */
David Corbett1ce11b42019-04-16 10:04:45 -0400112 {"ba", HB_TAG('B','S','H',' ')}, /* Bashkir */
113 {"bad", HB_TAG('B','A','D','0')}, /* Banda [family] */
David Corbettb2e7bb22020-10-27 19:50:33 -0400114 {"bag", HB_TAG_NONE }, /* Tuki != Baghelkhandi */
David Corbett17da41b2020-11-17 14:29:05 -0500115 {"bah", HB_TAG('C','P','P',' ')}, /* Bahamas Creole English -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400116 {"bai", HB_TAG('B','M','L',' ')}, /* Bamileke [family] */
117 {"bal", HB_TAG('B','L','I',' ')}, /* Baluchi [macrolanguage] */
David Corbett6745a602019-04-16 17:29:34 -0400118/*{"ban", HB_TAG('B','A','N',' ')},*/ /* Balinese */
119/*{"bar", HB_TAG('B','A','R',' ')},*/ /* Bavarian */
David Corbettb2e7bb22020-10-27 19:50:33 -0400120 {"bau", HB_TAG_NONE }, /* Bada (Nigeria) != Baulé */
David Corbett17da41b2020-11-17 14:29:05 -0500121 {"bbc", HB_TAG('B','B','C',' ')}, /* Batak Toba */
122 {"bbc", HB_TAG('B','T','K',' ')}, /* Batak Toba -> Batak */
123 {"bbj", HB_TAG('B','M','L',' ')}, /* Ghomálá' -> Bamileke */
124 {"bbp", HB_TAG('B','A','D','0')}, /* West Central Banda -> Banda */
David Corbettb2e7bb22020-10-27 19:50:33 -0400125 {"bbr", HB_TAG_NONE }, /* Girawa != Berber */
David Corbett7a961692020-04-01 17:26:07 -0400126 {"bbz", HB_TAG('A','R','A',' ')}, /* Babalia Creole Arabic (retired code) -> Arabic */
David Corbett1ce11b42019-04-16 10:04:45 -0400127 {"bcc", HB_TAG('B','L','I',' ')}, /* Southern Balochi -> Baluchi */
David Corbettb2e7bb22020-10-27 19:50:33 -0400128 {"bch", HB_TAG_NONE }, /* Bariai != Bench */
David Corbett1ce11b42019-04-16 10:04:45 -0400129 {"bci", HB_TAG('B','A','U',' ')}, /* Baoulé -> Baulé */
130 {"bcl", HB_TAG('B','I','K',' ')}, /* Central Bikol -> Bikol */
131 {"bcq", HB_TAG('B','C','H',' ')}, /* Bench */
132 {"bcr", HB_TAG('A','T','H',' ')}, /* Babine -> Athapaskan */
David Corbett6745a602019-04-16 17:29:34 -0400133/*{"bdy", HB_TAG('B','D','Y',' ')},*/ /* Bandjalang */
David Corbett1ce11b42019-04-16 10:04:45 -0400134 {"be", HB_TAG('B','E','L',' ')}, /* Belarusian -> Belarussian */
135 {"bea", HB_TAG('A','T','H',' ')}, /* Beaver -> Athapaskan */
136 {"beb", HB_TAG('B','T','I',' ')}, /* Bebele -> Beti */
David Corbett6745a602019-04-16 17:29:34 -0400137/*{"bem", HB_TAG('B','E','M',' ')},*/ /* Bemba (Zambia) */
David Corbett1ce11b42019-04-16 10:04:45 -0400138 {"ber", HB_TAG('B','B','R',' ')}, /* Berber [family] */
David Corbett17da41b2020-11-17 14:29:05 -0500139 {"bew", HB_TAG('C','P','P',' ')}, /* Betawi -> Creoles */
140 {"bfl", HB_TAG('B','A','D','0')}, /* Banda-Ndélé -> Banda */
David Corbett1ce11b42019-04-16 10:04:45 -0400141 {"bfq", HB_TAG('B','A','D',' ')}, /* Badaga */
142 {"bft", HB_TAG('B','L','T',' ')}, /* Balti */
143 {"bfu", HB_TAG('L','A','H',' ')}, /* Gahri -> Lahuli */
144 {"bfy", HB_TAG('B','A','G',' ')}, /* Bagheli -> Baghelkhandi */
145 {"bg", HB_TAG('B','G','R',' ')}, /* Bulgarian */
David Corbett6745a602019-04-16 17:29:34 -0400146/*{"bgc", HB_TAG('B','G','C',' ')},*/ /* Haryanvi */
David Corbett1ce11b42019-04-16 10:04:45 -0400147 {"bgn", HB_TAG('B','L','I',' ')}, /* Western Balochi -> Baluchi */
148 {"bgp", HB_TAG('B','L','I',' ')}, /* Eastern Balochi -> Baluchi */
David Corbettdec52002020-10-10 14:49:55 -0400149 {"bgq", HB_TAG('B','G','Q',' ')}, /* Bagri */
150 {"bgq", HB_TAG('R','A','J',' ')}, /* Bagri -> Rajasthani */
David Corbett1ce11b42019-04-16 10:04:45 -0400151 {"bgr", HB_TAG('Q','I','N',' ')}, /* Bawm Chin -> Chin */
152 {"bhb", HB_TAG('B','H','I',' ')}, /* Bhili */
David Corbett6745a602019-04-16 17:29:34 -0400153/*{"bhi", HB_TAG('B','H','I',' ')},*/ /* Bhilali -> Bhili */
David Corbett1ce11b42019-04-16 10:04:45 -0400154 {"bhk", HB_TAG('B','I','K',' ')}, /* Albay Bicolano (retired code) -> Bikol */
David Corbett6745a602019-04-16 17:29:34 -0400155/*{"bho", HB_TAG('B','H','O',' ')},*/ /* Bhojpuri */
David Corbett1ce11b42019-04-16 10:04:45 -0400156 {"bhr", HB_TAG('M','L','G',' ')}, /* Bara Malagasy -> Malagasy */
157 {"bi", HB_TAG('B','I','S',' ')}, /* Bislama */
David Corbett17da41b2020-11-17 14:29:05 -0500158 {"bi", HB_TAG('C','P','P',' ')}, /* Bislama -> Creoles */
David Corbett6745a602019-04-16 17:29:34 -0400159/*{"bik", HB_TAG('B','I','K',' ')},*/ /* Bikol [macrolanguage] */
David Corbettb2e7bb22020-10-27 19:50:33 -0400160 {"bil", HB_TAG_NONE }, /* Bile != Bilen */
David Corbett1ce11b42019-04-16 10:04:45 -0400161 {"bin", HB_TAG('E','D','O',' ')}, /* Edo */
David Corbett17da41b2020-11-17 14:29:05 -0500162 {"biu", HB_TAG('Q','I','N',' ')}, /* Biete -> Chin */
David Corbett6745a602019-04-16 17:29:34 -0400163/*{"bjj", HB_TAG('B','J','J',' ')},*/ /* Kanauji */
David Corbett1ce11b42019-04-16 10:04:45 -0400164 {"bjn", HB_TAG('M','L','Y',' ')}, /* Banjar -> Malay */
David Corbett17da41b2020-11-17 14:29:05 -0500165 {"bjo", HB_TAG('B','A','D','0')}, /* Mid-Southern Banda -> Banda */
David Corbett1ce11b42019-04-16 10:04:45 -0400166 {"bjq", HB_TAG('M','L','G',' ')}, /* Southern Betsimisaraka Malagasy (retired code) -> Malagasy */
David Corbett17da41b2020-11-17 14:29:05 -0500167 {"bjs", HB_TAG('C','P','P',' ')}, /* Bajan -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400168 {"bjt", HB_TAG('B','L','N',' ')}, /* Balanta-Ganja -> Balante */
David Corbettb2e7bb22020-10-27 19:50:33 -0400169 {"bkf", HB_TAG_NONE }, /* Beeke != Blackfoot */
David Corbett17da41b2020-11-17 14:29:05 -0500170 {"bko", HB_TAG('B','M','L',' ')}, /* Kwa' -> Bamileke */
David Corbett1ce11b42019-04-16 10:04:45 -0400171 {"bla", HB_TAG('B','K','F',' ')}, /* Siksika -> Blackfoot */
172 {"ble", HB_TAG('B','L','N',' ')}, /* Balanta-Kentohe -> Balante */
David Corbette19de652021-03-08 13:12:47 -0500173 {"blg", HB_TAG('I','B','A',' ')}, /* Balau (retired code) -> Iban */
David Corbettb2e7bb22020-10-27 19:50:33 -0400174 {"bli", HB_TAG_NONE }, /* Bolia != Baluchi */
David Corbett17da41b2020-11-17 14:29:05 -0500175 {"blk", HB_TAG('B','L','K',' ')}, /* Pa’o Karen */
176 {"blk", HB_TAG('K','R','N',' ')}, /* Pa'o Karen -> Karen */
David Corbett1ce11b42019-04-16 10:04:45 -0400177 {"bln", HB_TAG('B','I','K',' ')}, /* Southern Catanduanes Bikol -> Bikol */
David Corbettb2e7bb22020-10-27 19:50:33 -0400178 {"blt", HB_TAG_NONE }, /* Tai Dam != Balti */
David Corbett1ce11b42019-04-16 10:04:45 -0400179 {"bm", HB_TAG('B','M','B',' ')}, /* Bambara (Bamanankan) */
David Corbettb2e7bb22020-10-27 19:50:33 -0400180 {"bmb", HB_TAG_NONE }, /* Bembe != Bambara (Bamanankan) */
181 {"bml", HB_TAG_NONE }, /* Bomboli != Bamileke */
David Corbett1ce11b42019-04-16 10:04:45 -0400182 {"bmm", HB_TAG('M','L','G',' ')}, /* Northern Betsimisaraka Malagasy -> Malagasy */
183 {"bn", HB_TAG('B','E','N',' ')}, /* Bengali */
184 {"bo", HB_TAG('T','I','B',' ')}, /* Tibetan */
David Corbett17da41b2020-11-17 14:29:05 -0500185 {"bpd", HB_TAG('B','A','D','0')}, /* Banda-Banda -> Banda */
186 {"bpl", HB_TAG('C','P','P',' ')}, /* Broome Pearling Lugger Pidgin -> Creoles */
187 {"bpq", HB_TAG('C','P','P',' ')}, /* Banda Malay -> Creoles */
David Corbett6745a602019-04-16 17:29:34 -0400188/*{"bpy", HB_TAG('B','P','Y',' ')},*/ /* Bishnupriya -> Bishnupriya Manipuri */
David Corbett1ce11b42019-04-16 10:04:45 -0400189 {"bqi", HB_TAG('L','R','C',' ')}, /* Bakhtiari -> Luri */
David Corbett17da41b2020-11-17 14:29:05 -0500190 {"bqk", HB_TAG('B','A','D','0')}, /* Banda-Mbrès -> Banda */
David Corbett1ce11b42019-04-16 10:04:45 -0400191 {"br", HB_TAG('B','R','E',' ')}, /* Breton */
192 {"bra", HB_TAG('B','R','I',' ')}, /* Braj -> Braj Bhasha */
David Corbett17da41b2020-11-17 14:29:05 -0500193 {"brc", HB_TAG('C','P','P',' ')}, /* Berbice Creole Dutch -> Creoles */
David Corbett6745a602019-04-16 17:29:34 -0400194/*{"brh", HB_TAG('B','R','H',' ')},*/ /* Brahui */
David Corbettb2e7bb22020-10-27 19:50:33 -0400195 {"bri", HB_TAG_NONE }, /* Mokpwe != Braj Bhasha */
196 {"brm", HB_TAG_NONE }, /* Barambu != Burmese */
David Corbett6745a602019-04-16 17:29:34 -0400197/*{"brx", HB_TAG('B','R','X',' ')},*/ /* Bodo (India) */
David Corbett1ce11b42019-04-16 10:04:45 -0400198 {"bs", HB_TAG('B','O','S',' ')}, /* Bosnian */
David Corbettb2e7bb22020-10-27 19:50:33 -0400199 {"bsh", HB_TAG_NONE }, /* Kati != Bashkir */
David Corbett6745a602019-04-16 17:29:34 -0400200/*{"bsk", HB_TAG('B','S','K',' ')},*/ /* Burushaski */
David Corbett1ce11b42019-04-16 10:04:45 -0400201 {"btb", HB_TAG('B','T','I',' ')}, /* Beti (Cameroon) (retired code) */
David Corbett17da41b2020-11-17 14:29:05 -0500202 {"btd", HB_TAG('B','T','D',' ')}, /* Batak Dairi (Pakpak) */
203 {"btd", HB_TAG('B','T','K',' ')}, /* Batak Dairi -> Batak */
David Corbettb2e7bb22020-10-27 19:50:33 -0400204 {"bti", HB_TAG_NONE }, /* Burate != Beti */
David Corbett1ce11b42019-04-16 10:04:45 -0400205 {"btj", HB_TAG('M','L','Y',' ')}, /* Bacanese Malay -> Malay */
David Corbett17da41b2020-11-17 14:29:05 -0500206/*{"btk", HB_TAG('B','T','K',' ')},*/ /* Batak [family] */
207 {"btm", HB_TAG('B','T','M',' ')}, /* Batak Mandailing */
208 {"btm", HB_TAG('B','T','K',' ')}, /* Batak Mandailing -> Batak */
David Corbett1ce11b42019-04-16 10:04:45 -0400209 {"bto", HB_TAG('B','I','K',' ')}, /* Rinconada Bikol -> Bikol */
David Corbett17da41b2020-11-17 14:29:05 -0500210 {"bts", HB_TAG('B','T','S',' ')}, /* Batak Simalungun */
211 {"bts", HB_TAG('B','T','K',' ')}, /* Batak Simalungun -> Batak */
212 {"btx", HB_TAG('B','T','X',' ')}, /* Batak Karo */
213 {"btx", HB_TAG('B','T','K',' ')}, /* Batak Karo -> Batak */
214 {"btz", HB_TAG('B','T','Z',' ')}, /* Batak Alas-Kluet */
215 {"btz", HB_TAG('B','T','K',' ')}, /* Batak Alas-Kluet -> Batak */
David Corbett6745a602019-04-16 17:29:34 -0400216/*{"bug", HB_TAG('B','U','G',' ')},*/ /* Buginese -> Bugis */
David Corbett1ce11b42019-04-16 10:04:45 -0400217 {"bum", HB_TAG('B','T','I',' ')}, /* Bulu (Cameroon) -> Beti */
218 {"bve", HB_TAG('M','L','Y',' ')}, /* Berau Malay -> Malay */
219 {"bvu", HB_TAG('M','L','Y',' ')}, /* Bukit Malay -> Malay */
David Corbett17da41b2020-11-17 14:29:05 -0500220 {"bwe", HB_TAG('K','R','N',' ')}, /* Bwe Karen -> Karen */
David Corbett1ce11b42019-04-16 10:04:45 -0400221 {"bxk", HB_TAG('L','U','H',' ')}, /* Bukusu -> Luyia */
David Corbett17da41b2020-11-17 14:29:05 -0500222 {"bxo", HB_TAG('C','P','P',' ')}, /* Barikanchi -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400223 {"bxp", HB_TAG('B','T','I',' ')}, /* Bebil -> Beti */
224 {"bxr", HB_TAG('R','B','U',' ')}, /* Russia Buriat -> Russian Buriat */
225 {"byn", HB_TAG('B','I','L',' ')}, /* Bilin -> Bilen */
David Corbett17da41b2020-11-17 14:29:05 -0500226 {"byv", HB_TAG('B','Y','V',' ')}, /* Medumba */
227 {"byv", HB_TAG('B','M','L',' ')}, /* Medumba -> Bamileke */
David Corbett1ce11b42019-04-16 10:04:45 -0400228 {"bzc", HB_TAG('M','L','G',' ')}, /* Southern Betsimisaraka Malagasy -> Malagasy */
David Corbett17da41b2020-11-17 14:29:05 -0500229 {"bzj", HB_TAG('C','P','P',' ')}, /* Belize Kriol English -> Creoles */
230 {"bzk", HB_TAG('C','P','P',' ')}, /* Nicaragua Creole English -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400231 {"ca", HB_TAG('C','A','T',' ')}, /* Catalan */
David Corbett17da41b2020-11-17 14:29:05 -0500232 {"caa", HB_TAG('M','Y','N',' ')}, /* Chortí -> Mayan */
233 {"cac", HB_TAG('M','Y','N',' ')}, /* Chuj -> Mayan */
David Corbett1ce11b42019-04-16 10:04:45 -0400234 {"caf", HB_TAG('C','R','R',' ')}, /* Southern Carrier -> Carrier */
235 {"caf", HB_TAG('A','T','H',' ')}, /* Southern Carrier -> Athapaskan */
David Corbett17da41b2020-11-17 14:29:05 -0500236 {"cak", HB_TAG('C','A','K',' ')}, /* Kaqchikel */
237 {"cak", HB_TAG('M','Y','N',' ')}, /* Kaqchikel -> Mayan */
238 {"cbk", HB_TAG('C','B','K',' ')}, /* Chavacano -> Zamboanga Chavacano */
239 {"cbk", HB_TAG('C','P','P',' ')}, /* Chavacano -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400240 {"cbl", HB_TAG('Q','I','N',' ')}, /* Bualkhaw Chin -> Chin */
David Corbett17da41b2020-11-17 14:29:05 -0500241 {"ccl", HB_TAG('C','P','P',' ')}, /* Cutchi-Swahili -> Creoles */
242 {"ccm", HB_TAG('C','P','P',' ')}, /* Malaccan Creole Malay -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400243 {"cco", HB_TAG('C','C','H','N')}, /* Comaltepec Chinantec -> Chinantec */
244 {"ccq", HB_TAG('A','R','K',' ')}, /* Chaungtha (retired code) -> Rakhine */
David Corbett17da41b2020-11-17 14:29:05 -0500245 {"cdo", HB_TAG('Z','H','S',' ')}, /* Min Dong Chinese -> Chinese, Simplified */
David Corbett1ce11b42019-04-16 10:04:45 -0400246 {"ce", HB_TAG('C','H','E',' ')}, /* Chechen */
David Corbett6745a602019-04-16 17:29:34 -0400247/*{"ceb", HB_TAG('C','E','B',' ')},*/ /* Cebuano */
David Corbett17da41b2020-11-17 14:29:05 -0500248 {"cek", HB_TAG('Q','I','N',' ')}, /* Eastern Khumi Chin -> Chin */
249 {"cey", HB_TAG('Q','I','N',' ')}, /* Ekai Chin -> Chin */
David Corbett1ce11b42019-04-16 10:04:45 -0400250 {"cfm", HB_TAG('H','A','L',' ')}, /* Halam (Falam Chin) */
David Corbettdec52002020-10-10 14:49:55 -0400251 {"cfm", HB_TAG('Q','I','N',' ')}, /* Falam Chin -> Chin */
David Corbett6745a602019-04-16 17:29:34 -0400252/*{"cgg", HB_TAG('C','G','G',' ')},*/ /* Chiga */
David Corbett1ce11b42019-04-16 10:04:45 -0400253 {"ch", HB_TAG('C','H','A',' ')}, /* Chamorro */
David Corbett17da41b2020-11-17 14:29:05 -0500254 {"chf", HB_TAG('M','Y','N',' ')}, /* Tabasco Chontal -> Mayan */
David Corbettb2e7bb22020-10-27 19:50:33 -0400255 {"chg", HB_TAG_NONE }, /* Chagatai != Chaha Gurage */
256 {"chh", HB_TAG_NONE }, /* Chinook != Chattisgarhi */
David Corbett1ce11b42019-04-16 10:04:45 -0400257 {"chj", HB_TAG('C','C','H','N')}, /* Ojitlán Chinantec -> Chinantec */
258 {"chk", HB_TAG('C','H','K','0')}, /* Chuukese */
David Corbett17da41b2020-11-17 14:29:05 -0500259 {"chn", HB_TAG('C','P','P',' ')}, /* Chinook jargon -> Creoles */
David Corbett6745a602019-04-16 17:29:34 -0400260/*{"cho", HB_TAG('C','H','O',' ')},*/ /* Choctaw */
David Corbett1ce11b42019-04-16 10:04:45 -0400261 {"chp", HB_TAG('C','H','P',' ')}, /* Chipewyan */
262 {"chp", HB_TAG('S','A','Y',' ')}, /* Chipewyan -> Sayisi */
263 {"chp", HB_TAG('A','T','H',' ')}, /* Chipewyan -> Athapaskan */
264 {"chq", HB_TAG('C','C','H','N')}, /* Quiotepec Chinantec -> Chinantec */
David Corbett6745a602019-04-16 17:29:34 -0400265/*{"chr", HB_TAG('C','H','R',' ')},*/ /* Cherokee */
266/*{"chy", HB_TAG('C','H','Y',' ')},*/ /* Cheyenne */
David Corbett1ce11b42019-04-16 10:04:45 -0400267 {"chz", HB_TAG('C','C','H','N')}, /* Ozumacín Chinantec -> Chinantec */
268 {"ciw", HB_TAG('O','J','B',' ')}, /* Chippewa -> Ojibway */
David Corbett6745a602019-04-16 17:29:34 -0400269/*{"cja", HB_TAG('C','J','A',' ')},*/ /* Western Cham */
270/*{"cjm", HB_TAG('C','J','M',' ')},*/ /* Eastern Cham */
David Corbett17da41b2020-11-17 14:29:05 -0500271 {"cjy", HB_TAG('Z','H','S',' ')}, /* Jinyu Chinese -> Chinese, Simplified */
David Corbett1ce11b42019-04-16 10:04:45 -0400272 {"cka", HB_TAG('Q','I','N',' ')}, /* Khumi Awa Chin (retired code) -> Chin */
273 {"ckb", HB_TAG('K','U','R',' ')}, /* Central Kurdish -> Kurdish */
David Corbett17da41b2020-11-17 14:29:05 -0500274 {"ckn", HB_TAG('Q','I','N',' ')}, /* Kaang Chin -> Chin */
275 {"cks", HB_TAG('C','P','P',' ')}, /* Tayo -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400276 {"ckt", HB_TAG('C','H','K',' ')}, /* Chukot -> Chukchi */
David Corbett17da41b2020-11-17 14:29:05 -0500277 {"ckz", HB_TAG('M','Y','N',' ')}, /* Cakchiquel-Quiché Mixed Language -> Mayan */
David Corbett1ce11b42019-04-16 10:04:45 -0400278 {"clc", HB_TAG('A','T','H',' ')}, /* Chilcotin -> Athapaskan */
279 {"cld", HB_TAG('S','Y','R',' ')}, /* Chaldean Neo-Aramaic -> Syriac */
280 {"cle", HB_TAG('C','C','H','N')}, /* Lealao Chinantec -> Chinantec */
David Corbett17da41b2020-11-17 14:29:05 -0500281 {"clj", HB_TAG('Q','I','N',' ')}, /* Laitu Chin -> Chin */
282 {"clt", HB_TAG('Q','I','N',' ')}, /* Lautu Chin -> Chin */
283 {"cmn", HB_TAG('Z','H','S',' ')}, /* Mandarin Chinese -> Chinese, Simplified */
David Corbett1ce11b42019-04-16 10:04:45 -0400284 {"cmr", HB_TAG('Q','I','N',' ')}, /* Mro-Khimi Chin -> Chin */
285 {"cnb", HB_TAG('Q','I','N',' ')}, /* Chinbon Chin -> Chin */
286 {"cnh", HB_TAG('Q','I','N',' ')}, /* Hakha Chin -> Chin */
287 {"cnk", HB_TAG('Q','I','N',' ')}, /* Khumi Chin -> Chin */
288 {"cnl", HB_TAG('C','C','H','N')}, /* Lalana Chinantec -> Chinantec */
David Corbett17da41b2020-11-17 14:29:05 -0500289 {"cnp", HB_TAG('Z','H','S',' ')}, /* Northern Ping Chinese -> Chinese, Simplified */
290 {"cnr", HB_TAG('S','R','B',' ')}, /* Montenegrin -> Serbian */
David Corbett1ce11b42019-04-16 10:04:45 -0400291 {"cnt", HB_TAG('C','C','H','N')}, /* Tepetotutla Chinantec -> Chinantec */
David Corbett17da41b2020-11-17 14:29:05 -0500292 {"cnu", HB_TAG('B','B','R',' ')}, /* Chenoua -> Berber */
David Corbett1ce11b42019-04-16 10:04:45 -0400293 {"cnw", HB_TAG('Q','I','N',' ')}, /* Ngawn Chin -> Chin */
294 {"co", HB_TAG('C','O','S',' ')}, /* Corsican */
295 {"coa", HB_TAG('M','L','Y',' ')}, /* Cocos Islands Malay -> Malay */
David Corbett17da41b2020-11-17 14:29:05 -0500296 {"cob", HB_TAG('M','Y','N',' ')}, /* Chicomuceltec -> Mayan */
David Corbett6745a602019-04-16 17:29:34 -0400297/*{"cop", HB_TAG('C','O','P',' ')},*/ /* Coptic */
David Corbett1ce11b42019-04-16 10:04:45 -0400298 {"coq", HB_TAG('A','T','H',' ')}, /* Coquille -> Athapaskan */
299 {"cpa", HB_TAG('C','C','H','N')}, /* Palantla Chinantec -> Chinantec */
300 {"cpe", HB_TAG('C','P','P',' ')}, /* English-based creoles and pidgins [family] -> Creoles */
301 {"cpf", HB_TAG('C','P','P',' ')}, /* French-based creoles and pidgins [family] -> Creoles */
David Corbett17da41b2020-11-17 14:29:05 -0500302 {"cpi", HB_TAG('C','P','P',' ')}, /* Chinese Pidgin English -> Creoles */
David Corbett6745a602019-04-16 17:29:34 -0400303/*{"cpp", HB_TAG('C','P','P',' ')},*/ /* Portuguese-based creoles and pidgins [family] -> Creoles */
David Corbett17da41b2020-11-17 14:29:05 -0500304 {"cpx", HB_TAG('Z','H','S',' ')}, /* Pu-Xian Chinese -> Chinese, Simplified */
David Corbett1ce11b42019-04-16 10:04:45 -0400305 {"cqd", HB_TAG('H','M','N',' ')}, /* Chuanqiandian Cluster Miao -> Hmong */
306 {"cqu", HB_TAG('Q','U','H',' ')}, /* Chilean Quechua (retired code) -> Quechua (Bolivia) */
David Corbettdec52002020-10-10 14:49:55 -0400307 {"cqu", HB_TAG('Q','U','Z',' ')}, /* Chilean Quechua (retired code) -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -0400308 {"cr", HB_TAG('C','R','E',' ')}, /* Cree [macrolanguage] */
David Corbett1ce11b42019-04-16 10:04:45 -0400309 {"crh", HB_TAG('C','R','T',' ')}, /* Crimean Tatar */
David Corbett17da41b2020-11-17 14:29:05 -0500310 {"cri", HB_TAG('C','P','P',' ')}, /* Sãotomense -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400311 {"crj", HB_TAG('E','C','R',' ')}, /* Southern East Cree -> Eastern Cree */
David Corbettdec52002020-10-10 14:49:55 -0400312 {"crj", HB_TAG('Y','C','R',' ')}, /* Southern East Cree -> Y-Cree */
David Corbett17da41b2020-11-17 14:29:05 -0500313 {"crj", HB_TAG('C','R','E',' ')}, /* Southern East Cree -> Cree */
David Corbett1ce11b42019-04-16 10:04:45 -0400314 {"crk", HB_TAG('W','C','R',' ')}, /* Plains Cree -> West-Cree */
David Corbettdec52002020-10-10 14:49:55 -0400315 {"crk", HB_TAG('Y','C','R',' ')}, /* Plains Cree -> Y-Cree */
David Corbett17da41b2020-11-17 14:29:05 -0500316 {"crk", HB_TAG('C','R','E',' ')}, /* Plains Cree -> Cree */
David Corbett1ce11b42019-04-16 10:04:45 -0400317 {"crl", HB_TAG('E','C','R',' ')}, /* Northern East Cree -> Eastern Cree */
David Corbettdec52002020-10-10 14:49:55 -0400318 {"crl", HB_TAG('Y','C','R',' ')}, /* Northern East Cree -> Y-Cree */
David Corbett17da41b2020-11-17 14:29:05 -0500319 {"crl", HB_TAG('C','R','E',' ')}, /* Northern East Cree -> Cree */
David Corbett1ce11b42019-04-16 10:04:45 -0400320 {"crm", HB_TAG('M','C','R',' ')}, /* Moose Cree */
321 {"crm", HB_TAG('L','C','R',' ')}, /* Moose Cree -> L-Cree */
David Corbettdec52002020-10-10 14:49:55 -0400322 {"crm", HB_TAG('C','R','E',' ')}, /* Moose Cree -> Cree */
David Corbett1ce11b42019-04-16 10:04:45 -0400323 {"crp", HB_TAG('C','P','P',' ')}, /* Creoles and pidgins [family] -> Creoles */
David Corbettb2e7bb22020-10-27 19:50:33 -0400324 {"crr", HB_TAG_NONE }, /* Carolina Algonquian != Carrier */
David Corbett17da41b2020-11-17 14:29:05 -0500325 {"crs", HB_TAG('C','P','P',' ')}, /* Seselwa Creole French -> Creoles */
David Corbettb2e7bb22020-10-27 19:50:33 -0400326 {"crt", HB_TAG_NONE }, /* Iyojwa'ja Chorote != Crimean Tatar */
David Corbett1ce11b42019-04-16 10:04:45 -0400327 {"crx", HB_TAG('C','R','R',' ')}, /* Carrier */
328 {"crx", HB_TAG('A','T','H',' ')}, /* Carrier -> Athapaskan */
329 {"cs", HB_TAG('C','S','Y',' ')}, /* Czech */
330 {"csa", HB_TAG('C','C','H','N')}, /* Chiltepec Chinantec -> Chinantec */
David Corbett6745a602019-04-16 17:29:34 -0400331/*{"csb", HB_TAG('C','S','B',' ')},*/ /* Kashubian */
David Corbett1ce11b42019-04-16 10:04:45 -0400332 {"csh", HB_TAG('Q','I','N',' ')}, /* Asho Chin -> Chin */
David Corbett17da41b2020-11-17 14:29:05 -0500333 {"csj", HB_TAG('Q','I','N',' ')}, /* Songlai Chin -> Chin */
David Corbettb2e7bb22020-10-27 19:50:33 -0400334 {"csl", HB_TAG_NONE }, /* Chinese Sign Language != Church Slavonic */
David Corbett1ce11b42019-04-16 10:04:45 -0400335 {"cso", HB_TAG('C','C','H','N')}, /* Sochiapam Chinantec -> Chinantec */
David Corbett17da41b2020-11-17 14:29:05 -0500336 {"csp", HB_TAG('Z','H','S',' ')}, /* Southern Ping Chinese -> Chinese, Simplified */
337 {"csv", HB_TAG('Q','I','N',' ')}, /* Sumtu Chin -> Chin */
David Corbett1ce11b42019-04-16 10:04:45 -0400338 {"csw", HB_TAG('N','C','R',' ')}, /* Swampy Cree -> N-Cree */
339 {"csw", HB_TAG('N','H','C',' ')}, /* Swampy Cree -> Norway House Cree */
David Corbettdec52002020-10-10 14:49:55 -0400340 {"csw", HB_TAG('C','R','E',' ')}, /* Swampy Cree -> Cree */
David Corbett1ce11b42019-04-16 10:04:45 -0400341 {"csy", HB_TAG('Q','I','N',' ')}, /* Siyin Chin -> Chin */
342 {"ctc", HB_TAG('A','T','H',' ')}, /* Chetco -> Athapaskan */
343 {"ctd", HB_TAG('Q','I','N',' ')}, /* Tedim Chin -> Chin */
344 {"cte", HB_TAG('C','C','H','N')}, /* Tepinapa Chinantec -> Chinantec */
David Corbett6745a602019-04-16 17:29:34 -0400345/*{"ctg", HB_TAG('C','T','G',' ')},*/ /* Chittagonian */
David Corbett17da41b2020-11-17 14:29:05 -0500346 {"cth", HB_TAG('Q','I','N',' ')}, /* Thaiphum Chin -> Chin */
David Corbett1ce11b42019-04-16 10:04:45 -0400347 {"ctl", HB_TAG('C','C','H','N')}, /* Tlacoatzintepec Chinantec -> Chinantec */
348 {"cts", HB_TAG('B','I','K',' ')}, /* Northern Catanduanes Bikol -> Bikol */
David Corbettf4559d22021-09-02 17:56:17 -0400349/*{"ctt", HB_TAG('C','T','T',' ')},*/ /* Wayanad Chetti */
David Corbett17da41b2020-11-17 14:29:05 -0500350 {"ctu", HB_TAG('M','Y','N',' ')}, /* Chol -> Mayan */
David Corbett1ce11b42019-04-16 10:04:45 -0400351 {"cu", HB_TAG('C','S','L',' ')}, /* Church Slavonic */
352 {"cuc", HB_TAG('C','C','H','N')}, /* Usila Chinantec -> Chinantec */
David Corbett6745a602019-04-16 17:29:34 -0400353/*{"cuk", HB_TAG('C','U','K',' ')},*/ /* San Blas Kuna */
David Corbett1ce11b42019-04-16 10:04:45 -0400354 {"cv", HB_TAG('C','H','U',' ')}, /* Chuvash */
355 {"cvn", HB_TAG('C','C','H','N')}, /* Valle Nacional Chinantec -> Chinantec */
356 {"cwd", HB_TAG('D','C','R',' ')}, /* Woods Cree */
357 {"cwd", HB_TAG('T','C','R',' ')}, /* Woods Cree -> TH-Cree */
David Corbettdec52002020-10-10 14:49:55 -0400358 {"cwd", HB_TAG('C','R','E',' ')}, /* Woods Cree -> Cree */
David Corbett1ce11b42019-04-16 10:04:45 -0400359 {"cy", HB_TAG('W','E','L',' ')}, /* Welsh */
David Corbett17da41b2020-11-17 14:29:05 -0500360 {"czh", HB_TAG('Z','H','S',' ')}, /* Huizhou Chinese -> Chinese, Simplified */
361 {"czo", HB_TAG('Z','H','S',' ')}, /* Min Zhong Chinese -> Chinese, Simplified */
David Corbett1ce11b42019-04-16 10:04:45 -0400362 {"czt", HB_TAG('Q','I','N',' ')}, /* Zotung Chin -> Chin */
363 {"da", HB_TAG('D','A','N',' ')}, /* Danish */
David Corbette19de652021-03-08 13:12:47 -0500364/*{"dag", HB_TAG('D','A','G',' ')},*/ /* Dagbani */
David Corbett1ce11b42019-04-16 10:04:45 -0400365 {"dao", HB_TAG('Q','I','N',' ')}, /* Daai Chin -> Chin */
366 {"dap", HB_TAG('N','I','S',' ')}, /* Nisi (India) (retired code) */
David Corbett6745a602019-04-16 17:29:34 -0400367/*{"dar", HB_TAG('D','A','R',' ')},*/ /* Dargwa */
368/*{"dax", HB_TAG('D','A','X',' ')},*/ /* Dayi */
David Corbett17da41b2020-11-17 14:29:05 -0500369 {"dcr", HB_TAG('C','P','P',' ')}, /* Negerhollands -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400370 {"de", HB_TAG('D','E','U',' ')}, /* German */
371 {"den", HB_TAG('S','L','A',' ')}, /* Slave (Athapascan) [macrolanguage] -> Slavey */
372 {"den", HB_TAG('A','T','H',' ')}, /* Slave (Athapascan) [macrolanguage] -> Athapaskan */
David Corbett17da41b2020-11-17 14:29:05 -0500373 {"dep", HB_TAG('C','P','P',' ')}, /* Pidgin Delaware -> Creoles */
374 {"dgo", HB_TAG('D','G','O',' ')}, /* Dogri (individual language) */
375 {"dgo", HB_TAG('D','G','R',' ')}, /* Dogri (macrolanguage) */
David Corbett1ce11b42019-04-16 10:04:45 -0400376 {"dgr", HB_TAG('A','T','H',' ')}, /* Dogrib -> Athapaskan */
377 {"dhd", HB_TAG('M','A','W',' ')}, /* Dhundari -> Marwari */
David Corbett6745a602019-04-16 17:29:34 -0400378/*{"dhg", HB_TAG('D','H','G',' ')},*/ /* Dhangu */
David Corbettb2e7bb22020-10-27 19:50:33 -0400379 {"dhv", HB_TAG_NONE }, /* Dehu != Divehi (Dhivehi, Maldivian) (deprecated) */
David Corbett1ce11b42019-04-16 10:04:45 -0400380 {"dib", HB_TAG('D','N','K',' ')}, /* South Central Dinka -> Dinka */
381 {"dik", HB_TAG('D','N','K',' ')}, /* Southwestern Dinka -> Dinka */
382 {"din", HB_TAG('D','N','K',' ')}, /* Dinka [macrolanguage] */
383 {"dip", HB_TAG('D','N','K',' ')}, /* Northeastern Dinka -> Dinka */
David Corbettdec52002020-10-10 14:49:55 -0400384 {"diq", HB_TAG('D','I','Q',' ')}, /* Dimli */
385 {"diq", HB_TAG('Z','Z','A',' ')}, /* Dimli -> Zazaki */
David Corbett1ce11b42019-04-16 10:04:45 -0400386 {"diw", HB_TAG('D','N','K',' ')}, /* Northwestern Dinka -> Dinka */
387 {"dje", HB_TAG('D','J','R',' ')}, /* Zarma */
David Corbett17da41b2020-11-17 14:29:05 -0500388 {"djk", HB_TAG('C','P','P',' ')}, /* Eastern Maroon Creole -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400389 {"djr", HB_TAG('D','J','R','0')}, /* Djambarrpuyngu */
390 {"dks", HB_TAG('D','N','K',' ')}, /* Southeastern Dinka -> Dinka */
391 {"dng", HB_TAG('D','U','N',' ')}, /* Dungan */
David Corbett6745a602019-04-16 17:29:34 -0400392/*{"dnj", HB_TAG('D','N','J',' ')},*/ /* Dan */
David Corbettb2e7bb22020-10-27 19:50:33 -0400393 {"dnk", HB_TAG_NONE }, /* Dengka != Dinka */
David Corbett17da41b2020-11-17 14:29:05 -0500394 {"doi", HB_TAG('D','G','R',' ')}, /* Dogri (macrolanguage) [macrolanguage] */
David Corbett1ce11b42019-04-16 10:04:45 -0400395 {"drh", HB_TAG('M','N','G',' ')}, /* Darkhat (retired code) -> Mongolian */
David Corbettb2e7bb22020-10-27 19:50:33 -0400396 {"dri", HB_TAG_NONE }, /* C'Lela != Dari */
David Corbett1ce11b42019-04-16 10:04:45 -0400397 {"drw", HB_TAG('D','R','I',' ')}, /* Darwazi (retired code) -> Dari */
David Corbettdec52002020-10-10 14:49:55 -0400398 {"drw", HB_TAG('F','A','R',' ')}, /* Darwazi (retired code) -> Persian */
David Corbett1ce11b42019-04-16 10:04:45 -0400399 {"dsb", HB_TAG('L','S','B',' ')}, /* Lower Sorbian */
400 {"dty", HB_TAG('N','E','P',' ')}, /* Dotyali -> Nepali */
David Corbett6745a602019-04-16 17:29:34 -0400401/*{"duj", HB_TAG('D','U','J',' ')},*/ /* Dhuwal (retired code) */
David Corbettb2e7bb22020-10-27 19:50:33 -0400402 {"dun", HB_TAG_NONE }, /* Dusun Deyah != Dungan */
David Corbett1ce11b42019-04-16 10:04:45 -0400403 {"dup", HB_TAG('M','L','Y',' ')}, /* Duano -> Malay */
404 {"dv", HB_TAG('D','I','V',' ')}, /* Divehi (Dhivehi, Maldivian) */
405 {"dv", HB_TAG('D','H','V',' ')}, /* Divehi (Dhivehi, Maldivian) (deprecated) */
David Corbett7a961692020-04-01 17:26:07 -0400406 {"dwk", HB_TAG('K','U','I',' ')}, /* Dawik Kui -> Kui */
David Corbett1ce11b42019-04-16 10:04:45 -0400407 {"dwu", HB_TAG('D','U','J',' ')}, /* Dhuwal */
408 {"dwy", HB_TAG('D','U','J',' ')}, /* Dhuwaya -> Dhuwal */
409 {"dyu", HB_TAG('J','U','L',' ')}, /* Dyula -> Jula */
410 {"dz", HB_TAG('D','Z','N',' ')}, /* Dzongkha */
David Corbettb2e7bb22020-10-27 19:50:33 -0400411 {"dzn", HB_TAG_NONE }, /* Dzando != Dzongkha */
412 {"ecr", HB_TAG_NONE }, /* Eteocretan != Eastern Cree */
David Corbett1ce11b42019-04-16 10:04:45 -0400413 {"ee", HB_TAG('E','W','E',' ')}, /* Ewe */
David Corbett6745a602019-04-16 17:29:34 -0400414/*{"efi", HB_TAG('E','F','I',' ')},*/ /* Efik */
David Corbett1ce11b42019-04-16 10:04:45 -0400415 {"ekk", HB_TAG('E','T','I',' ')}, /* Standard Estonian -> Estonian */
David Corbett17da41b2020-11-17 14:29:05 -0500416 {"eky", HB_TAG('K','R','N',' ')}, /* Eastern Kayah -> Karen */
David Corbett1ce11b42019-04-16 10:04:45 -0400417 {"el", HB_TAG('E','L','L',' ')}, /* Modern Greek (1453-) -> Greek */
418 {"emk", HB_TAG('E','M','K',' ')}, /* Eastern Maninkakan */
419 {"emk", HB_TAG('M','N','K',' ')}, /* Eastern Maninkakan -> Maninka */
David Corbett17da41b2020-11-17 14:29:05 -0500420 {"emy", HB_TAG('M','Y','N',' ')}, /* Epigraphic Mayan -> Mayan */
David Corbett1ce11b42019-04-16 10:04:45 -0400421 {"en", HB_TAG('E','N','G',' ')}, /* English */
422 {"enb", HB_TAG('K','A','L',' ')}, /* Markweeta -> Kalenjin */
David Corbett17da41b2020-11-17 14:29:05 -0500423 {"enf", HB_TAG('F','N','E',' ')}, /* Forest Enets */
424 {"enh", HB_TAG('T','N','E',' ')}, /* Tundra Enets */
David Corbett1ce11b42019-04-16 10:04:45 -0400425 {"eo", HB_TAG('N','T','O',' ')}, /* Esperanto */
426 {"es", HB_TAG('E','S','P',' ')}, /* Spanish */
427 {"esg", HB_TAG('G','O','N',' ')}, /* Aheri Gondi -> Gondi */
428 {"esi", HB_TAG('I','P','K',' ')}, /* North Alaskan Inupiatun -> Inupiat */
429 {"esk", HB_TAG('I','P','K',' ')}, /* Northwest Alaska Inupiatun -> Inupiat */
David Corbett6745a602019-04-16 17:29:34 -0400430/*{"esu", HB_TAG('E','S','U',' ')},*/ /* Central Yupik */
David Corbett1ce11b42019-04-16 10:04:45 -0400431 {"et", HB_TAG('E','T','I',' ')}, /* Estonian [macrolanguage] */
432 {"eto", HB_TAG('B','T','I',' ')}, /* Eton (Cameroon) -> Beti */
433 {"eu", HB_TAG('E','U','Q',' ')}, /* Basque */
David Corbettb2e7bb22020-10-27 19:50:33 -0400434 {"euq", HB_TAG_NONE }, /* Basque [family] != Basque */
David Corbett1ce11b42019-04-16 10:04:45 -0400435 {"eve", HB_TAG('E','V','N',' ')}, /* Even */
436 {"evn", HB_TAG('E','V','K',' ')}, /* Evenki */
437 {"ewo", HB_TAG('B','T','I',' ')}, /* Ewondo -> Beti */
438 {"eyo", HB_TAG('K','A','L',' ')}, /* Keiyo -> Kalenjin */
439 {"fa", HB_TAG('F','A','R',' ')}, /* Persian [macrolanguage] */
David Corbett17da41b2020-11-17 14:29:05 -0500440 {"fab", HB_TAG('C','P','P',' ')}, /* Fa d'Ambu -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400441 {"fan", HB_TAG('F','A','N','0')}, /* Fang (Equatorial Guinea) */
David Corbettdec52002020-10-10 14:49:55 -0400442 {"fan", HB_TAG('B','T','I',' ')}, /* Fang (Equatorial Guinea) -> Beti */
David Corbettb2e7bb22020-10-27 19:50:33 -0400443 {"far", HB_TAG_NONE }, /* Fataleka != Persian */
David Corbettdec52002020-10-10 14:49:55 -0400444 {"fat", HB_TAG('F','A','T',' ')}, /* Fanti */
445 {"fat", HB_TAG('A','K','A',' ')}, /* Fanti -> Akan */
David Corbett1ce11b42019-04-16 10:04:45 -0400446 {"fbl", HB_TAG('B','I','K',' ')}, /* West Albay Bikol -> Bikol */
447 {"ff", HB_TAG('F','U','L',' ')}, /* Fulah [macrolanguage] */
448 {"ffm", HB_TAG('F','U','L',' ')}, /* Maasina Fulfulde -> Fulah */
449 {"fi", HB_TAG('F','I','N',' ')}, /* Finnish */
450 {"fil", HB_TAG('P','I','L',' ')}, /* Filipino */
451 {"fj", HB_TAG('F','J','I',' ')}, /* Fijian */
452 {"flm", HB_TAG('H','A','L',' ')}, /* Halam (Falam Chin) (retired code) */
453 {"flm", HB_TAG('Q','I','N',' ')}, /* Falam Chin (retired code) -> Chin */
David Corbett17da41b2020-11-17 14:29:05 -0500454 {"fmp", HB_TAG('F','M','P',' ')}, /* Fe’fe’ */
455 {"fmp", HB_TAG('B','M','L',' ')}, /* Fe'fe' -> Bamileke */
456 {"fng", HB_TAG('C','P','P',' ')}, /* Fanagalo -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400457 {"fo", HB_TAG('F','O','S',' ')}, /* Faroese */
David Corbett6745a602019-04-16 17:29:34 -0400458/*{"fon", HB_TAG('F','O','N',' ')},*/ /* Fon */
David Corbettb2e7bb22020-10-27 19:50:33 -0400459 {"fos", HB_TAG_NONE }, /* Siraya != Faroese */
David Corbett17da41b2020-11-17 14:29:05 -0500460 {"fpe", HB_TAG('C','P','P',' ')}, /* Fernando Po Creole English -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400461 {"fr", HB_TAG('F','R','A',' ')}, /* French */
David Corbett6745a602019-04-16 17:29:34 -0400462/*{"frc", HB_TAG('F','R','C',' ')},*/ /* Cajun French */
463/*{"frp", HB_TAG('F','R','P',' ')},*/ /* Arpitan */
David Corbett1ce11b42019-04-16 10:04:45 -0400464 {"fub", HB_TAG('F','U','L',' ')}, /* Adamawa Fulfulde -> Fulah */
465 {"fuc", HB_TAG('F','U','L',' ')}, /* Pulaar -> Fulah */
466 {"fue", HB_TAG('F','U','L',' ')}, /* Borgu Fulfulde -> Fulah */
467 {"fuf", HB_TAG('F','T','A',' ')}, /* Pular -> Futa */
David Corbettdec52002020-10-10 14:49:55 -0400468 {"fuf", HB_TAG('F','U','L',' ')}, /* Pular -> Fulah */
David Corbett1ce11b42019-04-16 10:04:45 -0400469 {"fuh", HB_TAG('F','U','L',' ')}, /* Western Niger Fulfulde -> Fulah */
470 {"fui", HB_TAG('F','U','L',' ')}, /* Bagirmi Fulfulde -> Fulah */
471 {"fuq", HB_TAG('F','U','L',' ')}, /* Central-Eastern Niger Fulfulde -> Fulah */
472 {"fur", HB_TAG('F','R','L',' ')}, /* Friulian */
David Corbettdec52002020-10-10 14:49:55 -0400473 {"fuv", HB_TAG('F','U','V',' ')}, /* Nigerian Fulfulde */
474 {"fuv", HB_TAG('F','U','L',' ')}, /* Nigerian Fulfulde -> Fulah */
David Corbett1ce11b42019-04-16 10:04:45 -0400475 {"fy", HB_TAG('F','R','I',' ')}, /* Western Frisian -> Frisian */
476 {"ga", HB_TAG('I','R','I',' ')}, /* Irish */
477 {"gaa", HB_TAG('G','A','D',' ')}, /* Ga */
David Corbett17da41b2020-11-17 14:29:05 -0500478 {"gac", HB_TAG('C','P','P',' ')}, /* Mixed Great Andamanese -> Creoles */
David Corbettb2e7bb22020-10-27 19:50:33 -0400479 {"gad", HB_TAG_NONE }, /* Gaddang != Ga */
480 {"gae", HB_TAG_NONE }, /* Guarequena != Scottish Gaelic (Gaelic) */
David Corbett6745a602019-04-16 17:29:34 -0400481/*{"gag", HB_TAG('G','A','G',' ')},*/ /* Gagauz */
David Corbettb2e7bb22020-10-27 19:50:33 -0400482 {"gal", HB_TAG_NONE }, /* Galolen != Galician */
David Corbett17da41b2020-11-17 14:29:05 -0500483 {"gan", HB_TAG('Z','H','S',' ')}, /* Gan Chinese -> Chinese, Simplified */
David Corbettb2e7bb22020-10-27 19:50:33 -0400484 {"gar", HB_TAG_NONE }, /* Galeya != Garshuni */
485 {"gaw", HB_TAG_NONE }, /* Nobonob != Garhwali */
David Corbett1ce11b42019-04-16 10:04:45 -0400486 {"gax", HB_TAG('O','R','O',' ')}, /* Borana-Arsi-Guji Oromo -> Oromo */
487 {"gaz", HB_TAG('O','R','O',' ')}, /* West Central Oromo -> Oromo */
488 {"gbm", HB_TAG('G','A','W',' ')}, /* Garhwali */
489 {"gce", HB_TAG('A','T','H',' ')}, /* Galice -> Athapaskan */
David Corbett17da41b2020-11-17 14:29:05 -0500490 {"gcf", HB_TAG('C','P','P',' ')}, /* Guadeloupean Creole French -> Creoles */
491 {"gcl", HB_TAG('C','P','P',' ')}, /* Grenadian Creole English -> Creoles */
492 {"gcr", HB_TAG('C','P','P',' ')}, /* Guianese Creole French -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400493 {"gd", HB_TAG('G','A','E',' ')}, /* Scottish Gaelic (Gaelic) */
494 {"gda", HB_TAG('R','A','J',' ')}, /* Gade Lohar -> Rajasthani */
David Corbett6745a602019-04-16 17:29:34 -0400495/*{"gez", HB_TAG('G','E','Z',' ')},*/ /* Geez */
David Corbett1ce11b42019-04-16 10:04:45 -0400496 {"ggo", HB_TAG('G','O','N',' ')}, /* Southern Gondi (retired code) -> Gondi */
David Corbett17da41b2020-11-17 14:29:05 -0500497 {"gha", HB_TAG('B','B','R',' ')}, /* Ghadamès -> Berber */
498 {"ghk", HB_TAG('K','R','N',' ')}, /* Geko Karen -> Karen */
499 {"gho", HB_TAG('B','B','R',' ')}, /* Ghomara -> Berber */
500 {"gib", HB_TAG('C','P','P',' ')}, /* Gibanawa -> Creoles */
David Corbett6745a602019-04-16 17:29:34 -0400501/*{"gih", HB_TAG('G','I','H',' ')},*/ /* Githabul */
David Corbett1ce11b42019-04-16 10:04:45 -0400502 {"gil", HB_TAG('G','I','L','0')}, /* Kiribati (Gilbertese) */
503 {"gju", HB_TAG('R','A','J',' ')}, /* Gujari -> Rajasthani */
David Corbettdec52002020-10-10 14:49:55 -0400504 {"gkp", HB_TAG('G','K','P',' ')}, /* Guinea Kpelle -> Kpelle (Guinea) */
505 {"gkp", HB_TAG('K','P','L',' ')}, /* Guinea Kpelle -> Kpelle */
David Corbett1ce11b42019-04-16 10:04:45 -0400506 {"gl", HB_TAG('G','A','L',' ')}, /* Galician */
507 {"gld", HB_TAG('N','A','N',' ')}, /* Nanai */
David Corbett6745a602019-04-16 17:29:34 -0400508/*{"glk", HB_TAG('G','L','K',' ')},*/ /* Gilaki */
David Corbettb2e7bb22020-10-27 19:50:33 -0400509 {"gmz", HB_TAG_NONE }, /* Mgbolizhia != Gumuz */
David Corbett1ce11b42019-04-16 10:04:45 -0400510 {"gn", HB_TAG('G','U','A',' ')}, /* Guarani [macrolanguage] */
David Corbett17da41b2020-11-17 14:29:05 -0500511 {"gnb", HB_TAG('Q','I','N',' ')}, /* Gangte -> Chin */
David Corbett6745a602019-04-16 17:29:34 -0400512/*{"gnn", HB_TAG('G','N','N',' ')},*/ /* Gumatj */
David Corbett1ce11b42019-04-16 10:04:45 -0400513 {"gno", HB_TAG('G','O','N',' ')}, /* Northern Gondi -> Gondi */
514 {"gnw", HB_TAG('G','U','A',' ')}, /* Western Bolivian Guaraní -> Guarani */
David Corbett6745a602019-04-16 17:29:34 -0400515/*{"gog", HB_TAG('G','O','G',' ')},*/ /* Gogo */
David Corbett1ce11b42019-04-16 10:04:45 -0400516 {"gom", HB_TAG('K','O','K',' ')}, /* Goan Konkani -> Konkani */
David Corbett6745a602019-04-16 17:29:34 -0400517/*{"gon", HB_TAG('G','O','N',' ')},*/ /* Gondi [macrolanguage] */
David Corbett17da41b2020-11-17 14:29:05 -0500518 {"goq", HB_TAG('C','P','P',' ')}, /* Gorap -> Creoles */
519 {"gox", HB_TAG('B','A','D','0')}, /* Gobu -> Banda */
520 {"gpe", HB_TAG('C','P','P',' ')}, /* Ghanaian Pidgin English -> Creoles */
David Corbettb2e7bb22020-10-27 19:50:33 -0400521 {"gro", HB_TAG_NONE }, /* Groma != Garo */
David Corbett17da41b2020-11-17 14:29:05 -0500522 {"grr", HB_TAG('B','B','R',' ')}, /* Taznatit -> Berber */
David Corbett1ce11b42019-04-16 10:04:45 -0400523 {"grt", HB_TAG('G','R','O',' ')}, /* Garo */
524 {"gru", HB_TAG('S','O','G',' ')}, /* Kistane -> Sodo Gurage */
525 {"gsw", HB_TAG('A','L','S',' ')}, /* Alsatian */
526 {"gu", HB_TAG('G','U','J',' ')}, /* Gujarati */
David Corbettb2e7bb22020-10-27 19:50:33 -0400527 {"gua", HB_TAG_NONE }, /* Shiki != Guarani */
David Corbett6745a602019-04-16 17:29:34 -0400528/*{"guc", HB_TAG('G','U','C',' ')},*/ /* Wayuu */
529/*{"guf", HB_TAG('G','U','F',' ')},*/ /* Gupapuyngu */
David Corbett1ce11b42019-04-16 10:04:45 -0400530 {"gug", HB_TAG('G','U','A',' ')}, /* Paraguayan Guaraní -> Guarani */
531 {"gui", HB_TAG('G','U','A',' ')}, /* Eastern Bolivian Guaraní -> Guarani */
532 {"guk", HB_TAG('G','M','Z',' ')}, /* Gumuz */
David Corbett17da41b2020-11-17 14:29:05 -0500533 {"gul", HB_TAG('C','P','P',' ')}, /* Sea Island Creole English -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400534 {"gun", HB_TAG('G','U','A',' ')}, /* Mbyá Guaraní -> Guarani */
David Corbett6745a602019-04-16 17:29:34 -0400535/*{"guz", HB_TAG('G','U','Z',' ')},*/ /* Gusii */
David Corbett1ce11b42019-04-16 10:04:45 -0400536 {"gv", HB_TAG('M','N','X',' ')}, /* Manx */
537 {"gwi", HB_TAG('A','T','H',' ')}, /* Gwichʼin -> Athapaskan */
David Corbett17da41b2020-11-17 14:29:05 -0500538 {"gyn", HB_TAG('C','P','P',' ')}, /* Guyanese Creole English -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400539 {"ha", HB_TAG('H','A','U',' ')}, /* Hausa */
540 {"haa", HB_TAG('A','T','H',' ')}, /* Han -> Athapaskan */
541 {"hae", HB_TAG('O','R','O',' ')}, /* Eastern Oromo -> Oromo */
David Corbettf4559d22021-09-02 17:56:17 -0400542 {"hai", HB_TAG('H','A','I','0')}, /* Haida [macrolanguage] */
David Corbett17da41b2020-11-17 14:29:05 -0500543 {"hak", HB_TAG('Z','H','S',' ')}, /* Hakka Chinese -> Chinese, Simplified */
David Corbettb2e7bb22020-10-27 19:50:33 -0400544 {"hal", HB_TAG_NONE }, /* Halang != Halam (Falam Chin) */
David Corbett1ce11b42019-04-16 10:04:45 -0400545 {"har", HB_TAG('H','R','I',' ')}, /* Harari */
David Corbett6745a602019-04-16 17:29:34 -0400546/*{"haw", HB_TAG('H','A','W',' ')},*/ /* Hawaiian */
David Corbettf4559d22021-09-02 17:56:17 -0400547 {"hax", HB_TAG('H','A','I','0')}, /* Southern Haida -> Haida */
David Corbett6745a602019-04-16 17:29:34 -0400548/*{"hay", HB_TAG('H','A','Y',' ')},*/ /* Haya */
549/*{"haz", HB_TAG('H','A','Z',' ')},*/ /* Hazaragi */
David Corbettb2e7bb22020-10-27 19:50:33 -0400550 {"hbn", HB_TAG_NONE }, /* Heiban != Hammer-Banna */
David Corbett17da41b2020-11-17 14:29:05 -0500551 {"hca", HB_TAG('C','P','P',' ')}, /* Andaman Creole Hindi -> Creoles */
David Corbettf4559d22021-09-02 17:56:17 -0400552 {"hdn", HB_TAG('H','A','I','0')}, /* Northern Haida -> Haida */
David Corbett1ce11b42019-04-16 10:04:45 -0400553 {"he", HB_TAG('I','W','R',' ')}, /* Hebrew */
554 {"hea", HB_TAG('H','M','N',' ')}, /* Northern Qiandong Miao -> Hmong */
David Corbettf4559d22021-09-02 17:56:17 -0400555/*{"hei", HB_TAG('H','E','I',' ')},*/ /* Heiltsuk */
David Corbett1ce11b42019-04-16 10:04:45 -0400556 {"hi", HB_TAG('H','I','N',' ')}, /* Hindi */
David Corbett6745a602019-04-16 17:29:34 -0400557/*{"hil", HB_TAG('H','I','L',' ')},*/ /* Hiligaynon */
David Corbett1ce11b42019-04-16 10:04:45 -0400558 {"hji", HB_TAG('M','L','Y',' ')}, /* Haji -> Malay */
559 {"hlt", HB_TAG('Q','I','N',' ')}, /* Matu Chin -> Chin */
560 {"hma", HB_TAG('H','M','N',' ')}, /* Southern Mashan Hmong -> Hmong */
561 {"hmc", HB_TAG('H','M','N',' ')}, /* Central Huishui Hmong -> Hmong */
David Corbettf4559d22021-09-02 17:56:17 -0400562 {"hmd", HB_TAG('H','M','D',' ')}, /* Large Flowery Miao -> A-Hmao */
David Corbett1ce11b42019-04-16 10:04:45 -0400563 {"hmd", HB_TAG('H','M','N',' ')}, /* Large Flowery Miao -> Hmong */
564 {"hme", HB_TAG('H','M','N',' ')}, /* Eastern Huishui Hmong -> Hmong */
565 {"hmg", HB_TAG('H','M','N',' ')}, /* Southwestern Guiyang Hmong -> Hmong */
566 {"hmh", HB_TAG('H','M','N',' ')}, /* Southwestern Huishui Hmong -> Hmong */
567 {"hmi", HB_TAG('H','M','N',' ')}, /* Northern Huishui Hmong -> Hmong */
568 {"hmj", HB_TAG('H','M','N',' ')}, /* Ge -> Hmong */
569 {"hml", HB_TAG('H','M','N',' ')}, /* Luopohe Hmong -> Hmong */
570 {"hmm", HB_TAG('H','M','N',' ')}, /* Central Mashan Hmong -> Hmong */
David Corbett6745a602019-04-16 17:29:34 -0400571/*{"hmn", HB_TAG('H','M','N',' ')},*/ /* Hmong [macrolanguage] */
David Corbett1ce11b42019-04-16 10:04:45 -0400572 {"hmp", HB_TAG('H','M','N',' ')}, /* Northern Mashan Hmong -> Hmong */
573 {"hmq", HB_TAG('H','M','N',' ')}, /* Eastern Qiandong Miao -> Hmong */
David Corbett17da41b2020-11-17 14:29:05 -0500574 {"hmr", HB_TAG('Q','I','N',' ')}, /* Hmar -> Chin */
David Corbett1ce11b42019-04-16 10:04:45 -0400575 {"hms", HB_TAG('H','M','N',' ')}, /* Southern Qiandong Miao -> Hmong */
576 {"hmw", HB_TAG('H','M','N',' ')}, /* Western Mashan Hmong -> Hmong */
577 {"hmy", HB_TAG('H','M','N',' ')}, /* Southern Guiyang Hmong -> Hmong */
David Corbettf4559d22021-09-02 17:56:17 -0400578 {"hmz", HB_TAG('H','M','Z',' ')}, /* Hmong Shua -> Hmong Shuat */
David Corbett1ce11b42019-04-16 10:04:45 -0400579 {"hmz", HB_TAG('H','M','N',' ')}, /* Hmong Shua -> Hmong */
David Corbett6745a602019-04-16 17:29:34 -0400580/*{"hnd", HB_TAG('H','N','D',' ')},*/ /* Southern Hindko -> Hindko */
David Corbett1ce11b42019-04-16 10:04:45 -0400581 {"hne", HB_TAG('C','H','H',' ')}, /* Chhattisgarhi -> Chattisgarhi */
582 {"hnj", HB_TAG('H','M','N',' ')}, /* Hmong Njua -> Hmong */
583 {"hno", HB_TAG('H','N','D',' ')}, /* Northern Hindko -> Hindko */
584 {"ho", HB_TAG('H','M','O',' ')}, /* Hiri Motu */
David Corbett17da41b2020-11-17 14:29:05 -0500585 {"ho", HB_TAG('C','P','P',' ')}, /* Hiri Motu -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400586 {"hoc", HB_TAG('H','O',' ',' ')}, /* Ho */
587 {"hoi", HB_TAG('A','T','H',' ')}, /* Holikachuk -> Athapaskan */
588 {"hoj", HB_TAG('H','A','R',' ')}, /* Hadothi -> Harauti */
David Corbettdec52002020-10-10 14:49:55 -0400589 {"hoj", HB_TAG('R','A','J',' ')}, /* Hadothi -> Rajasthani */
David Corbett1ce11b42019-04-16 10:04:45 -0400590 {"hr", HB_TAG('H','R','V',' ')}, /* Croatian */
David Corbett17da41b2020-11-17 14:29:05 -0500591 {"hra", HB_TAG('Q','I','N',' ')}, /* Hrangkhol -> Chin */
David Corbett1ce11b42019-04-16 10:04:45 -0400592 {"hrm", HB_TAG('H','M','N',' ')}, /* Horned Miao -> Hmong */
593 {"hsb", HB_TAG('U','S','B',' ')}, /* Upper Sorbian */
David Corbett17da41b2020-11-17 14:29:05 -0500594 {"hsn", HB_TAG('Z','H','S',' ')}, /* Xiang Chinese -> Chinese, Simplified */
David Corbett1ce11b42019-04-16 10:04:45 -0400595 {"ht", HB_TAG('H','A','I',' ')}, /* Haitian (Haitian Creole) */
David Corbett17da41b2020-11-17 14:29:05 -0500596 {"ht", HB_TAG('C','P','P',' ')}, /* Haitian -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400597 {"hu", HB_TAG('H','U','N',' ')}, /* Hungarian */
598 {"huj", HB_TAG('H','M','N',' ')}, /* Northern Guiyang Hmong -> Hmong */
599 {"hup", HB_TAG('A','T','H',' ')}, /* Hupa -> Athapaskan */
David Corbett17da41b2020-11-17 14:29:05 -0500600 {"hus", HB_TAG('M','Y','N',' ')}, /* Huastec -> Mayan */
601 {"hwc", HB_TAG('C','P','P',' ')}, /* Hawai'i Creole English -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400602 {"hy", HB_TAG('H','Y','E','0')}, /* Armenian -> Armenian East */
603 {"hy", HB_TAG('H','Y','E',' ')}, /* Armenian */
604 {"hyw", HB_TAG('H','Y','E',' ')}, /* Western Armenian -> Armenian */
605 {"hz", HB_TAG('H','E','R',' ')}, /* Herero */
606 {"ia", HB_TAG('I','N','A',' ')}, /* Interlingua (International Auxiliary Language Association) */
David Corbett6745a602019-04-16 17:29:34 -0400607/*{"iba", HB_TAG('I','B','A',' ')},*/ /* Iban */
608/*{"ibb", HB_TAG('I','B','B',' ')},*/ /* Ibibio */
David Corbett17da41b2020-11-17 14:29:05 -0500609 {"iby", HB_TAG('I','J','O',' ')}, /* Ibani -> Ijo */
610 {"icr", HB_TAG('C','P','P',' ')}, /* Islander Creole English -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400611 {"id", HB_TAG('I','N','D',' ')}, /* Indonesian */
David Corbettdec52002020-10-10 14:49:55 -0400612 {"id", HB_TAG('M','L','Y',' ')}, /* Indonesian -> Malay */
David Corbett1ce11b42019-04-16 10:04:45 -0400613 {"ida", HB_TAG('L','U','H',' ')}, /* Idakho-Isukha-Tiriki -> Luyia */
David Corbett17da41b2020-11-17 14:29:05 -0500614 {"idb", HB_TAG('C','P','P',' ')}, /* Indo-Portuguese -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400615 {"ie", HB_TAG('I','L','E',' ')}, /* Interlingue */
616 {"ig", HB_TAG('I','B','O',' ')}, /* Igbo */
617 {"igb", HB_TAG('E','B','I',' ')}, /* Ebira */
David Corbett17da41b2020-11-17 14:29:05 -0500618 {"ihb", HB_TAG('C','P','P',' ')}, /* Iha Based Pidgin -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400619 {"ii", HB_TAG('Y','I','M',' ')}, /* Sichuan Yi -> Yi Modern */
620 {"ijc", HB_TAG('I','J','O',' ')}, /* Izon -> Ijo */
David Corbett17da41b2020-11-17 14:29:05 -0500621 {"ije", HB_TAG('I','J','O',' ')}, /* Biseni -> Ijo */
622 {"ijn", HB_TAG('I','J','O',' ')}, /* Kalabari -> Ijo */
David Corbett6745a602019-04-16 17:29:34 -0400623/*{"ijo", HB_TAG('I','J','O',' ')},*/ /* Ijo [family] */
David Corbett17da41b2020-11-17 14:29:05 -0500624 {"ijs", HB_TAG('I','J','O',' ')}, /* Southeast Ijo -> Ijo */
David Corbett1ce11b42019-04-16 10:04:45 -0400625 {"ik", HB_TAG('I','P','K',' ')}, /* Inupiaq [macrolanguage] -> Inupiat */
626 {"ike", HB_TAG('I','N','U',' ')}, /* Eastern Canadian Inuktitut -> Inuktitut */
627 {"ikt", HB_TAG('I','N','U',' ')}, /* Inuinnaqtun -> Inuktitut */
David Corbett6745a602019-04-16 17:29:34 -0400628/*{"ilo", HB_TAG('I','L','O',' ')},*/ /* Iloko -> Ilokano */
David Corbett1ce11b42019-04-16 10:04:45 -0400629 {"in", HB_TAG('I','N','D',' ')}, /* Indonesian (retired code) */
David Corbettdec52002020-10-10 14:49:55 -0400630 {"in", HB_TAG('M','L','Y',' ')}, /* Indonesian (retired code) -> Malay */
David Corbett1ce11b42019-04-16 10:04:45 -0400631 {"ing", HB_TAG('A','T','H',' ')}, /* Degexit'an -> Athapaskan */
632 {"inh", HB_TAG('I','N','G',' ')}, /* Ingush */
633 {"io", HB_TAG('I','D','O',' ')}, /* Ido */
David Corbettb2e7bb22020-10-27 19:50:33 -0400634 {"iri", HB_TAG_NONE }, /* Rigwe != Irish */
David Corbettf4559d22021-09-02 17:56:17 -0400635/*{"iru", HB_TAG('I','R','U',' ')},*/ /* Irula */
David Corbett1ce11b42019-04-16 10:04:45 -0400636 {"is", HB_TAG('I','S','L',' ')}, /* Icelandic */
David Corbettb2e7bb22020-10-27 19:50:33 -0400637 {"ism", HB_TAG_NONE }, /* Masimasi != Inari Sami */
David Corbett1ce11b42019-04-16 10:04:45 -0400638 {"it", HB_TAG('I','T','A',' ')}, /* Italian */
David Corbett17da41b2020-11-17 14:29:05 -0500639 {"itz", HB_TAG('M','Y','N',' ')}, /* Itzá -> Mayan */
David Corbett1ce11b42019-04-16 10:04:45 -0400640 {"iu", HB_TAG('I','N','U',' ')}, /* Inuktitut [macrolanguage] */
641 {"iw", HB_TAG('I','W','R',' ')}, /* Hebrew (retired code) */
David Corbett17da41b2020-11-17 14:29:05 -0500642 {"ixl", HB_TAG('M','Y','N',' ')}, /* Ixil -> Mayan */
David Corbett1ce11b42019-04-16 10:04:45 -0400643 {"ja", HB_TAG('J','A','N',' ')}, /* Japanese */
David Corbett17da41b2020-11-17 14:29:05 -0500644 {"jac", HB_TAG('M','Y','N',' ')}, /* Popti' -> Mayan */
David Corbett1ce11b42019-04-16 10:04:45 -0400645 {"jak", HB_TAG('M','L','Y',' ')}, /* Jakun -> Malay */
David Corbett17da41b2020-11-17 14:29:05 -0500646 {"jam", HB_TAG('J','A','M',' ')}, /* Jamaican Creole English -> Jamaican Creole */
647 {"jam", HB_TAG('C','P','P',' ')}, /* Jamaican Creole English -> Creoles */
David Corbettb2e7bb22020-10-27 19:50:33 -0400648 {"jan", HB_TAG_NONE }, /* Jandai != Japanese */
David Corbett1ce11b42019-04-16 10:04:45 -0400649 {"jax", HB_TAG('M','L','Y',' ')}, /* Jambi Malay -> Malay */
David Corbett17da41b2020-11-17 14:29:05 -0500650 {"jbe", HB_TAG('B','B','R',' ')}, /* Judeo-Berber -> Berber */
651 {"jbn", HB_TAG('B','B','R',' ')}, /* Nafusi -> Berber */
David Corbett6745a602019-04-16 17:29:34 -0400652/*{"jbo", HB_TAG('J','B','O',' ')},*/ /* Lojban */
653/*{"jct", HB_TAG('J','C','T',' ')},*/ /* Krymchak */
David Corbett17da41b2020-11-17 14:29:05 -0500654 {"jgo", HB_TAG('B','M','L',' ')}, /* Ngomba -> Bamileke */
David Corbett1ce11b42019-04-16 10:04:45 -0400655 {"ji", HB_TAG('J','I','I',' ')}, /* Yiddish (retired code) */
David Corbettb2e7bb22020-10-27 19:50:33 -0400656 {"jii", HB_TAG_NONE }, /* Jiiddu != Yiddish */
David Corbett17da41b2020-11-17 14:29:05 -0500657 {"jkm", HB_TAG('K','R','N',' ')}, /* Mobwa Karen -> Karen */
658 {"jkp", HB_TAG('K','R','N',' ')}, /* Paku Karen -> Karen */
David Corbettb2e7bb22020-10-27 19:50:33 -0400659 {"jud", HB_TAG_NONE }, /* Worodougou != Ladino */
660 {"jul", HB_TAG_NONE }, /* Jirel != Jula */
David Corbett1ce11b42019-04-16 10:04:45 -0400661 {"jv", HB_TAG('J','A','V',' ')}, /* Javanese */
David Corbett17da41b2020-11-17 14:29:05 -0500662 {"jvd", HB_TAG('C','P','P',' ')}, /* Javindo -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400663 {"jw", HB_TAG('J','A','V',' ')}, /* Javanese (retired code) */
664 {"ka", HB_TAG('K','A','T',' ')}, /* Georgian */
David Corbett7a961692020-04-01 17:26:07 -0400665 {"kaa", HB_TAG('K','R','K',' ')}, /* Karakalpak */
David Corbett1ce11b42019-04-16 10:04:45 -0400666 {"kab", HB_TAG('K','A','B','0')}, /* Kabyle */
David Corbett17da41b2020-11-17 14:29:05 -0500667 {"kab", HB_TAG('B','B','R',' ')}, /* Kabyle -> Berber */
David Corbettb2e7bb22020-10-27 19:50:33 -0400668 {"kac", HB_TAG_NONE }, /* Kachin != Kachchi */
David Corbett1ce11b42019-04-16 10:04:45 -0400669 {"kam", HB_TAG('K','M','B',' ')}, /* Kamba (Kenya) */
670 {"kar", HB_TAG('K','R','N',' ')}, /* Karen [family] */
David Corbettf4559d22021-09-02 17:56:17 -0400671/*{"kaw", HB_TAG('K','A','W',' ')},*/ /* Kawi (Old Javanese) */
David Corbett1ce11b42019-04-16 10:04:45 -0400672 {"kbd", HB_TAG('K','A','B',' ')}, /* Kabardian */
673 {"kby", HB_TAG('K','N','R',' ')}, /* Manga Kanuri -> Kanuri */
674 {"kca", HB_TAG('K','H','K',' ')}, /* Khanty -> Khanty-Kazim */
675 {"kca", HB_TAG('K','H','S',' ')}, /* Khanty -> Khanty-Shurishkar */
676 {"kca", HB_TAG('K','H','V',' ')}, /* Khanty -> Khanty-Vakhi */
David Corbett17da41b2020-11-17 14:29:05 -0500677 {"kcn", HB_TAG('C','P','P',' ')}, /* Nubi -> Creoles */
David Corbett6745a602019-04-16 17:29:34 -0400678/*{"kde", HB_TAG('K','D','E',' ')},*/ /* Makonde */
David Corbett1ce11b42019-04-16 10:04:45 -0400679 {"kdr", HB_TAG('K','R','M',' ')}, /* Karaim */
680 {"kdt", HB_TAG('K','U','Y',' ')}, /* Kuy */
David Corbett17da41b2020-11-17 14:29:05 -0500681 {"kea", HB_TAG('K','E','A',' ')}, /* Kabuverdianu (Crioulo) */
682 {"kea", HB_TAG('C','P','P',' ')}, /* Kabuverdianu -> Creoles */
David Corbettb2e7bb22020-10-27 19:50:33 -0400683 {"keb", HB_TAG_NONE }, /* Kélé != Kebena */
David Corbett17da41b2020-11-17 14:29:05 -0500684 {"kek", HB_TAG('K','E','K',' ')}, /* Kekchi */
685 {"kek", HB_TAG('M','Y','N',' ')}, /* Kekchí -> Mayan */
David Corbett1ce11b42019-04-16 10:04:45 -0400686 {"kex", HB_TAG('K','K','N',' ')}, /* Kukna -> Kokni */
687 {"kfa", HB_TAG('K','O','D',' ')}, /* Kodava -> Kodagu */
688 {"kfr", HB_TAG('K','A','C',' ')}, /* Kachhi -> Kachchi */
689 {"kfx", HB_TAG('K','U','L',' ')}, /* Kullu Pahari -> Kulvi */
690 {"kfy", HB_TAG('K','M','N',' ')}, /* Kumaoni */
691 {"kg", HB_TAG('K','O','N','0')}, /* Kongo [macrolanguage] */
David Corbettb2e7bb22020-10-27 19:50:33 -0400692 {"kge", HB_TAG_NONE }, /* Komering != Khutsuri Georgian */
David Corbett1ce11b42019-04-16 10:04:45 -0400693 {"kha", HB_TAG('K','S','I',' ')}, /* Khasi */
694 {"khb", HB_TAG('X','B','D',' ')}, /* Lü */
695 {"khk", HB_TAG('M','N','G',' ')}, /* Halh Mongolian -> Mongolian */
David Corbettb2e7bb22020-10-27 19:50:33 -0400696 {"khn", HB_TAG_NONE }, /* Khandesi != Khamti Shan (Microsoft fonts) */
697 {"khs", HB_TAG_NONE }, /* Kasua != Khanty-Shurishkar */
David Corbettac3f8592020-09-09 11:49:56 -0400698 {"kht", HB_TAG('K','H','T',' ')}, /* Khamti -> Khamti Shan */
David Corbett1ce11b42019-04-16 10:04:45 -0400699 {"kht", HB_TAG('K','H','N',' ')}, /* Khamti -> Khamti Shan (Microsoft fonts) */
David Corbettb2e7bb22020-10-27 19:50:33 -0400700 {"khv", HB_TAG_NONE }, /* Khvarshi != Khanty-Vakhi */
David Corbett6745a602019-04-16 17:29:34 -0400701/*{"khw", HB_TAG('K','H','W',' ')},*/ /* Khowar */
David Corbett1ce11b42019-04-16 10:04:45 -0400702 {"ki", HB_TAG('K','I','K',' ')}, /* Kikuyu (Gikuyu) */
David Corbettb2e7bb22020-10-27 19:50:33 -0400703 {"kis", HB_TAG_NONE }, /* Kis != Kisii */
David Corbettdec52002020-10-10 14:49:55 -0400704 {"kiu", HB_TAG('K','I','U',' ')}, /* Kirmanjki */
705 {"kiu", HB_TAG('Z','Z','A',' ')}, /* Kirmanjki -> Zazaki */
David Corbett1ce11b42019-04-16 10:04:45 -0400706 {"kj", HB_TAG('K','U','A',' ')}, /* Kuanyama */
David Corbett17da41b2020-11-17 14:29:05 -0500707 {"kjb", HB_TAG('M','Y','N',' ')}, /* Q'anjob'al -> Mayan */
David Corbett6745a602019-04-16 17:29:34 -0400708/*{"kjd", HB_TAG('K','J','D',' ')},*/ /* Southern Kiwai */
David Corbett1ce11b42019-04-16 10:04:45 -0400709 {"kjh", HB_TAG('K','H','A',' ')}, /* Khakas -> Khakass */
David Corbett17da41b2020-11-17 14:29:05 -0500710 {"kjp", HB_TAG('K','J','P',' ')}, /* Pwo Eastern Karen -> Eastern Pwo Karen */
711 {"kjp", HB_TAG('K','R','N',' ')}, /* Pwo Eastern Karen -> Karen */
712 {"kjt", HB_TAG('K','R','N',' ')}, /* Phrae Pwo Karen -> Karen */
David Corbett6745a602019-04-16 17:29:34 -0400713/*{"kjz", HB_TAG('K','J','Z',' ')},*/ /* Bumthangkha */
David Corbett1ce11b42019-04-16 10:04:45 -0400714 {"kk", HB_TAG('K','A','Z',' ')}, /* Kazakh */
David Corbettb2e7bb22020-10-27 19:50:33 -0400715 {"kkn", HB_TAG_NONE }, /* Kon Keu != Kokni */
David Corbett1ce11b42019-04-16 10:04:45 -0400716 {"kkz", HB_TAG('A','T','H',' ')}, /* Kaska -> Athapaskan */
717 {"kl", HB_TAG('G','R','N',' ')}, /* Greenlandic */
David Corbettb2e7bb22020-10-27 19:50:33 -0400718 {"klm", HB_TAG_NONE }, /* Migum != Kalmyk */
David Corbett1ce11b42019-04-16 10:04:45 -0400719 {"kln", HB_TAG('K','A','L',' ')}, /* Kalenjin [macrolanguage] */
720 {"km", HB_TAG('K','H','M',' ')}, /* Khmer */
721 {"kmb", HB_TAG('M','B','N',' ')}, /* Kimbundu -> Mbundu */
David Corbettb2e7bb22020-10-27 19:50:33 -0400722 {"kmn", HB_TAG_NONE }, /* Awtuw != Kumaoni */
723 {"kmo", HB_TAG_NONE }, /* Kwoma != Komo */
David Corbett1ce11b42019-04-16 10:04:45 -0400724 {"kmr", HB_TAG('K','U','R',' ')}, /* Northern Kurdish -> Kurdish */
David Corbettb2e7bb22020-10-27 19:50:33 -0400725 {"kms", HB_TAG_NONE }, /* Kamasau != Komso */
David Corbett17da41b2020-11-17 14:29:05 -0500726 {"kmv", HB_TAG('C','P','P',' ')}, /* Karipúna Creole French -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400727 {"kmw", HB_TAG('K','M','O',' ')}, /* Komo (Democratic Republic of Congo) */
David Corbett6745a602019-04-16 17:29:34 -0400728/*{"kmz", HB_TAG('K','M','Z',' ')},*/ /* Khorasani Turkish -> Khorasani Turkic */
David Corbett1ce11b42019-04-16 10:04:45 -0400729 {"kn", HB_TAG('K','A','N',' ')}, /* Kannada */
730 {"knc", HB_TAG('K','N','R',' ')}, /* Central Kanuri -> Kanuri */
731 {"kng", HB_TAG('K','O','N','0')}, /* Koongo -> Kongo */
David Corbett17da41b2020-11-17 14:29:05 -0500732 {"knj", HB_TAG('M','Y','N',' ')}, /* Western Kanjobal -> Mayan */
David Corbett1ce11b42019-04-16 10:04:45 -0400733 {"knn", HB_TAG('K','O','K',' ')}, /* Konkani */
David Corbettb2e7bb22020-10-27 19:50:33 -0400734 {"knr", HB_TAG_NONE }, /* Kaningra != Kanuri */
David Corbett1ce11b42019-04-16 10:04:45 -0400735 {"ko", HB_TAG('K','O','R',' ')}, /* Korean */
David Corbett17da41b2020-11-17 14:29:05 -0500736 {"ko", HB_TAG('K','O','H',' ')}, /* Korean -> Korean Old Hangul */
David Corbettb2e7bb22020-10-27 19:50:33 -0400737 {"kod", HB_TAG_NONE }, /* Kodi != Kodagu */
738 {"koh", HB_TAG_NONE }, /* Koyo != Korean Old Hangul */
David Corbett1ce11b42019-04-16 10:04:45 -0400739 {"koi", HB_TAG('K','O','P',' ')}, /* Komi-Permyak */
David Corbettdec52002020-10-10 14:49:55 -0400740 {"koi", HB_TAG('K','O','M',' ')}, /* Komi-Permyak -> Komi */
David Corbett6745a602019-04-16 17:29:34 -0400741/*{"kok", HB_TAG('K','O','K',' ')},*/ /* Konkani [macrolanguage] */
David Corbettb2e7bb22020-10-27 19:50:33 -0400742 {"kop", HB_TAG_NONE }, /* Waube != Komi-Permyak */
David Corbett6745a602019-04-16 17:29:34 -0400743/*{"kos", HB_TAG('K','O','S',' ')},*/ /* Kosraean */
David Corbett1ce11b42019-04-16 10:04:45 -0400744 {"koy", HB_TAG('A','T','H',' ')}, /* Koyukon -> Athapaskan */
David Corbettb2e7bb22020-10-27 19:50:33 -0400745 {"koz", HB_TAG_NONE }, /* Korak != Komi-Zyrian */
David Corbett1ce11b42019-04-16 10:04:45 -0400746 {"kpe", HB_TAG('K','P','L',' ')}, /* Kpelle [macrolanguage] */
David Corbettb2e7bb22020-10-27 19:50:33 -0400747 {"kpl", HB_TAG_NONE }, /* Kpala != Kpelle */
David Corbett17da41b2020-11-17 14:29:05 -0500748 {"kpp", HB_TAG('K','R','N',' ')}, /* Paku Karen (retired code) -> Karen */
David Corbett1ce11b42019-04-16 10:04:45 -0400749 {"kpv", HB_TAG('K','O','Z',' ')}, /* Komi-Zyrian */
David Corbettdec52002020-10-10 14:49:55 -0400750 {"kpv", HB_TAG('K','O','M',' ')}, /* Komi-Zyrian -> Komi */
David Corbett1ce11b42019-04-16 10:04:45 -0400751 {"kpy", HB_TAG('K','Y','K',' ')}, /* Koryak */
752 {"kqs", HB_TAG('K','I','S',' ')}, /* Northern Kissi -> Kisii */
753 {"kqy", HB_TAG('K','R','T',' ')}, /* Koorete */
754 {"kr", HB_TAG('K','N','R',' ')}, /* Kanuri [macrolanguage] */
755 {"krc", HB_TAG('K','A','R',' ')}, /* Karachay-Balkar -> Karachay */
756 {"krc", HB_TAG('B','A','L',' ')}, /* Karachay-Balkar -> Balkar */
David Corbett17da41b2020-11-17 14:29:05 -0500757 {"kri", HB_TAG('K','R','I',' ')}, /* Krio */
758 {"kri", HB_TAG('C','P','P',' ')}, /* Krio -> Creoles */
David Corbettb2e7bb22020-10-27 19:50:33 -0400759 {"krk", HB_TAG_NONE }, /* Kerek != Karakalpak */
David Corbett6745a602019-04-16 17:29:34 -0400760/*{"krl", HB_TAG('K','R','L',' ')},*/ /* Karelian */
David Corbettb2e7bb22020-10-27 19:50:33 -0400761 {"krm", HB_TAG_NONE }, /* Krim (retired code) != Karaim */
762 {"krn", HB_TAG_NONE }, /* Sapo != Karen */
David Corbett1ce11b42019-04-16 10:04:45 -0400763 {"krt", HB_TAG('K','N','R',' ')}, /* Tumari Kanuri -> Kanuri */
764 {"kru", HB_TAG('K','U','U',' ')}, /* Kurukh */
765 {"ks", HB_TAG('K','S','H',' ')}, /* Kashmiri */
766 {"ksh", HB_TAG('K','S','H','0')}, /* Kölsch -> Ripuarian */
David Corbettb2e7bb22020-10-27 19:50:33 -0400767 {"ksi", HB_TAG_NONE }, /* Krisa != Khasi */
768 {"ksm", HB_TAG_NONE }, /* Kumba != Kildin Sami */
David Corbett1ce11b42019-04-16 10:04:45 -0400769 {"kss", HB_TAG('K','I','S',' ')}, /* Southern Kisi -> Kisii */
David Corbett17da41b2020-11-17 14:29:05 -0500770 {"ksw", HB_TAG('K','S','W',' ')}, /* S’gaw Karen */
771 {"ksw", HB_TAG('K','R','N',' ')}, /* S'gaw Karen -> Karen */
David Corbett1ce11b42019-04-16 10:04:45 -0400772 {"ktb", HB_TAG('K','E','B',' ')}, /* Kambaata -> Kebena */
773 {"ktu", HB_TAG('K','O','N',' ')}, /* Kituba (Democratic Republic of Congo) -> Kikongo */
774 {"ktw", HB_TAG('A','T','H',' ')}, /* Kato -> Athapaskan */
775 {"ku", HB_TAG('K','U','R',' ')}, /* Kurdish [macrolanguage] */
David Corbettb2e7bb22020-10-27 19:50:33 -0400776 {"kui", HB_TAG_NONE }, /* Kuikúro-Kalapálo != Kui */
777 {"kul", HB_TAG_NONE }, /* Kulere != Kulvi */
David Corbett6745a602019-04-16 17:29:34 -0400778/*{"kum", HB_TAG('K','U','M',' ')},*/ /* Kumyk */
David Corbett1ce11b42019-04-16 10:04:45 -0400779 {"kuu", HB_TAG('A','T','H',' ')}, /* Upper Kuskokwim -> Athapaskan */
David Corbett17da41b2020-11-17 14:29:05 -0500780 {"kuw", HB_TAG('B','A','D','0')}, /* Kpagua -> Banda */
David Corbettb2e7bb22020-10-27 19:50:33 -0400781 {"kuy", HB_TAG_NONE }, /* Kuuku-Ya'u != Kuy */
David Corbett1ce11b42019-04-16 10:04:45 -0400782 {"kv", HB_TAG('K','O','M',' ')}, /* Komi [macrolanguage] */
783 {"kvb", HB_TAG('M','L','Y',' ')}, /* Kubu -> Malay */
David Corbett17da41b2020-11-17 14:29:05 -0500784 {"kvl", HB_TAG('K','R','N',' ')}, /* Kayaw -> Karen */
785 {"kvq", HB_TAG('K','R','N',' ')}, /* Geba Karen -> Karen */
David Corbett1ce11b42019-04-16 10:04:45 -0400786 {"kvr", HB_TAG('M','L','Y',' ')}, /* Kerinci -> Malay */
David Corbett17da41b2020-11-17 14:29:05 -0500787 {"kvt", HB_TAG('K','R','N',' ')}, /* Lahta Karen -> Karen */
788 {"kvu", HB_TAG('K','R','N',' ')}, /* Yinbaw Karen -> Karen */
789 {"kvy", HB_TAG('K','R','N',' ')}, /* Yintale Karen -> Karen */
David Corbett1ce11b42019-04-16 10:04:45 -0400790 {"kw", HB_TAG('C','O','R',' ')}, /* Cornish */
David Corbettf4559d22021-09-02 17:56:17 -0400791/*{"kwk", HB_TAG('K','W','K',' ')},*/ /* Kwakiutl -> Kwakʼwala */
David Corbett17da41b2020-11-17 14:29:05 -0500792 {"kww", HB_TAG('C','P','P',' ')}, /* Kwinti -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400793 {"kwy", HB_TAG('K','O','N','0')}, /* San Salvador Kongo -> Kongo */
794 {"kxc", HB_TAG('K','M','S',' ')}, /* Konso -> Komso */
795 {"kxd", HB_TAG('M','L','Y',' ')}, /* Brunei -> Malay */
David Corbett17da41b2020-11-17 14:29:05 -0500796 {"kxf", HB_TAG('K','R','N',' ')}, /* Manumanaw Karen -> Karen */
797 {"kxk", HB_TAG('K','R','N',' ')}, /* Zayein Karen -> Karen */
David Corbett7a961692020-04-01 17:26:07 -0400798 {"kxl", HB_TAG('K','U','U',' ')}, /* Nepali Kurux (retired code) -> Kurukh */
799 {"kxu", HB_TAG('K','U','I',' ')}, /* Kui (India) (retired code) */
David Corbett1ce11b42019-04-16 10:04:45 -0400800 {"ky", HB_TAG('K','I','R',' ')}, /* Kirghiz (Kyrgyz) */
David Corbettb2e7bb22020-10-27 19:50:33 -0400801 {"kyk", HB_TAG_NONE }, /* Kamayo != Koryak */
David Corbett17da41b2020-11-17 14:29:05 -0500802 {"kyu", HB_TAG('K','Y','U',' ')}, /* Western Kayah */
803 {"kyu", HB_TAG('K','R','N',' ')}, /* Western Kayah -> Karen */
David Corbett1ce11b42019-04-16 10:04:45 -0400804 {"la", HB_TAG('L','A','T',' ')}, /* Latin */
David Corbett17da41b2020-11-17 14:29:05 -0500805 {"lac", HB_TAG('M','Y','N',' ')}, /* Lacandon -> Mayan */
David Corbett1ce11b42019-04-16 10:04:45 -0400806 {"lad", HB_TAG('J','U','D',' ')}, /* Ladino */
David Corbettb2e7bb22020-10-27 19:50:33 -0400807 {"lah", HB_TAG_NONE }, /* Lahnda [macrolanguage] != Lahuli */
808 {"lak", HB_TAG_NONE }, /* Laka (Nigeria) != Lak */
809 {"lam", HB_TAG_NONE }, /* Lamba != Lambani */
810 {"laz", HB_TAG_NONE }, /* Aribwatsa != Laz */
David Corbett1ce11b42019-04-16 10:04:45 -0400811 {"lb", HB_TAG('L','T','Z',' ')}, /* Luxembourgish */
812 {"lbe", HB_TAG('L','A','K',' ')}, /* Lak */
813 {"lbj", HB_TAG('L','D','K',' ')}, /* Ladakhi */
814 {"lbl", HB_TAG('B','I','K',' ')}, /* Libon Bikol -> Bikol */
815 {"lce", HB_TAG('M','L','Y',' ')}, /* Loncong -> Malay */
816 {"lcf", HB_TAG('M','L','Y',' ')}, /* Lubu -> Malay */
817 {"ldi", HB_TAG('K','O','N','0')}, /* Laari -> Kongo */
David Corbettb2e7bb22020-10-27 19:50:33 -0400818 {"ldk", HB_TAG_NONE }, /* Leelau != Ladakhi */
David Corbettf4559d22021-09-02 17:56:17 -0400819/*{"lef", HB_TAG('L','E','F',' ')},*/ /* Lelemi */
David Corbett6745a602019-04-16 17:29:34 -0400820/*{"lez", HB_TAG('L','E','Z',' ')},*/ /* Lezghian -> Lezgi */
David Corbett1ce11b42019-04-16 10:04:45 -0400821 {"lg", HB_TAG('L','U','G',' ')}, /* Ganda */
822 {"li", HB_TAG('L','I','M',' ')}, /* Limburgish */
823 {"lif", HB_TAG('L','M','B',' ')}, /* Limbu */
David Corbett6745a602019-04-16 17:29:34 -0400824/*{"lij", HB_TAG('L','I','J',' ')},*/ /* Ligurian */
David Corbett17da41b2020-11-17 14:29:05 -0500825 {"lir", HB_TAG('C','P','P',' ')}, /* Liberian English -> Creoles */
David Corbett6745a602019-04-16 17:29:34 -0400826/*{"lis", HB_TAG('L','I','S',' ')},*/ /* Lisu */
David Corbett1ce11b42019-04-16 10:04:45 -0400827 {"liw", HB_TAG('M','L','Y',' ')}, /* Col -> Malay */
David Corbett17da41b2020-11-17 14:29:05 -0500828 {"liy", HB_TAG('B','A','D','0')}, /* Banda-Bambari -> Banda */
David Corbett6745a602019-04-16 17:29:34 -0400829/*{"ljp", HB_TAG('L','J','P',' ')},*/ /* Lampung Api -> Lampung */
David Corbett1ce11b42019-04-16 10:04:45 -0400830 {"lkb", HB_TAG('L','U','H',' ')}, /* Kabras -> Luyia */
David Corbett6745a602019-04-16 17:29:34 -0400831/*{"lki", HB_TAG('L','K','I',' ')},*/ /* Laki */
David Corbett1ce11b42019-04-16 10:04:45 -0400832 {"lko", HB_TAG('L','U','H',' ')}, /* Khayo -> Luyia */
833 {"lks", HB_TAG('L','U','H',' ')}, /* Kisa -> Luyia */
834 {"lld", HB_TAG('L','A','D',' ')}, /* Ladin */
David Corbettb2e7bb22020-10-27 19:50:33 -0400835 {"lma", HB_TAG_NONE }, /* East Limba != Low Mari */
836 {"lmb", HB_TAG_NONE }, /* Merei != Limbu */
David Corbett1ce11b42019-04-16 10:04:45 -0400837 {"lmn", HB_TAG('L','A','M',' ')}, /* Lambadi -> Lambani */
David Corbett6745a602019-04-16 17:29:34 -0400838/*{"lmo", HB_TAG('L','M','O',' ')},*/ /* Lombard */
David Corbettb2e7bb22020-10-27 19:50:33 -0400839 {"lmw", HB_TAG_NONE }, /* Lake Miwok != Lomwe */
David Corbett1ce11b42019-04-16 10:04:45 -0400840 {"ln", HB_TAG('L','I','N',' ')}, /* Lingala */
David Corbett17da41b2020-11-17 14:29:05 -0500841 {"lna", HB_TAG('B','A','D','0')}, /* Langbashe -> Banda */
842 {"lnl", HB_TAG('B','A','D','0')}, /* South Central Banda -> Banda */
David Corbett1ce11b42019-04-16 10:04:45 -0400843 {"lo", HB_TAG('L','A','O',' ')}, /* Lao */
David Corbett6745a602019-04-16 17:29:34 -0400844/*{"lom", HB_TAG('L','O','M',' ')},*/ /* Loma (Liberia) */
David Corbett17da41b2020-11-17 14:29:05 -0500845 {"lou", HB_TAG('C','P','P',' ')}, /* Louisiana Creole -> Creoles */
David Corbettf4559d22021-09-02 17:56:17 -0400846/*{"lpo", HB_TAG('L','P','O',' ')},*/ /* Lipo */
David Corbett6745a602019-04-16 17:29:34 -0400847/*{"lrc", HB_TAG('L','R','C',' ')},*/ /* Northern Luri -> Luri */
David Corbett1ce11b42019-04-16 10:04:45 -0400848 {"lri", HB_TAG('L','U','H',' ')}, /* Marachi -> Luyia */
849 {"lrm", HB_TAG('L','U','H',' ')}, /* Marama -> Luyia */
David Corbett17da41b2020-11-17 14:29:05 -0500850 {"lrt", HB_TAG('C','P','P',' ')}, /* Larantuka Malay -> Creoles */
David Corbette19de652021-03-08 13:12:47 -0500851 {"lsb", HB_TAG_NONE }, /* Burundian Sign Language != Lower Sorbian */
David Corbett1ce11b42019-04-16 10:04:45 -0400852 {"lsm", HB_TAG('L','U','H',' ')}, /* Saamia -> Luyia */
853 {"lt", HB_TAG('L','T','H',' ')}, /* Lithuanian */
854 {"ltg", HB_TAG('L','V','I',' ')}, /* Latgalian -> Latvian */
David Corbettb2e7bb22020-10-27 19:50:33 -0400855 {"lth", HB_TAG_NONE }, /* Thur != Lithuanian */
David Corbett1ce11b42019-04-16 10:04:45 -0400856 {"lto", HB_TAG('L','U','H',' ')}, /* Tsotso -> Luyia */
857 {"lts", HB_TAG('L','U','H',' ')}, /* Tachoni -> Luyia */
858 {"lu", HB_TAG('L','U','B',' ')}, /* Luba-Katanga */
David Corbett6745a602019-04-16 17:29:34 -0400859/*{"lua", HB_TAG('L','U','A',' ')},*/ /* Luba-Lulua */
860/*{"luo", HB_TAG('L','U','O',' ')},*/ /* Luo (Kenya and Tanzania) */
David Corbett1ce11b42019-04-16 10:04:45 -0400861 {"lus", HB_TAG('M','I','Z',' ')}, /* Lushai -> Mizo */
David Corbett17da41b2020-11-17 14:29:05 -0500862 {"lus", HB_TAG('Q','I','N',' ')}, /* Lushai -> Chin */
David Corbett1ce11b42019-04-16 10:04:45 -0400863 {"luy", HB_TAG('L','U','H',' ')}, /* Luyia [macrolanguage] */
864 {"luz", HB_TAG('L','R','C',' ')}, /* Southern Luri -> Luri */
865 {"lv", HB_TAG('L','V','I',' ')}, /* Latvian [macrolanguage] */
David Corbettb2e7bb22020-10-27 19:50:33 -0400866 {"lvi", HB_TAG_NONE }, /* Lavi != Latvian */
David Corbett1ce11b42019-04-16 10:04:45 -0400867 {"lvs", HB_TAG('L','V','I',' ')}, /* Standard Latvian -> Latvian */
868 {"lwg", HB_TAG('L','U','H',' ')}, /* Wanga -> Luyia */
David Corbett17da41b2020-11-17 14:29:05 -0500869 {"lzh", HB_TAG('Z','H','T',' ')}, /* Literary Chinese -> Chinese, Traditional */
David Corbett1ce11b42019-04-16 10:04:45 -0400870 {"lzz", HB_TAG('L','A','Z',' ')}, /* Laz */
David Corbett6745a602019-04-16 17:29:34 -0400871/*{"mad", HB_TAG('M','A','D',' ')},*/ /* Madurese -> Madura */
872/*{"mag", HB_TAG('M','A','G',' ')},*/ /* Magahi */
David Corbett1ce11b42019-04-16 10:04:45 -0400873 {"mai", HB_TAG('M','T','H',' ')}, /* Maithili */
David Corbettb2e7bb22020-10-27 19:50:33 -0400874 {"maj", HB_TAG_NONE }, /* Jalapa De Díaz Mazatec != Majang */
David Corbett1ce11b42019-04-16 10:04:45 -0400875 {"mak", HB_TAG('M','K','R',' ')}, /* Makasar */
David Corbett17da41b2020-11-17 14:29:05 -0500876 {"mam", HB_TAG('M','A','M',' ')}, /* Mam */
877 {"mam", HB_TAG('M','Y','N',' ')}, /* Mam -> Mayan */
David Corbett1ce11b42019-04-16 10:04:45 -0400878 {"man", HB_TAG('M','N','K',' ')}, /* Mandingo [macrolanguage] -> Maninka */
David Corbettb2e7bb22020-10-27 19:50:33 -0400879 {"map", HB_TAG_NONE }, /* Austronesian [family] != Mapudungun */
880 {"maw", HB_TAG_NONE }, /* Mampruli != Marwari */
David Corbett1ce11b42019-04-16 10:04:45 -0400881 {"max", HB_TAG('M','L','Y',' ')}, /* North Moluccan Malay -> Malay */
David Corbett17da41b2020-11-17 14:29:05 -0500882 {"max", HB_TAG('C','P','P',' ')}, /* North Moluccan Malay -> Creoles */
883 {"mbf", HB_TAG('C','P','P',' ')}, /* Baba Malay -> Creoles */
David Corbettb2e7bb22020-10-27 19:50:33 -0400884 {"mbn", HB_TAG_NONE }, /* Macaguán != Mbundu */
David Corbett6745a602019-04-16 17:29:34 -0400885/*{"mbo", HB_TAG('M','B','O',' ')},*/ /* Mbo (Cameroon) */
David Corbettb2e7bb22020-10-27 19:50:33 -0400886 {"mch", HB_TAG_NONE }, /* Maquiritari != Manchu */
David Corbett17da41b2020-11-17 14:29:05 -0500887 {"mcm", HB_TAG('C','P','P',' ')}, /* Malaccan Creole Portuguese -> Creoles */
David Corbettb2e7bb22020-10-27 19:50:33 -0400888 {"mcr", HB_TAG_NONE }, /* Menya != Moose Cree */
David Corbett1ce11b42019-04-16 10:04:45 -0400889 {"mct", HB_TAG('B','T','I',' ')}, /* Mengisa -> Beti */
David Corbettb2e7bb22020-10-27 19:50:33 -0400890 {"mde", HB_TAG_NONE }, /* Maba (Chad) != Mende */
David Corbett1ce11b42019-04-16 10:04:45 -0400891 {"mdf", HB_TAG('M','O','K',' ')}, /* Moksha */
David Corbett6745a602019-04-16 17:29:34 -0400892/*{"mdr", HB_TAG('M','D','R',' ')},*/ /* Mandar */
David Corbett1ce11b42019-04-16 10:04:45 -0400893 {"mdy", HB_TAG('M','L','E',' ')}, /* Male (Ethiopia) */
894 {"men", HB_TAG('M','D','E',' ')}, /* Mende (Sierra Leone) */
895 {"meo", HB_TAG('M','L','Y',' ')}, /* Kedah Malay -> Malay */
David Corbett6745a602019-04-16 17:29:34 -0400896/*{"mer", HB_TAG('M','E','R',' ')},*/ /* Meru */
David Corbettdec52002020-10-10 14:49:55 -0400897 {"mfa", HB_TAG('M','F','A',' ')}, /* Pattani Malay */
898 {"mfa", HB_TAG('M','L','Y',' ')}, /* Pattani Malay -> Malay */
David Corbett1ce11b42019-04-16 10:04:45 -0400899 {"mfb", HB_TAG('M','L','Y',' ')}, /* Bangka -> Malay */
David Corbett17da41b2020-11-17 14:29:05 -0500900 {"mfe", HB_TAG('M','F','E',' ')}, /* Morisyen */
901 {"mfe", HB_TAG('C','P','P',' ')}, /* Morisyen -> Creoles */
902 {"mfp", HB_TAG('C','P','P',' ')}, /* Makassar Malay -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400903 {"mg", HB_TAG('M','L','G',' ')}, /* Malagasy [macrolanguage] */
904 {"mh", HB_TAG('M','A','H',' ')}, /* Marshallese */
David Corbett17da41b2020-11-17 14:29:05 -0500905 {"mhc", HB_TAG('M','Y','N',' ')}, /* Mocho -> Mayan */
David Corbett1ce11b42019-04-16 10:04:45 -0400906 {"mhr", HB_TAG('L','M','A',' ')}, /* Eastern Mari -> Low Mari */
907 {"mhv", HB_TAG('A','R','K',' ')}, /* Arakanese (retired code) -> Rakhine */
908 {"mi", HB_TAG('M','R','I',' ')}, /* Maori */
David Corbettdec52002020-10-10 14:49:55 -0400909 {"min", HB_TAG('M','I','N',' ')}, /* Minangkabau */
910 {"min", HB_TAG('M','L','Y',' ')}, /* Minangkabau -> Malay */
David Corbettb2e7bb22020-10-27 19:50:33 -0400911 {"miz", HB_TAG_NONE }, /* Coatzospan Mixtec != Mizo */
David Corbett1ce11b42019-04-16 10:04:45 -0400912 {"mk", HB_TAG('M','K','D',' ')}, /* Macedonian */
David Corbett17da41b2020-11-17 14:29:05 -0500913 {"mkn", HB_TAG('C','P','P',' ')}, /* Kupang Malay -> Creoles */
David Corbettb2e7bb22020-10-27 19:50:33 -0400914 {"mkr", HB_TAG_NONE }, /* Malas != Makasar */
David Corbett1ce11b42019-04-16 10:04:45 -0400915 {"mku", HB_TAG('M','N','K',' ')}, /* Konyanka Maninka -> Maninka */
David Corbett6745a602019-04-16 17:29:34 -0400916/*{"mkw", HB_TAG('M','K','W',' ')},*/ /* Kituba (Congo) */
David Corbett1ce11b42019-04-16 10:04:45 -0400917 {"ml", HB_TAG('M','A','L',' ')}, /* Malayalam -> Malayalam Traditional */
918 {"ml", HB_TAG('M','L','R',' ')}, /* Malayalam -> Malayalam Reformed */
David Corbettb2e7bb22020-10-27 19:50:33 -0400919 {"mle", HB_TAG_NONE }, /* Manambu != Male */
920 {"mln", HB_TAG_NONE }, /* Malango != Malinke */
David Corbett1ce11b42019-04-16 10:04:45 -0400921 {"mlq", HB_TAG('M','L','N',' ')}, /* Western Maninkakan -> Malinke */
922 {"mlq", HB_TAG('M','N','K',' ')}, /* Western Maninkakan -> Maninka */
David Corbettb2e7bb22020-10-27 19:50:33 -0400923 {"mlr", HB_TAG_NONE }, /* Vame != Malayalam Reformed */
David Corbett1ce11b42019-04-16 10:04:45 -0400924 {"mmr", HB_TAG('H','M','N',' ')}, /* Western Xiangxi Miao -> Hmong */
925 {"mn", HB_TAG('M','N','G',' ')}, /* Mongolian [macrolanguage] */
926 {"mnc", HB_TAG('M','C','H',' ')}, /* Manchu */
David Corbettb2e7bb22020-10-27 19:50:33 -0400927 {"mnd", HB_TAG_NONE }, /* Mondé != Mandinka */
928 {"mng", HB_TAG_NONE }, /* Eastern Mnong != Mongolian */
David Corbett17da41b2020-11-17 14:29:05 -0500929 {"mnh", HB_TAG('B','A','D','0')}, /* Mono (Democratic Republic of Congo) -> Banda */
David Corbett6745a602019-04-16 17:29:34 -0400930/*{"mni", HB_TAG('M','N','I',' ')},*/ /* Manipuri */
David Corbett1ce11b42019-04-16 10:04:45 -0400931 {"mnk", HB_TAG('M','N','D',' ')}, /* Mandinka */
932 {"mnk", HB_TAG('M','N','K',' ')}, /* Mandinka -> Maninka */
David Corbett17da41b2020-11-17 14:29:05 -0500933 {"mnp", HB_TAG('Z','H','S',' ')}, /* Min Bei Chinese -> Chinese, Simplified */
David Corbett1ce11b42019-04-16 10:04:45 -0400934 {"mns", HB_TAG('M','A','N',' ')}, /* Mansi */
935 {"mnw", HB_TAG('M','O','N',' ')}, /* Mon */
David Corbettb2e7bb22020-10-27 19:50:33 -0400936 {"mnx", HB_TAG_NONE }, /* Manikion != Manx */
David Corbett1ce11b42019-04-16 10:04:45 -0400937 {"mo", HB_TAG('M','O','L',' ')}, /* Moldavian (retired code) */
David Corbett17da41b2020-11-17 14:29:05 -0500938 {"mod", HB_TAG('C','P','P',' ')}, /* Mobilian -> Creoles */
David Corbett6745a602019-04-16 17:29:34 -0400939/*{"moh", HB_TAG('M','O','H',' ')},*/ /* Mohawk */
David Corbettb2e7bb22020-10-27 19:50:33 -0400940 {"mok", HB_TAG_NONE }, /* Morori != Moksha */
David Corbett17da41b2020-11-17 14:29:05 -0500941 {"mop", HB_TAG('M','Y','N',' ')}, /* Mopán Maya -> Mayan */
David Corbettb2e7bb22020-10-27 19:50:33 -0400942 {"mor", HB_TAG_NONE }, /* Moro != Moroccan */
David Corbett6745a602019-04-16 17:29:34 -0400943/*{"mos", HB_TAG('M','O','S',' ')},*/ /* Mossi */
David Corbett1ce11b42019-04-16 10:04:45 -0400944 {"mpe", HB_TAG('M','A','J',' ')}, /* Majang */
945 {"mqg", HB_TAG('M','L','Y',' ')}, /* Kota Bangun Kutai Malay -> Malay */
946 {"mr", HB_TAG('M','A','R',' ')}, /* Marathi */
947 {"mrh", HB_TAG('Q','I','N',' ')}, /* Mara Chin -> Chin */
948 {"mrj", HB_TAG('H','M','A',' ')}, /* Western Mari -> High Mari */
949 {"ms", HB_TAG('M','L','Y',' ')}, /* Malay [macrolanguage] */
950 {"msc", HB_TAG('M','N','K',' ')}, /* Sankaran Maninka -> Maninka */
951 {"msh", HB_TAG('M','L','G',' ')}, /* Masikoro Malagasy -> Malagasy */
952 {"msi", HB_TAG('M','L','Y',' ')}, /* Sabah Malay -> Malay */
David Corbett17da41b2020-11-17 14:29:05 -0500953 {"msi", HB_TAG('C','P','P',' ')}, /* Sabah Malay -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400954 {"mt", HB_TAG('M','T','S',' ')}, /* Maltese */
David Corbettb2e7bb22020-10-27 19:50:33 -0400955 {"mth", HB_TAG_NONE }, /* Munggui != Maithili */
David Corbett1ce11b42019-04-16 10:04:45 -0400956 {"mtr", HB_TAG('M','A','W',' ')}, /* Mewari -> Marwari */
David Corbettb2e7bb22020-10-27 19:50:33 -0400957 {"mts", HB_TAG_NONE }, /* Yora != Maltese */
David Corbett17da41b2020-11-17 14:29:05 -0500958 {"mud", HB_TAG('C','P','P',' ')}, /* Mednyj Aleut -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400959 {"mui", HB_TAG('M','L','Y',' ')}, /* Musi -> Malay */
David Corbettb2e7bb22020-10-27 19:50:33 -0400960 {"mun", HB_TAG_NONE }, /* Munda [family] != Mundari */
David Corbett1ce11b42019-04-16 10:04:45 -0400961 {"mup", HB_TAG('R','A','J',' ')}, /* Malvi -> Rajasthani */
962 {"muq", HB_TAG('H','M','N',' ')}, /* Eastern Xiangxi Miao -> Hmong */
David Corbett6745a602019-04-16 17:29:34 -0400963/*{"mus", HB_TAG('M','U','S',' ')},*/ /* Creek -> Muscogee */
David Corbett1ce11b42019-04-16 10:04:45 -0400964 {"mvb", HB_TAG('A','T','H',' ')}, /* Mattole -> Athapaskan */
965 {"mve", HB_TAG('M','A','W',' ')}, /* Marwari (Pakistan) */
966 {"mvf", HB_TAG('M','N','G',' ')}, /* Peripheral Mongolian -> Mongolian */
967 {"mwk", HB_TAG('M','N','K',' ')}, /* Kita Maninkakan -> Maninka */
David Corbett6745a602019-04-16 17:29:34 -0400968/*{"mwl", HB_TAG('M','W','L',' ')},*/ /* Mirandese */
David Corbett17da41b2020-11-17 14:29:05 -0500969 {"mwq", HB_TAG('Q','I','N',' ')}, /* Mün Chin -> Chin */
David Corbett1ce11b42019-04-16 10:04:45 -0400970 {"mwr", HB_TAG('M','A','W',' ')}, /* Marwari [macrolanguage] */
David Corbettdec52002020-10-10 14:49:55 -0400971 {"mww", HB_TAG('M','W','W',' ')}, /* Hmong Daw */
972 {"mww", HB_TAG('H','M','N',' ')}, /* Hmong Daw -> Hmong */
David Corbett1ce11b42019-04-16 10:04:45 -0400973 {"my", HB_TAG('B','R','M',' ')}, /* Burmese */
974 {"mym", HB_TAG('M','E','N',' ')}, /* Me’en */
David Corbett6745a602019-04-16 17:29:34 -0400975/*{"myn", HB_TAG('M','Y','N',' ')},*/ /* Mayan [family] */
David Corbett1ce11b42019-04-16 10:04:45 -0400976 {"myq", HB_TAG('M','N','K',' ')}, /* Forest Maninka (retired code) -> Maninka */
977 {"myv", HB_TAG('E','R','Z',' ')}, /* Erzya */
David Corbett17da41b2020-11-17 14:29:05 -0500978 {"mzb", HB_TAG('B','B','R',' ')}, /* Tumzabt -> Berber */
David Corbett6745a602019-04-16 17:29:34 -0400979/*{"mzn", HB_TAG('M','Z','N',' ')},*/ /* Mazanderani */
David Corbett17da41b2020-11-17 14:29:05 -0500980 {"mzs", HB_TAG('C','P','P',' ')}, /* Macanese -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -0400981 {"na", HB_TAG('N','A','U',' ')}, /* Nauru -> Nauruan */
David Corbett17da41b2020-11-17 14:29:05 -0500982 {"nag", HB_TAG('N','A','G',' ')}, /* Naga Pidgin -> Naga-Assamese */
983 {"nag", HB_TAG('C','P','P',' ')}, /* Naga Pidgin -> Creoles */
David Corbett6745a602019-04-16 17:29:34 -0400984/*{"nah", HB_TAG('N','A','H',' ')},*/ /* Nahuatl [family] */
David Corbett17da41b2020-11-17 14:29:05 -0500985 {"nan", HB_TAG('Z','H','S',' ')}, /* Min Nan Chinese -> Chinese, Simplified */
David Corbett6745a602019-04-16 17:29:34 -0400986/*{"nap", HB_TAG('N','A','P',' ')},*/ /* Neapolitan */
David Corbettb2e7bb22020-10-27 19:50:33 -0400987 {"nas", HB_TAG_NONE }, /* Naasioi != Naskapi */
David Corbett17da41b2020-11-17 14:29:05 -0500988 {"naz", HB_TAG('N','A','H',' ')}, /* Coatepec Nahuatl -> Nahuatl */
David Corbett1ce11b42019-04-16 10:04:45 -0400989 {"nb", HB_TAG('N','O','R',' ')}, /* Norwegian Bokmål -> Norwegian */
David Corbett17da41b2020-11-17 14:29:05 -0500990 {"nch", HB_TAG('N','A','H',' ')}, /* Central Huasteca Nahuatl -> Nahuatl */
991 {"nci", HB_TAG('N','A','H',' ')}, /* Classical Nahuatl -> Nahuatl */
992 {"ncj", HB_TAG('N','A','H',' ')}, /* Northern Puebla Nahuatl -> Nahuatl */
993 {"ncl", HB_TAG('N','A','H',' ')}, /* Michoacán Nahuatl -> Nahuatl */
David Corbettb2e7bb22020-10-27 19:50:33 -0400994 {"ncr", HB_TAG_NONE }, /* Ncane != N-Cree */
David Corbett17da41b2020-11-17 14:29:05 -0500995 {"ncx", HB_TAG('N','A','H',' ')}, /* Central Puebla Nahuatl -> Nahuatl */
David Corbett1ce11b42019-04-16 10:04:45 -0400996 {"nd", HB_TAG('N','D','B',' ')}, /* North Ndebele -> Ndebele */
David Corbettb2e7bb22020-10-27 19:50:33 -0400997 {"ndb", HB_TAG_NONE }, /* Kenswei Nsei != Ndebele */
David Corbett6745a602019-04-16 17:29:34 -0400998/*{"ndc", HB_TAG('N','D','C',' ')},*/ /* Ndau */
David Corbettb2e7bb22020-10-27 19:50:33 -0400999 {"ndg", HB_TAG_NONE }, /* Ndengereko != Ndonga */
David Corbett6745a602019-04-16 17:29:34 -04001000/*{"nds", HB_TAG('N','D','S',' ')},*/ /* Low Saxon */
David Corbett1ce11b42019-04-16 10:04:45 -04001001 {"ne", HB_TAG('N','E','P',' ')}, /* Nepali [macrolanguage] */
David Corbett17da41b2020-11-17 14:29:05 -05001002 {"nef", HB_TAG('C','P','P',' ')}, /* Nefamese -> Creoles */
David Corbett6745a602019-04-16 17:29:34 -04001003/*{"new", HB_TAG('N','E','W',' ')},*/ /* Newari */
David Corbett1ce11b42019-04-16 10:04:45 -04001004 {"ng", HB_TAG('N','D','G',' ')}, /* Ndonga */
David Corbett6745a602019-04-16 17:29:34 -04001005/*{"nga", HB_TAG('N','G','A',' ')},*/ /* Ngbaka */
David Corbett1ce11b42019-04-16 10:04:45 -04001006 {"ngl", HB_TAG('L','M','W',' ')}, /* Lomwe */
David Corbett17da41b2020-11-17 14:29:05 -05001007 {"ngm", HB_TAG('C','P','P',' ')}, /* Ngatik Men's Creole -> Creoles */
David Corbette19de652021-03-08 13:12:47 -05001008 {"ngo", HB_TAG('S','X','T',' ')}, /* Ngoni (retired code) -> Sutu */
David Corbettb2e7bb22020-10-27 19:50:33 -04001009 {"ngr", HB_TAG_NONE }, /* Engdewu != Nagari */
David Corbett17da41b2020-11-17 14:29:05 -05001010 {"ngu", HB_TAG('N','A','H',' ')}, /* Guerrero Nahuatl -> Nahuatl */
1011 {"nhc", HB_TAG('N','A','H',' ')}, /* Tabasco Nahuatl -> Nahuatl */
David Corbett1ce11b42019-04-16 10:04:45 -04001012 {"nhd", HB_TAG('G','U','A',' ')}, /* Chiripá -> Guarani */
David Corbett17da41b2020-11-17 14:29:05 -05001013 {"nhe", HB_TAG('N','A','H',' ')}, /* Eastern Huasteca Nahuatl -> Nahuatl */
1014 {"nhg", HB_TAG('N','A','H',' ')}, /* Tetelcingo Nahuatl -> Nahuatl */
1015 {"nhi", HB_TAG('N','A','H',' ')}, /* Zacatlán-Ahuacatlán-Tepetzintla Nahuatl -> Nahuatl */
1016 {"nhk", HB_TAG('N','A','H',' ')}, /* Isthmus-Cosoleacaque Nahuatl -> Nahuatl */
1017 {"nhm", HB_TAG('N','A','H',' ')}, /* Morelos Nahuatl -> Nahuatl */
1018 {"nhn", HB_TAG('N','A','H',' ')}, /* Central Nahuatl -> Nahuatl */
1019 {"nhp", HB_TAG('N','A','H',' ')}, /* Isthmus-Pajapan Nahuatl -> Nahuatl */
1020 {"nhq", HB_TAG('N','A','H',' ')}, /* Huaxcaleca Nahuatl -> Nahuatl */
1021 {"nht", HB_TAG('N','A','H',' ')}, /* Ometepec Nahuatl -> Nahuatl */
1022 {"nhv", HB_TAG('N','A','H',' ')}, /* Temascaltepec Nahuatl -> Nahuatl */
1023 {"nhw", HB_TAG('N','A','H',' ')}, /* Western Huasteca Nahuatl -> Nahuatl */
1024 {"nhx", HB_TAG('N','A','H',' ')}, /* Isthmus-Mecayapan Nahuatl -> Nahuatl */
1025 {"nhy", HB_TAG('N','A','H',' ')}, /* Northern Oaxaca Nahuatl -> Nahuatl */
1026 {"nhz", HB_TAG('N','A','H',' ')}, /* Santa María La Alta Nahuatl -> Nahuatl */
David Corbett1ce11b42019-04-16 10:04:45 -04001027 {"niq", HB_TAG('K','A','L',' ')}, /* Nandi -> Kalenjin */
David Corbettb2e7bb22020-10-27 19:50:33 -04001028 {"nis", HB_TAG_NONE }, /* Nimi != Nisi */
David Corbett6745a602019-04-16 17:29:34 -04001029/*{"niu", HB_TAG('N','I','U',' ')},*/ /* Niuean */
David Corbett1ce11b42019-04-16 10:04:45 -04001030 {"niv", HB_TAG('G','I','L',' ')}, /* Gilyak */
David Corbett17da41b2020-11-17 14:29:05 -05001031 {"njt", HB_TAG('C','P','P',' ')}, /* Ndyuka-Trio Pidgin -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -04001032 {"njz", HB_TAG('N','I','S',' ')}, /* Nyishi -> Nisi */
David Corbettb2e7bb22020-10-27 19:50:33 -04001033 {"nko", HB_TAG_NONE }, /* Nkonya != N’Ko */
David Corbett17da41b2020-11-17 14:29:05 -05001034 {"nkx", HB_TAG('I','J','O',' ')}, /* Nkoroo -> Ijo */
David Corbett1ce11b42019-04-16 10:04:45 -04001035 {"nl", HB_TAG('N','L','D',' ')}, /* Dutch */
David Corbett17da41b2020-11-17 14:29:05 -05001036 {"nla", HB_TAG('B','M','L',' ')}, /* Ngombale -> Bamileke */
David Corbett1ce11b42019-04-16 10:04:45 -04001037 {"nle", HB_TAG('L','U','H',' ')}, /* East Nyala -> Luyia */
David Corbett17da41b2020-11-17 14:29:05 -05001038 {"nln", HB_TAG('N','A','H',' ')}, /* Durango Nahuatl (retired code) -> Nahuatl */
1039 {"nlv", HB_TAG('N','A','H',' ')}, /* Orizaba Nahuatl -> Nahuatl */
David Corbett1ce11b42019-04-16 10:04:45 -04001040 {"nn", HB_TAG('N','Y','N',' ')}, /* Norwegian Nynorsk (Nynorsk, Norwegian) */
David Corbettdec52002020-10-10 14:49:55 -04001041 {"nn", HB_TAG('N','O','R',' ')}, /* Norwegian Nynorsk -> Norwegian */
David Corbett17da41b2020-11-17 14:29:05 -05001042 {"nnh", HB_TAG('B','M','L',' ')}, /* Ngiemboon -> Bamileke */
1043 {"nnz", HB_TAG('B','M','L',' ')}, /* Nda'nda' -> Bamileke */
David Corbett1ce11b42019-04-16 10:04:45 -04001044 {"no", HB_TAG('N','O','R',' ')}, /* Norwegian [macrolanguage] */
1045 {"nod", HB_TAG('N','T','A',' ')}, /* Northern Thai -> Northern Tai */
David Corbett6745a602019-04-16 17:29:34 -04001046/*{"noe", HB_TAG('N','O','E',' ')},*/ /* Nimadi */
1047/*{"nog", HB_TAG('N','O','G',' ')},*/ /* Nogai */
1048/*{"nov", HB_TAG('N','O','V',' ')},*/ /* Novial */
David Corbett1ce11b42019-04-16 10:04:45 -04001049 {"npi", HB_TAG('N','E','P',' ')}, /* Nepali */
David Corbett17da41b2020-11-17 14:29:05 -05001050 {"npl", HB_TAG('N','A','H',' ')}, /* Southeastern Puebla Nahuatl -> Nahuatl */
David Corbett1ce11b42019-04-16 10:04:45 -04001051 {"nqo", HB_TAG('N','K','O',' ')}, /* N’Ko */
1052 {"nr", HB_TAG('N','D','B',' ')}, /* South Ndebele -> Ndebele */
1053 {"nsk", HB_TAG('N','A','S',' ')}, /* Naskapi */
David Corbettb2e7bb22020-10-27 19:50:33 -04001054 {"nsm", HB_TAG_NONE }, /* Sumi Naga != Northern Sami */
David Corbett17da41b2020-11-17 14:29:05 -05001055/*{"nso", HB_TAG('N','S','O',' ')},*/ /* Northern Sotho */
1056 {"nsu", HB_TAG('N','A','H',' ')}, /* Sierra Negra Nahuatl -> Nahuatl */
David Corbettb2e7bb22020-10-27 19:50:33 -04001057 {"nto", HB_TAG_NONE }, /* Ntomba != Esperanto */
David Corbett17da41b2020-11-17 14:29:05 -05001058 {"nue", HB_TAG('B','A','D','0')}, /* Ngundu -> Banda */
1059 {"nuu", HB_TAG('B','A','D','0')}, /* Ngbundu -> Banda */
1060 {"nuz", HB_TAG('N','A','H',' ')}, /* Tlamacazapa Nahuatl -> Nahuatl */
David Corbett1ce11b42019-04-16 10:04:45 -04001061 {"nv", HB_TAG('N','A','V',' ')}, /* Navajo */
1062 {"nv", HB_TAG('A','T','H',' ')}, /* Navajo -> Athapaskan */
David Corbett17da41b2020-11-17 14:29:05 -05001063 {"nwe", HB_TAG('B','M','L',' ')}, /* Ngwe -> Bamileke */
David Corbett1ce11b42019-04-16 10:04:45 -04001064 {"ny", HB_TAG('C','H','I',' ')}, /* Chichewa (Chewa, Nyanja) */
1065 {"nyd", HB_TAG('L','U','H',' ')}, /* Nyore -> Luyia */
David Corbett6745a602019-04-16 17:29:34 -04001066/*{"nym", HB_TAG('N','Y','M',' ')},*/ /* Nyamwezi */
David Corbett1ce11b42019-04-16 10:04:45 -04001067 {"nyn", HB_TAG('N','K','L',' ')}, /* Nyankole */
David Corbett6745a602019-04-16 17:29:34 -04001068/*{"nza", HB_TAG('N','Z','A',' ')},*/ /* Tigon Mbembe -> Mbembe Tigon */
David Corbett1ce11b42019-04-16 10:04:45 -04001069 {"oc", HB_TAG('O','C','I',' ')}, /* Occitan (post 1500) */
1070 {"oj", HB_TAG('O','J','B',' ')}, /* Ojibwa [macrolanguage] -> Ojibway */
David Corbett6745a602019-04-16 17:29:34 -04001071/*{"ojb", HB_TAG('O','J','B',' ')},*/ /* Northwestern Ojibwa -> Ojibway */
David Corbett1ce11b42019-04-16 10:04:45 -04001072 {"ojc", HB_TAG('O','J','B',' ')}, /* Central Ojibwa -> Ojibway */
1073 {"ojg", HB_TAG('O','J','B',' ')}, /* Eastern Ojibwa -> Ojibway */
1074 {"ojs", HB_TAG('O','C','R',' ')}, /* Severn Ojibwa -> Oji-Cree */
David Corbettdec52002020-10-10 14:49:55 -04001075 {"ojs", HB_TAG('O','J','B',' ')}, /* Severn Ojibwa -> Ojibway */
David Corbett1ce11b42019-04-16 10:04:45 -04001076 {"ojw", HB_TAG('O','J','B',' ')}, /* Western Ojibwa -> Ojibway */
David Corbett17da41b2020-11-17 14:29:05 -05001077 {"okd", HB_TAG('I','J','O',' ')}, /* Okodia -> Ijo */
David Corbett1ce11b42019-04-16 10:04:45 -04001078 {"oki", HB_TAG('K','A','L',' ')}, /* Okiek -> Kalenjin */
1079 {"okm", HB_TAG('K','O','H',' ')}, /* Middle Korean (10th-16th cent.) -> Korean Old Hangul */
David Corbett17da41b2020-11-17 14:29:05 -05001080 {"okr", HB_TAG('I','J','O',' ')}, /* Kirike -> Ijo */
David Corbett1ce11b42019-04-16 10:04:45 -04001081 {"om", HB_TAG('O','R','O',' ')}, /* Oromo [macrolanguage] */
David Corbett17da41b2020-11-17 14:29:05 -05001082 {"onx", HB_TAG('C','P','P',' ')}, /* Onin Based Pidgin -> Creoles */
1083 {"oor", HB_TAG('C','P','P',' ')}, /* Oorlams -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -04001084 {"or", HB_TAG('O','R','I',' ')}, /* Odia (formerly Oriya) [macrolanguage] */
1085 {"orc", HB_TAG('O','R','O',' ')}, /* Orma -> Oromo */
1086 {"orn", HB_TAG('M','L','Y',' ')}, /* Orang Kanaq -> Malay */
David Corbettb2e7bb22020-10-27 19:50:33 -04001087 {"oro", HB_TAG_NONE }, /* Orokolo != Oromo */
David Corbett17da41b2020-11-17 14:29:05 -05001088 {"orr", HB_TAG('I','J','O',' ')}, /* Oruma -> Ijo */
David Corbett1ce11b42019-04-16 10:04:45 -04001089 {"ors", HB_TAG('M','L','Y',' ')}, /* Orang Seletar -> Malay */
1090 {"ory", HB_TAG('O','R','I',' ')}, /* Odia (formerly Oriya) */
1091 {"os", HB_TAG('O','S','S',' ')}, /* Ossetian */
1092 {"otw", HB_TAG('O','J','B',' ')}, /* Ottawa -> Ojibway */
David Corbett17da41b2020-11-17 14:29:05 -05001093 {"oua", HB_TAG('B','B','R',' ')}, /* Tagargrent -> Berber */
David Corbett1ce11b42019-04-16 10:04:45 -04001094 {"pa", HB_TAG('P','A','N',' ')}, /* Punjabi */
David Corbettb2e7bb22020-10-27 19:50:33 -04001095 {"paa", HB_TAG_NONE }, /* Papuan [family] != Palestinian Aramaic */
David Corbett6745a602019-04-16 17:29:34 -04001096/*{"pag", HB_TAG('P','A','G',' ')},*/ /* Pangasinan */
David Corbettb2e7bb22020-10-27 19:50:33 -04001097 {"pal", HB_TAG_NONE }, /* Pahlavi != Pali */
David Corbett6745a602019-04-16 17:29:34 -04001098/*{"pam", HB_TAG('P','A','M',' ')},*/ /* Pampanga -> Pampangan */
David Corbett1ce11b42019-04-16 10:04:45 -04001099 {"pap", HB_TAG('P','A','P','0')}, /* Papiamento -> Papiamentu */
David Corbett17da41b2020-11-17 14:29:05 -05001100 {"pap", HB_TAG('C','P','P',' ')}, /* Papiamento -> Creoles */
David Corbettb2e7bb22020-10-27 19:50:33 -04001101 {"pas", HB_TAG_NONE }, /* Papasena != Pashto */
David Corbett6745a602019-04-16 17:29:34 -04001102/*{"pau", HB_TAG('P','A','U',' ')},*/ /* Palauan */
David Corbett1ce11b42019-04-16 10:04:45 -04001103 {"pbt", HB_TAG('P','A','S',' ')}, /* Southern Pashto -> Pashto */
1104 {"pbu", HB_TAG('P','A','S',' ')}, /* Northern Pashto -> Pashto */
David Corbett6745a602019-04-16 17:29:34 -04001105/*{"pcc", HB_TAG('P','C','C',' ')},*/ /* Bouyei */
1106/*{"pcd", HB_TAG('P','C','D',' ')},*/ /* Picard */
David Corbett1ce11b42019-04-16 10:04:45 -04001107 {"pce", HB_TAG('P','L','G',' ')}, /* Ruching Palaung -> Palaung */
1108 {"pck", HB_TAG('Q','I','N',' ')}, /* Paite Chin -> Chin */
David Corbett17da41b2020-11-17 14:29:05 -05001109 {"pcm", HB_TAG('C','P','P',' ')}, /* Nigerian Pidgin -> Creoles */
David Corbett6745a602019-04-16 17:29:34 -04001110/*{"pdc", HB_TAG('P','D','C',' ')},*/ /* Pennsylvania German */
David Corbett17da41b2020-11-17 14:29:05 -05001111 {"pdu", HB_TAG('K','R','N',' ')}, /* Kayan -> Karen */
1112 {"pea", HB_TAG('C','P','P',' ')}, /* Peranakan Indonesian -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -04001113 {"pel", HB_TAG('M','L','Y',' ')}, /* Pekal -> Malay */
1114 {"pes", HB_TAG('F','A','R',' ')}, /* Iranian Persian -> Persian */
David Corbett17da41b2020-11-17 14:29:05 -05001115 {"pey", HB_TAG('C','P','P',' ')}, /* Petjo -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -04001116 {"pga", HB_TAG('A','R','A',' ')}, /* Sudanese Creole Arabic -> Arabic */
David Corbett17da41b2020-11-17 14:29:05 -05001117 {"pga", HB_TAG('C','P','P',' ')}, /* Sudanese Creole Arabic -> Creoles */
David Corbett6745a602019-04-16 17:29:34 -04001118/*{"phk", HB_TAG('P','H','K',' ')},*/ /* Phake */
David Corbett1ce11b42019-04-16 10:04:45 -04001119 {"pi", HB_TAG('P','A','L',' ')}, /* Pali */
David Corbett17da41b2020-11-17 14:29:05 -05001120 {"pih", HB_TAG('P','I','H',' ')}, /* Pitcairn-Norfolk -> Norfolk */
1121 {"pih", HB_TAG('C','P','P',' ')}, /* Pitcairn-Norfolk -> Creoles */
David Corbettb2e7bb22020-10-27 19:50:33 -04001122 {"pil", HB_TAG_NONE }, /* Yom != Filipino */
David Corbett17da41b2020-11-17 14:29:05 -05001123 {"pis", HB_TAG('C','P','P',' ')}, /* Pijin -> Creoles */
1124 {"pkh", HB_TAG('Q','I','N',' ')}, /* Pankhu -> Chin */
David Corbett1ce11b42019-04-16 10:04:45 -04001125 {"pko", HB_TAG('K','A','L',' ')}, /* Pökoot -> Kalenjin */
1126 {"pl", HB_TAG('P','L','K',' ')}, /* Polish */
David Corbettb2e7bb22020-10-27 19:50:33 -04001127 {"plg", HB_TAG_NONE }, /* Pilagá != Palaung */
1128 {"plk", HB_TAG_NONE }, /* Kohistani Shina != Polish */
David Corbett1ce11b42019-04-16 10:04:45 -04001129 {"pll", HB_TAG('P','L','G',' ')}, /* Shwe Palaung -> Palaung */
David Corbett17da41b2020-11-17 14:29:05 -05001130 {"pln", HB_TAG('C','P','P',' ')}, /* Palenquero -> Creoles */
David Corbett7a961692020-04-01 17:26:07 -04001131 {"plp", HB_TAG('P','A','P',' ')}, /* Palpa (retired code) */
David Corbett1ce11b42019-04-16 10:04:45 -04001132 {"plt", HB_TAG('M','L','G',' ')}, /* Plateau Malagasy -> Malagasy */
David Corbett17da41b2020-11-17 14:29:05 -05001133 {"pml", HB_TAG('C','P','P',' ')}, /* Lingua Franca -> Creoles */
David Corbett6745a602019-04-16 17:29:34 -04001134/*{"pms", HB_TAG('P','M','S',' ')},*/ /* Piemontese */
David Corbett17da41b2020-11-17 14:29:05 -05001135 {"pmy", HB_TAG('C','P','P',' ')}, /* Papuan Malay -> Creoles */
David Corbett6745a602019-04-16 17:29:34 -04001136/*{"pnb", HB_TAG('P','N','B',' ')},*/ /* Western Panjabi */
David Corbett17da41b2020-11-17 14:29:05 -05001137 {"poc", HB_TAG('M','Y','N',' ')}, /* Poqomam -> Mayan */
1138 {"poh", HB_TAG('P','O','H',' ')}, /* Poqomchi' -> Pocomchi */
1139 {"poh", HB_TAG('M','Y','N',' ')}, /* Poqomchi' -> Mayan */
David Corbett6745a602019-04-16 17:29:34 -04001140/*{"pon", HB_TAG('P','O','N',' ')},*/ /* Pohnpeian */
David Corbett17da41b2020-11-17 14:29:05 -05001141 {"pov", HB_TAG('C','P','P',' ')}, /* Upper Guinea Crioulo -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -04001142 {"ppa", HB_TAG('B','A','G',' ')}, /* Pao (retired code) -> Baghelkhandi */
David Corbett17da41b2020-11-17 14:29:05 -05001143 {"pre", HB_TAG('C','P','P',' ')}, /* Principense -> Creoles */
David Corbett6745a602019-04-16 17:29:34 -04001144/*{"pro", HB_TAG('P','R','O',' ')},*/ /* Old Provençal (to 1500) -> Provençal / Old Provençal */
David Corbett1ce11b42019-04-16 10:04:45 -04001145 {"prs", HB_TAG('D','R','I',' ')}, /* Dari */
David Corbettdec52002020-10-10 14:49:55 -04001146 {"prs", HB_TAG('F','A','R',' ')}, /* Dari -> Persian */
David Corbett1ce11b42019-04-16 10:04:45 -04001147 {"ps", HB_TAG('P','A','S',' ')}, /* Pashto [macrolanguage] */
1148 {"pse", HB_TAG('M','L','Y',' ')}, /* Central Malay -> Malay */
1149 {"pst", HB_TAG('P','A','S',' ')}, /* Central Pashto -> Pashto */
1150 {"pt", HB_TAG('P','T','G',' ')}, /* Portuguese */
David Corbett17da41b2020-11-17 14:29:05 -05001151 {"pub", HB_TAG('Q','I','N',' ')}, /* Purum -> Chin */
1152 {"puz", HB_TAG('Q','I','N',' ')}, /* Purum Naga (retired code) -> Chin */
1153 {"pwo", HB_TAG('P','W','O',' ')}, /* Pwo Western Karen -> Western Pwo Karen */
1154 {"pwo", HB_TAG('K','R','N',' ')}, /* Pwo Western Karen -> Karen */
1155 {"pww", HB_TAG('K','R','N',' ')}, /* Pwo Northern Karen -> Karen */
David Corbett1ce11b42019-04-16 10:04:45 -04001156 {"qu", HB_TAG('Q','U','Z',' ')}, /* Quechua [macrolanguage] */
1157 {"qub", HB_TAG('Q','W','H',' ')}, /* Huallaga Huánuco Quechua -> Quechua (Peru) */
David Corbettdec52002020-10-10 14:49:55 -04001158 {"qub", HB_TAG('Q','U','Z',' ')}, /* Huallaga Huánuco Quechua -> Quechua */
David Corbett17da41b2020-11-17 14:29:05 -05001159 {"quc", HB_TAG('Q','U','C',' ')}, /* K’iche’ */
1160 {"quc", HB_TAG('M','Y','N',' ')}, /* K'iche' -> Mayan */
David Corbett1ce11b42019-04-16 10:04:45 -04001161 {"qud", HB_TAG('Q','V','I',' ')}, /* Calderón Highland Quichua -> Quechua (Ecuador) */
David Corbettdec52002020-10-10 14:49:55 -04001162 {"qud", HB_TAG('Q','U','Z',' ')}, /* Calderón Highland Quichua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001163 {"quf", HB_TAG('Q','U','Z',' ')}, /* Lambayeque Quechua -> Quechua */
1164 {"qug", HB_TAG('Q','V','I',' ')}, /* Chimborazo Highland Quichua -> Quechua (Ecuador) */
David Corbettdec52002020-10-10 14:49:55 -04001165 {"qug", HB_TAG('Q','U','Z',' ')}, /* Chimborazo Highland Quichua -> Quechua */
1166 {"quh", HB_TAG('Q','U','H',' ')}, /* South Bolivian Quechua -> Quechua (Bolivia) */
1167 {"quh", HB_TAG('Q','U','Z',' ')}, /* South Bolivian Quechua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001168 {"quk", HB_TAG('Q','U','Z',' ')}, /* Chachapoyas Quechua -> Quechua */
David Corbette1df2c52020-10-26 19:16:35 -04001169 {"qul", HB_TAG('Q','U','H',' ')}, /* North Bolivian Quechua -> Quechua (Bolivia) */
David Corbett1ce11b42019-04-16 10:04:45 -04001170 {"qul", HB_TAG('Q','U','Z',' ')}, /* North Bolivian Quechua -> Quechua */
David Corbett17da41b2020-11-17 14:29:05 -05001171 {"qum", HB_TAG('M','Y','N',' ')}, /* Sipacapense -> Mayan */
David Corbett1ce11b42019-04-16 10:04:45 -04001172 {"qup", HB_TAG('Q','V','I',' ')}, /* Southern Pastaza Quechua -> Quechua (Ecuador) */
David Corbettdec52002020-10-10 14:49:55 -04001173 {"qup", HB_TAG('Q','U','Z',' ')}, /* Southern Pastaza Quechua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001174 {"qur", HB_TAG('Q','W','H',' ')}, /* Yanahuanca Pasco Quechua -> Quechua (Peru) */
David Corbettdec52002020-10-10 14:49:55 -04001175 {"qur", HB_TAG('Q','U','Z',' ')}, /* Yanahuanca Pasco Quechua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001176 {"qus", HB_TAG('Q','U','H',' ')}, /* Santiago del Estero Quichua -> Quechua (Bolivia) */
David Corbettdec52002020-10-10 14:49:55 -04001177 {"qus", HB_TAG('Q','U','Z',' ')}, /* Santiago del Estero Quichua -> Quechua */
David Corbett17da41b2020-11-17 14:29:05 -05001178 {"quv", HB_TAG('M','Y','N',' ')}, /* Sacapulteco -> Mayan */
David Corbett1ce11b42019-04-16 10:04:45 -04001179 {"quw", HB_TAG('Q','V','I',' ')}, /* Tena Lowland Quichua -> Quechua (Ecuador) */
David Corbettdec52002020-10-10 14:49:55 -04001180 {"quw", HB_TAG('Q','U','Z',' ')}, /* Tena Lowland Quichua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001181 {"qux", HB_TAG('Q','W','H',' ')}, /* Yauyos Quechua -> Quechua (Peru) */
David Corbettdec52002020-10-10 14:49:55 -04001182 {"qux", HB_TAG('Q','U','Z',' ')}, /* Yauyos Quechua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001183 {"quy", HB_TAG('Q','U','Z',' ')}, /* Ayacucho Quechua -> Quechua */
David Corbett6745a602019-04-16 17:29:34 -04001184/*{"quz", HB_TAG('Q','U','Z',' ')},*/ /* Cusco Quechua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001185 {"qva", HB_TAG('Q','W','H',' ')}, /* Ambo-Pasco Quechua -> Quechua (Peru) */
David Corbettdec52002020-10-10 14:49:55 -04001186 {"qva", HB_TAG('Q','U','Z',' ')}, /* Ambo-Pasco Quechua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001187 {"qvc", HB_TAG('Q','U','Z',' ')}, /* Cajamarca Quechua -> Quechua */
1188 {"qve", HB_TAG('Q','U','Z',' ')}, /* Eastern Apurímac Quechua -> Quechua */
1189 {"qvh", HB_TAG('Q','W','H',' ')}, /* Huamalíes-Dos de Mayo Huánuco Quechua -> Quechua (Peru) */
David Corbettdec52002020-10-10 14:49:55 -04001190 {"qvh", HB_TAG('Q','U','Z',' ')}, /* Huamalíes-Dos de Mayo Huánuco Quechua -> Quechua */
1191 {"qvi", HB_TAG('Q','V','I',' ')}, /* Imbabura Highland Quichua -> Quechua (Ecuador) */
1192 {"qvi", HB_TAG('Q','U','Z',' ')}, /* Imbabura Highland Quichua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001193 {"qvj", HB_TAG('Q','V','I',' ')}, /* Loja Highland Quichua -> Quechua (Ecuador) */
David Corbettdec52002020-10-10 14:49:55 -04001194 {"qvj", HB_TAG('Q','U','Z',' ')}, /* Loja Highland Quichua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001195 {"qvl", HB_TAG('Q','W','H',' ')}, /* Cajatambo North Lima Quechua -> Quechua (Peru) */
David Corbettdec52002020-10-10 14:49:55 -04001196 {"qvl", HB_TAG('Q','U','Z',' ')}, /* Cajatambo North Lima Quechua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001197 {"qvm", HB_TAG('Q','W','H',' ')}, /* Margos-Yarowilca-Lauricocha Quechua -> Quechua (Peru) */
David Corbettdec52002020-10-10 14:49:55 -04001198 {"qvm", HB_TAG('Q','U','Z',' ')}, /* Margos-Yarowilca-Lauricocha Quechua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001199 {"qvn", HB_TAG('Q','W','H',' ')}, /* North Junín Quechua -> Quechua (Peru) */
David Corbettdec52002020-10-10 14:49:55 -04001200 {"qvn", HB_TAG('Q','U','Z',' ')}, /* North Junín Quechua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001201 {"qvo", HB_TAG('Q','V','I',' ')}, /* Napo Lowland Quechua -> Quechua (Ecuador) */
David Corbettdec52002020-10-10 14:49:55 -04001202 {"qvo", HB_TAG('Q','U','Z',' ')}, /* Napo Lowland Quechua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001203 {"qvp", HB_TAG('Q','W','H',' ')}, /* Pacaraos Quechua -> Quechua (Peru) */
David Corbettdec52002020-10-10 14:49:55 -04001204 {"qvp", HB_TAG('Q','U','Z',' ')}, /* Pacaraos Quechua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001205 {"qvs", HB_TAG('Q','U','Z',' ')}, /* San Martín Quechua -> Quechua */
1206 {"qvw", HB_TAG('Q','W','H',' ')}, /* Huaylla Wanca Quechua -> Quechua (Peru) */
David Corbettdec52002020-10-10 14:49:55 -04001207 {"qvw", HB_TAG('Q','U','Z',' ')}, /* Huaylla Wanca Quechua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001208 {"qvz", HB_TAG('Q','V','I',' ')}, /* Northern Pastaza Quichua -> Quechua (Ecuador) */
David Corbettdec52002020-10-10 14:49:55 -04001209 {"qvz", HB_TAG('Q','U','Z',' ')}, /* Northern Pastaza Quichua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001210 {"qwa", HB_TAG('Q','W','H',' ')}, /* Corongo Ancash Quechua -> Quechua (Peru) */
David Corbettdec52002020-10-10 14:49:55 -04001211 {"qwa", HB_TAG('Q','U','Z',' ')}, /* Corongo Ancash Quechua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001212 {"qwc", HB_TAG('Q','U','Z',' ')}, /* Classical Quechua -> Quechua */
David Corbettdec52002020-10-10 14:49:55 -04001213 {"qwh", HB_TAG('Q','W','H',' ')}, /* Huaylas Ancash Quechua -> Quechua (Peru) */
1214 {"qwh", HB_TAG('Q','U','Z',' ')}, /* Huaylas Ancash Quechua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001215 {"qws", HB_TAG('Q','W','H',' ')}, /* Sihuas Ancash Quechua -> Quechua (Peru) */
David Corbettdec52002020-10-10 14:49:55 -04001216 {"qws", HB_TAG('Q','U','Z',' ')}, /* Sihuas Ancash Quechua -> Quechua */
David Corbett17da41b2020-11-17 14:29:05 -05001217 {"qwt", HB_TAG('A','T','H',' ')}, /* Kwalhioqua-Tlatskanai -> Athapaskan */
David Corbett1ce11b42019-04-16 10:04:45 -04001218 {"qxa", HB_TAG('Q','W','H',' ')}, /* Chiquián Ancash Quechua -> Quechua (Peru) */
David Corbettdec52002020-10-10 14:49:55 -04001219 {"qxa", HB_TAG('Q','U','Z',' ')}, /* Chiquián Ancash Quechua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001220 {"qxc", HB_TAG('Q','W','H',' ')}, /* Chincha Quechua -> Quechua (Peru) */
David Corbettdec52002020-10-10 14:49:55 -04001221 {"qxc", HB_TAG('Q','U','Z',' ')}, /* Chincha Quechua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001222 {"qxh", HB_TAG('Q','W','H',' ')}, /* Panao Huánuco Quechua -> Quechua (Peru) */
David Corbettdec52002020-10-10 14:49:55 -04001223 {"qxh", HB_TAG('Q','U','Z',' ')}, /* Panao Huánuco Quechua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001224 {"qxl", HB_TAG('Q','V','I',' ')}, /* Salasaca Highland Quichua -> Quechua (Ecuador) */
David Corbettdec52002020-10-10 14:49:55 -04001225 {"qxl", HB_TAG('Q','U','Z',' ')}, /* Salasaca Highland Quichua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001226 {"qxn", HB_TAG('Q','W','H',' ')}, /* Northern Conchucos Ancash Quechua -> Quechua (Peru) */
David Corbettdec52002020-10-10 14:49:55 -04001227 {"qxn", HB_TAG('Q','U','Z',' ')}, /* Northern Conchucos Ancash Quechua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001228 {"qxo", HB_TAG('Q','W','H',' ')}, /* Southern Conchucos Ancash Quechua -> Quechua (Peru) */
David Corbettdec52002020-10-10 14:49:55 -04001229 {"qxo", HB_TAG('Q','U','Z',' ')}, /* Southern Conchucos Ancash Quechua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001230 {"qxp", HB_TAG('Q','U','Z',' ')}, /* Puno Quechua -> Quechua */
1231 {"qxr", HB_TAG('Q','V','I',' ')}, /* Cañar Highland Quichua -> Quechua (Ecuador) */
David Corbettdec52002020-10-10 14:49:55 -04001232 {"qxr", HB_TAG('Q','U','Z',' ')}, /* Cañar Highland Quichua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001233 {"qxt", HB_TAG('Q','W','H',' ')}, /* Santa Ana de Tusi Pasco Quechua -> Quechua (Peru) */
David Corbettdec52002020-10-10 14:49:55 -04001234 {"qxt", HB_TAG('Q','U','Z',' ')}, /* Santa Ana de Tusi Pasco Quechua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001235 {"qxu", HB_TAG('Q','U','Z',' ')}, /* Arequipa-La Unión Quechua -> Quechua */
1236 {"qxw", HB_TAG('Q','W','H',' ')}, /* Jauja Wanca Quechua -> Quechua (Peru) */
David Corbettdec52002020-10-10 14:49:55 -04001237 {"qxw", HB_TAG('Q','U','Z',' ')}, /* Jauja Wanca Quechua -> Quechua */
David Corbett1ce11b42019-04-16 10:04:45 -04001238 {"rag", HB_TAG('L','U','H',' ')}, /* Logooli -> Luyia */
David Corbett6745a602019-04-16 17:29:34 -04001239/*{"raj", HB_TAG('R','A','J',' ')},*/ /* Rajasthani [macrolanguage] */
David Corbett17da41b2020-11-17 14:29:05 -05001240 {"ral", HB_TAG('Q','I','N',' ')}, /* Ralte -> Chin */
David Corbett6745a602019-04-16 17:29:34 -04001241/*{"rar", HB_TAG('R','A','R',' ')},*/ /* Rarotongan */
David Corbett1ce11b42019-04-16 10:04:45 -04001242 {"rbb", HB_TAG('P','L','G',' ')}, /* Rumai Palaung -> Palaung */
1243 {"rbl", HB_TAG('B','I','K',' ')}, /* Miraya Bikol -> Bikol */
David Corbett17da41b2020-11-17 14:29:05 -05001244 {"rcf", HB_TAG('C','P','P',' ')}, /* Réunion Creole French -> Creoles */
David Corbett6745a602019-04-16 17:29:34 -04001245/*{"rej", HB_TAG('R','E','J',' ')},*/ /* Rejang */
David Corbettf4559d22021-09-02 17:56:17 -04001246/*{"rhg", HB_TAG('R','H','G',' ')},*/ /* Rohingya */
David Corbett6745a602019-04-16 17:29:34 -04001247/*{"ria", HB_TAG('R','I','A',' ')},*/ /* Riang (India) */
David Corbett17da41b2020-11-17 14:29:05 -05001248 {"rif", HB_TAG('R','I','F',' ')}, /* Tarifit */
1249 {"rif", HB_TAG('B','B','R',' ')}, /* Tarifit -> Berber */
David Corbett7a961692020-04-01 17:26:07 -04001250/*{"rit", HB_TAG('R','I','T',' ')},*/ /* Ritharrngu -> Ritarungo */
David Corbett1ce11b42019-04-16 10:04:45 -04001251 {"rki", HB_TAG('A','R','K',' ')}, /* Rakhine */
David Corbett6745a602019-04-16 17:29:34 -04001252/*{"rkw", HB_TAG('R','K','W',' ')},*/ /* Arakwal */
David Corbett1ce11b42019-04-16 10:04:45 -04001253 {"rm", HB_TAG('R','M','S',' ')}, /* Romansh */
1254 {"rmc", HB_TAG('R','O','Y',' ')}, /* Carpathian Romani -> Romany */
1255 {"rmf", HB_TAG('R','O','Y',' ')}, /* Kalo Finnish Romani -> Romany */
1256 {"rml", HB_TAG('R','O','Y',' ')}, /* Baltic Romani -> Romany */
1257 {"rmn", HB_TAG('R','O','Y',' ')}, /* Balkan Romani -> Romany */
1258 {"rmo", HB_TAG('R','O','Y',' ')}, /* Sinte Romani -> Romany */
David Corbettb2e7bb22020-10-27 19:50:33 -04001259 {"rms", HB_TAG_NONE }, /* Romanian Sign Language != Romansh */
David Corbett1ce11b42019-04-16 10:04:45 -04001260 {"rmw", HB_TAG('R','O','Y',' ')}, /* Welsh Romani -> Romany */
David Corbettdec52002020-10-10 14:49:55 -04001261 {"rmy", HB_TAG('R','M','Y',' ')}, /* Vlax Romani */
1262 {"rmy", HB_TAG('R','O','Y',' ')}, /* Vlax Romani -> Romany */
David Corbett1ce11b42019-04-16 10:04:45 -04001263 {"rmz", HB_TAG('A','R','K',' ')}, /* Marma -> Rakhine */
1264 {"rn", HB_TAG('R','U','N',' ')}, /* Rundi */
David Corbett1ce11b42019-04-16 10:04:45 -04001265 {"ro", HB_TAG('R','O','M',' ')}, /* Romanian */
1266 {"rom", HB_TAG('R','O','Y',' ')}, /* Romany [macrolanguage] */
David Corbett17da41b2020-11-17 14:29:05 -05001267 {"rop", HB_TAG('C','P','P',' ')}, /* Kriol -> Creoles */
1268 {"rtc", HB_TAG('Q','I','N',' ')}, /* Rungtu Chin -> Chin */
David Corbett6745a602019-04-16 17:29:34 -04001269/*{"rtm", HB_TAG('R','T','M',' ')},*/ /* Rotuman */
David Corbett1ce11b42019-04-16 10:04:45 -04001270 {"ru", HB_TAG('R','U','S',' ')}, /* Russian */
1271 {"rue", HB_TAG('R','S','Y',' ')}, /* Rusyn */
David Corbett6745a602019-04-16 17:29:34 -04001272/*{"rup", HB_TAG('R','U','P',' ')},*/ /* Aromanian */
David Corbett1ce11b42019-04-16 10:04:45 -04001273 {"rw", HB_TAG('R','U','A',' ')}, /* Kinyarwanda */
1274 {"rwr", HB_TAG('M','A','W',' ')}, /* Marwari (India) */
1275 {"sa", HB_TAG('S','A','N',' ')}, /* Sanskrit */
David Corbettb2e7bb22020-10-27 19:50:33 -04001276 {"sad", HB_TAG_NONE }, /* Sandawe != Sadri */
David Corbett1ce11b42019-04-16 10:04:45 -04001277 {"sah", HB_TAG('Y','A','K',' ')}, /* Yakut -> Sakha */
1278 {"sam", HB_TAG('P','A','A',' ')}, /* Samaritan Aramaic -> Palestinian Aramaic */
David Corbett6745a602019-04-16 17:29:34 -04001279/*{"sas", HB_TAG('S','A','S',' ')},*/ /* Sasak */
1280/*{"sat", HB_TAG('S','A','T',' ')},*/ /* Santali */
David Corbettb2e7bb22020-10-27 19:50:33 -04001281 {"say", HB_TAG_NONE }, /* Saya != Sayisi */
David Corbett1ce11b42019-04-16 10:04:45 -04001282 {"sc", HB_TAG('S','R','D',' ')}, /* Sardinian [macrolanguage] */
David Corbett17da41b2020-11-17 14:29:05 -05001283 {"scf", HB_TAG('C','P','P',' ')}, /* San Miguel Creole French -> Creoles */
1284 {"sch", HB_TAG('Q','I','N',' ')}, /* Sakachep -> Chin */
1285 {"sci", HB_TAG('C','P','P',' ')}, /* Sri Lankan Creole Malay -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -04001286 {"sck", HB_TAG('S','A','D',' ')}, /* Sadri */
David Corbett6745a602019-04-16 17:29:34 -04001287/*{"scn", HB_TAG('S','C','N',' ')},*/ /* Sicilian */
1288/*{"sco", HB_TAG('S','C','O',' ')},*/ /* Scots */
David Corbett1ce11b42019-04-16 10:04:45 -04001289 {"scs", HB_TAG('S','C','S',' ')}, /* North Slavey */
1290 {"scs", HB_TAG('S','L','A',' ')}, /* North Slavey -> Slavey */
1291 {"scs", HB_TAG('A','T','H',' ')}, /* North Slavey -> Athapaskan */
1292 {"sd", HB_TAG('S','N','D',' ')}, /* Sindhi */
1293 {"sdc", HB_TAG('S','R','D',' ')}, /* Sassarese Sardinian -> Sardinian */
1294 {"sdh", HB_TAG('K','U','R',' ')}, /* Southern Kurdish -> Kurdish */
1295 {"sdn", HB_TAG('S','R','D',' ')}, /* Gallurese Sardinian -> Sardinian */
David Corbett17da41b2020-11-17 14:29:05 -05001296 {"sds", HB_TAG('B','B','R',' ')}, /* Sened -> Berber */
David Corbett1ce11b42019-04-16 10:04:45 -04001297 {"se", HB_TAG('N','S','M',' ')}, /* Northern Sami */
1298 {"seh", HB_TAG('S','N','A',' ')}, /* Sena */
1299 {"sek", HB_TAG('A','T','H',' ')}, /* Sekani -> Athapaskan */
David Corbett6745a602019-04-16 17:29:34 -04001300/*{"sel", HB_TAG('S','E','L',' ')},*/ /* Selkup */
David Corbett1ce11b42019-04-16 10:04:45 -04001301 {"sez", HB_TAG('Q','I','N',' ')}, /* Senthang Chin -> Chin */
David Corbettf4559d22021-09-02 17:56:17 -04001302 {"sfm", HB_TAG('S','F','M',' ')}, /* Small Flowery Miao */
David Corbett1ce11b42019-04-16 10:04:45 -04001303 {"sfm", HB_TAG('H','M','N',' ')}, /* Small Flowery Miao -> Hmong */
1304 {"sg", HB_TAG('S','G','O',' ')}, /* Sango */
David Corbett6745a602019-04-16 17:29:34 -04001305/*{"sga", HB_TAG('S','G','A',' ')},*/ /* Old Irish (to 900) */
David Corbett1ce11b42019-04-16 10:04:45 -04001306 {"sgc", HB_TAG('K','A','L',' ')}, /* Kipsigis -> Kalenjin */
David Corbettb2e7bb22020-10-27 19:50:33 -04001307 {"sgo", HB_TAG_NONE }, /* Songa (retired code) != Sango */
David Corbett6745a602019-04-16 17:29:34 -04001308/*{"sgs", HB_TAG('S','G','S',' ')},*/ /* Samogitian */
David Corbett1ce11b42019-04-16 10:04:45 -04001309 {"sgw", HB_TAG('C','H','G',' ')}, /* Sebat Bet Gurage -> Chaha Gurage */
David Corbett17da41b2020-11-17 14:29:05 -05001310 {"shi", HB_TAG('S','H','I',' ')}, /* Tachelhit */
1311 {"shi", HB_TAG('B','B','R',' ')}, /* Tachelhit -> Berber */
1312 {"shl", HB_TAG('Q','I','N',' ')}, /* Shendu -> Chin */
David Corbett6745a602019-04-16 17:29:34 -04001313/*{"shn", HB_TAG('S','H','N',' ')},*/ /* Shan */
David Corbett1ce11b42019-04-16 10:04:45 -04001314 {"shu", HB_TAG('A','R','A',' ')}, /* Chadian Arabic -> Arabic */
David Corbett17da41b2020-11-17 14:29:05 -05001315 {"shy", HB_TAG('B','B','R',' ')}, /* Tachawit -> Berber */
David Corbett1ce11b42019-04-16 10:04:45 -04001316 {"si", HB_TAG('S','N','H',' ')}, /* Sinhala (Sinhalese) */
David Corbettb2e7bb22020-10-27 19:50:33 -04001317 {"sib", HB_TAG_NONE }, /* Sebop != Sibe */
David Corbett6745a602019-04-16 17:29:34 -04001318/*{"sid", HB_TAG('S','I','D',' ')},*/ /* Sidamo */
David Corbettb2e7bb22020-10-27 19:50:33 -04001319 {"sig", HB_TAG_NONE }, /* Paasaal != Silte Gurage */
David Corbett17da41b2020-11-17 14:29:05 -05001320 {"siz", HB_TAG('B','B','R',' ')}, /* Siwi -> Berber */
David Corbett1ce11b42019-04-16 10:04:45 -04001321 {"sjd", HB_TAG('K','S','M',' ')}, /* Kildin Sami */
1322 {"sjo", HB_TAG('S','I','B',' ')}, /* Xibe -> Sibe */
David Corbett17da41b2020-11-17 14:29:05 -05001323 {"sjs", HB_TAG('B','B','R',' ')}, /* Senhaja De Srair -> Berber */
David Corbett1ce11b42019-04-16 10:04:45 -04001324 {"sk", HB_TAG('S','K','Y',' ')}, /* Slovak */
1325 {"skg", HB_TAG('M','L','G',' ')}, /* Sakalava Malagasy -> Malagasy */
1326 {"skr", HB_TAG('S','R','K',' ')}, /* Saraiki */
David Corbettb2e7bb22020-10-27 19:50:33 -04001327 {"sks", HB_TAG_NONE }, /* Maia != Skolt Sami */
David Corbett17da41b2020-11-17 14:29:05 -05001328 {"skw", HB_TAG('C','P','P',' ')}, /* Skepi Creole Dutch -> Creoles */
David Corbettb2e7bb22020-10-27 19:50:33 -04001329 {"sky", HB_TAG_NONE }, /* Sikaiana != Slovak */
David Corbett1ce11b42019-04-16 10:04:45 -04001330 {"sl", HB_TAG('S','L','V',' ')}, /* Slovenian */
David Corbettb2e7bb22020-10-27 19:50:33 -04001331 {"sla", HB_TAG_NONE }, /* Slavic [family] != Slavey */
David Corbett1ce11b42019-04-16 10:04:45 -04001332 {"sm", HB_TAG('S','M','O',' ')}, /* Samoan */
1333 {"sma", HB_TAG('S','S','M',' ')}, /* Southern Sami */
1334 {"smj", HB_TAG('L','S','M',' ')}, /* Lule Sami */
David Corbettb2e7bb22020-10-27 19:50:33 -04001335 {"sml", HB_TAG_NONE }, /* Central Sama != Somali */
David Corbett1ce11b42019-04-16 10:04:45 -04001336 {"smn", HB_TAG('I','S','M',' ')}, /* Inari Sami */
1337 {"sms", HB_TAG('S','K','S',' ')}, /* Skolt Sami */
David Corbett17da41b2020-11-17 14:29:05 -05001338 {"smt", HB_TAG('Q','I','N',' ')}, /* Simte -> Chin */
David Corbett1ce11b42019-04-16 10:04:45 -04001339 {"sn", HB_TAG('S','N','A','0')}, /* Shona */
David Corbettb2e7bb22020-10-27 19:50:33 -04001340 {"snh", HB_TAG_NONE }, /* Shinabo (retired code) != Sinhala (Sinhalese) */
David Corbett6745a602019-04-16 17:29:34 -04001341/*{"snk", HB_TAG('S','N','K',' ')},*/ /* Soninke */
David Corbett1ce11b42019-04-16 10:04:45 -04001342 {"so", HB_TAG('S','M','L',' ')}, /* Somali */
David Corbettb2e7bb22020-10-27 19:50:33 -04001343 {"sog", HB_TAG_NONE }, /* Sogdian != Sodo Gurage */
David Corbett6745a602019-04-16 17:29:34 -04001344/*{"sop", HB_TAG('S','O','P',' ')},*/ /* Songe */
David Corbett1ce11b42019-04-16 10:04:45 -04001345 {"spv", HB_TAG('O','R','I',' ')}, /* Sambalpuri -> Odia (formerly Oriya) */
1346 {"spy", HB_TAG('K','A','L',' ')}, /* Sabaot -> Kalenjin */
1347 {"sq", HB_TAG('S','Q','I',' ')}, /* Albanian [macrolanguage] */
1348 {"sr", HB_TAG('S','R','B',' ')}, /* Serbian */
David Corbettb2e7bb22020-10-27 19:50:33 -04001349 {"srb", HB_TAG_NONE }, /* Sora != Serbian */
David Corbett1ce11b42019-04-16 10:04:45 -04001350 {"src", HB_TAG('S','R','D',' ')}, /* Logudorese Sardinian -> Sardinian */
David Corbettb2e7bb22020-10-27 19:50:33 -04001351 {"srk", HB_TAG_NONE }, /* Serudung Murut != Saraiki */
David Corbett17da41b2020-11-17 14:29:05 -05001352 {"srm", HB_TAG('C','P','P',' ')}, /* Saramaccan -> Creoles */
1353 {"srn", HB_TAG('C','P','P',' ')}, /* Sranan Tongo -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -04001354 {"sro", HB_TAG('S','R','D',' ')}, /* Campidanese Sardinian -> Sardinian */
David Corbett6745a602019-04-16 17:29:34 -04001355/*{"srr", HB_TAG('S','R','R',' ')},*/ /* Serer */
David Corbett1ce11b42019-04-16 10:04:45 -04001356 {"srs", HB_TAG('A','T','H',' ')}, /* Sarsi -> Athapaskan */
1357 {"ss", HB_TAG('S','W','Z',' ')}, /* Swati */
1358 {"ssh", HB_TAG('A','R','A',' ')}, /* Shihhi Arabic -> Arabic */
David Corbettb2e7bb22020-10-27 19:50:33 -04001359 {"ssl", HB_TAG_NONE }, /* Western Sisaala != South Slavey */
1360 {"ssm", HB_TAG_NONE }, /* Semnam != Southern Sami */
David Corbett17da41b2020-11-17 14:29:05 -05001361 {"st", HB_TAG('S','O','T',' ')}, /* Southern Sotho */
1362 {"sta", HB_TAG('C','P','P',' ')}, /* Settla -> Creoles */
David Corbett6745a602019-04-16 17:29:34 -04001363/*{"stq", HB_TAG('S','T','Q',' ')},*/ /* Saterfriesisch -> Saterland Frisian */
David Corbett1ce11b42019-04-16 10:04:45 -04001364 {"stv", HB_TAG('S','I','G',' ')}, /* Silt'e -> Silte Gurage */
1365 {"su", HB_TAG('S','U','N',' ')}, /* Sundanese */
David Corbett6745a602019-04-16 17:29:34 -04001366/*{"suk", HB_TAG('S','U','K',' ')},*/ /* Sukuma */
David Corbett1ce11b42019-04-16 10:04:45 -04001367 {"suq", HB_TAG('S','U','R',' ')}, /* Suri */
David Corbettb2e7bb22020-10-27 19:50:33 -04001368 {"sur", HB_TAG_NONE }, /* Mwaghavul != Suri */
David Corbett1ce11b42019-04-16 10:04:45 -04001369 {"sv", HB_TAG('S','V','E',' ')}, /* Swedish */
David Corbett6745a602019-04-16 17:29:34 -04001370/*{"sva", HB_TAG('S','V','A',' ')},*/ /* Svan */
David Corbett17da41b2020-11-17 14:29:05 -05001371 {"svc", HB_TAG('C','P','P',' ')}, /* Vincentian Creole English -> Creoles */
David Corbettb2e7bb22020-10-27 19:50:33 -04001372 {"sve", HB_TAG_NONE }, /* Serili != Swedish */
David Corbett1ce11b42019-04-16 10:04:45 -04001373 {"sw", HB_TAG('S','W','K',' ')}, /* Swahili [macrolanguage] */
1374 {"swb", HB_TAG('C','M','R',' ')}, /* Maore Comorian -> Comorian */
1375 {"swc", HB_TAG('S','W','K',' ')}, /* Congo Swahili -> Swahili */
1376 {"swh", HB_TAG('S','W','K',' ')}, /* Swahili */
David Corbettb2e7bb22020-10-27 19:50:33 -04001377 {"swk", HB_TAG_NONE }, /* Malawi Sena != Swahili */
David Corbett17da41b2020-11-17 14:29:05 -05001378 {"swn", HB_TAG('B','B','R',' ')}, /* Sawknah -> Berber */
David Corbett1ce11b42019-04-16 10:04:45 -04001379 {"swv", HB_TAG('M','A','W',' ')}, /* Shekhawati -> Marwari */
David Corbett6745a602019-04-16 17:29:34 -04001380/*{"sxu", HB_TAG('S','X','U',' ')},*/ /* Upper Saxon */
David Corbett1ce11b42019-04-16 10:04:45 -04001381 {"syc", HB_TAG('S','Y','R',' ')}, /* Classical Syriac -> Syriac */
David Corbett6745a602019-04-16 17:29:34 -04001382/*{"syl", HB_TAG('S','Y','L',' ')},*/ /* Sylheti */
1383/*{"syr", HB_TAG('S','Y','R',' ')},*/ /* Syriac [macrolanguage] */
1384/*{"szl", HB_TAG('S','Z','L',' ')},*/ /* Silesian */
David Corbett1ce11b42019-04-16 10:04:45 -04001385 {"ta", HB_TAG('T','A','M',' ')}, /* Tamil */
1386 {"taa", HB_TAG('A','T','H',' ')}, /* Lower Tanana -> Athapaskan */
David Corbett6745a602019-04-16 17:29:34 -04001387/*{"tab", HB_TAG('T','A','B',' ')},*/ /* Tabassaran -> Tabasaran */
David Corbettb2e7bb22020-10-27 19:50:33 -04001388 {"taj", HB_TAG_NONE }, /* Eastern Tamang != Tajiki */
David Corbett1ce11b42019-04-16 10:04:45 -04001389 {"taq", HB_TAG('T','M','H',' ')}, /* Tamasheq -> Tamashek */
David Corbett17da41b2020-11-17 14:29:05 -05001390 {"taq", HB_TAG('B','B','R',' ')}, /* Tamasheq -> Berber */
1391 {"tas", HB_TAG('C','P','P',' ')}, /* Tay Boi -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -04001392 {"tau", HB_TAG('A','T','H',' ')}, /* Upper Tanana -> Athapaskan */
1393 {"tcb", HB_TAG('A','T','H',' ')}, /* Tanacross -> Athapaskan */
1394 {"tce", HB_TAG('A','T','H',' ')}, /* Southern Tutchone -> Athapaskan */
David Corbett17da41b2020-11-17 14:29:05 -05001395 {"tch", HB_TAG('C','P','P',' ')}, /* Turks And Caicos Creole English -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -04001396 {"tcp", HB_TAG('Q','I','N',' ')}, /* Tawr Chin -> Chin */
David Corbett17da41b2020-11-17 14:29:05 -05001397 {"tcs", HB_TAG('C','P','P',' ')}, /* Torres Strait Creole -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -04001398 {"tcy", HB_TAG('T','U','L',' ')}, /* Tulu -> Tumbuka */
1399 {"tcz", HB_TAG('Q','I','N',' ')}, /* Thado Chin -> Chin */
David Corbett6745a602019-04-16 17:29:34 -04001400/*{"tdd", HB_TAG('T','D','D',' ')},*/ /* Tai Nüa -> Dehong Dai */
David Corbett1ce11b42019-04-16 10:04:45 -04001401 {"tdx", HB_TAG('M','L','G',' ')}, /* Tandroy-Mahafaly Malagasy -> Malagasy */
1402 {"te", HB_TAG('T','E','L',' ')}, /* Telugu */
1403 {"tec", HB_TAG('K','A','L',' ')}, /* Terik -> Kalenjin */
1404 {"tem", HB_TAG('T','M','N',' ')}, /* Timne -> Temne */
David Corbett6745a602019-04-16 17:29:34 -04001405/*{"tet", HB_TAG('T','E','T',' ')},*/ /* Tetum */
David Corbett17da41b2020-11-17 14:29:05 -05001406 {"tez", HB_TAG('B','B','R',' ')}, /* Tetserret -> Berber */
David Corbett1ce11b42019-04-16 10:04:45 -04001407 {"tfn", HB_TAG('A','T','H',' ')}, /* Tanaina -> Athapaskan */
1408 {"tg", HB_TAG('T','A','J',' ')}, /* Tajik -> Tajiki */
David Corbett17da41b2020-11-17 14:29:05 -05001409 {"tgh", HB_TAG('C','P','P',' ')}, /* Tobagonian Creole English -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -04001410 {"tgj", HB_TAG('N','I','S',' ')}, /* Tagin -> Nisi */
David Corbettb2e7bb22020-10-27 19:50:33 -04001411 {"tgn", HB_TAG_NONE }, /* Tandaganon != Tongan */
1412 {"tgr", HB_TAG_NONE }, /* Tareng != Tigre */
David Corbett1ce11b42019-04-16 10:04:45 -04001413 {"tgx", HB_TAG('A','T','H',' ')}, /* Tagish -> Athapaskan */
David Corbettb2e7bb22020-10-27 19:50:33 -04001414 {"tgy", HB_TAG_NONE }, /* Togoyo != Tigrinya */
David Corbett1ce11b42019-04-16 10:04:45 -04001415 {"th", HB_TAG('T','H','A',' ')}, /* Thai */
1416 {"tht", HB_TAG('A','T','H',' ')}, /* Tahltan -> Athapaskan */
1417 {"thv", HB_TAG('T','M','H',' ')}, /* Tahaggart Tamahaq -> Tamashek */
David Corbett17da41b2020-11-17 14:29:05 -05001418 {"thv", HB_TAG('B','B','R',' ')}, /* Tahaggart Tamahaq -> Berber */
David Corbett1ce11b42019-04-16 10:04:45 -04001419 {"thz", HB_TAG('T','M','H',' ')}, /* Tayart Tamajeq -> Tamashek */
David Corbett17da41b2020-11-17 14:29:05 -05001420 {"thz", HB_TAG('B','B','R',' ')}, /* Tayart Tamajeq -> Berber */
David Corbett1ce11b42019-04-16 10:04:45 -04001421 {"ti", HB_TAG('T','G','Y',' ')}, /* Tigrinya */
David Corbett17da41b2020-11-17 14:29:05 -05001422 {"tia", HB_TAG('B','B','R',' ')}, /* Tidikelt Tamazight -> Berber */
David Corbett1ce11b42019-04-16 10:04:45 -04001423 {"tig", HB_TAG('T','G','R',' ')}, /* Tigre */
David Corbett6745a602019-04-16 17:29:34 -04001424/*{"tiv", HB_TAG('T','I','V',' ')},*/ /* Tiv */
David Corbett17da41b2020-11-17 14:29:05 -05001425 {"tjo", HB_TAG('B','B','R',' ')}, /* Temacine Tamazight -> Berber */
David Corbett1ce11b42019-04-16 10:04:45 -04001426 {"tk", HB_TAG('T','K','M',' ')}, /* Turkmen */
1427 {"tkg", HB_TAG('M','L','G',' ')}, /* Tesaka Malagasy -> Malagasy */
David Corbettb2e7bb22020-10-27 19:50:33 -04001428 {"tkm", HB_TAG_NONE }, /* Takelma != Turkmen */
David Corbett1ce11b42019-04-16 10:04:45 -04001429 {"tl", HB_TAG('T','G','L',' ')}, /* Tagalog */
David Corbettf4559d22021-09-02 17:56:17 -04001430/*{"tli", HB_TAG('T','L','I',' ')},*/ /* Tlingit */
David Corbett17da41b2020-11-17 14:29:05 -05001431 {"tmg", HB_TAG('C','P','P',' ')}, /* Ternateño -> Creoles */
1432 {"tmh", HB_TAG('T','M','H',' ')}, /* Tamashek [macrolanguage] */
1433 {"tmh", HB_TAG('B','B','R',' ')}, /* Tamashek [macrolanguage] -> Berber */
David Corbettb2e7bb22020-10-27 19:50:33 -04001434 {"tmn", HB_TAG_NONE }, /* Taman (Indonesia) != Temne */
David Corbett1ce11b42019-04-16 10:04:45 -04001435 {"tmw", HB_TAG('M','L','Y',' ')}, /* Temuan -> Malay */
1436 {"tn", HB_TAG('T','N','A',' ')}, /* Tswana */
David Corbettb2e7bb22020-10-27 19:50:33 -04001437 {"tna", HB_TAG_NONE }, /* Tacana != Tswana */
1438 {"tne", HB_TAG_NONE }, /* Tinoc Kallahan (retired code) != Tundra Enets */
David Corbett1ce11b42019-04-16 10:04:45 -04001439 {"tnf", HB_TAG('D','R','I',' ')}, /* Tangshewi (retired code) -> Dari */
David Corbettdec52002020-10-10 14:49:55 -04001440 {"tnf", HB_TAG('F','A','R',' ')}, /* Tangshewi (retired code) -> Persian */
David Corbettb2e7bb22020-10-27 19:50:33 -04001441 {"tng", HB_TAG_NONE }, /* Tobanga != Tonga */
David Corbett1ce11b42019-04-16 10:04:45 -04001442 {"to", HB_TAG('T','G','N',' ')}, /* Tonga (Tonga Islands) -> Tongan */
1443 {"tod", HB_TAG('T','O','D','0')}, /* Toma */
1444 {"toi", HB_TAG('T','N','G',' ')}, /* Tonga (Zambia) */
David Corbett17da41b2020-11-17 14:29:05 -05001445 {"toj", HB_TAG('M','Y','N',' ')}, /* Tojolabal -> Mayan */
David Corbett1ce11b42019-04-16 10:04:45 -04001446 {"tol", HB_TAG('A','T','H',' ')}, /* Tolowa -> Athapaskan */
David Corbett17da41b2020-11-17 14:29:05 -05001447 {"tor", HB_TAG('B','A','D','0')}, /* Togbo-Vara Banda -> Banda */
1448 {"tpi", HB_TAG('T','P','I',' ')}, /* Tok Pisin */
1449 {"tpi", HB_TAG('C','P','P',' ')}, /* Tok Pisin -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -04001450 {"tr", HB_TAG('T','R','K',' ')}, /* Turkish */
David Corbett17da41b2020-11-17 14:29:05 -05001451 {"trf", HB_TAG('C','P','P',' ')}, /* Trinidadian Creole English -> Creoles */
David Corbettb2e7bb22020-10-27 19:50:33 -04001452 {"trk", HB_TAG_NONE }, /* Turkic [family] != Turkish */
David Corbett1ce11b42019-04-16 10:04:45 -04001453 {"tru", HB_TAG('T','U','A',' ')}, /* Turoyo -> Turoyo Aramaic */
1454 {"tru", HB_TAG('S','Y','R',' ')}, /* Turoyo -> Syriac */
1455 {"ts", HB_TAG('T','S','G',' ')}, /* Tsonga */
David Corbettb2e7bb22020-10-27 19:50:33 -04001456 {"tsg", HB_TAG_NONE }, /* Tausug != Tsonga */
David Corbett6745a602019-04-16 17:29:34 -04001457/*{"tsj", HB_TAG('T','S','J',' ')},*/ /* Tshangla */
David Corbett1ce11b42019-04-16 10:04:45 -04001458 {"tt", HB_TAG('T','A','T',' ')}, /* Tatar */
David Corbett17da41b2020-11-17 14:29:05 -05001459 {"ttc", HB_TAG('M','Y','N',' ')}, /* Tektiteko -> Mayan */
David Corbett1ce11b42019-04-16 10:04:45 -04001460 {"ttm", HB_TAG('A','T','H',' ')}, /* Northern Tutchone -> Athapaskan */
1461 {"ttq", HB_TAG('T','M','H',' ')}, /* Tawallammat Tamajaq -> Tamashek */
David Corbett17da41b2020-11-17 14:29:05 -05001462 {"ttq", HB_TAG('B','B','R',' ')}, /* Tawallammat Tamajaq -> Berber */
David Corbettb2e7bb22020-10-27 19:50:33 -04001463 {"tua", HB_TAG_NONE }, /* Wiarumus != Turoyo Aramaic */
1464 {"tul", HB_TAG_NONE }, /* Tula != Tumbuka */
David Corbett6745a602019-04-16 17:29:34 -04001465/*{"tum", HB_TAG('T','U','M',' ')},*/ /* Tumbuka -> Tulu */
David Corbett1ce11b42019-04-16 10:04:45 -04001466 {"tuu", HB_TAG('A','T','H',' ')}, /* Tututni -> Athapaskan */
David Corbettb2e7bb22020-10-27 19:50:33 -04001467 {"tuv", HB_TAG_NONE }, /* Turkana != Tuvin */
David Corbett1ce11b42019-04-16 10:04:45 -04001468 {"tuy", HB_TAG('K','A','L',' ')}, /* Tugen -> Kalenjin */
David Corbett6745a602019-04-16 17:29:34 -04001469/*{"tvl", HB_TAG('T','V','L',' ')},*/ /* Tuvalu */
David Corbett17da41b2020-11-17 14:29:05 -05001470 {"tvy", HB_TAG('C','P','P',' ')}, /* Timor Pidgin -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -04001471 {"tw", HB_TAG('T','W','I',' ')}, /* Twi */
1472 {"tw", HB_TAG('A','K','A',' ')}, /* Twi -> Akan */
1473 {"txc", HB_TAG('A','T','H',' ')}, /* Tsetsaut -> Athapaskan */
1474 {"txy", HB_TAG('M','L','G',' ')}, /* Tanosy Malagasy -> Malagasy */
1475 {"ty", HB_TAG('T','H','T',' ')}, /* Tahitian */
1476 {"tyv", HB_TAG('T','U','V',' ')}, /* Tuvinian -> Tuvin */
David Corbett6745a602019-04-16 17:29:34 -04001477/*{"tyz", HB_TAG('T','Y','Z',' ')},*/ /* Tày */
David Corbett17da41b2020-11-17 14:29:05 -05001478 {"tzh", HB_TAG('M','Y','N',' ')}, /* Tzeltal -> Mayan */
1479 {"tzj", HB_TAG('M','Y','N',' ')}, /* Tz'utujil -> Mayan */
1480 {"tzm", HB_TAG('T','Z','M',' ')}, /* Central Atlas Tamazight -> Tamazight */
1481 {"tzm", HB_TAG('B','B','R',' ')}, /* Central Atlas Tamazight -> Berber */
1482 {"tzo", HB_TAG('T','Z','O',' ')}, /* Tzotzil */
1483 {"tzo", HB_TAG('M','Y','N',' ')}, /* Tzotzil -> Mayan */
David Corbett1ce11b42019-04-16 10:04:45 -04001484 {"ubl", HB_TAG('B','I','K',' ')}, /* Buhi'non Bikol -> Bikol */
David Corbett6745a602019-04-16 17:29:34 -04001485/*{"udm", HB_TAG('U','D','M',' ')},*/ /* Udmurt */
David Corbett1ce11b42019-04-16 10:04:45 -04001486 {"ug", HB_TAG('U','Y','G',' ')}, /* Uyghur */
1487 {"uk", HB_TAG('U','K','R',' ')}, /* Ukrainian */
David Corbett7a961692020-04-01 17:26:07 -04001488 {"uki", HB_TAG('K','U','I',' ')}, /* Kui (India) */
David Corbett17da41b2020-11-17 14:29:05 -05001489 {"uln", HB_TAG('C','P','P',' ')}, /* Unserdeutsch -> Creoles */
David Corbett6745a602019-04-16 17:29:34 -04001490/*{"umb", HB_TAG('U','M','B',' ')},*/ /* Umbundu */
David Corbett1ce11b42019-04-16 10:04:45 -04001491 {"unr", HB_TAG('M','U','N',' ')}, /* Mundari */
1492 {"ur", HB_TAG('U','R','D',' ')}, /* Urdu */
1493 {"urk", HB_TAG('M','L','Y',' ')}, /* Urak Lawoi' -> Malay */
David Corbett17da41b2020-11-17 14:29:05 -05001494 {"usp", HB_TAG('M','Y','N',' ')}, /* Uspanteco -> Mayan */
David Corbett1ce11b42019-04-16 10:04:45 -04001495 {"uz", HB_TAG('U','Z','B',' ')}, /* Uzbek [macrolanguage] */
1496 {"uzn", HB_TAG('U','Z','B',' ')}, /* Northern Uzbek -> Uzbek */
1497 {"uzs", HB_TAG('U','Z','B',' ')}, /* Southern Uzbek -> Uzbek */
David Corbett17da41b2020-11-17 14:29:05 -05001498 {"vap", HB_TAG('Q','I','N',' ')}, /* Vaiphei -> Chin */
David Corbett1ce11b42019-04-16 10:04:45 -04001499 {"ve", HB_TAG('V','E','N',' ')}, /* Venda */
David Corbett6745a602019-04-16 17:29:34 -04001500/*{"vec", HB_TAG('V','E','C',' ')},*/ /* Venetian */
David Corbett1ce11b42019-04-16 10:04:45 -04001501 {"vi", HB_TAG('V','I','T',' ')}, /* Vietnamese */
David Corbett17da41b2020-11-17 14:29:05 -05001502 {"vic", HB_TAG('C','P','P',' ')}, /* Virgin Islands Creole English -> Creoles */
David Corbettb2e7bb22020-10-27 19:50:33 -04001503 {"vit", HB_TAG_NONE }, /* Viti != Vietnamese */
David Corbett1ce11b42019-04-16 10:04:45 -04001504 {"vkk", HB_TAG('M','L','Y',' ')}, /* Kaur -> Malay */
David Corbett17da41b2020-11-17 14:29:05 -05001505 {"vkp", HB_TAG('C','P','P',' ')}, /* Korlai Creole Portuguese -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -04001506 {"vkt", HB_TAG('M','L','Y',' ')}, /* Tenggarong Kutai Malay -> Malay */
1507 {"vls", HB_TAG('F','L','E',' ')}, /* Vlaams -> Dutch (Flemish) */
1508 {"vmw", HB_TAG('M','A','K',' ')}, /* Makhuwa */
1509 {"vo", HB_TAG('V','O','L',' ')}, /* Volapük */
David Corbett6745a602019-04-16 17:29:34 -04001510/*{"vro", HB_TAG('V','R','O',' ')},*/ /* Võro */
David Corbett1ce11b42019-04-16 10:04:45 -04001511 {"wa", HB_TAG('W','L','N',' ')}, /* Walloon */
David Corbettb2e7bb22020-10-27 19:50:33 -04001512 {"wag", HB_TAG_NONE }, /* Wa'ema != Wagdi */
David Corbett6745a602019-04-16 17:29:34 -04001513/*{"war", HB_TAG('W','A','R',' ')},*/ /* Waray (Philippines) -> Waray-Waray */
David Corbett1ce11b42019-04-16 10:04:45 -04001514 {"wbm", HB_TAG('W','A',' ',' ')}, /* Wa */
1515 {"wbr", HB_TAG('W','A','G',' ')}, /* Wagdi */
David Corbettdec52002020-10-10 14:49:55 -04001516 {"wbr", HB_TAG('R','A','J',' ')}, /* Wagdi -> Rajasthani */
David Corbettf4559d22021-09-02 17:56:17 -04001517/*{"wci", HB_TAG('W','C','I',' ')},*/ /* Waci Gbe */
David Corbett17da41b2020-11-17 14:29:05 -05001518 {"wea", HB_TAG('K','R','N',' ')}, /* Wewaw -> Karen */
1519 {"wes", HB_TAG('C','P','P',' ')}, /* Cameroon Pidgin -> Creoles */
1520 {"weu", HB_TAG('Q','I','N',' ')}, /* Rawngtu Chin -> Chin */
David Corbett1ce11b42019-04-16 10:04:45 -04001521 {"wlc", HB_TAG('C','M','R',' ')}, /* Mwali Comorian -> Comorian */
1522 {"wle", HB_TAG('S','I','G',' ')}, /* Wolane -> Silte Gurage */
1523 {"wlk", HB_TAG('A','T','H',' ')}, /* Wailaki -> Athapaskan */
1524 {"wni", HB_TAG('C','M','R',' ')}, /* Ndzwani Comorian -> Comorian */
1525 {"wo", HB_TAG('W','L','F',' ')}, /* Wolof */
1526 {"wry", HB_TAG('M','A','W',' ')}, /* Merwari -> Marwari */
1527 {"wsg", HB_TAG('G','O','N',' ')}, /* Adilabad Gondi -> Gondi */
David Corbett6745a602019-04-16 17:29:34 -04001528/*{"wtm", HB_TAG('W','T','M',' ')},*/ /* Mewati */
David Corbett17da41b2020-11-17 14:29:05 -05001529 {"wuu", HB_TAG('Z','H','S',' ')}, /* Wu Chinese -> Chinese, Simplified */
David Corbett1ce11b42019-04-16 10:04:45 -04001530 {"xal", HB_TAG('K','L','M',' ')}, /* Kalmyk */
1531 {"xal", HB_TAG('T','O','D',' ')}, /* Kalmyk -> Todo */
1532 {"xan", HB_TAG('S','E','K',' ')}, /* Xamtanga -> Sekota */
David Corbettb2e7bb22020-10-27 19:50:33 -04001533 {"xbd", HB_TAG_NONE }, /* Bindal != Lü */
David Corbett1ce11b42019-04-16 10:04:45 -04001534 {"xh", HB_TAG('X','H','S',' ')}, /* Xhosa */
David Corbett6745a602019-04-16 17:29:34 -04001535/*{"xjb", HB_TAG('X','J','B',' ')},*/ /* Minjungbal -> Minjangbal */
1536/*{"xkf", HB_TAG('X','K','F',' ')},*/ /* Khengkha */
David Corbett17da41b2020-11-17 14:29:05 -05001537 {"xmg", HB_TAG('B','M','L',' ')}, /* Mengaka -> Bamileke */
David Corbett1ce11b42019-04-16 10:04:45 -04001538 {"xmm", HB_TAG('M','L','Y',' ')}, /* Manado Malay -> Malay */
David Corbett17da41b2020-11-17 14:29:05 -05001539 {"xmm", HB_TAG('C','P','P',' ')}, /* Manado Malay -> Creoles */
David Corbett1ce11b42019-04-16 10:04:45 -04001540 {"xmv", HB_TAG('M','L','G',' ')}, /* Antankarana Malagasy -> Malagasy */
1541 {"xmw", HB_TAG('M','L','G',' ')}, /* Tsimihety Malagasy -> Malagasy */
David Corbette19de652021-03-08 13:12:47 -05001542 {"xnj", HB_TAG('S','X','T',' ')}, /* Ngoni (Tanzania) -> Sutu */
1543 {"xnq", HB_TAG('S','X','T',' ')}, /* Ngoni (Mozambique) -> Sutu */
David Corbett17da41b2020-11-17 14:29:05 -05001544 {"xnr", HB_TAG('D','G','R',' ')}, /* Kangri -> Dogri (macrolanguage) */
David Corbett6745a602019-04-16 17:29:34 -04001545/*{"xog", HB_TAG('X','O','G',' ')},*/ /* Soga */
David Corbettdec52002020-10-10 14:49:55 -04001546 {"xpe", HB_TAG('X','P','E',' ')}, /* Liberia Kpelle -> Kpelle (Liberia) */
1547 {"xpe", HB_TAG('K','P','L',' ')}, /* Liberia Kpelle -> Kpelle */
David Corbett1ce11b42019-04-16 10:04:45 -04001548 {"xsl", HB_TAG('S','S','L',' ')}, /* South Slavey */
1549 {"xsl", HB_TAG('S','L','A',' ')}, /* South Slavey -> Slavey */
1550 {"xsl", HB_TAG('A','T','H',' ')}, /* South Slavey -> Athapaskan */
1551 {"xst", HB_TAG('S','I','G',' ')}, /* Silt'e (retired code) -> Silte Gurage */
David Corbettf4559d22021-09-02 17:56:17 -04001552/*{"xub", HB_TAG('X','U','B',' ')},*/ /* Betta Kurumba -> Bette Kuruma */
1553/*{"xuj", HB_TAG('X','U','J',' ')},*/ /* Jennu Kurumba -> Jennu Kuruma */
David Corbett17da41b2020-11-17 14:29:05 -05001554 {"xup", HB_TAG('A','T','H',' ')}, /* Upper Umpqua -> Athapaskan */
David Corbett1ce11b42019-04-16 10:04:45 -04001555 {"xwo", HB_TAG('T','O','D',' ')}, /* Written Oirat -> Todo */
David Corbett17da41b2020-11-17 14:29:05 -05001556 {"yaj", HB_TAG('B','A','D','0')}, /* Banda-Yangere -> Banda */
David Corbettb2e7bb22020-10-27 19:50:33 -04001557 {"yak", HB_TAG_NONE }, /* Yakama != Sakha */
David Corbett6745a602019-04-16 17:29:34 -04001558/*{"yao", HB_TAG('Y','A','O',' ')},*/ /* Yao */
1559/*{"yap", HB_TAG('Y','A','P',' ')},*/ /* Yapese */
David Corbettb2e7bb22020-10-27 19:50:33 -04001560 {"yba", HB_TAG_NONE }, /* Yala != Yoruba */
David Corbett17da41b2020-11-17 14:29:05 -05001561 {"ybb", HB_TAG('B','M','L',' ')}, /* Yemba -> Bamileke */
David Corbett1ce11b42019-04-16 10:04:45 -04001562 {"ybd", HB_TAG('A','R','K',' ')}, /* Yangbye (retired code) -> Rakhine */
1563 {"ydd", HB_TAG('J','I','I',' ')}, /* Eastern Yiddish -> Yiddish */
David Corbettf4559d22021-09-02 17:56:17 -04001564/*{"ygp", HB_TAG('Y','G','P',' ')},*/ /* Gepo */
David Corbett1ce11b42019-04-16 10:04:45 -04001565 {"yi", HB_TAG('J','I','I',' ')}, /* Yiddish [macrolanguage] */
1566 {"yih", HB_TAG('J','I','I',' ')}, /* Western Yiddish -> Yiddish */
David Corbettb2e7bb22020-10-27 19:50:33 -04001567 {"yim", HB_TAG_NONE }, /* Yimchungru Naga != Yi Modern */
David Corbettf4559d22021-09-02 17:56:17 -04001568/*{"yna", HB_TAG('Y','N','A',' ')},*/ /* Aluo */
David Corbett1ce11b42019-04-16 10:04:45 -04001569 {"yo", HB_TAG('Y','B','A',' ')}, /* Yoruba */
1570 {"yos", HB_TAG('Q','I','N',' ')}, /* Yos (retired code) -> Chin */
David Corbett17da41b2020-11-17 14:29:05 -05001571 {"yua", HB_TAG('M','Y','N',' ')}, /* Yucateco -> Mayan */
1572 {"yue", HB_TAG('Z','H','H',' ')}, /* Yue Chinese -> Chinese, Traditional, Hong Kong SAR */
David Corbettf4559d22021-09-02 17:56:17 -04001573/*{"ywq", HB_TAG('Y','W','Q',' ')},*/ /* Wuding-Luquan Yi */
David Corbett1ce11b42019-04-16 10:04:45 -04001574 {"za", HB_TAG('Z','H','A',' ')}, /* Zhuang [macrolanguage] */
1575 {"zch", HB_TAG('Z','H','A',' ')}, /* Central Hongshuihe Zhuang -> Zhuang */
1576 {"zdj", HB_TAG('C','M','R',' ')}, /* Ngazidja Comorian -> Comorian */
David Corbett6745a602019-04-16 17:29:34 -04001577/*{"zea", HB_TAG('Z','E','A',' ')},*/ /* Zeeuws -> Zealandic */
David Corbett1ce11b42019-04-16 10:04:45 -04001578 {"zeh", HB_TAG('Z','H','A',' ')}, /* Eastern Hongshuihe Zhuang -> Zhuang */
David Corbett17da41b2020-11-17 14:29:05 -05001579 {"zen", HB_TAG('B','B','R',' ')}, /* Zenaga -> Berber */
David Corbett1ce11b42019-04-16 10:04:45 -04001580 {"zgb", HB_TAG('Z','H','A',' ')}, /* Guibei Zhuang -> Zhuang */
David Corbett17da41b2020-11-17 14:29:05 -05001581 {"zgh", HB_TAG('Z','G','H',' ')}, /* Standard Moroccan Tamazight */
1582 {"zgh", HB_TAG('B','B','R',' ')}, /* Standard Moroccan Tamazight -> Berber */
David Corbett1ce11b42019-04-16 10:04:45 -04001583 {"zgm", HB_TAG('Z','H','A',' ')}, /* Minz Zhuang -> Zhuang */
1584 {"zgn", HB_TAG('Z','H','A',' ')}, /* Guibian Zhuang -> Zhuang */
David Corbett17da41b2020-11-17 14:29:05 -05001585 {"zh", HB_TAG('Z','H','S',' ')}, /* Chinese, Simplified [macrolanguage] */
David Corbett1ce11b42019-04-16 10:04:45 -04001586 {"zhd", HB_TAG('Z','H','A',' ')}, /* Dai Zhuang -> Zhuang */
1587 {"zhn", HB_TAG('Z','H','A',' ')}, /* Nong Zhuang -> Zhuang */
1588 {"zlj", HB_TAG('Z','H','A',' ')}, /* Liujiang Zhuang -> Zhuang */
1589 {"zlm", HB_TAG('M','L','Y',' ')}, /* Malay */
1590 {"zln", HB_TAG('Z','H','A',' ')}, /* Lianshan Zhuang -> Zhuang */
1591 {"zlq", HB_TAG('Z','H','A',' ')}, /* Liuqian Zhuang -> Zhuang */
1592 {"zmi", HB_TAG('M','L','Y',' ')}, /* Negeri Sembilan Malay -> Malay */
David Corbett17da41b2020-11-17 14:29:05 -05001593 {"zmz", HB_TAG('B','A','D','0')}, /* Mbandja -> Banda */
David Corbettb2e7bb22020-10-27 19:50:33 -04001594 {"znd", HB_TAG_NONE }, /* Zande [family] != Zande */
David Corbett1ce11b42019-04-16 10:04:45 -04001595 {"zne", HB_TAG('Z','N','D',' ')}, /* Zande */
1596 {"zom", HB_TAG('Q','I','N',' ')}, /* Zou -> Chin */
1597 {"zqe", HB_TAG('Z','H','A',' ')}, /* Qiubei Zhuang -> Zhuang */
1598 {"zsm", HB_TAG('M','L','Y',' ')}, /* Standard Malay -> Malay */
1599 {"zu", HB_TAG('Z','U','L',' ')}, /* Zulu */
1600 {"zum", HB_TAG('L','R','C',' ')}, /* Kumzari -> Luri */
1601 {"zyb", HB_TAG('Z','H','A',' ')}, /* Yongbei Zhuang -> Zhuang */
1602 {"zyg", HB_TAG('Z','H','A',' ')}, /* Yang Zhuang -> Zhuang */
1603 {"zyj", HB_TAG('Z','H','A',' ')}, /* Youjiang Zhuang -> Zhuang */
1604 {"zyn", HB_TAG('Z','H','A',' ')}, /* Yongnan Zhuang -> Zhuang */
David Corbett17da41b2020-11-17 14:29:05 -05001605 {"zyp", HB_TAG('Q','I','N',' ')}, /* Zyphe Chin -> Chin */
David Corbett6745a602019-04-16 17:29:34 -04001606/*{"zza", HB_TAG('Z','Z','A',' ')},*/ /* Zazaki [macrolanguage] */
David Corbett1ce11b42019-04-16 10:04:45 -04001607 {"zzj", HB_TAG('Z','H','A',' ')}, /* Zuojiang Zhuang -> Zhuang */
David Corbett2f1f9612017-12-08 22:45:52 -05001608};
1609
David Corbett2f1f9612017-12-08 22:45:52 -05001610/**
1611 * hb_ot_tags_from_complex_language:
1612 * @lang_str: a BCP 47 language tag to convert.
1613 * @limit: a pointer to the end of the substring of @lang_str to consider for
1614 * conversion.
1615 * @count: maximum number of language tags to retrieve (IN) and actual number of
1616 * language tags retrieved (OUT). If no tags are retrieved, it is not modified.
1617 * @tags: array of size at least @language_count to store the language tag
1618 * results
1619 *
1620 * Converts a multi-subtag BCP 47 language tag to language tags.
1621 *
1622 * Return value: Whether any language systems were retrieved.
1623 **/
1624static bool
1625hb_ot_tags_from_complex_language (const char *lang_str,
1626 const char *limit,
1627 unsigned int *count /* IN/OUT */,
1628 hb_tag_t *tags /* OUT */)
1629{
David Corbett3f887742018-07-19 13:48:07 -04001630 if (subtag_matches (lang_str, limit, "-fonnapa"))
David Corbett2f1f9612017-12-08 22:45:52 -05001631 {
1632 /* Undetermined; North American Phonetic Alphabet */
1633 tags[0] = HB_TAG('A','P','P','H'); /* Phonetic transcription—Americanist conventions */
1634 *count = 1;
1635 return true;
1636 }
David Corbett3f887742018-07-19 13:48:07 -04001637 if (subtag_matches (lang_str, limit, "-polyton"))
David Corbett2f1f9612017-12-08 22:45:52 -05001638 {
1639 /* Modern Greek (1453-); Polytonic Greek */
1640 tags[0] = HB_TAG('P','G','R',' '); /* Polytonic Greek */
1641 *count = 1;
1642 return true;
1643 }
David Corbettab38cf62020-10-10 14:21:20 -04001644 if (subtag_matches (lang_str, limit, "-arevmda"))
1645 {
1646 /* Armenian; Western Armenian (retired code) */
1647 tags[0] = HB_TAG('H','Y','E',' '); /* Armenian */
1648 *count = 1;
1649 return true;
1650 }
David Corbettbca7a162018-09-10 12:05:51 -04001651 if (subtag_matches (lang_str, limit, "-provenc"))
1652 {
1653 /* Occitan (post 1500); Provençal */
1654 tags[0] = HB_TAG('P','R','O',' '); /* Provençal / Old Provençal */
1655 *count = 1;
1656 return true;
1657 }
David Corbett3f887742018-07-19 13:48:07 -04001658 if (subtag_matches (lang_str, limit, "-fonipa"))
David Corbett2f1f9612017-12-08 22:45:52 -05001659 {
1660 /* Undetermined; International Phonetic Alphabet */
1661 tags[0] = HB_TAG('I','P','P','H'); /* Phonetic transcription—IPA conventions */
1662 *count = 1;
1663 return true;
1664 }
David Corbett3f887742018-07-19 13:48:07 -04001665 if (subtag_matches (lang_str, limit, "-geok"))
David Corbett2f1f9612017-12-08 22:45:52 -05001666 {
1667 /* Undetermined; Khutsuri (Asomtavruli and Nuskhuri) */
1668 tags[0] = HB_TAG('K','G','E',' '); /* Khutsuri Georgian */
1669 *count = 1;
1670 return true;
1671 }
David Corbett3f887742018-07-19 13:48:07 -04001672 if (subtag_matches (lang_str, limit, "-syre"))
David Corbett2f1f9612017-12-08 22:45:52 -05001673 {
1674 /* Undetermined; Syriac (Estrangelo variant) */
1675 tags[0] = HB_TAG('S','Y','R','E'); /* Syriac, Estrangela script-variant (equivalent to ISO 15924 'Syre') */
1676 *count = 1;
1677 return true;
1678 }
David Corbett3f887742018-07-19 13:48:07 -04001679 if (subtag_matches (lang_str, limit, "-syrj"))
David Corbett2f1f9612017-12-08 22:45:52 -05001680 {
1681 /* Undetermined; Syriac (Western variant) */
1682 tags[0] = HB_TAG('S','Y','R','J'); /* Syriac, Western script-variant (equivalent to ISO 15924 'Syrj') */
1683 *count = 1;
1684 return true;
1685 }
David Corbett3f887742018-07-19 13:48:07 -04001686 if (subtag_matches (lang_str, limit, "-syrn"))
David Corbett2f1f9612017-12-08 22:45:52 -05001687 {
1688 /* Undetermined; Syriac (Eastern variant) */
1689 tags[0] = HB_TAG('S','Y','R','N'); /* Syriac, Eastern script-variant (equivalent to ISO 15924 'Syrn') */
1690 *count = 1;
1691 return true;
1692 }
David Corbett3f887742018-07-19 13:48:07 -04001693 switch (lang_str[0])
David Corbett2f1f9612017-12-08 22:45:52 -05001694 {
David Corbett3f887742018-07-19 13:48:07 -04001695 case 'a':
1696 if (0 == strcmp (&lang_str[1], "rt-lojban"))
1697 {
David Corbett916c5a92020-10-10 14:15:16 -04001698 /* Lojban (retired code) */
David Corbett3f887742018-07-19 13:48:07 -04001699 tags[0] = HB_TAG('J','B','O',' '); /* Lojban */
1700 *count = 1;
1701 return true;
1702 }
1703 break;
1704 case 'c':
1705 if (lang_matches (&lang_str[1], "do-hant-hk"))
1706 {
David Corbett27170e02020-10-28 18:02:55 -04001707 /* Min Dong Chinese; Han (Traditional variant); Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05001708 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04001709 *count = 1;
1710 return true;
1711 }
1712 if (lang_matches (&lang_str[1], "do-hant-mo"))
1713 {
David Corbett27170e02020-10-28 18:02:55 -04001714 /* Min Dong Chinese; Han (Traditional variant); Macao */
David Corbett17da41b2020-11-17 14:29:05 -05001715 unsigned int i;
1716 hb_tag_t possible_tags[] = {
1717 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
1718 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
1719 };
1720 for (i = 0; i < 2 && i < *count; i++)
1721 tags[i] = possible_tags[i];
1722 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04001723 return true;
1724 }
1725 if (lang_matches (&lang_str[1], "jy-hant-hk"))
1726 {
David Corbett27170e02020-10-28 18:02:55 -04001727 /* Jinyu Chinese; Han (Traditional variant); Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05001728 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04001729 *count = 1;
1730 return true;
1731 }
1732 if (lang_matches (&lang_str[1], "jy-hant-mo"))
1733 {
David Corbett27170e02020-10-28 18:02:55 -04001734 /* Jinyu Chinese; Han (Traditional variant); Macao */
David Corbett17da41b2020-11-17 14:29:05 -05001735 unsigned int i;
1736 hb_tag_t possible_tags[] = {
1737 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
1738 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
1739 };
1740 for (i = 0; i < 2 && i < *count; i++)
1741 tags[i] = possible_tags[i];
1742 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04001743 return true;
1744 }
1745 if (lang_matches (&lang_str[1], "mn-hant-hk"))
1746 {
David Corbett27170e02020-10-28 18:02:55 -04001747 /* Mandarin Chinese; Han (Traditional variant); Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05001748 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04001749 *count = 1;
1750 return true;
1751 }
1752 if (lang_matches (&lang_str[1], "mn-hant-mo"))
1753 {
David Corbett27170e02020-10-28 18:02:55 -04001754 /* Mandarin Chinese; Han (Traditional variant); Macao */
David Corbett17da41b2020-11-17 14:29:05 -05001755 unsigned int i;
1756 hb_tag_t possible_tags[] = {
1757 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
1758 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
1759 };
1760 for (i = 0; i < 2 && i < *count; i++)
1761 tags[i] = possible_tags[i];
1762 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04001763 return true;
1764 }
David Corbett7a961692020-04-01 17:26:07 -04001765 if (lang_matches (&lang_str[1], "np-hant-hk"))
1766 {
David Corbett27170e02020-10-28 18:02:55 -04001767 /* Northern Ping Chinese; Han (Traditional variant); Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05001768 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett7a961692020-04-01 17:26:07 -04001769 *count = 1;
1770 return true;
1771 }
1772 if (lang_matches (&lang_str[1], "np-hant-mo"))
1773 {
David Corbett27170e02020-10-28 18:02:55 -04001774 /* Northern Ping Chinese; Han (Traditional variant); Macao */
David Corbett17da41b2020-11-17 14:29:05 -05001775 unsigned int i;
1776 hb_tag_t possible_tags[] = {
1777 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
1778 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
1779 };
1780 for (i = 0; i < 2 && i < *count; i++)
1781 tags[i] = possible_tags[i];
1782 *count = i;
David Corbett7a961692020-04-01 17:26:07 -04001783 return true;
1784 }
David Corbett3f887742018-07-19 13:48:07 -04001785 if (lang_matches (&lang_str[1], "px-hant-hk"))
1786 {
David Corbett27170e02020-10-28 18:02:55 -04001787 /* Pu-Xian Chinese; Han (Traditional variant); Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05001788 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04001789 *count = 1;
1790 return true;
1791 }
1792 if (lang_matches (&lang_str[1], "px-hant-mo"))
1793 {
David Corbett27170e02020-10-28 18:02:55 -04001794 /* Pu-Xian Chinese; Han (Traditional variant); Macao */
David Corbett17da41b2020-11-17 14:29:05 -05001795 unsigned int i;
1796 hb_tag_t possible_tags[] = {
1797 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
1798 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
1799 };
1800 for (i = 0; i < 2 && i < *count; i++)
1801 tags[i] = possible_tags[i];
1802 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04001803 return true;
1804 }
David Corbett7a961692020-04-01 17:26:07 -04001805 if (lang_matches (&lang_str[1], "sp-hant-hk"))
1806 {
David Corbett27170e02020-10-28 18:02:55 -04001807 /* Southern Ping Chinese; Han (Traditional variant); Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05001808 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett7a961692020-04-01 17:26:07 -04001809 *count = 1;
1810 return true;
1811 }
1812 if (lang_matches (&lang_str[1], "sp-hant-mo"))
1813 {
David Corbett27170e02020-10-28 18:02:55 -04001814 /* Southern Ping Chinese; Han (Traditional variant); Macao */
David Corbett17da41b2020-11-17 14:29:05 -05001815 unsigned int i;
1816 hb_tag_t possible_tags[] = {
1817 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
1818 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
1819 };
1820 for (i = 0; i < 2 && i < *count; i++)
1821 tags[i] = possible_tags[i];
1822 *count = i;
David Corbett7a961692020-04-01 17:26:07 -04001823 return true;
1824 }
David Corbett3f887742018-07-19 13:48:07 -04001825 if (lang_matches (&lang_str[1], "zh-hant-hk"))
1826 {
David Corbett27170e02020-10-28 18:02:55 -04001827 /* Huizhou Chinese; Han (Traditional variant); Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05001828 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04001829 *count = 1;
1830 return true;
1831 }
1832 if (lang_matches (&lang_str[1], "zh-hant-mo"))
1833 {
David Corbett27170e02020-10-28 18:02:55 -04001834 /* Huizhou Chinese; Han (Traditional variant); Macao */
David Corbett17da41b2020-11-17 14:29:05 -05001835 unsigned int i;
1836 hb_tag_t possible_tags[] = {
1837 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
1838 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
1839 };
1840 for (i = 0; i < 2 && i < *count; i++)
1841 tags[i] = possible_tags[i];
1842 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04001843 return true;
1844 }
1845 if (lang_matches (&lang_str[1], "zo-hant-hk"))
1846 {
David Corbett27170e02020-10-28 18:02:55 -04001847 /* Min Zhong Chinese; Han (Traditional variant); Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05001848 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04001849 *count = 1;
1850 return true;
1851 }
1852 if (lang_matches (&lang_str[1], "zo-hant-mo"))
1853 {
David Corbett27170e02020-10-28 18:02:55 -04001854 /* Min Zhong Chinese; Han (Traditional variant); Macao */
David Corbett17da41b2020-11-17 14:29:05 -05001855 unsigned int i;
1856 hb_tag_t possible_tags[] = {
1857 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
1858 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
1859 };
1860 for (i = 0; i < 2 && i < *count; i++)
1861 tags[i] = possible_tags[i];
1862 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04001863 return true;
1864 }
1865 if (lang_matches (&lang_str[1], "do-hans"))
1866 {
David Corbett27170e02020-10-28 18:02:55 -04001867 /* Min Dong Chinese; Han (Simplified variant) */
David Corbett17da41b2020-11-17 14:29:05 -05001868 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese, Simplified */
David Corbett3f887742018-07-19 13:48:07 -04001869 *count = 1;
1870 return true;
1871 }
1872 if (lang_matches (&lang_str[1], "do-hant"))
1873 {
David Corbett27170e02020-10-28 18:02:55 -04001874 /* Min Dong Chinese; Han (Traditional variant) */
David Corbett17da41b2020-11-17 14:29:05 -05001875 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04001876 *count = 1;
1877 return true;
1878 }
1879 if (lang_matches (&lang_str[1], "jy-hans"))
1880 {
David Corbett27170e02020-10-28 18:02:55 -04001881 /* Jinyu Chinese; Han (Simplified variant) */
David Corbett17da41b2020-11-17 14:29:05 -05001882 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese, Simplified */
David Corbett3f887742018-07-19 13:48:07 -04001883 *count = 1;
1884 return true;
1885 }
1886 if (lang_matches (&lang_str[1], "jy-hant"))
1887 {
David Corbett27170e02020-10-28 18:02:55 -04001888 /* Jinyu Chinese; Han (Traditional variant) */
David Corbett17da41b2020-11-17 14:29:05 -05001889 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04001890 *count = 1;
1891 return true;
1892 }
1893 if (lang_matches (&lang_str[1], "mn-hans"))
1894 {
David Corbett27170e02020-10-28 18:02:55 -04001895 /* Mandarin Chinese; Han (Simplified variant) */
David Corbett17da41b2020-11-17 14:29:05 -05001896 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese, Simplified */
David Corbett3f887742018-07-19 13:48:07 -04001897 *count = 1;
1898 return true;
1899 }
1900 if (lang_matches (&lang_str[1], "mn-hant"))
1901 {
David Corbett27170e02020-10-28 18:02:55 -04001902 /* Mandarin Chinese; Han (Traditional variant) */
David Corbett17da41b2020-11-17 14:29:05 -05001903 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04001904 *count = 1;
1905 return true;
1906 }
David Corbett7a961692020-04-01 17:26:07 -04001907 if (lang_matches (&lang_str[1], "np-hans"))
1908 {
David Corbett27170e02020-10-28 18:02:55 -04001909 /* Northern Ping Chinese; Han (Simplified variant) */
David Corbett17da41b2020-11-17 14:29:05 -05001910 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese, Simplified */
David Corbett7a961692020-04-01 17:26:07 -04001911 *count = 1;
1912 return true;
1913 }
1914 if (lang_matches (&lang_str[1], "np-hant"))
1915 {
David Corbett27170e02020-10-28 18:02:55 -04001916 /* Northern Ping Chinese; Han (Traditional variant) */
David Corbett17da41b2020-11-17 14:29:05 -05001917 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett7a961692020-04-01 17:26:07 -04001918 *count = 1;
1919 return true;
1920 }
David Corbett3f887742018-07-19 13:48:07 -04001921 if (lang_matches (&lang_str[1], "px-hans"))
1922 {
David Corbett27170e02020-10-28 18:02:55 -04001923 /* Pu-Xian Chinese; Han (Simplified variant) */
David Corbett17da41b2020-11-17 14:29:05 -05001924 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese, Simplified */
David Corbett3f887742018-07-19 13:48:07 -04001925 *count = 1;
1926 return true;
1927 }
1928 if (lang_matches (&lang_str[1], "px-hant"))
1929 {
David Corbett27170e02020-10-28 18:02:55 -04001930 /* Pu-Xian Chinese; Han (Traditional variant) */
David Corbett17da41b2020-11-17 14:29:05 -05001931 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04001932 *count = 1;
1933 return true;
1934 }
David Corbett7a961692020-04-01 17:26:07 -04001935 if (lang_matches (&lang_str[1], "sp-hans"))
1936 {
David Corbett27170e02020-10-28 18:02:55 -04001937 /* Southern Ping Chinese; Han (Simplified variant) */
David Corbett17da41b2020-11-17 14:29:05 -05001938 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese, Simplified */
David Corbett7a961692020-04-01 17:26:07 -04001939 *count = 1;
1940 return true;
1941 }
1942 if (lang_matches (&lang_str[1], "sp-hant"))
1943 {
David Corbett27170e02020-10-28 18:02:55 -04001944 /* Southern Ping Chinese; Han (Traditional variant) */
David Corbett17da41b2020-11-17 14:29:05 -05001945 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett7a961692020-04-01 17:26:07 -04001946 *count = 1;
1947 return true;
1948 }
David Corbett3f887742018-07-19 13:48:07 -04001949 if (lang_matches (&lang_str[1], "zh-hans"))
1950 {
David Corbett27170e02020-10-28 18:02:55 -04001951 /* Huizhou Chinese; Han (Simplified variant) */
David Corbett17da41b2020-11-17 14:29:05 -05001952 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese, Simplified */
David Corbett3f887742018-07-19 13:48:07 -04001953 *count = 1;
1954 return true;
1955 }
1956 if (lang_matches (&lang_str[1], "zh-hant"))
1957 {
David Corbett27170e02020-10-28 18:02:55 -04001958 /* Huizhou Chinese; Han (Traditional variant) */
David Corbett17da41b2020-11-17 14:29:05 -05001959 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04001960 *count = 1;
1961 return true;
1962 }
1963 if (lang_matches (&lang_str[1], "zo-hans"))
1964 {
David Corbett27170e02020-10-28 18:02:55 -04001965 /* Min Zhong Chinese; Han (Simplified variant) */
David Corbett17da41b2020-11-17 14:29:05 -05001966 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese, Simplified */
David Corbett3f887742018-07-19 13:48:07 -04001967 *count = 1;
1968 return true;
1969 }
1970 if (lang_matches (&lang_str[1], "zo-hant"))
1971 {
David Corbett27170e02020-10-28 18:02:55 -04001972 /* Min Zhong Chinese; Han (Traditional variant) */
David Corbett17da41b2020-11-17 14:29:05 -05001973 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04001974 *count = 1;
1975 return true;
1976 }
1977 if (0 == strncmp (&lang_str[1], "do-", 3)
1978 && subtag_matches (lang_str, limit, "-hk"))
1979 {
1980 /* Min Dong Chinese; Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05001981 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04001982 *count = 1;
1983 return true;
1984 }
1985 if (0 == strncmp (&lang_str[1], "do-", 3)
1986 && subtag_matches (lang_str, limit, "-mo"))
1987 {
1988 /* Min Dong Chinese; Macao */
David Corbett17da41b2020-11-17 14:29:05 -05001989 unsigned int i;
1990 hb_tag_t possible_tags[] = {
1991 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
1992 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
1993 };
1994 for (i = 0; i < 2 && i < *count; i++)
1995 tags[i] = possible_tags[i];
1996 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04001997 return true;
1998 }
1999 if (0 == strncmp (&lang_str[1], "do-", 3)
2000 && subtag_matches (lang_str, limit, "-tw"))
2001 {
2002 /* Min Dong Chinese; Taiwan, Province of China */
David Corbett17da41b2020-11-17 14:29:05 -05002003 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04002004 *count = 1;
2005 return true;
2006 }
2007 if (0 == strncmp (&lang_str[1], "jy-", 3)
2008 && subtag_matches (lang_str, limit, "-hk"))
2009 {
2010 /* Jinyu Chinese; Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05002011 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04002012 *count = 1;
2013 return true;
2014 }
2015 if (0 == strncmp (&lang_str[1], "jy-", 3)
2016 && subtag_matches (lang_str, limit, "-mo"))
2017 {
2018 /* Jinyu Chinese; Macao */
David Corbett17da41b2020-11-17 14:29:05 -05002019 unsigned int i;
2020 hb_tag_t possible_tags[] = {
2021 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
2022 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
2023 };
2024 for (i = 0; i < 2 && i < *count; i++)
2025 tags[i] = possible_tags[i];
2026 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04002027 return true;
2028 }
2029 if (0 == strncmp (&lang_str[1], "jy-", 3)
2030 && subtag_matches (lang_str, limit, "-tw"))
2031 {
2032 /* Jinyu Chinese; Taiwan, Province of China */
David Corbett17da41b2020-11-17 14:29:05 -05002033 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04002034 *count = 1;
2035 return true;
2036 }
2037 if (0 == strncmp (&lang_str[1], "mn-", 3)
2038 && subtag_matches (lang_str, limit, "-hk"))
2039 {
2040 /* Mandarin Chinese; Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05002041 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04002042 *count = 1;
2043 return true;
2044 }
2045 if (0 == strncmp (&lang_str[1], "mn-", 3)
2046 && subtag_matches (lang_str, limit, "-mo"))
2047 {
2048 /* Mandarin Chinese; Macao */
David Corbett17da41b2020-11-17 14:29:05 -05002049 unsigned int i;
2050 hb_tag_t possible_tags[] = {
2051 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
2052 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
2053 };
2054 for (i = 0; i < 2 && i < *count; i++)
2055 tags[i] = possible_tags[i];
2056 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04002057 return true;
2058 }
2059 if (0 == strncmp (&lang_str[1], "mn-", 3)
2060 && subtag_matches (lang_str, limit, "-tw"))
2061 {
2062 /* Mandarin Chinese; Taiwan, Province of China */
David Corbett17da41b2020-11-17 14:29:05 -05002063 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04002064 *count = 1;
2065 return true;
2066 }
David Corbett7a961692020-04-01 17:26:07 -04002067 if (0 == strncmp (&lang_str[1], "np-", 3)
2068 && subtag_matches (lang_str, limit, "-hk"))
2069 {
2070 /* Northern Ping Chinese; Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05002071 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett7a961692020-04-01 17:26:07 -04002072 *count = 1;
2073 return true;
2074 }
2075 if (0 == strncmp (&lang_str[1], "np-", 3)
2076 && subtag_matches (lang_str, limit, "-mo"))
2077 {
2078 /* Northern Ping Chinese; Macao */
David Corbett17da41b2020-11-17 14:29:05 -05002079 unsigned int i;
2080 hb_tag_t possible_tags[] = {
2081 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
2082 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
2083 };
2084 for (i = 0; i < 2 && i < *count; i++)
2085 tags[i] = possible_tags[i];
2086 *count = i;
David Corbett7a961692020-04-01 17:26:07 -04002087 return true;
2088 }
2089 if (0 == strncmp (&lang_str[1], "np-", 3)
2090 && subtag_matches (lang_str, limit, "-tw"))
2091 {
2092 /* Northern Ping Chinese; Taiwan, Province of China */
David Corbett17da41b2020-11-17 14:29:05 -05002093 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett7a961692020-04-01 17:26:07 -04002094 *count = 1;
2095 return true;
2096 }
David Corbett3f887742018-07-19 13:48:07 -04002097 if (0 == strncmp (&lang_str[1], "px-", 3)
2098 && subtag_matches (lang_str, limit, "-hk"))
2099 {
2100 /* Pu-Xian Chinese; Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05002101 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04002102 *count = 1;
2103 return true;
2104 }
2105 if (0 == strncmp (&lang_str[1], "px-", 3)
2106 && subtag_matches (lang_str, limit, "-mo"))
2107 {
2108 /* Pu-Xian Chinese; Macao */
David Corbett17da41b2020-11-17 14:29:05 -05002109 unsigned int i;
2110 hb_tag_t possible_tags[] = {
2111 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
2112 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
2113 };
2114 for (i = 0; i < 2 && i < *count; i++)
2115 tags[i] = possible_tags[i];
2116 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04002117 return true;
2118 }
2119 if (0 == strncmp (&lang_str[1], "px-", 3)
2120 && subtag_matches (lang_str, limit, "-tw"))
2121 {
2122 /* Pu-Xian Chinese; Taiwan, Province of China */
David Corbett17da41b2020-11-17 14:29:05 -05002123 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04002124 *count = 1;
2125 return true;
2126 }
David Corbett7a961692020-04-01 17:26:07 -04002127 if (0 == strncmp (&lang_str[1], "sp-", 3)
2128 && subtag_matches (lang_str, limit, "-hk"))
2129 {
2130 /* Southern Ping Chinese; Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05002131 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett7a961692020-04-01 17:26:07 -04002132 *count = 1;
2133 return true;
2134 }
2135 if (0 == strncmp (&lang_str[1], "sp-", 3)
2136 && subtag_matches (lang_str, limit, "-mo"))
2137 {
2138 /* Southern Ping Chinese; Macao */
David Corbett17da41b2020-11-17 14:29:05 -05002139 unsigned int i;
2140 hb_tag_t possible_tags[] = {
2141 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
2142 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
2143 };
2144 for (i = 0; i < 2 && i < *count; i++)
2145 tags[i] = possible_tags[i];
2146 *count = i;
David Corbett7a961692020-04-01 17:26:07 -04002147 return true;
2148 }
2149 if (0 == strncmp (&lang_str[1], "sp-", 3)
2150 && subtag_matches (lang_str, limit, "-tw"))
2151 {
2152 /* Southern Ping Chinese; Taiwan, Province of China */
David Corbett17da41b2020-11-17 14:29:05 -05002153 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett7a961692020-04-01 17:26:07 -04002154 *count = 1;
2155 return true;
2156 }
David Corbett3f887742018-07-19 13:48:07 -04002157 if (0 == strncmp (&lang_str[1], "zh-", 3)
2158 && subtag_matches (lang_str, limit, "-hk"))
2159 {
2160 /* Huizhou Chinese; Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05002161 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04002162 *count = 1;
2163 return true;
2164 }
2165 if (0 == strncmp (&lang_str[1], "zh-", 3)
2166 && subtag_matches (lang_str, limit, "-mo"))
2167 {
2168 /* Huizhou Chinese; Macao */
David Corbett17da41b2020-11-17 14:29:05 -05002169 unsigned int i;
2170 hb_tag_t possible_tags[] = {
2171 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
2172 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
2173 };
2174 for (i = 0; i < 2 && i < *count; i++)
2175 tags[i] = possible_tags[i];
2176 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04002177 return true;
2178 }
2179 if (0 == strncmp (&lang_str[1], "zh-", 3)
2180 && subtag_matches (lang_str, limit, "-tw"))
2181 {
2182 /* Huizhou Chinese; Taiwan, Province of China */
David Corbett17da41b2020-11-17 14:29:05 -05002183 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04002184 *count = 1;
2185 return true;
2186 }
2187 if (0 == strncmp (&lang_str[1], "zo-", 3)
2188 && subtag_matches (lang_str, limit, "-hk"))
2189 {
2190 /* Min Zhong Chinese; Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05002191 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04002192 *count = 1;
2193 return true;
2194 }
2195 if (0 == strncmp (&lang_str[1], "zo-", 3)
2196 && subtag_matches (lang_str, limit, "-mo"))
2197 {
2198 /* Min Zhong Chinese; Macao */
David Corbett17da41b2020-11-17 14:29:05 -05002199 unsigned int i;
2200 hb_tag_t possible_tags[] = {
2201 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
2202 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
2203 };
2204 for (i = 0; i < 2 && i < *count; i++)
2205 tags[i] = possible_tags[i];
2206 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04002207 return true;
2208 }
2209 if (0 == strncmp (&lang_str[1], "zo-", 3)
2210 && subtag_matches (lang_str, limit, "-tw"))
2211 {
2212 /* Min Zhong Chinese; Taiwan, Province of China */
David Corbett17da41b2020-11-17 14:29:05 -05002213 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04002214 *count = 1;
2215 return true;
2216 }
2217 break;
2218 case 'g':
2219 if (lang_matches (&lang_str[1], "an-hant-hk"))
2220 {
David Corbett27170e02020-10-28 18:02:55 -04002221 /* Gan Chinese; Han (Traditional variant); Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05002222 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04002223 *count = 1;
2224 return true;
2225 }
2226 if (lang_matches (&lang_str[1], "an-hant-mo"))
2227 {
David Corbett27170e02020-10-28 18:02:55 -04002228 /* Gan Chinese; Han (Traditional variant); Macao */
David Corbett17da41b2020-11-17 14:29:05 -05002229 unsigned int i;
2230 hb_tag_t possible_tags[] = {
2231 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
2232 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
2233 };
2234 for (i = 0; i < 2 && i < *count; i++)
2235 tags[i] = possible_tags[i];
2236 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04002237 return true;
2238 }
2239 if (lang_matches (&lang_str[1], "an-hans"))
2240 {
David Corbett27170e02020-10-28 18:02:55 -04002241 /* Gan Chinese; Han (Simplified variant) */
David Corbett17da41b2020-11-17 14:29:05 -05002242 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese, Simplified */
David Corbett3f887742018-07-19 13:48:07 -04002243 *count = 1;
2244 return true;
2245 }
2246 if (lang_matches (&lang_str[1], "an-hant"))
2247 {
David Corbett27170e02020-10-28 18:02:55 -04002248 /* Gan Chinese; Han (Traditional variant) */
David Corbett17da41b2020-11-17 14:29:05 -05002249 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04002250 *count = 1;
2251 return true;
2252 }
2253 if (lang_matches (&lang_str[1], "a-latg"))
2254 {
David Corbett27170e02020-10-28 18:02:55 -04002255 /* Irish; Latin (Gaelic variant) */
David Corbett3f887742018-07-19 13:48:07 -04002256 tags[0] = HB_TAG('I','R','T',' '); /* Irish Traditional */
2257 *count = 1;
2258 return true;
2259 }
2260 if (0 == strncmp (&lang_str[1], "an-", 3)
2261 && subtag_matches (lang_str, limit, "-hk"))
2262 {
2263 /* Gan Chinese; Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05002264 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04002265 *count = 1;
2266 return true;
2267 }
2268 if (0 == strncmp (&lang_str[1], "an-", 3)
2269 && subtag_matches (lang_str, limit, "-mo"))
2270 {
2271 /* Gan Chinese; Macao */
David Corbett17da41b2020-11-17 14:29:05 -05002272 unsigned int i;
2273 hb_tag_t possible_tags[] = {
2274 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
2275 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
2276 };
2277 for (i = 0; i < 2 && i < *count; i++)
2278 tags[i] = possible_tags[i];
2279 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04002280 return true;
2281 }
2282 if (0 == strncmp (&lang_str[1], "an-", 3)
2283 && subtag_matches (lang_str, limit, "-tw"))
2284 {
2285 /* Gan Chinese; Taiwan, Province of China */
David Corbett17da41b2020-11-17 14:29:05 -05002286 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04002287 *count = 1;
2288 return true;
2289 }
2290 break;
2291 case 'h':
2292 if (lang_matches (&lang_str[1], "ak-hant-hk"))
2293 {
David Corbett27170e02020-10-28 18:02:55 -04002294 /* Hakka Chinese; Han (Traditional variant); Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05002295 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04002296 *count = 1;
2297 return true;
2298 }
2299 if (lang_matches (&lang_str[1], "ak-hant-mo"))
2300 {
David Corbett27170e02020-10-28 18:02:55 -04002301 /* Hakka Chinese; Han (Traditional variant); Macao */
David Corbett17da41b2020-11-17 14:29:05 -05002302 unsigned int i;
2303 hb_tag_t possible_tags[] = {
2304 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
2305 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
2306 };
2307 for (i = 0; i < 2 && i < *count; i++)
2308 tags[i] = possible_tags[i];
2309 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04002310 return true;
2311 }
2312 if (lang_matches (&lang_str[1], "sn-hant-hk"))
2313 {
David Corbett27170e02020-10-28 18:02:55 -04002314 /* Xiang Chinese; Han (Traditional variant); Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05002315 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04002316 *count = 1;
2317 return true;
2318 }
2319 if (lang_matches (&lang_str[1], "sn-hant-mo"))
2320 {
David Corbett27170e02020-10-28 18:02:55 -04002321 /* Xiang Chinese; Han (Traditional variant); Macao */
David Corbett17da41b2020-11-17 14:29:05 -05002322 unsigned int i;
2323 hb_tag_t possible_tags[] = {
2324 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
2325 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
2326 };
2327 for (i = 0; i < 2 && i < *count; i++)
2328 tags[i] = possible_tags[i];
2329 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04002330 return true;
2331 }
2332 if (lang_matches (&lang_str[1], "ak-hans"))
2333 {
David Corbett27170e02020-10-28 18:02:55 -04002334 /* Hakka Chinese; Han (Simplified variant) */
David Corbett17da41b2020-11-17 14:29:05 -05002335 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese, Simplified */
David Corbett3f887742018-07-19 13:48:07 -04002336 *count = 1;
2337 return true;
2338 }
2339 if (lang_matches (&lang_str[1], "ak-hant"))
2340 {
David Corbett27170e02020-10-28 18:02:55 -04002341 /* Hakka Chinese; Han (Traditional variant) */
David Corbett17da41b2020-11-17 14:29:05 -05002342 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04002343 *count = 1;
2344 return true;
2345 }
2346 if (lang_matches (&lang_str[1], "sn-hans"))
2347 {
David Corbett27170e02020-10-28 18:02:55 -04002348 /* Xiang Chinese; Han (Simplified variant) */
David Corbett17da41b2020-11-17 14:29:05 -05002349 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese, Simplified */
David Corbett3f887742018-07-19 13:48:07 -04002350 *count = 1;
2351 return true;
2352 }
2353 if (lang_matches (&lang_str[1], "sn-hant"))
2354 {
David Corbett27170e02020-10-28 18:02:55 -04002355 /* Xiang Chinese; Han (Traditional variant) */
David Corbett17da41b2020-11-17 14:29:05 -05002356 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04002357 *count = 1;
2358 return true;
2359 }
2360 if (0 == strncmp (&lang_str[1], "ak-", 3)
2361 && subtag_matches (lang_str, limit, "-hk"))
2362 {
2363 /* Hakka Chinese; Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05002364 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04002365 *count = 1;
2366 return true;
2367 }
2368 if (0 == strncmp (&lang_str[1], "ak-", 3)
2369 && subtag_matches (lang_str, limit, "-mo"))
2370 {
2371 /* Hakka Chinese; Macao */
David Corbett17da41b2020-11-17 14:29:05 -05002372 unsigned int i;
2373 hb_tag_t possible_tags[] = {
2374 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
2375 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
2376 };
2377 for (i = 0; i < 2 && i < *count; i++)
2378 tags[i] = possible_tags[i];
2379 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04002380 return true;
2381 }
2382 if (0 == strncmp (&lang_str[1], "ak-", 3)
2383 && subtag_matches (lang_str, limit, "-tw"))
2384 {
2385 /* Hakka Chinese; Taiwan, Province of China */
David Corbett17da41b2020-11-17 14:29:05 -05002386 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04002387 *count = 1;
2388 return true;
2389 }
2390 if (0 == strncmp (&lang_str[1], "sn-", 3)
2391 && subtag_matches (lang_str, limit, "-hk"))
2392 {
2393 /* Xiang Chinese; Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05002394 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04002395 *count = 1;
2396 return true;
2397 }
2398 if (0 == strncmp (&lang_str[1], "sn-", 3)
2399 && subtag_matches (lang_str, limit, "-mo"))
2400 {
2401 /* Xiang Chinese; Macao */
David Corbett17da41b2020-11-17 14:29:05 -05002402 unsigned int i;
2403 hb_tag_t possible_tags[] = {
2404 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
2405 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
2406 };
2407 for (i = 0; i < 2 && i < *count; i++)
2408 tags[i] = possible_tags[i];
2409 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04002410 return true;
2411 }
2412 if (0 == strncmp (&lang_str[1], "sn-", 3)
2413 && subtag_matches (lang_str, limit, "-tw"))
2414 {
2415 /* Xiang Chinese; Taiwan, Province of China */
David Corbett17da41b2020-11-17 14:29:05 -05002416 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04002417 *count = 1;
2418 return true;
2419 }
2420 break;
2421 case 'i':
2422 if (0 == strcmp (&lang_str[1], "-navajo"))
2423 {
David Corbett916c5a92020-10-10 14:15:16 -04002424 /* Navajo (retired code) */
David Corbett3f887742018-07-19 13:48:07 -04002425 unsigned int i;
2426 hb_tag_t possible_tags[] = {
2427 HB_TAG('N','A','V',' '), /* Navajo */
2428 HB_TAG('A','T','H',' '), /* Athapaskan */
2429 };
2430 for (i = 0; i < 2 && i < *count; i++)
2431 tags[i] = possible_tags[i];
2432 *count = i;
2433 return true;
2434 }
2435 if (0 == strcmp (&lang_str[1], "-hak"))
2436 {
David Corbett916c5a92020-10-10 14:15:16 -04002437 /* Hakka (retired code) */
David Corbett17da41b2020-11-17 14:29:05 -05002438 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese, Simplified */
David Corbett3f887742018-07-19 13:48:07 -04002439 *count = 1;
2440 return true;
2441 }
2442 if (0 == strcmp (&lang_str[1], "-lux"))
2443 {
David Corbett916c5a92020-10-10 14:15:16 -04002444 /* Luxembourgish (retired code) */
David Corbett3f887742018-07-19 13:48:07 -04002445 tags[0] = HB_TAG('L','T','Z',' '); /* Luxembourgish */
2446 *count = 1;
2447 return true;
2448 }
2449 break;
2450 case 'l':
2451 if (lang_matches (&lang_str[1], "zh-hans"))
2452 {
David Corbett27170e02020-10-28 18:02:55 -04002453 /* Literary Chinese; Han (Simplified variant) */
David Corbett17da41b2020-11-17 14:29:05 -05002454 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese, Simplified */
David Corbett3f887742018-07-19 13:48:07 -04002455 *count = 1;
2456 return true;
2457 }
2458 break;
2459 case 'm':
2460 if (lang_matches (&lang_str[1], "np-hant-hk"))
2461 {
David Corbett27170e02020-10-28 18:02:55 -04002462 /* Min Bei Chinese; Han (Traditional variant); Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05002463 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04002464 *count = 1;
2465 return true;
2466 }
2467 if (lang_matches (&lang_str[1], "np-hant-mo"))
2468 {
David Corbett27170e02020-10-28 18:02:55 -04002469 /* Min Bei Chinese; Han (Traditional variant); Macao */
David Corbett17da41b2020-11-17 14:29:05 -05002470 unsigned int i;
2471 hb_tag_t possible_tags[] = {
2472 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
2473 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
2474 };
2475 for (i = 0; i < 2 && i < *count; i++)
2476 tags[i] = possible_tags[i];
2477 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04002478 return true;
2479 }
2480 if (lang_matches (&lang_str[1], "np-hans"))
2481 {
David Corbett27170e02020-10-28 18:02:55 -04002482 /* Min Bei Chinese; Han (Simplified variant) */
David Corbett17da41b2020-11-17 14:29:05 -05002483 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese, Simplified */
David Corbett3f887742018-07-19 13:48:07 -04002484 *count = 1;
2485 return true;
2486 }
2487 if (lang_matches (&lang_str[1], "np-hant"))
2488 {
David Corbett27170e02020-10-28 18:02:55 -04002489 /* Min Bei Chinese; Han (Traditional variant) */
David Corbett17da41b2020-11-17 14:29:05 -05002490 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04002491 *count = 1;
2492 return true;
2493 }
2494 if (0 == strncmp (&lang_str[1], "np-", 3)
2495 && subtag_matches (lang_str, limit, "-hk"))
2496 {
2497 /* Min Bei Chinese; Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05002498 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04002499 *count = 1;
2500 return true;
2501 }
2502 if (0 == strncmp (&lang_str[1], "np-", 3)
2503 && subtag_matches (lang_str, limit, "-mo"))
2504 {
2505 /* Min Bei Chinese; Macao */
David Corbett17da41b2020-11-17 14:29:05 -05002506 unsigned int i;
2507 hb_tag_t possible_tags[] = {
2508 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
2509 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
2510 };
2511 for (i = 0; i < 2 && i < *count; i++)
2512 tags[i] = possible_tags[i];
2513 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04002514 return true;
2515 }
2516 if (0 == strncmp (&lang_str[1], "np-", 3)
2517 && subtag_matches (lang_str, limit, "-tw"))
2518 {
2519 /* Min Bei Chinese; Taiwan, Province of China */
David Corbett17da41b2020-11-17 14:29:05 -05002520 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04002521 *count = 1;
2522 return true;
2523 }
2524 break;
2525 case 'n':
2526 if (lang_matches (&lang_str[1], "an-hant-hk"))
2527 {
David Corbett27170e02020-10-28 18:02:55 -04002528 /* Min Nan Chinese; Han (Traditional variant); Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05002529 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04002530 *count = 1;
2531 return true;
2532 }
2533 if (lang_matches (&lang_str[1], "an-hant-mo"))
2534 {
David Corbett27170e02020-10-28 18:02:55 -04002535 /* Min Nan Chinese; Han (Traditional variant); Macao */
David Corbett17da41b2020-11-17 14:29:05 -05002536 unsigned int i;
2537 hb_tag_t possible_tags[] = {
2538 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
2539 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
2540 };
2541 for (i = 0; i < 2 && i < *count; i++)
2542 tags[i] = possible_tags[i];
2543 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04002544 return true;
2545 }
2546 if (lang_matches (&lang_str[1], "an-hans"))
2547 {
David Corbett27170e02020-10-28 18:02:55 -04002548 /* Min Nan Chinese; Han (Simplified variant) */
David Corbett17da41b2020-11-17 14:29:05 -05002549 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese, Simplified */
David Corbett3f887742018-07-19 13:48:07 -04002550 *count = 1;
2551 return true;
2552 }
2553 if (lang_matches (&lang_str[1], "an-hant"))
2554 {
David Corbett27170e02020-10-28 18:02:55 -04002555 /* Min Nan Chinese; Han (Traditional variant) */
David Corbett17da41b2020-11-17 14:29:05 -05002556 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04002557 *count = 1;
2558 return true;
2559 }
2560 if (0 == strncmp (&lang_str[1], "an-", 3)
2561 && subtag_matches (lang_str, limit, "-hk"))
2562 {
2563 /* Min Nan Chinese; Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05002564 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04002565 *count = 1;
2566 return true;
2567 }
2568 if (0 == strncmp (&lang_str[1], "an-", 3)
2569 && subtag_matches (lang_str, limit, "-mo"))
2570 {
2571 /* Min Nan Chinese; Macao */
David Corbett17da41b2020-11-17 14:29:05 -05002572 unsigned int i;
2573 hb_tag_t possible_tags[] = {
2574 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
2575 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
2576 };
2577 for (i = 0; i < 2 && i < *count; i++)
2578 tags[i] = possible_tags[i];
2579 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04002580 return true;
2581 }
2582 if (0 == strncmp (&lang_str[1], "an-", 3)
2583 && subtag_matches (lang_str, limit, "-tw"))
2584 {
2585 /* Min Nan Chinese; Taiwan, Province of China */
David Corbett17da41b2020-11-17 14:29:05 -05002586 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04002587 *count = 1;
2588 return true;
2589 }
2590 if (0 == strcmp (&lang_str[1], "o-bok"))
2591 {
David Corbett916c5a92020-10-10 14:15:16 -04002592 /* Norwegian Bokmal (retired code) */
David Corbett3f887742018-07-19 13:48:07 -04002593 tags[0] = HB_TAG('N','O','R',' '); /* Norwegian */
2594 *count = 1;
2595 return true;
2596 }
2597 if (0 == strcmp (&lang_str[1], "o-nyn"))
2598 {
David Corbett916c5a92020-10-10 14:15:16 -04002599 /* Norwegian Nynorsk (retired code) */
David Corbettdec52002020-10-10 14:49:55 -04002600 unsigned int i;
2601 hb_tag_t possible_tags[] = {
2602 HB_TAG('N','Y','N',' '), /* Norwegian Nynorsk (Nynorsk, Norwegian) */
2603 HB_TAG('N','O','R',' '), /* Norwegian */
2604 };
2605 for (i = 0; i < 2 && i < *count; i++)
2606 tags[i] = possible_tags[i];
2607 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04002608 return true;
2609 }
2610 break;
2611 case 'r':
2612 if (0 == strncmp (&lang_str[1], "o-", 2)
2613 && subtag_matches (lang_str, limit, "-md"))
2614 {
2615 /* Romanian; Moldova */
2616 tags[0] = HB_TAG('M','O','L',' '); /* Moldavian */
2617 *count = 1;
2618 return true;
2619 }
2620 break;
2621 case 'w':
2622 if (lang_matches (&lang_str[1], "uu-hant-hk"))
2623 {
David Corbett27170e02020-10-28 18:02:55 -04002624 /* Wu Chinese; Han (Traditional variant); Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05002625 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04002626 *count = 1;
2627 return true;
2628 }
2629 if (lang_matches (&lang_str[1], "uu-hant-mo"))
2630 {
David Corbett27170e02020-10-28 18:02:55 -04002631 /* Wu Chinese; Han (Traditional variant); Macao */
David Corbett17da41b2020-11-17 14:29:05 -05002632 unsigned int i;
2633 hb_tag_t possible_tags[] = {
2634 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
2635 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
2636 };
2637 for (i = 0; i < 2 && i < *count; i++)
2638 tags[i] = possible_tags[i];
2639 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04002640 return true;
2641 }
2642 if (lang_matches (&lang_str[1], "uu-hans"))
2643 {
David Corbett27170e02020-10-28 18:02:55 -04002644 /* Wu Chinese; Han (Simplified variant) */
David Corbett17da41b2020-11-17 14:29:05 -05002645 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese, Simplified */
David Corbett3f887742018-07-19 13:48:07 -04002646 *count = 1;
2647 return true;
2648 }
2649 if (lang_matches (&lang_str[1], "uu-hant"))
2650 {
David Corbett27170e02020-10-28 18:02:55 -04002651 /* Wu Chinese; Han (Traditional variant) */
David Corbett17da41b2020-11-17 14:29:05 -05002652 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04002653 *count = 1;
2654 return true;
2655 }
2656 if (0 == strncmp (&lang_str[1], "uu-", 3)
2657 && subtag_matches (lang_str, limit, "-hk"))
2658 {
2659 /* Wu Chinese; Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05002660 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04002661 *count = 1;
2662 return true;
2663 }
2664 if (0 == strncmp (&lang_str[1], "uu-", 3)
2665 && subtag_matches (lang_str, limit, "-mo"))
2666 {
2667 /* Wu Chinese; Macao */
David Corbett17da41b2020-11-17 14:29:05 -05002668 unsigned int i;
2669 hb_tag_t possible_tags[] = {
2670 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
2671 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
2672 };
2673 for (i = 0; i < 2 && i < *count; i++)
2674 tags[i] = possible_tags[i];
2675 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04002676 return true;
2677 }
2678 if (0 == strncmp (&lang_str[1], "uu-", 3)
2679 && subtag_matches (lang_str, limit, "-tw"))
2680 {
2681 /* Wu Chinese; Taiwan, Province of China */
David Corbett17da41b2020-11-17 14:29:05 -05002682 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04002683 *count = 1;
2684 return true;
2685 }
2686 break;
2687 case 'y':
2688 if (lang_matches (&lang_str[1], "ue-hans"))
2689 {
David Corbett27170e02020-10-28 18:02:55 -04002690 /* Yue Chinese; Han (Simplified variant) */
David Corbett17da41b2020-11-17 14:29:05 -05002691 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese, Simplified */
David Corbett3f887742018-07-19 13:48:07 -04002692 *count = 1;
2693 return true;
2694 }
2695 break;
2696 case 'z':
2697 if (lang_matches (&lang_str[1], "h-hant-hk"))
2698 {
David Corbett27170e02020-10-28 18:02:55 -04002699 /* Chinese [macrolanguage]; Han (Traditional variant); Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05002700 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04002701 *count = 1;
2702 return true;
2703 }
2704 if (lang_matches (&lang_str[1], "h-hant-mo"))
2705 {
David Corbett27170e02020-10-28 18:02:55 -04002706 /* Chinese [macrolanguage]; Han (Traditional variant); Macao */
David Corbett17da41b2020-11-17 14:29:05 -05002707 unsigned int i;
2708 hb_tag_t possible_tags[] = {
2709 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
2710 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
2711 };
2712 for (i = 0; i < 2 && i < *count; i++)
2713 tags[i] = possible_tags[i];
2714 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04002715 return true;
2716 }
2717 if (0 == strcmp (&lang_str[1], "h-min-nan"))
2718 {
David Corbett916c5a92020-10-10 14:15:16 -04002719 /* Minnan, Hokkien, Amoy, Taiwanese, Southern Min, Southern Fujian, Hoklo, Southern Fukien, Ho-lo (retired code) */
David Corbett17da41b2020-11-17 14:29:05 -05002720 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese, Simplified */
David Corbett3f887742018-07-19 13:48:07 -04002721 *count = 1;
2722 return true;
2723 }
2724 if (lang_matches (&lang_str[1], "h-hans"))
2725 {
David Corbett27170e02020-10-28 18:02:55 -04002726 /* Chinese [macrolanguage]; Han (Simplified variant) */
David Corbett17da41b2020-11-17 14:29:05 -05002727 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese, Simplified */
David Corbett3f887742018-07-19 13:48:07 -04002728 *count = 1;
2729 return true;
2730 }
2731 if (lang_matches (&lang_str[1], "h-hant"))
2732 {
David Corbett27170e02020-10-28 18:02:55 -04002733 /* Chinese [macrolanguage]; Han (Traditional variant) */
David Corbett17da41b2020-11-17 14:29:05 -05002734 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04002735 *count = 1;
2736 return true;
2737 }
2738 if (0 == strcmp (&lang_str[1], "h-min"))
2739 {
David Corbett916c5a92020-10-10 14:15:16 -04002740 /* Min, Fuzhou, Hokkien, Amoy, or Taiwanese (retired code) */
David Corbett17da41b2020-11-17 14:29:05 -05002741 tags[0] = HB_TAG('Z','H','S',' '); /* Chinese, Simplified */
David Corbett3f887742018-07-19 13:48:07 -04002742 *count = 1;
2743 return true;
2744 }
2745 if (0 == strncmp (&lang_str[1], "h-", 2)
2746 && subtag_matches (lang_str, limit, "-hk"))
2747 {
David Corbett916c5a92020-10-10 14:15:16 -04002748 /* Chinese [macrolanguage]; Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05002749 tags[0] = HB_TAG('Z','H','H',' '); /* Chinese, Traditional, Hong Kong SAR */
David Corbett3f887742018-07-19 13:48:07 -04002750 *count = 1;
2751 return true;
2752 }
2753 if (0 == strncmp (&lang_str[1], "h-", 2)
2754 && subtag_matches (lang_str, limit, "-mo"))
2755 {
David Corbett916c5a92020-10-10 14:15:16 -04002756 /* Chinese [macrolanguage]; Macao */
David Corbett17da41b2020-11-17 14:29:05 -05002757 unsigned int i;
2758 hb_tag_t possible_tags[] = {
2759 HB_TAG('Z','H','T','M'), /* Chinese, Traditional, Macao SAR */
2760 HB_TAG('Z','H','H',' '), /* Chinese, Traditional, Hong Kong SAR */
2761 };
2762 for (i = 0; i < 2 && i < *count; i++)
2763 tags[i] = possible_tags[i];
2764 *count = i;
David Corbett3f887742018-07-19 13:48:07 -04002765 return true;
2766 }
2767 if (0 == strncmp (&lang_str[1], "h-", 2)
2768 && subtag_matches (lang_str, limit, "-tw"))
2769 {
David Corbett916c5a92020-10-10 14:15:16 -04002770 /* Chinese [macrolanguage]; Taiwan, Province of China */
David Corbett17da41b2020-11-17 14:29:05 -05002771 tags[0] = HB_TAG('Z','H','T',' '); /* Chinese, Traditional */
David Corbett3f887742018-07-19 13:48:07 -04002772 *count = 1;
2773 return true;
2774 }
2775 break;
David Corbett2f1f9612017-12-08 22:45:52 -05002776 }
2777 return false;
2778}
2779
2780/**
2781 * hb_ot_ambiguous_tag_to_language
2782 * @tag: A language tag.
2783 *
2784 * Converts @tag to a BCP 47 language tag if it is ambiguous (it corresponds to
2785 * many language tags) and the best tag is not the alphabetically first, or if
David Corbett6745a602019-04-16 17:29:34 -04002786 * the best tag consists of multiple subtags, or if the best tag does not appear
2787 * in #ot_languages.
David Corbett2f1f9612017-12-08 22:45:52 -05002788 *
2789 * Return value: The #hb_language_t corresponding to the BCP 47 language tag,
2790 * or #HB_LANGUAGE_INVALID if @tag is not ambiguous.
2791 **/
2792static hb_language_t
2793hb_ot_ambiguous_tag_to_language (hb_tag_t tag)
2794{
2795 switch (tag)
2796 {
David Corbett6745a602019-04-16 17:29:34 -04002797 case HB_TAG('A','L','T',' '): /* Altai */
2798 return hb_language_from_string ("alt", -1); /* Southern Altai */
David Corbett2f1f9612017-12-08 22:45:52 -05002799 case HB_TAG('A','P','P','H'): /* Phonetic transcription—Americanist conventions */
2800 return hb_language_from_string ("und-fonnapa", -1); /* Undetermined; North American Phonetic Alphabet */
2801 case HB_TAG('A','R','A',' '): /* Arabic */
David Corbett916c5a92020-10-10 14:15:16 -04002802 return hb_language_from_string ("ar", -1); /* Arabic [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002803 case HB_TAG('A','R','K',' '): /* Rakhine */
2804 return hb_language_from_string ("rki", -1); /* Rakhine */
2805 case HB_TAG('A','T','H',' '): /* Athapaskan */
David Corbett916c5a92020-10-10 14:15:16 -04002806 return hb_language_from_string ("ath", -1); /* Athapascan [family] */
David Corbett17da41b2020-11-17 14:29:05 -05002807 case HB_TAG('B','B','R',' '): /* Berber */
2808 return hb_language_from_string ("ber", -1); /* Berber [family] */
David Corbett2f1f9612017-12-08 22:45:52 -05002809 case HB_TAG('B','I','K',' '): /* Bikol */
David Corbett916c5a92020-10-10 14:15:16 -04002810 return hb_language_from_string ("bik", -1); /* Bikol [macrolanguage] */
David Corbett17da41b2020-11-17 14:29:05 -05002811 case HB_TAG('B','T','K',' '): /* Batak */
2812 return hb_language_from_string ("btk", -1); /* Batak [family] */
David Corbettbca7a162018-09-10 12:05:51 -04002813 case HB_TAG('C','P','P',' '): /* Creoles */
David Corbett916c5a92020-10-10 14:15:16 -04002814 return hb_language_from_string ("crp", -1); /* Creoles and pidgins [family] */
David Corbett2f1f9612017-12-08 22:45:52 -05002815 case HB_TAG('C','R','R',' '): /* Carrier */
2816 return hb_language_from_string ("crx", -1); /* Carrier */
David Corbett17da41b2020-11-17 14:29:05 -05002817 case HB_TAG('D','G','R',' '): /* Dogri (macrolanguage) */
David Corbettdec52002020-10-10 14:49:55 -04002818 return hb_language_from_string ("doi", -1); /* Dogri [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002819 case HB_TAG('D','N','K',' '): /* Dinka */
David Corbett916c5a92020-10-10 14:15:16 -04002820 return hb_language_from_string ("din", -1); /* Dinka [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002821 case HB_TAG('D','R','I',' '): /* Dari */
2822 return hb_language_from_string ("prs", -1); /* Dari */
David Corbett2f1f9612017-12-08 22:45:52 -05002823 case HB_TAG('D','Z','N',' '): /* Dzongkha */
2824 return hb_language_from_string ("dz", -1); /* Dzongkha */
2825 case HB_TAG('E','T','I',' '): /* Estonian */
David Corbett916c5a92020-10-10 14:15:16 -04002826 return hb_language_from_string ("et", -1); /* Estonian [macrolanguage] */
David Corbettdec52002020-10-10 14:49:55 -04002827 case HB_TAG('F','A','R',' '): /* Persian */
2828 return hb_language_from_string ("fa", -1); /* Persian [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002829 case HB_TAG('G','O','N',' '): /* Gondi */
David Corbett916c5a92020-10-10 14:15:16 -04002830 return hb_language_from_string ("gon", -1); /* Gondi [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002831 case HB_TAG('H','M','N',' '): /* Hmong */
David Corbett916c5a92020-10-10 14:15:16 -04002832 return hb_language_from_string ("hmn", -1); /* Hmong [macrolanguage] */
David Corbett6745a602019-04-16 17:29:34 -04002833 case HB_TAG('H','N','D',' '): /* Hindko */
2834 return hb_language_from_string ("hnd", -1); /* Southern Hindko */
David Corbett91fe20f2020-09-04 09:18:19 -04002835 case HB_TAG('H','Y','E',' '): /* Armenian */
2836 return hb_language_from_string ("hyw", -1); /* Western Armenian */
David Corbette19de652021-03-08 13:12:47 -05002837 case HB_TAG('I','B','A',' '): /* Iban */
2838 return hb_language_from_string ("iba", -1); /* Iban */
David Corbett2f1f9612017-12-08 22:45:52 -05002839 case HB_TAG('I','J','O',' '): /* Ijo */
David Corbett916c5a92020-10-10 14:15:16 -04002840 return hb_language_from_string ("ijo", -1); /* Ijo [family] */
David Corbett2f1f9612017-12-08 22:45:52 -05002841 case HB_TAG('I','N','U',' '): /* Inuktitut */
David Corbett916c5a92020-10-10 14:15:16 -04002842 return hb_language_from_string ("iu", -1); /* Inuktitut [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002843 case HB_TAG('I','P','K',' '): /* Inupiat */
David Corbett916c5a92020-10-10 14:15:16 -04002844 return hb_language_from_string ("ik", -1); /* Inupiaq [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002845 case HB_TAG('I','P','P','H'): /* Phonetic transcription—IPA conventions */
2846 return hb_language_from_string ("und-fonipa", -1); /* Undetermined; International Phonetic Alphabet */
2847 case HB_TAG('I','R','T',' '): /* Irish Traditional */
2848 return hb_language_from_string ("ga-Latg", -1); /* Irish; Latin (Gaelic variant) */
2849 case HB_TAG('J','I','I',' '): /* Yiddish */
David Corbett916c5a92020-10-10 14:15:16 -04002850 return hb_language_from_string ("yi", -1); /* Yiddish [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002851 case HB_TAG('K','A','L',' '): /* Kalenjin */
David Corbett916c5a92020-10-10 14:15:16 -04002852 return hb_language_from_string ("kln", -1); /* Kalenjin [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002853 case HB_TAG('K','G','E',' '): /* Khutsuri Georgian */
2854 return hb_language_from_string ("und-Geok", -1); /* Undetermined; Khutsuri (Asomtavruli and Nuskhuri) */
2855 case HB_TAG('K','N','R',' '): /* Kanuri */
David Corbett916c5a92020-10-10 14:15:16 -04002856 return hb_language_from_string ("kr", -1); /* Kanuri [macrolanguage] */
David Corbett17da41b2020-11-17 14:29:05 -05002857 case HB_TAG('K','O','H',' '): /* Korean Old Hangul */
2858 return hb_language_from_string ("okm", -1); /* Middle Korean (10th-16th cent.) */
David Corbett2f1f9612017-12-08 22:45:52 -05002859 case HB_TAG('K','O','K',' '): /* Konkani */
David Corbett916c5a92020-10-10 14:15:16 -04002860 return hb_language_from_string ("kok", -1); /* Konkani [macrolanguage] */
David Corbettdec52002020-10-10 14:49:55 -04002861 case HB_TAG('K','O','M',' '): /* Komi */
2862 return hb_language_from_string ("kv", -1); /* Komi [macrolanguage] */
2863 case HB_TAG('K','P','L',' '): /* Kpelle */
2864 return hb_language_from_string ("kpe", -1); /* Kpelle [macrolanguage] */
David Corbett17da41b2020-11-17 14:29:05 -05002865 case HB_TAG('K','R','N',' '): /* Karen */
2866 return hb_language_from_string ("kar", -1); /* Karen [family] */
David Corbett7a961692020-04-01 17:26:07 -04002867 case HB_TAG('K','U','I',' '): /* Kui */
2868 return hb_language_from_string ("uki", -1); /* Kui (India) */
David Corbett2f1f9612017-12-08 22:45:52 -05002869 case HB_TAG('K','U','R',' '): /* Kurdish */
David Corbett916c5a92020-10-10 14:15:16 -04002870 return hb_language_from_string ("ku", -1); /* Kurdish [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002871 case HB_TAG('L','U','H',' '): /* Luyia */
David Corbett916c5a92020-10-10 14:15:16 -04002872 return hb_language_from_string ("luy", -1); /* Luyia [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002873 case HB_TAG('L','V','I',' '): /* Latvian */
David Corbett916c5a92020-10-10 14:15:16 -04002874 return hb_language_from_string ("lv", -1); /* Latvian [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002875 case HB_TAG('M','A','W',' '): /* Marwari */
David Corbett916c5a92020-10-10 14:15:16 -04002876 return hb_language_from_string ("mwr", -1); /* Marwari [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002877 case HB_TAG('M','L','G',' '): /* Malagasy */
David Corbett916c5a92020-10-10 14:15:16 -04002878 return hb_language_from_string ("mg", -1); /* Malagasy [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002879 case HB_TAG('M','L','Y',' '): /* Malay */
David Corbett916c5a92020-10-10 14:15:16 -04002880 return hb_language_from_string ("ms", -1); /* Malay [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002881 case HB_TAG('M','N','G',' '): /* Mongolian */
David Corbett916c5a92020-10-10 14:15:16 -04002882 return hb_language_from_string ("mn", -1); /* Mongolian [macrolanguage] */
David Corbett1d532682020-10-10 14:46:36 -04002883 case HB_TAG('M','N','K',' '): /* Maninka */
2884 return hb_language_from_string ("man", -1); /* Mandingo [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002885 case HB_TAG('M','O','L',' '): /* Moldavian */
2886 return hb_language_from_string ("ro-MD", -1); /* Romanian; Moldova */
David Corbett17da41b2020-11-17 14:29:05 -05002887 case HB_TAG('M','Y','N',' '): /* Mayan */
2888 return hb_language_from_string ("myn", -1); /* Mayan [family] */
2889 case HB_TAG('N','A','H',' '): /* Nahuatl */
2890 return hb_language_from_string ("nah", -1); /* Nahuatl [family] */
David Corbett2f1f9612017-12-08 22:45:52 -05002891 case HB_TAG('N','E','P',' '): /* Nepali */
David Corbett916c5a92020-10-10 14:15:16 -04002892 return hb_language_from_string ("ne", -1); /* Nepali [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002893 case HB_TAG('N','I','S',' '): /* Nisi */
2894 return hb_language_from_string ("njz", -1); /* Nyishi */
2895 case HB_TAG('N','O','R',' '): /* Norwegian */
David Corbett916c5a92020-10-10 14:15:16 -04002896 return hb_language_from_string ("no", -1); /* Norwegian [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002897 case HB_TAG('O','J','B',' '): /* Ojibway */
David Corbett916c5a92020-10-10 14:15:16 -04002898 return hb_language_from_string ("oj", -1); /* Ojibwa [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002899 case HB_TAG('O','R','O',' '): /* Oromo */
David Corbett916c5a92020-10-10 14:15:16 -04002900 return hb_language_from_string ("om", -1); /* Oromo [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002901 case HB_TAG('P','A','S',' '): /* Pashto */
David Corbett916c5a92020-10-10 14:15:16 -04002902 return hb_language_from_string ("ps", -1); /* Pashto [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002903 case HB_TAG('P','G','R',' '): /* Polytonic Greek */
2904 return hb_language_from_string ("el-polyton", -1); /* Modern Greek (1453-); Polytonic Greek */
David Corbettbca7a162018-09-10 12:05:51 -04002905 case HB_TAG('P','R','O',' '): /* Provençal / Old Provençal */
2906 return hb_language_from_string ("pro", -1); /* Old Provençal (to 1500) */
David Corbett2f1f9612017-12-08 22:45:52 -05002907 case HB_TAG('Q','U','H',' '): /* Quechua (Bolivia) */
2908 return hb_language_from_string ("quh", -1); /* South Bolivian Quechua */
David Corbettdec52002020-10-10 14:49:55 -04002909 case HB_TAG('Q','U','Z',' '): /* Quechua */
2910 return hb_language_from_string ("qu", -1); /* Quechua [macrolanguage] */
David Corbetta754d442018-07-16 21:14:48 -04002911 case HB_TAG('Q','V','I',' '): /* Quechua (Ecuador) */
2912 return hb_language_from_string ("qvi", -1); /* Imbabura Highland Quichua */
2913 case HB_TAG('Q','W','H',' '): /* Quechua (Peru) */
2914 return hb_language_from_string ("qwh", -1); /* Huaylas Ancash Quechua */
David Corbett2f1f9612017-12-08 22:45:52 -05002915 case HB_TAG('R','A','J',' '): /* Rajasthani */
David Corbett916c5a92020-10-10 14:15:16 -04002916 return hb_language_from_string ("raj", -1); /* Rajasthani [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002917 case HB_TAG('R','O','Y',' '): /* Romany */
David Corbett916c5a92020-10-10 14:15:16 -04002918 return hb_language_from_string ("rom", -1); /* Romany [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002919 case HB_TAG('S','Q','I',' '): /* Albanian */
David Corbett916c5a92020-10-10 14:15:16 -04002920 return hb_language_from_string ("sq", -1); /* Albanian [macrolanguage] */
David Corbett17da41b2020-11-17 14:29:05 -05002921 case HB_TAG('S','R','B',' '): /* Serbian */
2922 return hb_language_from_string ("sr", -1); /* Serbian */
David Corbette19de652021-03-08 13:12:47 -05002923 case HB_TAG('S','X','T',' '): /* Sutu */
2924 return hb_language_from_string ("xnj", -1); /* Ngoni (Tanzania) */
David Corbett2f1f9612017-12-08 22:45:52 -05002925 case HB_TAG('S','Y','R',' '): /* Syriac */
David Corbett916c5a92020-10-10 14:15:16 -04002926 return hb_language_from_string ("syr", -1); /* Syriac [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002927 case HB_TAG('S','Y','R','E'): /* Syriac, Estrangela script-variant (equivalent to ISO 15924 'Syre') */
2928 return hb_language_from_string ("und-Syre", -1); /* Undetermined; Syriac (Estrangelo variant) */
2929 case HB_TAG('S','Y','R','J'): /* Syriac, Western script-variant (equivalent to ISO 15924 'Syrj') */
2930 return hb_language_from_string ("und-Syrj", -1); /* Undetermined; Syriac (Western variant) */
2931 case HB_TAG('S','Y','R','N'): /* Syriac, Eastern script-variant (equivalent to ISO 15924 'Syrn') */
2932 return hb_language_from_string ("und-Syrn", -1); /* Undetermined; Syriac (Eastern variant) */
2933 case HB_TAG('T','M','H',' '): /* Tamashek */
David Corbett916c5a92020-10-10 14:15:16 -04002934 return hb_language_from_string ("tmh", -1); /* Tamashek [macrolanguage] */
David Corbett91fe20f2020-09-04 09:18:19 -04002935 case HB_TAG('T','O','D',' '): /* Todo */
2936 return hb_language_from_string ("xwo", -1); /* Written Oirat */
David Corbett17da41b2020-11-17 14:29:05 -05002937 case HB_TAG('Z','H','H',' '): /* Chinese, Traditional, Hong Kong SAR */
David Corbett916c5a92020-10-10 14:15:16 -04002938 return hb_language_from_string ("zh-HK", -1); /* Chinese [macrolanguage]; Hong Kong */
David Corbett17da41b2020-11-17 14:29:05 -05002939 case HB_TAG('Z','H','S',' '): /* Chinese, Simplified */
David Corbett916c5a92020-10-10 14:15:16 -04002940 return hb_language_from_string ("zh-Hans", -1); /* Chinese [macrolanguage]; Han (Simplified variant) */
David Corbett17da41b2020-11-17 14:29:05 -05002941 case HB_TAG('Z','H','T',' '): /* Chinese, Traditional */
David Corbett916c5a92020-10-10 14:15:16 -04002942 return hb_language_from_string ("zh-Hant", -1); /* Chinese [macrolanguage]; Han (Traditional variant) */
David Corbett17da41b2020-11-17 14:29:05 -05002943 case HB_TAG('Z','H','T','M'): /* Chinese, Traditional, Macao SAR */
2944 return hb_language_from_string ("zh-MO", -1); /* Chinese [macrolanguage]; Macao */
David Corbettdec52002020-10-10 14:49:55 -04002945 case HB_TAG('Z','Z','A',' '): /* Zazaki */
2946 return hb_language_from_string ("zza", -1); /* Zazaki [macrolanguage] */
David Corbett2f1f9612017-12-08 22:45:52 -05002947 default:
2948 return HB_LANGUAGE_INVALID;
2949 }
2950}
2951
2952#endif /* HB_OT_TAG_TABLE_HH */
2953
2954/* == End of generated table == */