diff options
Diffstat (limited to 'v2/internal/plural/rule_gen.go')
-rw-r--r-- | v2/internal/plural/rule_gen.go | 40 |
1 files changed, 34 insertions, 6 deletions
diff --git a/v2/internal/plural/rule_gen.go b/v2/internal/plural/rule_gen.go index b366d0a..b089925 100644 --- a/v2/internal/plural/rule_gen.go +++ b/v2/internal/plural/rule_gen.go @@ -12,7 +12,7 @@ func DefaultRules() Rules { return Other }, }) - addPluralRules(rules, []string{"am", "as", "bn", "fa", "gu", "hi", "kn", "mr", "zu"}, &Rule{ + addPluralRules(rules, []string{"am", "as", "bn", "fa", "gu", "hi", "kn", "zu"}, &Rule{ PluralForms: newPluralFormSet(One, Other), PluralFormFunc: func(ops *Operands) Form { // i = 0 or n = 1 @@ -85,7 +85,7 @@ func DefaultRules() Rules { return Other }, }) - addPluralRules(rules, []string{"af", "asa", "az", "bem", "bez", "bg", "brx", "ce", "cgg", "chr", "ckb", "dv", "ee", "el", "eo", "es", "eu", "fo", "fur", "gsw", "ha", "haw", "hu", "jgo", "jmc", "ka", "kaj", "kcg", "kk", "kkj", "kl", "ks", "ksb", "ku", "ky", "lb", "lg", "mas", "mgo", "ml", "mn", "nah", "nb", "nd", "ne", "nn", "nnh", "no", "nr", "ny", "nyn", "om", "or", "os", "pap", "ps", "rm", "rof", "rwk", "saq", "sd", "sdh", "seh", "sn", "so", "sq", "ss", "ssy", "st", "syr", "ta", "te", "teo", "tig", "tk", "tn", "tr", "ts", "ug", "uz", "ve", "vo", "vun", "wae", "xh", "xog"}, &Rule{ + addPluralRules(rules, []string{"af", "asa", "az", "bem", "bez", "bg", "brx", "ce", "cgg", "chr", "ckb", "dv", "ee", "el", "eo", "es", "eu", "fo", "fur", "gsw", "ha", "haw", "hu", "jgo", "jmc", "ka", "kaj", "kcg", "kk", "kkj", "kl", "ks", "ksb", "ku", "ky", "lb", "lg", "mas", "mgo", "ml", "mn", "mr", "nah", "nb", "nd", "ne", "nn", "nnh", "no", "nr", "ny", "nyn", "om", "or", "os", "pap", "ps", "rm", "rof", "rwk", "saq", "sd", "sdh", "seh", "sn", "so", "sq", "ss", "ssy", "st", "syr", "ta", "te", "teo", "tig", "tk", "tn", "tr", "ts", "ug", "uz", "ve", "vo", "vun", "wae", "xh", "xog"}, &Rule{ PluralForms: newPluralFormSet(One, Other), PluralFormFunc: func(ops *Operands) Form { // n = 1 @@ -128,7 +128,7 @@ func DefaultRules() Rules { return Other }, }) - addPluralRules(rules, []string{"fil", "tl"}, &Rule{ + addPluralRules(rules, []string{"ceb", "fil", "tl"}, &Rule{ PluralForms: newPluralFormSet(One, Other), PluralFormFunc: func(ops *Operands) Form { // v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 @@ -186,7 +186,7 @@ func DefaultRules() Rules { return Other }, }) - addPluralRules(rules, []string{"iu", "kw", "naq", "se", "sma", "smi", "smj", "smn", "sms"}, &Rule{ + addPluralRules(rules, []string{"iu", "naq", "se", "sma", "smi", "smj", "smn", "sms"}, &Rule{ PluralForms: newPluralFormSet(One, Two, Other), PluralFormFunc: func(ops *Operands) Form { // n = 1 @@ -222,10 +222,10 @@ func DefaultRules() Rules { if intEqualsAny(ops.I, 1) && intEqualsAny(ops.V, 0) { return One } - // v != 0 or n = 0 or n != 1 and n % 100 = 1..19 + // v != 0 or n = 0 or n % 100 = 2..19 if !intEqualsAny(ops.V, 0) || ops.NEqualsAny(0) || - !ops.NEqualsAny(1) && ops.NModInRange(100, 1, 19) { + ops.NModInRange(100, 2, 19) { return Few } return Other @@ -556,6 +556,34 @@ func DefaultRules() Rules { return Other }, }) + addPluralRules(rules, []string{"kw"}, &Rule{ + PluralForms: newPluralFormSet(Zero, One, Two, Few, Many, Other), + PluralFormFunc: func(ops *Operands) Form { + // n = 0 + if ops.NEqualsAny(0) { + return Zero + } + // n = 1 + if ops.NEqualsAny(1) { + return One + } + // n % 100 = 2,22,42,62,82 or n%1000 = 0 and n%100000=1000..20000,40000,60000,80000 or n!=0 and n%1000000=100000 + if ops.NModEqualsAny(100, 2, 22, 42, 62, 82) || + ops.NModEqualsAny(1000, 0) && (ops.NModInRange(100000, 1000, 20000) || ops.NModEqualsAny(100000, 40000, 60000, 80000)) || + !ops.NEqualsAny(0) && ops.NModEqualsAny(1000000, 100000) { + return Two + } + // n % 100 = 3,23,43,63,83 + if ops.NModEqualsAny(100, 3, 23, 43, 63, 83) { + return Few + } + // n != 1 and n % 100 = 1,21,41,61,81 + if !ops.NEqualsAny(1) && ops.NModEqualsAny(100, 1, 21, 41, 61, 81) { + return Many + } + return Other + }, + }) return rules } |