次の方法で共有


複雑なスクリプトの処理

テキストの正当な理由を提供するために、アプリケーションは 2 つのメソッドのいずれかを使用できます。 多言語の理由を簡単に実装する場合、アプリケーションは ScriptJustify を呼び出す必要があります。 これは、kashida、次に単語間の間隔、および文字間の間隔を考慮して、デルタ dx 配列を生成します。 より高度な理由のために、アプリケーションは、独自の言語知識と、SCRIPT_VISATTR配列内の ScriptShape によって取得された情報を使用して、更新されたデルタ dx 配列を生成できます。

理由スペースまたは kashida は、SCRIPT_VISATTRの uJustification メンバーによって識別される場所に挿入 する必要があります。 文字間の位置合わせを実行する場合、アプリケーションは、SCRIPT_JUSTIFY_CHARACTERでマークされたグリフの後にのみ余分なスペースを挿入する必要があります。

アプリケーションは、 ScriptXtoCPScriptCPtoX を使用してキャレット配置とヒット テストを行います。 詳細については、「 キャレット配置の管理」および「ヒット テスト」を参照してください。

フォントに依存しない方法で幅を取得するために、アプリケーションは ScriptGetLogicalWidths を呼び出します。 論理幅を ScriptApplyLogicalWidth に渡すことで、元のフォントが使用できない場合でも、同じ境界にテキストブロックを再表示できます。 ScriptTextOut への渡しに適したグリフ幅 (高度な幅) の配列が生成されます。 このような記録やフォントに依存しない方法での事前幅情報の再適用は、アプリケーション定義形式でのメタファイリングなどの状況で役立ちます。

Note

メタファイルはグリフ インデックスをサポートしていません。 拡張メタファイルに書き込むには、アプリケーションで ExtTextOut を使用し、論理文字を直接書き込む必要があります。 このメカニズムを使用すると、テキストが再生されるまでグリフの生成と配置は行われません。

 

現在のフォントの既定、空白、kashida などに使用される特定のグリフを取得するには、アプリケーションで ScriptGetFontProperties を呼び出す必要があります。 選択したフォントでサポートされている実行内の文字を確認するために、アプリケーションは ScriptGetCMap を呼び出します。 使用できない文字は、グリフ バッファー内の既定のグリフを持ちます。 フォントが 1 つのグリフではなくグリフの組み合わせを使用して文字をレンダリングする場合、このメソッドは失敗します。 たとえば、00C9 です。LATIN CAPITAL LETTER E WITH ACUTE は、大文字 E グリフと急性グリフを使用してレンダリングできます。 これらの種類のコード ポイントを含む文字列のフォント サポートを確認するために、アプリケーションは ScriptShape を呼び出すことができます。 詳細については、「 シェイプ エンジンの使用」を参照してください。

ScriptCacheGetHeight 関数は、フォント キャッシュからフォントの高さを返します。 ScriptGetProperties は、スクリプトによってインデックス付けされたすべてのスクリプトに必要な特別な処理に関する情報を提供します。 たとえば、スクリプトに関連付けられているプライマリ言語、スクリプトが数値かどうかを示すデータ、スクリプトが複雑なスクリプトかどうかを示すデータが含まれます。

ScriptGetGlyphABCWidth は、特定のグリフの ABC 幅 を返します。これは、グリフ グラフの描画に役立つ場合があります。 ただし、通常の複雑なスクリプト テキストの書式設定には使用しないでください。

Uniscribe の使用