ScriptShapeOpenType 関数 (usp10.h)
OpenType 情報を使用して Unicode 実行のグリフとビジュアル属性を生成します。 各実行は、この関数の 1 つの呼び出しで構成されます。
構文
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
1 つの OpenType 特徴範囲を表す、 TEXTRANGE_PROPERTIES 構造体の配列。 構造体の数は、 cRanges パラメーターによって示されます。 rpRangeProperties の詳細については、「解説」セクションを参照してください。
[in] cRanges
OpenType 機能範囲の数。
[in] pwcChars
実行を含む Unicode 文字の配列へのポインター。
[in] cChars
Unicode 実行の文字数。
[in] cMaxGlyphs
生成するグリフの最大数。
[out] pwLogClust
この関数が論理 クラスター 情報の配列を取得するバッファーへのポインター。 各配列要素は、Unicode 文字の配列内の文字に対応します。 各要素の値は、実行の最初のグリフから、対応する文字を含むクラスター内の最初のグリフへのオフセットです。 SCRIPT_ANALYSIS構造体の fRTL メンバーが TRUE の場合、配列の読み取り時に要素が減少します。
[out] pCharProps
この関数が cChars によって示される長さの文字プロパティ値の配列を取得するバッファーへのポインター。
[out] pwOutGlyphs
この関数がグリフの配列を取得するバッファーへのポインター。
[out] pOutGlyphProps
この関数が取得した各グリフの属性の配列を取得するバッファーへのポインター。 値の長さは pcGlyphs の値と等しくなります。 グリフごとに 1 つのグリフ プロパティが示されるため、このパラメーターの値は 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 の 1 回の呼び出しで構成されます。
フォントまたはオペレーティング システムがグリフ インデックスをサポートできない場合、この関数は、SCRIPT_ANALYSIS構造体の fNoGlyphIndex メンバーを設定できます。
アプリケーションは ScriptShapeOpenType を 呼び出して、フォントが特定の文字列内の文字をサポートしているかどうかを判断できます。 関数がS_OKを返す場合、アプリケーションは不足しているグリフの出力をチェックする必要があります。 SCRIPT_ANALYSIS構造体で fLogicalOrder が TRUE に設定されている場合、関数は常に元の Unicode 文字と同じ順序でグリフを生成します。 fLogicalOrder が FALSE に設定されている場合、この関数は右から左への項目を逆の順序で生成するため、ExtTextOut を呼び出す前に ScriptTextOut を逆にする必要はありません。
SCRIPT_ANALYSISの eScript メンバーが SCRIPT_UNDEFINED に設定されている場合、シェーピングは無効になります。 この場合、 ScriptShapeOpenType はフォント cmap テーブルにあるグリフを表示します。 テーブルにグリフがない場合、関数はグリフが見つからないことを示します。
ScriptShapeOpenType は、実行内でクラスターを一様にシーケンスし、クラスター内でグリフを一様にシーケンスします。 ScriptItemizeOpenType の SCRIPT_ANALYSIS の fRTL メンバーの値を使用して、シーケンス処理が左から右または右から左の値かどうかを識別します。
rpRangeProperties パラメーターの場合、TEXTRANGE_PROPERTIES 構造体は、OPENTYPE_FEATURE_RECORD構造体の配列を指します。 この配列は次のように使用されます。
- rpRangeProperties に指定された配列の各要素は、範囲を記述します。
- 特定のプロパティを共有するテキストのスパンは "入れ子" になり、入れ子になったスパンは OPENTYPE_FEATURE_RECORD情報を 共有できます。 たとえば、次の図に示します。
- 一番上の数値の行は、それぞれ範囲、項目、および実行を表します。
- ここで文字でラベル付けされた各スパンは、1 つの OpenType 機能を表します。 各範囲に分類される特徴は、その範囲の OPENTYPE_FEATURE_RECORD 配列に格納されます。
- 範囲ごとに、 OPENTYPE_FEATURE_RECORD 構造体の配列は、その範囲を含むスパンの文字に対応します。
- この図では、範囲 2 はスパン A、B、C の OPENTYPE_FEATURE_RECORD 構造体と間接的に関連付けられています。範囲 4 は、スパン A と D の構造体にのみ関連付けられています。
例
次の例は、ScriptShapeOpenType が文字配列 (pwcChars) とグリフ配列 (pwOutGlyphs) から論理クラスター配列 (pwLogClust) を生成する方法を示しています。 実行には 4 つのクラスターがあります。
- 最初のクラスター: 1 つのグリフで表される 1 文字
- 2 番目のクラスター: 3 つのグリフで表される 1 文字
- 3 番目のクラスター: 1 つのグリフで表される 3 つの文字
- 4 番目のクラスター: 3 つのグリフで表される 2 つの文字
文字配列:
- |c1u1 |c2u1 |c3u1 c3u2 c3u3 |c4u1 c4u2 |
- |c1g1 |c2g1 c2g2 c2g3 |c3g1 |c4g1 c4g2 c4g3 |
- c<n> はクラスター n を意味します。
- g<m> はグリフ m を意味します。
- u<p> は Unicode コード ポイント p を意味します。
- |0 |1 |4 4 4 |5 5 |
要件
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | usp10.h |
Library | Usp10.lib |
[DLL] | Usp10.dll |
再頒布可能パッケージ | Windows XP Usp10.dll バージョン 1.600 以降 |