特許第6038916号(P6038916)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ マイクロソフト テクノロジー ライセンシング,エルエルシーの特許一覧

特許6038916フォント実行命令量の低減方法、システム及びコンピュータプログラム
<>
  • 特許6038916-フォント実行命令量の低減方法、システム及びコンピュータプログラム 図000002
  • 特許6038916-フォント実行命令量の低減方法、システム及びコンピュータプログラム 図000003
  • 特許6038916-フォント実行命令量の低減方法、システム及びコンピュータプログラム 図000004
  • 特許6038916-フォント実行命令量の低減方法、システム及びコンピュータプログラム 図000005
  • 特許6038916-フォント実行命令量の低減方法、システム及びコンピュータプログラム 図000006
  • 特許6038916-フォント実行命令量の低減方法、システム及びコンピュータプログラム 図000007
  • 特許6038916-フォント実行命令量の低減方法、システム及びコンピュータプログラム 図000008
  • 特許6038916-フォント実行命令量の低減方法、システム及びコンピュータプログラム 図000009
  • 特許6038916-フォント実行命令量の低減方法、システム及びコンピュータプログラム 図000010
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6038916
(24)【登録日】2016年11月11日
(45)【発行日】2016年12月7日
(54)【発明の名称】フォント実行命令量の低減方法、システム及びコンピュータプログラム
(51)【国際特許分類】
   G09G 5/24 20060101AFI20161128BHJP
【FI】
   G09G5/24 690
   G09G5/24 620Z
