В чем разница между "объединением символов" и "расширителями графем" в Unicode?
в чем разница между ‘сочетание символов’ и ‘графема экстендеры’ в Юникод?
Они, кажется, делают то же самое, насколько я могу судить, хотя набор расширителей графем больше, чем набор комбинирующих символов. Мне явно чего-то не хватает. Почему различие?
Стандарт Юникода, Глава 3, D52
- комбинирование символов: символ с общим Категория комбинирующей метки (M).
- объединение символов состоит из все символы со значениями общей категории интервала, объединяющего метку (Mc), Неразмещающую метку (Mn) и заключающую метку (Me).
- все символы с ненулевым каноническим объединяющим классом объединяют символы, но обратное не так: есть объединяющие символы с нулевым каноническим объединяющим классом.
- интерпретация символов частного использования (Co) как объединение символов или нет определяется реализацией.
- эти символы обычно не используются изолированно, если они не описываются. Они включают в себя такие символы, как акценты, диакритика, еврейские точки, арабские гласные знаки и индийские матры.
- графическое расположение объединяющего символа зависит от последнего предыдущего базового символа, если они не разделены символом, который не является ни объединяющим символом, ни нулевым столяром ширины или zero non - joiner ширины. Комбинирующий символ, как говорят, применяется к этому базовому символу.
- может не быть такого базового символа, например, когда комбинирующий символ находится в начале текста или следует за символом элемента управления или формата-например, возврат каретки, вкладка или правая левая метка. В таких случаях, комбинирующие символы называются изолированные сочетания символов.
- С изолированными совмещая характерами или когда процесс неспособен выполнить графическую комбинацию, процесс может представлять комбинирующий символ без графической комбинации, то есть он может представлять его как базовый символ.
- репрезентативные изображения комбинирующих символов изображены пунктирным кругом в кодовых диаграммах. В графическом сочетании с предыдущим базовым символом этот базовый символ должен отображаться в позиции, занятой пунктирной окружностью.
Стандарт Unicode, Глава 3, D59
- расширитель графемы: символ со свойством Grapheme_Extend.
- символы расширителя графемы состоят из всех непересекающихся меток, столяра нулевой ширины, столяра нулевой ширины, U+FF9E, U+FF9F и небольшого количества меток интервала.
- расширитель графемы может быть понят в первую очередь как вид графической метки, которая применяется выше или ниже другого символа интервала. Zero столяр ширины и zero ширина non-joiner формально определяются как расширители графем, чтобы их присутствие не нарушало последовательность других расширителей графем.
- небольшое количество интервалов, которые имеют свойство Grapheme_Extend являются все вторые части двухчастной комбинирующей метки.
- набор символов со свойством Grapheme_Extend и набор символов со свойством Grapheme_Base являются непересекающимися по определению.
3 ответов
разница в фактическом использовании заключается в том, что комбинирование символов определяется как общая категория для грубой классификации символов, а расширители графем в основном используются для UAX #29 сегментации текста.
EDIT: так как вы предложили награду, я могу немного уточнить.
сочетания символов символы, которые не могут быть использованы в качестве автономных символов, но должны быть объединены с другим символом. Они привыкли определить комбинируя последовательности символов.
графема экстендеры были введено в Unicode 3.2 для использования в Технический Отчет Unicode #29: Границы Текста (тогда в предлагаемом статусе, теперь известном как Стандартное Приложение Unicode #29: Сегментация Текста В Юникоде). Основное использование-определить графема кластеров. Кластеры графем-это в основном воспринимаемые пользователем символы. По данным UAX #29:
границы графемного кластера важны для сортировки, регулярных выражений, взаимодействий пользовательского интерфейса (таких как выбор мыши, движение клавиши со стрелкой, backspacing), сегментации вертикального текста, идентификации границ для стиля первой буквы и подсчета "символьных" позиций в тексте.
основное отличие заключается в том, что графемные расширители не включают большую часть расстояние между метками (набор фактически меньше набора сочетания символов). Большинство знаков интервала являются гласными для азиатских сценариев. В этих сценариях гласные иногда пишутся путем изменения согласного символа. Если эта модификация занимает горизонтальное пространство (отметка интервала), она рассматривается как отдельный воспринимаемый пользователем символ и образует новый кластер графем.
Я думаю, что они ключевое предложение из стандарта: "расширитель графемы может быть понят в первую очередь как вид nonspacing графическая метка, которая применяется выше или ниже другой символ."Комбинирование символов, с другой стороны, также включает интервал метки, которые применяются к влево или вправо. Однако есть несколько исключений (см. свойство Other_Grapheme_Extend).
пример
U+0995 БЕНГАЛЬСКАЯ БУКВА KA:
ক
U + 09C0 БЕНГАЛЬСКИЙ ГЛАСНЫЙ ЗНАК II (комбинирование символов, но без расширителя графемы):
ী
сочетание двух:
কী
Это одна последовательность символов объединения, состоящая из двух кластеров графем. Гласный знак не может использоваться сам по себе, но он по-прежнему считается кластером графем. Например, текстовый редактор может позволить поместить курсор между двумя символами.
есть более 300 комбинирующих символов, таких как это, которые не расширьте графемы и четыре символа, которые не объединяются, но расширяют графемы.
Я написал этот вопрос в списке рассылки Unicode и получил несколько ответов. Я отправлю некоторые из них сюда.
Тома Gewecke писал:
Я не эксперт по этому аспекту Unicode, но я понимаю, что "grapheme extender" - это более тонкое различие в свойствах символов конструировал быть использованным в некоторых специфических и сложных процессах как разрыв графемы. Вы можете найти эту статью в блоге полезной для просмотра где это происходит? в игру: http://useless-factor.blogspot.com/2007/08/unicode-implementers-guide-part-4.html
PS ответ nwellnhof в StackOverflow является отличным объяснением этой проблемы, на мой взгляд.
Филипп Верди писал:
многие расширители графем не "комбинируют символы". Сочетающийся персонажи классифицируются таким образом по причинам наследия (очень слабые "общая категория" имущества) и это свойство нормативно стабилизированный. Также большинство комбинирующих символов имеют ненулевое значение совмещая класс и они стабилизированы для нормализация.
расширители графем включают символы, которые также не объединяются символы, но элементы управления (например, joiners). Некоторые graphemclusters также более сложные в некоторых скриптах (есть экстендеры, закодированные перед базовый символ; и они не могут быть классифицированы как комбинирующие символы потому что объединение символы всегда кодируются после базы характер)
по причинам наследия (и совместимость туда и обратно со старыми стандартами) не все скрипты кодируются с использованием символьной модели UCS с использованием комбинированный символ. (Например. тайский сценарий; не следовать "логический" порядок кодирования; но следуя модели, используемой в TIS-620 и другие стандарты на его основе; в том числе для Windows и *nix/*nux).
Ричард Уордингем написал:
интервал сочетания знаков (тип МС) в целом не графема наполнители. Те, которые включены, в основном включены, чтобы границы между "устаревшими кластерами графем" http://www.unicode.org/reports/tr29/tr29-23.html инвариантны под каноническая эквивалентность. Есть шесть расширителей графем, которые не являются nonspacing (Mn) или enclosing (Me) и не нужны этим правилом: ZWNJ, ZWJ, U + 302E ХАНГЫЛЬ ОДИНОЧНАЯ ТОЧКА ТОН ЗНАК U + 302F ХАНГЫЛЬ ДВОЙНАЯ ТОЧКА ТОН МАРКА У+FF9E ПОЛУШИРИНЫ КАТАКАНА ОЗВУЧИЛ ЗВУКОВОГО ЗНАКА ОТ U+FF9F ПОЛУШИРИНЫ КАТАКАНА ПОЛУ-ОЗВУЧЕННЫЙ ЗВУКОВОЙ ЗНАК
Я вижу, что иногда это будет полезно для ZWNJ и ZWJ вместе с предыдущий базовый символ. Звуковые метки fullwidth U+3099 и U+309A включены по причинам канонической эквивалентности, поэтому это делает смысла включать их полные версии.
Я на самом деле не вижу логики для включения U+302E и U+302F. Если вы собираетесь поощрять заставлять кого-то, кто набрал неверную базу характер, до последовательности 3 несамостоятельные знаки перепечатывать много, вы также можете сделать то же самое с тональными знаками хангыля.
могу я процитировать Янниса Хараламбуса'шрифты и кодировки страница 116f.:
идея в том, что сценарий или система обозначений иногда тоже мелко делится на персонажей. И когда мы разрежем конструкции в персонажи, нет никакого способа, чтобы положить их обратно вместе снова перестройте большие символы. Например, каталонский имеет лигатуру ‘ŀl’. Эта лигатура кодируется как два символа Юникода: "ŀ’
0x0140 latin small letter l with middle dotи обычное "l". Но это разделение не всегда может быть тем, чего мы хотим.
Предположим, что мы хотим поместите акцент circumflex над этой лигатурой, как мы могли бы пожелать делать с œ лигатура ‘и’ æ’. Как это можно сделать в Unicode? Чтобы позволить пользователям создавать символы в конструкциях, которые играют роль из новых символов Unicode ввел три новых свойства (grapheme база,расширение графема, графема ссылка) и один новый символ:0x034F combining grapheme joiner.
Так на мой взгляд, это означает, что графемные расширители используются для применения (например) акцентов к символам, которые сами состоят из нескольких символов.