Знаки rich text между начертаниями

Типизированный rich text сохраняет исходный логический V и канонический RV, позиционируя начальный диакритический знак относительно реально предшествующего отрисованного глифа на той же физической строке

База и знак могут использовать разные подключённые шрифтовые программы regular, bold, italic или bold-italic, разные размеры в пунктах и разные цвета

Позиционирование читает реальные привязки GPOS mark-to-base, mark-to-ligature и mark-to-mark, включая lookup'ы extension positioning; якорь базы использует свой шрифт и масштаб, а якорь знака — свой шрифт и масштаб

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

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

Rich-дочерние формы сохраняют выступы глифов, включая комбинируемые знаки с отрицательным началом координат и курсивные контуры; владеющий внешний вид задаёт клип виджета, поворот и выравнивание абзаца

Присоединённые чернила учитываются при подгонке размеров строки, чтобы наложенные знаки оставались видимыми в верхней части поля; неразделимый кластер выше виджета сохраняет существующее ограниченное поведение клиппинга

Когда подходящего покрытия привязками нет, реальные границы заголовка выбранного TrueType-глифа дают запасной вариант размещения с независимыми масштабами размера и нативным комбинируемым классом Unicode

Запасное размещение различает знаки сверху, снизу, присоединённые, лево/право и двойные; знаки одной стороны накладываются друг на друга, знаки противоположных сторон возвращаются к контуру базы, а совпадающие якоря GPOS всегда имеют приоритет

Двойные комбинируемые знаки остаются кандидатами на привязку, даже когда их класс переноса строки Unicode — nonbreaking; логический текст, исходные стили и последующее продвижение межбуквенного интервала остаются нетронутыми

Сторона запасного размещения для двойного знака следует фактическому вычисленному уровню bidi её текстового элемента, включая встроенный в абзац элемент противоположного направления

Границы fallback описывают объявленный заголовок контуров реального шрифта; автоматическая реконструкция произвольных семейств остаётся вне этого контракта подключённых шрифтов

Чтение шрифтовых таблиц ограничено реальной таблицей GPOS, учитывает отмену и делит бюджет обхода между всеми подключёнными шрифтами начертаний; некорректные смещения таблиц завершаются ошибкой до изменения поля документа

Нехинтованные PDF-контуры используют якоря в design-координатах без устройствозависимых пиксельных поправок

Приёмка

HotPDFHeadlessRichMarkTests.pas сохраняет и перечитывает реальные внешние виды знаков латиницы, арабицы и иврита, наложенные знаки, настоящую арабскую лигатуру, смешанные размеры и цвета, перенос, интервалы, выравнивание и поворот

Verify-HeadlessRichMarks.py читает настоящие встроенные шрифтовые программы через fontTools, независимо вычисляет якоря GPOS, проверяет исходные значения и стили и подтверждает, что каждый знак даёт видимые пиксели MuPDF, отрисовывая тот же реальный внешний вид без этого знака

HotPDFHeadlessRichMarkFallbackTests.pas и Verify-HeadlessRichMarkFallback.py проверяют реальные шрифты без GPOS, видимые сохранённые внешние виды, сырые комбинируемые классы, границы выбранных глифов и отмену; также проверяется, что совпадающие якоря сохраняют приоритет над запасным размещением

Границы выбранных TrueType-глифов · Сырые канонические комбинируемые классы

Построитель внешних видов · Нативные rich-text поля · Подгонка графем между начертаниями