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 値を返します。

pwcInCharsNULL に設定されている場合、cInChars が 0 の場合、pItemsNULL に設定されている場合、または 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_CONTROLfLinkStringBefore メンバーが右から左のスクリプトに固有でない場合などです。 アプリケーションは psControlpsStateNULL に設定して、 ScriptItemize が Unicode 文字列を文字コードによって純粋に分割するようにします。

アプリケーションでは、すべてのパラメーターを NULL 以外の値に設定して、関数で完全な Unicode 双方向分析を実行させることができます。 正しい Unicode 双方向分析を許可するには、 段落 の開始時に読み取り順序に従ってSCRIPT_STATE構造体を初期化し、 ScriptItemize に 段落全体を渡す必要があります。 特に、 uBidiLevel メンバーは、左から右に 0、右から左に 1 に初期化する必要があります。

SCRIPT_ANALYSISfRTL メンバーは、enabled="1" で参照SCRIPT_ITEMSCRIPT_PROPERTIESfNumeric メンバーは、ScriptGetProperties によって取得されます。 これらのメンバーは、getCharacterPlacementlpResults によって参照される、GCP_RESULTSlpClass メンバーと同じ分類を提供します。

次の表に示すように、ヨーロッパ数字 U+0030 ~ U+0039 は国内数字としてレンダリングできます。

SCRIPT_STATE.fDigitSubstitute SCRIPT_CONTROL.fContextDigits Unicode U+0030 ~ U+0039 に表示される数字図形
FALSE Any ヨーロッパ数字
TRUE FALSE SCRIPT_CONTROLuDefaultLanguage メンバーで指定されています。
TRUE TRUE 以前の厳密なテキストと同様に、既定値は SCRIPT_CONTROLuDefaultLanguage メンバーです。
 

コンテキスト桁モードでは、次のいずれかのアクションが発生します。

  • uDefaultLanguage で指定されたスクリプトが出力と同じ方向にある場合、最初の文字の前に見つかったすべての数字は、uDefaultLanguage で示される言語でレンダリングされます。
  • uDefaultLanguage で指定されたスクリプトが出力とは反対の方向にある場合、最初の文字の前に見つかったすべての数字がヨーロッパ数字でレンダリングされます。
たとえば、 uDefaultLanguage がLANG_ARABICを示している場合、最初の数字は右から左への埋め込みで Arabic-Indic されます。 ただし、左から右への埋め込みではヨーロッパ数字で表示されます。

詳細については、「 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_STATEfArabicNumContext メンバーは、アラビア語のスクリプト テキストでの数字の状況依存の表示をサポートしています。 これは、アラビア語のネイティブの数字図形またはヨーロッパ数字を使用して数字がレンダリングされるかどうかを示します。 段落の先頭で、このメンバーは通常、アラビア語ロケールの場合は TRUE 、その他のロケールの 場合は FALSE に初期化する必要があります。 関数は、強力なテキストを処理するスクリプトの状態を更新します。

大事なWindows 8以降: Windows 7 で実行する機能を維持するには、Uniscribe を使用するモジュールで、ライブラリ リストで gdi32.lib の前に Usp10.lib を指定する必要があります。
 

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー usp10.h
Library Usp10.lib
[DLL] Usp10.dll
再頒布可能パッケージ Windows Me/98/95 のインターネット エクスプローラー 5 以降

こちらもご覧ください

テキストを Uniscribe で表示する

SCRIPT_ANALYSIS

SCRIPT_CONTROL

SCRIPT_ITEM

SCRIPT_PROPERTIES

SCRIPT_STATE

ScriptItemizeOpenType

ScriptShape

Uniscribe

Uniscribe 関数