Функция ScriptShapeOpenType (usp10.h)
Создает глифы и визуальные атрибуты для выполнения Юникода с информацией OpenType. Каждый запуск состоит из одного вызова этой функции.
Синтаксис
HRESULT ScriptShapeOpenType(
[in, optional] HDC hdc,
[in, out] SCRIPT_CACHE *psc,
[in, out] SCRIPT_ANALYSIS *psa,
[in] OPENTYPE_TAG tagScript,
[in] OPENTYPE_TAG tagLangSys,
[in, optional] int *rcRangeChars,
[in, optional] TEXTRANGE_PROPERTIES **rpRangeProperties,
[in] int cRanges,
[in] const WCHAR *pwcChars,
[in] int cChars,
[in] int cMaxGlyphs,
[out] WORD *pwLogClust,
[out] SCRIPT_CHARPROP *pCharProps,
[out] WORD *pwOutGlyphs,
[out] SCRIPT_GLYPHPROP *pOutGlyphProps,
[out] int *pcGlyphs
);
Параметры
[in, optional] hdc
Обработка в контексте устройства. Дополнительные сведения см. в разделе Кэширование.
[in, out] psc
Указатель на структуру SCRIPT_CACHE , определяющую кэш скриптов.
[in, out] psa
Указатель на структуру SCRIPT_ANALYSIS , полученную при предыдущем вызове ScriptItemizeOpenType. Структура идентифицирует подсистему формирования, чтобы глифы могли быть правильно сформированы.
Кроме того, приложение может задать для этого параметра значение NULL , чтобы получать нефильтрованные результаты.
[in] tagScript
Структура OPENTYPE_TAG , определяющая тег скрипта OpenType для системы записи.
[in] tagLangSys
Структура OPENTYPE_TAG , содержащая тег языка OpenType для системы записи.
[in, optional] rcRangeChars
Массив символов в каждом диапазоне. Количество элементов массива обозначается cRanges. Значения элементов этого массива добавляются к значению cChars.
[in, optional] rpRangeProperties
Массив TEXTRANGE_PROPERTIES структур, каждая из которых представляет один диапазон функций OpenType. Количество структур определяется параметром cRanges . Дополнительные сведения о rpRangeProperties см. в разделе Примечания.
[in] cRanges
Количество диапазонов возможностей OpenType.
[in] pwcChars
Указатель на массив символов Юникода, содержащий выполнение.
[in] cChars
Количество символов в выполнении Юникода.
[in] cMaxGlyphs
Максимальное число глифов для создания.
[out] pwLogClust
Указатель на буфер, в котором эта функция извлекает массив сведений о логическом кластере . Каждый элемент массива соответствует символу в массиве символов Юникода. Значение каждого элемента — это смещение от первого глифа в выполнении до первого глифа в кластере, содержающем соответствующий символ. Обратите внимание, что если элемент fRTLструктуры SCRIPT_ANALYSIS имеет значение TRUE, элементы уменьшаются по мере считывания массива.
[out] pCharProps
Указатель на буфер, в котором эта функция извлекает массив значений свойств символов длины, указанной cChars.
[out] pwOutGlyphs
Указатель на буфер, в котором эта функция извлекает массив глифов.
[out] pOutGlyphProps
Указатель на буфер, в котором эта функция извлекает массив атрибутов для каждого из полученных глифов. Длина значений равна значению pcGlyphs. Так как для каждого глифа указывается одно свойство глифа, значение этого параметра указывает количество элементов, заданных cMaxGlyphs.
[out] pcGlyphs
Указатель на расположение, в котором эта функция извлекает количество глифов, указанных в pwOutGlyphs.
Возвращаемое значение
Возвращает 0 в случае успеха. Функция возвращает ненулевое значение HRESULT, если это не удалось. Во всех случаях ошибок содержимое всех значений выходного массива не определено.
Возвращается ошибка:
- E_OUTOFMEMORY. Длина выходного буфера, указанная cMaxGlyphs , недостаточна.
- E_PENDING. Кэш скриптов, заданный параметром psc , не содержит достаточно сведений для формирования строки, а контекст устройства был передан как NULL , поэтому функция не может завершить процесс формирования. Приложение должно настроить правильный контекст устройства для запуска и снова вызвать эту функцию с соответствующим значением контекста в hdc и с теми же параметрами.
- USP_E_SCRIPT_NOT_IN_FONT. Шрифт, соответствующий контексту устройства, не поддерживает требуемый скрипт. Приложение должно выбрать другой шрифт, используя ScriptGetCMap или другой метод для выбора шрифта.
Комментарии
ScriptShapeOpenType предпочтительнее, чем более старая функция ScriptShape . Ниже перечислены некоторые преимущества ScriptShapeOpenType .
- Параметры напрямую соответствуют тегам OpenType в таблицах макета шрифтов.
- Параметры определяют признаки, применяемые к каждому символу.
- Входные данные делятся на запуски. Каждый запуск имеет свойства OpenType и состоит из одного вызова ScriptShapeOpenType.
Эта функция может задать элемент fNoGlyphIndexструктуры SCRIPT_ANALYSIS , если шрифт или операционная система не поддерживают индексы глифов.
Приложение может вызывать ScriptShapeOpenType , чтобы определить, поддерживает ли шрифт символы в заданной строке. Если функция возвращает S_OK, приложение должно проверка выходные данные отсутствующих глифов. Если fLogicalOrder имеет значение TRUE в структуре SCRIPT_ANALYSIS , функция всегда создает глифы в том же порядке, что и исходные символы Юникода. Если параметр fLogicalOrder имеет значение FALSE, функция создает элементы справа налево в обратном порядке, чтобы scriptTextOut не нужно было их отменять перед вызовом ExtTextOut.
Если для элемента eScriptSCRIPT_ANALYSIS задано значение SCRIPT_UNDEFINED, формирование отключается. В этом случае ScriptShapeOpenType отображает глиф, который находится в таблице cmap шрифтов. Если в таблице нет глифа, функция указывает, что глифы отсутствуют.
ScriptShapeOpenType последовательности кластеров равномерно в пределах выполнения и последовательности глифов в кластере. Он использует значение члена fRTLSCRIPT_ANALYSIS из ScriptItemizeOpenType, чтобы определить, является ли виртуализация слева направо или справа налево.
Для параметра rpRangeProperties структура TEXTRANGE_PROPERTIES указывает на массив OPENTYPE_FEATURE_RECORD структур. Этот массив используется следующим образом:
- Каждый элемент массива, указанный для rpRangeProperties , описывает диапазон.
- Диапазоны определенных свойств общего доступа к тексту, как правило, "nest", а вложенные диапазоны могут совместно использовать OPENTYPE_FEATURE_RECORD сведения. Например, на рисунке ниже:
- Строки чисел в верхней части представляют диапазоны, элементы и запуски соответственно.
- Каждый диапазон, помеченный здесь буквой, представляет одну функцию OpenType. Признаки, которые попадают в каждый диапазон, хранятся в OPENTYPE_FEATURE_RECORD массиве этого диапазона.
- Для каждого диапазона массив структур OPENTYPE_FEATURE_RECORD соответствует буквам диапазонов, содержащих этот диапазон.
- На этом рисунке диапазон 2 косвенно связан со структурами OPENTYPE_FEATURE_RECORD для диапазонов A, B и C. Диапазон 4 связан только со структурами для диапазонов A и D.
Примеры
В следующем примере показано, как ScriptShapeOpenType создает массив логического кластера (pwLogClust) из массива символов (pwcChars) и массива глифов (pwOutGlyphs). Запуск состоит из четырех кластеров.
- Первый кластер: один символ, представленный одним глифом
- Второй кластер: один символ, представленный тремя глифами
- Третий кластер: три символа, представленные одним глифом
- Четвертый кластер: два символа, представленные тремя глифами
Массив символов:
- | c1u1 | c2u1 | c3u1 c3u2 c3u3 | c4u1 c4u2 |
- | c1g1 | c2g1 c2g2 c2g3 | c3g1 | c4g1 c4g2 c4g3 |
- c<n> означает кластер n.
- g<m> означает глиф m.
- u<p> означает кодовую точку Юникода p.
- | 0 | 1 | 4 4 4 | 5 5 |
Требования
Минимальная версия клиента | Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 [только классические приложения] |
Целевая платформа | Windows |
Header | usp10.h |
Библиотека | Usp10.lib |
DLL | Usp10.dll |
Распространяемые компоненты | Usp10.dll версии 1.600 или более поздней в Windows XP |