ScriptItemizeOpenType 関数 (usp10.h)
Unicode 文字列を個別に整形可能な 項目 に分割し、OpenType 処理用のシェイプ可能な項目ごとに特徴タグの配列を提供します。
構文
HRESULT ScriptItemizeOpenType(
[in] const WCHAR *pwcInChars,
[in] int cInChars,
[in] int cMaxItems,
[in, optional] const SCRIPT_CONTROL *psControl,
[in, optional] const SCRIPT_STATE *psState,
[out] SCRIPT_ITEM *pItems,
[out] OPENTYPE_TAG *pScriptTags,
[out] int *pcItems
);
パラメーター
[in] pwcInChars
アイテム化する Unicode 文字列へのポインター。
[in] cInChars
アイテム化する pwcInChars の 文字数。
[in] cMaxItems
処理する項目 を 定義するSCRIPT_ITEM構造体の最大数。
[in, optional] psControl
実行する項目化の種類を示す SCRIPT_CONTROL 構造体へのポインター。
または、SCRIPT_CONTROLプロパティが必要ない場合は、アプリケーションでこのパラメーターをNULL に設定することもできます。 詳細については、「解説」を参照してください。
[in, optional] psState
初期双方向アルゴリズムの状態を示す SCRIPT_STATE 構造体へのポインター。
または、スクリプトの状態が不要な場合は、アプリケーションでこのパラメーターを NULL に設定することもできます。 詳細については、「解説」を参照してください。
[out] pItems
関数が処理された項目を表す SCRIPT_ITEM 構造体を取得するバッファーへのポインター。 バッファーはバイト長にする (cMaxItems + 1) * sizeof(SCRIPT_ITEM)
必要があります。 2 つ未満の SCRIPT_ITEM 構造体を処理するバッファーを使用してこの関数を呼び出すのは無効です。 関数は常に、項目分析配列にターミナル項目を追加して、0 から始まるインデックス "i" を持つ項目の長さを常に次のように使用できるようにします。
pItems[i+1].iCharPos - pItems[i].iCharPos;
[out] pScriptTags
関数がスクリプト タグを表す OPENTYPE_TAG 構造体の配列を取得するバッファーへのポインター。 バッファーはバイト長にする cMaxItems * sizeof(OPENTYPE_TAG)
必要があります。
[out] pcItems
処理された SCRIPT_ITEM 構造体の数へのポインター。
戻り値
処理が正常に終了した場合は 0 を返します。 関数が成功しない場合は、0 以外の HRESULT 値を返します。 すべてのエラー ケースでは、項目は完全に処理されておらず、出力の一部には定義された値が含まれなくなります。 アプリケーションは、 SUCCEEDED マクロと FAILED マクロを使用して戻り値をテストできます。
cMaxItems で示されるサイズが小さすぎる場合、関数は E_OUTOFMEMORY を返します。 アプリケーションは、より大きなバッファーを使用して関数の呼び出しを再試行できます。
関数は、次の条件の 1 つ以上が発生した場合にE_INVALIDARGを返します。
- pwcInChars が NULL に設定されている
- cInChars は 0 です
- pItems が NULL に設定されている
- pScriptTags が NULL に設定されている
- cMaxItems< 2
注釈
ScriptItemizeOpenType は、古い ScriptItemize 関数よりも優先されます。 ScriptItemizeOpenType の利点の 1 つは、図形化可能な項目ごとに機能タグを使用できる点です。
この関数が通常呼び出されるコンテキストについては、「 Uniscribe でテキストを表示 する」を参照してください。
関数は、シェイプ エンジンの変更または方向の変更によって項目を区切ります。
アプリケーションは、ScriptItemizeOpenType によって取得された各SCRIPT_ITEM構造体から、複数の範囲を作成したり、1 つの項目内に完全に含まれる実行を作成したりできます。 ただし、複数の項目を 1 回の実行に結合しないでください。 測定またはレンダリングを行う場合、アプリケーションは実行ごとに ScriptShapeOpenType を呼び出すことができます。ScriptItemizeOpenType によって取得されたSCRIPT_ITEM構造体内の対応するSCRIPT_ANALYSIS構造体を渡す必要があります。
アプリケーションによって処理されるテキストに右から左へのコンテンツを含めることができる場合、アプリケーションは ScriptItemizeOpenType を呼び出す際に psControl パラメーターと psState パラメーターを使用します。 ただし、アプリケーションでこれを行う必要はないため、Uniscribe に依存するのではなく、双方向テキスト自体を処理できます。 psControl パラメーターと psState パラメーターは、厳密に左から右のシナリオで役立ちます。たとえば、SCRIPT_CONTROL の fLinkStringBefore メンバーが右から左のスクリプトに固有でない場合などです。 アプリケーションは psControl と psState を NULL に設定して、 ScriptItemizeOpenType が Unicode 文字列を文字コードによって純粋に分割するようにします。
アプリケーションでは、すべてのパラメーターを NULL 以外の値に設定して、関数で完全な Unicode 双方向分析を実行させることができます。 正しい Unicode 双方向分析を許可するには、 段落 の開始時に読み取り順序に従ってSCRIPT_STATE構造体を初期化し、 ScriptItemizeOpenType を段落全体に渡す必要があります。 特に、 uBidiLevel メンバーは、左から右に 0、右から左に 1 に初期化する必要があります。
SCRIPT_ANALYSIS の fRTL メンバーは、SCRIPT_ITEMで参照されます。 SCRIPT_PROPERTIESの fNumeric メンバーは、ScriptGetProperties によって取得されます。 これらのメンバーは、getCharacterPlacement の lpResults によって参照される、GCP_RESULTSの lpClass メンバーと同じ分類を提供します。
次の表に示すように、ヨーロッパ数字 U+0030 ~ U+0039 は国内数字としてレンダリングできます。
SCRIPT_STATE.fDigitSubstitute | SCRIPT_CONTROL.fContextDigits | Unicode U+0030 ~ U+0039 に表示される数字図形 |
---|---|---|
FALSE | Any | ヨーロッパ数字 |
TRUE | FALSE | SCRIPT_CONTROLの uDefaultLanguage メンバーで指定されています。 |
TRUE | TRUE | 以前の厳密なテキストと同様に、既定値は SCRIPT_CONTROL の uDefaultLanguage メンバーです。 |
コンテキスト桁モードでは、次のいずれかのアクションが発生します。
- uDefaultLanguage で指定されたスクリプトが出力と同じ方向にある場合、最初の文字の前に見つかったすべての数字は、uDefaultLanguage で示される言語でレンダリングされます。
- uDefaultLanguage で指定されたスクリプトが出力とは反対の方向にある場合、最初の文字の前に見つかったすべての数字がヨーロッパ数字でレンダリングされます。
詳細については、「 Digit Shapes」を参照してください。
Unicode コントロールの文字と定義、および SCRIPT_STATE メンバーに対するそれらの影響を次の表に示します。 Unicode 制御文字の詳細については、「Unicode 標準」を参照してください。
Unicode 制御文字 | 意味 | SCRIPT_STATEへの影響 |
---|---|---|
NADS | ヨーロッパ数字 (NODS) を国内数字の図形でオーバーライドします。 | fDigitSubstitute を設定します。 |
うなずく | 通常の数字の図形を使用します。それ以外の場合はヨーロッパ数字と呼ばれます。 「NADS」を参照してください。 | fDigitSubstitute をクリアします。 |
お 尻 | 対称ペア (かっこなど) のスワップをアクティブにします。 これらの文字の場合、左と右は開始と終了と解釈されます。 既定値です。 ISS に関するページを参照してください。 | fInhibitSymSwap をクリアします。 |
ISS | 対称ペアのスワップを禁止します。 ASS に関するページを参照してください。 | fInhibitSymSwap を設定します。 |
AAFS | アラビア語のプレゼンテーション フォームのアラビア語のフォーム シェイプをアクティブにします。 「IAFS」を参照してください。 | fCharShape を設定します。 |
IAFS | アラビア語の形の整形、つまり、合字と筆記体の結合を、アラビア語のプレゼンテーション フォームに対して阻害します。 アラビア語の名目文字は影響を受けません。 既定値です。 AAFS を参照してください。 | fCharShape をクリアします。 |
SCRIPT_STATE の fArabicNumContext メンバーは、アラビア語のスクリプト テキストでの数字の状況依存の表示をサポートしています。 これは、アラビア語のネイティブの数字図形またはヨーロッパ数字を使用して数字がレンダリングされるかどうかを示します。 段落の先頭で、このメンバーは通常、アラビア語ロケールの場合は TRUE 、その他のロケールの 場合は FALSE に初期化する必要があります。 関数は、強力なテキストを処理するスクリプトの状態を更新します。
出力パラメーター pScriptTags は、 項目と並列のエントリを持つ配列を示します。 項目ごとに、この関数は後続のすべての操作で整形に使用する必要があるスクリプト タグを取得します。
通常、スクリプト タグは、入力文字から ScriptItemizeOpenType によって決定されます。 関数が特定のスクリプト タグを取得する場合、アプリケーションは変更せずに他の関数に渡す必要があります。 ただし、文字がニュートラル (数字など) でスクリプトを特定できない場合、アプリケーションでは、テキストに関連付けられているフォントや言語に基づいて、適切なスクリプト タグを選択する必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | usp10.h |
Library | Usp10.lib |
[DLL] | Usp10.dll |
再頒布可能パッケージ | Windows XP Usp10.dll バージョン 1.600 以降 |