123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- 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)}
- }
- }
|