В чем разница между "объединением символов" и "расширителями графемы" в Unicode?

В чем разница между "объединением символов" и "расширителями графемы" в Unicode?

Насколько я могу судить, они делают одно и то же - хотя набор расширителей графемы больше, чем набор комбинируемых символов. Я явно что-то здесь упускаю. Почему различие?


Стандарт Юникода, Глава 3, D52

  • Комбинирующий персонаж: персонаж с общей категорией комбинированного знака (M).
  • Комбинированные символы состоят из всех символов со значениями общей категории: Метка объединения интервалов (Mc), Метка неперемещения (Mn) и Метка включения (Me).
  • Все символы с ненулевым каноническим классом комбинирования являются комбинирующими символами, но обратное не имеет место: существуют комбинируемые символы с нулевым каноническим классом комбинирования.
  • Интерпретация символов частного использования (Co) как объединение символов или нет определяется реализацией.
  • Эти символы обычно не используются отдельно, если они не описаны. Они включают в себя такие символы, как акценты, диакритические знаки, точки на иврите, арабские гласные и индийский матрас.
  • Графическое расположение комбинирующего символа зависит от последнего предшествующего базового символа, если только они не разделены символом, который не является ни комбинирующим символом, ни соединителем с нулевой шириной или не присоединяющимся с нулевой шириной. Считается, что комбинирующий символ применяется к этому базовому символу.
  • Может отсутствовать такой базовый символ, например, когда объединяющий символ находится в начале текста или следует за символом элемента управления или формата - например, возврат каретки, табуляция или метка справа налево. В таких случаях комбинирующие символы называются изолированными комбинирующими символами.
  • С изолированными объединяющими символами или когда процесс не может выполнить графическую комбинацию, процесс может представлять комбинирующий символ без графической комбинации; то есть он может представлять его так, как если бы он был базовым символом.
  • Репрезентативные изображения комбинирующих символов изображены пунктирным кружком на диаграммах кодов. Когда он представлен в графической комбинации с предшествующим базовым символом, этот базовый символ должен появляться в положении, занимаемом пунктирным кругом.

Стандарт Unicode, глава 3, D59

  • Расширитель графемы: персонаж со свойством Grapheme_Extend.
  • Символы расширителя графемы состоят из всех непересекающихся меток, элемента соединения нулевой ширины, элемента соединения нулевой ширины, U+FF9E, U+FF9F и небольшого количества интервальных меток.
  • Расширитель графемы может быть задуман прежде всего как вид непересекающейся графической метки, которая наносится над или под другим пробелом. объединяющий с нулевой шириной и не объединяющий с нулевой шириной формально определяются как расширители графемы, чтобы их присутствие не нарушало последовательность других расширителей графемы.
  • Небольшое количество интервальных меток, имеющих свойство Grapheme_Extend, являются вторыми частями комбинированной метки из двух частей.
  • Набор символов со свойством Grapheme_Extend и набор символов со свойством Grapheme_Base по определению не пересекаются.

3 ответа

Решение

Разница в фактическом использовании заключается в том, что объединяющие символы определяются как общая категория для грубой классификации символов, а расширители графем используются в основном для сегментации текста UAX #29.

РЕДАКТИРОВАТЬ: Так как вы предложили награду, я могу немного уточнить.

Комбинированные символы - это символы, которые нельзя использовать как отдельные символы, но которые необходимо объединить с другим символом. Они используются для определения комбинации последовательностей символов.

Расширители графем были введены в Unicode 3.2 для использования в Техническом отчете Unicode #29: Границы текста (затем в предлагаемом состоянии, теперь известном как Стандартное приложение Unicode #29: Сегментация текста Unicode). Основное использование - определение кластеров графем. Кластеры графемы - это в основном воспринимаемые пользователем символы. По данным UAX № 29:

Границы кластера графемы важны для сопоставления, регулярных выражений, взаимодействий пользовательского интерфейса (таких как выделение мышью, перемещение клавиш со стрелками, обратный интервал), сегментации для вертикального текста, идентификации границ для оформления первой буквы и подсчета позиций "символов" в тексте.

Основное отличие состоит в том, что расширители графемы не включают большинство интервальных меток (набор на самом деле меньше, чем набор комбинируемых символов). Большинство интервальных знаков являются гласными знаками для азиатских шрифтов. В этих сценариях гласные иногда пишутся путем изменения согласного символа. Если эта модификация занимает горизонтальное пространство (знак пробела), она рассматривается как отдельный воспринимаемый пользователем символ и образует новый кластер графем.

Я думаю, что ключевое предложение из стандарта таково: "Расширитель графемы может быть задуман прежде всего как вид непересекающегося графического знака, который наносится над или под другим пробелом ". Комбинированные символы, с другой стороны, также включают в себя интервальные метки, которые применяются слева или справа. Однако есть несколько исключений (см. Свойство Other_Grapheme_Extend).

пример

