ScriptItemize 関数 (usp10.h)
Unicode 文字列を個別に整形可能な項目に分割します。
構文
HRESULT ScriptItemize(
[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] 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] pcItems
処理された SCRIPT_ITEM 構造体の数へのポインター。
戻り値
処理が正常に終了した場合は 0 を返します。 関数が成功しない場合は、0 以外の HRESULT 値を返します。
pwcInChars が NULL に設定されている場合、cInChars が 0 の場合、pItems が NULL に設定されている場合、または cMaxItems 2 の場合、関数はE_INVALIDARGを返します<。
cMaxItems の値が不十分な場合、関数は E_OUTOFMEMORY を返します。 すべてのエラーケースと同様に、項目は完全に処理されておらず、出力配列の一部には定義された値が含まれなくなります。 関数が E_OUTOFMEMORYを返す場合、アプリケーションは、より大きな pItems バッファーを使用して再度呼び出すことができます。
注釈
この関数が通常呼び出されるコンテキストについては、「 Uniscribe でテキストを表示 する」を参照してください。
関数は、シェイプ エンジンの変更または方向の変更によって項目を区切ります。
アプリケーションは、ScriptItemize によって取得された各SCRIPT_ITEM構造体から、複数の範囲を作成したり、1 つの項目内に完全に含まれる実行を作成したりできます。 ただし、複数の項目を 1 回の実行に結合しないでください。 その後、測定またはレンダリングを行うときに、アプリケーションは実行ごとに ScriptShape を呼び出し、ScriptItemize によって取得されたSCRIPT_ANALYSIS構造体を SCRIPT_ITEM 構造体に渡す必要があります。
アプリケーションによって処理されるテキストに右から左へのコンテンツを含めることができる場合、アプリケーションは ScriptItemize を呼び出す際に psControl パラメーターと psState パラメーターを使用します。 ただし、アプリケーションでこれを行う必要はないため、Uniscribe に依存するのではなく、双方向テキスト自体を処理できます。 psControl パラメーターと psState パラメーターは、厳密に左から右のシナリオで役立ちます。たとえば、SCRIPT_CONTROL の fLinkStringBefore メンバーが右から左のスクリプトに固有でない場合などです。 アプリケーションは psControl と psState を NULL に設定して、 ScriptItemize が Unicode 文字列を文字コードによって純粋に分割するようにします。
アプリケーションでは、すべてのパラメーターを NULL 以外の値に設定して、関数で完全な Unicode 双方向分析を実行させることができます。 正しい Unicode 双方向分析を許可するには、 段落 の開始時に読み取り順序に従ってSCRIPT_STATE構造体を初期化し、 ScriptItemize に 段落全体を渡す必要があります。 特に、 uBidiLevel メンバーは、左から右に 0、右から左に 1 に初期化する必要があります。
SCRIPT_ANALYSISの fRTL メンバーは、enabled="1" で参照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 に初期化する必要があります。 関数は、強力なテキストを処理するスクリプトの状態を更新します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | usp10.h |
Library | Usp10.lib |
[DLL] | Usp10.dll |
再頒布可能パッケージ | Windows Me/98/95 のインターネット エクスプローラー 5 以降 |