opentype/layout/
language.rs

1//! The language list.
2
3use truetype::Tag;
4
5table! {
6    /// A language-system header.
7    pub Header { // LangSysRecord
8        tag    (Tag), // langSysTag
9        offset (u16), // langSysOffset
10    }
11}
12
13table! {
14    /// A language-system record.
15    pub Record { // LangSys
16        lookup_order_offset    (u16) = { 0 }, // lookupOrderOffset
17        required_feature_index (u16), // requiredFeatureIndex
18        feature_index_count    (u16), // featureIndexCount
19
20        feature_indices (Vec<u16>) |this, tape| { // featureIndices
21            tape.take_given(this.feature_index_count as usize)
22        },
23    }
24}
25
26macro_rules! implement {
27    ($(
28        $(#[$attribute:meta])*
29        $tag:literal => $name:literal => $variant:ident => $codes:literal,
30    )*) => (
31        /// A language system.
32        #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
33        pub enum Language {
34            $($(#[$attribute])* #[doc = $name] $variant,)*
35            Other(Tag),
36        }
37
38        impl Language {
39            /// Create an instance from a tag.
40            pub fn from_tag(tag: &Tag) -> Self {
41                match &**tag {
42                    $($(#[$attribute])* $tag => Self::$variant,)*
43                    _ => Self::Other(tag.clone()),
44                }
45            }
46
47            /// Return ISO 639 codes.
48            pub fn codes(&self) -> impl Iterator<Item = &'static str> {
49                let filter = |code: &&str| !code.is_empty();
50                let value = match self {
51                    $($(#[$attribute])* Language::$variant => $codes,)*
52                    _ => "",
53                };
54                value.split(", ").filter(filter)
55            }
56
57            /// Return the name.
58            pub fn name(&self) -> Option<&'static str> {
59                match self {
60                    $($(#[$attribute])* Self::$variant => Some($name),)*
61                    _ => None,
62                }
63            }
64        }
65
66        impl From<Language> for Tag {
67            fn from(language: Language) -> Self {
68                match language {
69                    $($(#[$attribute])* Language::$variant => Tag(*$tag),)*
70                    Language::Other(tag) => tag,
71                }
72            }
73        }
74    );
75}
76
77implement! {
78    b"ABA " => "Abaza" => Abaza => "abq",
79    b"ABK " => "Abkhazian" => Abkhazian => "abk",
80    b"ACH " => "Acholi" => Acholi => "ach",
81    b"ACR " => "Achi" => Achi => "acr",
82    b"ADY " => "Adyghe" => Adyghe => "ady",
83    b"AFK " => "Afrikaans" => Afrikaans => "afr",
84    b"AFR " => "Afar" => Afar => "aar",
85    b"AGW " => "Agaw" => Agaw => "ahg",
86    b"AIO " => "Aiton" => Aiton => "aio",
87    b"AKA " => "Akan" => Akan => "aka",
88    b"ALS " => "Alsatian" => Alsatian => "gsw",
89    b"ALT " => "Altai" => Altai => "atv, alt",
90    b"AMH " => "Amharic" => Amharic => "amh",
91    b"ANG " => "Anglo-Saxon" => AngloSaxon => "ang",
92    b"APPH" => "Phonetic Transcription, Americanist" => AmericanistPhoneticNotation => "",
93    b"ARA " => "Arabic" => Arabic => "ara",
94    b"ARG " => "Aragonese" => Aragonese => "arg",
95    b"ARI " => "Aari" => Aari => "aiw",
96    b"ARK " => "Rakhine" => Rakhine => "mhv, rmz, rki",
97    b"ASM " => "Assamese" => Assamese => "asm",
98    b"AST " => "Asturian" => Asturian => "ast",
99    b"ATH " => "Athapaskan" => Athapaskan => "apk, apj, apl, apm, apw, nav, bea, sek, bcr, caf, \
100                                              crx, clc, gwi, haa, chp, dgr, scs, xsl, srs, ing, \
101                                              hoi, koy, hup, ktw, mvb, wlk, coq, ctc, gce, tol, \
102                                              tuu, kkz, tgx, tht, aht, tfn, taa, tau, tcb, kuu, \
103                                              tce, ttm, txc",
104    b"AVR " => "Avar" => Avar => "ava",
105    b"AWA " => "Awadhi" => Awadhi => "awa",
106    b"AYM " => "Aymara" => Aymara => "aym",
107    b"AZB " => "Torki" => Torki => "azb",
108    b"AZE " => "Azerbaijani" => Azerbaijani => "aze",
109    b"BAD " => "Badaga" => Badaga => "bfq",
110    b"BAD0" => "Banda" => Banda => "bad",
111    b"BAG " => "Baghelkhandi" => Baghelkhandi => "bfy",
112    b"BAL " => "Balkar" => Balkar => "krc",
113    b"BAN " => "Balinese" => Balinese => "ban",
114    b"BAR " => "Bavarian" => Bavarian => "bar",
115    b"BAU " => "Baulé" => Baule => "bci",
116    b"BBC " => "Batak Toba" => BatakToba => "bbc",
117    b"BBR " => "Berber" => Berber => "",
118    b"BCH " => "Bench" => Bench => "bcq",
119    b"BCR " => "Bible Cree" => BibleCree => "",
120    b"BDY " => "Bandjalang" => Bandjalang => "bdy",
121    b"BEL " => "Belarussian" => Belarussian => "bel",
122    b"BEM " => "Bemba" => Bemba => "bem",
123    b"BEN " => "Bengali" => Bengali => "ben",
124    b"BGC " => "Haryanvi" => Haryanvi => "bgc",
125    b"BGQ " => "Bagri" => Bagri => "bgq",
126    b"BGR " => "Bulgarian" => Bulgarian => "bul",
127    b"BHI " => "Bhili" => Bhili => "bhi, bhb",
128    b"BHO " => "Bhojpuri" => Bhojpuri => "bho",
129    b"BIK " => "Bikol" => Bikol => "bik, bhk, bcl, bto, cts, bln",
130    b"BIL " => "Bilen" => Bilen => "byn",
131    b"BIS " => "Bislama" => Bislama => "bis",
132    b"BJJ " => "Kanauji" => Kanauji => "bjj",
133    b"BKF " => "Blackfoot" => Blackfoot => "bla",
134    b"BLI " => "Baluchi" => Baluchi => "bal",
135    b"BLK " => "Pa’o Karen" => PaoKaren => "blk",
136    b"BLN " => "Balante" => Balante => "bjt, ble",
137    b"BLT " => "Balti" => Balti => "bft",
138    b"BMB " => "Bambara (Bamanankan)" => Bambara => "bam",
139    b"BML " => "Bamileke" => Bamileke => "",
140    b"BOS " => "Bosnian" => Bosnian => "bos",
141    b"BPY " => "Bishnupriya Manipuri" => BishnupriyaManipuri => "bpy",
142    b"BRE " => "Breton" => Breton => "bre",
143    b"BRH " => "Brahui" => Brahui => "brh",
144    b"BRI " => "Braj Bhasha" => BrajBhasha => "bra",
145    b"BRM " => "Burmese" => Burmese => "mya",
146    b"BRX " => "Bodo" => Bodo => "brx",
147    b"BSH " => "Bashkir" => Bashkir => "bak",
148    b"BSK " => "Burushaski" => Burushaski => "bsk",
149    b"BTI " => "Beti" => Beti => "btb",
150    b"BTS " => "Batak Simalungun" => BatakSimalungun => "bts",
151    b"BUG " => "Bugis" => Bugis => "bug",
152    b"BYV " => "Medumba" => Medumba => "byv",
153    b"CAK " => "Kaqchikel" => Kaqchikel => "cak",
154    b"CAT " => "Catalan" => Catalan => "cat",
155    b"CBK " => "Zamboanga Chavacano" => ZamboangaChavacano => "cbk",
156    b"CEB " => "Cebuano" => Cebuano => "ceb",
157    b"CHE " => "Chechen" => Chechen => "che",
158    b"CHG " => "Chaha Gurage" => ChahaGurage => "sgw",
159    b"CHH " => "Chattisgarhi" => Chattisgarhi => "hne",
160    b"CHI " => "Chichewa (Chewa, Nyanja)" => Chichewa => "nya",
161    b"CHK " => "Chukchi" => Chukchi => "ckt",
162    b"CHK0" => "Chuukese" => Chuukese => "chk",
163    b"CHO " => "Choctaw" => Choctaw => "cho",
164    b"CHP " => "Chipewyan" => Chipewyan => "chp",
165    b"CHR " => "Cherokee" => Cherokee => "chr",
166    b"CHA " => "Chamorro" => Chamorro => "cha",
167    b"CHU " => "Chuvash" => Chuvash => "chv",
168    b"CHY " => "Cheyenne" => Cheyenne => "chy",
169    b"CGG " => "Chiga" => Chiga => "cgg",
170    b"CMR " => "Comorian" => Comorian => "swb, wlc, wni, zdj",
171    b"COP " => "Coptic" => Coptic => "cop",
172    b"COR " => "Cornish" => Cornish => "cor",
173    b"COS " => "Corsican" => Corsican => "cos",
174    b"CPP " => "Creoles" => Creoles => "cpp",
175    b"CRE " => "Cree" => Cree => "cre",
176    b"CRR " => "Carrier" => Carrier => "crx, caf",
177    b"CRT " => "Crimean Tatar" => CrimeanTatar => "crh",
178    b"CSB " => "Kashubian" => Kashubian => "csb",
179    b"CSL " => "Church Slavonic" => ChurchSlavonic => "chu",
180    b"CSY " => "Czech" => Czech => "ces",
181    b"CTG " => "Chittagonian" => Chittagonian => "ctg",
182    b"CUK " => "San Blas Kuna" => SanBlasKuna => "cuk",
183    b"DAN " => "Danish" => Danish => "dan",
184    b"DAR " => "Dargwa" => Dargwa => "dar",
185    b"DAX " => "Dayi" => Dayi => "dax",
186    b"DCR " => "Woods Cree" => WoodsCree => "cwd",
187    #[cfg(feature = "default-language")]
188    b"DFLT" => "Default" => Default => "",
189    b"DEU " => "German" => German => "deu",
190    b"DGO " => "Dogri" => Dogri => "dgo",
191    b"DGR " => "Dogri" => DogriMacrolanguage => "doi",
192    b"DHG " => "Dhangu" => Dhangu => "dhg",
193    b"DHV " => "Divehi (Dhivehi, Maldivian)" => DivehiDeprecated => "div",
194    b"DIQ " => "Dimli" => Dimli => "diq",
195    b"DIV " => "Divehi (Dhivehi, Maldivian)" => Divehi => "div",
196    b"DJR " => "Zarma" => Zarma => "dje",
197    b"DJR0" => "Djambarrpuyngu" => Djambarrpuyngu => "djr",
198    b"DNG " => "Dangme" => Dangme => "ada",
199    b"DNJ " => "Dan" => Dan => "dnj",
200    b"DNK " => "Dinka" => Dinka => "din",
201    b"DRI " => "Dari" => Dari => "prs",
202    b"DUJ " => "Dhuwal" => Dhuwal => "duj",
203    b"DUN " => "Dungan" => Dungan => "dng",
204    b"DZN " => "Dzongkha" => Dzongkha => "dzo",
205    b"EBI " => "Ebira" => Ebira => "igb",
206    b"ECR " => "Eastern Cree" => EasternCree => "crj, crl",
207    b"EDO " => "Edo" => Edo => "bin",
208    b"EFI " => "Efik" => Efik => "efi",
209    b"ELL " => "Greek" => Greek => "ell",
210    b"EMK " => "Eastern Maninkakan" => EasternManinkakan => "emk",
211    b"ENG " => "English" => English => "eng",
212    b"ERZ " => "Erzya" => Erzya => "myv",
213    b"ESP " => "Spanish" => Spanish => "spa",
214    b"ESU " => "Central Yupik" => CentralYupik => "esu",
215    b"ETI " => "Estonian" => Estonian => "est",
216    b"EUQ " => "Basque" => Basque => "eus",
217    b"EVK " => "Evenki" => Evenki => "evn",
218    b"EVN " => "Even" => Even => "eve",
219    b"EWE " => "Ewe" => Ewe => "ewe",
220    b"FAN " => "French Antillean" => FrenchAntillean => "acf",
221    b"FAN0" => "Fang" => Fang => "fan",
222    b"FAR " => "Persian" => Persian => "fas",
223    b"FAT " => "Fanti" => Fanti => "fat",
224    b"FIN " => "Finnish" => Finnish => "fin",
225    b"FJI " => "Fijian" => Fijian => "fij",
226    b"FLE " => "Dutch (Flemish)" => DutchFlemish => "vls",
227    b"FMP " => "Fe’fe’" => Fefe => "fmp",
228    b"FNE " => "Forest Nenets" => ForestNenets => "enf",
229    b"FON " => "Fon" => Fon => "fon",
230    b"FOS " => "Faroese" => Faroese => "fao",
231    b"FRA " => "French" => French => "fra",
232    b"FRC " => "Cajun French" => CajunFrench => "frc",
233    b"FRI " => "Frisian" => Frisian => "fry",
234    b"FRL " => "Friulian" => Friulian => "fur",
235    b"FRP " => "Arpitan" => Arpitan => "frp",
236    b"FTA " => "Futa" => Futa => "fuf",
237    b"FUL " => "Fulah" => Fulah => "ful",
238    b"FUV " => "Nigerian Fulfulde" => NigerianFulfulde => "fuv",
239    b"GAD " => "Ga" => Ga => "gaa",
240    b"GAE " => "Scottish Gaelic (Gaelic)" => ScottishGaelic => "gla",
241    b"GAG " => "Gagauz" => Gagauz => "gag",
242    b"GAL " => "Galician" => Galician => "glg",
243    b"GAR " => "Garshuni" => Garshuni => "",
244    b"GAW " => "Garhwali" => Garhwali => "gbm",
245    b"GEZ " => "Ge’ez" => Geez => "gez",
246    b"GIH " => "Githabul" => Githabul => "gih",
247    b"GIL " => "Gilyak" => Gilyak => "niv",
248    b"GIL0" => "Kiribati (Gilbertese)" => Kiribati => "gil",
249    b"GKP " => "Kpelle (Guinea)" => KpelleGuinea => "gkp",
250    b"GLK " => "Gilaki" => Gilaki => "glk",
251    b"GMZ " => "Gumuz" => Gumuz => "guk",
252    b"GNN " => "Gumatj" => Gumatj => "gnn",
253    b"GOG " => "Gogo" => Gogo => "gog",
254    b"GON " => "Gondi" => Gondi => "gon",
255    b"GRN " => "Greenlandic" => Greenlandic => "kal",
256    b"GRO " => "Garo" => Garo => "grt",
257    b"GUA " => "Guarani" => Guarani => "grn",
258    b"GUC " => "Wayuu" => Wayuu => "guc",
259    b"GUF " => "Gupapuyngu" => Gupapuyngu => "guf",
260    b"GUJ " => "Gujarati" => Gujarati => "guj",
261    b"GUZ " => "Gusii" => Gusii => "guz",
262    b"HAI " => "Haitian (Haitian Creole)" => Haitian => "hat",
263    b"HAL " => "Halam" => Halam => "flm",
264    b"HAR " => "Harauti" => Harauti => "hoj",
265    b"HAU " => "Hausa" => Hausa => "hau",
266    b"HAW " => "Hawaiian" => Hawaiian => "haw",
267    b"HAY " => "Haya" => Haya => "hay",
268    b"HAZ " => "Hazaragi" => Hazaragi => "haz",
269    b"HBN " => "Hammer-Banna" => HammerBanna => "amf",
270    b"HER " => "Herero" => Herero => "her",
271    b"HIL " => "Hiligaynon" => Hiligaynon => "hil",
272    b"HIN " => "Hindi" => Hindi => "hin",
273    b"HMA " => "High Mari" => HighMari => "mrj",
274    b"HMN " => "Hmong" => Hmong => "hmn",
275    b"HMO " => "Hiri Motu" => HiriMotu => "hmo",
276    b"HND " => "Hindko" => Hindko => "hno, hnd",
277    b"HO  " => "Ho" => Ho => "hoc",
278    b"HRI " => "Harari" => Harari => "har",
279    b"HRV " => "Croatian" => Croatian => "hrv",
280    b"HUN " => "Hungarian" => Hungarian => "hun",
281    b"HYE " => "Armenian" => Armenian => "hye",
282    b"HYE0" => "Armenian East" => ArmenianEast => "hye",
283    b"IBA " => "Iban" => Iban => "iba",
284    b"IBB " => "Ibibio" => Ibibio => "ibb",
285    b"IBO " => "Igbo" => Igbo => "ibo",
286    b"IJO " => "Ijo languages" => Ijolanguages => "ijc",
287    b"IDO " => "Ido" => Ido => "ido",
288    b"ILE " => "Interlingue" => Interlingue => "ile",
289    b"ILO " => "Ilokano" => Ilokano => "ilo",
290    b"INA " => "Interlingua" => Interlingua => "ina",
291    b"IND " => "Indonesian" => Indonesian => "ind",
292    b"ING " => "Ingush" => Ingush => "inh",
293    b"INU " => "Inuktitut" => Inuktitut => "iku",
294    b"IPK " => "Inupiat" => Inupiat => "ipk",
295    b"IPPH" => "Phonetic transcription, IPA" => InternationalPhoneticAlphabet => "",
296    b"IRI " => "Irish" => Irish => "gle",
297    b"IRT " => "Irish Traditional" => IrishTraditional => "gle",
298    b"ISL " => "Icelandic" => Icelandic => "isl",
299    b"ISM " => "Inari Sami" => InariSami => "smn",
300    b"ITA " => "Italian" => Italian => "ita",
301    b"IWR " => "Hebrew" => Hebrew => "heb",
302    b"JAM " => "Jamaican Creole" => JamaicanCreole => "jam",
303    b"JAN " => "Japanese" => Japanese => "jpn",
304    b"JAV " => "Javanese" => Javanese => "jav",
305    b"JBO " => "Lojban" => Lojban => "jbo",
306    b"JCT " => "Krymchak" => Krymchak => "jct",
307    b"JII " => "Yiddish" => Yiddish => "yid",
308    b"JUD " => "Ladino" => Ladino => "lad",
309    b"JUL " => "Jula" => Jula => "dyu",
310    b"KAB " => "Kabardian" => Kabardian => "kbd",
311    b"KAB0" => "Kabyle" => Kabyle => "kab",
312    b"KAC " => "Kachchi" => Kachchi => "kfr",
313    b"KAL " => "Kalenjin" => Kalenjin => "kln",
314    b"KAN " => "Kannada" => Kannada => "kan",
315    b"KAR " => "Karachay" => Karachay => "krc",
316    b"KAT " => "Georgian" => Georgian => "kat",
317    b"KAZ " => "Kazakh" => Kazakh => "kaz",
318    b"KDE " => "Makonde" => Makonde => "kde",
319    b"KEA " => "Kabuverdianu (Crioulo)" => Kabuverdianu => "kea",
320    b"KEB " => "Kebena" => Kebena => "ktb",
321    b"KEK " => "Kekchi" => Kekchi => "kek",
322    b"KGE " => "Khutsuri Georgian" => KhutsuriGeorgian => "kat",
323    b"KHA " => "Khakass" => Khakass => "kjh",
324    b"KHK " => "Khanty-Kazim" => KhantyKazim => "kca",
325    b"KHM " => "Khmer" => Khmer => "khm",
326    b"KHS " => "Khanty-Shurishkar" => KhantyShurishkar => "kca",
327    b"KHT " => "Khamti Shan" => KhamtiShan => "kht",
328    b"KHV " => "Khanty-Vakhi" => KhantyVakhi => "kca",
329    b"KHW " => "Khowar" => Khowar => "khw",
330    b"KIK " => "Kikuyu (Gikuyu)" => Kikuyu => "kik",
331    b"KIR " => "Kirghiz (Kyrgyz)" => Kirghiz => "kir",
332    b"KIS " => "Kisii" => Kisii => "kqs, kss",
333    b"KIU " => "Kirmanjki" => Kirmanjki => "kiu",
334    b"KJD " => "Southern Kiwai" => SouthernKiwai => "kjd",
335    b"KJP " => "Eastern Pwo Karen" => EasternPwoKaren => "kjp",
336    b"KKN " => "Kokni" => Kokni => "kex",
337    b"KLM " => "Kalmyk" => Kalmyk => "xal",
338    b"KMB " => "Kamba" => Kamba => "kam",
339    b"KMN " => "Kumaoni" => Kumaoni => "kfy",
340    b"KMO " => "Komo" => Komo => "kmw",
341    b"KMS " => "Komso" => Komso => "kxc",
342    b"KMZ " => "Khorasani Turkic" => KhorasaniTurkic => "kmz",
343    b"KNR " => "Kanuri" => Kanuri => "kau",
344    b"KOD " => "Kodagu" => Kodagu => "kfa",
345    b"KOH " => "Korean Old Hangul" => KoreanOldHangul => "okm",
346    b"KOK " => "Konkani" => Konkani => "kok",
347    b"KON " => "Kikongo" => Kikongo => "ktu",
348    b"KOM " => "Komi" => Komi => "kom",
349    b"KON0" => "Kongo" => Kongo => "kon",
350    b"KOP " => "Komi-Permyak" => KomiPermyak => "koi",
351    b"KOR " => "Korean" => Korean => "kor",
352    b"KOS " => "Kosraean" => Kosraean => "kos",
353    b"KOZ " => "Komi-Zyrian" => KomiZyrian => "kpv",
354    b"KPL " => "Kpelle" => Kpelle => "kpe",
355    b"KRI " => "Krio" => Krio => "kri",
356    b"KRK " => "Karakalpak" => Karakalpak => "kaa",
357    b"KRL " => "Karelian" => Karelian => "krl",
358    b"KRM " => "Karaim" => Karaim => "kdr",
359    b"KRN " => "Karen" => Karen => "kar",
360    b"KRT " => "Koorete" => Koorete => "kqy",
361    b"KSH " => "Kashmiri" => Kashmiri => "kas",
362    b"KSH0" => "Ripuarian" => Ripuarian => "ksh",
363    b"KSI " => "Khasi" => Khasi => "kha",
364    b"KSM " => "Kildin Sami" => KildinSami => "sjd",
365    b"KSW " => "S’gaw Karen" => SgawKaren => "ksw",
366    b"KUA " => "Kuanyama" => Kuanyama => "kua",
367    b"KUI " => "Kui" => Kui => "kxu",
368    b"KUL " => "Kulvi" => Kulvi => "kfx",
369    b"KUM " => "Kumyk" => Kumyk => "kum",
370    b"KUR " => "Kurdish" => Kurdish => "kur",
371    b"KUU " => "Kurukh" => Kurukh => "kru",
372    b"KUY " => "Kuy" => Kuy => "kdt",
373    b"KYK " => "Koryak" => Koryak => "kpy",
374    b"KYU " => "Western Kayah" => WesternKayah => "kyu",
375    b"LAD " => "Ladin" => Ladin => "lld",
376    b"LAH " => "Lahuli" => Lahuli => "bfu",
377    b"LAK " => "Lak" => Lak => "lbe",
378    b"LAM " => "Lambani" => Lambani => "lmn",
379    b"LAO " => "Lao" => Lao => "lao",
380    b"LAT " => "Latin" => Latin => "lat",
381    b"LAZ " => "Laz" => Laz => "lzz",
382    b"LCR " => "L-Cree" => LCree => "crm",
383    b"LDK " => "Ladakhi" => Ladakhi => "lbj",
384    b"LEZ " => "Lezgi" => Lezgi => "lez",
385    b"LIJ " => "Ligurian" => Ligurian => "lij",
386    b"LIM " => "Limburgish" => Limburgish => "lim",
387    b"LIN " => "Lingala" => Lingala => "lin",
388    b"LIS " => "Lisu" => Lisu => "lis",
389    b"LJP " => "Lampung" => Lampung => "ljp",
390    b"LKI " => "Laki" => Laki => "lki",
391    b"LMA " => "Low Mari" => LowMari => "mhr",
392    b"LMB " => "Limbu" => Limbu => "lif",
393    b"LMO " => "Lombard" => Lombard => "lmo",
394    b"LMW " => "Lomwe" => Lomwe => "ngl",
395    b"LOM " => "Loma" => Loma => "lom",
396    b"LRC " => "Luri" => Luri => "lrc, luz, bqi, zum",
397    b"LSB " => "Lower Sorbian" => LowerSorbian => "dsb",
398    b"LSM " => "Lule Sami" => LuleSami => "smj",
399    b"LTH " => "Lithuanian" => Lithuanian => "lit",
400    b"LTZ " => "Luxembourgish" => Luxembourgish => "ltz",
401    b"LUA " => "Luba-Lulua" => LubaLulua => "lua",
402    b"LUB " => "Luba-Katanga" => LubaKatanga => "lub",
403    b"LUG " => "Ganda" => Ganda => "lug",
404    b"LUH " => "Luyia" => Luyia => "luy",
405    b"LUO " => "Luo" => Luo => "luo",
406    b"LVI " => "Latvian" => Latvian => "lav",
407    b"MAD " => "Madura" => Madura => "mad",
408    b"MAG " => "Magahi" => Magahi => "mag",
409    b"MAH " => "Marshallese" => Marshallese => "mah",
410    b"MAJ " => "Majang" => Majang => "mpe",
411    b"MAK " => "Makhuwa" => Makhuwa => "vmw",
412    b"MAL " => "Malayalam" => Malayalam => "mal",
413    b"MAM " => "Mam" => Mam => "mam",
414    b"MAN " => "Mansi" => Mansi => "mns",
415    b"MAP " => "Mapudungun" => Mapudungun => "arn",
416    b"MAR " => "Marathi" => Marathi => "mar",
417    b"MAW " => "Marwari" => Marwari => "mwr, dhd, rwr, mve, wry, mtr, swv",
418    b"MBN " => "Mbundu" => Mbundu => "kmb",
419    b"MBO " => "Mbo" => Mbo => "mbo",
420    b"MCH " => "Manchu" => Manchu => "mnc",
421    b"MCR " => "Moose Cree" => MooseCree => "crm",
422    b"MDE " => "Mende" => Mende => "men",
423    b"MDR " => "Mandar" => Mandar => "mdr",
424    b"MEN " => "Me’en" => Meen => "mym",
425    b"MER " => "Meru" => Meru => "mer",
426    b"MFE " => "Morisyen" => Morisyen => "mfe",
427    b"MIN " => "Minangkabau" => Minangkabau => "min",
428    b"MIZ " => "Mizo" => Mizo => "lus",
429    b"MKD " => "Macedonian" => Macedonian => "mkd",
430    b"MKR " => "Makasar" => Makasar => "mak",
431    b"MKW " => "Kituba" => Kituba => "mkw",
432    b"MLE " => "Male" => Male => "mdy",
433    b"MLG " => "Malagasy" => Malagasy => "mlg",
434    b"MLN " => "Malinke" => Malinke => "mlq",
435    b"MLR " => "Malayalam Reformed" => MalayalamReformed => "mal",
436    b"MLY " => "Malay" => Malay => "msa",
437    b"MND " => "Mandinka" => Mandinka => "mnk",
438    b"MNG " => "Mongolian" => Mongolian => "mon",
439    b"MNI " => "Manipuri" => Manipuri => "mni",
440    b"MNK " => "Maninka" => Maninka => "man, mnk, myq, mku, msc, emk, mwk, mlq",
441    b"MNX " => "Manx" => Manx => "glv",
442    b"MOH " => "Mohawk" => Mohawk => "moh",
443    b"MOK " => "Moksha" => Moksha => "mdf",
444    b"MOL " => "Moldavian" => Moldavian => "mol",
445    b"MON " => "Mon" => Mon => "mnw",
446    b"MOR " => "Moroccan" => Moroccan => "",
447    b"MOS " => "Mossi" => Mossi => "mos",
448    b"MRI " => "Maori" => Maori => "mri",
449    b"MTH " => "Maithili" => Maithili => "mai",
450    b"MTS " => "Maltese" => Maltese => "mlt",
451    b"MUN " => "Mundari" => Mundari => "unr",
452    b"MUS " => "Muscogee" => Muscogee => "mus",
453    b"MWL " => "Mirandese" => Mirandese => "mwl",
454    b"MWW " => "Hmong Daw" => HmongDaw => "mww",
455    b"MYN " => "Mayan" => Mayan => "myn",
456    b"MZN " => "Mazanderani" => Mazanderani => "mzn",
457    b"NAG " => "Naga-Assamese" => NagaAssamese => "nag",
458    b"NAH " => "Nahuatl" => Nahuatl => "nah",
459    b"NAN " => "Nanai" => Nanai => "gld",
460    b"NAP " => "Neapolitan" => Neapolitan => "nap",
461    b"NAS " => "Naskapi" => Naskapi => "nsk",
462    b"NAU " => "Nauruan" => Nauruan => "nau",
463    b"NAV " => "Navajo" => Navajo => "nav",
464    b"NCR " => "N-Cree" => NCree => "csw",
465    b"NDB " => "Ndebele" => Ndebele => "nbl, nde",
466    b"NDC " => "Ndau" => Ndau => "ndc",
467    b"NDG " => "Ndonga" => Ndonga => "ndo",
468    b"NDS " => "Low Saxon" => LowSaxon => "nds",
469    b"NEP " => "Nepali" => Nepali => "nep",
470    b"NEW " => "Newari" => Newari => "new",
471    b"NGA " => "Ngbaka" => Ngbaka => "nga",
472    b"NGR " => "Nagari" => Nagari => "",
473    b"NHC " => "Norway House Cree" => NorwayHouseCree => "csw",
474    b"NIS " => "Nisi" => Nisi => "dap",
475    b"NIU " => "Niuean" => Niuean => "niu",
476    b"NKL " => "Nyankole" => Nyankole => "nyn",
477    b"NKO " => "N’Ko" => NKo => "nqo",
478    b"NLD " => "Dutch" => Dutch => "nld",
479    b"NOE " => "Nimadi" => Nimadi => "noe",
480    b"NOG " => "Nogai" => Nogai => "nog",
481    b"NOR " => "Norwegian" => Norwegian => "nob",
482    b"NOV " => "Novial" => Novial => "nov",
483    b"NSM " => "Northern Sami" => NorthernSami => "sme",
484    b"NSO " => "Sotho, Northern" => NorthernSotho => "nso",
485    b"NTA " => "Northern Tai" => NorthernTai => "nod",
486    b"NTO " => "Esperanto" => Esperanto => "epo",
487    b"NYM " => "Nyamwezi" => Nyamwezi => "nym",
488    b"NYN " => "Norwegian Nynorsk (Nynorsk, Norwegian)" => NorwegianNynorsk => "nno",
489    b"NZA " => "Mbembe Tigon" => MbembeTigon => "nza",
490    b"OCI " => "Occitan" => Occitan => "oci",
491    b"OCR " => "Oji-Cree" => OjiCree => "ojs",
492    b"OJB " => "Ojibway" => Ojibway => "oji",
493    b"ORI " => "Odia" => Odia => "ori",
494    b"ORO " => "Oromo" => Oromo => "orm",
495    b"OSS " => "Ossetian" => Ossetian => "oss",
496    b"PAA " => "Palestinian Aramaic" => PalestinianAramaic => "sam",
497    b"PAG " => "Pangasinan" => Pangasinan => "pag",
498    b"PAL " => "Pali" => Pali => "pli",
499    b"PAM " => "Pampangan" => Pampangan => "pam",
500    b"PAN " => "Punjabi" => Punjabi => "pan",
501    b"PAP " => "Palpa" => Palpa => "plp",
502    b"PAP0" => "Papiamentu" => Papiamentu => "pap",
503    b"PAS " => "Pashto" => Pashto => "pus",
504    b"PAU " => "Palauan" => Palauan => "pau",
505    b"PCC " => "Bouyei" => Bouyei => "pcc",
506    b"PCD " => "Picard" => Picard => "pcd",
507    b"PDC " => "Pennsylvania German" => PennsylvaniaGerman => "pdc",
508    b"PGR " => "Polytonic Greek" => PolytonicGreek => "ell",
509    b"PHK " => "Phake" => Phake => "phk",
510    b"PIH " => "Norfolk" => Norfolk => "pih",
511    b"PIL " => "Filipino" => Filipino => "fil",
512    b"PLG " => "Palaung" => Palaung => "pce, rbb, pll",
513    b"PLK " => "Polish" => Polish => "pol",
514    b"PMS " => "Piemontese" => Piemontese => "pms",
515    b"PNB " => "Western Panjabi" => WesternPanjabi => "pnb",
516    b"POH " => "Pocomchi" => Pocomchi => "poh",
517    b"PON " => "Pohnpeian" => Pohnpeian => "pon",
518    b"PRO " => "Provencal" => Provencal => "pro",
519    b"PTG " => "Portuguese" => Portuguese => "por",
520    b"PWO " => "Western Pwo Karen" => WesternPwoKaren => "pwo",
521    b"QIN " => "Chin" => Chin => "bgr, cnh, cnw, czt, sez, tcp, csy, ctd, flm, pck, tcz, zom, \
522                                  cmr, dao, hlt, cka, cnk, mrh, mwg, cbl, cnb, csh",
523    b"QUC " => "K’iche’" => Kiche => "quc",
524    b"QUH " => "Quechua (Bolivia)" => QuechuaBolivia => "quh",
525    b"QUZ " => "Quechua" => Quechua => "quz",
526    b"QVI " => "Quechua (Ecuador)" => QuechuaEcuador => "qvi",
527    b"QWH " => "Quechua (Peru)" => QuechuaPeru => "qwh",
528    b"RAJ " => "Rajasthani" => Rajasthani => "raj",
529    b"RAR " => "Rarotongan" => Rarotongan => "rar",
530    b"RBU " => "Russian Buriat" => RussianBuriat => "bxr",
531    b"RCR " => "R-Cree" => RCree => "atj",
532    b"REJ " => "Rejang" => Rejang => "rej",
533    b"RIA " => "Riang" => Riang => "ria",
534    b"RIF " => "Tarifit" => Tarifit => "rif",
535    b"RIT " => "Ritarungo" => Ritarungo => "rit",
536    b"RKW " => "Arakwal" => Arakwal => "rkw",
537    b"RMS " => "Romansh" => Romansh => "roh",
538    b"RMY " => "Vlax Romani" => VlaxRomani => "rmy",
539    b"ROM " => "Romanian" => Romanian => "ron",
540    b"ROY " => "Romany" => Romany => "rom",
541    b"RSY " => "Rusyn" => Rusyn => "rue",
542    b"RTM " => "Rotuman" => Rotuman => "rtm",
543    b"RUA " => "Kinyarwanda" => Kinyarwanda => "kin",
544    b"RUN " => "Rundi" => Rundi => "run",
545    b"RUP " => "Aromanian" => Aromanian => "rup",
546    b"RUS " => "Russian" => Russian => "rus",
547    b"SAD " => "Sadri" => Sadri => "sck",
548    b"SAN " => "Sanskrit" => Sanskrit => "san",
549    b"SAS " => "Sasak" => Sasak => "sas",
550    b"SAT " => "Santali" => Santali => "sat",
551    b"SAY " => "Sayisi" => Sayisi => "chp",
552    b"SCN " => "Sicilian" => Sicilian => "scn",
553    b"SCO " => "Scots" => Scots => "sco",
554    b"SEK " => "Sekota" => Sekota => "xan",
555    b"SEL " => "Selkup" => Selkup => "sel",
556    b"SGA " => "Old Irish" => OldIrish => "sga",
557    b"SGO " => "Sango" => Sango => "sag",
558    b"SGS " => "Samogitian" => Samogitian => "sgs",
559    b"SHI " => "Tachelhit" => Tachelhit => "shi",
560    b"SHN " => "Shan" => Shan => "shn",
561    b"SIB " => "Sibe" => Sibe => "sjo",
562    b"SID " => "Sidamo" => Sidamo => "sid",
563    b"SIG " => "Silte Gurage" => SilteGurage => "xst",
564    b"SKS " => "Skolt Sami" => SkoltSami => "sms",
565    b"SKY " => "Slovak" => Slovak => "slk",
566    b"SCS " => "North Slavey" => NorthSlavey => "scs",
567    b"SLA " => "Slavey" => Slavey => "scs, xsl",
568    b"SLV " => "Slovenian" => Slovenian => "slv",
569    b"SML " => "Somali" => Somali => "som",
570    b"SMO " => "Samoan" => Samoan => "smo",
571    b"SNA " => "Sena" => Sena => "seh",
572    b"SNA0" => "Shona" => Shona => "sna",
573    b"SND " => "Sindhi" => Sindhi => "snd",
574    b"SNH " => "Sinhala (Sinhalese)" => Sinhala => "sin",
575    b"SNK " => "Soninke" => Soninke => "snk",
576    b"SOG " => "Sodo Gurage" => SodoGurage => "gru",
577    b"SOP " => "Songe" => Songe => "sop",
578    b"SOT " => "Sotho, Southern" => SouthernSotho => "sot",
579    b"SQI " => "Albanian" => Albanian => "sqi",
580    b"SRB " => "Serbian" => Serbian => "srp",
581    b"SRD " => "Sardinian" => Sardinian => "srd",
582    b"SRK " => "Saraiki" => Saraiki => "skr",
583    b"SRR " => "Serer" => Serer => "srr",
584    b"SSL " => "South Slavey" => SouthSlavey => "xsl",
585    b"SSM " => "Southern Sami" => SouthernSami => "sma",
586    b"STQ " => "Saterland Frisian" => SaterlandFrisian => "stq",
587    b"SUK " => "Sukuma" => Sukuma => "suk",
588    b"SUN " => "Sundanese" => Sundanese => "sun",
589    b"SUR " => "Suri" => Suri => "suq",
590    b"SVA " => "Svan" => Svan => "sva",
591    b"SVE " => "Swedish" => Swedish => "swe",
592    b"SWA " => "Swadaya Aramaic" => SwadayaAramaic => "aii",
593    b"SWK " => "Swahili" => Swahili => "swa",
594    b"SWZ " => "Swati" => Swati => "ssw",
595    b"SXT " => "Sutu" => Sutu => "ngo",
596    b"SXU " => "Upper Saxon" => UpperSaxon => "sxu",
597    b"SYL " => "Sylheti" => Sylheti => "syl",
598    b"SYR " => "Syriac" => Syriac => "syr",
599    b"SZL " => "Silesian" => Silesian => "szl",
600    b"TAB " => "Tabasaran" => Tabasaran => "tab",
601    b"TAJ " => "Tajiki" => Tajiki => "tgk",
602    b"TAM " => "Tamil" => Tamil => "tam",
603    b"TAT " => "Tatar" => Tatar => "tat",
604    b"TCR " => "TH-Cree" => THCree => "cwd",
605    b"TDD " => "Dehong Dai" => DehongDai => "tdd",
606    b"TEL " => "Telugu" => Telugu => "tel",
607    b"TET " => "Tetum" => Tetum => "tet",
608    b"TGL " => "Tagalog" => Tagalog => "tgl",
609    b"TGN " => "Tongan" => Tongan => "ton",
610    b"TGR " => "Tigre" => Tigre => "tig",
611    b"TGY " => "Tigrinya" => Tigrinya => "tir",
612    b"THA " => "Thai" => Thai => "tha",
613    b"THT " => "Tahitian" => Tahitian => "tah",
614    b"TIB " => "Tibetan" => Tibetan => "bod",
615    b"TIV " => "Tiv" => Tiv => "tiv",
616    b"TKM " => "Turkmen" => Turkmen => "tuk",
617    b"TMH " => "Tamashek" => Tamashek => "tmh",
618    b"TMN " => "Temne" => Temne => "tem",
619    b"TNA " => "Tswana" => Tswana => "tsn",
620    b"TNE " => "Tundra Nenets" => TundraNenets => "enh",
621    b"TNG " => "Tonga" => Tonga => "toi",
622    b"TOD " => "Todo" => Todo => "xal",
623    b"TOD0" => "Toma" => Toma => "tod",
624    b"TPI " => "Tok Pisin" => TokPisin => "tpi",
625    b"TRK " => "Turkish" => Turkish => "tur",
626    b"TSG " => "Tsonga" => Tsonga => "tso",
627    b"TUA " => "Turoyo Aramaic" => TuroyoAramaic => "tru",
628    b"TUM " => "Tulu" => Tulu => "tum",
629    b"TUL " => "Tumbuka" => Tumbuka => "tcy",
630    b"TUV " => "Tuvin" => Tuvin => "tyv",
631    b"TVL " => "Tuvalu" => Tuvalu => "tvl",
632    b"TWI " => "Twi" => Twi => "aka",
633    b"TYZ " => "Tày" => Tay => "tyz",
634    b"TZM " => "Tamazight" => Tamazight => "tzm",
635    b"TZO " => "Tzotzil" => Tzotzil => "tzo",
636    b"UDM " => "Udmurt" => Udmurt => "udm",
637    b"UKR " => "Ukrainian" => Ukrainian => "ukr",
638    b"UMB " => "Umbundu" => Umbundu => "umb",
639    b"URD " => "Urdu" => Urdu => "urd",
640    b"USB " => "Upper Sorbian" => UpperSorbian => "hsb",
641    b"UYG " => "Uyghur" => Uyghur => "uig",
642    b"UZB " => "Uzbek" => Uzbek => "uzb",
643    b"VEC " => "Venetian" => Venetian => "vec",
644    b"VEN " => "Venda" => Venda => "ven",
645    b"VIT " => "Vietnamese" => Vietnamese => "vie",
646    b"VOL " => "Volapük" => Volapuk => "vol",
647    b"VRO " => "Võro" => Voro => "vro",
648    b"WA  " => "Wa" => Wa => "wbm",
649    b"WAG " => "Wagdi" => Wagdi => "wbr",
650    b"WAR " => "Waray-Waray" => WarayWaray => "war",
651    b"WCR " => "West-Cree" => WestCree => "crk",
652    b"WEL " => "Welsh" => Welsh => "cym",
653    b"WLN " => "Walloon" => Walloon => "wln",
654    b"WLF " => "Wolof" => Wolof => "wol",
655    b"WTM " => "Mewati" => Mewati => "wtm",
656    b"XBD " => "Lü" => Lu => "khb",
657    b"XHS " => "Xhosa" => Xhosa => "xho",
658    b"XJB " => "Minjangbal" => Minjangbal => "xjb",
659    b"XOG " => "Soga" => Soga => "xog",
660    b"XPE " => "Kpelle (Liberia)" => KpelleLiberia => "xpe",
661    b"YAK " => "Sakha" => Sakha => "sah",
662    b"YAO " => "Yao" => Yao => "yao",
663    b"YAP " => "Yapese" => Yapese => "yap",
664    b"YBA " => "Yoruba" => Yoruba => "yor",
665    b"YCR " => "Y-Cree" => YCree => "cre",
666    b"YIC " => "Yi Classic" => YiClassic => "",
667    b"YIM " => "Yi Modern" => YiModern => "iii",
668    b"ZEA " => "Zealandic" => Zealandic => "zea",
669    b"ZGH " => "Standard Morrocan Tamazigh" => StandardMorrocanTamazigh => "zgh",
670    b"ZHA " => "Zhuang" => Zhuang => "zha",
671    b"ZHH " => "Chinese, Hong Kong SAR" => Chinese => "zho",
672    b"ZHP " => "Chinese Phonetic" => ChinesePhonetic => "zho",
673    b"ZHS " => "Chinese Simplified" => ChineseSimplified => "zho",
674    b"ZHT " => "Chinese Traditional" => ChineseTraditional => "zho",
675    b"ZND " => "Zande" => Zande => "zne",
676    b"ZUL " => "Zulu" => Zulu => "zul",
677    b"ZZA " => "Zazaki" => Zazaki => "zza",
678}
679
680#[cfg(test)]
681mod tests {
682    use truetype::Tag;
683
684    use super::Language;
685
686    #[test]
687    fn codes() {
688        assert_eq!(Language::from_tag(&Tag(*b"IPPH")).codes().count(), 0);
689        assert_eq!(Language::from_tag(&Tag(*b"ATH ")).codes().count(), 43);
690    }
691}