Границы графем Unicode

HPDFUnicodeTextBoundary реализует расширенные кластеры графем по умолчанию Unicode 17.0.0, используя закреплённые в репозитории свойства Grapheme_Cluster_Break, Indic_Conjunct_Break и Extended_Pictographic

Переносимая реализация Pascal обрабатывает диакритику, хангыль, последовательности линкеров индийских письменностей, эмодзи-последовательности ZWJ и парные региональные индикаторы без GUI и DLL сегментации

Смещения считают кодовые единицы UTF-16 с нуля и включают и начало, и конец текста; пустой текст возвращает единственное смещение ноль

Ввод должен содержать парные суррогаты UTF-16, а вызывающий передаёт положительный бюджет кодовых единиц до 1048576; по умолчанию 65535

Отмена проверяется перед выделением памяти и при потреблении каждого скаляра, в том числе для пустого ввода

Перенос rich-полей

Слишком широкое слово в многострочном переносимом rich-поле делится по полным расширенным кластерам графем и измеряется выбранным шрифтом и интервалами

Каждый фрагмент сохраняет исходные значения V и RV, реальные отображения Unicode и выравнивание абзаца; неразделимый кластер шире прямоугольника остаётся целым и обрезается

Ширины фрагментов проверяются после шейпинга, включая соединительные формы, расширяющиеся при раздельном шейпинге; делимые переполнения снова делятся по полным кластерам

Отрисовка сложных письменностей продолжает использовать HarfBuzz и FriBidi; сегментация графем не даёт шейпинг глифов и двунаправленную вёрстку абзацев

Возможности разрыва строк Unicode по умолчанию доступны через тот же переносимый модуль; перенос слов через границы начертаний и абзацный bidi со смешанными начертаниями остаются отдельными активными целями

Соответствие стандарту

Запускайте Tests/Linux/Run-UnicodeGraphemeAcceptance.sh или переносимый тестовый раннер Windows с HotPDFUnicodeGraphemeTests и Tests/Linux/resources

Тесты прогоняют все 766 официальных кейсов GraphemeBreakTest Unicode 17 и сравнивают каждую опубликованную границу в единицах UTF-16

Build-UnicodeTextBoundaryTables.py детерминированно перестраивает скомпилированные таблицы диапазонов из существующих закреплённых данных UCD

Правила сегментации текста Unicode 17 · Функция границ · Поведение rich-полей