(57)【特許請求の範囲】
【請求項１】
文字枠に配置される文字列に対するルビの出力制御を行う情報処理装置であって、
前記文字枠の幅の情報を含む文字枠情報と、当該文字枠に配置される文字列とを記憶する記憶手段と、
前記記憶手段に記憶された文字列を構成する一つ以上の文字に対して複数のルビを設定する設定手段と、
前記記憶手段に記憶された文字枠情報に従って、前記設定手段で複数のルビが設定された文字を含む文字列内の文字間が該文字枠の行端に配置されるかを判定する判定手段と、
前記判定手段で該行端に配置されると判定された当該文字列内の文字に設定されたルビの種類に従って、当該ルビが設定されている文字列の改行位置の候補を改行候補位置として決定する候補位置決定手段と、
前記候補位置決定手段により決定された改行候補位置と該行端との位置関係に従って、前記候補位置決定手段により決定された改行候補位置の中から当該文字列の改行位置を選択する改行位置選択手段と、
前記改行位置選択手段により選択された前記文字列の改行位置に従って、当該文字列に設定された複数のルビの改行位置を決定するルビ改行位置決定手段と、
前記改行位置選択手段により選択された改行位置で改行された文字列と、前記ルビ改行位置決定手段により決定された改行位置で改行されたルビとを出力する出力手段と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記設定手段で複数設定されたルビの種類を判定する種類判定手段と、
を更に備え、
前記候補位置決定手段は、更に、前記種類判定手段で判定されたルビの種類に従って、当該ルビが設定されている文字列の改行候補位置を決定すること特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記設定手段は、前記記憶手段に記憶された文字列を構成する一つ以上の文字に対して複数のグループルビを設定し、
前記候補位置決定手段は、前記設定手段で設定された複数のグループルビのうち一つのグループルビが設定された文字列と当該グループルビが設定されていない文字列との間を改行候補位置と決定することを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記改行位置選択手段は、前記候補位置決定手段により決定された改行候補位置の中から、文字枠の行端の位置から最も近い改行候補位置を選択することを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
前記ルビ改行位置決定手段は、前記改行位置選択手段により選択された改行位置により分割された文字数の割合に従って、当該文字列に設定された複数のルビの改行位置を決定することを特徴とする請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
文字枠の幅の情報を含む文字枠情報と、当該文字枠に配置される文字列とを記憶する記憶手段を備えた情報処理装置における情報処理方法であって、
前記情報処理装置の設定手段が、前記記憶手段に記憶された文字列を構成する一つ以上の文字に対して複数のルビを設定する設定工程と、
前記情報処理装置の判定手段が、前記記憶手段に記憶された文字枠情報に従って、前記設定工程で複数のルビが設定された文字を含む文字列内の文字間が該文字枠の行端に配置されるかを判定する判定工程と、
前記情報処理装置の候補位置決定手段が、前記判定工程で該行端に配置されると判定された当該文字列内の文字に設定されたルビの種類に従って、当該ルビが設定されている文字列の改行位置の候補を改行候補位置として決定する候補位置決定工程と、
前記情報処理装置の改行位置選択手段が、前記候補位置決定工程により決定された改行候補位置と該行端との位置関係に従って、前記候補位置決定工程により決定された改行候補位置の中から当該文字列の改行位置を選択する改行位置選択工程と、
前記情報処理装置のルビ改行位置決定手段が、前記改行位置選択工程により選択された前記文字列の改行位置に従って、当該文字列に設定された複数のルビの改行位置を決定するルビ改行位置決定工程と、
前記情報処理装置の出力手段が、前記改行位置選択工程により選択された改行位置で改行された文字列と、前記ルビ改行位置決定工程により決定された改行位置で改行されたルビとを出力する出力工程と、
を備えることを特徴とする情報処理方法。
【請求項７】
文字枠に配置される文字列に対するルビの出力制御を行う情報処理装置で読み取り実行可能なプログラムであって、
前記プログラムは、
前記文字枠の幅の情報を含む文字枠情報と、当該文字枠に配置される文字列とを記憶する記憶手段と、
前記記憶手段に記憶された文字列を構成する一つ以上の文字に対して複数のルビを設定する設定手段と、
前記記憶手段に記憶された文字枠情報に従って、前記設定手段で複数のルビが設定された文字を含む文字列内の文字間が該文字枠の行端に配置されるかを判定する判定手段と、
前記判定手段で該行端に配置されると判定された当該文字列内の文字に設定されたルビの種類に従って、当該ルビが設定されている文字列の改行位置の候補を改行候補位置として決定する候補位置決定手段と、
前記候補位置決定手段により決定された改行候補位置と該行端との位置関係に従って、前記候補位置決定手段により決定された改行候補位置の中から当該文字列の改行位置を選択する改行位置選択手段と、
前記改行位置選択手段により選択された前記文字列の改行位置に従って、当該文字列に設定された複数のルビの改行位置を決定するルビ改行位置決定手段と、
前記改行位置選択手段により選択された改行位置で改行された文字列と、前記ルビ改行位置決定手段により決定された改行位置で改行されたルビとを出力する出力手段として、前記情報処理装置を機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法及びプログラムに関し、特に、ルビを出力する技術に関するものである。
【背景技術】
【０００２】
従来、パーソナルコンピュータ等を用いて様々なレイアウトの文書を作成することが可能である。特に、雑誌や新聞等の印刷物におけるレイアウト処理は、一般に、ＤＴＰ（Ｄｅｓｋ  Ｔｏｐ  Ｐｕｂｌｉｓｈｉｎｇ）システムによって行われている。  
【０００３】
このような文書編集システムは、読者が文章を読み易くするために、文字（列）にルビが付す機能等を備えている。ここで、ルビが付される文字は一般に親文字と言われている。  また、ルビには、一般的に知られている「モノルビ」、「グループルビ」、「熟語ルビ」という３つの種類がある。  
【０００４】
「モノルビ」とは、親文字１文字毎に付されるルビである。例えば、「野鳥」の「野」に対するモノルビとして「や」が付される。そのため、「野」と「鳥」の間で改行が入った場合、（親文字）「野」に対して（モノルビ）「や」が出力され、次行に改行された（親文字）「鳥」に対しては（モノルビ）「ちょう」が出力される。  
【０００５】
また、「グループルビ」とは、複数の文字から構成される親文字全体に対して付されるルビのことである。例えば、「野鳥」の２文字に対してグループルビとして「やちょう」が付される。そのため、「野」と「鳥」の間で行が切れる場合、「鳥」を行内に追い込むか、又は「野」を次行に追い出して「野鳥」の一連の文字を同一行に含むように出力すると共に、グループルビである「やちょう」が（親文字）「野鳥」に対して出力される。  
【０００６】
また、「熟語ルビ」とは、複数の文字から構成される親文字（熟語）に対して付されるルビであって、熟語の各親文字からルビがはみ出さない場合はモノルビのように出力され、ルビが各親文字からはみ出す場合はグループルビのように出力されるルビのことである。また、熟語ルビは、熟語の途中で改行が入るとモノルビのように分かれてルビが出力される。  
【０００７】
上述したように、グループルビは、グループルビの途中で改行されると、親文字を同一行内に追い込んだり追い出したりするため、例えば、長い親文字が設定された場合は、行の文字数が少なくなって字間が空きすぎること等があった。これを解決するために、特許文献１では、親文字列及びグループルビを、予め設定した分割予約点で分割することが提案されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平１１−１９１１０１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、上記従来技術では、分割する箇所を規定した分割予約点を予め設定しなければならないため、文章の量が多ければ多いほど設定作業が煩雑となり、簡易な操作で見栄えの良いルビを出力することが困難であった。
【００１０】
さらに、最近では、１つの親文字に対して２つのルビを付すことが要望されている。例えば、親文字としての日本語の文字列に対して、英語のルビと中国語のルビとが同時に付されることが望まれている。このように、同じ親文字に対して複数のルビが付される場合、見栄え良く出力するために、複数のルビを考慮した分割位置を設定させることも考えられる。
【００１１】
さらに、同一の親文字に対して付される複数のルビに、上述した複数の種類のルビ（モノルビ、グループルビ、熟語ルビ）が設定される場合も考えられる。
このような、複数のルビ及び複数種類のルビを考慮した分割位置の設定作業は、ユーザにとっても判断が難しい煩雑な操作となる。
【００１２】
そこで、本発明の目的は、親文字に対して複数のルビが設定された文字列（親文字とルビ）の分割場所を判定することにより、簡易に見栄えの良い文書を出力する仕組みを提供することである。
【課題を解決するための手段】
【００１３】
本発明は、文字枠に配置される文字列に対するルビの出力制御を行う情報処理装置であって、前記文字枠の幅の情報を含む文字枠情報と、当該文字枠に配置される文字列とを記憶する記憶手段と、前記記憶手段に記憶された文字列を構成する一つ以上の文字に対して複数のルビを設定する設定手段と、前記記憶手段に記憶された文字枠情報に従って、前記設定手段で複数のルビが設定された文字を含む文字列内の文字間が該文字枠の行端に配置されるかを判定する判定手段と、前記判定手段で該行端に配置されると判定された当該文字列内の文字に設定されたルビの種類に従って、当該ルビが設定されている文字列の改行位置の候補を改行候補位置として決定する候補位置決定手段と、前記候補位置決定手段により決定された改行候補位置と該行端との位置関係に従って、前記候補位置決定手段により決定された改行候補位置の中から当該文字列の改行位置を選択する改行位置選択手段と、
前記改行位置選択手段により選択された前記文字列の改行位置に従って、当該文字列に設定された複数のルビの改行位置を決定するルビ改行位置決定手段と、前記改行位置選択手段により選択された改行位置で改行された文字列と、前記ルビ改行位置決定手段により決定された改行位置で改行されたルビとを出力する出力手段と、を備えることを特徴とする。
【００１４】
また、本発明は、文字枠の幅の情報を含む文字枠情報と、当該文字枠に配置される文字列とを記憶する記憶手段を備えた情報処理装置における情報処理方法であって、前記情報処理装置の設定手段が、前記記憶手段に記憶された文字列を構成する一つ以上の文字に対して複数のルビを設定する設定工程と、前記情報処理装置の判定手段が、前記記憶手段に記憶された文字枠情報に従って、前記設定工程で複数のルビが設定された文字を含む文字列内の文字間が該文字枠の行端に配置されるかを判定する判定工程と、前記情報処理装置の候補位置決定手段が、前記判定工程で該行端に配置されると判定された当該文字列内の文字に設定されたルビの種類に従って、当該ルビが設定されている文字列の改行位置の候補を改行候補位置として決定する候補位置決定工程と、前記情報処理装置の改行位置選択手段が、前記候補位置決定工程により決定された改行候補位置と該行端との位置関係に従って、前記候補位置決定工程により決定された改行候補位置の中から当該文字列の改行位置を選択する改行位置選択工程と、前記情報処理装置のルビ改行位置決定手段が、前記改行位置選択工程により選択された前記文字列の改行位置に従って、当該文字列に設定された複数のルビの改行位置を決定するルビ改行位置決定工程と、前記情報処理装置の出力手段が、前記改行位置選択工程により選択された改行位置で改行された文字列と、前記ルビ改行位置決定工程により決定された改行位置で改行されたルビとを出力する出力工程と、を備えることを特徴とする。
【００１５】
また、本発明は、文字枠に配置される文字列に対するルビの出力制御を行う情報処理装置で読み取り実行可能なプログラムであって、前記プログラムは、前記文字枠の幅の情報を含む文字枠情報と、当該文字枠に配置される文字列とを記憶する記憶手段と、前記記憶手段に記憶された文字列を構成する一つ以上の文字に対して複数のルビを設定する設定手段と、前記記憶手段に記憶された文字枠情報に従って、前記設定手段で複数のルビが設定された文字を含む文字列内の文字間が該文字枠の行端に配置されるかを判定する判定手段と、前記判定手段で該行端に配置されると判定された当該文字列内の文字に設定されたルビの種類に従って、当該ルビが設定されている文字列の改行位置の候補を改行候補位置として決定する候補位置決定手段と、前記候補位置決定手段により決定された改行候補位置と該行端との位置関係に従って、前記候補位置決定手段により決定された改行候補位置の中から当該文字列の改行位置を選択する改行位置選択手段と、前記改行位置選択手段により選択された前記文字列の改行位置に従って、当該文字列に設定された複数のルビの改行位置を決定するルビ改行位置決定手段と、前記改行位置選択手段により選択された改行位置で改行された文字列と、前記ルビ改行位置決定手段により決定された改行位置で改行されたルビとを出力する出力手段として、前記情報処理装置を機能させることを特徴とする。
【発明の効果】
【００１６】
本発明によれば、親文字に対して複数のルビが設定された文字列（親文字とルビ）の分割場所を判定することにより、簡易に見栄えの良い文書を出力させることができる。
【図面の簡単な説明】
【００１７】
【図１】本実施形態に係るシステムの構成例を示す図である。
【図２】図１に示した情報処理装置１００及び２００のハードウェア構成を示すブロック図である。
【図３】図１における情報処理装置１００が実行する第１の制御処理手順を示すフローチャートである。
【図４】図３のステップＳ３０１の詳細処理を示すフローチャートである。
【図５】図４のステップＳ４０２及びステップＳ４０４の詳細処理を示すフローチャートである。
【図６】図５のステップＳ５０２の詳細処理を示すフローチャートである。
【図７】図５のステップＳ５０３の詳細処理を示すフローチャートである。
【図８】図５のステップＳ５０４の詳細処理を示すフローチャートである。
【図９】図３のステップＳ３０３の詳細処理を示すフローチャートである。
【図１０】図９のステップＳ９０２、Ｓ９０３、Ｓ９０５の詳細処理を示すフローチャートである。
【図１１】図９のステップＳ９０４の詳細処理を示すフローチャートである。
【図１２】図１１のステップＳ１１０４の詳細処理を示すフローチャートである。
【図１３】図１１のステップＳ１１０５の詳細処理を示すフローチャートである。
【図１４】図３のステップＳ３０４の詳細処理を示すフローチャートである。
【図１５】情報処理装置１００の外部メモリ２１１に記憶されているルビ付き文書データを出力するために用いるデータの一例を説明するための図である。
【図１６】親文字とルビの分割位置を説明するための図である。
【図１７】親文字に対して行の切れ目位置から分割候補位置までの距離を説明するための図である。
【図１８】親文字に対して複数のルビが付与された場合の親文字と複数のルビの分割（改行）の例を説明するための図である。
【図１９】親文字に対して複数のルビが付与された場合の親文字と複数のルビの分割（改行）の例を説明するための図である。
【図２０】ルビを登録するための画面の一例を示す図である。
【発明を実施するための形態】
【００１８】
以下、添付図面を参照して、本発明を好適な実施形態に従って詳細に説明する。
＜図１の説明＞
図１は、本実施形態に係るシステムの構成例を示す図である。
【００１９】
図１に示すように、情報処理装置１００と情報処理装置２００と複合機（画像処理装置）３００は、ネットワーク４００を介して相互に通信可能に接続されている。
【００２０】
情報処理装置１００と情報処理装置２００は、ルビが付された文字（列）のデータを生成し記憶している。ここで、ルビが付された文字又は文字列のデータをルビ付き文書データという。
【００２１】
情報処理装置１００と情報処理装置２００は、この記憶されたルビ付き文書データを組版して、情報処理装置のディスプレイや複合機３００に出力することができる。
本実施形態では、情報処理装置１００でルビ付き文書を出力する例について説明する。
【００２２】
＜図２の説明＞
以下、図２を用いて、図１に示した情報処理装置１００及び２００のハードウェア構成について説明する。  図２は、図１に示した情報処理装置１００及び２００のハードウェア構成を示すブロック図である。  
【００２３】
図２において、２０１はＣＰＵで、システムバス２０４に接続される各デバイスやコントローラを統括的に制御する。また、ＲＯＭ２０２あるいは外部メモリ２１１には、ＣＰＵ２０１の制御プログラムであるＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ  ／  Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）やオペレーティングシステムプログラム（以下、ＯＳ）や、各サーバ或いは各ＰＣ（情報処理装置）の実行する機能を実現するために必要な後述する各種プログラム等が記憶されている。  
【００２４】
２０３はＲＡＭで、ＣＰＵ２０１の主メモリ、ワークエリア等として機能する。ＣＰＵ２０１は、処理の実行に際して必要なプログラム等をＲＯＭ２０２あるいは外部メモリ２１１からＲＡＭ２０３にロードして、該ロードしたプログラムを実行することで各種動作を実現するものである。  
【００２５】
また、２０５は入力コントローラで、キーボード（ＫＢ）２０９や不図示のマウス等のポインティングデバイス等からの入力を制御する。２０６はビデオコントローラで、ＣＲＴディスプレイ（ＣＲＴ）２１０等の表示器（表示部）への表示を制御する。なお、図２では、ＣＲＴ２１０と記載しているが、表示器はＣＲＴだけでなく、液晶ディスプレイ等の他の表示器であってもよい。これらは必要に応じて管理者が使用するものである。  
【００２６】
２０７はメモリコントローラで、ブートプログラム，各種のアプリケーション，フォントデータ，ユーザファイル，編集ファイル，各種データ等を記憶する外部記憶装置（ハードディスク（ＨＤ））や、フレキシブルディスク（ＦＤ）、或いはＰＣＭＣＩＡカードスロットにアダプタを介して接続されるコンパクトフラッシュ（登録商標）メモリ等の外部メモリ２１１へのアクセスを制御する。  
【００２７】
２０８は通信Ｉ／Ｆコントローラで、ネットワーク４００を介して外部機器と接続・通信するものであり、ネットワークでの通信制御処理を実行する。例えば、ＴＣＰ／ＩＰを用いた通信等が可能である。  
【００２８】
なお、ＣＰＵ２０１は、例えばＲＡＭ２０３内の表示情報用領域へアウトラインフォントの展開（ラスタライズ）処理を実行することにより、ＣＲＴ２１０上での表示を可能としている。また、ＣＰＵ２０１は、ＣＲＴ２１０上の不図示のマウスカーソル等でのユーザ指示を可能とする。  
【００２９】
本発明を実現するための後述する各種プログラムは、外部メモリ２１１に記録されており、必要に応じてＲＡＭ２０３にロードされることによりＣＰＵ２０１によって実行されるものである。さらに、上記プログラムの実行時に用いられるファイル及び各種テーブル等も、外部メモリ２１１に格納されている。
【００３０】
＜図３の説明＞
図３は、図１における情報処理装置１００が実行する第１の制御処理手順を示すフローチャートであり、本実施形態を説明するための基本的なフローチャートである。
【００３１】
図３に示すステップＳ３０１からステップＳ３０７までの処理は、情報処理装置１００の外部メモリ２１１に記憶されたプログラムをＣＰＵ２０１が実行することにより実現される。
【００３２】
まず、当該プログラムを実行すると、外部メモリ２１１に記憶されたルビ付き文書データをＲＡＭ２０３に読み込み、ルビ付き文書データに従って親文字にルビを付す（ステップＳ３０１）。ステップＳ３０１の詳細処理の説明は、図４を用いて後述する。
【００３３】
次に、ステップＳ３０１でルビ付された文字（列）を文字枠に配置した場合、当該文字（列）が文字枠の幅を超えるか否かを判定することにより、改行するか否かを判定する（ステップＳ３０２）。そして、当該文字（列）が文字枠の幅を超えると判定（改行すると判定）された場合、改行位置候補決定処理を実行する（ステップＳ３０３）。一方、当該文字（列）が文字枠の幅を超えないと判定（改行しないと判定）された場合は、ステップＳ３０５に処理を移行して、読み込んだルビ付き文書データ内の全ての全文字列に対して、少なくともステップＳ３０１からステップＳ３０２の処理を実行したかを判定する（ステップＳ３０５）。
【００３４】
ステップＳ３０３では、現在処理対象の文字列の改行位置の候補の場所を決定した後、実際に改行する位置を決定する処理であり、その詳細処理の説明は、図９を用いて後述する。
【００３５】
次に、ステップＳ３０３の処理を実行した後、ステップＳ３０３で決定された改行の位置に従って改行処理を実行し（ステップＳ３０４）、処理をステップＳ３０５に移行する。
【００３６】
ステップ３０５で、読み込んだルビ付き文書データ内の全ての全文字列に対して、少なくともステップＳ３０１からステップＳ３０２の処理を実行していないと判定された場合は（ステップＳ３０５：ＮＯ）、次の文字列を処理対象の文字列として設定して（ステップＳ３０７）、ステップＳ３０１に処理を移行する。
【００３７】
ステップＳ３０５で、読み込んだルビ付き文書データ内の全ての全文字列に対して処理を実行した場合は、ステップＳ３０４で改行され組版された文書データデータを、ＣＲＴ２１０等の表示部への表示、又は複合機３００への印刷などの出力処理を実行する（ステップＳ３０６）。
＜図４の説明＞
図４は、図３のステップＳ３０１の詳細処理を示すフローチャートである。
【００３８】
図４に示すステップＳ４０１からステップＳ４０４までの処理は、情報処理装置１００の外部メモリ２１１に記憶されたプログラムをＣＰＵ２０１が実行することにより実現される。
【００３９】
まず、情報処理装置１００のＣＰＵ２０１は、プログラムが実行されると、情報処理装置１００の外部メモリ２１１に記憶されている図１５に示すデータを読み込む。
図１５は、情報処理装置１００の外部メモリ２１１に記憶されているルビ付き文書データを出力するために用いるデータの一例を説明するための図である。
ここで、図１５について説明する。
【００４０】
図１５に示す通り、情報処理装置１００の外部メモリ２１１には、文字枠の情報１５０１、段落の情報１５０２、行分割位置１５０３、本文の文字情報１５０４、文字属性情報１５０５、ルビ属性情報１５０６が記憶されている。
文字枠の情報１５０１は、文字枠の高さ、文字枠の幅、文字枠の配置位置から構成されている。
【００４１】
また、段落の情報１５０２は、段落番号、当該段落番号で識別される段落に配置される文字列のデータと、当該段落番号で識別される段落の高さ、及び幅から構成されている。
【００４２】
また、行分割位置（情報）１５０３は改行位置を示す情報である。ここでは、改行される文字の、段落の先頭からの文字数により改行位置（行分割位置）が特定されている。
【００４３】
また、本文の文字情報１５０４は、文書（本文）内の文字列の文字コードから構成される。また、文字属性情報１５０５は、文字のサイズ（ポイント数）、フォントの種類、文字間の間隔などの文字の属性情報と、当該文字の属性情報が適用される文字を、段落の先頭からの文字数（開始位置と終了位置）により特定している。開始位置から終了位置までの文字に対して、設定されている文字の属性情報が適用される。
【００４４】
また、ルビ属性情報１５０６は、ルビ属性情報番号、親文字の開始位置、親文字の文字数、ルビの種別、ルビの配置位置、ルビ文字の区切り位置、ルビ文字、ルビ分割フラグ、親文字の分割位置、ルビ文字の分割位置、ルビの文字間隔、文字サイズ、フォントがそれぞれ対応して構成されている。
【００４５】
ルビ属性情報番号とは、設定されるルビを識別するための情報である。また、親文字の開始位置は、ルビの属性情報が適用される親文字を特定するための情報であり、本実施例では、適用される親文字の、段落先頭からの文字数が記憶されている。また、親文字の文字数は、ルビの属性情報が適用される、親文字の開始位置からの文字数である。
【００４６】
また、ルビの種別は、適用されるルビがモノルビ、グループルビ、熟語ルビのどの種類のルビかを識別するための情報が記憶されている。また、ルビの配置位置は、親文字に対して上側に付されるルビなのか、それとも下側に付されるルビなのかを識別可能に設定されている。本実施の形態では、親文字が横方向の文字列を想定して説明するため、付されるルビが親文字の上側か下側かを設定しているが、親文字が縦方向の文字列の場合は、親文字に対して右側や左側を設定してもよい。
【００４７】
また、ルビ文字の区切り位置には、ルビの分割位置の候補（分割候補位置）が記憶される。また、ルビ文字は、親文字に付されるルビの文字のことである。
また、ルビ分割フラグは、ルビを分割するか否かを「０」と「１」とで識別可能に設定されている。
【００４８】
また、親文字の分割位置は、親文字（列）のどこが分割されるかを示す情報であり、本実施例では、親文字の始めの文字から何文字目になったら、次の文字（列）を分割するかの情報が設定されている。すなわち、分割された場合に、分かれる前方の親文字の数が設定されている。
【００４９】
また、ルビ文字の分割位置は、どこでルビが分割されるかを示す情報であり、本実施例では、ルビの始めの文字から何文字目になったら、次のルビの文字（列）を分割するかの情報が設定されている。すなわち、分割された場合に、分かれる前方のルビの文字数が設定されている。
【００５０】
また、ルビの文字間隔は、出力されるルビの文字間隔を示している。また、文字サイズは、出力されるルビのサイズ（大きさ）を示している。また、フォントは、出力されるルビのフォントの種類が設定される。
【００５１】
＜図２０の説明＞
ここで、図１５のルビ属性情報１５０６に記憶されるデータの登録について、説明する。
図２０は、ルビを登録するための画面の一例を示す図である。
【００５２】
ルビ登録画面２０００は、ユーザにより親文字を入力する入力欄２００１と、当該入力欄に入力された親文字に対して上ルビとして設定するルビの種別の選択を受け付けるラジオボタン２００２と、当該上ルビとして出力する文字列を入力する入力欄２００３と、当該入力欄に入力された親文字に対して下ルビとして設定するルビの種別の選択を受け付けるラジオボタン２００４と、当該下ルビとして出力する文字列を入力する入力欄２００５と、登録ボタン２００６、キャンセルボタン２００７とから構成されている。
【００５３】
ここで、下ルビとは、親文字に対して付されたルビであり、親文字の下に出力されるルビのことである。また、上ルビとは、親文字に対して付されたルビであり、親文字の上に出力されるルビのことである。
【００５４】
本実施例では、親文字が横書きの場合の下ルビと上ルビを事例に説明するが、親文字が縦書きの場合は、下ルビ、上ルビの代わりに、それぞれ右ルビ、左ルビと言い換えても良い。ここで右ルビとは、親文字に対して付されたルビであり、親文字の右に出力されるルビのことである。また、左ルビとは、親文字に対して付されたルビであり、親文字の左に出力されるルビのことである。
【００５５】
ユーザにより、ルビを設定する親文字が２００１に入力され、ルビの配置位置（上ルビ／下ルビ）に設定するルビの種別が選択され、入力欄２００３及び／又は入力欄２０５にルビが入力される。そして、ユーザにより登録ボタン２００６が押下されると、ルビ登録画面２０００で入力（選択）されたデータが登録される。
次に、図４の説明に戻る。
【００５６】
図１５に示すデータを読み込んだあとに、処理対象の文字列を設定する。具体的には、ルビ属性情報１５０６の「親文字の開始位置」で数値の小さい親文字から処理の対象に設定する。すなわち、本文の始めの文字列から処理対象に設定する。
【００５７】
そして、設定された処理対象の文字列（対象文字列）に対して、ルビの配置位置に上ルビが設定されているか否かを判定する（ステップＳ４０１）。そして、ルビの配置位置に上ルビが設定されていれば、「上ルビのルビ配置処理」を実行する（ステップＳ４０２）。ステップＳ４０２の詳細処理は、図５を用いて後述する。
【００５８】
ステップＳ４０１でルビの配置位置に上ルビが設定されていと判定された場合は、処理をステップＳ４０３に移行し、ルビの配置位置に下ルビが設定されているか否かを判定する（ステップＳ４０３）。そして、ルビの配置位置に下ルビが設定されていれば、「上ルビのルビ配置処理」を実行する（ステップＳ４０４）。ステップＳ４０２の詳細処理は、図５を用いて後述する。
【００５９】
ここで、ステップＳ４０２とステップＳ４０４のルビ配置処理は、処理対象が上ルビか下ルビかの違いであり、本実施の形態では、図５の説明をすることで、ステップＳ４０２とステップＳ４０４をすることとする。
【００６０】
＜図５の説明＞
図５は、図４のステップＳ４０２及びステップＳ４０４の詳細処理を示すフローチャートである。
【００６１】
図５に示すステップＳ５０１からステップＳ５０４までの処理は、情報処理装置１００の外部メモリ２１１に記憶されたプログラムをＣＰＵ２０１が実行することにより実現される。
【００６２】
まず、情報処理装置１００のＣＰＵ２０１は、読み出したルビ属性情報で、現在処理対象の対象文字列（親文字）に対して設定されているルビの種類を判定する（ステップＳ５０１）。具体的には、「ルビ種類」がグループルビに設定されているか、モノルビに設定されているか、熟語ルビに設定されているか、を判定する。
【００６３】
そして、ステップＳ５０１でモノルビと設定されていると判定された場合は、処理をステップＳ５０２に移行して、モノルビ処理を実行する。モノルビ処理の詳細処理は、図６を用いて後述する。
【００６４】
また、ステップＳ５０１でグループルビと設定されていると判定された場合は、ステップＳ５０３に処理を移行して、グループルビ処理を実行する（ステップＳ５０３）。グループルビ処理の詳細処理は、図７を用いて後述する。
【００６５】
また、ステップＳ５０１で熟語ルビと設定されていると判定された場合は、ステップＳ５０４に処理を移行して、熟語ルビ処理を実行する（ステップＳ５０４）。熟語ルビ処理の詳細処理は、図８を用いて後述する。
【００６６】
＜図６の説明＞
図６は、図５のステップＳ５０２の詳細処理を示すフローチャートである。
【００６７】
図６に示すステップＳ６０１からステップＳ６０６までの処理は、情報処理装置１００の外部メモリ２１１に記憶されたプログラムをＣＰＵ２０１が実行することにより実現される。
【００６８】
まず、情報処理装置１００のＣＰＵ２０１は、ルビの文字列長を算出する（ステップＳ６０１）。具体的には、現在、処理対象の文字列（親文字）に設定されているルビ属性情報内のルビの文字数、ルビの文字サイズ、フォント、ルビの文字間隔から、当該親文字に付されるルビの文字列の長さ（文字列長）を算出する。
【００６９】
次に、情報処理装置１００のＣＰＵ２０１は、親文字列長を算出する（ステップＳ６０２）。具体的には、現在、処理対象の文字列（親文字）に対応する、ルビ属性情報内の親文字数、ルビ種別などと、文字属性情報内の親文字の文字属性情報１５０５内の文字サイズ、文字間隔、フォントなどとから、処理対象の文字列（親文字）の長さ（親文字列長）を算出する。
【００７０】
次に、情報処理装置１００のＣＰＵ２０１は、ステップＳ６０２で算出された親文字列長よりも、ステップＳ６０１で算出されたルビの文字列長が長いか否かを判定する（ステップＳ６０３）。そして、親文字列長よりも、ルビの文字列長の方が長いと判定された場合は（ステップＳ６０３：ＹＥＳ）、ルビの文字列長が親文字列長以下になるように、親文字の前後の文字の文字間隔を調整する（ステップＳ６０４）。一方、親文字列長がルビの文字列長以下であると判定された場合は（ステップＳ６０３：ＮＯ）、処理をステップＳ６０５に移行する。ステップＳ６０４でルビの文字列長が親文字列長以下になるように、親文字の前後の文字の文字間隔を調整した後に、又は、親文字列長がルビの文字列長以下であると判定された場合は（ステップＳ６０３：ＮＯ）、現在処理対象の文字列を組版し（ステップＳ６０５）、処理対象の文字列に対するルビを組版する（ステップＳ６０６）。ステップＳ６０５、ステップＳ６０６で、組版される親文字とルビは、ルビ属性情報に記憶されており、現在処理対象の文字列と当該文字列に対応するルビが組版される。
【００７１】
＜図７の説明＞
図７は、図５のステップＳ５０３の詳細処理を示すフローチャートである。
【００７２】
図７に示すステップＳ７０１からステップ７０７までの処理は、情報処理装置１００の外部メモリ２１１に記憶されたプログラムをＣＰＵ２０１が実行することにより実現される。
【００７３】
ステップＳ７０１、ステップＳ７０２及びステップＳ７０３は、それぞれステップＳ６０１とステップＳ６０２とステップＳ６０３と同様なので、ここでは説明を省略する。
【００７４】
ステップＳ７０３で、親文字列長よりも、ルビの文字列長の方が長いと判定された場合は（ステップＳ７０３：ＹＥＳ）、ルビの文字列長と親文字列長が同じになる親文字間の間隔を算出する（ステップＳ７０４）。一方、親文字列長がルビの文字列長以下であると判定された場合は（ステップＳ７０３：ＮＯ）、処理をステップＳ７０５に移行する。ステップＳ７０５では、ルビの文字列長と親文字列長とが同じになるルビの文字列の間隔を算出する。
【００７５】
次に、ステップＳ７０４又はステップＳ７０５を実行したあと、処理をステップＳ７０６に移行する。ステップＳ７０６及びステップＳ７０７はそれぞれ、図６に示すステップＳ６０５及びステップＳ６０６と同様なので、ここでは説明を省略する。
【００７６】
＜図８の説明＞
図８は、図５のステップＳ５０４の詳細処理を示すフローチャートである。
【００７７】
図８に示すステップＳ８０１からステップ８０７までの処理は、情報処理装置１００の外部メモリ２１１に記憶されたプログラムをＣＰＵ２０１が実行することにより実現される。
【００７８】
ステップＳ８０１、ステップＳ８０２、ステップＳ８０３、ステップＳ８０４、ステップＳ８０５、ステップＳ８０６、ステップＳ８０７はそれぞれ、ステップＳ７０１、ステップＳ７０２、ステップＳ７０３、ステップＳ７０４、ステップＳ７０５、ステップＳ７０６、ステップＳ７０７と同様なのでここでは説明を省略する。
【００７９】
＜図９の説明＞
図９は、図３のステップＳ３０３の詳細処理を示すフローチャートである。
【００８０】
図９に示すステップＳ９０１からステップＳ９０７までの処理は、情報処理装置１００の外部メモリ２１１に記憶されたプログラムをＣＰＵ２０１が実行することにより実現される。
【００８１】
情報処理装置１００のＣＰＵ２０１は、ステップＳ３０２で、現在の対象文字列が、文字枠の幅を超えると判定（改行すると判定）された場合は、現在の処理対象の文字列に対して、上ルビと下ルビが付されているか否かを判定する（ステップＳ９０１）。具体的には、現在の処理対象文字列に対する、ルビ属性情報内のルビの配置位置に上ルビと下ルビが付されているか否かを判定する。
ここで、現在処理対象の文字列の一部が、他のルビ属性情報番号の文字列（親文字）と重複している場合、その文字列も処理対象となる。
【００８２】
具体的には、ルビ属性情報１５０６のルビ属性情報番号が１で処理対象になっている親文字は、「野鳥を観察し楽しむ」という文字列であり、上ルビとして「バードウォッチング」が設定されている。また、ルビ属性情報番号が２に、ルビ属性情報番号が１で処理対象になっている親文字と重複した「野鳥」に対して、下ルビとして「やちょう」が設定されている。このように、現在処理対象の文字列の一部が、他のルビ属性情報番号の文字列（親文字）と重複している場合、その文字列も処理対象となる。
【００８３】
このように、現在の処理対象の文字列に対して、上ルビと下ルビが設定されている場合（ステップＳ９０１：ＹＥＳ）、まずは上ルビが設定された親文字の分割位置の候補を決定するための処理（ステップＳ９０２）を実行する。一方、現在の処理対象の文字列に対して、上ルビと下ルビが共に設定されていない場合（ステップＳ９０１：ＮＯ）、ルビが設定された現在処理対象の文字列の分割位置の候補を決定するための処理（ステップＳ９０５）を実行する。
【００８４】
そして、ステップＳ９０２を実行した後、下ルビが設定された親文字の分割位置の候補を決定するための処理（ステップＳ９０３）を実行し、その後に、行分割位置まとめ処理（ステップＳ９０４）を行う。
【００８５】
ステップＳ９０５の処理の後に、ステップＳ９０５で決定された分割位置で改行する（ステップＳ９０６）。そして、グループルビの分割フラグをルビ属性情報１５０６に設定する。
【００８６】
ここで、ステップＳ９０２とステップＳ９０３とステップＳ９０５はそれぞれ、処理の対象が、上ルビか、下ルビか、設定されているルビかにより異なるだけあり、処理自体は変わらない。
【００８７】
ステップＳ９０２とステップＳ９０３とステップＳ９０５の詳細処理の説明を、図１０を用いて後述する。
【００８８】
また、ステップＳ９０４の詳細処理の説明を、図１１を用いて後述する。
【００８９】
＜図１０の説明＞
図１０は、図９のステップＳ９０２、Ｓ９０３、Ｓ９０５の詳細処理を示すフローチャートである。
【００９０】
図１０に示すステップＳ１００１からステップＳ１００７までの処理は、情報処理装置１００の外部メモリ２１１に記憶されたプログラムをＣＰＵ２０１が実行することにより実現される。
【００９１】
情報処理装置１００のＣＰＵ２０１は、現在処理対象の文字列（親文字）の中のどこで行が切れるか（行の切れ目）（行端ともいう）を算出して特定する（ステップＳ１００１）。
【００９２】
具体的には、現在処理対象の文字列が配置される行の文字の文字数、そのフォントサイズ（文字サイズ）、文字間隔、出力されるフォントなどから、当該行に配置される行頭の文字から各文字までの距離を算出する。そして、算出された各文字までの距離が、段落の情報１５０２の段落の幅を超える文字と、当該文字の隣に配置される、段落の幅を超えない文字との間を行の切れ目として特定する。
【００９３】
次に、特定された「行の切れ目」にグループルビが付されているかを判定し、グループルビが付されていると判定された場合は（ステップＳ１００２：ＹＥＳ）、グループルビの先頭を改行位置の候補として設定する（ステップＳ１００４）。すなわち、グループルビが設定された親文字と、グループルビが設定されていない親文字との間を改行位置の候補（分割候補位置）として設定する。
【００９４】
一方、特定された行の切れ目にグループルビが付されていないと判定された場合は（ステップＳ１００２：ＮＯ）、行の切れ目に熟語ルビが付されているかを判定する（ステップＳ１００３）。そして、熟語ルビが付されていると判定された場合は（ステップＳ１００３：ＹＥＳ）、熟語ルビが設定された親文字の分割位置を改行位置候補に設定する（ステップＳ１００５）。熟語ルビは、改行可能な親文字の位置が予め設定されているため、その改行可能な位置を親文字の改行位置の候補として設定される。この予め設定された改行可能な位置は記憶されている。
【００９５】
次に、ステップＳ１００３で熟語ルビが付されていないと判定された場合は（ステップＳ１００３：ＮＯ）、行の切れ目を親文字の改行位置の候補として設定する（ステップＳ１００６）。
【００９６】
そして、ステップＳ１００４、ステップＳ１００５、ステップＳ１００６で設定されたルビが設定された親文字の分割位置の候補を、ルビ属性情報１５０６の「ルビ文字の区切り位置」に記憶する（ステップＳ１００７）。
【００９７】
図９のステップＳ９０２では、上ルビを処理の対象として、図１０に示す処理を実行し、図９のステップＳ９０３では、下ルビを処理の対象として、図１０に示す処理を実行する。
また、図９のステップＳ９０５では、付されている上ルビ又は下ルビを処理の対象として、図１０に示す処理を実行する。
【００９８】
＜図１１の説明＞
図１１は、図９のステップＳ９０４の詳細処理を示すフローチャートである。
【００９９】
図１１に示すステップＳ１１０１からステップＳ１１０６までの処理は、情報処理装置１００の外部メモリ２１１に記憶されたプログラムをＣＰＵ２０１が実行することにより実現される。
【０１００】
情報処理装置１００のＣＰＵ２０１は、まず、ステップＳ１００６及び／又はステップＳ１００５及び／又はステップＳ１００４で候補として設定された、上ルビと下ルビとして設定された親文字の分割位置が同じか否かを判定する（ステップＳ１１０１）。ここでは、行の切れ目と上ルビと下ルビの親文字の分割位置とが同じかを判定している。
【０１０１】
そして、分割位置の候補が同じ位置にある場合、候補として同じ分割位置を、分割位置に決定し設定する（ステップＳ１００３）。
【０１０２】
一方、ステップＳ１１０１で、行の切れ目と、候補として設定された上ルビと下ルビの分割位置が異なると判定された場合は、上ルビと下ルビの両方がグループルビか否かを判定する（ステップＳ１１０２）。そして、上ルビと下ルビの両方がグループルビであると判定された場合は、ステップＳ１１０４に処理を移行して、分割位置を決定するための処理を実行する。ステップＳ１１０４の詳細処理の説明は、図１２を用いて後述する。
【０１０３】
ステップＳ１００２において、上ルビと下ルビの両方がグループルビではないと判定された場合は、グループルビではない方のルビが設定された親文字の分割位置候補（分割候補位置）の中から、分割位置を決定し設定する（ステップＳ１１０６）。ここでの分割位置の決定方法については、図１８の１８０２及び図１９の１９０１、１９０２を用いて説明する。
【０１０４】
次に、ステップＳ１１０４の処理を実行したあと、を実行する（ステップＳ１１０５）。グループルビの分割処理の詳細処理は、図１３を用いて後述する。
【０１０５】
＜図１２の説明＞
図１２は、図１１のステップＳ１１０４の詳細処理を示すフローチャートである。
【０１０６】
図１２に示すステップＳ１２０１からステップＳ１２１０までの処理は、情報処理装置１００の外部メモリ２１１に記憶されたプログラムをＣＰＵ２０１が実行することにより実現される。
【０１０７】
情報処理装置１００のＣＰＵ２０１は、行の切れ目の位置から、上ルビの分割候補位置までの距離をＤ１として算出する（ステップＳ１２０１）。次に、行の切れ目位置から、下ルビの分割候補位置までの距離Ｄ２を算出する（ステップＳ１２０２）。ここでの処理を、図１７を用いて説明する。
【０１０８】
図１７は、親文字に対して行の切れ目位置から分割候補位置までの距離を説明するための図である。
【０１０９】
図１７には、親文字である「○×△●□▲■▽○▼」が右方向に記載されている例を示している。ここで、「□▲■▽」の親文字に対して上ルビとしてグループルビが付されることを示している。また、「△●□▲」の親文字に対して下ルビとしてグループルビが付されることを示している。
【０１１０】
したがって、上ルビの分割候補位置は、「●」と「□」の間と、「▽」と「○」の間となる。また、下ルビの分割候補位置は、「×」と「△」の間と、「▲」と「■」の間となる。
そして、図１７には、「▲」と「■」の間に行の切れ目の位置があることを示している。
【０１１１】
このような場合、ステップＳ１２０１で算出されるＤ１は、図１７に示すように、行の切れ目の位置から上ルビの分割候補位置までの距離となり、また、ステップＳ１２０２で算出されるＤ２は、図１７に示すように、行の切れ目の位置から下ルビの分割候補位置までの距離となる。
【０１１２】
「現在処理対象の文字列が配置される行の行頭の文字から分割候補位置までの距離」から、「行頭の文字から行の切れ目の位置までの距離」を減算することにより、行の切れ目から分割候補位置までの距離を算出することができる。
【０１１３】
このようにして算出されたＤ１が０（ゼロ）よりも小さい値か否かを判定する（ステップＳ１２０３）。すなわち、行の切れ目の位置から行頭に向かって上ルビの分割候補位置があるか否かを判定する。
【０１１４】
そして、ステップＳ１２０３で、Ｄ１が０（ゼロ）よりも小さい値と判定された（行の切れ目の位置から行頭に向かって上ルビの分割候補位置がない）場合は（ステップＳ１２０３：ＹＥＳ）、Ｄ２が０（ゼロ）よりも小さい値か否かを判定する（ステップＳ１２０４）。すなわち、行の切れ目の位置から行頭に向かって下ルビの分割候補位置があるか否かを判定する。
【０１１５】
ステップＳ１２０３で、Ｄ１が０（ゼロ）以上であると判定された場合は（ステップＳ１２０３：ＮＯ）、Ｄ２が０（ゼロ）よりも小さい値か否かを判定する（Ｄ２が０（ゼロ）以上であるか否かを判定する）（ステップＳ１２０７）。Ｄ２が０（ゼロ）よりも小さい値であると判定された場合は、上ルビの分割候補位置の中から分割位置に決定する（ステップＳ１２１０）。
【０１１６】
具体的には、上ルビの分割候補位置の中から、行の切れ目の位置から行頭に向かって最も近い分割候補位置を選択して、その箇所を分割位置として決定する。行の切れ目の位置に上ルビの分割候補位置がある場合は、その位置を分割位置として決定する。
【０１１７】
また、ステップＳ１２０７において、Ｄ２が０（ゼロ）以上であると判定された場合は（ステップＳ１２０７：ＮＯ）、Ｄ２がＤ１より長いか否かを判定する（ステップＳ１２０８）。そして、Ｄ２がＤ１より長いと判定された場合は（ステップＳ１２０８：ＹＥＳ）、処理をステップＳ１２１０に移行して、上述した通り、上ルビの分割候補位置の中から分割位置に決定する。
【０１１８】
また、ステップＳ１２０７において、Ｄ２が０（ゼロ）より小さい値であると判定された場合（ステップＳ１２０７：ＹＥＳ）、すなわち、行の切れ目の位置から行頭に向かって下ルビの分割候補位置がないと判定された場合は、ステップＳ１２１０に移行して、上述した通り、上ルビの分割候補位置の中から分割位置に決定する。
また、ステップＳ１２０８において、Ｄ１がＤ２以上の長さの場合は、ステップｓ１２０９に移行して、下ルビの分割候補位置を分割位置として決定する。
【０１１９】
具体的には、下ルビの分割候補位置の中から、行の切れ目の位置から行頭に向かって最も近い分割候補位置を選択して、その箇所を分割位置として決定する。行の切れ目の位置に下ルビの分割候補位置がある場合は、その位置を分割位置として決定する。
【０１２０】
また、ステップＳ１２０４において、Ｄ２が０（ゼロ）以上の値である、すなわち、行の切れ目の位置から行頭に向かって下ルビの分割候補位置があると判定された場合（ステップＳ１２０４：ＮＯ）、処理をステップＳ１２０９に移行する。
【０１２１】
また、ステップＳ１２０４において、Ｄ２が０（ゼロ）よりも小さい値である、すなわち、行の切れ目の位置から行頭に向かって下ルビの分割候補位置がないと判定された場合（ステップＳ１２０４：ＹＥＳ）は、行の切れ目を分割位置として決定する（ステップＳ１２０５）。
【０１２２】
また、ステップＳ１２０５、ステップＳ１２０９、ステップＳ１２１０で決定されルビが設定された親文字の分割位置を、ルビ属性情報１５０６の「親文字の分割位置」に記憶する（ステップ１２０６）。ここでは、親文字の分割位置（ＬＧ１）を、ルビ属性情報１５０６内の「親文字の分割位置」に記憶する。
【０１２３】
＜図１３の説明＞
図１３は、図１１のステップＳ１１０５の詳細処理を示すフローチャートである。
【０１２４】
図１３に示すステップＳ１３０１からステップＳ１３０７までの処理は、情報処理装置１００の外部メモリ２１１に記憶されたプログラムをＣＰＵ２０１が実行することにより実現される。
情報処理装置１００のＣＰＵ２０１は、まず、グループルビの文字列の中に（途中に）分割位置があるか否かを判定する（ステップＳ１３０１）。
具体的には、ルビ属性情報１５０６内のルビ分割フラグが「１」か「０」かの判定を行う。
【０１２５】
そして、グループルビの文字列の中に（途中に）分割位置がある（ルビ分割フラグが「１」）と判定された場合は（ステップＳ１３０１：ＹＥＳ）、分割位置よりも前の親文字数（ＬＧ１）を、ルビ属性情報１５０６の「親文字の分割位置」の項目から取得する。
【０１２６】
また、ルビ属性情報から、処理対象の親文字の文字数（全文字数）を取得する。そして、親文字の文字数（全文字数）から、分割される場合の、前方側の親文字数（分割位置よりも前の親文字数）を引くことにより、分割位置より後の親文字の文字数（ＬＧ２）を算出して取得する（ステップＳ１３０２）。
【０１２７】
そして、処理対象のルビ（文字）（ＬＲ）（例えば、バードウォッチングなどのルビ文字）を、ルビ属性情報１５０６の「ルビ文字」の項目から取得する（ステップＳ１３０３）。
次に、分割位置よりも前のルビの文字数を、次式を算出することにより取得する（ステップＳ１３０４）。
【０１２８】
（式）「分割位置よりも前のルビの文字数（ＬＲ１）」＝「ルビの文字数（ＬＲ）」×「分割位置より前の親文字数（ＬＧ１）」÷（「分割位置より前の親文字数（ＬＧ１）」＋「分割位置より後の親文字数（ＬＧ２）」）
【０１２９】
上述した式を用いて算出された「分割位置よりも前のルビの文字数（ＬＲ１）」が、整数として表すことが出来ない値（小数など）の場合、例えば、小数点以降の小数を、四捨五入などして整数に丸める（ステップＳ１３０５）。
【０１３０】
そして、ステップＳ１３０３で取得したルビの文字数から、ステップＳ１３０５で算出された整数の「分割位置よりも前のルビの文字数（ＬＲ１）」を減算することにより、「分割位置よりも後のルビの文字数（ＬＲ２）」を算出する。ここで、算出された「分割位置よりも後のルビの文字数（ＬＲ２）」を設定する（ステップＳ１３０６）。
【０１３１】
次に、ステップＳ１３０６で設定された「分割位置より前のルビ文字数（ＬＧ１）」を、ルビ属性情報１５０６の「ルビ文字の分割位置」の項目に記憶する（ステップＳ１３０７）。
図１６は、親文字とルビの分割位置を説明するための図である。
図１６に示す通り、「野鳥を観察し楽しむという」が親文字であり、この親文字（文字列）に対して「バードウォッチング」がグループルビとして出力される。
【０１３２】
「野鳥」と「を観察し楽しむという」の間で分割される場合、親文字が２文字と１０文字に分割される。これに比例して、グループルビも２文字と７文字に分割される。
【０１３３】
ここでは、２文字に分割された親文字をＬＧ１、１０文字に分割された親文字をＬＧ２として表し、２文字に分割されたグループルビをＬＲ１、７文字に分割されたグループルビをＬＲ２として表している。
【０１３４】
＜図１４の説明＞
図１４は、図３のステップＳ３０４の詳細処理を示すフローチャートである。
【０１３５】
図１４に示すステップＳ１４０１からステップＳ１４０７までの処理は、情報処理装置１００の外部メモリ２１１に記憶されたプログラムをＣＰＵ２０１が実行することにより実現される。
【０１３６】
情報処理装置１００のＣＰＵ２０１は、まず、ルビ属性情報１５０６の「ルビ種類」がグループルビであり、かつ「ルビ分割フラグ」が「１」であるか否かを判定する（ステップＳ１４０１）。
【０１３７】
そして、「ルビ種類」がグループルビであり、かつ「ルビ分割フラグ」が「１」であると判定された場合は（ステップＳ１４０１：ＹＥＳ）、図１３に示す処理で決定されたルビ文字の分割位置でルビを分割する。このように、親文字数の分割された文字数の割合でルビ文字を分割する（ステップＳ１４０６）。
そして、分割されたルビをグループルビとして組版して処理をステップＳ１４０３に移行する。
【０１３８】
また、ステップＳ１４０１において、「ルビ種類」がグループルビではない、又は「ルビ分割フラグ」が「０」であると判定された場合は（ステップＳ１４０１：ＮＯ）、「ルビ種類」が熟語ルビであり、かつ「ルビ分割フラグ」が「１」であるか否かを判定する（ステップＳ１４０２）。そして、「ルビ種類」が熟語ルビであり、かつ「ルビ分割フラグ」が「１」であると判定された場合は（ステップＳ１４０２：ＹＥＳ）、決定された分割位置により分割された親文字に従ってルビ文字を分割する（ステップＳ１４０４）。
【０１３９】
複数も文字から構成される文字列に対して熟語ルビが設定されている場合、モノルビのように出力するために、各文字に対応するルビが関連付けて記憶されている。したがって、ステップＳ１４０４では、分割される親文字の位置で、ルビも分割されることとなる。
このように、分割されたルビを組版して処理をステップＳ１４０３に移行する。
ステップＳ１４０３では、ここで分割され組版されたデータを設定する。
【０１４０】
＜図１８の説明＞
図１８は、親文字に対して複数のルビが付与された場合の親文字と複数のルビの分割（改行）の例を説明するための図である。
【０１４１】
図１８の１８０１は、右方向に文章を記載した親文字「○○○」に対して上ルビのグループルビ「▲▲▲▲▲▲」が設定され、一部親文字が重複した「○○○」に対して下ルビのグループルビ「▽▽▽▽▽▽」が設定されている例を示している。
【０１４２】
ここでの例の場合、これら２つの親文字を処理対象の文字列「○○○○○○」とし、１８０１で示す箇所が行の切れ目であることを示している。上ルビに付されたルビはグループであるため、上ルビのグループルビが設定された親文字と、上ルビのグループルビが設定されていない文字との間に分割候補位置を点線で示している。下ルビもグループルビなのでこれと同様に、下ルビのグループルビが設定された親文字と、下ルビのグループルビが設定されていない文字との間に分割候補位置を点線で示している。
【０１４３】
また、１８０１の行の切れ目の場合、行の切れ目から行頭に向かって最も近い分割候補位置を分割位置（改行位置）として決定している。分割位置（改行位置）は、実線で示している。また、実線で示される分割位置で改行された場合、１８０１に示すように、親文字「○○○」に対して、上ルビのグループルビ「▲▲▲▲▲▲」が設定され、下ルビのグループルビ「▽▽」が設定されている。また、改行された部分は、親文字「○○」に対して分割された下ルビの「▽▽▽▽」が設定され、これらの設定の結果が出力される。
【０１４４】
また、実線で示す分割位置で改行された場合、行の切れ目と分割位置の間に１文字分のスペースが出来てしまうため、このような場合は、ここにスペース（空白）のコードを入れるようにしてもよい。
【０１４５】
このように、分割された親文字の文字数の割合に比例して、分割するルビの文字数を決定し分割する。
【０１４６】
次に、図１８の１８０２は、右方向に文章を記載した親文字「○○○」に対して、上ルビにグループルビ「▲▲▲▲▲▲」が設定され、一部親文字が重複した「○○○○」下ルビにモノルビ「▽▽▽▽▽▽▽▽▽」が設定されている例を示している。
【０１４７】
ここでの例の場合、これら２つの親文字を処理対象の文字列「○○○○○○」とし、１８０２で示す箇所が行の切れ目であることを示している。上ルビに付されたルビはグループであるため、上ルビのグループルビが設定された親文字と、上ルビのグループルビが設定されていない文字との間に分割候補位置を点線で示している。下ルビはモノルビであるため、モノルビが付されている親文字（文字列）内の各文字間と、ルビが設定された親文字とルビが設定されていない親文字との間と、に分割候補位置を点線で示している。
【０１４８】
また、１８０２の行の切れ目の場合、行の切れ目と分割候補位置とが同じ位置にあるため、行の切れ目を分割位置（改行位置）として決定している。分割位置（改行位置）は、実線で示している。また、実線で示される分割位置で改行された場合、１８０２に示すように、親文字「○○○」（親文字の先頭３文字）に対して、上ルビのグループルビ「▲▲▲▲▲▲」が設定され、親文字「○○○」（親文字の先頭文字の２文字目から４文字目までの文字）に対して、下ルビのグループルビ「▽▽▽▽▽▽▽」が設定されている。また、改行された部分は、親文字「○」に対して分割された下ルビの「▽▽」が設定され、これらの設定の結果が出力されている。
【０１４９】
このように、処理対象の文字列の中にモノルビがあり、行の切れ目にモノルビが付されている場合は、１８０２に示すように親文字が行の切れ目で分割される。
【０１５０】
ルビの分割位置は、親文字が分割される文字間の各文字にモノルビとして設定されたルビの間となる。
【０１５１】
＜図１９の説明＞
図１９は、親文字に対して複数のルビが付与された場合の親文字と複数のルビの分割（改行）の例を説明するための図である。
【０１５２】
次に、図１９の１９０１は、右方向に文章を記載した親文字「○○○」に対して、上ルビにグループルビ「▲▲▲▲▲▲」が設定され、一部親文字が重複した「○○○○」下ルビに熟語ルビ「▽▽▽▽▽▽▽▽▽」が設定されている例を示している。
【０１５３】
ここでの例の場合、これら２つの親文字を処理対象の文字列「○○○○○○」とし、１９０１で示す箇所が行の切れ目であることを示している。上ルビに付されたルビはグループルビであるため、上ルビのグループルビが設定された親文字と、上ルビのグループルビが設定されていない文字との間に分割候補位置を点線で示している。
【０１５４】
また、下ルビは熟語ルビであるため、熟語ルビが付されている親文字（文字列）内で熟語ルビとして分割可能な箇所（設定されている）を点線で示している。この点線の箇所（位置）を分割候補位置として示している。
【０１５５】
また、１９０１の行の切れ目の場合、行の切れ目と分割候補位置とが同じ位置にあるため、行の切れ目を分割位置（改行位置）として決定している。分割位置（改行位置）は、実線で示している。
【０１５６】
また、実線で示される分割位置で改行された場合、１９０１に示すように、親文字「○○」（親文字の先頭２文字）に対して、上ルビのグループルビ「▲▲▲▲」が設定され、親文字「○」に対して下ルビの熟語ルビ「▽▽」が設定されている。また、親文字「○○○」（親文字の先頭文字の３文字目から５文字目までの文字）に対して、下ルビのグループルビ「▽▽▽▽▽▽▽」が設定されている。また、改行された親文字「○」（親文字の先頭文字の３文字目）に対して、上ルビ「▲▲」が設定されている。このような処理がなされ出力される。
【０１５７】
このように、処理対象の文字列の中にグループルビと熟語ルビがある場合で、行の切れ目に熟語ルビが付されている場合、行の切れ目が熟語ルビとして分割可能な位置であれば、１９０１に示すように、その行の切れ目で親文字が分割される。
【０１５８】
このときのルビの分割位置について説明する。グループルビの文字列の途中で分割される場合、分割される親文字の文字数の割合に比例して、分割するルビの文字数を決定し分割する。
【０１５９】
また、熟語ルビの文字列の途中で分割される場合のルビの分割位置は、親文字が分割される文字間の各文字に熟語ルビとして設定されたルビの間となる。
【０１６０】
次に、図１９の１９０２は、右方向に文章を記載した親文字「○○○」に対して、上ルビに熟語ルビ「▲▲▲▲▲▲」が設定され、一部親文字が重複した「○○○○」の下ルビにモノルビ「▽▽▽▽▽▽▽▽▽」が設定されている例を示している。
【０１６１】
ここでの例の場合、これら２つの親文字を処理対象の文字列「○○○○○○」とし、１９０２で示す箇所が行の切れ目であることを示している。
【０１６２】
上ルビに付されたルビは熟語ルビであるため、熟語ルビが付されている親文字（文字列）内で熟語ルビとして分割可能な箇所（設定されている）を点線で示している。この点線の箇所（位置）を分割候補位置として示している。分割候補位置を点線で示している。
【０１６３】
また、下ルビはモノルビであるため、モノルビが付されている親文字（文字列）内の各文字間と、ルビが設定された親文字とルビが設定されていない親文字との間と、に分割候補位置を点線で示している。
【０１６４】
また、１９０２の行の切れ目の場合、行の切れ目と分割候補位置とが同じ位置にあるため、行の切れ目を分割位置（改行位置）として決定している。分割位置（改行位置）は、実線で示している。
【０１６５】
また、実線で示される分割位置で改行された場合、１９０２に示すように、親文字「○○」（親文字の先頭２文字）に対して、上ルビのグループルビ「▲▲▲▲」が設定され、親文字「○」（親文字の先頭文字の２文字目の文字）に対して下ルビの熟語ルビ「▽▽」が設定されている。また、親文字「○○○」（親文字の先頭文字の３文字目から５文字目までの文字）に対して、下ルビのグループルビ「▽▽▽▽▽▽▽」が設定されている。また、改行された親文字「○」（親文字の先頭文字の３文字目の文字）に対して、上ルビ「▲▲」が設定されている。このような処理がなされ出力される。
【０１６６】
このように、処理対象の文字列の中にモノルビがあり、行の切れ目にモノルビが付されている場合、１９０２に示すようにその行の切れ目で親文字が分割される。
ルビの分割位置は、親文字が分割される文字間の各文字にモノルビとして設定されたルビの間となる。
【０１６７】
以上説明したように、本実施の形態によれば、親文字に対して複数のルビが設定された文字列（親文字とルビ）の分割場所を判定することにより、簡易に見栄えの良い文書を出力させることができる。  
【０１６８】
以上、本発明の一実施形態を詳述したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記憶媒体等としての実施態様をとることが可能であり、具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。  
【０１６９】
また、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読み出し実行することによっても、達成されることは言うまでもない。  
【０１７０】
この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、プログラムコード自体及びそのプログラムコードを記憶した記憶媒体は本発明を構成することになる。  
【０１７１】
プログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭ等を用いることができる。  
【０１７２】
また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳ（基本システム或いはオペレーティングシステム）などが実際の処理の一部又は全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。  
【０１７３】
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵ等が実際の処理の一部又は全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【符号の説明】
【０１７４】
１００    情報処理装置  ２００    情報処理装置  ３００    複合機  ４００    ネットワーク
【図１】
0005407647.tif 000002
【図２】
0005407647.tif 000003
【図３】
0005407647.tif 000004
【図４】
0005407647.tif 000005
【図５】
0005407647.tif 000006
【図６】
0005407647.tif 000007
【図７】
0005407647.tif 000008
【図８】
0005407647.tif 000009
【図９】
0005407647.tif 000010
【図１０】
0005407647.tif 000011
【図１１】
0005407647.tif 000012
【図１２】
0005407647.tif 000013
【図１３】
0005407647.tif 000014
【図１４】
0005407647.tif 000015
【図１５】
0005407647.tif 000016
【図１６】
0005407647.tif 000017
【図１７】
0005407647.tif 000018
【図１８】
0005407647.tif 000019
【図１９】
0005407647.tif 000020
【図２０】
0005407647.tif 000021