Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Заметка
В этом разделе все замечания о 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 указывает на поврежденный шрифт.
Связанные разделы