(57)【特許請求の範囲】
【請求項１】
フォント用のフォント実行命令の量を低減させるためにコンピューティングデバイスによって実行される方法であって、
前記フォント実行命令内の共通の命令セットであって、前記フォント実行命令内の少なくとも２つの位置に現れる共通の命令セットを識別するステップと、
前記共通の命令セットのための関数を前記フォント実行命令に挿入するステップと、
前記フォント実行命令内の前記共通の命令セットを前記関数に対する呼び出しで置換すると、所望のファイルサイズの減少閾値が満たされる場合に、前記共通の命令セットを前記関数に対する呼び出しで置換するステップと
を含む、方法。
【請求項２】
前記識別された共通の命令セットを使用して、第２のフォントのフォント実行命令内の共通の命令セットを識別するステップを含む、請求項１に記載の方法。
【請求項３】
前記所望のファイルサイズの減少閾値を満たす場合に、前記共通の命令セットのための前記関数を定義するステップ
を備える、請求項１に記載の方法。
【請求項４】
前記共通の命令セットを前記関数に対する呼び出しで置換するステップは、前記所望のファイルサイズの減少閾値が満たされ、かつ前記フォント実行命令のサイズを減少させるために用いられる前記コンピューティングデバイスのリソースのオーバーヘッドコストが所望の閾値を満たす場合に、前記共通の命令セットを前記関数に対する呼び出しで置換することを含む、請求項１に記載の方法。
【請求項５】
前記関数を、前記共通の命令セットのためのカスタム命令として定義するステップを含む、請求項１に記載の方法。
【請求項６】
前記共通の命令セットの数が、置換に使用するための利用可能なカスタム関数の数より多い場合、第１の共通命令のセットを第２の共通命令のセットよりも圧縮について優先させるステップを含む、請求項１に記載の方法。
【請求項７】
第１の共通の命令セットについて第１の関数を定義するステップであって、前記第１の共通の命令セットが、前記フォント実行命令内で識別される第２の共通の命令セットの内部にネストされる、ステップと、
前記第２の共通の命令セットについて第２の関数を定義するステップと、
前記フォント実行命令内の前記第１の共通の命令セットを、前記定義された第１の関数に対する呼び出しで置換するステップと、
前記フォント実行命令内の前記第２の共通の命令セットを、前記定義された第２の関数に対する呼び出しで置換するステップと
を含む、請求項１に記載の方法。
【請求項８】
フォント用のフォント実行命令の量を低減させるシステムであって、
プロセッサと、
前記プロセッサによって実行可能な命令を格納するメモリと、
前記フォント実行命令内の共通の命令セットであって、前記フォント実行命令内の少なくとも２つの位置に現れる共通の命令セットを識別し、前記共通の命令セットのための関数を前記フォント実行命令に挿入するように構成される、共通命令識別コンポーネントと、
前記フォント実行命令内の前記共通の命令セットを前記関数に対する呼び出しで置換すると、所望のファイルサイズの減少閾値が満たされる場合に、前記フォント実行命令内の前記共通の命令セットを、前記関数に対する呼び出しで置換するように構成される、命令置換コンポーネントと
を備える、システム。
【請求項９】
前記所望のファイルサイズの減少閾値を満たすかどうかを判断するように構成される、減少決定コンポーネントと、
前記共通の命令セットの数が、置換に使用するための利用可能なカスタム関数の数より大きいかどうかに少なくとも部分的に基づいて、前記フォント実行命令内の前記共通の命令のセットに優先順位をつけるように構成される、共通命令優先順位付けコンポーネントと、
前記共通の命令セットについて前記関数を定義するように構成された共通命令定義コンポーネントと
のうち少なくとも１つを備える、請求項８に記載のシステム。
【請求項１０】
コンピューティングデバイスに、フォント用のフォント実行命令の量を低減させるためにコンピューティングデバイスによって実行される方法を実行させるコンピュータプログラムであって、前記方法は、
前記フォント実行命令内の共通の命令セットであって、前記フォント実行命令内の少なくとも２つの位置に現れる共通の命令セットを識別するステップと、
前記共通の命令セットのための関数を前記フォント実行命令に挿入するステップと、
前記フォント実行命令内の前記共通の命令セットを前記関数に対する呼び出しで置換すると、所望のファイルサイズの減少閾値が満たされる場合に、前記フォント実行命令内の前記共通の命令セットを前記関数に対する呼び出しで置換するステップと
を含む、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フォント命令（font  instruction）を低減させることに関する。
【背景技術】
【０００２】
コンピューティング環境において、コンピュータのフォントは、特定の書体の文字のスタイル（例えば英数字文字）を備えることができる。コンピュータのフォントは典型的に、その書体のスタイルを保持しつつ、大きな又は小さなサイズにスケーリングされ、太字及び／又は斜体にされることができる。フォントの特性は、ストロークの幅（太さ）、文字の斜度若しくは角度、及び文字の幅（例えばさらに高さも）を備えることができる。フォントをディスプレイ上にレンダリングする（例えばラスタリングする）ためのメトリクスは、フォントのそれぞれの文字に対する個々のグリフを記述するメタデータを備えることがある。コンピュータのフォントは、プログラム（例えば１つ又は複数のフォントファイル）を備えるか、あるいはこのプログラム内に構成されることがあり、これらのプログラムは、プログラミング言語を用いて、ユーザに表示するために、それぞれのグリフがラスタリングコンポーネントによってどのようにレンダリングされるかを記述することができる。
【発明の概要】
【０００３】
この「発明の概要」の記載は、以下で「発明を実施するための形態」においてさらに説明される概念の選択を簡略化した形で紹介するために提供される。この「発明の概要」の記載は、特許請求に係る主題の主要な要因又は本質的特徴を特定するようには意図されておらず、また特許請求に係る主題の範囲を限定するのに用いられるようにも意図されていない。
【０００４】
一部のコンピュータのフォントは、文字のスケーリングされたアウトラインを調整して、ターゲットデバイス上での所望の出力を達成する機構を備えることができる。アセンブリ言語と類似するインタプリタ型言語に基づく操作コード（ｏｐ−ｃｏｄｅ）は、多くのフォントによって使用され、ラスタライザによって解釈されて、命令又はヒントとして知られる調整を達成することができる。フォントには、個々のグリフに関連付けられた命令、並びにテキストのサイズ及び／又はフォント自体に適用されるグローバル命令が存在する。
【０００５】
一部のコンピュータフォントは、テーブルの集合を備え、この場合、例えばそれぞれのテーブルは一意のタグによって識別される。フォントのグリフをグリフテーブルにおいて定義することができる。例として、グリフ定義は、フォントのそれぞれのグリフ及びフォントのアウトラインの数値的表現を用いて実行される命令を備えることができる。それぞれのフォントサイズのために実行される一組のグローバル命令は、例えば事前プログラム（Pre-program）に含まれ、これは制御値プログラム（prep）テーブルとも呼ばれる。フォントのために実行される別の組のグローバル命令は、例えばフォントプログラム（ｆｐｇｍ）内に備えられる。これらの命令の全てが、任意の特定のフォントに関連付けられた１つ又は複数のファイルのサイズを著しく増大させることがある。
【０００６】
したがって、フォントの１つ又は複数のファイルに備えられるフォント実行命令の量を低減するための１つ又は複数の技術及び／又はシステムを開示する。例えばフォント用の１つ又は複数のテーブル内に含まれる命令の合計の量を、元のフォントに対するこれらの命令の機能的等価性を維持したまま、低減することができる。フォント実行命令は、例えばフォント内のいくつかの場所において同じである命令のセットを備えることができる。したがって、これらの「共通の」命令（例えば共通の命令セット）の一部は単に、共通の命令セットについて定義された関数に対するいくつかの（例えば１又は２つ等）のライン関数呼び出しで置き換えられる。例えば共通の命令セットを関数呼び出しで置き換えることにより、圧縮されていないフォントの機能的等価性は保持しつつ、フォント実行命令を圧縮することができる。
【０００７】
フォント用のフォント実行命令を低減する一実施形態において、１つ又は複数の共通の命令セットがフォント実行命令内で識別される。さらに、識別された共通の命令セットのための関数をフォント内で定義することができる。加えて、フォント実行命令内において、識別された共通の命令セットを、対応する定義された関数への呼び出しで置換することができ、これによりフォント実行命令のセットを低減することができる。
【０００８】
前述及び関連する目的の達成のために、以下の説明及び添付の図面は、特定の例示的な態様及び実装について記述する。これらは、１つ又は複数の態様が用いられる様々な方法の幾つかのみを示している。本開示の他の態様、利点及び新規な特徴は、以下の詳細な説明の記載を、添付の図面とともに検討することにより明らかになるであろう。
【図面の簡単な説明】
【０００９】
【図１】フォント用の実行命令を低減する例示的な方法を示すフロー図である。
【図２】本明細書で説明される１つ又は複数の技術の１つ又は複数の部分を実装する、例示的な実施形態を示すフロー図である。
【図３】フォント実行命令の例示的な実施形態を示す図である。
【図４】本明細書で説明される１つ又は複数の技術の１つ又は複数の部分を実装する、例示的な実施形態を示すフロー図である。
【図５】本明細書で説明される１つ又は複数の技術の１つ又は複数の部分を実装する、例示的な実施形態を示す図である。
【図６】フォント用の実行命令を低減する例示的なシステムを示すコンポーネント図である。
【図７】本明細書で説明される１つ又は複数のシステムを実装する、例示的な実施形態を示すコンポーネント図である。
【図８】本明細書で説明される条件の１つ又は複数を具現化するように構成されたプロセッサ実行可能命令を備える、例示的なコンピュータ読取可能媒体の例を示す図である。
【図９】本明細書で説明される条件の１つ又は複数を実装する例示的なコンピューティング環境を示す図である。
【発明を実施するための形態】
【００１０】
以下に、特許請求に係る主題を、図面を参照しながら説明する。図面では一般に、全体を通じて同様の参照番号を使用して同様の要素を示す。以下の記載では、説明の目的で、特許請求に係る主題の完全な理解を提供するために様々な具体的な詳細を説明する。しかしながら、特許請求に係る主題はこれらの具体的な詳細を用いることなく実施できることは明白である。他の例では、特許請求に係る主題の説明を容易にするために、構造及びデバイスをブロック図の形で示している。
【００１１】
本明細書で提供されるように、例えばフォント用の１つ又は複数のテーブルに含まれるフォント命令実行を低減すること（例えばまとめること）によって、低減前のフォントと機能的な等価性を維持しつつ、フォントのファイルサイズを低減させる方法が考案される。例として、フォントは、命令又は「ヒント」を備える、アセンブリ言語と類似するインタプリタ型言語に基づく「操作コード」を使用する。この操作コード言語は、ターゲットデバイス上にフォントをレンダリングするときに、ラスタライザによって解釈されることができる。フォントはテーブルの集合を備え、このテーブルはそれぞれフォント命令（例えばグリフ命令及びグローバル命令）を備える。この例において、（例えばフォントテーブル内の）命令の合計の量は低減される。
【００１２】
図１は、フォント用のフォント実行命令を低減する例示的な方法１００を示すフロー図である。例示的な方法１００は、１０２において開始し、１０４においてフォント実行命令内の共通の命令のセットを識別することを含む。例えば共通の命令のセットは、フォント実行命令内の１つより多い位置で発見される同じパターンの命令を備えることができる。
【００１３】
１０６において、共通の命令のセットに対する関数が定義される。例えばフォント実行命令に使用される言語が、フォント実行命令内で呼び出すことができる、命令のセットの関数化（functionalization）を提供することができる。１０８において、フォント実行命令内の共通の命令のセットが、定義された関数に対する呼び出しで置換される。例えばフォント実行命令内のそれぞれの共通の命令セットの位置において、共通の命令セットを除去し、その位置に、定義された関数に対する呼び出しを挿入することができる。この方法では、例えば複数の位置にある命令のセットを関数に対する呼び出しで置換することによって、フォント実行命令を低減することができる。これを繰り返し実行することにより、他の共通の命令のセットを、定義された関数へのそれぞれの呼び出しで単に置換し、フォント実行命令をさらに低減することができることを理解されたい。
【００１４】
図２は、本明細書で説明される１つ又は複数の技術の１つ又は複数の部分を実装することができる例示的実施形態２００を示すフロー図である。２０２において、フォント実行命令をスキャンし、２０４において、共通の命令のセットのうちの１つ又は複数を識別することができる。一実施形態において、１つの共通の命令のセットは、フォント実行命令内の少なくとも２つの位置で識別される、１つ又は複数の共通フォント実行命令（例えば共通グリフ実行命令）のセットを備えることができる。例として、１つより多くの位置で見つかる命令について、事前プログラム（prep）テーブルをスキャンすることができる。この場合、命令のセットは、ターゲットデバイス上でフォントを実行するのに使用されるコードの１つ又は複数のラインを備える。
【００１５】
例示として、図３は、フォント実行命令の例示的な実施形態３００を示す図である。この例３００において、フォント実行命令は、特に３つのグリフ３０２、３０４、３０６のグリフ命令の部分を備える。さらに、グリフ１８  ３０２は、命令のセット３０８を備え、この命令セットは、グリフ１６７  ３０４の３１０と、グリフ５２０  ３０６の３１２においても見つかる。同じ命令セット３０８、３１０及び３１２は、フォント実行命令についての共通の命令セットを備える。グリフ３０２、３０４、３０６に対するそれぞれのフォント実行命令は、それぞれ３０８、３１０、３１２より多くのセットを備えることを認識されたい。すなわち、簡潔性及び説明等の目的で、グリフ３０２、３０４、３０６に対して共通又は重複するセット３０８、３１０、３１２のみが図示されている（例えば、グリフ２０３、３０４、３０６に対するそれぞれのフォント実行命令の追加の部分は図示されていない。）
図２に戻ると、２０６において、１つ又は複数の共通の命令セットの圧縮（例えば共通の命令セットを関数で置換すること）の結果を評価して、この圧縮により、圧縮を実行するのに過度にコンピュータリソースの使用を課すことなく、フォントファイルサイズにおける所望の改善が得られたかどうかどうかを判断することができる。一実施形態において、圧縮の評価は、フォント実行命令内の共通の命令セットを圧縮するときに、所望のファイルサイズの閾値を満たすか判断することを含むことができる。
【００１６】
２０８において、所望のファイルサイズの減少があるかどうか（例えば減少閾値を満たすかどうか）の判断は、例えばフォントの実行命令を減少させることによって、ファイルサイズの実質的な減少（net  reduction）があるかどうかを判断することを含む。減少閾値を満たさない場合（例えば実質的な減少がない場合）（２０８において「いいえ」の場合）、２１２において、フォント実行命令に対する圧縮は実行されない。減少閾値を満たす場合（２０８において「はい」の場合）、２１０において、圧縮を実行するためのコンピューティングリソースコストが決定される。
【００１７】
一実施形態において、所望のファイルサイズの減少閾値を満たすかどうかの判断は、フォント実行命令のサイズを減少させるための性能コストを識別することを含むことができる。この実施形態において、性能コスト（例えばプロセッサ使用、電力消費、時間及び／又は実際のコスト等のようなコンピューティングリソースコスト）を、所望の性能コスト閾値（例えば圧縮の改善が性能コストに勝る場合など）に対して比較することができる。
【００１８】
性能オーバヘッドコストが所望の閾値を満たさない場合（２１０において「いいえ」の場合）、２１２において圧縮は実行されない。性能オーバヘッドコストが所望の閾値を満たす場合（２１０において「はい」）の場合）、２１４において、１つ又は複数の共通の命令セットの圧縮を実行することができる。例えば、フォント実行命令内の共通の命令セットの１つ又は複数を所望の関数によって置換し、フォント実行命令のサイズを減少させることができる。
【００１９】
一態様において、フォントは、オペレーションスタックから値を除去することなど、１つ又は複数の関数を定義する１つ又は複数のオペレーションを備える命令セットを備えるか、むしろこの命令セットによって構成されることがある。例として、ＴｒｕｅＴｙｐｅフォントは、少なくとも２つのタイプの関数、すなわち関数定義（ＦＤＥＦ：function  definition）と命令定義（ＩＤＥＦ：instruction  definition）を提供する。この例において、このＦＤＥＦは標準の関数定義であり、ＦＤＥＦにより関数ブロックの開始部分において指示される。一方、ＩＤＥＦはカスタム命令定義であり、ＩＤＥＦによりカスタム命令ブロックの開始部分において指示される。さらに、これらのタイプの関数は双方ともＥＮＤＦで終了する。説明される例として、呼び出されるとき、ＦＤＥＦはオペレーションスタックから、一意の関数番号として使用される値を除去し、ＩＤＥＦはそのスタックから、カスタム命令として使用される値を除去する。加えて、この例において、標準の関数は、スタックからの関数番号をとる「ＣＡＬＬ」命令を使用して呼び出され、カスタム命令は、単にこれらの定義された操作コードを使用して実行される。
【００２０】
図４は、本明細書で説明される１つ又は複数の技術の１つ又は複数の部分を実施することができる例示的な実施形態４００を示すフロー図である。４０２において、共通の命令セット４５０の数が、フォント実行命令の置換閾値よりも大きいかどうかを判断する。例えば何らかのフォントタイプ（例えばＴｒｕｅＴｙｐｅフォント）は、限られた数の置換関数を提供する。例として、ＴｒｕｅＴｙｐｅフォントは典型的に、フォントについて限られた数のカスタム関数（ＩＤＥＦ）を提供する。この例において、置換に使用するための利用可能なカスタム関数より多くの共通の命令セットが存在する場合、置換閾値を超える。
【００２１】
一実施形態において、カスタム命令（ＩＤＥＦ）に対する呼び出しは、コンピュータオーバヘッドが少なく、標準関数（例えばＥＤＥＦ）に対する呼び出しよりも多くの命令が圧縮されることになるので、標準関数を使用する前に、カスタム関数を共通の命令セットの置換に使用することができる。例として、ＩＤＥＦは、１つの命令のみを実行すること（例えば、「カスタム命令１２を実行すること」）を備え、一方、ＥＤＥＦは２つの命令を実行すること（例えば、「１２をスタックにプッシュし、トップスタックエントリによって識別される関数にジャンプすること」）を備える。したがって、この実施形態では、カスタム関数は、（例えばカスタム関数に対する）置換閾値を満たすまで標準関数よりも優先され、次いで標準関数を、例えば残りの全ての共通の命令セットに使用することができる。
【００２２】
一実施形態において、カスタム命令の使用は、共通の命令セットに対して無効にされることがある。例えばフォントのプログラマ／プロバイダは、カスタム命令（例えばＩＤＥＦ）を他の目的で使用することができる。例として、ＩＤＥＦはしばしば、フォントの将来のバージョン又は更新など、将来の命令に対するパッチとして使用される。この実施形態において、例えばカスタム命令の使用を無効にすることにより、フォントプログラムとの潜在的な衝突及び／又は問題を軽減することができる。一実施形態において、標準関数（例えばＦＤＥＦ）の使用を無効にして、例えばカスタム命令のみを共通の命令セットに使用することができる。
【００２３】
図４の４０４において、共通の命令セットに対して置換の優先順位をつける。一実施形態において、第１の共通の命令セットを、例えば共通の命令セット４５０の閾値数が満たされる場合（４０２において「はい」の場合）、圧縮について第２の共通の命令セットよりも優先させることができる、一実施形態において、優先順位付けは、フォント実行命令内において第１の共通の命令セットが、第２の共通の命令セット（がフォント実行命令内で見つかる）よりも多くの位置で見つかる場合、第１の共通の命令セットを第２の共通の命令セットよりも優先させることを含むことができる。一実施形態において、優先順位付けは、より多くの数のフォント実行命令を有する第１の共通の命令セットを、より少ないフォント実行命令を有する第２の共通の命令セットよりも優先させることを含むことができる。
【００２４】
４０６において、共通の命令セットについて、例えばそれぞれの識別された共通の命令セットについて関数を作成することができる。説明上の例として、図５は、本明細書で説明される１つ又は複数の技術の１つ又は複数の部分を実施することができる例示的な実施形態５００を示す図である。共通の命令セット５０２は、フォントプログラム内の１つより多くの位置において識別された、あるいは複数のグリフに対する個々の実行命令（例えば図３のグリフ３０２、３０４、３０６に対する命令）において識別されたフォント実行命令を備える。さらに、この例示的な実施形態５００では、共通の命令セット５０２について関数５０４を作成することができる。この例において、作成された関数５０４は、識別された共通の命令セット５０２からのフォント実行命令５１６を備える。
【００２５】
図４に戻ると、４０８において、関数を定義することは、フォント内の共通の命令セット、又はフォントに対する事前プログラムを関数化することを備えることができる。作成される関数は、ｆｐｇｍテーブルなどのフォント制御プログラムで定義される。例えば関数を、フォントプログラム（ｆｐｇｍ）テーブル、及び／又はフォントに対する事前プログラム（ｐｒｅｐ）で定義する（例えば関数化する）ことができる。さらに、一実施形態において、定義された関数は、フォントプログラムにおける１つの位置のみにおいて関数化することができ、これにより例えば、共通の命令セットの関数を圧縮することができる。一実施形態において、共通の命令セットについて関数を定義することは、フォントプログラムのフォントテーブルにおいて、共通の命令セットを備える関数を作成することを備えることができる。
【００２６】
一実施形態において、関数を定義することは、共通の命令セットに対するカスタム命令を定義することを含むことができる。上述のように、カスタム関数は、カスタム命令定義関数を備え、この関数は、フォント用の制御プログラム（例えばｆｐｇｍ及び／又は事前プログラム）によって定義される。例として、カスタム命令定義関数は、フォントの将来のバージョンのための機能を追加するなど、フォントをカスタマイズするためのフォントプラットフォームに提供されることがある。この例において、未定義の操作コード（例えば共通の命令セット）を使用して、フォントプログラムテーブルなどにおいてカスタム命令定義関数（例えばＩＤＥＦ）を定義することができる。
【００２７】
例示的な実施形態４００では、４１０において、定義された関数に対する呼び出しを、フォント実行命令に挿入することができる。例えば、フォント実行関数内で共通の命令セットが識別される個々の位置において、共通の命令セットを、フォントプログラムファイルで定義された関数に対する呼び出しで置換することができる。一実施形態において、フォント実行命令内の共通の命令セットを、定義されたカスタム関数と置換することができる。さらに、それぞれの定義された関数又は定義されたカスタム命令が、例えばフォント実行命令内で識別された、対応する共通の命令セットに取って代わることがあり、それによりフォント実行命令のサイズを減少させることができる。
【００２８】
説明上の例として、図５において、圧縮されたフォント実行命令５０６は、フォントのグリフ５０８、５１０、５１２に対するそれぞれの実行命令を備え、共通の命令セット５０２が、定義された関数５０４に対する呼び出し５１４と置換されている。さらに、図３の３００の圧縮されていないフォント実行命令と比較すると、実行命令の行は、２５行（図３の３００）から、例えば定義済み関数（例えばフォントプログラムテーブル）を含め１９行（図５の５０４と５０６）に減少している。一実施形態において、例えば圧縮比率は、共通の命令セットが更なる（例えば３つより多い）位置で見つかるときに劇的に増加し、及び／又は、例えばより多くの量（例えば操作コードの行）の実行命令を備える共通の命令セットについて劇的に増加する。
【００２９】
一態様において、共通の命令セットの識別情報を、１つより多くのフォントを圧縮するのに使用することができる。一実施形態において、この態様では、識別された共通の命令セットを使用して、異なるフォントについてのフォント実行命令内の共通の命令セットを識別することができる。例えば共通の命令セットの識別は、総当たりの文字検索を備えることがあり、この場合、それぞれの文字及び／又は文字のセットを選択して、フォント実行命令内の文字と比較することができる。しかしながら、この実施形態では、１つ又は複数のフォント実行命令において識別されるような、それぞれの共通の命令セットが、他のフォント内で同じセットを識別しようと試みるための基本の検索基準として使用される。
【００３０】
例えば図５の共通の命令セット５０２を、第１のフォントで識別して、第２のフォントのフォント実行命令と照合する検索基準として使用することができる。この方法では、例えばフォントについての共通の命令セットを識別する時間及び／又は計算上のリソースコストを、公知の共通の命令セットで開始することによって減少させることができる。
【００３１】
さらに、この態様における一実施形態では、共通の命令セットについて定義された関数を、１つより多いフォントに使用することができる。この実施形態では、関数（例えば標準及び／又はカスタム関数）を、１つより多いフォントに使用されるフォント制御プログラムにおいて関数化することができる。例えば共通のテーブルがフォント制御プログラムによって使用されることがあり、この場合、共通のテーブルは、対応する共通の命令セットのための１つ又は複数の定義された関数を備える。この方法では、例えば、それぞれのフォントについて定義された関数の量を減少させることによって、フォント実行命令をさらに圧縮することができる。
【００３２】
一態様において、共通の命令セットを、別の共通命令セット内にネストすることができる。一実施形態において、この態様では、第１の共通命令セットについて第１の関数を（例えばフォントプログラムテーブルで）を定義することができ、この場合、第１の共通命令セットが、フォントについてのフォント実行命令内の第２の共通命令セットの内部にネストされる。さらに、第２の共通命令セットに対して第２の関数を定義することができる。一実施形態において、第１の共通命令セットを、定義された第１の関数に対する呼び出しで置換することができ、及び／又は第２の共通命令セットを、定義された第２の関数に対する呼び出しで置換することができる。
【００３３】
例として、第２の（ネストされた）共通命令セットを、第２の定義された関数に対する第２の呼び出しで置換することができる。さらに、この例では、第１の共通命令セット（ここでは、第２の定義された関数に対する呼び出しを備える）を、第１の関数として定義することができる。加えて、第１の共通命令セットを、第１の関数（例えば第２の定義された関数に対する呼び出しさらに備える）に対する呼び出しで置換することができる。この方法では、例えば、定義された関数内の命令の量を減少させることによって、フォント実行命令をさらに圧縮することができる。
【００３４】
（例えば１つ又は複数のフォントファイルを備える）フォント実行プログラムのサイズを減少させるためのシステムも考案される。フォント実行プログラムは、設計者の所望の出力に応じたディスプレイ上へのグリフのレンダリングを提供するプログラミングコード及びプログラミングテーブルを備えることができる。他のタイプのプログラミングコードと同様に、フォント実行命令のそれぞれの行が、フォントをどのようにレンダリングするかに関する命令を備えることができる。例えば、プログラムの幾つかのエリアにおいて共通し得る同じフォント実行命令の部分を、共通の実行命令について定義された関数への呼び出しで置換することによって、フォント実行命令の数を減少させることができる。
【００３５】
図６は、フォントについての実行命令を減少させるための例示的なシステム６００を示すコンポーネント図である。コンピュータベースのプロセッサ６０２は、システムのデータを処理するように構成され、共通命令識別コンポーネント６０４に動作可能に結合される。共通命令識別コンポーネント６０４は、フォント実行命令６５０内の共通の命令セットを識別するように構成される。例えばフォント実行命令６５０は、フォントをどのようにレンダリングするかに関する（例えばラスタライザによって解釈される）プログラミングコードなどの命令を備えることができる。さらに、フォント実行命令６５０は、１つより多い位置に、例えば共通の命令セットを含む、同じ命令セットを備えることがある。この例において、共通命令識別コンポーネント６０４は、フォント実行命令をスキャンして、共通命令の１つ又は複数のセットを識別することができる。
【００３６】
例示的システム６００において、命令置換コンポーネント６０６は、プロセッサに動作可能に結合され、フォント実行命令内の識別された共通命令セットを、識別された共通命令セットについて定義された関数に対する呼び出しで置換するように構成される。例えば、１つ又は複数の識別された共通の命令セットについて、それぞれの関数を定義することができ、命令置換コンポーネント６０６は、フォント実行命令を通じてそれぞれの共通命令セットを除去し、対応する定義された関数に対する呼び出しでこれらを置換することによって、圧縮されたフォント実行命令６５２を作成することができる。この方法によると、例えば、関数呼び出しは、典型的に（共通命令セットを置換するのに使用される）対応する共通の命令セットよりもかなり小さいので、フォントの実行命令に対して使用されるコードの複数の行が減少される。
【００３７】
図７は、本明細書で説明される１つ又は複数のシステムを実装することができる例示的な実施形態７００を図示するコンポーネント図である。この例７００では、図６の拡張機能を提供しており、図６について記述した要素、コンポーネント等の説明は、簡略化のために繰り返さない。一実施形態において、共通命令識別コンポーネント６０４によってフォント実行命令７５０内で識別された共通命令セット７５４は、フォント実行命令内の複数の位置で識別される１つ又は複数の共通のフォント実行命令（例えば共通のグリフ実行命令）のセットを備えることができる。
【００３８】
例示の実施形態７００において、減少決定コンポーネント７１２は、フォント実行命令７５０内の共通の命令セット７５４を圧縮するとき、所望のファイルサイズの減少閾値が満たされるかどうかを判断するように構成される。一実施形態において、命令置換コンポーネント６０６は、所望のファイルサイズ減少閾値が満たされる場合にのみ共通の命令セット７５４を置換するように構成される。例えば減少決定コンポーネント７１２は、フォント実行命令内の１つ又は複数の共通命令セットを、対応する関数の呼び出しで置換することにより、所望の閾値量までフォントファイルが低減されると決定する場合、命令置換コンポーネントは、置換を実行することができ、そうでない場合、例えば圧縮（例えば呼び出しによる置換）は起こらない。
【００３９】
例示の実施形態７００において、共通命令優先順位付けコンポーネント７１４は、フォントのついての命令置換の閾値数に少なくとも部分的に基づいて、フォント実行命令７５０内の置換について、１つ又は複数の命令セット７５４に対する優先順位をつけるように構成される。例えばフォントタイプが、フォント実行命令内の命令を置換するのに使用することができる関数の数を制限することがある。この例では、共通命令優先順位付けコンポーネント７１４を、共通の命令セットを関数化して、共通の命令セットがフォント実行命令内に現れる回数及び／又は共通命令セットの長さに基づいて、フォント実行命令内で置換することができる。例えば、他の共通命令セット内により頻繁に現れるか、又はより長い共通の命令セットは、一般に、より大きな圧縮につながる。
【００４０】
例示の実施形態７００において、共通命令定義コンポーネント７１０は、共通の命令セット７５４に対する関数を定義するように構成される。一実施形態において、定義された関数は、標準の関数（例えばＴｒｕｅＴｙｐｅフォントに対するＦＤＥＦ関数）及び／又はカスタム命令関数（例えばＴｒｕｅＴｙｐｅフォントに対するＩＤＥＦ関数）を備えることができる。例えば、共通命令定義コンポーネント７１０は、識別された共通命令セットのための関数を作成し、該関数をフォント実行命令（例えば、フォントプログラム（ｆｐｇｍ）テーブル）で定義することができる。この例において、１つ又は複数の定義された関数を使用して、対応する共通命令セットを置換することができ、その結果、圧縮されたフォント実行命令７５２を得ることができる。
【００４１】
さらに別の実施形態は、本明細書で提示される技術の１つ又は複数を実装するように構成されたプログラム実行可能命令を備えるコンピュータ読取可能媒体に関する。これらの方法で導出される例示的なコンピュータ読取可能媒体が図８に図示されている。図８において、実装８００は、コンピュータ読取可能媒体８０８（例えばＣＤ−Ｒ、ＤＶＤ−Ｒ、又は円盤状のハードディスクドライブ）を備え、このコンピュータ読取可能媒体８０８上にコンピュータ読取可能データ８０６がエンコードされる。このコンピュータ読取可能データ８０６は、本明細書で説明される原理の１つ又は複数の従って動作するように構成された１組のコンピュータ命令８０４を備える。そのような一実施形態８０２において、プロセッサ実行可能命令８０４は、例えば図１の例示的な方法１００の少なくとも一部などの方法を実行するように構成される。そのような別の実施形態において、プロセッサ実行可能命令８０４は、例えば図６の例示的なシステム６００の少なくとも一部などのシステムを実装するように構成される。本明細書で提示される技術に従って動作するように構成される、多くのこのようなコンピュータ読取可能媒体が当業者によって考案されるであろう。
【００４２】
特許請求に係る主題を、構造的特徴及び／又は方法的動作に特有の言語で説明してきたが、特許請求の範囲によって定義される本発明の主題は、必ずしも上述の具体的な特徴及び動作に限定されない。むしろ、上述の具体的な特徴及び動作は、特許請求の範囲を実装する際の例示形式として開示されている。
【００４３】
本出願において使用されるとき、「コンポーネント」、「モジュール」、「システム」、「インタフェース」等という用語は、一般に、ハードウェア、ハードウェアとソフトウェアの組み合わせ、ソフトウェア又は実行中のソフトウェアのいずれかのコンピュータ関連のエンティティを指すように意図される。例えばコンポーネントは、これらに限られないが、プロセッサで実行中のプロセス、プロセッサ、オブジェクト、実行ファイル、実行のスレッド、プログラム、及び／又はコンピュータなどとすることができる。例として、コントローラ上で実行中のアプリケーションと、コントローラとの双方をコンポーネントとすることができる。１つ又は複数のコンポーネントが、１つのプロセス内及び又は実行スレッド内に存在してもよく、１つのコンポーネントを、１つのコンピュータにローカルに配置してもよく、及び／又は２つ若しくはそれ以上のコンピュータ間で分散させてもよい。
【００４４】
さらに、特許請求に係る主題を、ソフトウェア、ファームウェア、ハードウェア、又はこれらの任意の組み合わせを生成して、特許請求される主題を実装するようにコンピュータを制御する、標準のプログラミング及び／又はエンジニアリング技術を使用して方法、装置又は製品として実装することができる。本明細書で使用されるとき「製品」という用語は、任意のコンピュータ読取可能デバイス、担体又は媒体からアクセス可能なコンピュータプログラムを含むように意図される。当然、当業者には、特許請求に係る主題の範囲又は精神から逸脱することなく、多くの修正をこのような構成に対して行うことができることが認識されよう。
【００４５】
図９及び以下の記述は、本明細書で説明された条件の１つ又は複数の実施形態を実装するのに適切なコンピューティング環境の簡潔で一般的な説明である。図９の動作環境は、適切な動作環境の単なる一例に過ぎず、動作環境の使用又は機能の範囲に関していかなる限定をも示唆するようにも意図されていない。例示的なコンピューティングデバイスの例には、限定ではないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルド若しくはラップトップデバイス、モバイルデバイス（モバイルフォン、パーソナルデジタルアシスタンス（ＰＤＡ）、メディアプレイヤ等）、マルチプロセッサシステム、家庭用電化製品、ミニコンピュータ、メインフレームコンピュータ、及び上記のシステム若しくはデバイスのいずれかを含む分散コンピューティング環境などが含まれる。
【００４６】
必須ではないが、諸実施形態は、１つ又は複数のコンピューティングデバイスによって実行される「コンピュータ読取可能命令」の一般的なコンテキストで説明される。コンピュータ読取可能命令は、コンピュータ読取可能媒体（下述）により分散させることができる。コンピュータ読取可能命令を、関数、オブジェクト、アプリケーションプログラミングインタフェース（ＡＰＩ）及びデータ構造など、特定のタスクを実行し、特定の抽象データ型を実装するプログラムモジュールとして実装することができる。典型的に、コンピュータ読取可能命令の機能を、様々な環境における要求に応じて組み合わせることができ、又は分散させることができる。
【００４７】
図９は、システム９００の例を図示しており、システム９００は、本明細書で提供される１つ又は複数の実施形態を実装するように構成されたコンピューティングデバイス９１２を備える。一構成において、コンピューティングデバイス９１２は、少なくとも１つの処理ユニット９１６とメモリ９１８とを含む。コンピューティングデバイスの正確な構成及びタイプに応じて、メモリ９１８は、揮発性（例えばＲＡＭなど）、非揮発性（例えばＲＯＭ、フラッシュメモリなど）、又はこれらの２つの任意の組み合わせとすることができる。この構成は、図９では破線９１４によって図示されている。
【００４８】
他の実施形態において、デバイス９１２は、追加の特徴及び／又は機能を含むことができる。例えば、デバイス９１２は、限定ではないが磁気記憶装置及び光記憶装置等を含め、追加の記憶装置（例えば取外し可能及び／又は取外し不可能）を含むこともできる。このような追加の記憶装置は、図９では記憶装置９２０によって図示されている。一実施形態において、本明細書で提供される１つ又は複数の実施形態を実装するコンピュータ読取可能命令は、記憶装置９２０内にあってよい。記憶装置９２０は、オペレーティングシステム及びアプリケーションプログラム等を実装する他のコンピュータ読取可能命令を記憶してもよい。コンピュータ読取可能命令を、例えば処理ユニット９１６による実行のためにメモリ９１８にロードすることができる。
【００４９】
本明細書で使用されるとき「コンピュータ読取可能媒体」という用語は、コンピュータ記憶媒体を含む。コンピュータ記憶媒体は、コンピュータ読取可能命令又は他のデータなどの情報を記憶するための任意の方法又は技術で実装される、揮発性及び非揮発性、取外し可能及び取外し不可能な媒体を含む。メモリ９１８及び記憶装置９２０は、コンピュータ記憶媒体の例である。コンピュータ記憶媒体には、限定ではないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ若しくは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）若しくは他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置若しくは他の磁気記憶装置、又は所望の情報を格納するのに使用することができ、デバイス９１２によってアクセス可能な任意の他の媒体が含まれる。いずれかのそのようなコンピュータ記憶媒体を、デバイス９１２の一部とすることができる。
【００５０】
デバイス９１２は、該デバイス９１２が他のデバイスと通信できるようにする通信接続９２６も含むことができる。通信接続９２６には、限定ではないが、モデム、ネットワークインタフェースカード（ＮＩＣ）、内蔵型ネットワークインタフェース、無線送受信機、赤外線ポート、ＵＳＢ接続、又はコンピューティングデバイス９１２を他のコンピューティングデバイスに接続するための他のインタフェースが含まれる。通信接続９２６は、有線接続又は無線接続を含むことができる。通信接続９２６は、通信媒体を送信及び／又は受信することができる。
【００５１】
「コンピュータ読取可能媒体」という用語は、通信媒体を含むことがある。通信媒体は、典型的に、コンピュータ読取可能命令又は他のデータを、搬送波又は他の伝送機構など、「変調データ信号」に具現化し、任意の情報伝達媒体を含む。「変調データ信号」という用語は、情報を信号にエンコードするような手法により設定又は変更される特性の１つ又は複数を有する信号を含む。
【００５２】
デバイス９１２は、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイス、赤外線カメラ、ビデオ入力デバイス及び／又は他の入力デバイスなどの入力デバイス９２４を含むことができる。１つ又は複数のディスプレイ、スピーカ、プリンタ及び／又は任意の他の出力デバイスなどの出力デバイス９２２もデバイス９１２に含まれる。入力デバイス９２４及び出力デバイス９２２を、有線接続、無線接続又はこれらの任意の組み合わせを介してデバイス９１２に接続することができる。一実施形態において、別のコンピューティングデバイスの入力デバイス又は出力デバイスを、コンピューティングデバイス９１２の入力デバイス９１２４又は出力デバイス９２２として使用してもよい。
【００５３】
コンピューティングデバイス９１２のコンポーネントを、バスなどの様々な相互接続によって接続することができる。そのような相互接続は、ＰＣＩエクスプレスなどのＰＣＩ、ユニバーサルシリアルバス（ＵＳＢ）、ファイアワイヤ（ＩＥＥＥ１３９４）、光バス構造などを含むことができる。別の実施形態では、コンピューティングデバイス９１２のコンポーネントを、ネットワークによって相互接続することができる。例えば、メモリ９１８を、ネットワークによって相互接続された異なる物理的な位置に配置された複数の物理的なメモリユニットで構成することができる。
【００５４】
当業者により、コンピュータ読取可能命令を格納するのに使用される記憶デバイスをネットワークにわたって分散させることが実現されるであろう。例えば、ネットワーク９２８を介してアクセス可能なコンピューティングデバイス９３０は、本明細書で提供される１つ又は複数の実施形態を実装するコンピュータ読取可能命令を格納することができる。コンピューティングデバイス９１２は、コンピューティングデバイス９３０にアクセスして、コンピュータ読取可能命令の一部又は全てを実行用にダウンロードすることができる。あるいは、コンピューティングデバイス９１２は、コンピュータ読取可能命令の一部を必要に応じてダウンロードしてもよく、一部の命令をコンピューティングデバイス９１２において実行して他の命令をコンピューティングデバイス９３０で実行してもよい。
【００５５】
諸実施形態の様々なオペレーションを本明細書で提供した。一実施形態において、説明されたオペレーションの１つ又は複数が、１つ又は複数のコンピュータ読取可能媒体上に格納されるコンピュータ読取可能命令を構成することができ、そのようなコンピュータ読取可能命令は、コンピューティングデバイスによって実行されると、該コンピューティングデバイスに上述のようなオペレーションを実行させる。これらのオペレーションの一部又は全ての順序は、これらの動作が必ずその順序に従うことを暗示するように解釈されるべきではない。代替的な順序が、本説明の利益を享受した当業者によって認識されよう。さらに、本明細書で説明される各実施形態において必ずしも全てのオペレーションが提示される必要はない。
【００５６】
さらに、本明細書において「例示」という言葉は、例、実施例等として機能することを意味する。本明細書で「例示」として説明される任意の態様又は設計は、必ずしも他の態様又は設計に対して有利なものとして解釈されるべきではない。むしろ、「例示」という言葉は、概念を具体的なやり方で提示することが意図されている。本明細書で使用されるとき、「又は（若しくは、あるいは）」という用語は、排他的な「又は」ではなく、包括的な「又は」を意味するように意図されている。すなわち、特段に指定されていない限り、又はコンテキストから明らかでない限り、「ＸはＡ又はＢを用いる」という用例は、自然な包括的順列のいずれかを意味するように意図される。すなわち、ＸがＡを用いる場合、ＸがＢを用いる場合、ＸがＡとＢの双方を用いる場合、これらの例のいずれかの下において「ＸがＡ又はＢを用いる」という用例は満たされる。さらに、Ａ及びＢの少なくとも１つ等という用例は、Ａ又はＢを意味することもあり、ＡとＢの双方を意味することもある。さらに、本明細書及び添付の特許請求の範囲で使用されるとき「１つ」又は「或る」という冠詞は、単数を指示するような特段の指定がないか、あるいはコンテキストから明らかでない限り、一般に「１つ又は複数」を意味するように解釈してもよい。
【００５７】
また、本開示は１つ又は複数の実施形態に関して示され、説明されているが、この発明の詳細な説明及び添付の図面を読み、理解することに基づいて、当業者は等価な変更及び修正を行うことができるであろう。本開示は、全てのそのような修正及び変更を含んでおり、添付の特許請求の範囲によってのみ限定される。特に、上述のコンポーネント（例えば要素、リソース等）によって実行される様々な機能に関して、これらのコンポーネントを説明するのに使用される用語は、特段の指示がない限り、本開示の図示された例示的な実装における機能を実行する開示された構造に構造的に等価でないとしても、説明されたコンポーネントの指定された機能を実行する任意の（例えば機能的に等価な）コンポーネントに対応するように意図される。さらに、本開示の特定の特徴は、いくつかの実装の１つのみに関して説明されているが、そのような特徴を、任意の所与の又は特定の適用において望まれるか又は有利な、他の実装の１つ又は複数の他の特徴を組み合わせてもよい、さらに、発明の詳細な説明又は特許請求の範囲において使用される「含む」、「有する」、「とともに」という用語又はこれらの用語の変形の範囲に関して、これらの用語は、「備える」という用語と同様に、包括的であるように意図されている。
【図１】
0006038916.tif 000002
【図２】
0006038916.tif 000003
【図３】
0006038916.tif 000004
【図４】
0006038916.tif 000005
【図５】
0006038916.tif 000006
【図６】
0006038916.tif 000007
【図７】
0006038916.tif 000008
【図８】
0006038916.tif 000009
【図９】
0006038916.tif 000010