-
Notifications
You must be signed in to change notification settings - Fork 0
/
noun.go
56 lines (47 loc) · 1.08 KB
/
noun.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package neng
import "strings"
/* Returns plural form of a noun. */
func plural(noun string, nounsIrr [][]string) string {
nounLine := findIrregular(noun, nounsIrr)
if nounLine != nil {
return nounLine[1]
}
if endsWithAny(noun, []string{"fish", "ics", "gs", "craft", "hertz"}) {
return noun
}
if endsWithAny(noun, []string{"sh", "ch", "fix", "virus"}) {
return noun + "es"
}
if endsWithAny(noun, []string{"ff", "io", "tto"}) {
return noun + "s"
}
switch noun[len(noun)-2:] {
case "um":
return noun[:len(noun)-2] + "a"
case "us":
return noun[:len(noun)-2] + "i"
case "is":
return noun[:len(noun)-2] + "es"
case "ex", "ix":
return noun[:len(noun)-2] + "ices"
case "fe":
return noun[:len(noun)-2] + "ves"
}
seq := getSequence(noun)
switch noun[len(noun)-1] {
case 'y':
if strings.HasSuffix(seq, "v") {
return noun[:len(noun)-1] + "ies"
}
case 's', 'o', 'x':
return noun + "es"
case 'f':
return noun[:len(noun)-1] + "ves"
case 'z':
if strings.HasSuffix(seq, "vc") {
return doubleFinal(noun, "es")
}
return noun + "es"
}
return noun + "s"
}