フォント フォールバックの使用

注意

このトピックでは、 ScriptShape に関するすべての注釈が ScriptShapeOpenType に等しく適用されます。

 

文字列の一部の文字がフォントでサポートされていない場合、またはアプリケーションでフォントでサポートされていない 複雑なスクリプト を使用している場合は、テキスト表示中にフォント フォールバックを使用する必要があります。 フォント フォールバックの要件は、アプリケーションが ScriptShape 関数を呼び出すときに、テキストのレイアウト プロセス中に検出されます。 テキスト表示の詳細については、「 Uniscribe でテキストを表示する」を参照してください。

サポートされていない文字のフォント フォールバックの必要性を判断する

文字列内の一部の文字が要求されたフォントでサポートされていない場合、 ScriptShape へのアプリケーション呼び出しは成功します。 ただし、アプリケーションはグリフ出力バッファーをスキャンして、不足しているグリフが存在するかどうかを確認する必要があります。 不足しているグリフのグリフ インデックスは、 ScriptGetFontProperties を呼び出すことによって、特定のフォントに対して決定できます。 特定のグリフが使用できない場合、アプリケーションはグリフの別のフォントにフォールバックするか、使用できるグリフがないことを示すグラフィック シンボルをレンダリングする必要があります。

サポートされていない複雑なスクリプトのフォント フォールバックの必要性を判断する

アプリケーションが表示に使用するフォントは、テキストに必要な複雑なスクリプトをサポートしていない可能性があります。 この場合、 ScriptShape へのアプリケーション呼び出しはエラー コード E_SCRIPT_NOT_IN_FONTで失敗します。

フォールバック フォントを割り当てる

フォント フォールバックが必要であると判断したら、アプリケーションでフォールバック フォントを割り当てる必要があります。 アプリケーションでは、次の手法を試すことができます。

  • 1 回の呼び出しで許容される戻り値が返されるまで、フォント リスト内の各フォントに 対して ScriptShape を呼び出します。
  • フォントが成功しないと判断されるまで、リスト内の各フォントで ScriptShape を呼び出します。 エラー コードが常にE_SCRIPT_NOT_IN_FONT場合、複雑なスクリプトはフォントでサポートされません。 使用できるグリフがないことを示すグラフィック シンボルをレンダリングするか、スクリプトを未定義 (スクリプト処理なし) として再指定して、もう一度開始します。 スクリプトを未定義として設定するには、SCRIPT_ANALYSIS構造体の eScript メンバーを SCRIPT_UNDEFINED に設定します。
  • フォントが成功しないと判断されるまで、リスト内の各フォントで ScriptShape を呼び出します。 エラー コードで、一部の文字が不足しているグリフにマッピングされていることを示している場合は、文字列をより小さな範囲に分割します。 サブ範囲に異なるフォントを割り当てて、より多くの文字をレンダリングできます。

グリフ情報を生成する

アプリケーションが ScriptShape の呼び出しに成功するフォントを割り当てると、ScriptPlace を呼び出して、ScriptShape の出力からグリフの高度な幅と 2 次元オフセット情報を生成できます。 フォントは、これらの呼び出しで成功するはずです。 ScriptShape 呼び出しで成功した後の ScriptPlace の呼び出しでフォントが失敗した場合、フォントが壊れていることを示します。

Uniscribe の使用