...
1 package flect
2
3 import (
4 "fmt"
5 "strconv"
6 )
7
8
9
10
11
12 func Ordinalize(s string) string {
13 return New(s).Ordinalize().String()
14 }
15
16
17
18
19
20 func (i Ident) Ordinalize() Ident {
21 number, err := strconv.Atoi(i.Original)
22 if err != nil {
23 return i
24 }
25 var s string
26 switch abs(number) % 100 {
27 case 11, 12, 13:
28 s = fmt.Sprintf("%dth", number)
29 default:
30 switch abs(number) % 10 {
31 case 1:
32 s = fmt.Sprintf("%dst", number)
33 case 2:
34 s = fmt.Sprintf("%dnd", number)
35 case 3:
36 s = fmt.Sprintf("%drd", number)
37 }
38 }
39 if s != "" {
40 return New(s)
41 }
42 return New(fmt.Sprintf("%dth", number))
43 }
44
View as plain text