-
Notifications
You must be signed in to change notification settings - Fork 0
/
conversion.go
87 lines (71 loc) · 2.11 KB
/
conversion.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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package stringx
import (
"regexp"
"strings"
)
var camel = regexp.MustCompile("(^[^A-Z]*|[A-Z]*)([A-Z][^A-Z]+|$)")
// CamelToSnake converts CamelCase to snake_case.
func CamelToSnake(s string) string {
return camelToSymbolSeparated(s, "_")
}
// CamelToDash converts CamelCase to dash-separated-string
func CamelToDash(s string) string {
return camelToSymbolSeparated(s, "-")
}
// CamelToSnake converts CamelCase to snake_case.
func PascalToSnake(s string) string {
return camelToSymbolSeparated(s, "_")
}
func PascalToDash(s string) string {
return camelToSymbolSeparated(s, "-")
}
// SnakeToCamel converts snake_case to CamelCase
func SnakeToCamel(s string) string {
return symbolSeparatedToCamel(s, "_")
}
// DashToCamel converts a dash-separated-string to CamelCase
func DashToCamel(s string) string {
return symbolSeparatedToCamel(s, "-")
}
// SnakeToCamel converts snake_case to CamelCase
func SnakeToPascal(s string) string {
return symbolSeparatedToPascal(s, "_")
}
// DashToCamel converts a dash-separated-string to CamelCase
func DashToPascal(s string) string {
return symbolSeparatedToPascal(s, "-")
}
// ToTitle converts the provided space separated string into a title case string, ensuring the string is all lowercase but capitalizing the first letter of every word
func ToTitle(s string) string {
words := New(s).ToLower().Split(" ")
for i, v := range words {
if len(v) == 0 {
continue
}
words[i] = strings.ToUpper(v[:1]) + v[1:]
}
return strings.Join(words, " ")
}
func symbolSeparatedToPascal(s string, separator string) string {
var ret string
for _, v := range strings.Split(strings.ToLower(s), separator) {
ret += strings.Title(v)
}
return ret
}
func symbolSeparatedToCamel(s string, separator string) string {
str := symbolSeparatedToPascal(s, separator)
return strings.ToLower(str[:1]) + str[1:]
}
func camelToSymbolSeparated(s string, separator string) string {
var a []string
for _, sub := range camel.FindAllStringSubmatch(s, -1) {
if sub[1] != "" {
a = append(a, sub[1])
}
if sub[2] != "" {
a = append(a, sub[2])
}
}
return strings.ToLower(strings.Join(a, separator))
}