Использование модулей формирования текста

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

Так как точные диапазоны точек кода, назначенные каждому обработчику формирования, могут отличаться, номера скриптов не публикуются, за исключением SCRIPT_UNDEFINED. Однако приложение может протестировать атрибуты скриптов, вызвав функцию ScriptGetProperties, которая обращается к таблице свойств глобального скрипта. Приложение может использовать глобальные свойства скрипта для объединения собственных правил макета с требуемыми сегментами модуля формирования.

Приложение обращается к обработчику формирования с вызовом функции ScriptShape. Все сложные механизмы формирования скриптов, подсистемы формирования цифр и подсистемы формирования ASCII проверяют шрифт, указанный в дескрипторе контекста устройства перед формированием. Сложные скрипты должны быть сформированы с использованием набора скриптов, возвращаемого функцией ScriptItemize , чтобы сохранять читаемость. Другие запуски остаются удобочитаемыми, если они имеют форму SCRIPT_UNDEFINED, указанной в элементе eScript структуры SCRIPT_ANALYSIS, хотя они могут потерять типографическое качество.

ScriptShape возвращает значение 0 в случае успешного выполнения или USP_E_SCRIPT_NOT_IN_FONT, если шрифт, предоставленный приложением, не содержит достаточно глифов или таблиц формирования. Если приложение указывает SCRIPT_UNDEFINED, а некоторые символы не поддерживаются шрифтом, функция по-прежнему завершается успешно. В этом случае приложение должно проверять выходной буфер глифа на наличие отсутствующих глифов. Для стратегий устранения отсутствующих глифов, см. раздел Использование резервных шрифтов.

Использование Uniscribe