【請求項の数】10
【全頁数】17
(21)【出願番号】特願2014-523906(P2014-523906)
(86)(22)【出願日】2011年10月9日
(65)【公表番号】特表2014-527644(P2014-527644A)
(43)【公表日】2014年10月16日
(86)【国際出願番号】US2011055533
(87)【国際公開番号】WO2013019254
(87)【国際公開日】20130207
【審査請求日】2014年9月12日
(31)【優先権主張番号】13/195,232
(32)【優先日】2011年8月1日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】314015767
【氏名又は名称】マイクロソフト テクノロジー ライセンシング,エルエルシー
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100091214
【弁理士】
【氏名又は名称】大貫 進介
(72)【発明者】
【氏名】リンネルド,ポール
(72)【発明者】
【氏名】ヒッチコック,グレゴリー
【審査官】 斎藤 厚志
(56)【参考文献】
【文献】 特開2007−018220(JP,A)
【文献】 特開平06−110440(JP,A)
【文献】 特開昭63−019040(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G09G 5/24
(57)【特許請求の範囲】
【請求項1】
フォント用のフォント実行命令の量を低減させるためにコンピューティングデバイスによって実行される方法であって、
前記フォント実行命令内の共通の命令セットであって、前記フォント実行命令内の少なくとも2つの位置に現れる共通の命令セットを識別するステップと、
前記共通の命令セットのための関数を前記フォント実行命令に挿入するステップと、
前記フォント実行命令内の前記共通の命令セットを前記関数に対する呼び出しで置換すると、所望のファイルサイズの減少閾値が満たされる場合に、前記共通の命令セットを前記関数に対する呼び出しで置換するステップと
を含む、方法。
【請求項2】
前記識別された共通の命令セットを使用して、第2のフォントのフォント実行命令内の共通の命令セットを識別するステップを含む、請求項1に記載の方法。
【請求項3】
前記所望のファイルサイズの減少閾値を満たす場合に、前記共通の命令セットのための前記関数を定義するステップ
を備える、請求項1に記載の方法。
【請求項4】
前記共通の命令セットを前記関数に対する呼び出しで置換するステップは、前記所望のファイルサイズの減少閾値が満たされ、かつ前記フォント実行命令のサイズを減少させるために用いられる前記コンピューティングデバイスのリソースのオーバーヘッドコストが所望の閾値を満たす場合に、前記共通の命令セットを前記関数に対する呼び出しで置換することを含む、請求項1に記載の方法。
【請求項5】
前記関数を、前記共通の命令セットのためのカスタム命令として定義するステップを含む、請求項1に記載の方法。
【請求項6】
前記共通の命令セットの数が、置換に使用するための利用可能なカスタム関数の数より多い場合、第1の共通命令のセットを第2の共通命令のセットよりも圧縮について優先させるステップを含む、請求項1に記載の方法。
【請求項7】
第1の共通の命令セットについて第1の関数を定義するステップであって、前記第1の共通の命令セットが、前記フォント実行命令内で識別される第2の共通の命令セットの内部にネストされる、ステップと、
前記第2の共通の命令セットについて第2の関数を定義するステップと、
前記フォント実行命令内の前記第1の共通の命令セットを、前記定義された第1の関数に対する呼び出しで置換するステップと、
前記フォント実行命令内の前記第2の共通の命令セットを、前記定義された第2の関数に対する呼び出しで置換するステップと
を含む、請求項1に記載の方法。
【請求項8】
フォント用のフォント実行命令の量を低減させるシステムであって、
プロセッサと、
前記プロセッサによって実行可能な命令を格納するメモリと、
前記フォント実行命令内の共通の命令セットであって、前記フォント実行命令内の少なくとも2つの位置に現れる共通の命令セットを識別し、前記共通の命令セットのための関数を前記フォント実行命令に挿入するように構成される、共通命令識別コンポーネントと、
前記フォント実行命令内の前記共通の命令セットを前記関数に対する呼び出しで置換すると、所望のファイルサイズの減少閾値が満たされる場合に、前記フォント実行命令内の前記共通の命令セットを、前記関数に対する呼び出しで置換するように構成される、命令置換コンポーネントと
を備える、システム。
【請求項9】
前記所望のファイルサイズの減少閾値を満たすかどうかを判断するように構成される、減少決定コンポーネントと、
前記共通の命令セットの数が、置換に使用するための利用可能なカスタム関数の数より大きいかどうかに少なくとも部分的に基づいて、前記フォント実行命令内の前記共通の命令のセットに優先順位をつけるように構成される、共通命令優先順位付けコンポーネントと、
前記共通の命令セットについて前記関数を定義するように構成された共通命令定義コンポーネントと
のうち少なくとも1つを備える、請求項8に記載のシステム。
【請求項10】
コンピューティングデバイスに、フォント用のフォント実行命令の量を低減させるためにコンピューティングデバイスによって実行される方法を実行させるコンピュータプログラムであって、前記方法は、
前記フォント実行命令内の共通の命令セットであって、前記フォント実行命令内の少なくとも2つの位置に現れる共通の命令セットを識別するステップと、
前記共通の命令セットのための関数を前記フォント実行命令に挿入するステップと、
前記フォント実行命令内の前記共通の命令セットを前記関数に対する呼び出しで置換すると、所望のファイルサイズの減少閾値が満たされる場合に、前記フォント実行命令内の前記共通の命令セットを前記関数に対する呼び出しで置換するステップと
を含む、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、フォント命令(font instruction)を低減させることに関する。
【背景技術】
【0002】
コンピューティング環境において、コンピュータのフォントは、特定の書体の文字のスタイル(例えば英数字文字)を備えることができる。コンピュータのフォントは典型的に、その書体のスタイルを保持しつつ、大きな又は小さなサイズにスケーリングされ、太字及び/又は斜体にされることができる。フォントの特性は、ストロークの幅(太さ)、文字の斜度若しくは角度、及び文字の幅(例えばさらに高さも)を備えることができる。フォントをディスプレイ上にレンダリングする(例えばラスタリングする)ためのメトリクスは、フォントのそれぞれの文字に対する個々のグリフを記述するメタデータを備えることがある。コンピュータのフォントは、プログラム(例えば1つ又は複数のフォントファイル)を備えるか、あるいはこのプログラム内に構成されることがあり、これらのプログラムは、プログラミング言語を用いて、ユーザに表示するために、それぞれのグリフがラスタリングコンポーネントによってどのようにレンダリングされるかを記述することができる。
【発明の概要】
【0003】
この「発明の概要」の記載は、以下で「発明を実施するための形態」においてさらに説明される概念の選択を簡略化した形で紹介するために提供される。この「発明の概要」の記載は、特許請求に係る主題の主要な要因又は本質的特徴を特定するようには意図されておらず、また特許請求に係る主題の範囲を限定するのに用いられるようにも意図されていない。
【0004】
一部のコンピュータのフォントは、文字のスケーリングされたアウトラインを調整して、ターゲットデバイス上での所望の出力を達成する機構を備えることができる。アセンブリ言語と類似するインタプリタ型言語に基づく操作コード(op−code)は、多くのフォントによって使用され、ラスタライザによって解釈されて、命令又はヒントとして知られる調整を達成することができる。フォントには、個々のグリフに関連付けられた命令、並びにテキストのサイズ及び/又はフォント自体に適用されるグローバル命令が存在する。
【0005】
一部のコンピュータフォントは、テーブルの集合を備え、この場合、例えばそれぞれのテーブルは一意のタグによって識別される。フォントのグリフをグリフテーブルにおいて定義することができる。例として、グリフ定義は、フォントのそれぞれのグリフ及びフォントのアウトラインの数値的表現を用いて実行される命令を備えることができる。それぞれのフォントサイズのために実行される一組のグローバル命令は、例えば事前プログラム(Pre-program)に含まれ、これは制御値プログラム(prep)テーブルとも呼ばれる。フォントのために実行される別の組のグローバル命令は、例えばフォントプログラム(fpgm)内に備えられる。これらの命令の全てが、任意の特定のフォントに関連付けられた1つ又は複数のファイルのサイズを著しく増大させることがある。
【0006】
したがって、フォントの1つ又は複数のファイルに備えられるフォント実行命令の量を低減するための1つ又は複数の技術及び/又はシステムを開示する。例えばフォント用の1つ又は複数のテーブル内に含まれる命令の合計の量を、元のフォントに対するこれらの命令の機能的等価性を維持したまま、低減することができる。フォント実行命令は、例えばフォント内のいくつかの場所において同じである命令のセットを備えることができる。したがって、これらの「共通の」命令(例えば共通の命令セット)の一部は単に、共通の命令セットについて定義された関数に対するいくつかの(例えば1又は2つ等)のライン関数呼び出しで置き換えられる。例えば共通の命令セットを関数呼び出しで置き換えることにより、圧縮されていないフォントの機能的等価性は保持しつつ、フォント実行命令を圧縮することができる。
【0007】
フォント用のフォント実行命令を低減する一実施形態において、1つ又は複数の共通の命令セットがフォント実行命令内で識別される。さらに、識別された共通の命令セットのための関数をフォント内で定義することができる。加えて、フォント実行命令内において、識別された共通の命令セットを、対応する定義された関数への呼び出しで置換することができ、これによりフォント実行命令のセットを低減することができる。
【0008】
前述及び関連する目的の達成のために、以下の説明及び添付の図面は、特定の例示的な態様及び実装について記述する。これらは、1つ又は複数の態様が用いられる様々な方法の幾つかのみを示している。本開示の他の態様、利点及び新規な特徴は、以下の詳細な説明の記載を、添付の図面とともに検討することにより明らかになるであろう。
【図面の簡単な説明】
【0009】
図1】フォント用の実行命令を低減する例示的な方法を示すフロー図である。
図2】本明細書で説明される1つ又は複数の技術の1つ又は複数の部分を実装する、例示的な実施形態を示すフロー図である。
図3】フォント実行命令の例示的な実施形態を示す図である。
図4】本明細書で説明される1つ又は複数の技術の1つ又は複数の部分を実装する、例示的な実施形態を示すフロー図である。
図5】本明細書で説明される1つ又は複数の技術の1つ又は複数の部分を実装する、例示的な実施形態を示す図である。
図6】フォント用の実行命令を低減する例示的なシステムを示すコンポーネント図である。
図7】本明細書で説明される1つ又は複数のシステムを実装する、例示的な実施形態を示すコンポーネント図である。
図8】本明細書で説明される条件の1つ又は複数を具現化するように構成されたプロセッサ実行可能命令を備える、例示的なコンピュータ読取可能媒体の例を示す図である。
図9】本明細書で説明される条件の1つ又は複数を実装する例示的なコンピューティング環境を示す図である。
【発明を実施するための形態】
【0010】
以下に、特許請求に係る主題を、図面を参照しながら説明する。図面では一般に、全体を通じて同様の参照番号を使用して同様の要素を示す。以下の記載では、説明の目的で、特許請求に係る主題の完全な理解を提供するために様々な具体的な詳細を説明する。しかしながら、特許請求に係る主題はこれらの具体的な詳細を用いることなく実施できることは明白である。他の例では、特許請求に係る主題の説明を容易にするために、構造及びデバイスをブロック図の形で示している。
【0011】
本明細書で提供されるように、例えばフォント用の1つ又は複数のテーブルに含まれるフォント命令実行を低減すること(例えばまとめること)によって、低減前のフォントと機能的な等価性を維持しつつ、フォントのファイルサイズを低減させる方法が考案される。例として、フォントは、命令又は「ヒント」を備える、アセンブリ言語と類似するインタプリタ型言語に基づく「操作コード」を使用する。この操作コード言語は、ターゲットデバイス上にフォントをレンダリングするときに、ラスタライザによって解釈されることができる。フォントはテーブルの集合を備え、このテーブルはそれぞれフォント命令(例えばグリフ命令及びグローバル命令)を備える。この例において、(例えばフォントテーブル内の)命令の合計の量は低減される。
【0012】
図1は、フォント用のフォント実行命令を低減する例示的な方法100を示すフロー図である。例示的な方法100は、102において開始し、104においてフォント実行命令内の共通の命令のセットを識別することを含む。例えば共通の命令のセットは、フォント実行命令内の1つより多い位置で発見される同じパターンの命令を備えることができる。
【0013】
106において、共通の命令のセットに対する関数が定義される。例えばフォント実行命令に使用される言語が、フォント実行命令内で呼び出すことができる、命令のセットの関数化(functionalization)を提供することができる。108において、フォント実行命令内の共通の命令のセットが、定義された関数に対する呼び出しで置換される。例えばフォント実行命令内のそれぞれの共通の命令セットの位置において、共通の命令セットを除去し、その位置に、定義された関数に対する呼び出しを挿入することができる。この方法では、例えば複数の位置にある命令のセットを関数に対する呼び出しで置換することによって、フォント実行命令を低減することができる。これを繰り返し実行することにより、他の共通の命令のセットを、定義された関数へのそれぞれの呼び出しで単に置換し、フォント実行命令をさらに低減することができることを理解されたい。
【0014】
図2は、本明細書で説明される1つ又は複数の技術の1つ又は複数の部分を実装することができる例示的実施形態200を示すフロー図である。202において、フォント実行命令をスキャンし、204において、共通の命令のセットのうちの1つ又は複数を識別することができる。一実施形態において、1つの共通の命令のセットは、フォント実行命令内の少なくとも2つの位置で識別される、1つ又は複数の共通フォント実行命令(例えば共通グリフ実行命令)のセットを備えることができる。例として、1つより多くの位置で見つかる命令について、事前プログラム(prep)テーブルをスキャンすることができる。この場合、命令のセットは、ターゲットデバイス上でフォントを実行するのに使用されるコードの1つ又は複数のラインを備える。
【0015】
例示として、図3は、フォント実行命令の例示的な実施形態300を示す図である。この例300において、フォント実行命令は、特に3つのグリフ302、304、306のグリフ命令の部分を備える。さらに、グリフ18 302は、命令のセット308を備え、この命令セットは、グリフ167 304の310と、グリフ520 306の312においても見つかる。同じ命令セット308、310及び312は、フォント実行命令についての共通の命令セットを備える。グリフ302、304、306に対するそれぞれのフォント実行命令は、それぞれ308、310、312より多くのセットを備えることを認識されたい。すなわち、簡潔性及び説明等の目的で、グリフ302、304、306に対して共通又は重複するセット308、310、312のみが図示されている(例えば、グリフ203、304、306に対するそれぞれのフォント実行命令の追加の部分は図示されていない。)
図2に戻ると、206において、1つ又は複数の共通の命令セットの圧縮(例えば共通の命令セットを関数で置換すること)の結果を評価して、この圧縮により、圧縮を実行するのに過度にコンピュータリソースの使用を課すことなく、フォントファイルサイズにおける所望の改善が得られたかどうかどうかを判断することができる。一実施形態において、圧縮の評価は、フォント実行命令内の共通の命令セットを圧縮するときに、所望のファイルサイズの閾値を満たすか判断することを含むことができる。
【0016】
208において、所望のファイルサイズの減少があるかどうか(例えば減少閾値を満たすかどうか)の判断は、例えばフォントの実行命令を減少させることによって、ファイルサイズの実質的な減少(net reduction)があるかどうかを判断することを含む。減少閾値を満たさない場合(例えば実質的な減少がない場合)(208において「いいえ」の場合)、212において、フォント実行命令に対する圧縮は実行されない。減少閾値を満たす場合(208において「はい」の場合)、210において、圧縮を実行するためのコンピューティングリソースコストが決定される。
【0017】
一実施形態において、所望のファイルサイズの減少閾値を満たすかどうかの判断は、フォント実行命令のサイズを減少させるための性能コストを識別することを含むことができる。この実施形態において、性能コスト(例えばプロセッサ使用、電力消費、時間及び/又は実際のコスト等のようなコンピューティングリソースコスト)を、所望の性能コスト閾値(例えば圧縮の改善が性能コストに勝る場合など)に対して比較することができる。
【0018】
性能オーバヘッドコストが所望の閾値を満たさない場合(210において「いいえ」の場合)、212において圧縮は実行されない。性能オーバヘッドコストが所望の閾値を満たす場合(210において「はい」)の場合)、214において、1つ又は複数の共通の命令セットの圧縮を実行することができる。例えば、フォント実行命令内の共通の命令セットの1つ又は複数を所望の関数によって置換し、フォント実行命令のサイズを減少させることができる。
【0019】
一態様において、フォントは、オペレーションスタックから値を除去することなど、1つ又は複数の関数を定義する1つ又は複数のオペレーションを備える命令セットを備えるか、むしろこの命令セットによって構成されることがある。例として、TrueTypeフォントは、少なくとも2つのタイプの関数、すなわち関数定義(FDEF:function definition)と命令定義(IDEF:instruction definition)を提供する。この例において、このFDEFは標準の関数定義であり、FDEFにより関数ブロックの開始部分において指示される。一方、IDEFはカスタム命令定義であり、IDEFによりカスタム命令ブロックの開始部分において指示される。さらに、これらのタイプの関数は双方ともENDFで終了する。説明される例として、呼び出されるとき、FDEFはオペレーションスタックから、一意の関数番号として使用される値を除去し、IDEFはそのスタックから、カスタム命令として使用される値を除去する。加えて、この例において、標準の関数は、スタックからの関数番号をとる「CALL」命令を使用して呼び出され、カスタム命令は、単にこれらの定義された操作コードを使用して実行される。
【0020】
図4は、本明細書で説明される1つ又は複数の技術の1つ又は複数の部分を実施することができる例示的な実施形態400を示すフロー図である。402において、共通の命令セット450の数が、フォント実行命令の置換閾値よりも大きいかどうかを判断する。例えば何らかのフォントタイプ(例えばTrueTypeフォント)は、限られた数の置換関数を提供する。例として、TrueTypeフォントは典型的に、フォントについて限られた数のカスタム関数(IDEF)を提供する。この例において、置換に使用するための利用可能なカスタム関数より多くの共通の命令セットが存在する場合、置換閾値を超える。
【0021】
一実施形態において、カスタム命令(IDEF)に対する呼び出しは、コンピュータオーバヘッドが少なく、標準関数(例えばEDEF)に対する呼び出しよりも多くの命令が圧縮されることになるので、標準関数を使用する前に、カスタム関数を共通の命令セットの置換に使用することができる。例として、IDEFは、1つの命令のみを実行すること(例えば、「カスタム命令12を実行すること」)を備え、一方、EDEFは2つの命令を実行すること(例えば、「12をスタックにプッシュし、トップスタックエントリによって識別される関数にジャンプすること」)を備える。したがって、この実施形態では、カスタム関数は、(例えばカスタム関数に対する)置換閾値を満たすまで標準関数よりも優先され、次いで標準関数を、例えば残りの全ての共通の命令セットに使用することができる。
【0022】
一実施形態において、カスタム命令の使用は、共通の命令セットに対して無効にされることがある。例えばフォントのプログラマ/プロバイダは、カスタム命令(例えばIDEF)を他の目的で使用することができる。例として、IDEFはしばしば、フォントの将来のバージョン又は更新など、将来の命令に対するパッチとして使用される。この実施形態において、例えばカスタム命令の使用を無効にすることにより、フォントプログラムとの潜在的な衝突及び/又は問題を軽減することができる。一実施形態において、標準関数(例えばFDEF)の使用を無効にして、例えばカスタム命令のみを共通の命令セットに使用することができる。
【0023】
図4の404において、共通の命令セットに対して置換の優先順位をつける。一実施形態において、第1の共通の命令セットを、例えば共通の命令セット450の閾値数が満たされる場合(402において「はい」の場合)、圧縮について第2の共通の命令セットよりも優先させることができる、一実施形態において、優先順位付けは、フォント実行命令内において第1の共通の命令セットが、第2の共通の命令セット(がフォント実行命令内で見つかる)よりも多くの位置で見つかる場合、第1の共通の命令セットを第2の共通の命令セットよりも優先させることを含むことができる。一実施形態において、優先順位付けは、より多くの数のフォント実行命令を有する第1の共通の命令セットを、より少ないフォント実行命令を有する第2の共通の命令セットよりも優先させることを含むことができる。
【0024】
406において、共通の命令セットについて、例えばそれぞれの識別された共通の命令セットについて関数を作成することができる。説明上の例として、図5は、本明細書で説明される1つ又は複数の技術の1つ又は複数の部分を実施することができる例示的な実施形態500を示す図である。共通の命令セット502は、フォントプログラム内の1つより多くの位置において識別された、あるいは複数のグリフに対する個々の実行命令(例えば図3のグリフ302、304、306に対する命令)において識別されたフォント実行命令を備える。さらに、この例示的な実施形態500では、共通の命令セット502について関数504を作成することができる。この例において、作成された関数504は、識別された共通の命令セット502からのフォント実行命令516を備える。
【0025】
図4に戻ると、408において、関数を定義することは、フォント内の共通の命令セット、又はフォントに対する事前プログラムを関数化することを備えることができる。作成される関数は、fpgmテーブルなどのフォント制御プログラムで定義される。例えば関数を、フォントプログラム(fpgm)テーブル、及び/又はフォントに対する事前プログラム(prep)で定義する(例えば関数化する)ことができる。さらに、一実施形態において、定義された関数は、フォントプログラムにおける1つの位置のみにおいて関数化することができ、これにより例えば、共通の命令セットの関数を圧縮することができる。一実施形態において、共通の命令セットについて関数を定義することは、フォントプログラムのフォントテーブルにおいて、共通の命令セットを備える関数を作成することを備えることができる。
【0026】
一実施形態において、関数を定義することは、共通の命令セットに対するカスタム命令を定義することを含むことができる。上述のように、カスタム関数は、カスタム命令定義関数を備え、この関数は、フォント用の制御プログラム(例えばfpgm及び/又は事前プログラム)によって定義される。例として、カスタム命令定義関数は、フォントの将来のバージョンのための機能を追加するなど、フォントをカスタマイズするためのフォントプラットフォームに提供されることがある。この例において、未定義の操作コード(例えば共通の命令セット)を使用して、フォントプログラムテーブルなどにおいてカスタム命令定義関数(例えばIDEF)を定義することができる。
【0027】
例示的な実施形態400では、410において、定義された関数に対する呼び出しを、フォント実行命令に挿入することができる。例えば、フォント実行関数内で共通の命令セットが識別される個々の位置において、共通の命令セットを、フォントプログラムファイルで定義された関数に対する呼び出しで置換することができる。一実施形態において、フォント実行命令内の共通の命令セットを、定義されたカスタム関数と置換することができる。さらに、それぞれの定義された関数又は定義されたカスタム命令が、例えばフォント実行命令内で識別された、対応する共通の命令セットに取って代わることがあり、それによりフォント実行命令のサイズを減少させることができる。
【0028】
説明上の例として、図5において、圧縮されたフォント実行命令506は、フォントのグリフ508、510、512に対するそれぞれの実行命令を備え、共通の命令セット502が、定義された関数504に対する呼び出し514と置換されている。さらに、図3の300の圧縮されていないフォント実行命令と比較すると、実行命令の行は、25行(図3の300)から、例えば定義済み関数(例えばフォントプログラムテーブル)を含め19行(図5の504と506)に減少している。一実施形態において、例えば圧縮比率は、共通の命令セットが更なる(例えば3つより多い)位置で見つかるときに劇的に増加し、及び/又は、例えばより多くの量(例えば操作コードの行)の実行命令を備える共通の命令セットについて劇的に増加する。
【0029】
一態様において、共通の命令セットの識別情報を、1つより多くのフォントを圧縮するのに使用することができる。一実施形態において、この態様では、識別された共通の命令セットを使用して、異なるフォントについてのフォント実行命令内の共通の命令セットを識別することができる。例えば共通の命令セットの識別は、総当たりの文字検索を備えることがあり、この場合、それぞれの文字及び/又は文字のセットを選択して、フォント実行命令内の文字と比較することができる。しかしながら、この実施形態では、1つ又は複数のフォント実行命令において識別されるような、それぞれの共通の命令セットが、他のフォント内で同じセットを識別しようと試みるための基本の検索基準として使用される。
【0030】
例えば図5の共通の命令セット502を、第1のフォントで識別して、第2のフォントのフォント実行命令と照合する検索基準として使用することができる。この方法では、例えばフォントについての共通の命令セットを識別する時間及び/又は計算上のリソースコストを、公知の共通の命令セットで開始することによって減少させることができる。
【0031】
さらに、この態様における一実施形態では、共通の命令セットについて定義された関数を、1つより多いフォントに使用することができる。この実施形態では、関数(例えば標準及び/又はカスタム関数)を、1つより多いフォントに使用されるフォント制御プログラムにおいて関数化することができる。例えば共通のテーブルがフォント制御プログラムによって使用されることがあり、この場合、共通のテーブルは、対応する共通の命令セットのための1つ又は複数の定義された関数を備える。この方法では、例えば、それぞれのフォントについて定義された関数の量を減少させることによって、フォント実行命令をさらに圧縮することができる。
【0032】
一態様において、共通の命令セットを、別の共通命令セット内にネストすることができる。一実施形態において、この態様では、第1の共通命令セットについて第1の関数を(例えばフォントプログラムテーブルで)を定義することができ、この場合、第1の共通命令セットが、フォントについてのフォント実行命令内の第2の共通命令セットの内部にネストされる。さらに、第2の共通命令セットに対して第2の関数を定義することができる。一実施形態において、第1の共通命令セットを、定義された第1の関数に対する呼び出しで置換することができ、及び/又は第2の共通命令セットを、定義された第2の関数に対する呼び出しで置換することができる。
【0033】
例として、第2の(ネストされた)共通命令セットを、第2の定義された関数に対する第2の呼び出しで置換することができる。さらに、この例では、第1の共通命令セット(ここでは、第2の定義された関数に対する呼び出しを備える)を、第1の関数として定義することができる。加えて、第1の共通命令セットを、第1の関数(例えば第2の定義された関数に対する呼び出しさらに備える)に対する呼び出しで置換することができる。この方法では、例えば、定義された関数内の命令の量を減少させることによって、フォント実行命令をさらに圧縮することができる。
【0034】
(例えば1つ又は複数のフォントファイルを備える)フォント実行プログラムのサイズを減少させるためのシステムも考案される。フォント実行プログラムは、設計者の所望の出力に応じたディスプレイ上へのグリフのレンダリングを提供するプログラミングコード及びプログラミングテーブルを備えることができる。他のタイプのプログラミングコードと同様に、フォント実行命令のそれぞれの行が、フォントをどのようにレンダリングするかに関する命令を備えることができる。例えば、プログラムの幾つかのエリアにおいて共通し得る同じフォント実行命令の部分を、共通の実行命令について定義された関数への呼び出しで置換することによって、フォント実行命令の数を減少させることができる。
【0035】
図6は、フォントについての実行命令を減少させるための例示的なシステム600を示すコンポーネント図である。コンピュータベースのプロセッサ602は、システムのデータを処理するように構成され、共通命令識別コンポーネント604に動作可能に結合される。共通命令識別コンポーネント604は、フォント実行命令650内の共通の命令セットを識別するように構成される。例えばフォント実行命令650は、フォントをどのようにレンダリングするかに関する(例えばラスタライザによって解釈される)プログラミングコードなどの命令を備えることができる。さらに、フォント実行命令650は、1つより多い位置に、例えば共通の命令セットを含む、同じ命令セットを備えることがある。この例において、共通命令識別コンポーネント604は、フォント実行命令をスキャンして、共通命令の1つ又は複数のセットを識別することができる。
【0036】
例示的システム600において、命令置換コンポーネント606は、プロセッサに動作可能に結合され、フォント実行命令内の識別された共通命令セットを、識別された共通命令セットについて定義された関数に対する呼び出しで置換するように構成される。例えば、1つ又は複数の識別された共通の命令セットについて、それぞれの関数を定義することができ、命令置換コンポーネント606は、フォント実行命令を通じてそれぞれの共通命令セットを除去し、対応する定義された関数に対する呼び出しでこれらを置換することによって、圧縮されたフォント実行命令652を作成することができる。この方法によると、例えば、関数呼び出しは、典型的に(共通命令セットを置換するのに使用される)対応する共通の命令セットよりもかなり小さいので、フォントの実行命令に対して使用されるコードの複数の行が減少される。
【0037】
図7は、本明細書で説明される1つ又は複数のシステムを実装することができる例示的な実施形態700を図示するコンポーネント図である。この例700では、図6の拡張機能を提供しており、図6について記述した要素、コンポーネント等の説明は、簡略化のために繰り返さない。一実施形態において、共通命令識別コンポーネント604によってフォント実行命令750内で識別された共通命令セット754は、フォント実行命令内の複数の位置で識別される1つ又は複数の共通のフォント実行命令(例えば共通のグリフ実行命令)のセットを備えることができる。
【0038】
例示の実施形態700において、減少決定コンポーネント712は、フォント実行命令750内の共通の命令セット754を圧縮するとき、所望のファイルサイズの減少閾値が満たされるかどうかを判断するように構成される。一実施形態において、命令置換コンポーネント606は、所望のファイルサイズ減少閾値が満たされる場合にのみ共通の命令セット754を置換するように構成される。例えば減少決定コンポーネント712は、フォント実行命令内の1つ又は複数の共通命令セットを、対応する関数の呼び出しで置換することにより、所望の閾値量までフォントファイルが低減されると決定する場合、命令置換コンポーネントは、置換を実行することができ、そうでない場合、例えば圧縮(例えば呼び出しによる置換)は起こらない。
【0039】
例示の実施形態700において、共通命令優先順位付けコンポーネント714は、フォントのついての命令置換の閾値数に少なくとも部分的に基づいて、フォント実行命令750内の置換について、1つ又は複数の命令セット754に対する優先順位をつけるように構成される。例えばフォントタイプが、フォント実行命令内の命令を置換するのに使用することができる関数の数を制限することがある。この例では、共通命令優先順位付けコンポーネント714を、共通の命令セットを関数化して、共通の命令セットがフォント実行命令内に現れる回数及び/又は共通命令セットの長さに基づいて、フォント実行命令内で置換することができる。例えば、他の共通命令セット内により頻繁に現れるか、又はより長い共通の命令セットは、一般に、より大きな圧縮につながる。
【0040】
例示の実施形態700において、共通命令定義コンポーネント710は、共通の命令セット754に対する関数を定義するように構成される。一実施形態において、定義された関数は、標準の関数(例えばTrueTypeフォントに対するFDEF関数)及び/又はカスタム命令関数(例えばTrueTypeフォントに対するIDEF関数)を備えることができる。例えば、共通命令定義コンポーネント710は、識別された共通命令セットのための関数を作成し、該関数をフォント実行命令(例えば、フォントプログラム(fpgm)テーブル)で定義することができる。この例において、1つ又は複数の定義された関数を使用して、対応する共通命令セットを置換することができ、その結果、圧縮されたフォント実行命令752を得ることができる。
【0041】
さらに別の実施形態は、本明細書で提示される技術の1つ又は複数を実装するように構成されたプログラム実行可能命令を備えるコンピュータ読取可能媒体に関する。これらの方法で導出される例示的なコンピュータ読取可能媒体が図8に図示されている。図8において、実装800は、コンピュータ読取可能媒体808(例えばCD−R、DVD−R、又は円盤状のハードディスクドライブ)を備え、このコンピュータ読取可能媒体808上にコンピュータ読取可能データ806がエンコードされる。このコンピュータ読取可能データ806は、本明細書で説明される原理の1つ又は複数の従って動作するように構成された1組のコンピュータ命令804を備える。そのような一実施形態802において、プロセッサ実行可能命令804は、例えば図1の例示的な方法100の少なくとも一部などの方法を実行するように構成される。そのような別の実施形態において、プロセッサ実行可能命令804は、例えば図6の例示的なシステム600の少なくとも一部などのシステムを実装するように構成される。本明細書で提示される技術に従って動作するように構成される、多くのこのようなコンピュータ読取可能媒体が当業者によって考案されるであろう。
【0042】
特許請求に係る主題を、構造的特徴及び/又は方法的動作に特有の言語で説明してきたが、特許請求の範囲によって定義される本発明の主題は、必ずしも上述の具体的な特徴及び動作に限定されない。むしろ、上述の具体的な特徴及び動作は、特許請求の範囲を実装する際の例示形式として開示されている。
【0043】
本出願において使用されるとき、「コンポーネント」、「モジュール」、「システム」、「インタフェース」等という用語は、一般に、ハードウェア、ハードウェアとソフトウェアの組み合わせ、ソフトウェア又は実行中のソフトウェアのいずれかのコンピュータ関連のエンティティを指すように意図される。例えばコンポーネントは、これらに限られないが、プロセッサで実行中のプロセス、プロセッサ、オブジェクト、実行ファイル、実行のスレッド、プログラム、及び/又はコンピュータなどとすることができる。例として、コントローラ上で実行中のアプリケーションと、コントローラとの双方をコンポーネントとすることができる。1つ又は複数のコンポーネントが、1つのプロセス内及び又は実行スレッド内に存在してもよく、1つのコンポーネントを、1つのコンピュータにローカルに配置してもよく、及び/又は2つ若しくはそれ以上のコンピュータ間で分散させてもよい。
【0044】
さらに、特許請求に係る主題を、ソフトウェア、ファームウェア、ハードウェア、又はこれらの任意の組み合わせを生成して、特許請求される主題を実装するようにコンピュータを制御する、標準のプログラミング及び/又はエンジニアリング技術を使用して方法、装置又は製品として実装することができる。本明細書で使用されるとき「製品」という用語は、任意のコンピュータ読取可能デバイス、担体又は媒体からアクセス可能なコンピュータプログラムを含むように意図される。当然、当業者には、特許請求に係る主題の範囲又は精神から逸脱することなく、多くの修正をこのような構成に対して行うことができることが認識されよう。
【0045】
図9及び以下の記述は、本明細書で説明された条件の1つ又は複数の実施形態を実装するのに適切なコンピューティング環境の簡潔で一般的な説明である。図9の動作環境は、適切な動作環境の単なる一例に過ぎず、動作環境の使用又は機能の範囲に関していかなる限定をも示唆するようにも意図されていない。例示的なコンピューティングデバイスの例には、限定ではないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルド若しくはラップトップデバイス、モバイルデバイス(モバイルフォン、パーソナルデジタルアシスタンス(PDA)、メディアプレイヤ等)、マルチプロセッサシステム、家庭用電化製品、ミニコンピュータ、メインフレームコンピュータ、及び上記のシステム若しくはデバイスのいずれかを含む分散コンピューティング環境などが含まれる。
【0046】
必須ではないが、諸実施形態は、1つ又は複数のコンピューティングデバイスによって実行される「コンピュータ読取可能命令」の一般的なコンテキストで説明される。コンピュータ読取可能命令は、コンピュータ読取可能媒体(下述)により分散させることができる。コンピュータ読取可能命令を、関数、オブジェクト、アプリケーションプログラミングインタフェース(API)及びデータ構造など、特定のタスクを実行し、特定の抽象データ型を実装するプログラムモジュールとして実装することができる。典型的に、コンピュータ読取可能命令の機能を、様々な環境における要求に応じて組み合わせることができ、又は分散させることができる。
【0047】
図9は、システム900の例を図示しており、システム900は、本明細書で提供される1つ又は複数の実施形態を実装するように構成されたコンピューティングデバイス912を備える。一構成において、コンピューティングデバイス912は、少なくとも1つの処理ユニット916とメモリ918とを含む。コンピューティングデバイスの正確な構成及びタイプに応じて、メモリ918は、揮発性(例えばRAMなど)、非揮発性(例えばROM、フラッシュメモリなど)、又はこれらの2つの任意の組み合わせとすることができる。この構成は、図9では破線914によって図示されている。
【0048】
他の実施形態において、デバイス912は、追加の特徴及び/又は機能を含むことができる。例えば、デバイス912は、限定ではないが磁気記憶装置及び光記憶装置等を含め、追加の記憶装置(例えば取外し可能及び/又は取外し不可能)を含むこともできる。このような追加の記憶装置は、図9では記憶装置920によって図示されている。一実施形態において、本明細書で提供される1つ又は複数の実施形態を実装するコンピュータ読取可能命令は、記憶装置920内にあってよい。記憶装置920は、オペレーティングシステム及びアプリケーションプログラム等を実装する他のコンピュータ読取可能命令を記憶してもよい。コンピュータ読取可能命令を、例えば処理ユニット916による実行のためにメモリ918にロードすることができる。
【0049】
本明細書で使用されるとき「コンピュータ読取可能媒体」という用語は、コンピュータ記憶媒体を含む。コンピュータ記憶媒体は、コンピュータ読取可能命令又は他のデータなどの情報を記憶するための任意の方法又は技術で実装される、揮発性及び非揮発性、取外し可能及び取外し不可能な媒体を含む。メモリ918及び記憶装置920は、コンピュータ記憶媒体の例である。コンピュータ記憶媒体には、限定ではないが、RAM、ROM、EEPROM、フラッシュメモリ若しくは他のメモリ技術、CD−ROM、デジタル多用途ディスク(DVD)若しくは他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置若しくは他の磁気記憶装置、又は所望の情報を格納するのに使用することができ、デバイス912によってアクセス可能な任意の他の媒体が含まれる。いずれかのそのようなコンピュータ記憶媒体を、デバイス912の一部とすることができる。
【0050】
デバイス912は、該デバイス912が他のデバイスと通信できるようにする通信接続926も含むことができる。通信接続926には、限定ではないが、モデム、ネットワークインタフェースカード(NIC)、内蔵型ネットワークインタフェース、無線送受信機、赤外線ポート、USB接続、又はコンピューティングデバイス912を他のコンピューティングデバイスに接続するための他のインタフェースが含まれる。通信接続926は、有線接続又は無線接続を含むことができる。通信接続926は、通信媒体を送信及び/又は受信することができる。
【0051】
「コンピュータ読取可能媒体」という用語は、通信媒体を含むことがある。通信媒体は、典型的に、コンピュータ読取可能命令又は他のデータを、搬送波又は他の伝送機構など、「変調データ信号」に具現化し、任意の情報伝達媒体を含む。「変調データ信号」という用語は、情報を信号にエンコードするような手法により設定又は変更される特性の1つ又は複数を有する信号を含む。
【0052】
デバイス912は、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイス、赤外線カメラ、ビデオ入力デバイス及び/又は他の入力デバイスなどの入力デバイス924を含むことができる。1つ又は複数のディスプレイ、スピーカ、プリンタ及び/又は任意の他の出力デバイスなどの出力デバイス922もデバイス912に含まれる。入力デバイス924及び出力デバイス922を、有線接続、無線接続又はこれらの任意の組み合わせを介してデバイス912に接続することができる。一実施形態において、別のコンピューティングデバイスの入力デバイス又は出力デバイスを、コンピューティングデバイス912の入力デバイス9124又は出力デバイス922として使用してもよい。
【0053】
コンピューティングデバイス912のコンポーネントを、バスなどの様々な相互接続によって接続することができる。そのような相互接続は、PCIエクスプレスなどのPCI、ユニバーサルシリアルバス(USB)、ファイアワイヤ(IEEE1394)、光バス構造などを含むことができる。別の実施形態では、コンピューティングデバイス912のコンポーネントを、ネットワークによって相互接続することができる。例えば、メモリ918を、ネットワークによって相互接続された異なる物理的な位置に配置された複数の物理的なメモリユニットで構成することができる。
【0054】
当業者により、コンピュータ読取可能命令を格納するのに使用される記憶デバイスをネットワークにわたって分散させることが実現されるであろう。例えば、ネットワーク928を介してアクセス可能なコンピューティングデバイス930は、本明細書で提供される1つ又は複数の実施形態を実装するコンピュータ読取可能命令を格納することができる。コンピューティングデバイス912は、コンピューティングデバイス930にアクセスして、コンピュータ読取可能命令の一部又は全てを実行用にダウンロードすることができる。あるいは、コンピューティングデバイス912は、コンピュータ読取可能命令の一部を必要に応じてダウンロードしてもよく、一部の命令をコンピューティングデバイス912において実行して他の命令をコンピューティングデバイス930で実行してもよい。
【0055】
諸実施形態の様々なオペレーションを本明細書で提供した。一実施形態において、説明されたオペレーションの1つ又は複数が、1つ又は複数のコンピュータ読取可能媒体上に格納されるコンピュータ読取可能命令を構成することができ、そのようなコンピュータ読取可能命令は、コンピューティングデバイスによって実行されると、該コンピューティングデバイスに上述のようなオペレーションを実行させる。これらのオペレーションの一部又は全ての順序は、これらの動作が必ずその順序に従うことを暗示するように解釈されるべきではない。代替的な順序が、本説明の利益を享受した当業者によって認識されよう。さらに、本明細書で説明される各実施形態において必ずしも全てのオペレーションが提示される必要はない。
【0056】
さらに、本明細書において「例示」という言葉は、例、実施例等として機能することを意味する。本明細書で「例示」として説明される任意の態様又は設計は、必ずしも他の態様又は設計に対して有利なものとして解釈されるべきではない。むしろ、「例示」という言葉は、概念を具体的なやり方で提示することが意図されている。本明細書で使用されるとき、「又は(若しくは、あるいは)」という用語は、排他的な「又は」ではなく、包括的な「又は」を意味するように意図されている。すなわち、特段に指定されていない限り、又はコンテキストから明らかでない限り、「XはA又はBを用いる」という用例は、自然な包括的順列のいずれかを意味するように意図される。すなわち、XがAを用いる場合、XがBを用いる場合、XがAとBの双方を用いる場合、これらの例のいずれかの下において「XがA又はBを用いる」という用例は満たされる。さらに、A及びBの少なくとも1つ等という用例は、A又はBを意味することもあり、AとBの双方を意味することもある。さらに、本明細書及び添付の特許請求の範囲で使用されるとき「1つ」又は「或る」という冠詞は、単数を指示するような特段の指定がないか、あるいはコンテキストから明らかでない限り、一般に「1つ又は複数」を意味するように解釈してもよい。
【0057】
また、本開示は1つ又は複数の実施形態に関して示され、説明されているが、この発明の詳細な説明及び添付の図面を読み、理解することに基づいて、当業者は等価な変更及び修正を行うことができるであろう。本開示は、全てのそのような修正及び変更を含んでおり、添付の特許請求の範囲によってのみ限定される。特に、上述のコンポーネント(例えば要素、リソース等)によって実行される様々な機能に関して、これらのコンポーネントを説明するのに使用される用語は、特段の指示がない限り、本開示の図示された例示的な実装における機能を実行する開示された構造に構造的に等価でないとしても、説明されたコンポーネントの指定された機能を実行する任意の(例えば機能的に等価な)コンポーネントに対応するように意図される。さらに、本開示の特定の特徴は、いくつかの実装の1つのみに関して説明されているが、そのような特徴を、任意の所与の又は特定の適用において望まれるか又は有利な、他の実装の1つ又は複数の他の特徴を組み合わせてもよい、さらに、発明の詳細な説明又は特許請求の範囲において使用される「含む」、「有する」、「とともに」という用語又はこれらの用語の変形の範囲に関して、これらの用語は、「備える」という用語と同様に、包括的であるように意図されている。
図1
図2
図3
図4
図5
図6
図7
図8
図9