package check import ( "unicode" "unicode/utf8" ) // letterAt reports whether offset i holds a letter or a digit. Cyrillic takes // two bytes in UTF-8, so a single byte is not enough to decide. func letterAt(text string, i int) bool { if i >= len(text) { return false } r, _ := utf8.DecodeRuneInString(text[i:]) return unicode.IsLetter(r) || unicode.IsDigit(r) } // letterBefore reports whether a letter or a digit stands before offset i. func letterBefore(text string, i int) bool { if i <= 0 { return false } r, _ := utf8.DecodeLastRuneInString(text[:i]) return unicode.IsLetter(r) || unicode.IsDigit(r) } func digitAt(text string, i int) bool { if i >= len(text) { return false } r, _ := utf8.DecodeRuneInString(text[i:]) return unicode.IsDigit(r) } func digitBefore(text string, i int) bool { if i <= 0 { return false } r, _ := utf8.DecodeLastRuneInString(text[:i]) return unicode.IsDigit(r) }