github.com/bingoohuang/gg@v0.0.0-20240325092523-45da7dee9335/pkg/strcase/camel.go (about) 1 package strcase 2 3 import ( 4 "strings" 5 ) 6 7 // Converts a string to CamelCase 8 func toCamelInitCase(s string, initCase bool) string { 9 s = addWordBoundariesToNumbers(s) 10 s = strings.Trim(s, " ") 11 n := "" 12 capNext := initCase 13 lastUpper := false 14 15 for _, v := range s { 16 if IsA2Z(v) { 17 if lastUpper { 18 n += strings.ToLower(string(v)) 19 } else { 20 n += string(v) 21 lastUpper = true 22 } 23 } else { 24 lastUpper = false 25 } 26 27 if Is029(v) { 28 n += string(v) 29 } 30 31 if Isa2z(v) { 32 if capNext { 33 n += strings.ToUpper(string(v)) 34 } else { 35 n += string(v) 36 } 37 } 38 39 capNext = anyOf(v, '_', ' ', '-') 40 } 41 42 return n 43 } 44 45 // ToCamel converts a string to CamelCase 46 func ToCamel(s string) string { 47 return toCamelInitCase(s, true) 48 } 49 50 // ToCamelLower converts a string to lowerCamelCase 51 func ToCamelLower(s string) string { 52 if s == "" { 53 return s 54 } 55 56 i := 0 57 for ; i < len(s); i++ { 58 if r := rune(s[i]); !(r >= 'A' && r <= 'Z') { 59 break 60 } 61 } 62 63 if i == len(s) { 64 return strings.ToLower(s) 65 } 66 67 if i > 1 { // nolint gomnd 68 s = strings.ToLower(s[:i-1]) + s[i-1:] 69 } else if i > 0 { 70 s = strings.ToLower(s[:1]) + s[1:] 71 } 72 73 return toCamelInitCase(s, false) 74 }