diff options
Diffstat (limited to 'src/lang.c')
-rw-r--r-- | src/lang.c | 17 |
1 files changed, 17 insertions, 0 deletions
@@ -46,6 +46,8 @@ enum iPluralType { | |||
46 | notEqualToOne_PluralType, | 46 | notEqualToOne_PluralType, |
47 | polish_PluralType, | 47 | polish_PluralType, |
48 | slavic_PluralType, | 48 | slavic_PluralType, |
49 | oneTwoMany_PluralType, | ||
50 | oneFewMany_PluralType, | ||
49 | }; | 51 | }; |
50 | 52 | ||
51 | struct Impl_Lang { | 53 | struct Impl_Lang { |
@@ -59,6 +61,10 @@ static size_t pluralIndex_Lang_(const iLang *d, int n) { | |||
59 | switch (d->pluralType) { | 61 | switch (d->pluralType) { |
60 | case notEqualToOne_PluralType: | 62 | case notEqualToOne_PluralType: |
61 | return n != 1; | 63 | return n != 1; |
64 | case oneTwoMany_PluralType: | ||
65 | return n == 1 ? 0 : n == 2 ? 1 : 2; | ||
66 | case oneFewMany_PluralType: | ||
67 | return n == 1 ? 0 : (n >= 2 && n <= 4) ? 1 : 2; | ||
62 | case polish_PluralType: | 68 | case polish_PluralType: |
63 | return n == 1 ? 0 | 69 | return n == 1 ? 0 |
64 | : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 | 70 | : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 |
@@ -82,11 +88,16 @@ static void load_Lang_(iLang *d, const char *id) { | |||
82 | const iBlock *data = equal_CStr(id, "fi") ? &blobFi_Embedded | 88 | const iBlock *data = equal_CStr(id, "fi") ? &blobFi_Embedded |
83 | : equal_CStr(id, "fr") ? &blobFr_Embedded | 89 | : equal_CStr(id, "fr") ? &blobFr_Embedded |
84 | : equal_CStr(id, "ru") ? &blobRu_Embedded | 90 | : equal_CStr(id, "ru") ? &blobRu_Embedded |
91 | : equal_CStr(id, "eo") ? &blobEo_Embedded | ||
85 | : equal_CStr(id, "es") ? &blobEs_Embedded | 92 | : equal_CStr(id, "es") ? &blobEs_Embedded |
93 | : equal_CStr(id, "es_MX") ? &blobEs_MX_Embedded | ||
86 | : equal_CStr(id, "de") ? &blobDe_Embedded | 94 | : equal_CStr(id, "de") ? &blobDe_Embedded |
95 | : equal_CStr(id, "gl") ? &blobGl_Embedded | ||
87 | : equal_CStr(id, "ia") ? &blobIa_Embedded | 96 | : equal_CStr(id, "ia") ? &blobIa_Embedded |
88 | : equal_CStr(id, "ie") ? &blobIe_Embedded | 97 | : equal_CStr(id, "ie") ? &blobIe_Embedded |
98 | : equal_CStr(id, "isv") ? &blobIsv_Embedded | ||
89 | : equal_CStr(id, "pl") ? &blobPl_Embedded | 99 | : equal_CStr(id, "pl") ? &blobPl_Embedded |
100 | : equal_CStr(id, "sk") ? &blobSk_Embedded | ||
90 | : equal_CStr(id, "sr") ? &blobSr_Embedded | 101 | : equal_CStr(id, "sr") ? &blobSr_Embedded |
91 | : equal_CStr(id, "tok") ? &blobTok_Embedded | 102 | : equal_CStr(id, "tok") ? &blobTok_Embedded |
92 | : equal_CStr(id, "zh_Hans") ? &blobZh_Hans_Embedded | 103 | : equal_CStr(id, "zh_Hans") ? &blobZh_Hans_Embedded |
@@ -95,6 +106,12 @@ static void load_Lang_(iLang *d, const char *id) { | |||
95 | if (data == &blobRu_Embedded || data == &blobSr_Embedded) { | 106 | if (data == &blobRu_Embedded || data == &blobSr_Embedded) { |
96 | d->pluralType = slavic_PluralType; | 107 | d->pluralType = slavic_PluralType; |
97 | } | 108 | } |
109 | else if (data == &blobIsv_Embedded) { | ||
110 | d->pluralType = oneTwoMany_PluralType; | ||
111 | } | ||
112 | else if (data == &blobSk_Embedded) { | ||
113 | d->pluralType = oneFewMany_PluralType; | ||
114 | } | ||
98 | else if (data == &blobPl_Embedded) { | 115 | else if (data == &blobPl_Embedded) { |
99 | d->pluralType = polish_PluralType; | 116 | d->pluralType = polish_PluralType; |
100 | } | 117 | } |