Свойства сочетания диакритических знаков - PullRequest
4 голосов
/ 27 ноября 2011

Для объединения диакритических знаков они считаются буквами? Поскольку, насколько я знаю, они могут сочетаться только с другими буквами в правильно сформированном Юникоде.

Функция ICU для определения того, является ли кодовая точка Unicode буквой, принимает только одну кодовую точку, поэтому для любой заданной кодовой точки она не может знать, были ли они объединены с диакритическим знаком или диакритическим, каким оно было в сочетании с. Я пытаюсь реализовать что-то похожее на регулярное выражение с поддержкой Юникода, используя такую ​​конструкцию, как

while(is_letter(codepoint))

Тем не менее, я весьма обеспокоен тем, что произойдет, если codepoint на самом деле является диакритическим знаком, который будет сопоставляться с предыдущей кодовой точкой и другими знаками сопоставления.

Это безопасно сделать? Или мне придется явно находить и игнорировать диакритические знаки и другие сопоставительные знаки?

Редактировать: Что мне действительно нужно сделать, так это итерацию символов , а не кодовых точек .

Этот вопрос является жертвой проблемы XY. Мне нужно поднять вопрос о моей реальной проблеме .

1 Ответ

4 голосов
/ 27 ноября 2011

Мне не совсем понятно, что вы пытаетесь сделать, поэтому заранее прошу прощения, если это не тот ответ, который вы ищете, а:

За сочетание диакритических знаковОни считаются буквами?

Вообще говоря, диакритические знаки считаются «знаками», а не «буквами».Например, U + 0301 КОМБИНИРОВАНИЕ ОСТРЫЙ АКЦЕНТ, как в, является «непространственным знаком», который является одним из трех видов «знака».Однако «буквы-модификаторы», которые считаются «буквами», тем не менее могут рассматриваться как диакритические знаки;например, ГЛАВНАЯ ОСТАНОВКА ПИСЬМА МОДИФИКАТОРА U + 02C0, как в, это «буква модификатора».

Если вы посмотрите основной файл базы данных символов Unicode (предупреждение: это текстовый файл 1,3 МБ), вы можете понять, для чегосимволы классифицируются как «буквы-модификаторы» (Lm), а такие как «непространственные метки» (Mn) или «интервальные метки» (Ms) или «вмещающие метки» (Me).

...