(57)【特許請求の範囲】
【請求項１】
フォントアウトラインの変更に従って命令を発生するための方法であって、
（１）  前記フォントアウトラインの元のデータを、読取装置によって読取るステップと、
（２）  前記フォントアウトラインデータを、修正装置によって、文字を構成するアウトライン曲線に対応する点の座標を修正することによって修正するステップと、
（３）  発生装置によって、フォントアウトラインデータの変更に従って命令を発生し、前記発生した命令を分類および組合せるステップと、
（４）  文字ライブラリ内に前記命令を、インポート装置によってインポートするステップとを含み、
前記命令の分類は、移動方向およびタイプに従って前記命令を分類することを含み、
移動方向に従う前記分類および前記組合せは、前記同じ点移動方向の命令のすべてが一括して動作され、前記移動方向は１度だけ設定されることを示し、
タイプに従う前記分類および前記組合せは、前記点の同じ移動値の命令のすべてが循環的に動作され、点を同じ点に揃える命令のすべてが循環的に動作され、前記点の移動値および参照点は繰り返し設定されないことを特徴とする、方法。
【請求項２】
前記ステップ（１）における前記フォントアウトラインの元のデータは、文字を構成するアウトライン曲線の数、ならびに、各アウトライン曲線に対応する点の数、座標および属性を含むことを特徴とする、請求項１に従うフォントアウトラインの変更に従って命令を発生するための方法。
【請求項３】
前記ステップ（３）において命令を発生することは、
〈１〉  前記フォントアウトラインの元のデータおよび前記フォントアウトラインの修正されたデータを読取るステップと、
〈２〉  前記フォントアウトラインの元のデータおよび前記フォントアウトラインの修正されたデータに従って前記フォントアウトラインデータの変更を計算するステップと、
〈３〉  前記フォントアウトラインデータの変更に対応する前記命令を発生するステップとを含むことを特徴とする、請求項１または請求項２に従うフォントアウトラインの変更に従って命令を発生するための方法。
【請求項４】
前記ステップ〈２〉における前記フォントアウトラインの変更の具体的な計算は、前記
文字を構成するアウトライン曲線に対応する各点のＸ座標およびＹ座標の変更値を計算することであることを特徴とする、請求項３に従うフォントアウトラインの変更に従って命令を発生するための方法。
【請求項５】
前記ステップ〈３〉において前記フォントアウトラインデータの変更に対応する前記命令を発生する具体的な計算は、
まず、フォントサイズを設定し、前記座標の変更前の点および変更後の点の間の距離測定方向を設定し、さらに、点移動方向を設定するための命令をそれぞれ生成し；
次に、フォントアウトラインの変更に従って、点移動命令、前記点の座標値を同じ値にするための点アライメント命令、または、点を直線の交点へと移動させる命令を発生することを特徴とする、請求項３に従うフォントアウトラインの変更に従って命令を発生するための方法。
【請求項６】
前記点移動命令、前記点アライメント命令、および、前記点を直線の交点に移動させる命令の具体的な計算は、
前記アウトライン曲線に対応する点がＸまたはＹ方向に移動するとき、前記点のシリアルナンバーをスタックにプッシュし、前記点の移動値を前記スタックにプッシュし、前記移動命令を入力し；
前記ＸまたはＹ方向における前記アウトライン曲線に対応する２つの点の座標値が同じ値となるとき、一方の点を参照点として設定し、他方の点のシリアルナンバーをスタックにプッシュし、前記点アライメント命令を入力し；さらに、
前記アウトライン曲線に対応する点を２つの直線の交点に移動するとき、前記点のシリアルナンバーをスタックにプッシュし、前記２つの直線の始点および終点のシリアルナンバーをそれぞれ前記スタックにプッシュし、前記点を直線の交点に移動させる
命令を入力することであることを特徴とする、請求項５に従うフォントアウトラインの変更に従って命令を発生するための方法。
【請求項７】
フォントアウトラインの元のデータを読取るための読取装置（１１）と、
前記フォントアウトラインのデータを、文字を構成するアウトライン曲線に対応する点の座標を修正することによって、修正するための修正装置（１２）と、
フォントアウトラインデータの変更に従って命令を発生し、前記発生した命令を分類および組合せるための発生装置と、
前記命令を文字ライブラリ内にインポートするためのインポート装置（１４）とを備え、
前記命令の分類は、移動方向およびタイプに従って前記命令を分類することを含み、
移動方向に従う前記分類および前記組合せは、前記同じ点移動方向の命令のすべてが一括して動作され、前記移動方向は１度だけ設定されることを示し、
タイプに従う前記分類および前記組合せは、前記点の同じ移動値の命令のすべてが循環的に動作され、点を同じ点に揃える命令のすべてが循環的に動作され、前記点の移動値および参照点は繰り返し設定されないことを特徴とする、フォントアウトラインの変更に従って命令を発生するためのシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
技術分野
本発明は、コンピュータ文字入力技術の分野に関し、より特定的には、フォントアウトラインの変更に従って命令を発生するための方法およびシステムに関する。
【背景技術】
【０００２】
背景技術
ＴｒｕｅＴｙｐｅは、アップルコンピュータ社およびマイクロソフト社が共同開発した数学的フォント記述の新たな技術である。大きなフォントサイズでは、ＴｒｕｅＴｙｐｅの文字ライブラリを良好に表示することができる。しかし、小さなフォントサイズでは、Ｗｏｒｄ（登録商標）での小さな４−サイズ（１２−ポイントタイプ）および５−サイズ（１０．５−ポイントタイプ）などの一般的なフォントサイズのもののように、いくつかの比較的複雑なストロークが重なり合うおそれがある。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
この問題には２つの解決策がある。１つは、埋め込みビットマップであり、もう１つは命令を加えることである。埋め込みビットマップは、命令が出現する以前に一般的に用いられていた技術であった。たとえば、Ｗｉｎｄｏｗｓ（登録商標）ＸＰで設けられている宋字体フォントライブラリは、小さなフォントサイズにおける不良な表示効果の問題を埋め込みビットマップで解決する。しかしながら、この技術では、各小さなフォントサイズのビットマップデータを設ける必要があり、結果的に、データ量が大量となる。現在では、小さなフォントサイズにおける不良な表示効果の問題を解決するための最も理想的な方法は、Ｗｉｎｄｏｗｓ（登録商標）７に設けられているマイクロソフトヤヘイフォントライブラリなどの文字ライブラリに命令を加えることである。
【０００４】
ＦｏｎｔＬａｂなどの、現在一般的な命令を加えるツールは、命令が影響を及ぼす方向を設定する必要があり、各動作は各命令に対応する。この方法は、過剰な回数の動作を伴う。動作の回数が多いほど、命令の長さはより長くなる。文字ライブラリは何千もの文字（すなわち、字、数、シンボルまたは単語）を含むため、複数の設計者が文字ライブラリに命令を加えるという大変な仕事を何ヶ月も要する。過剰な不要の動作は、命令を加える時間を延長させる。さらに、複雑な文字について満足できる効果を達成するためには、繰り返し調整が必要となる。したがって、過剰な回数の動作による長すぎる命令により、文字ライブラリが過大となるおそれがある。
【課題を解決するための手段】
【０００５】
発明の概要
先行技術の欠点について、本発明は、文字ライブラリにおける命令を加える動作を単純化し、かつ命令データのサイズを減少させる、フォントアウトラインの変更に従って命令を発生するための方法およびシステムを提供する。
【０００６】
上記の技術問題を解決するために、本発明は、次の技術的解決策により達成される。
フォントアウトラインの変更に従って命令を発生するための方法は、
（１）  フォントアウトラインの元のデータを読取るステップと、
（２）  フォントアウトラインを修正するステップと、
（３）  フォントアウトラインデータの変更に従って命令を発生するステップと、
（４）  文字ライブラリ内に命令をインポートするステップとを含む。
【０００７】
好ましくは、フォントアウトラインの変更に従って命令を発生するための方法において、ステップ（１）におけるフォントアウトラインの元のデータは、文字を構成するアウトライン曲線の数、ならびに、各アウトライン曲線に対応する点の数、座標および属性を含む。
【０００８】
好ましくは、フォントアウトラインの変更に従って命令を発生するための方法において、ステップ（２）におけるフォントアウトラインの修正は、文字を構成するアウトライン曲線に対応する点の座標を修正することにより達成される。
【０００９】
好ましくは、フォントアウトラインの変更に従って命令を発生するための方法において、ステップ（３）において命令を発生することは、
〈１〉  フォントアウトラインの元のデータおよびフォントアウトラインの修正されたデータを読取るステップと、
〈２〉  フォントアウトラインの元のデータおよびフォントアウトラインの修正されたデータに従ってフォントアウトラインデータの変更を計算するステップと、
〈３〉  フォントアウトラインデータの変更に対応する命令を発生するステップとを含む。
【００１０】
好ましくは、フォントアウトラインの変更に従って命令を発生するための方法において、ステップ〈２〉におけるフォントアウトラインデータの変更の具体的な計算は、文字を構成するアウトライン曲線に対応する各点のＸ座標およびＹ座標の変更値を計算することである。
【００１１】
好ましくは、フォントアウトラインの変更に従って命令を発生するための方法において、ステップ〈３〉における対応する命令を発生する具体的な計算は、
まず、フォントサイズを設定し、距離測定方向を設定し、さらに点移動方向を設定するための命令をそれぞれ生成する；
次に、フォントアウトラインの変更に従って、点移動命令、点アライメント命令、または、点を直線の交点へと移動させる命令を発生させる。方向は、Ｘ方向またはＹ方向である。
【００１２】
好ましくは、フォントアウトラインの変更に従って命令を発生するための方法において、点移動命令、点アライメント命令、および、点を直線の交点に移動させる命令の具体的な計算は、
アウトライン曲線に対応する点がＸまたはＹ方向に移動するとき、点のシリアルナンバーをスタックにプッシュし、点の移動値をスタックにプッシュし、移動命令を入力する；
ＸまたはＹ方向におけるアウトライン曲線に対応する２つの点の座標値が同じ値となるとき、一方の点を参照点として設定し、他方の点のシリアルナンバーをスタックにプッシュし、点アライメント命令を入力する； 
アウトライン曲線に対応する点を２つの直線の交点に移動する必要があるとき、点のシリアルナンバーをスタックにプッシュし、２つの直線の始点および終点のシリアルナンバーをそれぞれスタックにプッシュし、点を直線の交点に移動させる命令を入力することである。
【００１３】
好ましくは、フォントアウトラインの変更に従って命令を発生するための方法において、命令を発生した後、ステップ〈３〉は、命令の分類、組合せおよび最適化の手順も含む。
【００１４】
好ましくは、フォントアウトラインの変更に従って命令を発生するための方法において、命令の分類は、移動方向およびタイプに従って命令を分類することを含み：
移動方向に従う分類および組合せは、点の同じ移動方向の命令のすべてが一括して動作され、移動方向は１度だけ設定されることを示し；
タイプに従う分類および組合せは、点の同じ移動値の命令のすべてが循環的に動作され、点を同じ点に揃える点のすべてが循環的に動作され、点の移動値および参照点は繰り返し設定されないことを示す。
【００１５】
好ましくは、フォントアウトラインの変更に従って命令を発生するための方法において、最適化は、異なるタイプの命令が利用可能であるときには、好ましくは、より小さな長さを有する命令が選択されることを示す。
【００１６】
フォントアウトラインの変更に従って命令を発生するためのシステムは、
フォントアウトラインの元のデータを読取るための読取装置と、
フォントアウトラインを修正するための修正装置と、
フォントアウトラインデータの変更に従って命令を発生するための発生装置と、
命令を文字ライブラリ内にインポートするためのインポート装置とを備える。
【発明の効果】
【００１７】
本発明の方法およびシステムに従うと、フォントアウトラインは直接修正でき、フォントアウトラインの修正は、命令の発生から分離され、命令は、フォントアウトラインデータの変更に従って自動的に発生され、命令は、発生されているときに分類、組合せおよび最適化されることにより、動作が単純化され、命令の長さは減少され、命令を加える効率は向上され、命令データの過剰な量のために文字ライブラリが過大となる問題が解消され得る。
【図面の簡単な説明】
【００１８】
【図１】特定の実施形態に従うフォントアウトラインの変更に基づいて命令を発生するためのシステムの構造図である。
【図２】特定の実施形態に従うフォントアウトラインの変更に基づいて命令を発生するための方法のフローチャートである。
【図３】
【００１９】
【数１】
0005923604.tif 000002
【図４】
【００２０】
【数２】
0005923604.tif 000003
【図５】特定の実施形態に従う命令を発生するための方法のフローチャートである。
【発明を実施するための形態】
【００２１】
好ましい実施形態の詳細な説明
以下、本発明の実施形態を付随の図面とともに詳細に説明する。
【００２２】
図１に図示するように、フォントアウトラインの変更に従って命令を発生するためのシステムは、読取装置１１、修正装置１２、発生装置１３、およびインポート装置１４を含む。
【００２３】
読取装置１１は、フォントアウトラインの元のデータを読取り、フォントアウトラインの元のデータを修正装置１２および発生装置１３それぞれに送信するために用いられる。修正装置１２は、フォントアウトラインを修正し、フォントアウトラインの修正されたデータを発生装置１３に送信するために用いられ、修正装置１２は、手動操作によりフォントアウトラインを修正することができるか、または、修正は、プログラミング言語により自動的に行なわれてもよい。たとえば、いくつかの文字における同じストロークのフォントアウトラインは同じように修正されるか、または、フォントアウトラインは、手動操作およびプログラミング言語の組合せを用いて修正されてもよい。発生装置１３は、読取装置１１から送信されるフォントアウトラインの元のデータ、および、修正装置１２から送信されるフォントアウトラインの修正されたデータに従って、フォントアウトラインデータの変更を得るため；フォントアウトラインデータの変更に従って命令を発生するため；さらに、インポート装置１４に発生された命令を送信するために用いられる。インポート装置１４は、発生装置１３から送信された命令を文字ライブラリ内にインポートするために用いられる。
【００２４】
図２に図示するように、図１に図示するようなシステムにより、ＴｒｕｅＴｙｐｅのすべての文字ライブラリについて、フォントアウトラインの変更に従って命令を発生するための方法は、次のステップにより達成される。
【００２５】
（１）  読取装置１１はフォントアウトラインの元のデータを読取る。
【００２６】
【数３】
0005923604.tif 000004
【００２７】
（２）  修正装置１２はフォントアウトラインを修正する。
フォントアウトラインを修正することは、フォントアウトラインの元のデータにおける点の座標を修正することにより達成され得る。すなわち、フォントアウトラインを修正することは、文字を構成するアウトライン曲線に対応する点の座標を修正することにより行なわれる。たとえば、ある点の元の座標は（０，０）であり、修正された座標は（５，１０）である。点に対応するアウトライン曲線の形状の修正は、アウトライン曲線により構成された文字のフォントアウトラインが修正されるように点を移動させることにより達成される。
【００２８】
（３）  発生装置１３は、フォントアウトラインデータの変更に従って命令を発生する。図５に図示するように、それは次のステップを含む。
【００２９】
〈１〉  フォントアウトラインの元のデータおよびフォントアウトラインの修正されたデータを読取るステップ。
【００３０】
〈２〉  フォントアウトラインの元のデータおよびフォントアウトラインの修正されたデータに従ってフォントアウトラインデータの変更を計算するステップ。
【００３１】
具体的な計算手順は、各点のＸ座標およびＹ座標の変更値を計算することである。たとえば、ある点の元の座標が（０，０）であり、その点の修正された座標が（５，１０）であれば、点の変更は、Ｘ方向に５を加え、Ｙ方向に１０を加えることとなる。文字を構成するアウトライン曲線の数、各アウトライン曲線に対応する点の数および点の属性は変わらない。
【００３２】
〈３〉  フォントアウトラインデータの変更に対応する命令を発生するステップ。
たとえば、Ｘ座標が同じ値となる点については、Ｘ方向における点アライメント命令を加えることができる。Ｘ座標が同じ加えられた値または減少された値を有する点については、Ｘ方向における点移動命令を加えることができる。
【００３３】
ＴｒｕｅＴｙｐｅの命令セットは、座標データから独立した命令系であり、スタック動作、保存動作、ポインタ動作、論理センテンス、算術計算、ジャンプおよびループなどのコンピュータ用命令を含む。
【００３４】
命令を自動的に発生するステップは、次のとおりである（自動的に発生されるすべての命令は、ＴｒｕｅＴｙｐｅの命令セットの下位である）。
【００３５】
まず、フォントサイズを設定する命令を発生し（異なるフォントサイズの同じ文字についてフォントアウトラインにおける異なる問題が存在する可能性があるため、異なる命令を加えられてもよく、フォントサイズが設定されるべきである）、距離測定方向を設定し、さらに、点移動方向をそれぞれ設定する。距離測定方向および点移動方向は、実施条件に依存して当業者により設定され得る。たとえば、距離測定方向および点移動方向は、Ｘ方向またはＹ方向としてそれぞれ設定され得るか、または、予め設定された直線の方向に沿って設定され得る。図３および図４に図示するように、シリアルナンバーが〈２〉である線上点が、図３に図示するような場所から図４に図示するような場所に移動される必要がある場合、まずＸ方向に移動させ、次にＹ方向に移動させることができるか、または、まずＹ方向に移動させ、次にＸ方向に移動させることができる。そうでなければ、移動前のシリアルナンバー〈２〉を有する点の場所と移動後のシリアルナンバー〈２〉を有する点の場所との間に形成される直線の方向に沿って移動させることができる。すなわち、直線の方向に沿って図３に図示するような場所から図４に図示するような場所に直接移動させることができる。
【００３６】
次に、フォントアウトラインの変更に従って、点移動命令、点アライメント命令、および、点を直線の交点に移動させる命令などの命令が発生される。
【００３７】
点移動命令、点アライメント命令、および、点を直線の交点に移動させる命令の具体的な計算手順は、
アウトライン曲線に対応する点がＸまたはＹ方向に移動するとき、点のシリアルナンバーをスタックにプッシュし、点の移動値をスタックにプッシュし、点移動命令を入力し；
ＸまたはＹ方向におけるアウトライン曲線に対応する２つの点の座標値が同じ値となるとき、一方の点を参照点として設定し、他方の点のシリアルナンバーをスタックにプッシュし、点アライメント命令を入力し；
アウトライン曲線に対応する点が２つの直線の交点に移動される必要があるとき、点のシリアルナンバーをスタックにプッシュし、２つの直線の始点および終点のシリアルナンバーをそれぞれスタックに別々にプッシュし、ポイントを直線の交点に移動させる命令を入力することである。
【００３８】
フォントサイズが１４で、シリアルナンバーが４である点がＸ方向に１０移動すると推定した場合の一実施形態を詳細に説明する。
【００３９】
命令を加える前に、まず値の単位変換を行なわなければならない。
点の実際の移動値は、px=10 x 64/wstepであり、
式中、wstepは、画面上の座標単位に対応する１つの画素ユニットの値である。
【００４０】
wstep＝２０と推定すると、px＝３２である。
まず、フォントサイズ１４での命令を設定している間、以下が行なわれる。
【００４１】
ＭＰＰＥＭ［］
ＰＵＳＨＢ［］
１４
ＥＱ［］
ＩＦ［］
……
ＥＩＦ［］
さらに、実行されるべき命令が、「…」の部分に加えられる。
【００４２】
以下は、「…」に置き換えられる命令である。
まず、距離測定方向および点移動方向が次のように設定される。
【００４３】
ＳＶＴＣＡ［１］
さらに、点のシリアルナンバー４が次のようにスタックにプッシュされる。
【００４４】
ＰＵＳＨＢ［］
４
さらに、点の移動値３２が次のようにスタックにプッシュされる。
【００４５】
ＰＵＳＨＢ［］
３２
最後に、点移動命令が次のように入力される。
【００４６】
ＳＨＰＩＸ［］
他の状況では、自動的に命令を発生するプロセスは、上記と同様である。
【００４７】
上記の実施形態では、命令は命令の名称により示される。文字ライブラリでは、命令はすべて２ビット１６進値である。たとえば、ＳＶＴＣＡ［１］の実際の値は、０Ｘ０１である。
【００４８】
〈４〉  移動方向およびタイプに従って命令を分類し、同じタイプの命令を組合せ、同じ機能を有する命令に対してループを実行し、より短い命令に置き換えられ得る命令のシーケンスを最適化する。
【００４９】
座標の変更を有する各点がステップ〈３〉に従って動作されると、同じタイプまたは同じ機能の命令が繰り返し入力され、その結果、命令の長さが長くなりすぎる。命令を単純化するために、命令は、移動方向およびタイプに従って分類され得る。同じタイプの命令が組合され得、同じ機能の命令がループで実行され得る。
【００５０】
移動方向に従う分類および同じタイプの命令の組合せ（同じ点移動方向のすべての命令など）は、同じ点移動方向のすべての命令が一括して実行され、移動方向は１度だけ設定され、点の移動方向はＸ方向またはＹ方向として設定され得ることを示す。たとえば、移動方向がＸ方向として設定された後、Ｘ方向におけるすべての命令が実行され、次に、移動方向がＹ方向として設定され、Ｙ方向におけるすべての命令が実行される。
【００５１】
タイプに従う分類および組合せにより、命令は、一般的に、同じ機能の命令（点の同じ移動値の命令のすべて、および、点を同じ点に揃える命令のすべて）および異なる機能の命令に分けられ得る。すなわち、点の同じ移動値の命令のすべては循環的に実行され、さらに、点を同じ点に揃える命令のすべては循環的に実行され、点の移動値および参照点は繰り返し設定されない。すなわち、同じ機能の命令は循環的に実行され得る。
【００５２】
最適化は、異なるタイプの命令が実行され得るとき、好ましくは、比較的短い長さを有する命令が選択されることを示す。たとえば、直線の交点に移動する点の効果は、点をＸ方向およびＹ方向に沿って別々に移動させることによっても得ることができる。しかし、相対的に、点を直線の交点に移動させる命令はより短い。このような状況では、点移動命令の代わりに、点を直線の交点に移動させる命令が用いられる。
【００５３】
同じ点移動値を有する命令のすべてを循環的に実行する一実施形態を次のように説明する。
【００５４】
以下、シリアルナンバー４、５および６を有する３つの点がＸ方向に１０移動すると仮定する。点のフォントサイズ、距離測定方向および移動方向の設定はここでは省略するが、ステップ〈３〉が参照される。点の実際の移動値は、変換後に３２であると推定する。
【００５５】
移動されるべき点のシリアルナンバーを次のようにスタックにプッシュする。
ＰＵＳＨＢ［］
４５６
移動されるべき点のナンバーを次のようにスタックにプッシュする。
【００５６】
ＰＵＳＨＢ［］
３
ルーピング回数を次のように設定する。
【００５７】
ＳＬＯＯＰ［］
点の移動値３２を次のようにスタックにプッシュする。
【００５８】
ＰＵＳＨＢ［］
３２
点移動命令を次のように入力する。
【００５９】
ＳＨＰＩＸ［］
同じ移動値を有する点については、順に移動することしかできないことが分かる。すなわち、シリアルナンバーが４、５および６である点は、Ｘ方向に順に１０だけ移動される。すなわち、同じ移動値を有する点については、移動命令は１度の動作では完了できず、循環的に実行しなければならない。
【００６０】
（４）  インポート装置１４は命令を文字ライブラリ内にインポートする。
【００６１】
【数４】
0005923604.tif 000005
【００６２】
当業者は、発明の意図および範囲から逸脱することなくさまざまな改良および変更を行なうことができることは明らかである。本発明は、これらの改良および変更が請求の範囲およびその同等物に属する場合、これらの改良および変更を含むことを意図する。
【図１】
0005923604.tif 000006
【図２】
0005923604.tif 000007
【図３】
0005923604.tif 000008
【図４】
0005923604.tif 000009
【図５】
0005923604.tif 000010