intl_pluralrules-7.0.2/.cargo_vcs_info.json0000644000000001560000000000100144440ustar { "git": { "sha1": "d0715d5b7cca72e228d6e6c4de154bd30dfdd06a" }, "path_in_vcs": "intl_pluralrules" }intl_pluralrules-7.0.2/Cargo.toml0000644000000027300000000000100124420ustar # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies. # # If you are reading this file be aware that the original Cargo.toml # will likely look very different (and much more reasonable). # See Cargo.toml.orig for the original contents. [package] edition = "2018" name = "intl_pluralrules" version = "7.0.2" authors = [ "Kekoa Riggin ", "Zibi Braniecki ", ] include = [ "src/**/*", "benches/*.rs", "Cargo.toml", "README.md", ] description = "Unicode Plural Rules categorizer for numeric input." readme = "README.md" keywords = [ "localization", "l10n", "i18n", "intl", "internationalization", ] categories = [ "localization", "internationalization", ] license = "Apache-2.0/MIT" repository = "https://github.com/zbraniecki/pluralrules" [[bench]] name = "pluralrules" harness = false [dependencies.unic-langid] version = "0.9" [dev-dependencies.criterion] version = "0.3" [dev-dependencies.unic-langid] version = "0.9" features = ["macros"] [badges.coveralls] branch = "master" repository = "zbraniecki/pluralrules" service = "github" [badges.maintenance] status = "actively-developed" [badges.travis-ci] branch = "master" repository = "zbraniecki/pluralrules" intl_pluralrules-7.0.2/Cargo.toml.orig000064400000000000000000000016601046102023000161240ustar 00000000000000[package] name = "intl_pluralrules" version = "7.0.2" edition = "2018" authors = ["Kekoa Riggin ", "Zibi Braniecki "] description = "Unicode Plural Rules categorizer for numeric input." license = "Apache-2.0/MIT" repository = "https://github.com/zbraniecki/pluralrules" readme = "README.md" keywords = ["localization", "l10n", "i18n", "intl", "internationalization"] categories = ["localization", "internationalization"] include = [ "src/**/*", "benches/*.rs", "Cargo.toml", "README.md" ] [badges] travis-ci = { repository = "zbraniecki/pluralrules", branch = "master" } coveralls = { repository = "zbraniecki/pluralrules", branch = "master", service = "github" } maintenance = { status = "actively-developed" } [dependencies] unic-langid = "0.9" [dev-dependencies] criterion = "0.3" unic-langid = { version = "0.9", features = ["macros"] } [[bench]] name = "pluralrules" harness = false intl_pluralrules-7.0.2/README.md000064400000000000000000000030371046102023000145140ustar 00000000000000# INTL Plural Rules `intl_pluralrules` categorizes numbers by plural operands. See [Unicode Plural Rules](https://unicode.org/reports/tr35/tr35-numbers.html#Language_Plural_Rules) [![crates.io](https://img.shields.io/crates/v/intl_pluralrules.svg)](https://crates.io/crates/intl_pluralrules) [![Build Status](https://travis-ci.org/zbraniecki/pluralrules.svg?branch=master)](https://travis-ci.org/zbraniecki/pluralrules) [![Coverage Status](https://coveralls.io/repos/github/zbraniecki/pluralrules/badge.svg?branch=master)](https://coveralls.io/github/zbraniecki/pluralrules?branch=master) This library is intended to be used to find the plural category of numeric input. Status ------ Currently produces operands compliant with CLDR 36 into Rust 1.31 and above. **Updating CLDR Data** If you would like to update rules.rs with plural rules that are not the specified version above (e.g. future versions of CLDR or external CLDR-compliant rules), you can regenerate the logic in rules.rs with the command: cargo regenerate-data You will need to replace the JSON files under `/cldr_data/` with your new CLDR JSON files. Local Development ----------------- cargo build cargo test When submitting a PR please use `cargo fmt`. Contributors ------------ * [manishearth](https://github.com/manishearth) Thank you to all contributors! [CLDR]: https://cldr.unicode.org/ [PluralRules]: https://cldr.unicode.org/index/cldr-spec/plural-rules [LDML Language Plural Rules Syntax]: https://unicode.org/reports/tr35/tr35-numbers.html#Language_Plural_Rules intl_pluralrules-7.0.2/benches/pluralrules.rs000064400000000000000000000041751046102023000175700ustar 00000000000000use criterion::criterion_group; use criterion::criterion_main; use criterion::BenchmarkId; use criterion::Criterion; use intl_pluralrules::{PluralRuleType, PluralRules}; use unic_langid::{langid, LanguageIdentifier}; fn plural_rules(c: &mut Criterion) { let langs = &["uk", "de", "sk", "ar", "fr", "it", "en", "cs", "es", "zh"]; let langs: Vec = langs .iter() .map(|l| l.parse().expect("Parsing failed")) .collect(); c.bench_with_input( BenchmarkId::new("construct", langs.len()), &langs, |b, langs| { b.iter(|| { for lang in langs { PluralRules::create(lang.clone(), PluralRuleType::ORDINAL).unwrap(); PluralRules::create(lang.clone(), PluralRuleType::CARDINAL).unwrap(); } }); }, ); let samples = &[ 1, 2, 3, 4, 5, 25, 134, 910293019, 12, 1412, -12, 15, 2931, 31231, 3123, 13231, 91, 0, 231, -2, -45, 33, 728, 2, 291, 24, 479, 291, 778, 919, 93, ]; let langid_pl = langid!("pl"); let ipr = PluralRules::create(langid_pl.clone(), PluralRuleType::CARDINAL).unwrap(); c.bench_with_input( BenchmarkId::new("select", samples.len()), samples, |b, samples| { b.iter(|| { for value in samples { ipr.select(*value).unwrap(); } }); }, ); c.bench_function("total", |b| { b.iter(|| { let ipr = PluralRules::create(langid_pl.clone(), PluralRuleType::CARDINAL).unwrap(); ipr.select(1).unwrap(); ipr.select(2).unwrap(); ipr.select(3).unwrap(); ipr.select(4).unwrap(); ipr.select(5).unwrap(); ipr.select(25).unwrap(); ipr.select(134).unwrap(); ipr.select(5090).unwrap(); ipr.select(910293019).unwrap(); ipr.select(5.2).unwrap(); ipr.select(-0.2).unwrap(); ipr.select("12.06").unwrap(); }) }); } criterion_group!(benches, plural_rules,); criterion_main!(benches); intl_pluralrules-7.0.2/src/lib.rs000064400000000000000000000172051046102023000151420ustar 00000000000000//! A crate for generating plural rule operands from numberical input. //! //! This crate generates plural operands according to the specifications outlined at [Unicode's website](https://unicode.org/reports/tr35/tr35-numbers.html#Operands). //! //! Input is supported for int, float, and &str. //! //! # Examples //! //! Plural rules example for Polish //! //! ``` //! use intl_pluralrules::{PluralRules, PluralRuleType, PluralCategory}; //! use unic_langid::LanguageIdentifier; //! //! let langid: LanguageIdentifier = "pl".parse().expect("Parsing failed."); //! //! assert!(PluralRules::get_locales(PluralRuleType::CARDINAL).contains(&langid)); //! //! let pr = PluralRules::create(langid.clone(), PluralRuleType::CARDINAL).unwrap(); //! assert_eq!(pr.select(1), Ok(PluralCategory::ONE)); //! assert_eq!(pr.select("3"), Ok(PluralCategory::FEW)); //! assert_eq!(pr.select(12), Ok(PluralCategory::MANY)); //! assert_eq!(pr.select("5.0"), Ok(PluralCategory::OTHER)); //! //! assert_eq!(pr.get_locale(), &langid); //! ``` /// A public AST module for plural rule representations. pub mod operands; #[cfg(not(tarpaulin_include))] mod rules; use std::convert::TryInto; use unic_langid::LanguageIdentifier; use crate::operands::PluralOperands; use crate::rules::*; /// A public enum for handling the plural category. /// Each plural category will vary, depending on the language that is being used and whether that language has that plural category. #[derive(Debug, Eq, PartialEq)] pub enum PluralCategory { ZERO, ONE, TWO, FEW, MANY, OTHER, } /// A public enum for handling plural type. #[derive(Copy, Clone, Hash, PartialEq, Eq)] pub enum PluralRuleType { /// Ordinal numbers express position or rank in a sequence. [More about oridinal numbers](https://en.wikipedia.org/wiki/Ordinal_number_(linguistics)) ORDINAL, /// Cardinal numbers are natural numbers. [More about cardinal numbers](https://en.wikipedia.org/wiki/Cardinal_number) CARDINAL, } // pub use rules::PluralRuleType; /// CLDR_VERSION is the version of CLDR extracted from the file used to generate rules.rs. pub use crate::rules::CLDR_VERSION; /// The main structure for selecting plural rules. /// /// # Examples /// /// ``` /// use intl_pluralrules::{PluralRules, PluralRuleType, PluralCategory}; /// use unic_langid::LanguageIdentifier; /// /// let langid: LanguageIdentifier = "naq".parse().expect("Parsing failed."); /// let pr_naq = PluralRules::create(langid, PluralRuleType::CARDINAL).unwrap(); /// assert_eq!(pr_naq.select(1), Ok(PluralCategory::ONE)); /// assert_eq!(pr_naq.select("2"), Ok(PluralCategory::TWO)); /// assert_eq!(pr_naq.select(5.0), Ok(PluralCategory::OTHER)); /// ``` #[derive(Clone)] pub struct PluralRules { locale: LanguageIdentifier, function: PluralRule, } impl PluralRules { /// Returns an instance of PluralRules. /// /// # Examples /// ``` /// use intl_pluralrules::{PluralRules, PluralRuleType, PluralCategory}; /// use unic_langid::LanguageIdentifier; /// /// let langid: LanguageIdentifier = "naq".parse().expect("Parsing failed."); /// let pr_naq = PluralRules::create(langid, PluralRuleType::CARDINAL); /// assert_eq!(pr_naq.is_ok(), !pr_naq.is_err()); /// /// let langid: LanguageIdentifier = "xx".parse().expect("Parsing failed."); /// let pr_broken = PluralRules::create(langid, PluralRuleType::CARDINAL); /// assert_eq!(pr_broken.is_err(), !pr_broken.is_ok()); /// ``` pub fn create>( langid: L, prt: PluralRuleType, ) -> Result { let langid = langid.into(); let returned_rule = match prt { PluralRuleType::CARDINAL => { let idx = rules::PRS_CARDINAL.binary_search_by_key(&&langid, |(l, _)| l); idx.map(|idx| rules::PRS_CARDINAL[idx].1) } PluralRuleType::ORDINAL => { let idx = rules::PRS_ORDINAL.binary_search_by_key(&&langid, |(l, _)| l); idx.map(|idx| rules::PRS_ORDINAL[idx].1) } }; match returned_rule { Ok(returned_rule) => Ok(Self { locale: langid, function: returned_rule, }), Err(_) => Err("unknown locale"), } } /// Returns a result of the plural category for the given input. /// /// If the input is not numeric. /// /// # Examples /// ``` /// use intl_pluralrules::{PluralRules, PluralRuleType, PluralCategory}; /// use unic_langid::LanguageIdentifier; /// /// let langid: LanguageIdentifier = "naq".parse().expect("Parsing failed."); /// let pr_naq = PluralRules::create(langid, PluralRuleType::CARDINAL).unwrap(); /// assert_eq!(pr_naq.select(1), Ok(PluralCategory::ONE)); /// assert_eq!(pr_naq.select(2), Ok(PluralCategory::TWO)); /// assert_eq!(pr_naq.select(5), Ok(PluralCategory::OTHER)); /// ``` pub fn select>( &self, number: N, ) -> Result { let ops = number.try_into(); let pr = self.function; match ops { Ok(ops) => Ok(pr(&ops)), Err(_) => Err("Argument can not be parsed to operands."), } } /// Returns a list of the available locales. /// /// # Examples /// ``` /// use intl_pluralrules::{PluralRules, PluralRuleType}; /// /// assert_eq!( /// PluralRules::get_locales(PluralRuleType::CARDINAL).is_empty(), /// false /// ); /// ``` pub fn get_locales(prt: PluralRuleType) -> Vec { let prs = match prt { PluralRuleType::CARDINAL => rules::PRS_CARDINAL, PluralRuleType::ORDINAL => rules::PRS_ORDINAL, }; prs.iter().map(|(l, _)| l.clone()).collect() } /// Returns the locale name for this PluralRule instance. /// /// # Examples /// ``` /// use intl_pluralrules::{PluralRules, PluralRuleType}; /// use unic_langid::LanguageIdentifier; /// /// let langid: LanguageIdentifier = "naq".parse().expect("Parsing failed."); /// let pr_naq = PluralRules::create(langid.clone(), PluralRuleType::CARDINAL).unwrap(); /// assert_eq!(pr_naq.get_locale(), &langid); /// ``` pub fn get_locale(&self) -> &LanguageIdentifier { &self.locale } } #[cfg(test)] mod tests { use super::{PluralCategory, PluralRuleType, PluralRules, CLDR_VERSION}; use unic_langid::LanguageIdentifier; #[test] fn cardinals_test() { let langid: LanguageIdentifier = "naq".parse().expect("Parsing failed."); let pr_naq = PluralRules::create(langid, PluralRuleType::CARDINAL).unwrap(); assert_eq!(pr_naq.select(1), Ok(PluralCategory::ONE)); assert_eq!(pr_naq.select(2), Ok(PluralCategory::TWO)); assert_eq!(pr_naq.select(5), Ok(PluralCategory::OTHER)); let langid: LanguageIdentifier = "xx".parse().expect("Parsing failed."); let pr_broken = PluralRules::create(langid, PluralRuleType::CARDINAL); assert_eq!(pr_broken.is_err(), !pr_broken.is_ok()); } #[test] fn ordinals_rules() { let langid: LanguageIdentifier = "uk".parse().expect("Parsing failed."); let pr_naq = PluralRules::create(langid, PluralRuleType::ORDINAL).unwrap(); assert_eq!(pr_naq.select(33), Ok(PluralCategory::FEW)); assert_eq!(pr_naq.select(113), Ok(PluralCategory::OTHER)); } #[test] fn version_test() { assert_eq!(CLDR_VERSION, 37); } #[test] fn locale_test() { assert_eq!( PluralRules::get_locales(PluralRuleType::CARDINAL).is_empty(), false ); } } intl_pluralrules-7.0.2/src/operands.rs000064400000000000000000000123461046102023000162100ustar 00000000000000//! Plural operands in compliance with [CLDR Plural Rules](https://unicode.org/reports/tr35/tr35-numbers.html#Language_Plural_Rules). //! //! See [full operands description](https://unicode.org/reports/tr35/tr35-numbers.html#Operands). //! //! # Examples //! //! From int //! //! ``` //! use std::convert::TryFrom; //! use intl_pluralrules::operands::*; //! assert_eq!(Ok(PluralOperands { //! n: 2_f64, //! i: 2, //! v: 0, //! w: 0, //! f: 0, //! t: 0, //! }), PluralOperands::try_from(2)) //! ``` //! //! From float //! //! ``` //! use std::convert::TryFrom; //! use intl_pluralrules::operands::*; //! assert_eq!(Ok(PluralOperands { //! n: 1234.567_f64, //! i: 1234, //! v: 3, //! w: 3, //! f: 567, //! t: 567, //! }), PluralOperands::try_from("-1234.567")) //! ``` //! //! From &str //! //! ``` //! use std::convert::TryFrom; //! use intl_pluralrules::operands::*; //! assert_eq!(Ok(PluralOperands { //! n: 123.45_f64, //! i: 123, //! v: 2, //! w: 2, //! f: 45, //! t: 45, //! }), PluralOperands::try_from(123.45)) //! ``` #![cfg_attr(feature = "cargo-clippy", allow(clippy::cast_lossless))] use std::convert::TryFrom; use std::isize; use std::str::FromStr; /// A full plural operands representation of a number. See [CLDR Plural Rules](https://unicode.org/reports/tr35/tr35-numbers.html#Language_Plural_Rules) for complete operands description. #[derive(Debug, PartialEq)] pub struct PluralOperands { /// Absolute value of input pub n: f64, /// Integer value of input pub i: u64, /// Number of visible fraction digits with trailing zeros pub v: usize, /// Number of visible fraction digits without trailing zeros pub w: usize, /// Visible fraction digits with trailing zeros pub f: u64, /// Visible fraction digits without trailing zeros pub t: u64, } impl<'a> TryFrom<&'a str> for PluralOperands { type Error = &'static str; fn try_from(input: &'a str) -> Result { let abs_str = if input.starts_with('-') { &input[1..] } else { &input }; let absolute_value = f64::from_str(&abs_str).map_err(|_| "Incorrect number passed!")?; let integer_digits; let num_fraction_digits0; let num_fraction_digits; let fraction_digits0; let fraction_digits; if let Some(dec_pos) = abs_str.find('.') { let int_str = &abs_str[..dec_pos]; let dec_str = &abs_str[(dec_pos + 1)..]; integer_digits = u64::from_str(&int_str).map_err(|_| "Could not convert string to integer!")?; let backtrace = dec_str.trim_end_matches('0'); num_fraction_digits0 = dec_str.len() as usize; num_fraction_digits = backtrace.len() as usize; fraction_digits0 = u64::from_str(dec_str).map_err(|_| "Could not convert string to integer!")?; fraction_digits = u64::from_str(backtrace).unwrap_or(0); } else { integer_digits = absolute_value as u64; num_fraction_digits0 = 0; num_fraction_digits = 0; fraction_digits0 = 0; fraction_digits = 0; } Ok(PluralOperands { n: absolute_value, i: integer_digits, v: num_fraction_digits0, w: num_fraction_digits, f: fraction_digits0, t: fraction_digits, }) } } macro_rules! impl_integer_type { ($ty:ident) => { impl From<$ty> for PluralOperands { fn from(input: $ty) -> Self { // XXXManishearth converting from u32 or u64 to isize may wrap PluralOperands { n: input as f64, i: input as u64, v: 0, w: 0, f: 0, t: 0, } } } }; ($($ty:ident)+) => { $(impl_integer_type!($ty);)+ }; } macro_rules! impl_signed_integer_type { ($ty:ident) => { impl TryFrom<$ty> for PluralOperands { type Error = &'static str; fn try_from(input: $ty) -> Result { // XXXManishearth converting from i64 to isize may wrap let x = (input as isize).checked_abs().ok_or("Number too big")?; Ok(PluralOperands { n: x as f64, i: x as u64, v: 0, w: 0, f: 0, t: 0, }) } } }; ($($ty:ident)+) => { $(impl_signed_integer_type!($ty);)+ }; } macro_rules! impl_convert_type { ($ty:ident) => { impl TryFrom<$ty> for PluralOperands { type Error = &'static str; fn try_from(input: $ty) -> Result { let as_str: &str = &input.to_string(); PluralOperands::try_from(as_str) } } }; ($($ty:ident)+) => { $(impl_convert_type!($ty);)+ }; } impl_integer_type!(u8 u16 u32 u64 usize); impl_signed_integer_type!(i8 i16 i32 i64 isize); // XXXManishearth we can likely have dedicated float impls here impl_convert_type!(f32 f64 String); intl_pluralrules-7.0.2/src/rules.rs000064400000000000000000002556761046102023000155460ustar 00000000000000#![allow(unused_variables, unused_parens)] #![cfg_attr(feature = "cargo-clippy", allow(clippy::float_cmp))] #![cfg_attr(feature = "cargo-clippy", allow(clippy::unreadable_literal))] #![cfg_attr(feature = "cargo-clippy", allow(clippy::nonminimal_bool))] use super::operands::PluralOperands; use super::PluralCategory; use unic_langid::subtags; use unic_langid::LanguageIdentifier; pub type PluralRule = fn(&PluralOperands) -> PluralCategory; pub static CLDR_VERSION: usize = 37; macro_rules! langid { ( $ lang : expr , $ script : expr , $ region : expr ) => {{ unsafe { LanguageIdentifier::from_raw_parts_unchecked($lang, $script, $region, None) } }}; } pub const PRS_CARDINAL: &[(LanguageIdentifier, PluralRule)] = &[ ( langid!(subtags::Language::from_raw_unchecked(26209u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(27489u64), None, None), |po| { if ((0..=1).contains(&(po.i)) && po.f == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28001u64), None, None), |po| { if (po.i == 0) || (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28257u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29281u64), None, None), |po| { if ((3..=10).contains(&(po.i))) { PluralCategory::FEW } else if ((11..=99).contains(&(po.i))) { PluralCategory::MANY } else if (po.n == 1.0) { PluralCategory::ONE } else if (po.n == 2.0) { PluralCategory::TWO } else if (po.n == 0.0) { PluralCategory::ZERO } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7565921u64), None, None ), |po| { if ((3..=10).contains(&(po.i))) { PluralCategory::FEW } else if ((11..=99).contains(&(po.i))) { PluralCategory::MANY } else if (po.n == 1.0) { PluralCategory::ONE } else if (po.n == 2.0) { PluralCategory::TWO } else if (po.n == 0.0) { PluralCategory::ZERO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29537u64), None, None), |po| { if (po.i == 0) || (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6386529u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7631713u64), None, None ), |po| { if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(31329u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(25954u64), None, None), |po| { if ((2..=4).contains(&(po.i)) && !(12..=14).contains(&(po.i))) { PluralCategory::FEW } else if (po.i % 10 == 0) || ((5..=9).contains(&(po.i))) || ((11..=14).contains(&(po.i))) { PluralCategory::MANY } else if (po.i % 10 == 1 && po.i % 100 != 11) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7169378u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(8021346u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(26466u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7301218u64), None, None ), |po| { if ((0..=1).contains(&(po.i)) && po.f == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28002u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(28258u64), None, None), |po| { if (po.i == 0) || (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28514u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(29282u64), None, None), |po| { if ((po.i % 10 == 9 || (3..=4).contains(&(po.i))) && !(10..=19).contains(&(po.i)) && !(70..=79).contains(&(po.i)) && !(90..=99).contains(&(po.i))) { PluralCategory::FEW } else if (po.n != 0.0 && po.i % 1000000 == 0) { PluralCategory::MANY } else if (po.i % 10 == 1 && po.i % 100 != 11 && po.i % 100 != 71 && po.i % 100 != 91) { PluralCategory::ONE } else if (po.i % 10 == 2 && po.i % 100 != 12 && po.i % 100 != 72 && po.i % 100 != 92) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7893602u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29538u64), None, None), |po| { if (po.v == 0 && (2..=4).contains(&(po.i % 10)) && !(12..=14).contains(&(po.i % 100))) || ((2..=4).contains(&(po.f % 10)) && !(12..=14).contains(&(po.f % 100))) { PluralCategory::FEW } else if (po.v == 0 && po.i % 10 == 1 && po.i % 100 != 11) || (po.f % 10 == 1 && po.f % 100 != 11) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(24931u64), None, None), |po| { if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(25955u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6448483u64), None, None ), |po| { if (po.v == 0 && (po.i == 1 || po.i == 2 || po.i == 3)) || (po.v == 0 && po.i % 10 != 4 && po.i % 10 != 6 && po.i % 10 != 9) || (po.v != 0 && po.f % 10 != 4 && po.f % 10 != 6 && po.f % 10 != 9) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6776675u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7497827u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6450019u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29539u64), None, None), |po| { if ((2..=4).contains(&(po.i)) && po.v == 0) { PluralCategory::FEW } else if (po.v != 0) { PluralCategory::MANY } else if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(31075u64), None, None), |po| { if (po.n == 3.0) { PluralCategory::FEW } else if (po.n == 6.0) { PluralCategory::MANY } else if (po.n == 1.0) { PluralCategory::ONE } else if (po.n == 2.0) { PluralCategory::TWO } else if (po.n == 0.0) { PluralCategory::ZERO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(24932u64), None, None), |po| { if (po.n == 1.0) || (po.t != 0 && (po.i == 0 || po.i == 1)) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(25956u64), None, None), |po| { if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6452068u64), None, None ), |po| { if (po.v == 0 && (3..=4).contains(&(po.i % 100))) || ((3..=4).contains(&(po.f % 100))) { PluralCategory::FEW } else if (po.v == 0 && po.i % 100 == 1) || (po.f % 100 == 1) { PluralCategory::ONE } else if (po.v == 0 && po.i % 100 == 2) || (po.f % 100 == 2) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(30308u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(31332u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(25957u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(27749u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28261u64), None, None), |po| { if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28517u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29541u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29797u64), None, None), |po| { if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(30053u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(24934u64), None, None), |po| { if (po.i == 0) || (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(26214u64), None, None), |po| { if (po.i == 0 || po.i == 1) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(26982u64), None, None), |po| { if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7104870u64), None, None ), |po| { if (po.v == 0 && (po.i == 1 || po.i == 2 || po.i == 3)) || (po.v == 0 && po.i % 10 != 4 && po.i % 10 != 6 && po.i % 10 != 9) || (po.v != 0 && po.f % 10 != 4 && po.f % 10 != 6 && po.f % 10 != 9) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28518u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29286u64), None, None), |po| { if (po.i == 0 || po.i == 1) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7501158u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(31078u64), None, None), |po| { if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(24935u64), None, None), |po| { if ((3..=6).contains(&(po.i)) && po.f == 0) { PluralCategory::FEW } else if ((7..=10).contains(&(po.i)) && po.f == 0) { PluralCategory::MANY } else if (po.n == 1.0) { PluralCategory::ONE } else if (po.n == 2.0) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(25703u64), None, None), |po| { if ((3..=10).contains(&(po.i)) && po.f == 0 || (13..=19).contains(&(po.i)) && po.f == 0) { PluralCategory::FEW } else if (po.n == 1.0 || po.n == 11.0) { PluralCategory::ONE } else if (po.n == 2.0 || po.n == 12.0) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(27751u64), None, None), |po| { if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7828327u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(30055u64), None, None), |po| { if (po.i == 0) || (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7828839u64), None, None ), |po| { if ((0..=1).contains(&(po.i)) && po.f == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(30311u64), None, None), |po| { if (po.v == 0 && (po.i % 100 == 0 || po.i % 100 == 20 || po.i % 100 == 40 || po.i % 100 == 60 || po.i % 100 == 80)) { PluralCategory::FEW } else if (po.v != 0) { PluralCategory::MANY } else if (po.v == 0 && po.i % 10 == 1) { PluralCategory::ONE } else if (po.v == 0 && po.i % 10 == 2) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(24936u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7823720u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(25960u64), None, None), |po| { if (po.v == 0 && !(0..=10).contains(&(po.i)) && po.f == 0 && po.i % 10 == 0) { PluralCategory::MANY } else if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else if (po.i == 2 && po.v == 0) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(26984u64), None, None), |po| { if (po.i == 0) || (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29288u64), None, None), |po| { if (po.v == 0 && (2..=4).contains(&(po.i % 10)) && !(12..=14).contains(&(po.i % 100))) || ((2..=4).contains(&(po.f % 10)) && !(12..=14).contains(&(po.f % 100))) { PluralCategory::FEW } else if (po.v == 0 && po.i % 10 == 1 && po.i % 100 != 11) || (po.f % 10 == 1 && po.f % 100 != 11) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6452072u64), None, None ), |po| { if (po.v == 0 && (3..=4).contains(&(po.i % 100))) || ((3..=4).contains(&(po.f % 100))) { PluralCategory::FEW } else if (po.v == 0 && po.i % 100 == 1) || (po.f % 100 == 1) { PluralCategory::ONE } else if (po.v == 0 && po.i % 100 == 2) || (po.f % 100 == 2) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(30056u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(31080u64), None, None), |po| { if (po.i == 0 || po.i == 1) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(24937u64), None, None), |po| { if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(25705u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(26473u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(26985u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(28265u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(28521u64), None, None), |po| { if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29545u64), None, None), |po| { if (po.t == 0 && po.i % 10 == 1 && po.i % 100 != 11) || (po.t != 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29801u64), None, None), |po| { if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(30057u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else if (po.n == 2.0) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(30569u64), None, None), |po| { if (po.v == 0 && !(0..=10).contains(&(po.i)) && po.f == 0 && po.i % 10 == 0) { PluralCategory::MANY } else if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else if (po.i == 2 && po.v == 0) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(24938u64), None, None), |po| PluralCategory::OTHER, ), ( langid!( subtags::Language::from_raw_unchecked(7299690u64), None, None ), |po| PluralCategory::OTHER, ), ( langid!( subtags::Language::from_raw_unchecked(7300970u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(26986u64), None, None), |po| { if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6516074u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(30314u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(30570u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(24939u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6447467u64), None, None ), |po| { if (po.i == 0 || po.i == 1) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6971755u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6775659u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6644843u64), None, None ), |po| PluralCategory::OTHER, ), ( langid!( subtags::Language::from_raw_unchecked(6382955u64), None, None ), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(27499u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6974315u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(27755u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28011u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(28267u64), None, None), |po| { if (po.i == 0) || (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28523u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(29547u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6452075u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6845291u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else if (po.n == 0.0) { PluralCategory::ZERO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(30059u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(30571u64), None, None), |po| { if (po.i % 100 == 3 || po.i % 100 == 23 || po.i % 100 == 43 || po.i % 100 == 63 || po.i % 100 == 83) { PluralCategory::FEW } else if (po.n != 1.0 && (po.i % 100 == 1 || po.i % 100 == 21 || po.i % 100 == 41 || po.i % 100 == 61 || po.i % 100 == 81)) { PluralCategory::MANY } else if (po.n == 1.0) { PluralCategory::ONE } else if (po.i % 100 == 2 || po.i % 100 == 22 || po.i % 100 == 42 || po.i % 100 == 62 || po.i % 100 == 82) || (po.i % 1000 == 0 && (po.i % 100000 == 40000 || po.i % 100000 == 60000 || po.i % 100000 == 80000 || (1000..=20000).contains(&(po.i)))) || (po.n != 0.0 && po.i % 1000000 == 100000) { PluralCategory::TWO } else if (po.n == 0.0) { PluralCategory::ZERO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(31083u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6775148u64), None, None ), |po| { if ((po.i == 0 || po.i == 1) && po.n != 0.0) { PluralCategory::ONE } else if (po.n == 0.0) { PluralCategory::ZERO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(25196u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(26476u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7629676u64), None, None ), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(28268u64), None, None), |po| { if ((0..=1).contains(&(po.i)) && po.f == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28524u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(29804u64), None, None), |po| { if ((2..=9).contains(&(po.i)) && !(11..=19).contains(&(po.i))) { PluralCategory::FEW } else if (po.f != 0) { PluralCategory::MANY } else if (po.i % 10 == 1 && !(11..=19).contains(&(po.i))) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(30316u64), None, None), |po| { if (po.i % 10 == 1 && po.i % 100 != 11) || (po.v == 2 && po.f % 10 == 1 && po.f % 100 != 11) || (po.v != 2 && po.f % 10 == 1) { PluralCategory::ONE } else if (po.i % 10 == 0) || ((11..=19).contains(&(po.i))) || (po.v == 2 && (11..=19).contains(&(po.f % 100))) { PluralCategory::ZERO } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7561581u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(26477u64), None, None), |po| { if ((0..=1).contains(&(po.i)) && po.f == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7300973u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(27501u64), None, None), |po| { if (po.v == 0 && po.i % 10 == 1 && po.i % 100 != 11) || (po.f % 10 == 1 && po.f % 100 != 11) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(27757u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28269u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28525u64), None, None), |po| { if (po.v != 0) || (po.n == 0.0) || ((2..=19).contains(&(po.i))) { PluralCategory::FEW } else if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29293u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29549u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(29805u64), None, None), |po| { if (po.n == 0.0) || ((2..=10).contains(&(po.i))) { PluralCategory::FEW } else if ((11..=19).contains(&(po.i))) { PluralCategory::MANY } else if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(31085u64), None, None), |po| PluralCategory::OTHER, ), ( langid!( subtags::Language::from_raw_unchecked(6840686u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7430510u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else if (po.n == 2.0) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(25198u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(25710u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(25966u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(27758u64), None, None), |po| { if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28270u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6844014u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28526u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7303534u64), None, None ), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(29294u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7304046u64), None, None ), |po| { if ((0..=1).contains(&(po.i)) && po.f == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(31086u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7240046u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28015u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29295u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29551u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6386543u64), None, None ), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(24944u64), None, None), |po| { if ((0..=1).contains(&(po.i)) && po.f == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7364976u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7168880u64), None, None ), |po| { if (po.i == 0) || (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(27760u64), None, None), |po| { if (po.v == 0 && (2..=4).contains(&(po.i % 10)) && !(12..=14).contains(&(po.i % 100))) { PluralCategory::FEW } else if (po.v == 0 && po.i != 1 && (0..=1).contains(&(po.i % 10))) || (po.v == 0 && (5..=9).contains(&(po.i % 10))) || (po.v == 0 && (12..=14).contains(&(po.i % 100))) { PluralCategory::MANY } else if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6779504u64), None, None ), |po| { if (po.i % 10 == 1 && po.i % 100 != 11) || (po.v == 2 && po.f % 10 == 1 && po.f % 100 != 11) || (po.v != 2 && po.f % 10 == 1) { PluralCategory::ONE } else if (po.i % 10 == 0) || ((11..=19).contains(&(po.i))) || (po.v == 2 && (11..=19).contains(&(po.f % 100))) { PluralCategory::ZERO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29552u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29808u64), None, None), |po| { if ((0..=1).contains(&(po.i))) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(29808u64), None, Some(subtags::Region::from_raw_unchecked(21584u32)) ), |po| { if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28018u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28530u64), None, None), |po| { if (po.v != 0) || (po.n == 0.0) || ((2..=19).contains(&(po.i))) { PluralCategory::FEW } else if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6713202u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(30066u64), None, None), |po| { if (po.v == 0 && (2..=4).contains(&(po.i % 10)) && !(12..=14).contains(&(po.i % 100))) { PluralCategory::FEW } else if (po.v == 0 && po.i % 10 == 0) || (po.v == 0 && (5..=9).contains(&(po.i % 10))) || (po.v == 0 && (11..=14).contains(&(po.i % 100))) { PluralCategory::MANY } else if (po.v == 0 && po.i % 10 == 1 && po.i % 100 != 11) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7042930u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6840691u64), None, None ), |po| PluralCategory::OTHER, ), ( langid!( subtags::Language::from_raw_unchecked(7430515u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7627123u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else if (po.n == 2.0) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(25459u64), None, None), |po| { if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7234419u64), None, None ), |po| { if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(25715u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6841459u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(25971u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else if (po.n == 2.0) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6841715u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7562611u64), None, None ), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(26483u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(26739u64), None, None), |po| { if (po.v == 0 && (2..=4).contains(&(po.i % 10)) && !(12..=14).contains(&(po.i % 100))) || ((2..=4).contains(&(po.f % 10)) && !(12..=14).contains(&(po.f % 100))) { PluralCategory::FEW } else if (po.v == 0 && po.i % 10 == 1 && po.i % 100 != 11) || (po.f % 10 == 1 && po.f % 100 != 11) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6908019u64), None, None ), |po| { if ((2..=10).contains(&(po.i)) && po.f == 0) { PluralCategory::FEW } else if (po.i == 0) || (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(26995u64), None, None), |po| { if (po.n == 0.0 || po.n == 1.0) || (po.i == 0 && po.f == 1) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(27507u64), None, None), |po| { if ((2..=4).contains(&(po.i)) && po.v == 0) { PluralCategory::FEW } else if (po.v != 0) { PluralCategory::MANY } else if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(27763u64), None, None), |po| { if (po.v == 0 && (3..=4).contains(&(po.i % 100))) || (po.v != 0) { PluralCategory::FEW } else if (po.v == 0 && po.i % 100 == 1) { PluralCategory::ONE } else if (po.v == 0 && po.i % 100 == 2) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6385011u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else if (po.n == 2.0) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6909299u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else if (po.n == 2.0) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6974835u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else if (po.n == 2.0) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7236979u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else if (po.n == 2.0) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7564659u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else if (po.n == 2.0) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28275u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28531u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29043u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29299u64), None, None), |po| { if (po.v == 0 && (2..=4).contains(&(po.i % 10)) && !(12..=14).contains(&(po.i % 100))) || ((2..=4).contains(&(po.f % 10)) && !(12..=14).contains(&(po.f % 100))) { PluralCategory::FEW } else if (po.v == 0 && po.i % 10 == 1 && po.i % 100 != 11) || (po.f % 10 == 1 && po.f % 100 != 11) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29555u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7959411u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29811u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(30067u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(30323u64), None, None), |po| { if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(30579u64), None, None), |po| { if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7502195u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(24948u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(25972u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7300468u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(26740u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(26996u64), None, None), |po| { if ((0..=1).contains(&(po.i)) && po.f == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6777204u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(27508u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(27764u64), None, None), |po| { if (po.v == 0 && (po.i == 1 || po.i == 2 || po.i == 3)) || (po.v == 0 && po.i % 10 != 4 && po.i % 10 != 6 && po.i % 10 != 9) || (po.v != 0 && po.f % 10 != 4 && po.f % 10 != 6 && po.f % 10 != 9) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28276u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28532u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(29300u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29556u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7174772u64), None, None ), |po| { if ((0..=1).contains(&(po.i)) && po.f == 0) || ((11..=99).contains(&(po.i)) && po.f == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(26485u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(27509u64), None, None), |po| { if (po.v == 0 && (2..=4).contains(&(po.i % 10)) && !(12..=14).contains(&(po.i % 100))) { PluralCategory::FEW } else if (po.v == 0 && po.i % 10 == 0) || (po.v == 0 && (5..=9).contains(&(po.i % 10))) || (po.v == 0 && (11..=14).contains(&(po.i % 100))) { PluralCategory::MANY } else if (po.v == 0 && po.i % 10 == 1 && po.i % 100 != 11) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29301u64), None, None), |po| { if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(31349u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(25974u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(26998u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(28534u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7239030u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(24951u64), None, None), |po| { if ((0..=1).contains(&(po.i)) && po.f == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6644087u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28535u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(26744u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6778744u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(27001u64), None, None), |po| { if (po.i == 1 && po.v == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28537u64), None, None), |po| PluralCategory::OTHER, ), ( langid!( subtags::Language::from_raw_unchecked(6649209u64), None, None ), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(26746u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(30074u64), None, None), |po| { if (po.i == 0) || (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ]; pub const PRS_ORDINAL: &[(LanguageIdentifier, PluralRule)] = &[ ( langid!(subtags::Language::from_raw_unchecked(26209u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(28001u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(28257u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(29281u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(29537u64), None, None), |po| { if (po.n == 4.0) { PluralCategory::FEW } else if (po.n == 6.0) { PluralCategory::MANY } else if (po.n == 1.0 || po.n == 5.0 || po.n == 7.0 || po.n == 8.0 || po.n == 9.0 || po.n == 10.0) { PluralCategory::ONE } else if (po.n == 2.0 || po.n == 3.0) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(31329u64), None, None), |po| { if (po.i % 10 == 3 || po.i % 10 == 4) || (po.i % 1000 == 100 || po.i % 1000 == 200 || po.i % 1000 == 300 || po.i % 1000 == 400 || po.i % 1000 == 500 || po.i % 1000 == 600 || po.i % 1000 == 700 || po.i % 1000 == 800 || po.i % 1000 == 900) { PluralCategory::FEW } else if (po.i == 0) || (po.i % 10 == 6) || (po.i % 100 == 40 || po.i % 100 == 60 || po.i % 100 == 90) { PluralCategory::MANY } else if (po.i % 10 == 1 || po.i % 10 == 2 || po.i % 10 == 5 || po.i % 10 == 7 || po.i % 10 == 8) || (po.i % 100 == 20 || po.i % 100 == 50 || po.i % 100 == 70 || po.i % 100 == 80) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(25954u64), None, None), |po| { if ((po.i % 10 == 2 || po.i % 10 == 3) && po.i % 100 != 12 && po.i % 100 != 13) { PluralCategory::FEW } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(26466u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(28258u64), None, None), |po| { if (po.n == 4.0) { PluralCategory::FEW } else if (po.n == 6.0) { PluralCategory::MANY } else if (po.n == 1.0 || po.n == 5.0 || po.n == 7.0 || po.n == 8.0 || po.n == 9.0 || po.n == 10.0) { PluralCategory::ONE } else if (po.n == 2.0 || po.n == 3.0) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29538u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(24931u64), None, None), |po| { if (po.n == 4.0) { PluralCategory::FEW } else if (po.n == 1.0 || po.n == 3.0) { PluralCategory::ONE } else if (po.n == 2.0) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(25955u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(29539u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(31075u64), None, None), |po| { if (po.n == 3.0 || po.n == 4.0) { PluralCategory::FEW } else if (po.n == 5.0 || po.n == 6.0) { PluralCategory::MANY } else if (po.n == 1.0) { PluralCategory::ONE } else if (po.n == 2.0) { PluralCategory::TWO } else if (po.n == 0.0 || po.n == 7.0 || po.n == 8.0 || po.n == 9.0) { PluralCategory::ZERO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(24932u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(25956u64), None, None), |po| PluralCategory::OTHER, ), ( langid!( subtags::Language::from_raw_unchecked(6452068u64), None, None ), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(27749u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(28261u64), None, None), |po| { if (po.i % 10 == 3 && po.i % 100 != 13) { PluralCategory::FEW } else if (po.i % 10 == 1 && po.i % 100 != 11) { PluralCategory::ONE } else if (po.i % 10 == 2 && po.i % 100 != 12) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29541u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(29797u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(30053u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(24934u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(26982u64), None, None), |po| PluralCategory::OTHER, ), ( langid!( subtags::Language::from_raw_unchecked(7104870u64), None, None ), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29286u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(31078u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(24935u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(25703u64), None, None), |po| { if (po.n == 3.0 || po.n == 13.0) { PluralCategory::FEW } else if (po.n == 1.0 || po.n == 11.0) { PluralCategory::ONE } else if (po.n == 2.0 || po.n == 12.0) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(27751u64), None, None), |po| PluralCategory::OTHER, ), ( langid!( subtags::Language::from_raw_unchecked(7828327u64), None, None ), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(30055u64), None, None), |po| { if (po.n == 4.0) { PluralCategory::FEW } else if (po.n == 6.0) { PluralCategory::MANY } else if (po.n == 1.0) { PluralCategory::ONE } else if (po.n == 2.0 || po.n == 3.0) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(25960u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(26984u64), None, None), |po| { if (po.n == 4.0) { PluralCategory::FEW } else if (po.n == 6.0) { PluralCategory::MANY } else if (po.n == 1.0) { PluralCategory::ONE } else if (po.n == 2.0 || po.n == 3.0) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29288u64), None, None), |po| PluralCategory::OTHER, ), ( langid!( subtags::Language::from_raw_unchecked(6452072u64), None, None ), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(30056u64), None, None), |po| { if (po.n == 1.0 || po.n == 5.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(31080u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(24937u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(25705u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(28265u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(29545u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(29801u64), None, None), |po| { if (po.n == 11.0 || po.n == 8.0 || po.n == 80.0 || po.n == 800.0) { PluralCategory::MANY } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(30569u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(24938u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(24939u64), None, None), |po| { if (po.i == 0) || (po.i % 100 == 40 || po.i % 100 == 60 || po.i % 100 == 80 || (2..=20).contains(&(po.i % 100))) { PluralCategory::MANY } else if (po.i == 1) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(27499u64), None, None), |po| { if (po.i % 10 == 6) || (po.i % 10 == 9) || (po.i % 10 == 0 && po.n != 0.0) { PluralCategory::MANY } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(28011u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(28267u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(28523u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(30571u64), None, None), |po| { if (po.n == 5.0) || (po.i % 100 == 5) { PluralCategory::MANY } else if ((1..=4).contains(&(po.i)) && po.f == 0) || ((1..=4).contains(&(po.i)) || (21..=24).contains(&(po.i)) || (41..=44).contains(&(po.i)) || (61..=64).contains(&(po.i)) || (81..=84).contains(&(po.i))) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(31083u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(28524u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29804u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(30316u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(27501u64), None, None), |po| { if ((po.i % 10 == 7 || po.i % 10 == 8) && po.i % 100 != 17 && po.i % 100 != 18) { PluralCategory::MANY } else if (po.i % 10 == 1 && po.i % 100 != 11) { PluralCategory::ONE } else if (po.i % 10 == 2 && po.i % 100 != 12) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(27757u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(28269u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(28525u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29293u64), None, None), |po| { if (po.n == 4.0) { PluralCategory::FEW } else if (po.n == 1.0) { PluralCategory::ONE } else if (po.n == 2.0 || po.n == 3.0) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29549u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(31085u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(25198u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(25966u64), None, None), |po| { if ((1..=4).contains(&(po.i)) && po.f == 0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(27758u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(29295u64), None, None), |po| { if (po.n == 4.0) { PluralCategory::FEW } else if (po.n == 6.0) { PluralCategory::MANY } else if (po.n == 1.0 || po.n == 5.0 || (7..=9).contains(&(po.i)) && po.f == 0) { PluralCategory::ONE } else if (po.n == 2.0 || po.n == 3.0) { PluralCategory::TWO } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(24944u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(27760u64), None, None), |po| PluralCategory::OTHER, ), ( langid!( subtags::Language::from_raw_unchecked(6779504u64), None, None ), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(29552u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(29808u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(28530u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(30066u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(25459u64), None, None), |po| { if (po.n == 11.0 || po.n == 8.0 || po.n == 80.0 || po.n == 800.0) { PluralCategory::MANY } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(7234419u64), None, None ), |po| { if (po.n == 11.0 || po.n == 8.0 || po.n == 80.0 || po.n == 800.0) { PluralCategory::MANY } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(25715u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(26739u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(26995u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(27507u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(27763u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(29043u64), None, None), |po| { if (po.i % 10 == 4 && po.i % 100 != 14) { PluralCategory::MANY } else if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29299u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(30323u64), None, None), |po| { if ((po.i % 10 == 1 || po.i % 10 == 2) && po.i % 100 != 11 && po.i % 100 != 12) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(30579u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(24948u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(25972u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(26740u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(27508u64), None, None), |po| { if (po.i % 10 == 6 || po.i % 10 == 9) || (po.n == 10.0) { PluralCategory::FEW } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(27764u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29300u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(27509u64), None, None), |po| { if (po.i % 10 == 3 && po.i % 100 != 13) { PluralCategory::FEW } else { PluralCategory::OTHER } }, ), ( langid!(subtags::Language::from_raw_unchecked(29301u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(31349u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(26998u64), None, None), |po| { if (po.n == 1.0) { PluralCategory::ONE } else { PluralCategory::OTHER } }, ), ( langid!( subtags::Language::from_raw_unchecked(6649209u64), None, None ), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(26746u64), None, None), |po| PluralCategory::OTHER, ), ( langid!(subtags::Language::from_raw_unchecked(30074u64), None, None), |po| PluralCategory::OTHER, ), ];