You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
go-zero/tools/goctl/api/util/case.go

132 lines
2.4 KiB
Go

package util
import (
"strings"
"unicode"
)
// IsUpperCase returns true if the rune in A-Z
func IsUpperCase(r rune) bool {
if r >= 'A' && r <= 'Z' {
return true
}
return false
}
// IsLowerCase returns true if the rune in a-z
func IsLowerCase(r rune) bool {
if r >= 'a' && r <= 'z' {
return true
}
return false
}
// ToSnakeCase returns a copy string by converting camel case into snake case
func ToSnakeCase(s string) string {
var out []rune
for index, r := range s {
if index == 0 {
out = append(out, ToLowerCase(r))
continue
}
if IsUpperCase(r) && index != 0 {
if IsLowerCase(rune(s[index-1])) {
out = append(out, '_', ToLowerCase(r))
continue
}
if index < len(s)-1 && IsLowerCase(rune(s[index+1])) {
out = append(out, '_', ToLowerCase(r))
continue
}
out = append(out, ToLowerCase(r))
continue
}
out = append(out, r)
}
return string(out)
}
// ToCamelCase returns a copy string by converting snake case into camel case
func ToCamelCase(s string) string {
s = ToLower(s)
out := []rune{}
for index, r := range s {
if r == '_' {
continue
}
if index == 0 {
out = append(out, ToUpperCase(r))
continue
}
if index > 0 && s[index-1] == '_' {
out = append(out, ToUpperCase(r))
continue
}
out = append(out, r)
}
return string(out)
}
// ToLowerCase converts rune into lower case
func ToLowerCase(r rune) rune {
dx := 'A' - 'a'
if IsUpperCase(r) {
return r - dx
}
return r
}
// ToUpperCase converts rune into upper case
func ToUpperCase(r rune) rune {
dx := 'A' - 'a'
if IsLowerCase(r) {
return r + dx
}
return r
}
// ToLower returns a copy string by converting it into lower
func ToLower(s string) string {
var out []rune
for _, r := range s {
out = append(out, ToLowerCase(r))
}
return string(out)
}
// ToUpper returns a copy string by converting it into upper
func ToUpper(s string) string {
var out []rune
for _, r := range s {
out = append(out, ToUpperCase(r))
}
return string(out)
}
// UpperFirst converts s[0] into upper case
func UpperFirst(s string) string {
if len(s) == 0 {
return s
}
return ToUpper(s[:1]) + s[1:]
}
// UnExport converts the first letter into lower case
func UnExport(text string) bool {
var flag bool
str := strings.Map(func(r rune) rune {
if flag {
return r
}
if unicode.IsLetter(r) {
flag = true
return unicode.ToLower(r)
}
return r
}, text)
return str == text
}