mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-12-14 12:36:30 +00:00
60 lines
1.3 KiB
Go
60 lines
1.3 KiB
Go
|
package misspell
|
||
|
|
||
|
import (
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// WordCase is an enum of various word casing styles
|
||
|
type WordCase int
|
||
|
|
||
|
// Various WordCase types.. likely to be not correct
|
||
|
const (
|
||
|
CaseUnknown WordCase = iota
|
||
|
CaseLower
|
||
|
CaseUpper
|
||
|
CaseTitle
|
||
|
)
|
||
|
|
||
|
// CaseStyle returns what case style a word is in
|
||
|
func CaseStyle(word string) WordCase {
|
||
|
upperCount := 0
|
||
|
lowerCount := 0
|
||
|
|
||
|
// this iterates over RUNES not BYTES
|
||
|
for i := 0; i < len(word); i++ {
|
||
|
ch := word[i]
|
||
|
switch {
|
||
|
case ch >= 'a' && ch <= 'z':
|
||
|
lowerCount++
|
||
|
case ch >= 'A' && ch <= 'Z':
|
||
|
upperCount++
|
||
|
}
|
||
|
}
|
||
|
|
||
|
switch {
|
||
|
case upperCount != 0 && lowerCount == 0:
|
||
|
return CaseUpper
|
||
|
case upperCount == 0 && lowerCount != 0:
|
||
|
return CaseLower
|
||
|
case upperCount == 1 && lowerCount > 0 && word[0] >= 'A' && word[0] <= 'Z':
|
||
|
return CaseTitle
|
||
|
}
|
||
|
return CaseUnknown
|
||
|
}
|
||
|
|
||
|
// CaseVariations returns
|
||
|
// If AllUpper or First-Letter-Only is upcased: add the all upper case version
|
||
|
// If AllLower, add the original, the title and upcase forms
|
||
|
// If Mixed, return the original, and the all upcase form
|
||
|
//
|
||
|
func CaseVariations(word string, style WordCase) []string {
|
||
|
switch style {
|
||
|
case CaseLower:
|
||
|
return []string{word, strings.ToUpper(word[0:1]) + word[1:], strings.ToUpper(word)}
|
||
|
case CaseUpper:
|
||
|
return []string{strings.ToUpper(word)}
|
||
|
default:
|
||
|
return []string{word, strings.ToUpper(word)}
|
||
|
}
|
||
|
}
|