use crate::naming_table::platform::PlatformID;
use crate::{Result, Tape, Walue};
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub enum LanguageID {
#[default]
Unicode,
Macintosh(Macintosh),
Windows(Windows),
Other(usize),
#[cfg(feature = "ignore-invalid-language-ids")]
Invalid(usize),
}
choices! {
#[doc = "A Macintosh language."]
pub Macintosh(u16) {
0 => English("en"), 1 => French("fr"), 2 => German("de"), 3 => Italian("it"), 4 => Dutch("nl"), 5 => Swedish("sv"), 6 => Spanish("es"), 7 => Danish("da"), 8 => Portuguese("pt"), 9 => Norwegian("no"), 10 => Hebrew("he"), 11 => Japanese("ja"), 12 => Arabic("ar"), 13 => Finnish("fi"), 14 => Greek("el"), 15 => Icelandic("is"), 16 => Maltese("mt"), 17 => Turkish("tr"), 18 => Croatian("hr"), 19 => ChineseTraditional("zh-Hant"), 20 => Urdu("ur"), 21 => Hindi("hi"), 22 => Thai("th"), 23 => Korean("ko"), 24 => Lithuanian("lt"), 25 => Polish("pl"), 26 => Hungarian("hu"), 27 => Estonian("es"), 28 => Latvian("lv"), 29 => Sami("se"), 30 => Faroese("fo"), 31 => FarsiPersian("fa"), 32 => Russian("ru"), 33 => ChineseSimplified("zh"), 34 => Flemish("nl-BE"), 35 => IrishGaelic("ga"), 36 => Albanian("sq"), 37 => Romanian("ro"), 38 => Czech("cz"), 39 => Slovak("sk"), 40 => Slovenian("si"), 41 => Yiddish("yi"), 42 => Serbian("sr"), 43 => Macedonian("mk"), 44 => Bulgarian("bg"), 45 => Ukrainian("uk"), 46 => Byelorussian("be"), 47 => Uzbek("uz"), 48 => Kazakh("kk"), 49 => AzerbaijaniCyrillic("az-Cyrl"), 50 => AzerbaijaniArabic("az-Arab"), 51 => Armenian("hy"), 52 => Georgian("ka"), 53 => Moldavian("mo"), 54 => Kirghiz("ky"), 55 => Tajiki("tg"), 56 => Turkmen("tk"), 57 => MongolianMongolian("mn-CN"), 58 => MongolianCyrillic("mn"), 59 => Pashto("ps"), 60 => Kurdish("ks"), 61 => Kashmiri("ku"), 62 => Sindhi("sd"), 63 => Tibetan("bo"), 64 => Nepali("ne"), 65 => Sanskrit("sa"), 66 => Marathi("mr"), 67 => Bengali("bn"), 68 => Assamese("as"), 69 => Gujarati("gu"), 70 => Punjabi("pa"), 71 => Oriya("or"), 72 => Malayalam("ml"), 73 => Kannada("kn"), 74 => Tamil("ta"), 75 => Telugu("te"), 76 => Sinhalese("si"), 77 => Burmese("my"), 78 => Khmer("km"), 79 => Lao("lo"), 80 => Vietnamese("vi"), 81 => Indonesian("id"), 82 => Tagalog("tl"), 83 => MalayRoman("ms"), 84 => MalayArabic("ms-Arab"), 85 => Amharic("am"), 86 => Tigrinya("ti"), 87 => Galla("om"), 88 => Somali("so"), 89 => Swahili("sw"), 90 => KinyarwandaRuanda("rw"), 91 => Rundi("rn"), 92 => NyanjaChewa("ny"), 93 => Malagasy("mg"), 94 => Esperanto("eo"), 128 => Welsh("cy"), 129 => Basque("eu"), 130 => Catalan("ca"), 131 => Latin("la"), 132 => Quechua("qu"), 133 => Guarani("gn"), 134 => Aymara("ay"), 135 => Tatar("tt"), 136 => Uighur("ug"), 137 => Dzongkha("dz"), 138 => JavaneseRoman("jv"), 139 => SundaneseRoman("su"), 140 => Galician("gl"), 141 => Afrikaans("af"), 142 => Breton("br"), 143 => Inuktitut("iu"), 144 => ScottishGaelic("gd"), 145 => ManxGaelic("gv"), 146 => IrishGaelicDot("ga"), 147 => Tongan("to"), 148 => GreekPolytonic("el-polyton"), 149 => Greenlandic("kl"), 150 => AzerbaijaniRoman("az"), }
}
choices! {
#[doc = "A Windows language."]
pub Windows(u16) {
0x0436 => AfrikaansSouthAfrica("af"), 0x041C => AlbanianAlbania("sq"), 0x0484 => AlsatianFrance("gsw"), 0x045E => AmharicEthiopia("am"), 0x1401 => ArabicAlgeria("ar-DZ"), 0x3C01 => ArabicBahrain("ar-BH"), 0x0C01 => ArabicEgypt("ar"), 0x0801 => ArabicIraq("ar-IQ"), 0x2C01 => ArabicJordan("ar-JO"), 0x3401 => ArabicKuwait("ar-KW"), 0x3001 => ArabicLebanon("ar-LB"), 0x1001 => ArabicLibya("ar-LY"), 0x1801 => ArabicMorocco("ary"), 0x2001 => ArabicOman("ar-OM"), 0x4001 => ArabicQatar("ar-QA"), 0x0401 => ArabicSaudiArabia("ar-SA"), 0x2801 => ArabicSyria("ar-SY"), 0x1C01 => ArabicTunisia("aeb"), 0x3801 => ArabicUAE("ar-AE"), 0x2401 => ArabicYemen("ar-YE"), 0x042B => ArmenianArmenia("hy"), 0x044D => AssameseIndia("as"), 0x082C => AzeriCyrillicAzerbaijan("az-Cyrl"), 0x042C => AzeriLatinAzerbaijan("az"), 0x046D => BashkirRussia("ba"), 0x042D => BasqueBasque("eu"), 0x0423 => BelarusianBelarus("be"), 0x0845 => BengaliBangladesh("bn"), 0x0445 => BengaliIndia("bn-IN"), 0x201A => BosnianCyrillicBosniaHerzegovina("bs-Cyrl"), 0x141A => BosnianLatinBosniaHerzegovina("bs"), 0x047E => BretonFrance("br"), 0x0402 => BulgarianBulgaria("bg"), 0x0403 => CatalanCatalan("ca"), 0x0C04 => ChineseHongKongSAR("zh-HK"), 0x1404 => ChineseMacaoSAR("zh-MO"), 0x0804 => ChineseChina("zh"), 0x1004 => ChineseSingapore("zh-SG"), 0x0404 => ChineseTaiwan("zh-TW"), 0x0483 => CorsicanFrance("co"), 0x041A => CroatianCroatia("hr"), 0x101A => CroatianLatinBosniaHerzegovina("hr-BA"), 0x0405 => CzechCzechRepublic("cs"), 0x0406 => DanishDenmark("da"), 0x048C => DariAfghanistan("prs"), 0x0465 => DivehiMaldives("dv"), 0x0813 => DutchBelgium("nl-BE"), 0x0413 => DutchNetherlands("nl"), 0x0C09 => EnglishAustralia("en-AU"), 0x2809 => EnglishBelize("en-BZ"), 0x1009 => EnglishCanada("en-CA"), 0x2409 => EnglishCaribbean("en-029"), 0x4009 => EnglishIndia("en-IN"), 0x1809 => EnglishIreland("en-IE"), 0x2009 => EnglishJamaica("en-JM"), 0x4409 => EnglishMalaysia("en-MY"), 0x1409 => EnglishNewZealand("en-NZ"), 0x3409 => EnglishPhilippines("en-PH"), 0x4809 => EnglishSingapore("en-SG"), 0x1C09 => EnglishSouthAfrica("en-ZA"), 0x2C09 => EnglishTrinidadTobago("en-TT"), 0x0809 => EnglishUnitedKingdom("en-GB"), 0x0409 => EnglishUnitedStates("en"), 0x3009 => EnglishZimbabwe("en-ZW"), 0x0425 => EstonianEstonia("et"), 0x0438 => FaroeseFaroeIslands("fo"), 0x0464 => FilipinoPhilippines("fil"), 0x040B => FinnishFinland("fi"), 0x080C => FrenchBelgium("fr-BE"), 0x0C0C => FrenchCanada("fr-CA"), 0x040C => FrenchFrance("fr"), 0x140C => FrenchLuxembourg("fr-LU"), 0x180C => FrenchMonaco("fr-MC"), 0x100C => FrenchSwitzerland("fr-CH"), 0x0462 => FrisianNetherlands("fy"), 0x0456 => GalicianGalician("gl"), 0x0437 => GeorgianGeorgia("ka"), 0x0C07 => GermanAustria("de-AT"), 0x0407 => GermanGermany("de"), 0x1407 => GermanLiechtenstein("de-LI"), 0x1007 => GermanLuxembourg("de-LU"), 0x0807 => GermanSwitzerland("de-CH"), 0x0408 => GreekGreece("el"), 0x046F => GreenlandicGreenland("kl"), 0x0447 => GujaratiIndia("gu"), 0x0468 => HausaLatinNigeria("ha"), 0x040D => HebrewIsrael("he"), 0x0439 => HindiIndia("hi"), 0x040E => HungarianHungary("hu"), 0x040F => IcelandicIceland("is"), 0x0470 => IgboNigeria("ig"), 0x0421 => IndonesianIndonesia("id"), 0x045D => InuktitutCanada("iu"), 0x085D => InuktitutLatinCanada("iu-Latn"), 0x083C => IrishIreland("ga"), 0x0434 => IsiXhosaSouthAfrica("xh"), 0x0435 => IsiZuluSouthAfrica("zu"), 0x0410 => ItalianItaly("it"), 0x0810 => ItalianSwitzerland("it-CH"), 0x0411 => JapaneseJapan("ja"), 0x044B => KannadaIndia("kn"), 0x043F => KazakhKazakhstan("kk"), 0x0453 => KhmerCambodia("km"), 0x0486 => KicheGuatemala("quc"), 0x0487 => KinyarwandaRwanda("rw"), 0x0441 => KiswahiliKenya("sw"), 0x0457 => KonkaniIndia("kok"), 0x0412 => KoreanKorea("ko"), 0x0440 => KyrgyzKyrgyzstan("ky"), 0x0454 => LaoLaoPDR("lo"), 0x0426 => LatvianLatvia("lv"), 0x0427 => LithuanianLithuania("lt"), 0x082E => LowerSorbianGermany("dsb"), 0x046E => LuxembourgishLuxembourg("lb"), 0x042F => MacedonianNorthMacedonia("mk"), 0x083E => MalayBruneiDarussalam("ms-BN"), 0x043E => MalayMalaysia("ms"), 0x044C => MalayalamIndia("ml"), 0x043A => MalteseMalta("mt"), 0x0481 => MaoriNewZealand("mi"), 0x047A => MapudungunChile("arn"), 0x044E => MarathiIndia("mr"), 0x047C => MohawkMohawk("moh"), 0x0450 => MongolianCyrillicMongolia("mn"), 0x0850 => MongolianTraditionalChina("mn-CN"), 0x0461 => NepaliNepal("ne"), 0x0414 => NorwegianBokmalNorway("nb"), 0x0814 => NorwegianNynorskNorway("nn"), 0x0482 => OccitanFrance("oc"), 0x0448 => OdiaformerlyOriyaIndia("or"), 0x0463 => PashtoAfghanistan("ps"), 0x0415 => PolishPoland("pl"), 0x0416 => PortugueseBrazil("pt"), 0x0816 => PortuguesePortugal("pt-PT"), 0x0446 => PunjabiIndia("pa"), 0x046B => QuechuaBolivia("qu-BO"), 0x086B => QuechuaEcuador("qu-EC"), 0x0C6B => QuechuaPeru("qu"), 0x0418 => RomanianRomania("ro"), 0x0417 => RomanshSwitzerland("rm"), 0x0419 => RussianRussia("ru"), 0x243B => SamiInariFinland("smn"), 0x103B => SamiLuleNorway("smj-NO"), 0x143B => SamiLuleSweden("smj"), 0x0C3B => SamiNorthernFinland("se-FI"), 0x043B => SamiNorthernNorway("se"), 0x083B => SamiNorthernSweden("se-SE"), 0x203B => SamiSkoltFinland("sms"), 0x183B => SamiSouthernNorway("sma-NO"), 0x1C3B => SamiSouthernSweden("sms"), 0x044F => SanskritIndia("sa"), 0x1C1A => SerbianCyrillicBosniaHerzegovina("sr-Cyrl-BA"), 0x0C1A => SerbianCyrillicSerbia("sr"), 0x181A => SerbianLatinBosniaHerzegovina("sr-Latn-BA"), 0x081A => SerbianLatinSerbia("sr-Latn"), 0x046C => SesothoSaLeboaSouthAfrica("nso"), 0x0432 => SetswanaSouthAfrica("tn"), 0x045B => SinhalaSriLanka("si"), 0x041B => SlovakSlovakia("sk"), 0x0424 => SlovenianSlovenia("sl"), 0x2C0A => SpanishArgentina("es-AR"), 0x400A => SpanishBolivia("es-BO"), 0x340A => SpanishChile("es-CL"), 0x240A => SpanishColombia("es-CO"), 0x140A => SpanishCostaRica("es-CR"), 0x1C0A => SpanishDominicanRepublic("es-DO"), 0x300A => SpanishEcuador("es-EC"), 0x440A => SpanishElSalvador("es-SV"), 0x100A => SpanishGuatemala("es-GT"), 0x480A => SpanishHonduras("es-HN"), 0x080A => SpanishMexico("es-MX"), 0x4C0A => SpanishNicaragua("es-NI"), 0x180A => SpanishPanama("es-PA"), 0x3C0A => SpanishParaguay("es-PY"), 0x280A => SpanishPeru("es-PE"), 0x500A => SpanishPuertoRico("es-PR"), 0x0C0A => SpanishModernSpain("es"), 0x040A => SpanishTraditionalSpain("es-ES-u-co-trad"), 0x540A => SpanishUnitedStates("es-US"), 0x380A => SpanishUruguay("es-UY"), 0x200A => SpanishVenezuela("es-VE"), 0x081D => SwedishFinland("sv-FI"), 0x041D => SwedishSweden("sv"), 0x045A => SyriacSyria("syr"), 0x0428 => TajikCyrillicTajikistan("tg"), 0x085F => TamazightLatinAlgeria("tzm"), 0x0449 => TamilIndia("ta"), 0x0444 => TatarRussia("tt"), 0x044A => TeluguIndia("te"), 0x041E => ThaiThailand("th"), 0x0451 => TibetanPRC("bo"), 0x041F => TurkishTurkey("tr"), 0x0442 => TurkmenTurkmenistan("tk"), 0x0480 => UighurPRC("ug"), 0x0422 => UkrainianUkraine("uk"), 0x042E => UpperSorbianGermany("hsb"), 0x0420 => UrduIslamicPakistan("ur"), 0x0843 => UzbekCyrillicUzbekistan("uz-Cyrl"), 0x0443 => UzbekLatinUzbekistan("uz"), 0x042A => VietnameseVietnam("vi"), 0x0452 => WelshUnitedKingdom("cy"), 0x0488 => WolofSenegal("wo"), 0x0485 => YakutRussia("sah"), 0x0478 => YiPRC("ii"), 0x046A => YorubaNigeria("yo"), }
}
impl Walue<'static> for LanguageID {
type Parameter = PlatformID;
fn read<T: Tape>(tape: &mut T, platform_id: PlatformID) -> Result<Self> {
match (platform_id, tape.take::<u16>()?) {
(PlatformID::Unicode, _) => Ok(LanguageID::Unicode),
(PlatformID::Macintosh, value) if value < 0x8000 => match value.try_into() {
Ok(value) => Ok(LanguageID::Macintosh(value)),
#[cfg(feature = "ignore-invalid-language-ids")]
Err(_) => Ok(LanguageID::Invalid(value as usize)),
#[cfg(not(feature = "ignore-invalid-language-ids"))]
Err(error) => Err(error),
},
(PlatformID::Windows, value) if value < 0x8000 => match value.try_into() {
Ok(value) => Ok(LanguageID::Windows(value)),
#[cfg(feature = "ignore-invalid-language-ids")]
Err(_) => Ok(LanguageID::Invalid(value as usize)),
#[cfg(not(feature = "ignore-invalid-language-ids"))]
Err(error) => Err(error),
},
(_, value) => Ok(LanguageID::Other(value as usize - 0x8000)),
}
}
}