summaryrefslogtreecommitdiff
path: root/src/lang.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lang.c')
-rw-r--r--src/lang.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/lang.c b/src/lang.c
index 4c05647c..a867f911 100644
--- a/src/lang.c
+++ b/src/lang.c
@@ -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
51struct Impl_Lang { 53struct 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 }