~juju-qa/ubuntu/xenial/juju/xenial-2.0-beta3

« back to all changes in this revision

Viewing changes to src/github.com/chai2010/gettext-go/gettext/plural/formula.go

  • Committer: Martin Packman
  • Date: 2016-03-30 19:31:08 UTC
  • mfrom: (1.1.41)
  • Revision ID: martin.packman@canonical.com-20160330193108-h9iz3ak334uk0z5r
Merge new upstream source 2.0~beta3

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// Copyright 2013 ChaiShushan <chaishushan{AT}gmail.com>. All rights reserved.
2
 
// Use of this source code is governed by a BSD-style
3
 
// license that can be found in the LICENSE file.
4
 
 
5
 
package plural
6
 
 
7
 
import (
8
 
        "strings"
9
 
)
10
 
 
11
 
// Formula provides the language's standard plural formula.
12
 
func Formula(lang string) func(n int) int {
13
 
        if idx := index(lang); idx != -1 {
14
 
                return formulaTable[fmtForms(FormsTable[idx].Value)]
15
 
        }
16
 
        if idx := index("??"); idx != -1 {
17
 
                return formulaTable[fmtForms(FormsTable[idx].Value)]
18
 
        }
19
 
        return func(n int) int {
20
 
                return n
21
 
        }
22
 
}
23
 
 
24
 
func index(lang string) int {
25
 
        for i := 0; i < len(FormsTable); i++ {
26
 
                if strings.HasPrefix(lang, FormsTable[i].Lang) {
27
 
                        return i
28
 
                }
29
 
        }
30
 
        return -1
31
 
}
32
 
 
33
 
func fmtForms(forms string) string {
34
 
        forms = strings.TrimSpace(forms)
35
 
        forms = strings.Replace(forms, " ", "", -1)
36
 
        return forms
37
 
}
38
 
 
39
 
var formulaTable = map[string]func(n int) int{
40
 
        fmtForms("nplurals=n; plural=n-1;"): func(n int) int {
41
 
                if n > 0 {
42
 
                        return n - 1
43
 
                }
44
 
                return 0
45
 
        },
46
 
        fmtForms("nplurals=1; plural=0;"): func(n int) int {
47
 
                return 0
48
 
        },
49
 
        fmtForms("nplurals=2; plural=(n != 1);"): func(n int) int {
50
 
                if n <= 1 {
51
 
                        return 0
52
 
                }
53
 
                return 1
54
 
        },
55
 
        fmtForms("nplurals=2; plural=(n > 1);"): func(n int) int {
56
 
                if n <= 1 {
57
 
                        return 0
58
 
                }
59
 
                return 1
60
 
        },
61
 
        fmtForms("nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"): func(n int) int {
62
 
                if n%10 == 1 && n%100 != 11 {
63
 
                        return 0
64
 
                }
65
 
                if n != 0 {
66
 
                        return 1
67
 
                }
68
 
                return 2
69
 
        },
70
 
        fmtForms("nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;"): func(n int) int {
71
 
                if n == 1 {
72
 
                        return 0
73
 
                }
74
 
                if n == 2 {
75
 
                        return 1
76
 
                }
77
 
                return 2
78
 
        },
79
 
        fmtForms("nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;"): func(n int) int {
80
 
                if n == 1 {
81
 
                        return 0
82
 
                }
83
 
                if n == 0 || (n%100 > 0 && n%100 < 20) {
84
 
                        return 1
85
 
                }
86
 
                return 2
87
 
        },
88
 
        fmtForms("nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);"): func(n int) int {
89
 
                if n%10 == 1 && n%100 != 11 {
90
 
                        return 0
91
 
                }
92
 
                if n%10 >= 2 && (n%100 < 10 || n%100 >= 20) {
93
 
                        return 1
94
 
                }
95
 
                return 2
96
 
        },
97
 
        fmtForms("nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"): func(n int) int {
98
 
                if n%10 == 1 && n%100 != 11 {
99
 
                        return 0
100
 
                }
101
 
                if n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20) {
102
 
                        return 1
103
 
                }
104
 
                return 2
105
 
        },
106
 
        fmtForms("nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"): func(n int) int {
107
 
                if n%10 == 1 && n%100 != 11 {
108
 
                        return 0
109
 
                }
110
 
                if n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20) {
111
 
                        return 1
112
 
                }
113
 
                return 2
114
 
        },
115
 
        fmtForms("nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"): func(n int) int {
116
 
                if n%10 == 1 && n%100 != 11 {
117
 
                        return 0
118
 
                }
119
 
                if n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20) {
120
 
                        return 1
121
 
                }
122
 
                return 2
123
 
        },
124
 
        fmtForms("nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"): func(n int) int {
125
 
                if n%10 == 1 && n%100 != 11 {
126
 
                        return 0
127
 
                }
128
 
                if n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20) {
129
 
                        return 1
130
 
                }
131
 
                return 2
132
 
        },
133
 
        fmtForms("nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"): func(n int) int {
134
 
                if n%10 == 1 && n%100 != 11 {
135
 
                        return 0
136
 
                }
137
 
                if n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20) {
138
 
                        return 1
139
 
                }
140
 
                return 2
141
 
        },
142
 
        fmtForms("nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"): func(n int) int {
143
 
                if n == 1 {
144
 
                        return 0
145
 
                }
146
 
                if n >= 2 && n <= 4 {
147
 
                        return 1
148
 
                }
149
 
                return 2
150
 
        },
151
 
        fmtForms("nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"): func(n int) int {
152
 
                if n == 1 {
153
 
                        return 0
154
 
                }
155
 
                if n >= 2 && n <= 4 {
156
 
                        return 1
157
 
                }
158
 
                return 2
159
 
        },
160
 
        fmtForms("nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"): func(n int) int {
161
 
                if n == 1 {
162
 
                        return 0
163
 
                }
164
 
                if n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20) {
165
 
                        return 1
166
 
                }
167
 
                return 2
168
 
        },
169
 
        fmtForms("nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"): func(n int) int {
170
 
                if n%100 == 1 {
171
 
                        return 0
172
 
                }
173
 
                if n%100 == 2 {
174
 
                        return 1
175
 
                }
176
 
                if n%100 == 3 || n%100 == 4 {
177
 
                        return 2
178
 
                }
179
 
                return 3
180
 
        },
181
 
}