У меня задача подсчета количества воспринимаемых символов во входе. Вход представляет собой группу int (мы можем думать о ней как о int[]
), которая представляет кодовые точки Unicode.
java.text.BreakIterator.getCharacterInstance() не разрешено. (Я имею в виду, что их формула разрешена и я хочу, но пересказывание через их исходный код и таблицы состояний не дало мне нигде > . <)
Мне было интересно, какой правильный алгоритм подсчитать количество графем-кластеров, заданных некоторыми кодовыми точками?
Первоначально, я думал, что все, что мне нужно сделать, это объединить все вхождения:
-
U+0300 – U+036F
(сочетание диакритических знаков) -
U+1DC0 – U+1DFF
(объединение дополнений диакритических знаков) -
U+20D0 – U+20FF
(объединение диакритических знаков для символов) -
U+FE20 - U+FE2F
(объединение половинных знаков)
в предыдущую недиакритическую метку.
Однако я понял, что до этой операции я должен сначала удалить все несимволы.
Это включает в себя:
-
U+FDD0 - U+FDEF
-
Последние два кодовых точки каждой плоскости
Но, похоже, больше дел. Unicode.org говорится, что мы должны включать U+200C
(нуль-ширину не joiner) и U+200D
(нулевой ширины) как часть набор продолжающихся символов (источник).
Кроме того, в нем говорится о еще нескольких вещах, но вся тема трактуется абстрактно. Например, каковы диапазоны кодовых точек для интервалов, объединяющих метки, символов хамула jamo, которые формируют слоги hangul?
Кто-нибудь знает правильный алгоритм для подсчета количества кластеров графема, заданных int[]
кодовых точек?