Подтвердить что ты не робот

В чем разница между "сочетанием символов и расширителей графемы в Юникоде?

В чем разница между 'сочетание символов и ' расширители графем в Юникоде?

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


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

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

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

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

Ответ 1

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

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

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

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

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

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

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

пример

U + 0995 BENGALI LETTER KA:

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

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

কী

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

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

Ответ 2

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

Tom Gewecke писал (а):

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

PS fooobar.com/questions/411842/... является отличным объяснением этой проблемы на мой взгляд.

Philippe Verdy писал (а):

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

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

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

Ричард Уордингэм писал (а):

Символы совмещения (категория Mc), как правило, не grapheme Удлинители. Включаемые включены в основном так, что границы между "кластерами наследственного графема" http://www.unicode.org/reports/tr29/tr29-23.html являются инвариантными канонической эквивалентности. Есть шесть расширителей графемы, которые не являются (Mn) или охватывающих (Me) и не требуются этим правилом: ZWNJ, ZWJ, U + 302E HANGUL SINGLE DOT TONE MARK U + 302F HANGUL DOUBLE DOT TONE MARK U + FF9E HALFWIDTH KATAKANA VOICED SOUND MARK U + FF9F HALFWIDTH ЗВУКОВАЯ МАРКА KATAKANA SEMI-VOICED

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

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

Ответ 3

Могу ли я процитировать из Yannis Haralambous Шрифты и кодировки, стр. 116f.:

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

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