Win32 API 日本語リファレンス
ホームGraphics.DirectWrite › IDWriteTextAnalyzer1

IDWriteTextAnalyzer1

COM
IID80dad800-e21f-4e83-96ce-bfcce500db7c継承元IDWriteTextAnalyzer自前メソッド開始 vtbl10

公式ドキュメント

複雑なスクリプト処理のために、さまざまなテキストプロパティを解析します。(IDWriteTextAnalyzer1)

メソッド 9

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 10 HRESULT ApplyCharacterSpacing(FLOAT leadingSpacing, FLOAT trailingSpacing, FLOAT minimumAdvanceWidth, DWORD textLength, DWORD glyphCount, WORD* clusterMap, FLOAT* glyphAdvances, DWRITE_GLYPH_OFFSET* glyphOffsets, DWRITE_SHAPING_GLYPH_PROPERTIES* glyphProperties, FLOAT* modifiedGlyphAdvances, DWRITE_GLYPH_OFFSET* modifiedGlyphOffsets)

文字間のスペーシングを適用し、グリフクラスターと発音区別符号(ダイアクリティカルマーク)を適切に調整します。

leadingSpacingFLOATin読み順における各文字の前のスペーシング。
trailingSpacingFLOATin読み順における各文字の後のスペーシング。
minimumAdvanceWidthFLOATin各文字の最小アドバンス。文字が細くなりすぎたり、幅がゼロになったりするのを防ぎます。これはゼロ以上でなければなりません。
textLengthDWORDinクラスターマップおよび元テキストの長さ。
glyphCountDWORDinグリフの数。
clusterMapWORD*in文字範囲からグリフ範囲へのマッピング。
glyphAdvancesFLOAT*in各グリフのアドバンス幅。
glyphOffsetsDWRITE_GLYPH_OFFSET*in各グリフの原点のオフセット。
glyphPropertiesDWRITE_SHAPING_GLYPH_PROPERTIES*inGetGlyphs から得られる各グリフのプロパティ。
modifiedGlyphAdvancesFLOAT*out各グリフの新しいアドバンス幅。
modifiedGlyphOffsetsDWRITE_GLYPH_OFFSET*out各グリフの原点の新しいオフセット。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

入力と出力のアドバンス/オフセットは、同じ配列をエイリアスとして指定できます。

vtbl 11 HRESULT GetBaseline(IDWriteFontFace* fontFace, DWRITE_BASELINE baseline, BOOL isVertical, BOOL isSimulationAllowed, DWRITE_SCRIPT_ANALYSIS scriptAnalysis, LPWSTR localeName, INT* baselineCoordinate, BOOL* exists)

指定されたベースラインをフォントから取得します。

fontFaceIDWriteFontFace*in読み取るフォントフェイス。
baselineDWRITE_BASELINEin対象となるベースラインを指定する DWRITE_BASELINE 型の値。
isVerticalBOOLinベースラインが縦書きか横書きか。
isSimulationAllowedBOOLinフォントにベースラインが存在しない場合にシミュレートするかどうか。
scriptAnalysisDWRITE_SCRIPT_ANALYSISin

AnalyzeScript から得られるスクリプト解析結果。

Note DWRITE_SCRIPT_ANALYSIS scriptAnalysis = {}; のように空のスクリプト解析構造体を渡すことができ、その場合このメソッドはデフォルトのベースラインを返します。
localeNameLPWSTRinoptionalランの言語。
baselineCoordinateINT*outデザイン単位でのベースライン座標値。
existsBOOL*out返されたベースラインがフォントに存在するかどうか。

戻り値

Type: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

フォントにベースラインが存在しない場合でもエラーとはみなされず、関数は exists = false を返します。その場合、ヒューリスティックを用いて欠落しているベースラインを計算するか、simulationAllowed フラグが true であれば、関数が妥当な近似値を計算します。

vtbl 12 HRESULT AnalyzeVerticalGlyphOrientation(IDWriteTextAnalysisSource1* analysisSource, DWORD textPosition, DWORD textLength, IDWriteTextAnalysisSink1* analysisSink)

