github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/mkarray/case.go (about)

     1  package mkarray
     2  
     3  import (
     4  	"regexp"
     5  	"strings"
     6  )
     7  
     8  const (
     9  	caseLower = 1 + iota
    10  	caseLDate
    11  	caseFirst
    12  	caseUpper
    13  	caseTitle
    14  	caseTDate
    15  )
    16  
    17  var (
    18  	rxCaseLower = regexp.MustCompile(`^[- _/a-z]+$`)
    19  	rxCaseLDate = regexp.MustCompile(`^[- _/a-z0-9]+$`)
    20  	rxCaseFirst = regexp.MustCompile(`^[A-Z][- _/a-z0-9]+$`)
    21  	rxCaseUpper = regexp.MustCompile(`^[- _/A-Z0-9]+$`)
    22  	rxCaseTDate = regexp.MustCompile(`^[- _/a-zA-Z0-9]+$`)
    23  )
    24  
    25  func getCase(s string) int {
    26  	switch {
    27  	case rxCaseLower.MatchString(s):
    28  		return caseLower
    29  	case rxCaseLDate.MatchString(s):
    30  		return caseLDate
    31  	case rxCaseFirst.MatchString(s):
    32  		return caseFirst
    33  	case rxCaseUpper.MatchString(s):
    34  		return caseUpper
    35  	case s == strings.Title(s):
    36  		return caseTitle
    37  	case rxCaseTDate.MatchString(s):
    38  		return caseTDate
    39  	default:
    40  		return 0
    41  	}
    42  }
    43  
    44  func setCase(s string, c int) string {
    45  	switch c {
    46  	case caseLower:
    47  		return s
    48  	case caseLDate:
    49  		return strings.ToLower(s)
    50  	case caseFirst:
    51  		return strings.ToUpper(s[:1]) + s[1:]
    52  	case caseUpper:
    53  		return strings.ToUpper(s)
    54  	case caseTitle:
    55  		return strings.Title(s)
    56  	case caseTDate:
    57  		return s
    58  	default:
    59  		return s
    60  	}
    61  }