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 }