Свойства сочетания диакритических знаков
Для объединения диакритических знаков они считаются буквами? Поскольку, насколько я знаю, они могут сочетаться только с другими буквами в правильно сформированном Юникоде.
Функция ICU, позволяющая определить, является ли кодовая точка Unicode буквой, принимает только одну кодовую точку, поэтому для любой заданной кодовой точки она не может знать, были ли они объединены с диакритическим знаком, или, если это диакритический знак, с чем он сочетался. Я пытаюсь реализовать что-то похожее на регулярное выражение с поддержкой Юникода, используя такую конструкцию, как
while(is_letter(codepoint))
Тем не менее, я весьма обеспокоен тем, что произойдет, если codepoint
на самом деле диакритический знак, который будет сопоставлен с предыдущей кодовой точкой и другими знаками сопоставления.
Это безопасно сделать? Или мне придется явно находить и игнорировать диакритические знаки и другие сопоставительные знаки?
Изменить: что мне действительно нужно сделать, это итерация символов, а не кодовые точки.
Этот вопрос является жертвой проблемы XY. Мне нужно поднять вопрос о моей актуальной проблеме.
1 ответ
Я не совсем понимаю, что вы пытаетесь сделать, поэтому заранее прошу прощения, если это не тот ответ, который вы ищете, но:
Для объединения диакритических знаков они считаются буквами?
Вообще говоря, диакритические знаки считаются "знаками", а не "буквами". Например, U+0301 КОМБИНИРОВАНИЕ ОСТРОГО АКЦЕНТА, как в <">, является" непространственной меткой ", которая является одним из трех видов" метки ". Тем не менее, "буквы-модификаторы", которые считаются "буквами", тем не менее могут рассматриваться как диакритические знаки; например, U+02C0 ПИСЬМО МОДИФИКАТОРА GLOTTAL STOP, как в , является "буквой модификатора".
Если вы посмотрите основной файл базы данных символов Unicode (предупреждение: это текстовый файл 1,3 МБ), вы сможете понять, какие символы классифицируются как "буквы-модификаторы" (Lm
) и которые в качестве "непространственных знаков" (Mn
) или "пробелы" (Ms
) или "ограждающие знаки" (Me
).