Получить юникод-категорию из рун

Я ищу способ получить категорию 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"
}
Другие вопросы по тегам