- разбор документа по языку конвенций: шапка, области правил, блоки под метками - проверки формы правила, распространения, ссылок и самого suite.toml - словарь языка живёт в бинаре реестром «версия × естественный язык», темы и префиксы берутся только из манифеста
42 lines
1.0 KiB
Go
42 lines
1.0 KiB
Go
package check
|
|
|
|
import (
|
|
"unicode"
|
|
"unicode/utf8"
|
|
)
|
|
|
|
// letterAt отвечает, стоит ли по смещению i буква или цифра. Кириллица в UTF-8
|
|
// занимает два байта, поэтому решать по одному байту нельзя.
|
|
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 отвечает, стоит ли перед смещением 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)
|
|
}
|