U + 0995 BENGALI LETTER KA:

U + 09C0 BENGALI VOWEL SIGN II (объединяющий символ, но без расширителя графемы):

Сочетание двух:

কী

Это одиночная комбинация символов, состоящая из двух графемных кластеров. Знак гласного не может использоваться сам по себе, но он все еще считается кластером графемы. Например, текстовый редактор может позволить поместить курсор между двумя символами.

Существует более 300 таких комбинирующих символов, которые не расширяют графемы, и четыре символа, которые не объединяют, но расширяют графемы.

Я разместил этот вопрос в списке рассылки Unicode и получил еще несколько ответов. Я выложу некоторые из них здесь.

Том Гевеке написал:

Я не эксперт по этому аспекту Unicode, но я понимаю, что "расширитель графемы" - это более тонкое различие в свойствах символов, предназначенное для использования в определенных специфических и сложных процессах, таких как разрушение графемы. Вы можете найти эту статью в блоге полезной, чтобы увидеть, где она вступает в игру: http://useless-factor.blogspot.com/2007/08/unicode-implementers-guide-part-4.html

PS Ответ nwellnhof на Stackru - отличное объяснение этой проблемы, на мой взгляд.

Филипп Верди писал:

Многие расширители графемы не являются "объединяющими символами". Комбинированные символы классифицируются таким образом по унаследованным причинам (очень слабое свойство "общая категория"), и это свойство нормативно стабилизируется. Также большинство комбинирующих символов имеют ненулевой комбинирующий класс, и они стабилизируются с целью нормализации.

Расширители графемы включают символы, которые также НЕ объединяют символы, но контролируют (например, столяры). Некоторые графемкластеры также являются более сложными в некоторых сценариях (существуют расширители, закодированные ДО базового символа; их нельзя классифицировать как объединяющие символы, поскольку объединяющие символы всегда кодируются ПОСЛЕ базового символа)

Из-за устаревших причин (и совместимости в обоих направлениях со старыми стандартами) не все сценарии кодируются с использованием модели символов UCS с использованием комбинированных символов. (Например, тайский сценарий; не следует "логическому" порядку кодирования; но следует модели, используемой в TIS-620 и других основанных на нем стандартах; в том числе для Windows и *nix/*nux).

Ричард Уордингем писал:

Метки объединения интервалов (категория Mc), как правило, не являются расширителями графемы. Те, которые включены, в основном включены, так что границы между "устаревшими кластерами графем" http://www.unicode.org/reports/tr29/tr29-23.html являются инвариантными относительно канонической эквивалентности. Существует шесть экстендеров графемы, которые не являются пространственными (Mn) и не включают в себя (Me) и не требуются этим правилом: ZWNJ, ZWJ, U+302E ОТМЕТКА ОДНОГО ТОНА ГАНГУЛЫ ТОЧКИ U+302F ОТВЕРСТИЯ ГАНГУЛЯ ДВОЙНОЙ ТОЧКИ ТОНА U+FF9E КАТАКАНА СЛУЖБЫ ЗВУКОВАЯ ЗВУКОВАЯ МАРКА U+FF9F ПОЛОВИНА КАТАКАНА ЗВУКОВЫЙ ЗВУКОВЫЙ ЗВУК

Я вижу, что иногда это будет полезно для ZWNJ и ZWJ вместе с предыдущим базовым персонажем. Звуковые метки полной ширины U+3099 и U+309A включены по соображениям канонической эквивалентности, поэтому имеет смысл включить их версии с половинной шириной.

На самом деле я не вижу логики для включения U + 302E и U+302F. Если вы собираетесь побуждать кого-то, кто набрал неправильный базовый символ, перед последовательностью из 3-х непробельных меток перепечатывать лот, вы можете также сделать то же самое с метками тона Хангул.

Могу ли я привести цитату из шрифтов и кодировок Янниса Хараламбуса, стр. 116f.:

Идея состоит в том, что сценарий или система обозначений иногда слишком тонко делятся на символы. И когда мы разрезаем конструкции на символы, нет возможности снова собрать их вместе, чтобы восстановить более крупные символы. Например, каталонский имеет лигатуру ŀl. Эта лигатура закодирована в виде двух символов Unicode: "ŀ" 0x0140 latin small letter l with middle dot и обычное "я". Но это разделение не всегда может быть тем, что мы хотим.
Предположим, что мы хотим разместить акцент на этой лигатуре, как мы могли бы сделать с лигатурами "œ" и "æ". Как это можно сделать в Юникоде? Чтобы позволить пользователям создавать символы в конструкциях, которые играют роль новых символов, Unicode представил три новых свойства (основа графемы, расширение графемы, ссылка графемы) и один новый персонаж: 0x034F combining grapheme joiner,

Таким образом, с моей точки зрения, это означает, что расширители графем используются для наложения (например) акцентов на символы, которые сами состоят из нескольких символов.

Другие вопросы по тегам