(57)【特許請求の範囲】
【請求項１】
複数の文字からなるパラグラフを所定行長さを用いてレイアウトするレイアウト機能を、演算処理装置を備えるコンピュータが実行するための方法において、
（ａ）前記演算処理装置が前記パラグラフの複数の文字を一連のテキストとして定義する段階と、
（ｂ）前記演算処理装置が前記パラグラフの各文字をグリフに置換することによって前記一連のテキストをレイアウトする段階と、
（ｃ）前記演算処理装置が前記一連のテキストの長さを決定する段階と、
（ｄ）前記一連のテキストの長さが前記所定行長さを越えていれば、前記演算処理装置が前記所定行長さに対応する位置のグリフを識別し、識別したグリフが空白グリフであれば、該空白グリフにおいて、前記一連のテキストの前記所定行長さを越えない部分からなる親テキストと、前記一連のテキストの前記所定行長さを越える部分からなる子テキストとに、前記一連のテキストを分割する段階と、
（ｅ）前記演算処理装置が前記子テキストの長さを決定する段階と、
（ｆ）前記演算処理装置が前記親テキストに関し、行揃えされたグリフ位置と行揃えされたグリフ前進値とを決定し、それによって前記演算処理装置が前記親テキストを行揃えする段階を備え、
前記親テキストを行揃えする段階はさらに、
前記演算処理装置が優先行揃え方式を含んだ行揃え情報機能を呼び出す段階と、
前記演算処理装置が前記行揃え情報機能呼出しに応じて、優先行揃え方式がフォントによってサポートされているか否かを確認するための情報を提供する行揃えフォントテーブルをアクセスする段階と、
前記演算処理装置が前記優先行揃え方式がサポートされているか否かを示すと共に、該優先行揃え方式がサポートされていれば、グリフ置換またはグリフ位置決めが必要か否かを示す行揃え情報応答を発行する段階と、
前記演算処理装置が前記行揃え情報応答を判断し、その応答が要求した優先行揃え方式をサポートしていることを示していれば、当該行揃え情報応答を調べ、グリフ置換又はグリフ位置決めが必要であるか否かを調べ、グリフ置換が必要であればグリフ置換機能を呼び出し、グリフ位置決めが必要であればグリフ位置決め機能を呼び出す段階と
を備える方法。
【請求項２】
前記子テキストの長さが前記所定行長さを越えていれば、前記演算処理装置が前記子テキストに対して前記段階(ｃ)〜（ｅ）を繰り返す、請求の範囲１に記載の方法。
【請求項３】
前記演算処理装置が前記一連のテキストをレイアウトする段階が、前記一連のテキストの先頭グリフと末尾グリフとの位置情報を用いて前記一連のテキストの長さを決定する、請求の範囲１に記載の方法。
【請求項４】
前記演算処理装置が前記一連のテキストを親テキストと子テキストとに分割する段階が、
前記所定行長さに対応する位置のグリフを識別し、
識別されたグリフが空白グリフでなければ、１つ前のグリフにさかのぼり、該１つ前のグリフに関するグリフ識別情報を要求する、請求の範囲１に記載の方法。
【請求項５】
演算処理装置を有するコンピュータが前記演算処理装置により読み出して実行することによりパラグラフをレイアウトするコンピュータ実行命令からなるプログラムを格納したコンピュータ読取可能媒体において、
前記コンピュータに、
（ａ）パラグラフを定義する複数の文字からなる一連のテキストを定義する段階と、
（ｂ）前記一連のテキストに関し、前記複数の文字を複数のグリフに置換するためのグリフ置換情報と前記複数のグリフを位置決めするためのグリフ位置決め情報とを含んだレイアウト情報を要求する段階と、
（ｃ）前記一連のテキストの先頭グリフと末尾グリフの座標を要求する段階と、
（ｄ）前記一連のテキストの先頭グリフと末尾グリフの座標を用いて前記一連のテキストの長さを決定する段階と、
（ｅ）前記一連のテキストの長さと所定行長さとを比較する段階と、
（ｆ）前記一連のテキストの長さが前記所定行長さを越えていれば、前記所定行長さに対応する位置のグリフに関するグリフ識別情報を要求する段階と、
そのグリフ識別情報が当該グリフは空白グリフであることを示していれば、該空白グリフにおいて、前記一連のテキストの前記所定行長さを越えない部分からなる親テキストと、前記一連のテキストの前記所定行長さを越える部分からなる子テキストとに、前記一連のテキストを分割する段階と、
（ｇ）前記子テキストに対して前記段階（ｃ）〜（ｆ）を繰り返す段階と、
優先行揃え方式を含んだ行揃え情報機能を呼び出す段階と、
前記行揃え情報機能呼出しに応じて、優先行揃え方式がフォントによってサポートされているか否かを確認するための情報を提供する行揃えフォントテーブルをアクセスする段階と、
前記優先行揃え方式がサポートされているか否かを示すと共に、該優先行揃え方式がサポートされていれば、グリフ置換またはグリフ位置決めが必要か否かを示す行揃え情報応答を発行する段階と、
前記行揃え情報応答を判断し、その応答が要求した優先行揃え方式をサポートしていることを示していれば、当該行揃え情報応答を調べ、グリフ置換又はグリフ位置決めが必要であるか否かを調べ、グリフ置換が必要であればグリフ置換機能を呼び出し、グリフ位置決めが必要であればグリフ位置決め機能を呼び出す段階と
を実現させるためのコンピュータ実行命令からなるプログラムを格納した、コンピュータ読み取り可能媒体。
【請求項６】
前記グリフが空白グリフでなければ、１つ前のグリフにさかのぼり、該１つ前のグリフに関するグリフ識別情報を要求する段階をさらに前記コンピュータに実現させるためのコンピュータ実行命令からなるプログラムを格納した、請求の範囲５に記載のコンピュータ読取可能媒体。
【請求項７】
コンピュータの演算処理装置がクライアント処理（２０２）及びサーバ処理（２０８）を実行し、かつこれらクライアント処理とサーバ処理間の通信を前記演算処理装置が制御して複数の文字からなるパラグラフを所定行長さを用いてレイアウトするレイアウト機能を実現するために、前記演算処理装置が実行する通信方法において、
前記演算処理装置が前記クライアント処理を実行してパラグラフを定義する複数の文字からなる一連のテキストを定義する段階と、
前記演算処理装置が前記クライアント処理を実行して前記一連のテキストをレイアウトする段階と、
前記演算処理装置が前記クライアント処理を実行して一連のテキストが所定行長さを越えるか否かを決定する段階と、
前記演算処理装置が前記クライアント処理を実行して長さ計算機能を呼び出す段階と、
前記演算処理装置が前記サーバ処理を実行して前記長さ計算機能呼出しを受け取り、前記一連のテキストの先頭グリフと末尾グリフの座標を決定する段階と、
前記演算処理装置が前記クライアント処理を実行して前記一連のテキストの先頭グリフと末尾グリフの座標と前記所定行長さとを比較する段階と、
前記一連の長さが前記所定行長さを越えていれば、前記演算処理装置が前記クライアント処理を実行して前記一連のテキストを親テキストと子テキストとに分割する段階と、
前記演算処理装置が前記クライアント処理を実行して前記子テキストに対して前記一連のテキストが所定行長さを越えるか否かを決定する段階と、
前記演算処理装置が前記クライアント処理を実行して優先行揃え方式を含んだ行揃え情報機能を呼び出す段階と、
前記演算処理装置が前記サーバ処理を実行して前記行揃え情報機能呼出しを受け取り、優先行揃え方式がフォントによってサポートされているか否かを確認するための情報を提供する行揃えフォントテーブルをアクセスする段階と、
前記演算処理装置が前記サーバ処理を実行して前記優先行揃え方式がサポートされているか否かを示すと共に、該優先行揃え方式がサポートされていれば、グリフ置換またはグリフ位置決めが必要か否かを示す行揃え情報応答を発行する段階と、
前記演算処理装置が前記クライアント処理を実行して前記行揃え情報応答を受け取り、その応答が要求した優先行揃え方式をサポートしていることを示していれば、当該行揃え情報応答を調べ、グリフ置換又はグリフ位置決めが必要であるか否かを調べ、グリフ置換が必要であればグリフ置換機能を呼び出し、グリフ位置決めが必要であればグリフ位置決め機能を呼び出す段階とを備え、
前記分割する段階が、
前記演算処理装置が前記クライアント処理を実行して前記所定行長さに対応する位置のグリフを選択グリフとして選択し、
前記演算処理装置が前記クライアント処理を実行して前記選択グリフを識別するためのグリフ識別機能を呼び出し、
前記演算処理装置が前記サーバ処理を実行して前記グリフ識別機能呼出しを受け取り、前記選択グリフを識別するための指標値を決定し、
前記選択グリフが空白グリフであれば、前記演算処理装置が前記クライアント処理を実行して該空白グリフにおいて前記一連のテキストを分割し、
前記選択グリフが空白グリフでなければ、前記演算処理装置が前記クライアント処理を実行して１つ前のグリフを第２選択グリフとして選択し、該第２選択グリフを用いて前記グリフ識別機能を呼び出し、それに対する応答を受け取る各段階を繰り返す方法。
【請求項８】
前記一連のテキストをレイアウトする段階にあって、前記演算処理装置が前記クライアント処理を実行してグリフ置換機能を呼び出し、
前記演算処理装置が前記サーバ処理を実行して前記グリフ置換機能呼出しを受け取り、グリフ置換フォントテーブルにアクセスし、
前記演算処理装置が前記サーバ処理を実行してグリフ置換情報のグリフリストを発行し、
前記演算処理装置が前記クライアント処理を実行してグリフ位置決め機能を呼び出し、
前記演算処理装置が前記サーバ処理を実行して前記グリフ位置決め機能呼出しを受け取り、グリフ位置フォントテーブルにアクセスし、
前記演算処理装置が前記サーバ処理を実行してグリフ位置情報を含む位置配列を発行する、請求の範囲７に記載の方法。
【請求項９】
コンピュータの演算処理装置がクライアント処理（２０２）及びサーバ処理（２０８）を実行し、かつこれらクライアント処理とサーバ処理間の通信を前記演算処理装置が制御するための通信方法において、
前記演算処理装置が前記クライアント処理を実行して優先行揃え方式を含んだ行揃え情報機能を呼び出す段階と、
前記演算処理装置が前記サーバ処理を実行して前記行揃え情報機能呼出しを受け取り、優先行揃え方式がフォントによってサポートされているか否かを確認するための情報を提供する行揃えフォントテーブルをアクセスする段階と、
前記演算処理装置が前記サーバ処理を実行して前記優先行揃え方式がサポートされているか否かを示すと共に、該優先行揃え方式がサポートされていれば、グリフ置換またはグリフ位置決めが必要か否かを示す行揃え情報応答を発行する段階と、
前記演算処理装置が前記クライアント処理を実行して前記行揃え情報応答を受け取り、その応答が要求した優先行揃え方式をサポートしていることを示していれば、当該行揃え情報応答を調べ、グリフ置換又はグリフ位置決めが必要であるか否かを調べ、グリフ置換が必要であればグリフ置換機能を呼び出し、グリフ位置決めが必要であればグリフ位置決め機能を呼び出す段階を備えた方法。
【請求項１０】
さらに、前記行揃えされた一連のテキストが所定行長さに等しくなければ、前記演算処理装置が前記クライアント処理を実行してより厳しい行揃えフォントテーブルを用いて、前記テキスト行揃え機能を呼び出す段階を備える、請求項９に記載の方法。
【請求項１１】
前記グリフ位置情報が、グリフ位置値とグリフ前進値とを含む、請求の範囲９に記載の方法。
【発明の詳細な説明】
技術分野
本発明は、テキストのレイアウトに関する。特に本発明は、レイアウトサービスライブラリを用いたパラグラフのレイアウトに関する。
背景技術
コンピュータが事務所、学校、家庭において一般的になるにつれ、電子文書が普及してきた。電子文書は紙の文書に取って代わりつつある。例えば紙のメモの代わりに電子文書が配布されることもある。紙の文書の代わりに電子文書の使用を促すには、電子文書のテキストは読みやすく言語的に正確でなければならない。電子文書のテキストは、一般に1つ以上のフォントを用いて描画される。フォントには、エリアル、タイムズニューローマン、クーリエ等がある。フォントとは字体である。電子文書用のフォントは、モニタやプリンタなどの画素表示装置に出力した際、文書が読みやすいように設計される。電子文書のテキストを特定のフォントを使って描画する場合、そのテキストはグリフによって表示される。グリフとは、1つ以上の文字イメージである。例えば1つのグリフは、小文字の「f」のように1つの文字を表す。また1つのグリフは、合字の「fi」のように一続きの文字を表す。表示装置に文書を描画するには、その文書の各文字をグリフに変換し、それらグリフを表示装置に表示する。
一般に、グリフ情報を含んだフォント情報は、フォントテーブルに格納される。例えば、本発明の譲受人であるワシントン州レドモンドのマイクロソフト社が公表したオープンタイプレイアウトフォント規格は、5つのフォントテーブルを含む。すなわち(1)グリフ置換テーブル、(2)グリフ位置テーブル、(3)行揃えテーブル、(4)ベースラインテーブル、(5)グリフ定義テーブルである。これらオープンタイプレイアウトフォントテーブルは、文字とグリフ間の対応付けにおいて、前後関係を考慮した対応付けをサポートする。すなわち、合字、位置に応じた形状の字、置換字、代替字をサポートする。
ワードプロセッシングプログラムは、フォントテーブル内の情報を使って電子文書のテキストをレイアウトし描画できる。電子文書は、まずレイアウトされ、次に表示装置等の出力装置に描画される。文書のレイアウトは、一般にパラグラフレイアウトを含む。パラグラフをレイアウトする際、ワードプロセッシングプログラムは、パラグラフテキストを各行に分解し、各行ごとにレイアウトする。ある行がレイアウトされると、その行は拡大または縮小する可能性がある。するとワードプロセッシングプログラムは、パラグラフテキストを再分解しなければならない。ワードプロセッシングプログラムがテキストを再分解した場合、そのテキストは再びレイアウトされねばならない。テキストの再分解および再レイアウトを繰り返すと、パラグラフの描画時間が長くなる。このような分解およびレイアウトの繰り返しを解消できれば、パラグラフの描画時間は短くなる。パラグラフのレイアウトが早くなれば、文書の表示が早くなる。例えばある文書の第25ページを表示する場合、ワードプロセッシングプログラムは、25ページのテキストをレイアウトせねばならず、各ページは1つ以上のパラグラフを持つのが普通である。
行揃えが有効であれば、パラグラフの各行は行揃えされる。ワードプロセッシングプログラムは、行揃えを行うに当たり、フォントテーブルに格納されている行揃え候補を使う。この行揃え候補は、テキスト行においてグリフを調整するためにワードプロセッシングプログラムが使うことのできる特定の動作の表である。
パラグラフをレイアウトしたりテキストの行揃えを行うに当たり、ワードプロセッシングプログラムは、フォントテーブルおよびそこに格納されている情報にアクセスし操作できねばならない。このような操作および利用は複雑なため、多くのワードプロセッシングプログラムはそれができない。従ってフォントテーブルに用意されている高度表示機能の多くは、ワードプロセッシングプログラムに利用されていない。ワードプロセッシングプログラムは、レイアウトサービスライブラリ等のインタフェースを用いてフォントテーブルにアクセスし操作できれば、用意されている機能のすべてを簡単に利用できよう。
従ってこの分野においては、パラグラフをレイアウトしテキストを行揃えするための効率的な方法が要求される。さらにこの分野では、フォントテーブルとのインタフェースを行いパラグラフのレイアウトおよび行揃えを行うためのレイアウトサービスライブラリが要求される。
発明の開示
上記要求に応えるため、本発明は、パラグラフのレイアウト方法を提供して行分解の繰り返しを解消し、レイアウトサービスライブラリを提供してフォントテーブルにアクセスしパラグラフのレイアウトおよび行揃えをサポートする。このレイアウトサービスライブラリは、フォントテーブルにアクセスし、ワードプロセッシングプログラムに対してテキストレイアウト候補を提供する。ワードプロセッシングプログラムは、アプリケーションプログラムインタフェースセットを介してレイアウトサービスライブラリとのインタフェースを行う。
パラグラフをレイアウトする場合、ワードプロセッシングクライアントは、パラグラフの長さに関わらず、パラグラフの全体を一連のテキストとして定義する。この一連のテキストの各文字はグリフに置換され、それらグリフは位置決めされレイアウトされる。一連のテキストの文字をグリフに置換する場合、ワードプロセッシングクライアントは、グリフ置換機能を呼び出す。これに応じ、レイアウトサービスライブラリは、前記一連のテキストの文字に対応する代替グリフの候補一覧を返す。グリフを位置決めする場合、ワードプロセッシングクライアントは、グリフ位置決め機能を呼び出す。レイアウトサービスライブラリは、グリフ位置テーブルにアクセスし、前記一連のテキストに対応するグリフのX値、Y値、前進値を返す。
一連のテキストがレイアウトされると、その一連のテキストの長さと所定行長さとが比較される。ワードプロセッシングプログラムは、該一連のテキストの長さを計算するに当たり、長さ計算機能を呼び出す。レイアウトサービスライブラリは、該一連のテキストの先頭文字および末尾文字の位置をワードプロセッシングプログラムに返す。ワードプロセッシングプログラムは、その位置情報を使い前記一連のテキストの長さを計算する。ワードプロセッシングプログラムは、該一連のテキストの長さと所定行長さとを比較する。一連のテキストの長さが所定長さを越えていれば、一連のテキストは、親テキストと子テキストとに分割される。親テキストは、前記一連のテキストのうち前記所定行長さを超えない部分を含み、子テキストはその残りを含む。前記一連のテキストがラテン書体を使ってれば、そのテキストは空白文字において分割される。そのテキストがハイフネーションを使用していれば、そのテキストは音節の後ろで分割される。非ラテン書体を使う一連のテキストは、他の箇所で分割される。
空白文字を探すため、ワードプロセッシングプログラムは、文字識別機能を呼び出し、行末文字の識別を要求する。レイアウトサービスライブラリは、行末文字を識別する。行末文字が空白文字であれば、ワードプロセッシングプログラムは、その空白文字において一連のテキストを分割する。行末文字が空白文字でなければ、ワードプロセッシングプログラムは、空白文字が見つかるまで一連のテキストをさかのぼる。子テキストの長さが所定行長さを越えていると、子テキストに対して前記行分割処理が繰り返され、子テキストは第1子テキストと第2子テキストに分割される。このレイアウトプロセスは、最後の子テキストの長さが所定行長さを越えなくなるまで繰り返す。
行揃えが有効であれば、ワードプロセッシングプログラムは、パラグラフの各行を揃える。例えばワードプロセッシングプログラムは、親テキストとすべての子テキストとの行揃えを行う。一連のテキストの行揃えを行う場合、ワードプロセッシングクライアントは、優先行揃え方式を選択し行揃え情報機能を呼び出す。優先行揃え方式は、許容行揃え動作の程度を示す。レイアウトサービスライブラリは、行揃え情報機能の呼出しを受け取り、要求された優先行揃え方式をフォントがサポートしているか否かを決定する。フォントがその要求された優先行揃え方式をサポートしていれば、レイアウトサービスライブラリは、その優先行揃え方式がグリフ置換またはグリフ位置決めを必要とするか否かを決定する。レイアウトサービスライブラリは、優先行揃えサポート値、グリフ置換変更値、グリフ位置変更値をワードプロセッシングプログラムに返す。これら値は、要求された優先行揃え方式がサポートされているか否か、それがサポートされている場合には、グリフ置換またはグリフ位置決めが必要か否かを示す。
優先行揃え方式がサポートされており、グリフ位置決めおよびグリフ置換が必要ない場合、ワードプロセッシングプログラムは、テキスト行揃え機能を呼び出す。これに応じ、レイアウトサービスライブラリは、一連のテキストに関する行揃え配置値および前進値を決定する。優先行揃え方式がグリフ置換を必要としていれば、ワードプロセッシングプログラムは、テキスト行揃え機能に先立ち、グリフ置換機能を呼び出さねばならない。同様に、グリフ位置決めが必要であれば、ワードプロセッシングプログラムは、テキスト行揃え機能に先立ち、グリフ位置決め機能を呼び出さねばならない。選択した優先行揃え方式が一連のテキストの行揃えを実行できない場合、ワードプロセッシングプログラムは、より厳しい優先行揃え方式を選択できる。
【図面の簡単な説明】
図1は、本発明の一実施例の動作環境としてのパーソナルコンピュータを示すブロック図である。
図2は、本発明の一実施例に基づくコンピュータシステムの構造を示すブロック図である。
図3は、本発明の一実施例に基づくパラグラフ配置ステップを示すフローチャートである。
図4Aおよび4Bは、本発明の一実施例に基づく一連のテキストの行揃えステップを示すフローチャートである。
発明の詳細な説明
本発明は、レイアウトサービスライブラリを用いてパラグラフをレイアウトすることに関する。本発明の一実施例は、ワシントン州レドモンドのマイクロソフト社が販売する「ウインドウズ」等のオペレーティングシステムに内蔵できる。本発明の他の実施例は、マイクロソフト社が販売する「インターネットエクスプローラ」等のインターネットブラウザや、同社が販売する「パブリッシャ」等のパブリシングプログラムに内蔵できる。本発明の概略を説明する。パラグラフ全体は、一連のテキストとして定義される。この一連のテキストの各文字はグリフに置換され、それらグリフは位置決めされレイアウトされる。一連のテキストがレイアウトされると、該一連のテキストの長さは所定行長さと比較される。該一連のテキストの長さが所定行長さを越えていれば、該一連のテキストは、親テキストと子テキストに分割される。親テキストは、一連のテキストの所定行長さを超えない部分を含み、子テキストは、その残りの部分を含む。行揃えが有効であれば、親テキストは行揃えされる。子テキストが作成された場合、その長さが所定行長さと比較される。子テキストの長さが所定行長さより長ければ、最後の子テキストの長さが所定行長さを越えなくなるまで、前記処理を繰り返す。レイアウトサービスライブラリは、パラグラフレイアウトおよび行揃えをサポートするテキスト処理機能を提供する。
動作環境の例
本発明を実施するための適切なコンピューティング環境を図1に基づき簡単に説明する。本発明は、パーソナルコンピュータのオペレーティングシステム上で実行されるアプリケーションプログラムとして説明するが、当業者には明らかなように、本発明は他のプログラムモジュールで実行してもよい。一般に、プログラムモジュールは、ルーチン、プログラム、構成要素、データ構造等を含み、これらが特定のタスクを実行したり、特定の抽象データ型を実行する。さらに当業者には明らかなとおり、本発明は、携帯装置、マルチプロセッサシステム、マイクロプロセッサをベースとした民生電子機器、プログラム可能民生電子機器、ミニコンピュータ、メインフレームコンピュータ等、他のコンピュータシステム構成でも実行できる。本発明はまた、分散コンピューティング環境においても実行できる。分散コンピューティング環境は、通信ネットワークを介してリンクした遠隔の処理装置によってタスクを実行し、プログラムモジュールを局所記憶装置や遠隔記憶装置に置く。
図1の例において、本発明を実行するシステムは、従来のパーソナルコンピュータ20を含む。このパーソナルコンピュータは、処理装置21と、システムメモリ22と、システムバス23とを含む。システムバス23は、システムメモリと処理装置21とを接続する。システムメモリ22は、リードオンリーメモリ(ROM)24と、ランダムアクセスメモリ(RAM)25とを含む。基本ルーチンを含む基本入出力システム(BIOS)26は、ROM24に格納される。この基本ルーチンは、例えばスタートアップ時に、パーソナルコンピュータ20内の要素間での情報の転送をサポートする。パーソナルコンピュータ20はさらに、ハードディスク装置27と、例えばリムーバブルディスク29を読み書きするための磁気ディスク装置28と、例えばCD-ROMディスク31等の光媒体を読み書きするための光ディスク装置30とを含む。ハードディスク装置27と磁気ディスク装置28と光ディスク装置30とは、それぞれハードディスク装置インタフェース32と磁気ディスク装置インタフェース33と光ディスク装置インタフェース34とを介して、システムバス23に接続される。これら装置および関連するコンピュータ読取り可能媒体は、パーソナルコンピュータ20用の不揮発性記憶装置として働く。コンピュータ読取り可能媒体として、ハードディスクとリムーバブル磁気ディスクとCD-ROMディスクとを示したが、当業者には明らかなように、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ等も、コンピュータ読取り可能媒体として前記動作環境で使える。
前記記憶装置およびRAM25は、多くのプログラムモジュールを格納できる。例えばオペレーティングシステム35、1つ以上のアプリケーションプログラム36、他のプログラムモジュール37、プログラムデータ38、レイアウトサービスライブラリ39等を格納できる。ユーザは、キーボード40や例えばマウス42等のポインティング装置を介して、パーソナルコンピュータ20にコマンドや情報を入力できる。他の入力装置(図示せず)として、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送用アンテナ、スキャナ等も利用できる。一般にこれら入力装置は、システムバスに接続したシリアルポートインタフェース46を介して処理装置21に接続されるが、ゲームポートや汎用シリアルバス(USB)等の他のインタフェースを介して接続してもよい。モニタ47等の表示装置は、ビデオアダプタ48等のインタフェースを介してシステムバス23に接続される。一般にパーソナルコンピュータは、前記モニタに加えてスピーカやプリンタ等の周辺出力装置(図示せず)も含む。
パーソナルコンピュータ20は、遠隔コンピュータ49等の1つ以上の遠隔コンピュータへの論理接続を用いたネットワーク環境で動作させてもよい。遠隔コンピュータ49は、サーバ、ルータ、同等装置、他のネットワークノード等であり、パーソナルコンピュータ20に関連して説明した要素の多くあるいは全部を含む。ただし図1は、記憶装置50しか示していない。図1の論理接続は、ローカルエリアネットワーク(LAN)51と広域ネットワーク(WAN)52とを含む。このようなネットワーク環境は、事務所、企業コンピュータネットワーク、イントラネット、インターネットにおいて一般的である。
LAN環境で使用される場合、パーソナルコンピュータ20は、ネットワークインタフェース53を介してLAN51に接続される。WAN環境で使用される場合、パーソナルコンピュータ20はモデム54等の手段を含み、インターネット等のWAN52を介して通信を確立する。モデム54は内蔵型あるいは外付け型であり、シリアルポートインタフェース46を介してシステムバス23に接続される。ネットワーク環境の場合、パーソナルコンピュータ20に関連するプログラムモジュールの全部または一部は、遠隔記憶装置に格納できる。図示のネットワーク接続は例であり、他の手段を使ってコンピュータ間に通信リンクを確立しても良い。
レイアウトサービスライブラリの実施例
本発明の一実施例に基づくワードプロセッシングプログラムは、レイアウトサービスライブラリを用いて表示装置にパラグラフを描画する。この実施例をレイアウトサービスライブラリ実施例と呼ぶ。レイアウトサービスライブラリ実施例は、オープンタイプレイアウトフォント規格に適合したフォントと共に使用できる。オープンタイプレイアウトフォント規格は、グリフ、書体、言語システム、文字特性を定義する。グリフは、1つ以上の文字を表現するための文字イメージである。1つのグリフは、例えば小文字の「f」のように単一の文字を表す。あるいは1つのグリフは、小文字の「fi」のように一続きの文字を表す。書体は、1つ以上の言語によって使用される関連文字のグループである。ラテン、アラビック、タイは、書体の例である。書体は、各言語システムで共用できる。例えばラテン書体は、英語、フランス語、ドイツ語の言語システムで使用される。各言語システムは、様々な機能や文字特性をサポートできる。オープンタイプレイアウトフォントは、斜体字特性と合字特性とを含む多くの文字特性をサポートする。斜体字特性は、既定のグリフを代替グリフに置換する。合字特性は、一続きのグリフを合字グリフに置換する。
オープンタイプレイアウトフォントは、5つのフォントテーブルを使う。すなわち(1)グリフ置換テーブル、(2)グリフ位置テーブル、(3)行揃えテーブル、(4)ベースラインテーブル、(5)グリフ定義テーブルである。これらフォントテーブルは、フォントの文字特性をサポートする情報を含む。例えばグリフ置換テーブルは、グリフ置換に関する情報を含み、単一グリフ置換、1対多置換(合字分解)、美的置換、多グリフ置換(合字)、前後関係グリフ置換をサポートする情報を含む。グリフ位置テーブルは、グリフの位置決めに関する情報を含み、X値、Y値、前進値を提供する。グリフ位置決め情報は、単一調整(例えば上付きおよび下付のサポート)、ペア調整(例えばカーニングのサポート)、筆記体連結(例えば筆記体のサポート)、MarkToBase連結(例えばアラビア語、ヘブライ語、ベトナム語における母音字、発音区別記号、音声記号の位置決めのサポート)、MarkToLigature連結(例えば合字の周囲に母音字を位置決めすることのサポート)、MarkToMark連結(例えばベトナム語における母音発音区別記号に対する音声記号の位置決めのサポート)、前後関係における位置決め(例えば文脈において1つ以上のグリフを位置決めすることのサポート)を提供する。ベースラインテーブルは、複数のテキスト行を行揃えるための情報を提供する。行揃えテーブルは、テキストを行揃えするための情報を提供する。グリフ定義テーブルは、グリフを分類し連結点および合字カレットを識別するための情報を提供する。
ワードプロセッシングプログラムは、レイアウトサービスライブラリが提供するこれら機能を利用してテキストをレイアウトする。レイアウトサービスライブラリは、フォントテーブルにアクセスし、ワードプロセッシングプログラムに対してテキストレイアウトに関する候補を示す。ワードプロセッシングプログラムは、これら候補の一部または全部を実行する。どれも実行しないこともできる。ワードプロセッシングプログラムは、レイアウトサービスライブラリに対し、これら機能の呼出しを行う。例えばワードプロセッシングプログラムは、一連のテキストを定義しそれを機能呼出しに関連付ける。一連のテキストとは、特定書体および特定言語システムにおける特定サイズの特定フォントを使用した一続きのテキストである。ワードプロセッシングプログラムは、各機能について追加のパラメータを定義できる。例えば行揃え機能を実行する場合、ワードプロセッシングクライアントは、一連のテキストと所定行長さとを定義する。
機能呼出しに応答し、レイアウトサービスライブラリは、レイアウトデータをワードプロセッシングプログラムに返す。このレイアウトデータは、例えばレイアウトサービスライブラリが定義するデータ構造に格納される。このデータ構造に含まれるレイアウト候補を実施するに当たり、ワードプロセッシングプログラムは、ラスタライザにそのデータ構造を知らせる。ラスタライザは、レイアウト候補を使ってテキストを描画する。パラグラフレイアウト方法をサポートするために使われる機能呼出しおよびデータ構造は、「レイアウトサービスライブラリインタフェース」の章で詳しく説明する。
レイアウトサービスライブラリのシステム構成
図2は、本発明のレイアウトサービスライブラリ実施例を実現するためのシステム構成を示す。ワードプロセッシングプログラム202または他のプログラムは、文書テキストファイル210からのテキストを表示装置200に表示する。この文書テキストは、レイアウトサービスライブラリ208が提供するテキスト処理機能を使って描画される。レイアウトサービスライブラリ208は、図2においてオペレーティングシステム204の一部だが、ワードプロセッシングプログラム202とオペレーティングシステム204との間に配置した動的リンクライブラリであっても良い。レイアウトサービスライブラリ208は、1セット以上のフォントテーブル212a、212b…212nとのインタフェースを行う。レイアウトサービスライブラリ208は、フォントテーブル212a、212b…212nにアクセスし、ワードプロセッシングプログラム202に対してレイアウト情報とレイアウト候補とを提供する。ワードプロセッシングプログラム202はクライアント処理と見なすことができ、レイアウトサービスライブラリ208はサーバ処理と見なすことができる。ワードプロセッシングプログラム202は、アプリケーションプログラムインタフェース(API)セットを用いてレイアウトサービスライブラリ208と連絡する。APIにアクセスする場合、ワードプロセッシングプログラムは、レイアウトサービスライブラリに対して機能呼出しを行う。
ワードプロセッシングプログラムからの機能呼び出しに応じ、レイアウトサービスライブラリは、フォントテーブルにアクセスしレイアウト情報をワードプロセッシングプログラムに渡す。ワードプロセッシングプログラムは、このレイアウト情報を使いパラグラフをレイアウトできる。ワードプロセッシングプログラムは、例えばレイアウト用の文字と文字特性とを指定し、レイアウトサービスライブラリは、それら文字と文字特性とを適切なグリフと参照表とに変換する。
表示装置200に文書テキスト210を表示するため、ワードプロセッシングプログラム202は、ラスタライザ206を使う。ラスタライザ206は、例えばオペレーティングシステム204内に配置される。ラスタライザ206は、出力装置200にテキストを描画するための情報をフォントテーブル212から取得する。
パラグラフレイアウト
図3は、レイアウトサービスライブラリを用いてパラグラフをレイアウトするための各ステップを示す。ステップ300において、ワードプロセッシングプログラムは、パラグラフ全体を一連のテキストとして定義する。この一連のテキストは、ステップ302〜304においてレイアウトされる。ステップ302において、ワードプロセッシングクライアントは、レイアウトサービスライブラリに対してグリフ置換機能を呼び出す。これに応じ、レイアウトサービスライブラリは、フォントテーブルにアクセスし、どの文字をどのグリフで置換するかを決定する。レイアウトサービスライブラリは、グリフ置換候補のリストを返す。前記一連のテキストの文字がグリフに置換されると、ワードプロセッシングプログラムは、ステップ304においてグリフ位置決め機能を呼び出す。レイアウトサービスライブラリは、グリフ位置テーブルにアクセスし、前記一連のテキスト用のグリフ位置情報を決定し、返す。このグリフ位置情報は、前記一連のテキストの各グリフについて、X値、Y値、前進値を示す。
前記一連のテキストがレイアウトされると、ステップ306において、その一連のテキストの長さと所定行長さとが比較される。一連のテキストの長さを決定するため、ワードプロセッシングプログラムは、レイアウトサービスライブラリの長さ計算機能を呼び出す。これに応じ、レイアウトサービスライブラリは、前記一連のテキストのグリフ位置を文字位置に変換し、前記一連のテキストの開始位置と終了位置とを決定する。レイアウトサービスライブラリは、前記開始位置と終了位置の座標をワードプロセッシングプログラムに返す。右から左へのレイアウト方向の場合、前記開始位置は先頭文字の左または上の座標を示し、終了位置は末尾文字の右または下の座標を示す。ワードプロセッシングプログラムは、前記開始位置および終了位置と所定行長さを比較し、前記一連のテキストが所定行長さを越えるか否かを決定する。前記一連のテキストの長さが、所定行長さより短いか同一であれば、パラグラフレイアウトは完了し、ステップ306の「No」の分岐をたどってステップ314に進む。前記一連のテキストが所定長さより長ければ、ステップ306の「Yes」の分岐をたどってステップ308に進む。
ステップ308において、ワードプロセッシングプログラムは、レイアウトサービスライブラリの文字識別機能を呼び出し、行末文字の識別を要求する。レイアウトサービスライブラリは、グリフ位置を文字位置に変換し、行末文字を識別する。行末文字が空白であれば、ステップ308の「Yes」の分岐をたどってステップ312に進み、前記一連のテキストを親テキストと子テキストに分割する。ワードプロセッシングプログラムは、前記一連のテキストを空白文字で分割する際、親テキストが所定行長さを越えないように、そして子テキストが残りのテキストを含むようにする。
行末文字が空白文字でなければ、ワードプロセッシングプログラムは、ステップ310において、前記一連のテキストを1文字さかのぼり、その文字位置の文字の識別を要求する。レイアウト方向が左から右であれば、ワードプロセッシングプログラムは、行末文字のすぐ左の文字の識別を要求する。レイアウト方向が右から左であれば、ワードプロセッシングプログラムは、行末文字のすぐ右の文字の識別を要求する。ワードプロセッシングプログラムは、空白文字が見つかるまで、前記一連のテキストをさかのぼり続ける。空白文字が見つかれば、ステップ312において一連のテキストを分割する。
ステップ312は、ステップ306へ戻る。ステップ306において、子テキストの長さが所定行長さと比較される。子テキストの長さが所定行長さより短いか等しければ、パラグラフレイアウトは完了し、ステップ314へ進む。子テキストの長さが所定行長さより長ければ、ステップ308へ進む。ステップ308において、ワードプロセッシングプログラムは、行末文字の識別を要求する。行末文字が空白文字でなければ、ステップ310へ進む。ステップ310において、ワードプロセッシングプログラムは、1文字さかのぼり、その位置の文字の識別を要求する。ワードプロセッシングプログラムは、空白文字が見つかるまで1文字ずつさかのぼる。空白文字が見つかれば、ステップ312へ進み、その空白文字において子テキストを第1子テキストと第2子テキストに分割する。これらステップ306〜312は、最後の子テキストの長さが所定行長さを越えなくなるまで繰り返される。そしてパラグラフレイアウトは、ステップ314において完了する。
行揃え
ワードプロセッシングプログラムは、行揃えが有効であれば、一連のテキストを行ごとに揃える。ステップ312において一連のテキストが親テキストと子テキストに分割されると、親テキストは、図4A、4Bに示すステップに従って行揃えされる。図4Aのステップ400において、一連のテキストが定義される。このステップ400で定義される一連のテキストは、ステップ312で定義された親テキストでも良い。一連のテキストが定義されると、その行長さが所定行長さに等しいか否かがステップ402において決定される。一連のテキストの行長さが所定行長さに等しければ、ステップ402の「Yes」の分岐をたどってステップ420に進み、行揃えは完了する。一連のテキストの行長さが所定行長さに等くなければ、ステップ402の「No」の分岐をたどってステップ404に進む。ステップ404において、ワードプロセッシングプログラムは、優先行揃え方式を選択する。この優先行揃え方式は、その行を揃えるために許される変更の度合いを示す。例えば第1の優先行揃え方式は、単語間隔調整など最も緩やかな行揃え調整である。第2の優先行揃え方式は、例えばグリフの再置換や再配置など、より強い行揃え調整である。
ワードプロセッシングプログラムは、ステップ404において優先行揃え方式を選択すると、レイアウトサービスライブラリに対して行揃え情報機能を呼び出し、要求した優先行揃え方式がフォントによってサポートされているか否かを確認する。レイアウトサービスライブラリは、フォントテーブルにアクセスし、当該優先行揃え方式がサポートされているか否かを決定する。その優先行揃え方式がサポートされていれば、グリフ置換および/またはグリフ位置決めが必要か否かを決定する。ステップ406において、ワードプロセッシングプログラムは、前記行揃え情報機能呼出しに対するレイアウトサービスライブラリの応答を受け取る。その応答が、要求した優先行揃え方式がサポートされていることを示していれば、ステップ408に進む。前記応答が、要求した優先行揃え方式がサポートされていないことを示していれば、行揃えエラーが発生し、ステップ406からステップ422へ進む。
要求した優先行揃え方式がサポートされていれば、ステップ406からステップ408へ進む。ステップ408において、ワードプロセッシングプログラムは、行揃え情報機能呼出しに対する応答を調べ、グリフ置換が必要か否かを決定する。グリフ置換が必要であれば、ステップ408の「Yes」の分岐をたどりステップ410へ進む。ステップ410において、ワードプロセッシングプログラムは、レイアウトサービスライブラリのグリフ置換機能を呼び出す。この呼び出しは、優先行揃え方式を示すパラメータを含む。グリフ置換機能の呼び出しに応じ、レイアウトサービスライブラリは、置換されたグリフのリストを返す。優先行揃え方式がグリフ置換を必要としていなければ、ステップ408の「No」の分岐をたどって図4Bのステップ412へ進む。
ステップ412において、ワードプロセッシングプログラムは、行揃え情報機能呼び出しに対するレイアウトサービスライブラリの応答を調べ、優先行揃え方式がグリフ位置決めを必要としているか否かを決定する。優先行揃え方式がグリフ位置決めを必要としていれば、ステップ414において、ワードプロセッシングプログラムは、グリフ位置決め機能を呼び出す。この呼び出しは、優先行揃え方式を示すパラメータを含む。レイアウトサービスライブラリは、グリフ位置情報を返す。このグリフ位置情報は、各グリフのX値、Y値、前進値を含む。優先行揃え方式がグリフ位置決めを必要としていなければ、ステップ412の「No」の分岐をたどってステップ416へ進む。
ステップ416において、ワードプロセッシングプログラムは、テキスト行揃え機能を呼び出す。この呼び出しは、優先行揃え方式と所定行長さとを示す。レイアウトサービスライブラリは、優先行揃え方式が許容する調整を行って一連のテキストを行揃えし、行揃えされた位置値のリストと行揃えされた前進値のリストとを返す。レイアウトサービスライブラリから行揃え情報を受け取ると、ワードプロセッシングプログラムは、ステップ418において、行揃えされた一連のテキストの長さが所定行長さに等しいことを確認する。ワードプロセッシングプログラムは、行長さ計算機能を呼び出し、一連のテキストの開始位置と終了位置を決定する。ワードプロセッシングプログラムは、これら開始位置と終了位置を使用し、一連のテキストの長さを計算する。計算された長さは、所定行長さと比較される。一連のテキストの長さが所定行長さに等しければ、行揃えは完了し、ステップ418の「Yes」の分岐をたどってステップ420へ進む。
一連のテキストの長さが所定行長さに等しくなければ、「No」の分岐をたどってステップ404へ進む。ステップ404において、ワードプロセッシングプログラムは、より厳しい優先行揃え方式を選択し、ステップ406〜418を繰り返す。ステップ406〜418は、一連のテキストが行揃えされるまで、あるいは行揃えエラーが発生するまで繰り返される。最も厳しいレベルの優先行揃え方式を設定しても一連のテキストを行揃えできない場合、ステップ406の「No」の分岐をたどってステップ422へ進み、行揃えエラーがワードプロセッシングプログラムに返される。
レイアウトサービスライブラリインタフェース
レイアウトサービスライブラリは、図3、4A、4Bに関連して説明したパラグラフレイアウト方法および行揃え方法をサポートする。レイアウトサービスライブラリは、ワードプロセッシングクライアントが使うためのテキスト処理機能セットを提供する。レイアウトサービスライブラリは、一般にフォント情報機能と、テキストレイアウト機能と、テキスト情報機能とを有する。フォント情報機能は、フォントに関する情報を返す。この情報は、サポートされている書体、言語システム、フォントがサポートしている文字特性等を含む。テキストレイアウト機能は、基本的なレイアウトサービスを提供する。これは、グリフ置換、グリフ位置決め、行揃えを含む。テキスト情報機能は、一連のテキストに関する情報を返す。ワードプロセッシングプログラムは、機能呼出しを行うことにより、レイアウトサービスライブラリが提供するテキスト処理機能を起動する。レイアウトサービスライブラリは、データ構造を介して、ワードプロセッシングプログラムに情報を返す。このデータ構造は、データのリストへのポインタを含むことができる。
パラグラフレイアウト方法をサポートするテキスト情報機能は、長さ計算機能と文字識別機能を含む。長さ計算機能と文字識別機能は、グリフ位置を文字位置に変換する面倒からワードプロセッシングプログラムを解放する。長さ計算機能は、一連のテキストの長さを決定するために使われる。ワードプロセッシングクライアントは、長さ計算機能を呼び出すと同時に、一連のテキストに関する情報をレイアウトサービスライブラリに提供する。この情報は、グリフ情報、一連のテキストに関する前進距離のリスト、一連のテキストの先頭文字のインデックス、一連のテキストの末尾文字のインデックスを含む。レイアウトサービスライブラリは、一連のテキストの先頭文字と末尾文字の位置を決定する。レイアウトサービスライブラリは、グリフリストにおける先頭文字用インデックス、グリフリストにおける末尾文字用インデックス、一連のテキストの開始位置および終了位置を返す。左から右へのレイアウトの場合、前記開始位置は一連のテキストの先頭文字の左または上を示し、最終位置は一連のテキストの末尾文字の右または下を示す。ワードプロセッシングプログラムは、先頭位置と最終位置とを所定行長さと比較し、一連のテキストの長さが所定行長さを越えているか否かを決定する。
パラグラフレイアウト方法は、さらに文字識別機能を使う。文字識別機能は、任意位置の文字を識別する。ワードプロセッシングプログラムは、この機能を使って一連のテキストの分割位置を決定する。ワードプロセッシングプログラムは、一連のテキストについての情報、グリフフラグのリスト、前進値のリスト、および関連座標をレイアウトサービスライブラリに提供する。レイアウトサービスライブラリは、関連座標にある文字のインデックス値を返す。このインデックス値から、ワードプロセッシングプログラムは、その文字を特定できる。本パラグラフレイアウト方法において、ワードプロセッシングプログラムは、文字識別機能を使い、所定行長さに対応する位置においてあるいはその近辺で空白文字を探す。
レイアウトサービスライブラリは、さらにパラグラフの行揃えをサポートする。行揃えは、行揃え情報機能およびテキスト行揃え機能によってサポートされる。行揃え情報機能は、テキストレイアウト機能である。行揃えは、漸進行揃えとして実行できる。漸進行揃えは、優先行揃え方式を用いてテキストの行揃えを制御する。フォント開発者は、テキスト行の外見および機能に対する行揃えの影響を考慮しながら、優先行揃え方式を定義する。行揃え優先番号が低いものは、最も程度の緩やかな行揃えである。行揃え優先番号が高いものは、最も程度のきつい行揃えである。
ワードプロセッシングプクライアントは、行揃え情報機能を呼び出し、一連のテキストの特性と優先行揃え方式とをレイアウトサービスライブラリに提供する。レイアウトサービスライブラリは、優先サポート値を返す。この優先サポート値は、その行揃え優先レベルをフォントがサポートしていれば「真」である。その行揃え優先レベルをフォントがサポートしていなければ「偽」である。行揃え優先レベルをフォントがサポートしていれば、レイアウトサービスライブラリは、さらにグリフ置換変更値とグリフ位置変更値とを返す。グリフ置換変更値が「真」であれば、前記行揃え優先レベルは、グリフ置換を必要とする。またグリフ位置変更値が「真」であれば、前記行揃え優先レベルは、グリフ位置決めを必要とする。前記行揃えレベルが、グリフ置換およびグリフ位置決めを必要としなければ、グリフ置換変更値およびグリフ位置変更値は「偽」である。
行揃え情報機能に加え、ワードプロセッシングプログラムは、テキスト行揃え機能を使ってテキストの行を揃える。ワードプロセッシングプログラムは、テキスト行揃え機能を呼び出し、テキスト情報を提供する。このテキスト情報は、文字特性のリスト、行揃え優先レベル、グリフリストのポインタ、グリフフラグに関する情報、および所定行長さを含む。レイアウトサービスライブラリは、行揃えされた位置値のリストと行揃えされた前進値のリストを返す。ワードプロセッシングクライアントは、これら行揃えされた位置値および前進値を使い、行揃えされたテキストを描画する。
要約すると、本発明は、レイアウトサービスライブラリを用いてパラグラフをレイアウトし行揃えする方法に関する。レイアウトサービスライブラリは、パラグラフレイアウトおよび行揃えをサポートするためのテキスト処理機能セットを提供する。一実施例において、レイアウトサービスライブラリは、フォント情報機能と、テキストレイアウト機能と、テキスト情報機能とを含む。当業者には明らかなように、機能をさらに追加することもできる。オープンタイプレイアウトフォントに関連して本発明を説明してきたが、本発明は、他のフォントにも適用可能である。
当業者には明らかなように、本発明には他の実施形態も可能であり、本発明は、その精神および範囲を逸脱することなく、それら他の実施形態も含むものである。本発明の範囲は、請求の範囲に記述の通りであり、本明細書によって補われるものである。
【図１】
0004873766.tif 000002
【図２】
0004873766.tif 000003
【図３】
0004873766.tif 000004
【図４Ａ】
0004873766.tif 000005
【図４Ｂ】
0004873766.tif 000006