テキスト範囲のスクリプトの向きを解析し、ソースからテキストと属性を読み取って、結果をシンクコールバック SetGlyphOrientation に報告します。

analysisSourceIDWriteTextAnalysisSource1*in解析するソースオブジェクト。
textPositionDWORDinソースオブジェクト内の開始位置。
textLengthDWORDin解析する長さ。
analysisSinkIDWriteTextAnalysisSink1*in解析する長さ。

戻り値

Type: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 13 HRESULT GetGlyphOrientationTransform(DWRITE_GLYPH_ORIENTATION_ANGLE glyphOrientationAngle, BOOL isSideways, DWRITE_MATRIX* transform)

グリフランを描画するための、それぞれの角度に対応する 2x3 変換行列を返します。(IDWriteTextAnalyzer1.GetGlyphOrientationTransform)

glyphOrientationAngleDWRITE_GLYPH_ORIENTATION_ANGLEinIDWriteTextAnalysisSink1::SetGlyphOrientation に報告された角度を指定する DWRITE_GLYPH_ORIENTATION_ANGLE 型の値。
isSidewaysBOOLinランのグリフが横倒し(sideways)かどうか。
transformDWRITE_MATRIX*out返される変換。

戻り値

Type: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

返される変換の平行移動成分はゼロです。

vtbl 14 HRESULT GetScriptProperties(DWRITE_SCRIPT_ANALYSIS scriptAnalysis, DWRITE_SCRIPT_PROPERTIES* scriptProperties)

指定されたスクリプトのプロパティを取得します。

scriptAnalysisDWRITE_SCRIPT_ANALYSISinIDWriteTextAnalyzer::AnalyzeScript から返される、テキストのランのスクリプト。
scriptPropertiesDWRITE_SCRIPT_PROPERTIES*outスクリプトの情報を記述する DWRITE_SCRIPT_PROPERTIES 構造体へのポインター。

戻り値

Type: HRESULT

指定されたスクリプトのプロパティを返します。スクリプトが無効な場合は、不明なスクリプトの汎用プロパティと E_INVALIDARG を返します。

vtbl 15 HRESULT GetTextComplexity(LPWSTR textString, DWORD textLength, IDWriteFontFace* fontFace, BOOL* isTextSimple, DWORD* textLengthRead, WORD* glyphIndices)

テキストの複雑さと、完全なスクリプトシェイピングのために IDWriteTextAnalyzer::GetGlyphs を呼び出す必要があるかどうかを判定します。

textStringLPWSTRin複雑さをチェックするテキスト。この文字列は UTF-16 の場合がありますが、追加面(supplementary)の文字はすべて複雑とみなされます。
textLengthDWORDinチェックするテキストの長さ。
fontFaceIDWriteFontFace*in読み取るフォントフェイス。
isTextSimpleBOOL*outtrue の場合、テキストは単純であり、glyphIndices 配列には既に名目上のグリフが格納されています。それ以外の場合は、複雑なスクリプトや OpenType 機能を適切にシェイピングするために IDWriteTextAnalyzer::GetGlyphs を呼び出す必要があります。
textLengthReadDWORD*inout同じ複雑さ(単純または複雑)を持つテキストランについて読み取られた長さ。その位置以降について再度呼び出すことができます。
glyphIndicesWORD*outoptionalテキストのオプションのグリフインデックス。関数がテキストは単純であると返した場合、必要なグリフは既に得られています。それ以外の場合、グリフインデックスは意味を持たず、代わりにシェイピングのために IDWriteTextAnalyzer::GetGlyphs を呼び出す必要があります。

戻り値

Type: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

文字が、複雑なシェイピング要件を持つスクリプトの一部である場合、bidi(双方向)解析を必要とする場合、他の文字と結合する場合、追加面(supplementary planes)に存在する場合、または標準の OpenType 機能に関与するグリフを持つ場合、テキストは単純ではありません。返される長さは、結合マークをその基底文字から分割しません。

vtbl 16 HRESULT GetJustificationOpportunities(IDWriteFontFace* fontFace, FLOAT fontEmSize, DWRITE_SCRIPT_ANALYSIS scriptAnalysis, DWORD textLength, DWORD glyphCount, LPWSTR textString, WORD* clusterMap, DWRITE_SHAPING_GLYPH_PROPERTIES* glyphProperties, DWRITE_JUSTIFICATION_OPPORTUNITY* justificationOpportunities)

