Получить юникод-категорию из рун
Я ищу способ получить категорию Unicode (RangeTable
) из rune
на ходу. Например, персонаж a
карты к Ll
категория. unicode
Пакет определяет все категории ( http://golang.org/pkg/unicode/), но я не вижу способа поиска категории из заданного rune
, Нужно ли вручную строить RangeTable
от rune
используя соответствующие смещения?
2 ответа
Решение
Документы для пакета "unicode" не имеют метода, который возвращает диапазоны для руны, но его не очень сложно создать:
func cat(r rune) (names []string) {
names = make([]string, 0)
for name, table := range unicode.Categories {
if unicode.Is(table, r) {
names = append(names, name)
}
}
return
}
Вот альтернативная версия, основанная на принятом ответе, которая возвращает категорию Unicode:
// UnicodeCategory returns the Unicode Character Category of the given rune.
func UnicodeCategory(r rune) string {
for name, table := range unicode.Categories {
if len(name) == 2 && unicode.Is(table, r) {
return name
}
}
return "Cn"
}