Границы графем 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-полей