Обработка сложных скриптов
Чтобы предоставить текстовое обоснование, приложение может использовать один из двух методов. Для простой реализации многоязычного обоснования приложение должно вызывать ScriptJustify. Он создает массив delta dx, учитывая kashida, затем межсловный интервал, а затем межсимвольный интервал. Для более сложного обоснования приложение может создать обновленный массив delta dx, используя собственные знания языка и сведения, полученные ScriptShape в массиве SCRIPT_VISATTR .
Пространство обоснования или kashida следует вставлять там, где определяется элементом uJustificationSCRIPT_VISATTR. При выполнении межсимвейного обоснования приложение должно вставлять дополнительное пространство только после глифов, помеченных SCRIPT_JUSTIFY_CHARACTER.
Приложение выполняет проверку размещения курсора и попадания с помощью ScriptXtoCP и ScriptCPtoX. Дополнительные сведения см. в разделе Управление размещением курсора и тестированием попаданий.
Чтобы получить ширину независимо от шрифта, приложение вызывает ScriptGetLogicalWidths. Передавая логические ширины в ScriptApplyLogicalWidth, блок текста можно переиздать в одних и том же границах с приемлемой потерей качества, даже если исходный шрифт недоступен. Он создает массив ширины глифов (расширенных ширин), подходящих для передачив ScriptTextOut. Такая запись и повторное применение сведений о ширине с учетом шрифта может быть полезно в таких ситуациях, как метафигурирование в формате, определенном приложением.
Примечание
Метафайлы не поддерживают индексы глифов. Для записи в расширенный метафайл приложение должно использовать ExtTextOut и записывать логические символы напрямую. При использовании этого механизма создание и размещение глифов не выполняется, пока текст не будет воспроизведен.
Чтобы получить конкретные глифы, которые используются для по умолчанию, пустые, kashida и т. д. для текущего шрифта, приложение должно вызвать ScriptGetFontProperties. Чтобы определить, какие символы в выполнении поддерживаются выбранным шрифтом, приложение вызывает ScriptGetCMap. Символы, которые недоступны, имеют глиф по умолчанию в буфере глифа. Обратите внимание, что этот метод завершается ошибкой, если шрифт отрисовывает символ с использованием сочетания глифов вместо одного глифа. Например, 00C9; ЛАТИНСКАЯ ПРОПИСНАЯ БУКВА E WITH ACUTE может быть отображена с помощью глифа заглавной буквы E и острого глифа. Чтобы определить поддержку шрифта для строки, содержащей такие кодовые точки, приложение может вызвать ScriptShape. Дополнительные сведения см. в разделе Использование модулей формирования.
Функция ScriptCacheGetHeight возвращает высоту шрифта из кэша шрифтов. ScriptGetProperties предоставляет сведения о специальной обработке, необходимой для всех скриптов, индексированных по скриптам. Например, он включает основной язык, связанный со скриптом, данные, указывающие, является ли скрипт числовым, и данные, указывающие, является ли скрипт сложным.
ScriptGetGlyphABCWidth возвращает ширину ABC заданного глифа, что может быть полезно для рисования глифов. Однако его не следует использовать для обычного форматирования текста сложного скрипта.
См. также