シェーピング エンジンの使用
Uniscribe では、特定のスクリプトのレイアウト知識を含む複数のシェーピング エンジンが使用されます。 また、OpenType レイアウト シェイプ エンジンを利用して、グリフの生成、エクステント測定、単語区切りのサポートなど、フォント固有のスクリプト機能を処理します。 Uniscribe は、Unicode 双方向アルゴリズムを使用して双方向文字の並べ替えを管理し、アラビア語、ヘブライ語、タイ語の整形用の OpenType 以外のレイアウトフォント形式を理解します。
各シェーピング エンジンに割り当てられる正確なコード ポイント範囲は異なる可能性があるため、スクリプト番号は発行されませんが、SCRIPT_UNDEFINEDを除きます。 ただし、グローバル スクリプト プロパティ テーブルにアクセスする ScriptGetProperties 関数を呼び出すことで、アプリケーションでスクリプトの属性をテストできます。 アプリケーションでは、グローバル スクリプト プロパティを使用して、独自のレイアウト 規則と必要なシェーピング エンジンの分割を組み合わせることができます。
アプリケーションは、 ScriptShape 関数を呼び出してシェーピング エンジンにアクセスします。 すべての複雑なスクリプト シェーピング エンジン、数字シェーピング エンジン、および ASCII シェーピング エンジンは、シェイプの前にデバイス コンテキスト ハンドルに示されているフォントを検証します。 読みやすくするには、 ScriptItemize 関数によって返されるスクリプトを使用して複雑なスクリプトを整形する必要があります。 他の実行は、SCRIPT_ANALYSIS構造体の eScript メンバーで指定された SCRIPT_UNDEFINED で整形された場合でも読みやすいままですが、文字体裁の品質が失われる可能性があります。
ScriptShape は成功した場合は 0 を返し、アプリケーションによって提供されるフォントに十分なグリフまたはシェイプ テーブルが含まれていない場合はUSP_E_SCRIPT_NOT_IN_FONTを返します。 アプリケーションがSCRIPT_UNDEFINEDを指定していて、フォントでサポートされていない文字がある場合でも、関数は成功します。 この場合、アプリケーションはグリフ出力バッファーをスキャンして、不足しているグリフが存在するかどうかを確認する必要があります。 不足しているグリフに対処する方法については、「 フォント フォールバックの使用」を参照してください。
関連トピック