〔実施の形態1〕
本発明の一実施形態について図1ないし図18に基づいて説明すれば、以下の通りである。最初に、図2を用いて電子表示器1の構成の概要について説明を行う。図2は本実施の形態における電子表示器1の構成を示すブロック図である。
本実施の形態における電子表示器1は、図2に示すように、ユーザーインターフェース(入力手段)2、モニタ(表示手段)3、テーブル記憶部4、および文書処理装置5を備えている。電子表示器1としては、文書作成ソフトを含むパーソナルコンピュータ、および文書を表示することができる携帯端末などがある。
ユーザーインターフェース2は、ユーザーと文書処理装置5との間での情報の受け渡しを行う部分であって、ユーザーインターフェースとしては、例えばキーボード、マウス、およびタブレットなどがある。モニタ3は、文書処理装置5から出力される情報の表示を行う部分であって、モニタ3としては、例えばCRTディスプレイ、液晶ディスプレイ、およびプラズマディスプレイなどがある。
テーブル記憶部4は、文書処理装置5で用いるための各種テーブルを格納しているメモリである。以下にテーブル記憶部4に格納されている各種テーブルの例を、図4(a)〜図4(c)を用いて説明する。なお、図4(a)〜図4(c)は本実施の形態で用いる各種テーブルのデータ構造を示す図である。本実施の形態では、テーブル記憶部4は行頭禁則文字テーブル、行末禁則文字テーブル、およびワードラップ対象文字テーブルを格納している。
まず、行頭禁則文字テーブルは、文書表示時に行頭へ配置してはいけない文字のテーブルであって、本実施の形態では図4(a)に示すようなテーブルを用いている。また、行末禁則文字テーブルは、文書表示時に行末へ配置してはいけない文字のテーブルであって、本実施の形態では図4(b)に示すようなテーブルを用いている。そして、ワードラップ対象文字テーブルは、表示する各文字がワードラップの対象になる文字かどうか、より具体的には数字か、英字か、記号か、それ以外かという文字種の情報のテーブルである。本実施の形態では図4(c)に示すようなテーブルを用いており、図4(c)中の上段が各文字で、下段が文字種の情報となっている。図4(c)の場合、下段の数値が1ならば記号、2ならば数字、3ならば英字ということを示している。
なお、本実施の形態では、テーブル記憶部4を文書処理装置5の外部に備える構成になっているが、必ずしもこれに限らず、テーブル記憶部4が文書処理装置5の内部に備えられていてもよい。
また、本実施の形態では図4(a)〜図4(c)に示すような行頭禁則文字テーブル、行末禁則文字テーブル、およびワードラップ対象文字テーブルを用いているが、必ずしもこれに限らず、例えば、行頭禁則文字、行末禁則文字、およびワードラップ対象文字として図4(a)〜図4(c)とは異なった文字の組み合わせからなるテーブルを行頭禁則文字テーブル、行末禁則文字テーブル、およびワードラップ対象文字テーブルとしてもよい。
なお、本実施の形態では、行頭禁則文字テーブル、行末禁則文字テーブル、およびワードラップ対象文字テーブルを1つのテーブル記憶部4に格納する構成を示しているが、必ずしもこれに限定されない。例えば、行頭禁則文字テーブルを行頭禁則文字テーブルバッファに格納し、行末禁則文字テーブルを行末禁則文字テーブルバッファに格納し、ワードラップ対象文字をワードラップ対象文字バッファに格納するといったように各テーブルを異なるメモリ格納する構成であってもよい。
続いて、文書処理装置5は、ユーザーインターフェース2を介して入力された情報に応じて所定の処理を行い、上記所定の処理を行った結果をモニタ3に出力するものである。なお、上記所定の処理については後述する。
次に、図1、図5(a)〜図5(c)、および図6を用いて文書処理装置5の構成の概要について説明を行う。図1は本実施の形態における文書処理装置5の構成を示す機能ブロック図である。図5(a)〜図5(c)は本実施の形態における文書バッファ12、フラグバッファ14、およびスコアバッファ20のデータ構造の例を示す図である。そして、図6は分離係数バッファ16のデータ構造の例を示す図である。
図1に示すように、文書処理装置5は、文書バッファ12、属性情報取得部(属性情報取得手段)13、フラグバッファ14、分離係数設定部15、分離係数バッファ16、位置情報取得部(位置情報取得手段)17、分離係数選択部18、スコア演算部19、スコアバッファ20、改行位置選択部21、および分離係数一時保存バッファ22を備えている。また、分離係数選択部18、スコア演算部19、および改行位置選択部21によって改行位置決定部(改行位置決定手段)30が構成されている。
文書バッファ12は、ユーザーインターフェース2を介して入力された文書(文章)を格納するものである。文書バッファ12に格納されている文字データを、以降では処理対象行とする。なお、文書バッファ12に格納される処理対象行の各文字データは、図5(a)に示すようなデータ構造で格納されている。
続いて、属性情報取得部13は、文書バッファ12に格納されている処理対象行から、各文字データの、禁則対象文字か否か、ワードラップ対象文字か否か、およびワードラップ対象文字の種類といった属性の情報を取得し、フラグバッファ14に格納するものである。属性情報取得部13が、処理対象行の各文字データの属性の情報を取得してフラグバッファ14に格納するフラグ格納処理については後に詳述する。本実施の形態では、禁則対象文字か否かの属性の情報として、さらに詳細な行頭禁則文字または行末禁則文字か否かの属性の情報を属性情報取得部13で取得している。また、属性情報取得部13は、各文字データの属性の情報の取得を、前述したテーブル記憶部4に格納されている行頭禁則文字テーブル、行末禁則文字テーブル、およびワードラップ対象文字テーブルを参照することによって行っている。
フラグバッファ14は、属性情報取得部13によって取得された処理対象行の各文字データの属性をフラグとして格納するものである。フラグバッファ14に格納される処理対象行の各文字データの属性の情報は、図5(b)に示すように、各文字データに対応するそれぞれのフラグバッファ14中の領域に対し、左上から右下へ順に、行末禁則文字、行頭禁則文字、半角記号、半角英字、半角数字の各属性についてフラグが格納されるデータ構造になっている。
なお、本実施の形態では、左上から右下へ順に、行末禁則文字、行頭禁則文字、半角記号、半角英字、半角数字の各属性についてフラグがフラグバッファ14に格納される構成になっているが、必ずしもこれに限らず、他の順序であってもよい。
続いて、分離係数設定部15は、ユーザーインターフェース2を介してユーザーから入力される指示に応じて分離係数バッファ16に格納する分離係数の値の設定を行うものである。また、分離係数バッファ16は、分離係数を格納しているものであって、図6に示すように、0から始まるインデックス番号でアクセスできる配列構造になっている。また、分離係数バッファ16に格納されている分離係数は、あらかじめ初期設定された値が格納されている。ユーザーから入力される指示を分離係数設定部15が受けていない状態では、分離係数設定部15による設定の変更を分離係数バッファ16が受けていないので、初期設定された値が分離係数の値として設定されていることになる。また、固定値として設定されている分離係数の値は初期設定のまま変更されることがない。本実施の形態では、図6の分離係数の値が初期設定されている。また、図6の場合を例にすると、インデックス3番目の分離係数が固定値となっている。なお、ここで言うところの分離係数とは、2つの文字データの属性の組み合わせごとに設定されている、2つの文字データ間での改行のしやすさを示す指標である。
続いて、位置情報取得部17は、文書バッファ12に格納されている処理対象行をもとに、各文字データの、行頭または行末からの距離の情報である位置情報を取得し、スコア演算部19に送るものである。上記距離としては、各文字データが行頭または行末から何ドット目にあるのかを指標に用いることができる。本実施の形態では、例として各文字データが行頭から何ドット目にあるのかを位置情報としている。なお、ここで言うところの行末とは、モニタ3に表示される文書の1行分の文字数に対応して決まるものであり、処理対象行の行頭から当該文字数の位置にある文字データが、処理対象行での行末となる。
次に、分離係数選択部18は、フラグバッファ14に格納されている各文字データの属性の情報であるフラグに基づいて、隣接する2つの文字データのフラグの組み合わせごとに対応する分離係数の値を、分離係数バッファ16から選択するものである。そして、選択した分離係数の値を分離係数一時保存バッファ22に送るものである。なお、分離係数選択部18で行われる隣接する各文字データ間の分離係数の値を選択する処理については、後に詳述する。また、分離係数一時保存バッファ22は、分離係数選択部18で選択された分離係数を一時保存するものであって、複数の分離係数を保存可能になっている。
続いて、スコア演算部19は、位置情報取得部17で取得した各文字データの位置情報と分離係数一時保存バッファ22に保存されている分離係数の値とに基づいて演算を行ってスコアを求めるものである。そして、スコア演算部19で得られたスコアは、スコアバッファ20に格納される。ここで言うところのスコアとは、どの位置で改行するのが適切なのか判断するための数値であって、処理対象行中の各文字データ間のどの位置で改行した場合に、文章としての見た目がもっとも良くなるのかを示す指標である。なお、スコア演算部19で行われる演算の例については、後に詳述する。
さらに、スコアバッファ20は、スコア演算部19によって得られた各文字データのスコアをまとめて格納しているものである。スコアバッファ20に格納される各文字データのスコアは、図5(c)に示すようなデータ構造で格納されている。
そして、改行位置選択部21は、スコアバッファ20に格納されている各文字データ間のスコアに基づいて、隣接する文字データ間のうちのどこで改行を行うのかを選択(決定)するものである。なお、上述したように分離係数選択部18とスコア演算部19と改行位置選択部21とで改行位置決定部30を構成している。
次に、本発明のより好ましい実施の形態としての文書処理装置50の構成について図3および図7(a)〜図8を用いて説明を行う。なお、説明の便宜上、文書処理装置5の構成の説明中に示した部材と同一の機能を有する部材については、同一の符号を付し、その説明を省略する。図3は、文書処理装置50の構成を示す機能ブロック図である。図7(a)は文書バッファ12のデータ構造の例を示したものであって、図7(b)は装飾情報バッファ54のデータ構造の例を示す図である。そして、図8は文書中に分離係数の値が指定されている例を示した図である。
文書処理装置50は、文書処理装置5の構成とは、装飾情報取得部(装飾情報取得手段)53、装飾情報バッファ54、および分離係数抽出部(分離係数抽出手段)55を備えている点で異なっている。
まず、装飾情報取得部53は、文書バッファ12に格納されている処理対象行から、各文字データの装飾の情報を取得し、装飾情報バッファ54に格納するものである。上記装飾の情報としては、例えば文字色、フォント名、文字幅、下線の有無、ルビの有無、反転の有無、点滅の有無、マスクの有無、イタリック属性の有無、表示要素が文字か画像かといった情報がある。
装飾情報バッファ54は、装飾情報取得部53によって取得された処理対象行の各文字データの装飾の情報を格納するものである。装飾情報バッファ54に格納される処理対象行の各文字データの装飾の情報は、図7(a)および図7(b)に示すように、文書バッファ12の各文字データに対応するようにそれぞれの装飾情報バッファ54中の領域に対し、各装飾の情報について格納されるデータ構造になっている。図7(b)で示した例では、左から右へ順に、文字色、フォント名、文字幅、下線の有無、ルビの有無、反転の有無、点滅の有無、マスクの有無、イタリック属性の有無、表示要素が文字か画像かの装飾の情報が装飾情報バッファ54に格納されている。詳しくは、文字色はRGB表色系においてR,G,Bそれぞれが256段階とり得る値について16進数で表し、格納している。例えば“000000”は黒、“FF0000”は赤である。また、フォント名は表示に使用するフォント名の文字列が、文字幅はドット数が格納されている。それ以外の情報については、各装飾を持つ文字には対応する欄に1が、そうでない文字には0が格納されている。
文書処理装置50の分離係数選択部18では、フラグバッファ14に格納されている各文字データのフラグに加えて、装飾情報バッファ54に格納されている各文字データの装飾の情報に基づいて、隣接する2つの文字データのフラグの組み合わせごとに対応する分離係数の値を、分離係数バッファ16から選択する。なお、分離係数選択部18で行われる隣接する各文字データ間の分離係数の値を選択する処理については、後に詳述する。
また、分離係数抽出部55は、ユーザーインターフェース2を介して入力された文書中に図8に示すように分離係数の値が指定されていた場合に、当該文書中から分離係数の値を抽出して分離係数バッファ16に初期設定されている分離係数の値の設定を変更するものである。分離係数設定部15または分離係数抽出部55を介して分離係数バッファ16に分離係数の値を設定する動作については後に詳述する。
なお、本実施の形態では、文書バッファ12、フラグバッファ14、分離係数バッファ16、スコアバッファ20、および装飾情報バッファ54を文書処理装置5または文書処理装置50の内部に備える構成となっているが、必ずしもこれに限らない。例えば、文書バッファ12、フラグバッファ14、分離係数バッファ16、スコアバッファ20、分離係数一時保存バッファ22、および装飾情報バッファ54を文書処理装置5または文書処理装置50の外部に備える構成であってもよい。
次に、文書処理装置50を備えた電子表示器1における文書の改行位置の決定動作について、図9〜図11を用いて説明を行う。図9は、本実施の形態における文書の改行位置の決定動作を示したフローである。
まず、ステップS1では、ユーザーインターフェース2を介し入力された文書の文字列を文書バッファ12に格納する。
続いて、ステップS2では、分離係数バッファ16に分離係数の値を設定してセット(格納)する。分離係数バッファ16に分離係数の値を設定する方法としては、上述したように、例えば2つの方法がある。一方は、ユーザーから入力される指示に応じて分離係数設定部15により分離係数バッファ16に分離係数の値の設定を行う方法である。そして、もう一方は、文書中に分離係数の値が指定されていた場合に、分離係数抽出部55によって分離係数の値を抽出して、分離係数バッファ16に分離係数の値を設定する方法である。ステップS2で分離係数バッファ16に分離係数の値を設定した後は、ステップS3に移る。
ステップS3では、文書バッファ12に格納されている文字列がすべて1行中に収まるか否かの判定を行う。そして、当該文字列が1行中に収まる場合(ステップS3でYes)には、ステップS4に移る。また、当該文字列が1行中に収まらない場合(ステップS3でNo)には、ステップS5に移る。ここで言うところの1行中とは、モニタ3に表示される文書の1行分の文字数として設定される範囲のことであって、モニタ3に表示させる文書の1行分の文字数の設定に対応して任意に設定される範囲である。そして、ステップS4では、文書バッファ12に格納されているすべての文字列をモニタ3で表示させる。
また、ステップS5では、文書バッファ12に格納されている文字列の1行中に、改行コードが含まれているか否かの判定を行う。そして、改行コードが含まれている場合(ステップS5でYes)には、ステップS10に移る。また、改行コードが含まれていない場合(ステップS5でNo)には、ステップS6に移る。
続いて、ステップS6では、文書バッファ12に格納されている文字列の1行中の各文字データに対してのフラグ(属性の情報)を取得し、フラグバッファ14にフラグをセット(格納)する(フラグ格納処理)。さらに、ステップS7では、上記各文字データに対しての、文字色、フォント名、文字幅、下線およびルビ等の有無、ならびに画像が挿入されているか否かといった装飾の情報を取得し、装飾情報バッファ54にセットする。続いて、ステップS8では、フラグバッファ14に格納された各フラグと装飾情報バッファ54に格納された各装飾の情報とに基づいて、上記各文字データ間に対しての改行位置の適切さを示すスコアを計算(演算)し、スコアバッファ20にセットする。そして、ステップS9では、スコアバッファ20に格納された各スコアの中で最も数値の大きい文字データ間の位置を改行位置と決定し、ステップS10に移る。図5で示した例では、「、」と「$」との文字データ間に、もっとも高い数値のスコア「428」が格納されているので、「、」と「$」との文字データ間で改行を行うことになる。
ステップS10では、改行位置までの文字列をモニタ3に表示する1行として、モニタ3に表示を行う。そして、ステップS11では、モニタ3に表示された分の文字列を文書バッファ12から削除してステップS3に移りフローを繰り返す。
以下では、上述したステップS6のフラグ格納処理について、図10を用いてさらに詳しく説明を行う。図10は、フラグ格納処理についての詳細を示したフローである。
まず、ステップS61では、カウンタiを0に初期化する。カウンタiは、行頭から何番目の文字データを処理対象にするのかを指定する値である。例えば行頭から1番目の文字データを処理対象にしているときには、iの値は0となる。
続いて、ステップS62では、iの値がフラグバッファ14のサイズと等しくなっているか否かの判定を行う。そして、iの値がフラグバッファ14のサイズと等しくなっている場合(ステップS62でYes)には、フラグ格納処理を終了する。また、iの値がフラグバッファ14のサイズと等しくなっていない場合(ステップS62でNo)には、ステップS63に移る。ここで言うところのフラグバッファ14のサイズとは、フラグバッファ14に格納されている文字データの数である。従って、フラグバッファ14のサイズは、上述したモニタ3に表示される文書の1行分の文字数として設定される範囲である1行中の文字データの数より1大きい数に該当することになる。
以降のステップS63〜ステップS69は、文書バッファ12のi番目の文字データがワードラップ対象の文字データであるか否かの判定を行い、フラグバッファ14のi番目に該当するフラグを格納する処理である。まず、ステップS63では、文書バッファ12のi番目の文字データが半角数字であるか否かの判定を行う。そして、i番目の文字データが半角数字であった場合(ステップS63でYes)には、ステップS64に移る。また、i番目の文字データが半角数字でなかった場合(ステップS63でNo)には、ステップS65に移る。ステップS64では、フラグバッファ14のi番目に半角数字フラグをセット(格納)してステップS70に移る。
続いて、ステップS65では、文書バッファ12のi番目の文字データが半角英字であるか否かの判定を行う。そして、i番目の文字データが半角英字であった場合(ステップS65でYes)には、ステップS66に移る。また、i番目の文字データが半角英字でなかった場合(ステップS65でNo)には、ステップS67に移る。ステップS66では、フラグバッファ14のi番目に半角英字フラグをセットしてステップS70に移る。
また、ステップS67では、文書バッファ12のi番目の文字データが半角記号であるか否かの判定を行う。そして、i番目の文字データが半角記号であった場合(ステップS67でYes)には、ステップS68に移る。また、i番目の文字が半角記号でなかった場合(ステップS67でNo)には、文書バッファ12のi番目の文字データはワードラップ対象にならない文字であるので、フラグはセットせずにステップS69に移る。ステップS68では、フラグバッファ14のi番目に半角記号フラグをセットしてステップS69に移る。
以降のステップS69〜ステップS72は、文書バッファ12のi番目の文字データが禁則対象の文字データであるか否かの判定を行い、フラグバッファ14のi番目に該当するフラグを格納する処理である。まず、ステップS69では、文書バッファ12のi番目の文字データが行頭禁則文字であるか否かの判定を行う。そして、i番目の文字データが行頭禁則文字であった場合(ステップS69でYes)には、ステップS70に移る。また、i番目の文字データが行頭禁則文字でなかった場合(ステップS69でNo)には、ステップS71に移る。ステップS70では、フラグバッファ14のi番目に行頭禁則フラグをセット(格納)してステップS71に移る。
続いて、ステップS71では、文書バッファ12のi番目の文字データが行末禁則文字であるか否かの判定を行う。そして、i番目の文字データが行末禁則文字であった場合(ステップS71でYes)には、ステップS72に移る。また、i番目の文字データが行末禁則文字でなかった場合(ステップS71でNo)には、ステップS73に移る。ステップS72では、フラグバッファ14のi番目に行末禁則フラグをセットしてステップS73に移る。そして、ステップS73では、カウンタiの値を1増やしてステップS62に戻り、フローを繰り返す。
なお、本実施の形態では、ステップ63の処理が行なわれた後で、ステップ65の処理を行い、ステップS65の処理が行なわれた後でステップ67の処理を行う順番になっているが、必ずしもこれに限らず、例えば、上述の処理の順番を入れ替えてもよい。
さらに、以下では、上述したステップS8の、スコアを求めてスコアバッファ20に格納する処理について、図11を用いてさらに詳しく説明を行う。図11は、スコアを求めてスコアバッファ20に格納する処理についての詳細を示したフローである。
まず、ステップS81では、カウンタiを0に初期化する。カウンタiはフラグ格納処理中で説明したカウンタiと同様のものである。
続いて、ステップS82では、iの値がスコアバッファ20のサイズと等しくなっているか否かの判定を行う。そして、iの値がスコアバッファ20のサイズと等しくなっている場合(ステップS82でYes)には、上述したステップS8の処理を終了する。また、iの値がスコアバッファ20のサイズと等しくなっていない場合(ステップS82でNo)には、ステップ83に移る。ここで言うところのスコアバッファ20のサイズとは、スコアバッファ20に格納されている文字データの数である。従って、スコアバッファ20のサイズは、上述したモニタ3に表示される文書の1行分の文字数として設定される範囲である1行中の文字データの数に該当することになる。
以降のステップS83〜ステップS94は、文書バッファ12のi番目の文字データとi+1番目の文字データとの文字種から、i番目の文字データとi+1番目の文字データとの間で改行のために分離してもよいか否かの指標の数値となる分離係数を求めるための処理である。上記文字種は、ステップS6の処理でフラグを格納したフラグバッファ14と、ステップS7の処理で装飾の情報を格納した装飾情報バッファ54とに基づいて、分離係数選択部18が判定する。
まず、ステップS83では、フラグバッファ14のi番目のフラグが行末禁則文字、またはi+1番目のフラグが行頭禁則文字であるか否かの判定を行う。そして、i番目のフラグが行末禁則文字、またはi+1番目のフラグが行頭禁則文字であった場合(ステップS83でYes)には、ステップS84に移る。また、i番目のフラグが行末禁則文字、およびi+1番目のフラグが行頭禁則文字でなかった場合(ステップS83でNo)には、ステップS85に移る。ステップS84では、i番目の文字データとi+1番目の文字データとの間(以降では対象文字間とする)の分離係数としてインデックス0番目の分離係数を選択し、分離係数一時保存バッファ22に格納する。そして、ステップS95に移る。なお、インデックス0番目の分離係数とは、図6に示す分離係数バッファ16のインデックス0番目に格納されている分離係数のことを指す。通常、行末禁則文字の直後、または行頭禁則文字の直前では改行してはならないため、インデックス0番目の分離係数の初期値は0に設定している。
続いて、ステップS85では、フラグバッファ14のi番目のフラグとi+1番目のフラグとが同種のワードラップ対象文字であるか否かの判定を行う。同種のワードラップ対象文字とは、i番目のフラグとi+1番目のフラグとの組み合わせが、両方が英字、両方が数字、または両方が記号のいずれかの組み合わせになっているということを意味する。そして、i番目のフラグとi+1番目のフラグとが同種のワードラップ対象文字であった場合(ステップS85でYes)には、ステップS86に移る。また、i番目のフラグとi+1番目のフラグとが同種のワードラップ対象文字でなかった場合(ステップS85でNo)には、ステップS87に移る。ステップS86では、対象文字間の分離係数としてインデックス1番目の分離係数を選択し、分離係数一時保存バッファ22に格納する。そして、ステップS90に移る。通常、同種のワードラップ対象文字間で改行してはならないため、インデックス1番目の分離係数の初期値は0に設定している。
さらに、S87では、フラグバッファ14のi番目のフラグとi+1番目のフラグとが異種のワードラップ対象文字であるか否かの判定を行う。異種のワードラップ対象文字とは、i番目のフラグとi+1番目のフラグとの組み合わせが、一方が英字でもう一方が数字、一方が数字でもう一方が記号、一方が記号でもう一方が英字、のいずれかの組み合わせになっているということを意味する。そして、i番目のフラグとi+1番目のフラグとが異種のワードラップ対象文字であった場合(ステップS87でYes)には、ステップS88に移る。また、i番目のフラグとi+1番目のフラグとが異種のワードラップ対象文字でなかった場合(ステップS87でNo)には、ステップS89に移る。
ステップS88では、対象文字間の分離係数としてインデックス2番目の分離係数を選択し、分離係数一時保存バッファ22に格納する。そして、ステップS90に移る。通常、異種のワードラップ対象文字間でも、なるべく改行すべきではない。しかし、行末禁則文字の直後、行頭禁則文字の直前、および同種のワードラップ対象文字間よりは、異種のワードラップ対象文字間で改行を行った場合の方が文書の見た目を損なわないため、インデックス2番目の分離係数の初期値は25に設定している。また、ステップS89では、対象文字間の分離係数としてインデックス3番目の分離係数を選択し、分離係数一時保存バッファ22に格納する。そして、ステップS93に移る。少なくともi番目の文字データとi+1番目の文字データとのどちらか一方がワードラップ対象文字でなく、対象文字間で改行を行っても文書の見た目を損なわないため、インデックス3番目の分離係数は100を固定値としている。
続いて、ステップS90では、フラグバッファ14のi番目のフラグが行頭禁則文字、またはi+1番目のフラグが行末禁則文字であるか否かの判定を行う。そして、i番目のフラグが行頭禁則文字、またはi+1番目のフラグが行末禁則文字であった場合(ステップS90でYes)には、ステップS91に移る。また、i番目のフラグが行頭禁則文字、およびi+1番目のフラグが行末禁則文字でなかった場合(ステップS90でYes)には、ステップS92に移る。ステップS91では、対象文字間の分離係数を、分離係数一時保存バッファ22に格納されている値にインデックス4番目の分離係数を加えたものとし、分離係数一時保存バッファ22に格納する。そして、ステップS92に移る。ワードラップ対象文字が長く続いた場合には、当該対象文字間で改行したほうが、文書が自然に見えるため、インデックス4番目の分離係数の初期値は50に設定している。また、ステップS92では、対象文字間の分離係数を、分離係数一時保存バッファ22に格納されている値にインデックス5番目の分離係数を加えたものとし、分離係数一時保存バッファ22に格納する。そして、ステップS93に移る。日本語を表示しているときにはワードラップ対象文字間で改行することよりも、行末に空白が多く空くほうが見栄えの悪いことが多いため、インデックス5番目の分離係数の初期値は25としている。
また、ステップS93では、装飾情報バッファ54のi番目の装飾の情報とi+1番目の装飾の情報とが異なるか否かの判定を行う。そして、i番目の装飾の情報とi+1番目の装飾の情報とが異なった場合(ステップS93でYes)には、ステップS94に移る。また、i番目の装飾の情報とi+1番目の装飾の情報とが同一であった場合(ステップS93でNo)には、ステップS95に移る。ステップS94では、対象文字間の分離係数を、分離係数一時保存バッファ22に格納されている値にインデックス6番目の分離係数を加えたものとし、分離係数一時保存バッファ22に格納する。そして、ステップS95に移る。装飾の異なる文字の間で改行しても文書の見た目を損なわないことが多いため、インデックス6番目の分離係数の初期値は25としている。
続いて、ステップS95では、ステップS83〜ステップS94のフローで設定した(分離係数一時保存バッファ22に格納された)分離係数に位置情報取得部17で取得した位置情報の数値を加味し、得られたスコアをスコアバッファ20のi番目に格納する。そして、ステップS96に移る。本実施の形態では、以下の式を用いた演算によってスコアを得ている。
本実施の形態では、各文字データが行頭から何ドット目にあるのか(i番目の文字の左にある文字の幅の和)を位置情報として用いている。Siはスコア、kは重み係数、diは分離係数一時保存バッファ22に格納されている分離係数、wjは行頭からj(0〜i−1)番目の文字の幅である。kは分離係数と位置情報とをどのような割合で足し合わせるかを指定する値である。kが大きいほど、位置情報よりも分離係数を重視することになる。wjは装飾情報バッファ54から取得することもできる。なお、スコアを求める演算は、分離係数と位置情報(i番目の文字の行頭からのドット数)とをもとにしていさえすれば、上述の式以外を用いてもよい。
そして、ステップS96では、カウンタiの値を1増やしてステップS82に戻り、フローを繰り返す。
なお、文書処理装置5を備えた電子表示器1における文書の改行位置の決定動作は、図9〜図11のフローのうち、図9のステップS7、図11のステップS93およびステップS94を削除したもので表すことができる。
次に、分離係数バッファ16に分離係数を設定する動作について、図6、図8、図12および図13を用いて説明を行う。図12は、ユーザーが禁則処理、ワードラップ処理に関する条件を設定する画面の一例である。図13は、図12に示す画面によってユーザーが禁則処理、ワードラップ処理に関する条件を設定した際に、図6に示す分離係数バッファ16へセットされる値を表にしたものである。
まず、分離係数設定部15を介したユーザーからの入力によって、分離係数バッファ16に分離係数が設定される動作について説明を行う。
電子表示器1のモニタ3には、図12に示すような、分離係数の設定画面が表示されている。詳しくは、Aの「表示モード」によって、日本語、英語などの表示する言語に応じた分離係数の設定の変更を行うことができるようになっている。また、Bの項目では、禁則処理(「行頭禁則文字の前、行末禁則文字の後では改行しない」)の度合いを段階的に設定できるようになっている。そして、Cの項目では、同種のワードラップ対象文字が連続する場合のワードラップ処理(「連続する数字、英字の間では改行しない」)の度合いを段階的に変更できるようになっており、Dの項目では、異種のワードラップ対象文字が連続する場合のワードラップ処理(「数字と英字との間では改行しない」)の度合いを段階的に変更できるようになっている。さらに、Eの項目では、「行頭禁則文字の後、行末禁則文字の前では改行しやすくする」処理の度合いを段階的に変更できるようになっている。そして、Fの項目では、「装飾の異なる文字の間では改行しやすくなる」処理の度合いを変更できるようになっている。なお、B〜Fの各項目での処理の度合いは、「適用する」、「なるべく適用する」、「適用しない」の3段階に変更可能になっている。
そして、ユーザーがモニタ3に表示されているそれぞれの項目の設定を行い、「決定」ボタンを押すと、分離係数設定部15が、対応する分離係数を図6に示す分離係数バッファ16に格納し、初期化されている分離係数の値を変更するようになっている。
図13に示すように、A〜Fの各項目のうち、Aの「表示モード」を「日本語」に設定した場合、図6のインデックス5番目の分離係数には25がセットされる。これに対して、Aの「表示モード」を「英語」に設定した場合、図6のインデックス5番目の分離係数には0がセットされる。つまり、「表示モード」が「日本語」の場合には、対象文字間での改行が、より行われやすくなることを意味している。これは、英語のみの文書の場合にはワードラップ処理を厳密に行わなければならないが、日本語と英語とが混じった文書では、長い英単語は途中で改行した方が、見た目がよくなる(読みやすくなる)場合が多いためである。
また、B〜Dの項目では、処理の度合いを弱く設定するにつれて分離係数が大きくなるようになっている。具体的には、Bの項目では、処理の度合いが「適用する」だった場合には0が、「なるべく適用する」だった場合には25が、「適用しない」だった場合には100が、インデックス0番目の分離係数にセットされる。Cの項目では、同様にしてインデックス1番目の分離係数に値がセットされ、Dの項目でも、同様にしてインデックス2番目の分離係数に値がセットされる。
一方、EおよびFの項目では、処理の度合いを弱く設定するにつれて分離係数が小さくなるようになっている。具体的には、Eの項目では、処理の度合いが「適用する」だった場合には50が、「なるべく適用する」だった場合には25が、「適用しない」だった場合には0が、インデックス4番目の分離係数にセットされる。そして、Fの項目でも、同様にしてインデックス6番目の分離係数に値がセットされる。
続いて、文書中に分離係数の値が指定されている場合の、分離係数バッファ16に分離係数を設定する動作について図8を用いて説明を行う。図8では、XMLのようなマークアップ言語で文書が記述されている場合を例として説明する。ここでは、<book>タグが文書の始まり、</book>タグが文書の終わりを示し、<book_palam>タグで囲まれたものが分離係数の値の指定、<book_body>タグで囲まれた部分が表示する文書となる。<br_palam>タグで指定する各値が各分離係数の値に対応しており、palam1〜palam6が図6に示したA〜Fの各項目に対応している。分離係数抽出部55は、文書中に<br_palam>タグが存在していた場合に、分離係数バッファ16に格納されている初期設定の分離係数の値を、palam1〜palam6の各値として指定された値に変更する。
以上の構成によれば、本発明の電子表示器1は、文書中に指定されている分離係数をもとに、分離係数バッファ16の分離係数を変更することができる。従って、文書中に指定されている分離係数を改行位置決定部30で用いて改行位置を決定することが可能になる。
なお、図6および図13に示した分離係数の値はあくまでも例であって、必ずしも図中の値に限らない。例えば、スコアがより大きい対象文字間を改行位置とする場合、図6および図13中の分離係数の値の大小関係を維持していさえすれば、分離係数は図6および図13に示した以外の値であってもよい。つまり、インデックス0番目、およびインデックス1番目の値よりもインデックス2番目の値が大きく、インデックス2番目の値よりもインデックス3番目の値が大きくなる関係であればよい。また、項目B〜Dの項目では、処理の度合いを弱く設定するにつれて分離係数が大きくなるようになっていればよく、EおよびFの項目では、処理の度合いを弱く設定するにつれて分離係数が小さくなるようになっていればよい。
また、本実施の形態では、スコアがより大きい対象文字間を改行位置としているが、必ずしもこれに限らない。例えば、スコアがより小さい対象文字間を改行位置とすることも可能である。スコアがより小さい対象文字間を改行位置とする場合、上述した分離係数の値の大小関係をすべて逆転させて設定し、図11のステップS91,ステップS92,ステップS94にて分離係数を加えるのではなく減らせばよい。
なお、本実施の形態では、分離係数選択部18で選択された分離係数を分離係数一時保存バッファ22に一時保存し、スコア演算部19で分離係数一時保存バッファ22に保存された分離係数の値を用いる構成になっているが、必ずしもこれに限らない。例えば、選択した分離係数に新たに分離係数を足し引きする必要のない場合(ステップS91,ステップS92,ステップS94のいずれも行わない場合)には、分離係数選択部18で選択された分離係数を分離係数一時保存バッファ22に送らずに、スコア演算部19に送ってスコア演算部19で用いる構成であってもよい。
以上の構成によれば、属性情報と位置情報と隣接する文字データ同士の属性情報の組み合わせごとに予め設定されている改行位置としての適切さを示す指標である分離係数とに基づいて、改行位置決定部30によって処理対象行の改行位置が決定されるので、隣接する文字データ同士の属性の情報と位置の情報とを考慮した改行を行うことができる。また、属性情報としてワードラップ対象文字の種別の情報を用いるので、英字と数字との関係のような種別の異なるワードラップ対象文字間での改行を行うか否かの決定を行うこともできるようになっている。さらに、ワードラップ対象文字か否かの属性情報と位置情報とを用いるので、行末の空白が大きくなりすぎない位置ならば、短いワードラップ対象文字を途中で改行せずに、次行に送るといった改行位置の決定を行うことが可能になる。よって、文章表示の見た目をより向上させることが可能になる。また、隣接する文字データ同士の属性情報の組み合わせごとに改行位置としての適切さを示す指標である分離係数が設定されているので、ユーザーが各文字データ間にいちいち改行位置としての適切さの値を指定する構成に比較して手間がかからない。その結果、文章表示の見た目をより向上させるとともに、文章表示の見た目を向上させる処理を簡便に行わせることができる。
なお、文書処理装置50のように、処理対象行中の各文字データの、装飾の情報を取得する装飾情報取得部53をさらに備え、改行位置決定部30は、分離係数と属性情報と位置情報とに加えて、さらに装飾の情報に基づいて処理対象行の改行位置を決定することが好ましい。
これにより、分離係数、属性情報および位置情報に加えて、装飾情報取得部53によって取得した装飾の情報に基づいて、改行位置決定部30によって改行位置を決定することになる。よって、属性情報に加えて装飾の情報を考慮した改行位置を決定することが可能になる。従って、さらに適切な改行位置を決定することが可能になる。
また、半角20文字を表示可能な画面で文書(文章)表示することを想定して改行処理を実際に行った結果を、図14〜図18を用いて以下に示す。図14は、行末に数字と記号とが短く連続するパターンでの結果を示す図であり、図15は、行末に数字と記号とが長く連続するパターンでの結果を示す図である。また、図16は、行末にアルファベットと記号とが短く連続するパターンでの結果を示す図であり、図17は、行末にアルファベットと記号とが長く連続するパターンでの結果を示す図である。そして、図18は、行末に装飾(下線)のついた文字が短く連続するパターンでの結果を示す図である。また、それぞれ異なる5つの方法で改行処理を行った結果を、(a)〜(e)として図14〜図18中に示している。なお、(a)〜(e)の改行処理は、以下のようになっている。
(a)画面端で改行する従来の処理のみを行うもの(第1従来方法)
(b)数字とアルファベットのみをワードラップ対象とし、数字とアルファベットとの間では改行可能にする従来の処理を行うもの(第2従来方法)
(c)一部の記号以外の、全ての1BYTE文字をワードラップ対象とする従来の処理を行うもの(第3従来方法)
(d)tab,space以外の全ての1BYTE文字をワードラップ対象にする従来の処理を行うもの(第4従来方法)
(e)本発明の文書処理方法による処理を行うもの
なお、上記一部の記号とは、“%”,“―”,“(”,“)”,“[”,“]”,“{”,“}”,“?”,“!”などの記号を指す。
まず、行末に数字と記号とが短く連続するパターンでの結果(パターン1)は、図14に示すように、第1従来方法では数字の途中で改行してしまうので、文章として見にくくなっている。また、第2従来方法では、短い文字列であるのにもかかわらず途中の記号の後で改行してしまうので、文章として見にくくなっている。これに対して、第3従来方法、第4従来方法、および本発明の文書処理方法では、短く連続した数字と記号とからなる文字列をまとめて次行に送っているので、文章として見やすくなっている。
次に、行末に数字と記号とが長く連続するパターンでの結果(パターン2)は、図15に示すように、第1従来方法では数字の途中で改行してしまうので、文章として見にくくなっている。また、第3従来方法および第4従来方法では、長い文字列を次行に送ってしまうので、行末に空白が空きすぎて文章として見た目が悪くなっている。これに対して、第2従来方法、および本発明の文書処理方法では、長く連続した数字と記号とからなる文字列の、途中の記号の後で改行するので、文章として見やすく、見た目もよくなっている。
さらに、行末にアルファベットと記号とが短く連続するパターン(パターン3)での結果は、図16に示すように、第1従来方法ではアルファベットの途中で改行してしまうので、文章として見にくくなっている。また、第2従来方法および第3従来方法では、短い文字列であるのにもかかわらず途中の記号の後で改行してしまうので、文章として見にくくなっている。これに対して、第4従来方法、および本発明の文書処理方法では、短く連続したアルファベットと記号とからなる文字列をまとめて次行に送っているので、文章として見やすくなっている。
続いて、行末にアルファベットと記号とが長く連続するパターン(パターン4)での結果は、図17に示すように、第1従来方法ではアルファベットの途中で改行してしまうので、文章として見にくくなっている。また、第3従来方法および第4従来方法では、長い文字列を次行に送ってしまうので、行末に空白が空きすぎて文章として見た目が悪くなっている。これに対して、第2従来方法、および本発明の文書処理方法では、長く連続したアルファベットと記号とからなる文字列の、途中の記号の後で改行するので、文章として見やすく、見た目もよくなっている。
そして、行末に装飾のついた文字が短く連続するパターン(パターン5)での結果は、図18に示すように、第1従来方法〜第4従来方法では、改行に装飾(下線)を考慮していないため、装飾の途中で改行してしまい、文章として見にくくなっている。これに対して、本発明の文書処理方法では、改行に装飾(下線)を考慮しており、装飾のついた文字列をまとめて次行に送っているので、文章として見やすくなっている。
パターン1〜パターン5までの結果をまとめた表1を以下に示す。表1中の○は、文章として見やすい、または見た目がよいことを示している。また、表1中の×は、文章として見にくい、または見た目が悪いことを示している。表1に示すように、第1従来方法〜第4従来方法では改行位置が不自然になって文章として見にくくなったり、見た目が悪くなったりするパターンが存在するが、本発明の文書処理方法では、上述した5つのパターンのいずれであっても適切な位置で改行することができている。従って、文章として見やすく、見た目がよくなっており、文章表示の見た目をより向上させている。
なお、本発明は、上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
最後に、上記実施形態の文書処理装置5および文書処理装置50の各部や各処理ステップは、CPUなどの演算手段が、ROM(Read Only Memory)やRAMなどの記憶手段に記憶されたプログラムを実行し、キーボードなどの入力手段、ディスプレイなどの出力手段、あるいは、インターフェース回路などの通信手段を制御することにより実現することができる。したがって、これらの手段を有するコンピュータが、上記プログラムを記録した記録媒体を読み取り、当該プログラムを実行するだけで、本実施形態の文書処理装置5および文書処理装置50の各種機能および各種処理を実現することができる。また、上記プログラムをリムーバブルな記録媒体に記録することにより、任意のコンピュータ上で上記の各種機能および各種処理を実現することができる。
この記録媒体としては、マイクロコンピュータで処理を行うために図示しないメモリ、例えばROMのようなものがプログラムメディアであっても良いし、また、図示していないが外部記憶装置としてプログラム読取り装置が設けられ、そこに記録媒体を挿入することにより読取り可能なプログラムメディアであっても良い。
また、何れの場合でも、格納されているプログラムは、マイクロプロセッサがアクセスして実行される構成であることが好ましい。さらに、プログラムを読み出し、読み出されたプログラムは、マイクロコンピュータのプログラム記憶エリアにダウンロードされて、そのプログラムが実行される方式であることが好ましい。なお、このダウンロード用のプログラムは予め本体装置に格納されているものとする。
また、上記プログラムメディアとしては、本体と分離可能に構成される記録媒体であり、磁気テープやカセットテープ等のテープ系、フレキシブルディスクやハードディスク等の磁気ディスクやCD/MO/MD/DVD等のディスクのディスク系、ICカード(メモリカードを含む)等のカード系、あるいはマスクROM、EPROM(Erasable Programmable Read Only Memory)、EEPROM(Electrically Erasable Programmable Read Only Memory)、フラッシュROM等による半導体メモリを含めた固定的にプログラムを担持する記録媒体等がある。
また、インターネットを含む通信ネットワークを接続可能なシステム構成であれば、通信ネットワークからプログラムをダウンロードするように流動的にプログラムを担持する記録媒体であることが好ましい。
さらに、このように通信ネットワークからプログラムをダウンロードする場合には、そのダウンロード用のプログラムは予め本体装置に格納しておくか、あるいは別な記録媒体からインストールされるものであることが好ましい。