テキストとシェイピンググリフのプロパティが与えられたとき、各グリフの均等割り付け(justification)機会の情報を取得します。

fontFaceIDWriteFontFace*inoptional

シェイピングに使用されたフォントフェイス。これは主にカシダ(kashida)幅の正しい結果を返すために重要です。

NULL でもかまいません。

fontEmSizeFLOATinグリフランに使用されるフォントの em サイズ。
scriptAnalysisDWRITE_SCRIPT_ANALYSISinアイテマイザー(itemizer)から得られるテキストのスクリプト。
textLengthDWORDinテキストの長さ。
glyphCountDWORDinグリフの数。
textStringLPWSTRinグリフの生成に使用された文字。
clusterMapWORD*inシェイピングから生成されたクラスターマップ。
glyphPropertiesDWRITE_SHAPING_GLYPH_PROPERTIES*inシェイピングから生成されたグリフプロパティ。
justificationOpportunitiesDWRITE_JUSTIFICATION_OPPORTUNITY*out各グリフに対して許可される均等割り付けの伸長/圧縮に関する情報を受け取る DWRITE_JUSTIFICATION_OPPORTUNITY 構造体へのポインター。

戻り値

Type: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

この関数は、IDWriteTextAnalyzer::GetGlyphs メソッドによるシェイピングが完了した後、ランごとに呼び出されます。

Note この関数は自然メトリック(DWRITE_MEASURING_MODE_NATURAL)のみをサポートします。

vtbl 17 HRESULT JustifyGlyphAdvances(FLOAT lineWidth, DWORD glyphCount, DWRITE_JUSTIFICATION_OPPORTUNITY* justificationOpportunities, FLOAT* glyphAdvances, DWRITE_GLYPH_OFFSET* glyphOffsets, FLOAT* justifiedGlyphAdvances, DWRITE_GLYPH_OFFSET* justifiedGlyphOffsets)

グリフアドバンスの配列を、行の幅に合わせて均等割り付けします。

lineWidthFLOATin行の幅。
glyphCountDWORDinグリフ数。
justificationOpportunitiesDWRITE_JUSTIFICATION_OPPORTUNITY*in各グリフに対して許可される均等割り付けの伸長/圧縮に関する情報を含む DWRITE_JUSTIFICATION_OPPORTUNITY 構造体へのポインター。この情報は IDWriteTextAnalyzer1::GetJustificationOpportunities から取得します。
glyphAdvancesFLOAT*inグリフアドバンスの配列。
glyphOffsetsDWRITE_GLYPH_OFFSET*inグリフオフセットの配列。
justifiedGlyphAdvancesFLOAT*out均等割り付けされたグリフアドバンスの返却配列。
justifiedGlyphOffsetsDWRITE_GLYPH_OFFSET*outoptional均等割り付けされたグリフオフセットの返却配列。

戻り値

Type: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

JustifyGlyphAdvances は、IDWriteTextAnalyzer1::GetJustificationOpportunities を呼び出してすべての機会を収集した後に呼び出します。JustifyGlyphAdvances は行全体にわたって処理を行います。入力と出力の配列は互いにエイリアスとして指定でき、インプレースでの更新が可能です。

vtbl 18 HRESULT GetJustifiedGlyphs(IDWriteFontFace* fontFace, FLOAT fontEmSize, DWRITE_SCRIPT_ANALYSIS scriptAnalysis, DWORD textLength, DWORD glyphCount, DWORD maxGlyphCount, WORD* clusterMap, WORD* glyphIndices, FLOAT* glyphAdvances, FLOAT* justifiedGlyphAdvances, DWRITE_GLYPH_OFFSET* justifiedGlyphOffsets, DWRITE_SHAPING_GLYPH_PROPERTIES* glyphProperties, DWORD* actualGlyphCount, WORD* modifiedClusterMap, WORD* modifiedGlyphIndices, FLOAT* modifiedGlyphAdvances, DWRITE_GLYPH_OFFSET* modifiedGlyphOffsets)

