Поделиться через


Использование резервного шрифта

Примечание

В этом разделе все замечания о ScriptShape в равной степени относятся к ScriptShapeOpenType.

 

Приложение должно использовать резервный шрифт во время отображения текста, если некоторые символы в строке не поддерживаются шрифтом или если приложение использует сложный скрипт , не поддерживаемый шрифтом. Требование к откату шрифта обнаруживается в процессе разметки текста, когда приложение вызывает функцию ScriptShape . Дополнительные сведения о отображении текста см. в разделе Отображение текста с помощью uniscribe.

Определение необходимости резервного шрифта для неподдерживаемых символов

Если некоторые символы в строке не поддерживаются запрошенным шрифтом, вызов scriptShape приложения завершается успешно. Однако приложение должно проверять выходной буфер глифов на наличие отсутствующих глифов. Индекс отсутствующих глифов можно определить для определенного шрифта, вызвав ScriptGetFontProperties. Если конкретный глиф недоступен, приложение должно либо вернуться к другому шрифту для глифа, либо отобразить графический символ, указывающий, что глиф недоступен.

Определение необходимости резервного шрифта для неподдерживаемых сложных скриптов

Шрифт, предпочитаемый приложением для отображения, может не поддерживать сложный скрипт, необходимый для текста. В этом случае вызов приложения к ScriptShape завершается сбоем с кодом ошибки E_SCRIPT_NOT_IN_FONT.

Назначение резервного шрифта

Определив, что требуется откат шрифта, приложение должно назначить резервный шрифт. Приложение может попробовать следующие методы:

  • Вызывайте ScriptShape для каждого шрифта в списке шрифтов до тех пор, пока один вызов не будет возвращать допустимый результат.
  • Вызывайте ScriptShape с каждым шрифтом в списке, пока не будет установлено, что ни одному шрифту не удастся. Если код ошибки всегда E_SCRIPT_NOT_IN_FONT, сложный скрипт не поддерживается шрифтами. Отрисуйте графический символ, указывающий, что глиф недоступен, или повторно укажите скрипт как неопределенный (без обработки скрипта) и начните снова. Чтобы задать скрипт как неопределенный, задайте для элемента eScript структуры SCRIPT_ANALYSIS значение SCRIPT_UNDEFINED.
  • Вызывайте ScriptShape с каждым шрифтом в списке, пока не будет установлено, что ни одному шрифту не удастся. Если код ошибки указывает, что некоторые символы сопоставляются с отсутствующими глифами, разбейте строку на меньшие диапазоны. Для поддиарангов можно назначить различные шрифты, чтобы можно было отрисовывать больше символов.

Создание сведений о глифе

После того как приложение назначит шрифт, который успешно выполняет вызовы ScriptShape, оно может выполнять вызовы ScriptPlace для создания сведений о ширине глифа и двумерных смещениях из выходных данных ScriptShape. Шрифт должен успешно выполняться в этих вызовах. Сбой шрифта при вызове ScriptPlace после успешного выполнения вызова ScriptShape указывает на неработающий шрифт.

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