88 lines
2.8 KiB
Go
88 lines
2.8 KiB
Go
package strcase
|
|
|
|
// Caser allows for customization of parsing and intialisms
|
|
type Caser struct {
|
|
initialisms map[string]bool
|
|
splitFn SplitFn
|
|
}
|
|
|
|
// NewCaser returns a configured Caser.
|
|
//
|
|
// A Caser should be created when you want fine grained control over how the words are split.
|
|
//
|
|
// Notes on function arguments
|
|
//
|
|
// goInitialisms: Whether to use Golint's intialisms
|
|
//
|
|
// initialismOverrides: A mapping of extra initialisms
|
|
// Keys must be in ALL CAPS. Merged with Golint's if goInitialisms is set.
|
|
// Setting a key to false will override Golint's.
|
|
//
|
|
// splitFn: How to separate words
|
|
// Override the default split function. Consider using NewSplitFn to
|
|
// configure one instead of writing your own.
|
|
func NewCaser(goInitialisms bool, initialismOverrides map[string]bool, splitFn SplitFn) *Caser {
|
|
c := &Caser{
|
|
initialisms: golintInitialisms,
|
|
splitFn: splitFn,
|
|
}
|
|
|
|
if c.splitFn == nil {
|
|
c.splitFn = defaultSplitFn
|
|
}
|
|
|
|
if goInitialisms && initialismOverrides != nil {
|
|
c.initialisms = map[string]bool{}
|
|
for k, v := range golintInitialisms {
|
|
c.initialisms[k] = v
|
|
}
|
|
for k, v := range initialismOverrides {
|
|
c.initialisms[k] = v
|
|
}
|
|
} else if !goInitialisms {
|
|
c.initialisms = initialismOverrides
|
|
}
|
|
|
|
return c
|
|
}
|
|
|
|
// ToSnake returns words in snake_case (lower case words with underscores).
|
|
func (c *Caser) ToSnake(s string) string {
|
|
return convert(s, c.splitFn, '_', LowerCase, c.initialisms)
|
|
}
|
|
|
|
// ToSNAKE returns words in SNAKE_CASE (upper case words with underscores).
|
|
// Also known as SCREAMING_SNAKE_CASE or UPPER_CASE.
|
|
func (c *Caser) ToSNAKE(s string) string {
|
|
return convert(s, c.splitFn, '_', UpperCase, c.initialisms)
|
|
}
|
|
|
|
// ToKebab returns words in kebab-case (lower case words with dashes).
|
|
// Also known as dash-case.
|
|
func (c *Caser) ToKebab(s string) string {
|
|
return convert(s, c.splitFn, '-', LowerCase, c.initialisms)
|
|
}
|
|
|
|
// ToKEBAB returns words in KEBAB-CASE (upper case words with dashes).
|
|
// Also known as SCREAMING-KEBAB-CASE or SCREAMING-DASH-CASE.
|
|
func (c *Caser) ToKEBAB(s string) string {
|
|
return convert(s, c.splitFn, '-', UpperCase, c.initialisms)
|
|
}
|
|
|
|
// ToPascal returns words in PascalCase (capitalized words concatenated together).
|
|
// Also known as UpperPascalCase.
|
|
func (c *Caser) ToPascal(s string) string {
|
|
return convert(s, c.splitFn, '\x00', TitleCase, c.initialisms)
|
|
}
|
|
|
|
// ToCamel returns words in camelCase (capitalized words concatenated together, with first word lower case).
|
|
// Also known as lowerCamelCase or mixedCase.
|
|
func (c *Caser) ToCamel(s string) string {
|
|
return convert(s, c.splitFn, '\x00', CamelCase, c.initialisms)
|
|
}
|
|
|
|
// ToCase returns words with a given case and delimiter.
|
|
func (c *Caser) ToCase(s string, wordCase WordCase, delimiter rune) string {
|
|
return convert(s, c.splitFn, delimiter, wordCase, c.initialisms)
|
|
}
|