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  }