В чем разница между "объединением символов" и "расширителями графем" в 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
.
Так на мой взгляд, это означает, что графемные расширители используются для применения (например) акцентов к символам, которые сами состоят из нескольких символов.