IDWriteTextAnalysisSource
COM公式ドキュメント
テキストアナライザーのクライアントによって実装され、アナライザーにテキストを提供します。
解説(Remarks)
これらのコールバックのいずれかがエラーを返した場合、分析関数は途中で停止し、コールバックエラーを返します。E_NOTIMPL を返すのではなく、アプリケーションはメソッドをスタブ化し、定数/null と S_OK を返すべきである点に注意してください。
メソッド 5
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
指定したテキスト位置から始まるテキストのブロックを取得します。
| textPosition | DWORD | in | 取得する部分の先頭位置。すべての位置は文字単位ではなく UTF16 コード単位で表され、補助文字が使用される場合に重要になります。 |
| textString | WORD** | out | このメソッドが返るとき、テキスト分析から取得されるテキストのブロックのアドレスを文字配列として格納します。 |
| textLength | DWORD* | out | このメソッドが返るとき、取得されたチャンクの UTF16 単位数を格納します。返される長さはブロックの長さではなく、指定した位置からブロックの末尾までの、ブロック内に残っている長さです。たとえば、100 位置分のブロックの 75 位置目を照会すると 25 が返されます。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
NULL を返すことはテキストの終端、つまり最後の文字の次の位置を示します。この関数は連続する各ブロックに対して反復的に呼び出され、バッキングストア内の複数の断片化されたブロックを仮想的に連続した 1 つの文字列として結び付けます。
アプリケーションはバッキングストアの一部のみをマップする疎なテキストコンテンツを実装できますが、いずれかの分析関数に渡される範囲内にあるテキストはすべてマップする必要があります。
指定した位置の直前にあるテキストのブロックを取得します。
| textPosition | DWORD | in | 取得するテキストブロックの最後の位置の直後の位置。 |
| textString | WORD** | out | このメソッドが返るとき、指定した範囲の文字配列としてのテキストブロックへのポインターのアドレスを格納します。テキスト範囲は textPosition からブロックの先頭までです。 |
| textLength | DWORD* | out | 取得されたブロックの UTF16 単位数。返される長さは、指定した位置からブロックの先頭までの長さです。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
NULL は、指定した位置に利用可能なチャンクがないことを示します。これは textPosition が 0 である、textPosition がテキストコンテンツ全体の長さより大きい、または照会した位置がアプリケーションのバッキングストアにマップされていないためです。
アプリケーションはバッキングストアの一部のみをマップする疎なテキストコンテンツを実装できますが、いずれかの分析関数に渡される範囲内にあるテキストはすべてマップする必要があります。
段落の読み取り方向を取得します。
戻り値
Type: DWRITE_READING_DIRECTION
現在の段落の読み取り方向。
テキスト分析の影響を受ける範囲のロケール名を取得します。
| textPosition | DWORD | in | 調べるテキスト位置。 |
| textLength | DWORD* | out | 次に異なるロケールが現れるまでの、テキスト分析の影響を受けるテキストの長さを格納します。 |
| localeName | WORD** | out | テキスト分析の影響を受けるテキストからロケール名を受け取る文字配列へのポインターのアドレスを格納します。この文字配列は null で終端されます。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
localeName ポインターは、次の呼び出しまで、または分析が返るまで有効なままである必要があります。
テキスト分析の影響を受けるテキスト範囲から数字置換を取得します。
| textPosition | DWORD | in | レポートを開始する開始位置。 |
| textLength | DWORD* | out | 次に異なる数字置換が現れるまでの、テキスト範囲内に残っているテキストの長さ(文字数)を格納します。 |
| numberSubstitution | IDWriteNumberSubstitution** | out | IDWriteFactory::CreateNumberSubstitution で作成された、指定したロケールに適した数字と数値の区切り記号を保持するオブジェクトへのポインターのアドレスを格納します。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
いずれの実装も、参照カウントをインクリメントした状態で数字置換を返す必要があり、分析は使用を終えると(次の呼び出しの前、または返る前に)それを解放します。ただし、シンクコールバックはその後もそれを保持し続ける場合があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDWriteTextAnalysisSource "{688E1A58-5094-47C8-ADC8-FBCEA60AE92B}" #usecom global IDWriteTextAnalysisSource IID_IDWriteTextAnalysisSource "{}" #comfunc global IDWriteTextAnalysisSource_GetTextAtPosition 3 int,var,var #comfunc global IDWriteTextAnalysisSource_GetTextBeforePosition 4 int,var,var #comfunc global IDWriteTextAnalysisSource_GetParagraphReadingDirection 5 #comfunc global IDWriteTextAnalysisSource_GetLocaleName 6 int,var,var #comfunc global IDWriteTextAnalysisSource_GetNumberSubstitution 7 int,var,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IDWriteTextAnalysisSource "{688E1A58-5094-47C8-ADC8-FBCEA60AE92B}" #usecom global IDWriteTextAnalysisSource IID_IDWriteTextAnalysisSource "{}" #comfunc global IDWriteTextAnalysisSource_GetTextAtPosition 3 int,sptr,sptr #comfunc global IDWriteTextAnalysisSource_GetTextBeforePosition 4 int,sptr,sptr #comfunc global IDWriteTextAnalysisSource_GetParagraphReadingDirection 5 #comfunc global IDWriteTextAnalysisSource_GetLocaleName 6 int,sptr,sptr #comfunc global IDWriteTextAnalysisSource_GetNumberSubstitution 7 int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。