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
ScriptItemizeOpenType에 대한 이전 호출에서 가져온 SCRIPT_ANALYSIS 구조체에 대한 포인터입니다. 구조체는 셰이핑 엔진을 식별하므로 문자 모양을 올바르게 구성할 수 있습니다.
또는 애플리케이션이 필터링되지 않은 결과를 수신하도록 이 매개 변수를 NULL 로 설정할 수 있습니다.
[in] tagScript
쓰기 시스템의 OpenType 스크립트 태그를 정의하는 OPENTYPE_TAG 구조체입니다.
[in] tagLangSys
쓰기 시스템의 OpenType 언어 태그를 포함하는 OPENTYPE_TAG 구조체입니다.
[in, optional] rcRangeChars
각 범위의 문자 배열입니다. 배열 요소의 수는 cRanges로 표시됩니다. 이 배열의 요소 값은 cChars 값에 추가됩니다.
[in, optional] rpRangeProperties
각각 하나의 OpenType 기능 범위를 나타내는 TEXTRANGE_PROPERTIES 구조체의 배열입니다. 구조체 수는 cRanges 매개 변수로 표시됩니다. rpRangeProperties에 대한 자세한 내용은 설명 섹션을 참조하세요.
[in] cRanges
OpenType 기능 범위의 수입니다.
[in] pwcChars
실행을 포함하는 유니코드 문자 배열에 대한 포인터입니다.
[in] cChars
유니코드 실행의 문자 수입니다.
[in] cMaxGlyphs
생성할 최대 문자 모양 수입니다.
[out] pwLogClust
이 함수가 논리 클러스터 정보의 배열을 검색하는 버퍼에 대한 포인터입니다. 각 배열 요소는 유니코드 문자 배열의 문자에 해당합니다. 각 요소의 값은 실행의 첫 번째 문자 모양에서 해당 문자를 포함하는 클러스터의 첫 번째 문자 모양까지의 오프셋입니다. SCRIPT_ANALYSIS 구조체의 fRTL 멤버가 TRUE이면 배열을 읽을 때 요소가 감소합니다.
[out] pCharProps
이 함수가 cChars로 표시된 길이의 문자 속성 값 배열을 검색하는 버퍼에 대한 포인터입니다.
[out] pwOutGlyphs
이 함수가 문자 모양 배열을 검색하는 버퍼에 대한 포인터입니다.
[out] pOutGlyphProps
이 함수가 검색된 각 문자 모양에 대한 특성 배열을 검색하는 버퍼에 대한 포인터입니다. 값의 길이는 pcGlyphs 값과 같습니다. 문자 모양당 하나의 문자 모양 속성이 표시되므로 이 매개 변수의 값은 cMaxGlyphs로 지정된 요소 수를 나타냅니다.
[out] pcGlyphs
이 함수가 pwOutGlyphs에 표시된 문자 모양 수를 검색하는 위치에 대한 포인터입니다.
반환 값
정상적으로 실행되는 경우 0을 반환합니다. 함수는 성공하지 못하면 0이 아닌 HRESULT 값을 반환합니다. 모든 오류의 경우 모든 출력 배열 값의 콘텐츠가 정의되지 않습니다.
오류 반환은 다음과 같습니다.
- E_OUTOFMEMORY. cMaxGlyphs로 표시된 출력 버퍼 길이가 충분하지 않습니다.
- E_PENDING. psc 매개 변수로 지정된 스크립트 캐시에는 문자열을 셰이핑할 수 있는 충분한 정보가 포함되어 있지 않으며, 함수가 셰이핑 프로세스를 완료할 수 없도록 디바이스 컨텍스트가 NULL로 전달되었습니다. 애플리케이션은 실행에 대한 올바른 디바이스 컨텍스트를 설정하고 hdc 의 적절한 컨텍스트 값과 다른 모든 매개 변수를 동일하게 사용하여 이 함수를 다시 호출해야 합니다.
- USP_E_SCRIPT_NOT_IN_FONT. 디바이스 컨텍스트에 해당하는 글꼴은 필요한 스크립트를 지원하지 않습니다. 애플리케이션은 ScriptGetCMap 또는 다른 메서드를 사용하여 글꼴을 선택하는 다른 글꼴을 선택해야 합니다.
설명
ScriptShapeOpenType 은 이전 ScriptShape 함수보다 선호됩니다. ScriptShapeOpenType의 몇 가지 이점은 다음과 같습니다.
- 매개 변수는 글꼴 레이아웃 테이블의 OpenType 태그에 직접 해당합니다.
- 매개 변수는 각 문자에 적용되는 기능을 정의합니다.
- 입력은 실행으로 나뉩니다. 각 실행에는 OpenType 속성이 있으며 ScriptShapeOpenType에 대한 단일 호출로 구성됩니다.
글꼴 또는 운영 체제에서 문자 모양 인덱스를 지원할 수 없는 경우 이 함수는 SCRIPT_ANALYSIS 구조체의 fNoGlyphIndex 멤버를 설정할 수 있습니다.
애플리케이션은 ScriptShapeOpenType 을 호출하여 글꼴이 지정된 문자열의 문자를 지원하는지 확인할 수 있습니다. 함수가 S_OK 반환하는 경우 애플리케이션은 누락된 문자 모양에 대한 출력을 검사 합니다. fLogicalOrder가 SCRIPT_ANALYSIS 구조체에서 TRUE로 설정된 경우 함수는 항상 원래 유니코드 문자와 동일한 순서로 문자 모양을 생성합니다. fLogicalOrder가 FALSE로 설정된 경우 함수는 오른쪽에서 왼쪽의 항목을 역순으로 생성하여 ScriptTextOut이 ExtTextOut을 호출하기 전에 역방향으로 설정할 필요가 없도록 합니다.
SCRIPT_ANALYSIS eScript 멤버가 SCRIPT_UNDEFINED 설정되면 셰이핑이 비활성화됩니다. 이 경우 ScriptShapeOpenType 은 글꼴 cmap 테이블에 있는 문자 모양을 표시합니다. 표에 문자 모양이 없으면 함수는 문자 모양이 누락되었음을 나타냅니다.
ScriptShapeOpenType 은 실행 내에서 클러스터를 균일하게 시퀀스하고 클러스터 내에서 문자 모양을 균일하게 시퀀스합니다. ScriptItemizeOpenType에서 SCRIPT_ANALYSISfRTL 멤버의 값을 사용하여 시퀀싱이 왼쪽에서 오른쪽 또는 오른쪽에서 왼쪽인지 식별합니다.
rpRangeProperties 매개 변수의 경우 TEXTRANGE_PROPERTIES 구조체는 OPENTYPE_FEATURE_RECORD 구조체의 배열을 가리킵니다. 이 배열은 다음과 같이 사용됩니다.
- rpRangeProperties에 대해 표시된 배열의 각 요소는 범위를 설명합니다.
- 특정 속성을 공유하는 텍스트 범위는 "중첩"하는 경향이 있으며 중첩된 범위는 OPENTYPE_FEATURE_RECORD 정보를 공유할 수 있습니다. 예를 들어 아래 그림에서 다음을 수행합니다.
- 위쪽의 숫자 행은 각각 범위, 항목 및 실행을 나타냅니다.
- 여기에 문자로 레이블이 지정된 각 범위는 단일 OpenType 기능을 나타냅니다. 각 범위에 속하는 기능은 해당 범위의 OPENTYPE_FEATURE_RECORD 배열에 저장됩니다.
- 각 범위에 대해 OPENTYPE_FEATURE_RECORD 구조체의 배열은 해당 범위를 포함하는 범위에 대한 문자에 해당합니다.
- 이 그림에서 범위 2는 A, B 및 C 범위에 대한 OPENTYPE_FEATURE_RECORD 구조체와 간접적으로 연결됩니다. 범위 4는 A 및 D 범위에 대한 구조체와만 연결됩니다.
예제
다음 예제에서는 ScriptShapeOpenType이 문자 배열(pwcChars) 및 문자 모양 배열(pwOutGlyphs)에서 논리 클러스터 배열(pwLogClust)을 생성하는 방법을 보여 줍니다. 실행에는 4개의 클러스터가 있습니다.
- 첫 번째 클러스터: 하나의 문자 모양으로 표현되는 문자 1개
- 두 번째 클러스터: 3개의 문자 모양으로 표현되는 문자 1개
- 세 번째 클러스터: 문자 모양 1개로 표시되는 3자
- 네 번째 클러스터: 3개의 문자 모양으로 표시되는 두 문자
문자 배열:
- | 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 |
헤더 | usp10.h |
라이브러리 | Usp10.lib |
DLL | Usp10.dll |
재배포 가능 파일 | Windows XP에서 버전 1.600 이상 Usp10.dll |