カシダを伴うアラビア語など、均等割り付けによってグリフのアドバンスが増加した複雑なスクリプトに対して、新しいグリフを補充します。

fontFaceIDWriteFontFace*inoptional

シェイピングに使用されたフォントフェイス。

NULL でもかまいません。

fontEmSizeFLOATinグリフランに使用されるフォントの em サイズ。
scriptAnalysisDWRITE_SCRIPT_ANALYSISinアイテマイザー(itemizer)から得られるテキストのスクリプト。
textLengthDWORDinテキストの長さ。
glyphCountDWORDinグリフの数。
maxGlyphCountDWORDin呼び出し側によって割り当てられた出力グリフの最大数。
clusterMapWORD*inoptionalシェイピングから生成されたクラスターマップ。
glyphIndicesWORD*inシェイピングから生成された元のグリフ。
glyphAdvancesFLOAT*inシェイピングから生成された元のグリフアドバンス。
justifiedGlyphAdvancesFLOAT*inIDWriteTextAnalyzer1::JustifyGlyphAdvances から得られる、均等割り付けされたグリフアドバンス。
justifiedGlyphOffsetsDWRITE_GLYPH_OFFSET*inIDWriteTextAnalyzer1::JustifyGlyphAdvances から得られる、均等割り付けされたグリフオフセット。
glyphPropertiesDWRITE_SHAPING_GLYPH_PROPERTIES*inIDWriteTextAnalyzer::GetGlyphs から得られる各グリフのプロパティ。
actualGlyphCountDWORD*inout変更された配列に書き込まれた新しいグリフ数。サイズが十分でない場合は、必要なグリフ数。
modifiedClusterMapWORD*outoptional更新されたクラスターマップ。
modifiedGlyphIndicesWORD*out必要な箇所に新しいグリフが挿入された、更新後のグリフ。
modifiedGlyphAdvancesFLOAT*out更新されたグリフアドバンス。
modifiedGlyphOffsetsDWRITE_GLYPH_OFFSET*out更新されたグリフオフセット。

戻り値

Type: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

GetJustifiedGlyphs は行の均等割り付けが完了した後に呼び出し、ランごとに処理します。

IDWriteTextAnalyzer1::GetScriptProperties がそのスクリプトに対して非 null の DWRITE_SCRIPT_PROPERTIES.justificationCharacter を返す場合は、GetJustifiedGlyphs を呼び出す必要があります。

GetJustifiedGlyphs は主にアラビア語のような筆記体(cursive)スクリプトに使用します。maxGlyphCount が十分でない場合、GetJustifiedGlyphs はエラー E_NOT_SUFFICIENT_BUFFER を返し、actualGlyphCount が指す変数に必要なグリフ数を格納します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IDWriteTextAnalyzer1 "{80DAD800-E21F-4E83-96CE-BFCCE500DB7C}"
#usecom global IDWriteTextAnalyzer1 IID_IDWriteTextAnalyzer1 "{}"
#comfunc global IDWriteTextAnalyzer1_ApplyCharacterSpacing            10 float,float,float,int,int,var,var,var,var,var,var
#comfunc global IDWriteTextAnalyzer1_GetBaseline                      11 sptr,int,int,int,int,wstr,var,var
#comfunc global IDWriteTextAnalyzer1_AnalyzeVerticalGlyphOrientation  12 sptr,int,int,sptr
#comfunc global IDWriteTextAnalyzer1_GetGlyphOrientationTransform     13 int,int,var
#comfunc global IDWriteTextAnalyzer1_GetScriptProperties              14 int,var
#comfunc global IDWriteTextAnalyzer1_GetTextComplexity                15 wstr,int,sptr,var,var,var
#comfunc global IDWriteTextAnalyzer1_GetJustificationOpportunities    16 sptr,float,int,int,int,wstr,var,var,var
#comfunc global IDWriteTextAnalyzer1_JustifyGlyphAdvances             17 float,int,var,var,var,var,var
#comfunc global IDWriteTextAnalyzer1_GetJustifiedGlyphs               18 sptr,float,int,int,int,int,var,var,var,var,var,var,var,var,var,var,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。