JP4514888B2 - 文書処理方法 - Google Patents
文書処理方法 Download PDFInfo
- Publication number
- JP4514888B2 JP4514888B2 JP2000107469A JP2000107469A JP4514888B2 JP 4514888 B2 JP4514888 B2 JP 4514888B2 JP 2000107469 A JP2000107469 A JP 2000107469A JP 2000107469 A JP2000107469 A JP 2000107469A JP 4514888 B2 JP4514888 B2 JP 4514888B2
- Authority
- JP
- Japan
- Prior art keywords
- document
- unit
- editing
- processing
- display
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Document Processing Apparatus (AREA)
- User Interface Of Digital Computer (AREA)
Description
【発明の属する技術分野】
本発明は、文書処理装置、文書処理方法、およびその方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体に関する。特に、本発明は、文書内のデータが階層構造を有する複数の要素に分類された構造化文書を処理するための方法、その方法を利用可能な文書処理装置、およびその方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体に関する。
【0002】
【従来の技術】
インターネットの普及に伴い、膨大な量の文書が流通するようになった。WWW(World Wide Web)上で公開される文書のほとんどは、HTML(Hyper-Text Markup Language)によって記述されている。HTMLによって記述された文書は、仕様で予め決められた要素を示すタグのみしか用いることができず、膨大な量の文書を効率良く処理するのに適さないという問題点が指摘されるようになった。
【0003】
膨大な文書を効果的に活用するために、XML(eXtensible Markup Language)などのマークアップ言語が提唱されている。それに伴い、XMLなどのマークアップ言語によって記述された、文書内のデータが階層構造を有する複数の要素に分類された構造化文書を、簡便に、効率良く処理するための方法および装置の開発が求められている。
【0004】
【発明が解決しようとする課題】
そこで本発明は、上記の課題を解決することのできる文書処理方法、文書処理装置、およびその方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体を提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【0005】
【課題を解決するための手段】
即ち、本発明の第1の形態における文書処理装置は、文書内のデータが階層構造を有する複数の構成要素に分類された構造化文書を処理するための文書処理装置であって、文書処理装置に対するユーザーの指示を入力するためのユーザーインターフェースと、文書を表示するための処理を行う表示ユニットと、ユーザーインターフェースから伝達された指示に基づいて、構造化文書を編集するための編集コマンドを実行する編集ユニットとを備え、編集コマンドは、編集された全てのデータを含む構成要素のうち、最下位の階層を有する構成要素が更新されたことを表示ユニットに伝達する文書編集通知処理を含む。
【0006】
本発明の第1の形態における文書処理方法は、文書内のデータが階層構造を有する複数の構成要素に分類された構造化文書を処理するための方法であって、構造化文書を編集するための編集要求を取得する工程と、編集要求を取得して、構造化文書に対する編集処理を実行する工程と、編集処理によって変更されたデータを全て含む構成要素のうち、最下位の階層を有する構成要素が更新されたことを通知するための文書編集通知を発行する工程と、文書編集通知を取得して、構成要素に含まれるデータをレイアウトする工程とを含む。
【0007】
本発明の第2の形態における文書処理方法は、文書内のデータが階層構造を有する複数の構成要素に分類された構造化文書を処理するための方法であって、改行処理要求を取得する工程と、改行処理を実行する工程と、改行位置を含む構成要素が更新されたことを通知する文書編集通知を発行する工程と、改行位置を含む構成要素の後に、新たな構成要素が挿入されたことを通知する文書編集通知処理を発行する工程と、文書編集通知処理を取得して、構成要素に含まれるデータをレイアウトする工程とを含む。
【0008】
構造化文書は、SGML、XML、MHEG、HTML、XHTML、およびそれらに対して拡張または限定を行った形式のうちのいずれかの形式で記述されても良い。
【0009】
本発明の第1の形態における記録媒体は、コンピュータ読み取り可能な記録媒体であって、上記いずれかに記載の方法をコンピュータに実行させるためのプログラムを記録する。
【0010】
本発明の第1の形態におけるサーバ装置は、上記いずれかに記載の方法をコンピュータに実行させるためのプログラムを格納する記録媒体と、プログラムを記録媒体から読み出してコンピュータに配信する通信装置とを備える。
【0011】
なお上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションも又発明となりうる。
【0012】
【発明の実施の形態】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態はクレームにかかる発明を限定するものではなく、又実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【0013】
図1は、本実施形態の文書処理方法をコンピュータに実行させるためのプログラムがネットワークを介して配信される様子を示す図である。プログラムは、ダウンロードサーバ20内に設けられたハードディスクなどの記憶媒体に格納されている。すなわち、ダウンロードサーバ20のハードディスクは、本発明の記憶媒体の一形態である。ユーザーは、インターネット10を介してダウンロードサーバ20のハードディスクに格納されたプログラムをダウンロードして、利用者端末30内に設けられたハードディスクなどの記憶媒体に格納することができる。これにより、利用者端末30において、本実施形態の文書処理方法を実現することができる。このとき、プログラムを利用者端末30に配信すべく、ダウンロードサーバ20に設けられたハードディスクからプログラムを読み出す行為は、記憶媒体の使用に該当する。なお、ダウンロードサーバ20に設けられたハードディスクに格納されたプログラムは、符号化または圧縮されたデータとして提供されても良い。本実施形態の文書処理方法をコンピュータに実行させるためのプログラムは、他にも、CD−ROM、フロッピーディスク、メモリーカードなどの記憶媒体に格納された形で提供することができる。
【0014】
本実施形態の文書処理装置は、LANなどのネットワークで接続された文書サーバ40および複数の編集端末50によって構成されても良い。文書サーバ40は、本実施形態のプログラムのうち、少なくとも編集ユニットを備える。編集端末50は、本実施形態のプログラムのうち、少なくともユーザーインターフェースおよび表示ユニットを備える。この構成により、文書サーバ40に格納された一つの文書を、複数のユーザーがそれぞれ編集端末50を用いて編集することができる。編集端末50は、インターネット10を介して文書サーバ40にアクセスしても良い。本実施形態の文書処理方法を実現するためのプログラムは、Java言語などの汎用性の高い言語によって記述されているため、例えば、利用者端末30が本実施形態のプログラムを備えていなくても、文書サーバ40に備えられたプログラムを利用して、文書サーバ40に格納された文書を編集することができる。
【0015】
図2は、ダウンロードサーバ20、利用者端末30、文書サーバ40、および編集端末50などのコンピュータの構成を示す。コンピュータは、主に、入力装置60、表示装置62、通信装置64、CPU66、メモリ68、ハードディスク70、外部記憶装置72、およびバス74を備える。入力装置60は、キーボード、マウス、音声入力装置、タッチパネルなど、ユーザーからの情報をコンピュータに伝達するための装置を含む。表示装置62は、液晶モニタなど、編集中の文書およびメニューなどの情報を表示するための装置を含む。通信装置64は、インターネット10、LANなどの通信手段を介して所定の情報を送受信するための装置を含む。CPU66は、本実施形態のプログラムをロードして実行する。メモリ68は、ROM、RAMなどの記憶装置を含む。
【0016】
図3以降において詳述される本実施形態の文書処理装置の機能ブロックは、プログラムが必要に応じてCPU66に呼び出されて実行されることにより構成される。このプログラムは、通信装置64を介してダウンロードサーバ20から、または、外部記憶装置72に装着されたフロッピーディスク、CD−ROMなどの可搬な記憶媒体から提供され、ハードディスク70に格納される。プログラムは、通信装置64を介してダウンロードサーバ20から、または、外部記憶装置72に装着されたフロッピーディスク、CD−ROMなどの可搬な記憶媒体から、メモリ68に読み込まれても良い。
【0017】
記録媒体としては、フロッピーディスク、CD−ROMの他にも、DVD等の光学記録媒体、MD等の磁気記録媒体、PD等の光磁気記録媒体、テープ媒体、磁気記録媒体、ICカードやミニチュアーカードなどの半導体メモリ等を用いることができる。このような記録媒体は、文書処理装置を製造するためにのみ使用されるものであり、そのような記録媒体の業としての製造および販売等が本出願に基づく特許権の侵害を構成することは明らかである。
【0018】
図3は、本実施形態の文書処理装置の概略機能ブロックを示す。文書処理装置90は、主に、ユーザーインターフェース100、編集ユニット200、表示ユニット300、取消再実行処理制御ユニット400、およびブラグインユニット500を備える。
【0019】
ユーザーインターフェース100は、入力装置60から入力されたユーザーからの指示を受けて、必要な処理を行い、編集ユニット200、表示ユニット300、取消再実行処理制御ユニット400、およびプラグインユニット500へ、指示を伝達する。編集ユニット200は、ユーザーインターフェース100から伝達された指示を受けて、文書に対する編集処理を行い、表示ユニット300へ表示要求を伝達する。また取消再実行処理制御ユニット400へ必要な指示を伝達する。表示ユニット300は、ユーザーインターフェース100、編集ユニット200、またはプラグインユニット500から伝達される表示要求を受けて、表示装置62へ必要な情報を表示するための処理を行う。取消再実行処理制御ユニット400は、ユーザーインターフェース100、編集ユニット200、またはプラグインユニット500で行われた処理を取り消したり、再実行したりするための制御を行う。
【0020】
プラグインユニット500は、文書処理装置90に追加機能を付加するためのモジュールを含む。追加機能の例としては、例えば、印刷機能、文書形式変換機能、特定のタグセットについての編集機能およびレンダリング機能などがある。プラグインユニット500は、ユーザーインターフェース100を介して、入力装置60から伝達された指示を受け取る。そして、指示に応じた処理を行い、必要であれば、ユーザーインターフェース100、編集ユニット200、表示ユニット300、取消再実行処理制御ユニット400へ指示を伝達する。
【0021】
本実施形態の文書処理装置90は、主に、文書内のデータが階層構造を有する複数の要素に分類された構造化文書を処理するための装置である。このような構造化文書には、SGML、XML、MHEG、HTMLなど、多様な形式が提唱されており、さらに、それらに対して拡張または限定を行って新たな形式を作ることも可能である。本実施形態では、これらの形式のうち、XMLによって記述された構造化文書を例にとって説明する。XMLに関する情報は、例えば、http://www.w3.org/TR/ などから入手することができるので、本明細書中では必要に応じて説明するにとどめる。
【0022】
本実施形態の文書処理装置90は、XML文書をデータとして扱うときのアクセス方法を提供するために定められたDOM(Document Object Model)にしたがって、構造化文書を処理する。また、XMLで記述された構造化文書の表示方法を規定するために、CSS(Cascading Style Sheets)またはXSL(XML Style Language)などの形式で記述された文書を用いる。DOM、CSS、XSLに関する情報も、例えば、http://www.w3.org/TR/ などから入手することができるので、本明細書中では必要に応じて説明するにとどめる。
【0023】
図4は、ユーザーインターフェース100の詳細な機能ブロックを示す。ユーザーインターフェース100は、イベント解析部110、イベントマップ120、UIコマンド実行部130、およびメニュー制御部140を備える。
【0024】
イベント解析部110は、入力装置60から伝達されるイベントを受信し、イベントマップ120を参照してイベントの内容を解析し、UIコマンド実行部130、メニュー制御部140、編集ユニット200などへ、必要な指示を伝達する。イベントマップ120には、入力装置60から伝達されるイベントの種類と、イベントによって起動される処理の種類とが、対応づけて格納されている。UIコマンド実行部130は、主に、画面のスクロール、ツールバーの表示/非表示の切り換えなど、文書の編集処理を伴わないような、ユーザーインターフェース100に関する処理を実行する。メニュー制御部140は、イベント解析部110からメニュー表示要求が伝達されると、各種コマンドを実行するためのメニューを生成して、表示装置62に表示するための処理を実行する。
【0025】
図5は、編集ユニット200の詳細な機能ブロックを示す。編集ユニット200は、編集コマンド実行部210、DOMエンジン220、文書保持部230、位置情報保持部240、編集適否判断部250、および文書修正部260を備える。
【0026】
編集コマンド実行部210は、構造化文書を編集するための各種編集コマンドを実行する。DOMエンジン220は、XML文書をデータとして扱うときのアクセス方法を提供するために定められたDOMを、Java言語などのプログラミング言語によって実装したものであり、文書保持部230に保持された対象文書にアクセスして指示された処理を実行する。位置情報保持部240は、対象文書の中の、カーソル位置、選択範囲の始点、選択範囲の終点、しおり位置などといった位置情報を保持する。編集適否判断部250は、編集コマンド実行部210によって実行された編集処理が適当であったか否かを判断する。文書修正部260は、編集コマンド実行部210が実行した編集処理によって編集された文書がさらに修正を必要としている場合に、修正処理を実行する。
【0027】
図6は、表示ユニット300の詳細な機能ブロックを示す。表示ユニット300は、レンダリングユニット選択部310、レンダリング部320、ツリー表示処理部330、および表示部340を備える。レンダリング部320は、スタイル設定部322およびレイアウト処理部324を備える。
【0028】
レンダリングユニット選択部310は、構造化文書の各要素に属するデータをレンダリングするためのレンダリングユニットを選択して、そのレンダリングユニットにレンダリング処理を要求する。レンダリング部320は、主に、XHTML(eXtended Hyper-Text Markup Language)で記述されたデータのレンダリング処理を行う。スタイル設定部322は、色、大きさ、フォントなどのスタイルを設定する。レイアウト処理部324は、テキストデータとフローティングブロックのレイアウト処理を行う。ツリー表示処理部330は、適切なレンダリングユニットによってレンダリングできないデータを、ツリー表示するための処理を行う。表示部340は、作成された表示画面データを表示装置62に表示するための処理を行う。
【0029】
図7から図10を用いて、本実施形態の文書処理装置90の動作の概要を説明する。
【0030】
図7は、本実施形態の文書処理装置90によって処理可能な構造化文書の例を示す。図7において、構造化文書600は、XHTMLによって記述された文書である。1行目はXML宣言であり、文書600がXML仕様の第1.0版に従うことと、シフトJIS形式で符号化されていることを示す。2行目は、この文書がXHTMLによって記述されていることと、日本語で記述されていることを示す。4行目から9行目までは、文書のヘッダ情報である。
【0031】
10行目から20行目は、文書600の本体を構成するデータであり、要素「body」に属する。要素「body」は、その直下の階層の要素(以下、単に「子要素」という)として、3つの要素「div」を含む。「div」は、文書の段落に対応する要素である。1番目の要素「div」は、テキストデータ「あいうえお」を含む。2番目の要素「div」は、子要素「hr」を含む。要素「hr」は、終了タグを持たない空要素であり、水平線を表示するための要素である。3番目の要素「div」は、テキストデータ「かきくけこ」を含む。3番目の要素「div」には、左インデントが8カラムであることを示す表示属性が指定されている。要素「div」のスタイルは、「段落のプロパティ」メニューによって指定することができる。
【0032】
図8は、文書処理装置90が構造化文書600を読み込み、表示ユニット300によって表示装置62へ表示させた様子を示す。表示装置62に表示された画面700は、メニューバー702、ツールバー704、水平ルーラ706、垂直ルーラ708、文書表示部710、およびカーソル712を含む。
【0033】
メニューバー702は、構造化文書600を処理するために必要なコマンドをメニュー表示する。たとえば、メニューバー702の「ファイル」を入力装置60の一例のマウスでクリックすると、「ファイル」メニューが表示される。ツールバー704は、使用頻度の特に高いコマンドをアイコン表示する。アイコンをマウスでクリックすることによりコマンドを起動することができるので、メニューを経由するよりも簡便に所望のコマンドを起動することができる。水平ルーラ706は、主に、カーソル712の水平方向の位置を示す。垂直ルーラ708は、主に、カーソル712の垂直方向の位置を示す。文書表示部710は、構造化文書600をレンダリング部320によってレンダリングした結果を表示する。
【0034】
文書処理装置90は、処理すべき構造化文書600を読み込んで文書保持部230に保持する。続いて、レンダリングユニット選択部310が、構造化文書600のデータの名前空間を参照して、適切なレンダリングユニットを決定する。構造化文書600は全てXHTMLによって記述されているので、レンダリングユニット選択部310は、適切なレンダリングユニットとしてレンダリング部320を選択する。
【0035】
まず、スタイル設定部322が、各要素の表示属性(スタイル)を設定する。XHTMLの各要素の表示属性は、デフォルトスタイルシート、ユーザースタイルシートの順に設定され、順次上書きされていく。文書中に記述されたオーサースタイルシートがある場合には、さらにオーサースタイルシートに記述された表示属性が設定される。要素ごとに表示属性が指定されている場合には、さらに要素ごとに表示属性が設定される。ここでは、3番目の要素「div」に、左インデントが8カラムであるという表示属性が指定されているので、これを3番目の「div」の表示属性として設定する。スタイル設定部322の詳細な動作については、図37において詳述する。
【0036】
つづいて、レイアウト処理部324が、テキストデータとフローティングブロックデータをレイアウトする。文書600には、フローティングブロックがないので、テキストデータのみをレイアウト処理する。テキストデータは、1行ずつレイアウト処理される。レイアウト処理部324の詳細な動作については、図41において詳述する。レンダリング部320によってレンダリングされた表示データは、表示部340によって表示装置62へ表示される。
【0037】
以上の説明からも分かるように、本実施形態の文書処理装置90は、XMLなどによって記述された構造化文書を表示するためのブラウザとしての機能を有する。処理すべき文書を指定せずにプログラムが起動された場合には、対象文書として新規文書を作成しても良い。このとき、本体部分のデータを持たない文書が対象文書として作成される。表示画面700の文書表示部710には何も表示されない。
【0038】
次に、カーソル712の位置で、入力装置60の一例としてのキーボードから文字列「1234」を入力したときの、文書処理装置90の動作を説明する。まず、イベント解析部110が、キーボードからの文字列入力イベントを受信する。イベントマップ120には、文字列入力イベントに文字列挿入コマンドが対応づけられている。イベント解析部110は、イベントマップ120を参照し、文字列挿入コマンドを起動するよう編集ユニット200に指示する。
【0039】
編集コマンド実行部210は、イベント解析部110からの文字列挿入コマンド実行要求を受信して、文字列挿入コマンドを実行する。編集コマンド実行部210は、DOMエンジン220に、1番目の要素「div」のテキストデータのうち、2文字目の後ろの位置に、文字列「1234」を挿入するよう指示する。DOMエンジン220は、DOMの仕様に沿って文書保持部230に保持された文書にアクセスし、指示された処理を実行する。このとき、後で詳述するように、位置情報保持部240に保持された位置情報が自動的に更新される。続いて、DOMエンジン220は、1番目の要素「div」のテキストデータが変更されたことを通知するためのミューテーションイベントを発行し、表示ユニット300に伝達する。
【0040】
表示ユニット300は、ミューテーションイベントを受信して、必要な部分を再レンダリングし、表示装置62の画面を更新する。まず、レンダリングユニット選択部310が、適切なレンダリングユニットを選択する。この場合、1番目の要素「div」をレンダリングするのに適切なレンダリングユニットは、レンダリング部320である。レンダリング部320のスタイル設定部322は、1番目の要素「div」のスタイルを設定する。この場合、スタイルは変更されていないので、再設定の必要はない。レイアウト処理部324は、1番目の要素「div」を再レイアウトする。この場合、左から順に「あい1234うえお」の文字列がレイアウトされる。2番目および3番目の要素「div」については、フローティングブロックの影響を受けないことが明らかであるので、再レイアウトの必要はない。
【0041】
以上のサイクルで、ユーザーから指示された処理が実行される。図9は、上記の処理が実行された後の文書600を示す。12行目のテキストデータが、「あいうえお」から「あい1234うえお」に変更されている。図10は、上記の処理が実行された後の画面700を示す。1段落目が、「あいうえお」から「あい1234うえお」に変更され、カーソル位置が「4」の後ろに移動している。
【0042】
図11は、メニュー制御部140の動作を示すフローチャートである。まず、メニュー制御部140は、入力装置60を介して伝達されるメニュー表示要求を取得する(S100)。メニュー表示要求を取得すると、カーソル位置または編集範囲位置を検出して、現在の編集位置を取得する(S102)。続いて、編集位置を含むデータが属する名前空間を取得する(S104)。編集位置が複数ある場合には、それぞれの名前空間を取得する。続いて、取得した名前空間に対応する文書型定義(DTD:Document Type Definition)を取得する(S106)。文書型定義は、XML Schema、RELAXなどの形式で記述されていても良い。続いて、必要であれば、対象文書の要素の表示規則を記述したスタイルシートを取得する(S108)。スタイルシートは、CSS、XSLなどの形式で記述されていても良い。続いて、DTDと、必要であればスタイルシートとを参照して、メニューを生成する(S110)。続いて、表示ユニット300にメニューを表示するよう指示する(S112)。
【0043】
図12は、XMLによって記述された構造化文書の例を示す。図12に示した構造化文書610においては、名前空間「http://www.sample.com/」で識別される文書型を文書型「sample」と呼ぶことにする。XMLのDTDには名前空間を表現する方法がないため、図12では文書型XHTMLのモジュール化DTDを想定して、文書型「sample」との合成DTDを記述している。すなわち、文書型「sample」に属する要素型名を全て接頭辞「s:」を付加した名前に変換した文書型定義を生成し、それをXHTMLのモジュール化DTDと合成している。CSSスタイルシートにも名前空間を表現する方法がないため、に「sample」に属する要素型に対するスタイル定義は接頭辞「s:」を付加した名前の要素に対するスタイル定義として記述している。以上の制限により、文書610内では文書型「sample]に適用する名前空間接頭辞は「s」に限定している。説明の都合上、図12ではDTDおよびCSSを利用したが、名前空間を表現する能力を持った文書型記述言語やスタイルシート言語を用いてもよい。その場合は、上記のような制限はない。
【0044】
文書610は、文書型「sample」の文書型定義612、文書型「sample」の各要素の表示属性を規定するスタイルシート614、および文書「sample」に属する部分616を含む。
【0045】
文書型定義612は、要素型宣言と、属性リスト宣言を含む。3行目から8行目までは、要素型宣言である。例えば、3行目の要素型宣言は要素「sample」を定義しており、要素「sample」が、要素「sect」または要素「parag」を1回以上含むことを規定している。また、4行目の要素型宣言は要素「sect」を定義しており、要素「sect」が、テキストデータ、要素「sect」、要素「parag」、要素「sub」、要素「bold」、または要素「image」を、0回以上含むことを規定している。また、8行目の要素型宣言は要素「image」を定義しており、要素「image」が、内容を持たない空要素タグであることを規定している。9行目は、属性リスト宣言である。これは、要素「image」が、「size」という属性を必ず持つことを規定している。
【0046】
スタイルシート614は、文書型「sample」の各要素の表示属性を規定する。18行目は、スタイルシート614が、CSS形式で記述されていることを示す。22行目は、要素「sub」が、下付き文字で表示されることを規定する。23行目は、要素「bold」が、太字で表示されることを規定する。
【0047】
図13は、図12に示した構造化文書610のうち、文書型「sample」に属する部分616の階層構造を分かりやすく示した模式図である。最上位の階層の要素である「sample」は、子要素として、「sect」および「parag」を含む。要素「sect」は、テキストデータ「あいうえお」、子要素「sub」、およびテキストデータ「かきくけこ」を含む。要素「sub」は、テキストデータ「1234」、子要素「bold」、およびテキストデータ「90」を含む。要素「bold」は、テキストデータ「5678」を含む。要素「parag」は、テキストデータ「さしすせそ」および子要素「image」を含む。要素「image」は、空要素である。以上のような階層構造は、図12に示した文書型定義612に従っている。すなわち、文書610は、妥当なXML文書である。参照番号(1)から(11)は、図14以降でメニュー制御部140の動作を説明するために用いる。
【0048】
図14は、カーソル712が図13における位置(4)にあるときに、メニューを表示させた様子を示す。カーソル712が図13における位置(4)にあるときに、ユーザーがメニューバー702の「挿入」をマウスでクリックすると、「挿入」メニュー720が表示される。ここで、さらに、項目「タグ」にマウス位置を合わせると、「タグ」メニュー722の表示要求がメニュー制御部140に伝達される。
【0049】
このとき、メニュー制御部140は、編集位置を取得する。この場合、編集位置は、カーソル712の位置である。続いて、メニュー制御部140は、編集位置の名前空間を取得し、対応する文書型を取得する。この場合、カーソル712の位置は、文書型「sample」に属する。続いて、メニュー制御部140は、文書型に対応する文書型定義を取得する。この場合、「sample」に対応する文書型定義は、図12に示した文書型定義612である。続いて、メニュー制御部140は、スタイルシートを取得する。この場合、文書610のスタイルシートは、図12に示したスタイルシート614である。続いて、メニュー制御部140は、メニューを生成する。ここで生成すべきメニューは、「タグ」メニュー722である。メニュー制御部140は、まず、文書型定義612を参照して、カーソル712の位置にタグを挿入しても文書型定義612に反しないようなタグを抽出する。
【0050】
図15は、文書610における編集位置と、その位置に挿入可能なタグとの関係を示す。今、カーソル712は位置(4)にあるので、位置(4)に挿入可能なタグを抽出する。位置(4)は、要素「sub」に含まれている。文書型定義612によると、要素「sub」が子要素として持つことができる要素は、要素「sub」、要素「bold」、および要素「image」である。したがって、これら3つのタグが、位置(4)に挿入可能なタグである。図15においては、このような挿入可能なタグを「○」で示している。要素「sect」および要素「parag」は、要素「sub」の子要素になることができないので、位置(4)には挿入することができない。図15においては、このような挿入不可能なタグを「×」または「△」で示している。「△」で示したタグは、文書修正部260による修正処理によって、文書型定義612に適合した形式に修正可能なタグである。「×」で示したタグは、文書修正部260による修正処理によっても、文書型定義612に適合した形式に修正できないタグである。文書修正部260の動作については、図20において詳述する。
【0051】
メニュー制御部140は、要素「sub」、要素「bold」、および要素「image」が選択可能で、要素「sect」および要素「parag」が選択不可能となるように、タグメニュー722を生成する。図14においては、選択不可能な要素「sect」および要素「parag」には、取消線が表示されている。メニューのうち選択可能な項目が黒字で表示され、選択不可能な項目が灰色で表示されても良い。このとき、マウスを項目に合わせると、選択可能な項目は反転表示されるが、選択不可能な項目は反転表示されない。これにより、ユーザーは、文書型定義612の内容を知らなくても、カーソル712の位置に挿入可能なタグと、挿入不可能なタグを正しく認識することができる。また、文書型定義612を意識することなく、妥当なXML文書を作成することができる。
【0052】
ここで、タグメニュー722の項目「image」の右側には、「...」が表示されている。これは、項目「image」を選択すると、ダイアログが表示されることを示している。文書型定義612の属性リスト宣言によると、要素「image」は、必ず属性「size」を持つ。したがって、属性「size」を指定するためのダイアログを表示し、ユーザーに属性「size」の指定を促す。これにより、ユーザーは、文書型定義612を意識することなく、妥当なXML文書を作成することができる。
【0053】
メニュー制御部140は、さらにスタイルシート614を参照してタグメニュー722を生成しても良い。スタイルシート614によると、要素「sect」および要素「parag」は、段落タイプとしての表示属性を持ち、要素「sub」および要素「bold」は、文字タイプとしての表示属性を持つ。したがって、要素「sect」および要素「parag」をひとまとまりに表示し、要素「sub」および要素「bold」をひとまとまりに表示しても良い。このように、表示属性にしたがって分類表示することで、より分かりやすく操作しやすいメニューにすることができる。
【0054】
図14においては、要素「sect」および要素「parag」という「△」で示された要素を選択不可能にしたが、これらの要素を選択できるようにしても良い。このとき、文書型定義612に適合するように、文書610の階層構造を修正しても良い。階層構造の修正を実行するか否かをユーザーに問い合わせても良い。修正の方法については、図20において詳述する。
【0055】
図16は、範囲724を選択している状態で、メニューを表示させた様子を示す。ユーザーが、範囲724を選択してからメニューバー702の「書式」をマウスでクリックすると、「書式」メニュー726が表示される。ここで、さらに、項目「範囲のタグ化」にマウス位置を合わせると、「範囲のタグ化」メニュー728の表示要求がメニュー制御部140に伝達される。
【0056】
このとき、メニュー制御部140は、編集位置を取得する。この場合、編集位置は、範囲724である。続いて、メニュー制御部140は、編集位置の名前空間を取得する。この場合、範囲724の名前空間は、「sample」である。続いて、メニュー制御部140は、名前空間に対応する文書型定義を取得する。この場合、「sample」に対応する文書型定義は、図12に示した文書型定義612である。続いて、メニュー制御部140は、CSSを取得する。この場合、文書610のCSSは、図12に示したスタイルシート614である。続いて、メニュー制御部140は、メニューを生成する。ここで生成すべきメニューは、「範囲のタグ化」メニュー728である。メニュー制御部140は、まず、文書型定義612を参照して、範囲724をタグ化しても文書型定義612に反しないようなタグを抽出する。
【0057】
図17は、文書610における編集範囲と、その範囲をタグ化可能なタグとの関係を示す。今、位置(11)から位置(12)までの範囲724が選択されているので、この範囲のテキストデータを新たな子要素に変換しても文書型定義612に反しないようなタグを抽出する。範囲724は、要素「parag」に含まれている。文書型定義612によると、要素「parag」が子要素として持つことができる要素は、要素「sub」、要素「bold」、および要素「image」である。したがって、これら3つのタグが、範囲724をタグ化可能なタグである。要素「sect」および要素「parag」は、要素「parag」の子要素になることができないので、範囲724をこれらのタグにタグ化することができない。
【0058】
メニュー制御部140は、要素「sub」、要素「bold」、および要素「image」が選択可能で、要素「sect」および要素「parag」が選択不可能となるように、「範囲のタグ化」メニュー728を生成する。図16においては、選択不可能な要素「sect」および要素「parag」には、取消線が表示されている。メニューのうち選択可能な項目が黒字で表示され、選択不可能な項目が灰色で表示されても良い。このとき、マウスを項目に合わせると、選択可能な項目は反転表示されるが、選択不可能な項目は反転表示されない。これにより、ユーザーは、文書型定義612の内容を知らなくても、範囲724をタグ化可能なタグと、タグ化不可能なタグを正しく認識することができる。また、文書型定義612を意識することなく、妥当なXML文書を作成することができる。
【0059】
図18は、カーソル712が図13における位置(4)にあるときに、文書表示部710の中でマウスを右クリックしてメニューを表示させた様子を示す。カーソル712が図13における位置(4)にあるときに、ユーザーがマウスの右クリックなどの動作によってメニュー表示要求を発すると、「文書編集」メニュー730が表示される。ここで、さらに、項目「挿入」にマウス位置を合わせると、「挿入」メニュー720が表示され、さらに、項目「タグ」にマウス位置を合わせると、「タグ」メニュー722の表示要求がメニュー制御部140に伝達される。このときのメニュー制御部140の動作については、図14において説明した動作と同様である。
【0060】
このように、文書中の要素の階層構造を変更するような編集処理を行う場合、文書型定義に反するような文書が生成してしまう恐れがある。このため、メニュー制御部140は、文書型定義を参照して、文書型定義に適合しない階層構造を生成する編集処理を選択できないようなメニューを生成する。文書型定義に適合しない階層構造を生成する編集処理が選択されたときに、ユーザーに注意を喚起するような構成であっても良い。文書型定義に適合しない階層構造を生成する編集処理が選択されたときに、文書型定義に適合するよう階層構造を修正しても良い。
【0061】
文書処理装置90が、ある特定の名前空間のデータを処理するためのプラグインユニット500を有していても良い。メニュー表示要求が伝達されたときに、そのときの編集位置に対応する名前空間のデータを処理するためのプラグインユニット500が存在する場合には、そのプラグインユニット500がメニューを表示しても良い。これによれば、ユーザーは、名前空間を意識することなく、文書中の各データを処理するのに適したプラグインユニット500のメニューを表示させることができる。
【0062】
図19は、編集適否判断部250の動作を示すフローチャートである。編集適否判断部250は、編集コマンド実行部210が実行する編集コマンドが、適当か否かを判断する。前述のメニュー制御部140は、メニュー表示時にその編集コマンドの適否を判断したが、編集適否判断部250は、編集コマンドの実行要求が伝達されたときに、その編集コマンドの適否を判断する。
【0063】
編集適否判断部250は、編集コマンドの実行要求が伝達されると、その編集コマンドが階層構造の変化を伴うか否かを判断する(S202)。テキストデータのみの挿入、削除、変更など、階層構造の変化を伴わないような編集処理の場合は、Nへ進み、その編集コマンドの実行を許可する(S214)。新たな要素が追加されたり、要素が削除されたりするような、階層構造の変化を伴う編集処理が要求されたときは、Yへ進み、文書型定義が取得できるか否かを判断する(S204)。文書型定義が取得できない場合は、Nへ進み、アラーム処理を行ってユーザーに注意を喚起し(S210)、その編集コマンドの実行を禁止する(S212)。これは、文書型定義に適合しない文書を生成してしまう恐れがあるからである。妥当なXML文書を生成する必要がない場合は、文書型定義の取得の可否に関わらず、編集コマンドの実行を許可しても良い。この場合、編集の結果生成したXML文書が適正形式であるか否かを判断する工程を設けても良い。
【0064】
S204において、文書型定義が取得できた場合は、Yへ進み、要求されている編集コマンドを実行した結果生成する文書が、文書型定義に適合するか否かを判断する(S206)。編集コマンドを実行した結果生成する文書が、文書型定義に適合している場合は、Yへ進み、編集コマンドの実行が許可される(S214)。編集コマンドを実行した結果生成する文書が、文書型定義に適合していない場合は、Nへ進み、編集を実行するか否かをユーザーに問い合わせる(S208)。ユーザーが、文書型定義に適合しない文書が生成するのを認識した上で、その編集コマンドを実行するよう要求した場合には、編集コマンドの実行を許可する(S214)。このとき、文書型定義に適合するよう、階層構造を修正しても良い。階層構造を修正するか否かをユーザーに問い合わせても良い。S208において、ユーザーが編集を実行しないと判断した場合には、Nへ進み、アラーム処理が行われ(S210)、編集コマンドの実行が禁止される(S212)。
【0065】
S208において、編集を実行するか否かをユーザーに問い合わせずに、編集を禁止しても良い。編集を実行するか否かをユーザーに問い合わせずに、アラーム処理を行った後、編集を許可しても良い。
【0066】
以上のような動作により、妥当なXML文書ではない文書が生成してしまうような編集処理が実行されようとしたときに、ユーザーに注意を喚起し、その編集処理を適正に禁止することができるので、ユーザーが文書型定義を意識しなくとも、妥当なXML文書を作成することができる。
【0067】
編集の適否を判断するタイミングは、編集コマンド実行時に限られない。例えば、編集位置が、異なる名前空間のデータの位置に変更されたときに、それまでの編集処理によって生成した文書が、文書型定義に適合しているか否かを判断しても良い。また、文書に対する処理を終了して記録媒体に保存する際に、それまでの編集処理によって生成した文書が、文書型定義に適合しているか否かを判断しても良い。この場合も、図19に示した方法によって編集の適否を判断することができる。このように、編集コマンド実行ごとに判断するのではなく、編集処理が終了した段階で一括して判断する方法によれば、文書を編集しているときに一時的に文書型定義に適合しない文書を経由してしまう場合に、アラーム処理を行わずに編集処理を続行することができる。
【0068】
図20は、文書修正部260の動作を示すフローチャートである。文書修正部260は、編集コマンドの実行によって生成した文書に修正が必要であるか否かを判断し、修正が必要である場合には、適当な修正を施す。
【0069】
まず、文書修正部260は、編集処理によって生成した文書が、階層構造の修正を必要とするか否かを判断する(S252)。修正が必要でない場合には、Nへ進み、文書修正部260における処理を終了する。修正が必要である場合には、Yへ進み、修正処理を実行するか否かをユーザーに問い合わせる(S254)。ユーザーが修正を実行しないと判断した場合には、Nへ進み、文書修正部260における処理を終了する。ユーザーが修正を実行すると判断した場合には、Yへ進み、修正処理を実行する(S256)。ユーザーに問い合わせずに、修正処理を実行しても良い。
【0070】
図21(a)(b)は、文書修正部260の動作の例を説明するための図である。図21(a)は、図13において、位置(4)にタグ「sect」を挿入した様子を示す。図12に示した文書型定義612によると、要素「sub」は、要素「sect」を子要素として持てないので、このままの状態では、文書610は妥当なXML文書ではない。
【0071】
図21(b)は、図21(a)に示した文書610を、文書型定義612に適合するように修正した例を示す。要素「sect」は、要素「sub」の子要素にはなれないので、要素「sub」から上の階層へ辿り、要素「sect」を子要素として持てるような要素を探す。この場合、要素「sub」の直上の階層にある要素(以下、単に「親要素」という)である要素「sect」が、要素「sect」を子要素に持つことができる。そこで、要素「sect」を要素「sub」の子要素として挿入するのではなく、要素「sect」の子要素として挿入する。すなわち、要素「sub」を2つに分割して、分割した間に、要素「sect」を挿入する。これにより、ユーザーが要求した位置と同じ場所に、文書型定義に適合する形で、要素「sect」を挿入することができる。以上が、図20における修正処理S256の詳細である。
【0072】
図15において、三角の印がついているタグを挿入する場合には、上記と同様な方法によって、文書型定義に適合するように文書を修正することができる。例えば、位置(6)に新たにタグを挿入する場合について説明する。位置(6)は、要素「bold」に含まれている。文書型定義612によると、要素「bold」は、子要素として要素「image」を持つことができる。他の要素を挿入するときには、文書修正部260による修正が必要となる。要素「sub」および要素「bold」を挿入する場合は、要素「bold」の一つ上の階層である要素「sub」の子要素として挿入することができる。要素「sect」および要素「parag」を挿入する場合には、要素「bold」の二つ上の階層である要素「sect」の子要素として挿入することができる。
【0073】
図15において、位置(1)に新たにタグを挿入する場合について説明する。要素「sample」が内容として持てる要素は、要素「sect」および要素「parag」に限られるので、要素「sub」、要素「bold」、および要素「image」は位置(1)に挿入することができない。この場合は、修正によって文書型定義612に適合させることもできないので、メニュー制御部140は、要素「sub」、要素「bold」、および要素「image」を選択不可能とする。
【0074】
同様に、図17において、三角の印がついている範囲をタグ化する場合には、上記と同様な方法によって、文書型定義に適合するように文書を修正することができる。例えば、範囲(4)〜(5)をタグ化する場合について説明する。範囲(4)〜(5)は、要素「sub」に含まれている。文書型定義612によると、要素「sub」は、子要素として要素「sub」、要素「bold」、および要素「image」を持つことができる。他の要素にタグ化するときには、文書修正部260による修正が必要となる。要素「sect」および要素「parag」にタグ化する場合は、要素「sub」の親要素「sect」の子要素となるように、テキストデータ「3」を持つ要素「sect」または要素「parag」を新たに挿入することによって、文書型定義612に適合させることができる。
【0075】
図22(a)(b)は、文書修正部260の動作の他の例を説明するための図である。図22(a)は、文書処理装置90によって処理可能な構造化文書の一例としての文書620の階層構造を示す。文書620は、本体部分に、要素「ul」を3つ有する。1番目の要素「ul」は、子要素「li」を有し、要素「li」は、子要素「div」を有し、要素「div」は、テキストデータ「ABC」を有する。2番目の要素「ul」は、子要素「li」を有し、要素「li」は、子要素「div」を有し、要素「div」は、テキストデータ「123」を有する。3番目の要素「ul」は、子要素「li」を有し、要素「li」は、子要素「div」を有し、要素「div」は、テキストデータ「abc」を有する。
【0076】
図22(b)は、文書620を表示装置62に表示させた様子を示す。表示装置620の画面700の文書表示部710には、文書620をレンダリングした結果が表示されている。要素「ul」は、箇条書きとして表示されるように表示属性が設定されているので、3つの要素「ul」の内容は、それぞれ「・」を付加された形で表示されている。今、ユーザーが、マウスなどの入力装置60を用いて、範囲730を選択している。
【0077】
図23(a)(b)は、図22(b)において、選択された範囲を削除する編集コマンドが実行されたときの、文書修正部260の動作を説明するための図である。図22(b)において、範囲730を削除する編集コマンドが実行されたとき、図23(a)における位置(x1)から位置(x2)までの範囲が削除されることになる。このようなDOM操作を行うことは、構造化文書に対する処理として適当でない。したがって、本実施形態においては、文書修正部260が、位置(y1)から位置(y2)までの範囲を削除するよう、DOMエンジン220へ指示する。すなわち、2番目の要素「ul」が削除される。
【0078】
図23(b)は、上記の操作が行われた後に、文書620を表示装置62に表示させた様子を示す。文書修正部260による修正処理によって、ユーザーの意図した操作を実現することができる。
【0079】
図24は、位置情報保持部240のデータ構成を示す。位置情報保持部240は、カーソル位置、選択範囲の始点、選択範囲の終点、しおり位置など、構造化文書における位置情報を保持する。位置情報は、その位置が含まれる要素の情報と、その要素内におけるオフセット情報とを含む。
【0080】
図25は、図7に示した構造化文書600を、表示装置62に表示させた様子を示す。今、2つの範囲732、734が選択されており、カーソルは位置712にある。範囲732は、構造化文書600の1番目の要素「div」のうち、1文字目の後ろから、3文字目の後ろまでに対応する。したがって、図24において、範囲1始点の要素情報には、1番目の要素「div」が格納されており、範囲1始点のオフセット情報には、「1」が格納されている。範囲1終点の要素情報には、1番目の要素「div」が格納されており、範囲1終点のオフセット情報には、「3」が格納されている。他の位置情報についても、これと同様である。しおり位置は、画面700上には表示されていないが、文書の他の位置からジャンプするためのしおりとして用いられる情報である。
【0081】
図26は、位置情報保持部240の位置情報を自動更新するための方法を示すフローチャートである。まず、ユーザーによって、しおり位置が指定されたり、範囲が選択されたり、カーソル位置が移動されたりすると、新たな位置情報が位置情報保持部240に登録される(S302)。続いて、文書600を編集するコマンドが実行される(S304)。編集コマンドが実行されると、その編集コマンドによる編集操作の対象となる要素が、位置情報が登録されているノードに対応していれば、S306のYへ進み、位置情報の自動補正が実行される(S308)。そうでない場合は、S306のNへ進み、位置情報は自動補正されない。
【0082】
図27(a)(b)は、図26に示した位置情報の自動補正方法の具体例を示す。図27(a)は、要素「div」のテキストデータのうち、4文字目の後ろに位置情報が登録されている場合に、要素「div」のテキストデータの2文字目の後ろの位置で改行処理が行われたときの例を示す。このとき、編集コマンド実行部210が、改行処理を実行すると同時に、位置情報保持部240に保持された位置情報を自動補正する。この場合、登録されていた、要素「div」のテキストデータのうち、4文字目の後ろという位置は、新たに追加された2番目の要素「div」のテキストデータのうち、2文字目の後ろという位置へ移動しているので、その位置へ自動補正される。
【0083】
図27(b)は、要素「div」のテキストデータのうち、4文字目の後ろに位置情報が登録されている場合に、要素「div」のテキストデータの2文字目の後ろから5文字目の後ろまでが削除されたときの例を示す。このとき、編集コマンド実行部210が、選択範囲を削除する処理を実行すると同時に、位置情報保持部240に保持された位置情報を自動補正する。この場合、登録されていた、要素「div」のテキストデータのうち、4文字目の後ろという位置は、すでに消失しているので、要素「div」のテキストデータのうち、2文字目の後ろへ自動補正する。
【0084】
上記のように、位置情報保持部240に保持された位置情報は、その位置情報が登録されたノードの編集操作に伴って自動的に補正されるので、カーソル712や選択範囲などの表示を自動的に更新することができる。また、位置情報が、DOMエンジン220の操作によって自動更新されるので、複数のユーザーによって一つの文書を編集する際に、他のユーザーによって編集処理が行われた場合にも、自動的に位置情報を更新することができる。また、文書を編集する機能を有するプラグインユニット500を開発する場合にも、DOMエンジン220が自動的に位置情報を更新するので、位置情報を気にすることなく文書に対する処理を行うことができる。
【0085】
図28(a)(b)は、編集処理によって文書が処理されたことを、表示ユニット300に伝達するためのミューテーションイベントについて説明するための図である。図28(a)は、要素「div」のテキストデータ「あいうえお」のうち、「うえお」が削除されたときの例を示す。このとき、DOMエンジン220は、表示ユニット300に、要素「div」のテキストデータが変更されたことを通知するためのミューテーションイベントを発行する。
【0086】
図28(b)は、要素「div」のテキストデータ「あいうえお」のうち、「い」の後ろの位置で改行キーが押下されたときの例を示す。このとき、編集コマンド実行部210は、まず、要素「div」のテキストデータのうち、「うえお」を削除する。続いて、新たな2番目の要素「div」を元の1番目の要素「div」の後ろに追加する。続いて、2番目の要素「div」のテキストデータとして、「うえお」を追加する。このとき、編集コマンド実行部210は、DOMエンジン220に、以上の3つの操作のそれぞれについてミューテーションイベントを発行させるのではなく、1番目の要素「div」が更新されたことを通知するミューテーションイベントと、2番目の要素「div」が挿入されたことを通知するミューテーションイベントとを発行させる。これによれば、無駄なミューテーションイベントの発行を防ぐことができ、ひいては、処理を高速化することができる。
【0087】
上記のように、編集コマンド実行部210は、1つの編集コマンドを実行する際に複数のDOM操作を行うときでも、複数のミューテーションイベントを1つにまとめて発行する。これにより、処理を高速化することができる。一般に、操作の行われた要素群を全て包括する最も小さい要素を抽出し、その要素が更新されたことを通知するミューテーションイベントを発行すれば良い。操作の行われた要素群を全て包括するような要素が、非常に多くの内容を有している場合には、その要素全てを再レンダリング処理するのに多大な時間を要するので、実際に処理された各要素について、個別にミューテーションイベントを発行しても良い。
【0088】
図29は、取消再実行処理制御ユニット400の構成を示す。取消再実行処理制御ユニット400は、取消処理および再実行処理を実行するための取消再実行処理保持部408および現在の処理状態を保持する処理状態保持部406を備える。取消再実行処理保持部408は、コマンド410に含まれる各処理およびその逆処理をメソッドとして有するオブジェクトを、処理の順に保持する。図29においては、説明の便宜上、取消再実行処理保持部408に保持されたオブジェクトに含まれている、取消処理を実行するためのメソッド402と、再実行処理を実行するためのメソッド404とを、別個の枠で示している。各種コマンド410が実行されたときに、そのコマンドが、取消処理が可能なコマンドであれば、そのコマンド410の中の一つ一つの操作をメソッドとして有するオブジェクトが順に取消再実行処理保持部408へ積まれていく。このとき、コマンド410がどの操作からどの操作までに対応するのかという情報も記憶される。
【0089】
ユーザーインターフェース100を介して取消処理の実行要求が伝達されると、取消再実行処理制御ユニット400は、取消再実行処理保持部408に保持されたオブジェクトのうち取消処理のためのメソッドを、最新の操作から、スタックされた順番と逆順に、1コマンド分だけ実行する。このとき、処理状態保持部406は、1コマンド分だけ移動される。続いて、さらに、取消処理の実行要求が伝達されると、さらに取消再実行処理保持部408に保持されたオブジェクトのうち取消処理のためのメソッドを、処理状態保持部406の位置から、スタックされた順番と逆順に、1コマンド分だけ実行する。再実行処理の実行要求が伝達されたときは、取消再実行処理保持部408に保持されたオブジェクトのうち再実行処理のためのメソッドを、処理状態保持部406の位置から、スタックされた順番と同じ順番に、1コマンド分だけ実行する。
【0090】
図30(a)(b)は、取消再実行処理制御ユニット400の動作を説明するための図である。図30(a)は、編集コマンド実行部210によって、文書中の要素「div」のテキストデータ「あいう」のうち、「い」の後ろの位置に、テキストデータ「かき」を挿入するコマンドが実行される様子を示す。このコマンドが実行された結果、要素「div」のテキストデータは、「あいかきう」に変更される。
【0091】
図30(b)は、図30(a)に示したコマンド中の各操作を実行するためのオブジェクトが、取消再実行処理保持部408に積まれた様子を示す。1番目のオブジェクトは、取消処理が実行されたときに、カーソル位置が元の位置に戻るようにするために、カーソル位置を「う」の前に移動する操作を、アンドゥメソッド402として有する。再実行する際には、この操作の逆操作は実行する必要がないので、リドゥメソッド404は何もしない空の操作である。続いて、編集コマンド実行部210は、コマンドの実行中に他の操作によって画面が変更されることがないように、表示ユニット300に画面をロックするよう要求する。このとき、2番目に積まれるオブジェクトは、ビューをロックする操作をリドゥメソッド404として有し、その逆操作に対応するビューのロックを解除する操作をアンドゥメソッド402として有する。
【0092】
続いて、取消処理が実行されたときに、画面が元の状態に戻るようにするために、要素「div」のテキストデータが更新されたというミューテーションイベントを発行する操作をアンドゥメソッド402として有するオブジェクトを、取消再実行処理保持部408に積む。再実行する際には、この操作の逆操作は実行する必要がないので、リドゥメソッド404は空の操作である。続いて、DOMエンジン220は、要素「div」のテキストデータを「あいう」から「あいかきう」に変更する。このとき、要素「div」のテキストデータを「あいう」から「あいかきう」に変更する操作をリドゥメソッド404として有し、その逆操作に対応する要素「div」のテキストデータを「あいかきう」から「あいう」に変更する操作をアンドゥメソッド402として有するオブジェクトが、取消再実行処理保持部408に積まれる。
【0093】
続いて、編集コマンド実行部210は、要素「div」のテキストデータが更新されたというミューテーションイベントを発行し、表示ユニット300に伝達する。このとき、この操作をリドゥメソッド404として有するオブジェクトが取消再実行処理保持部408に積まれる。取消処理を実行する際には、この操作の逆操作は実行する必要がないので、アンドゥメソッド404は空の操作である。続いて、編集コマンド実行部210は、ビューのロックを解除するよう、表示ユニット300に指示する。このとき、この操作をリドゥメソッド404として有し、この操作の逆操作に対応する、ビューをロックする操作をアンドゥメソッド402として有するオブジェクトが、取消再実行処理保持部408に積まれる。
【0094】
最後に、編集コマンド実行部210は、カーソル位置を「う」の前に移動する。このとき、この操作をリドゥメソッド404として有するオブジェクトが、取消再実行処理保持部408に積まれる。取消処理を実行する際には、この操作の逆操作は実行する必要がないので、アンドゥメソッド404は空の操作である。以上のように、取消再実行処理保持部408には、コマンドの中の各操作をリドゥメソッド404として有し、その逆操作をアンドゥメソッド402として有するオブジェクトが、順に積まれていく。編集コマンドが実行されるときには、主にDOM操作を一つの単位として処理するためのオブジェクトが、取消再実行処理保持部408に積まれていく。
【0095】
図30(b)の説明では、アンドゥ操作とリドゥ操作とをメソッドとして有するオブジェクトを一つ一つの記憶単位として、取消再実行処理保持部408に積んだ場合について説明したが、アンドゥスタック402とリドゥスタック404とを別個に設けても良い。このとき、アンドゥ操作を実行するオブジェクトがアンドゥスタック402に積まれていき、リドゥ操作を実行するオブジェクトがリドゥスタック402に積まれていく。
【0096】
以上のような構成によれば、コマンド毎に取消処理を用意する必要がないので、新たなコマンドを開発する際に手間を減らすことができる。取消再実行処理制御ユニット400は、プラグインユニット500によって実行されたコマンドの取消再実行処理も制御できるので、プラグインユニット500を開発する際に、取消処理を用意する必要が無く、開発を容易にすることができる。
【0097】
図31は、表示ユニット300における動作を概略的に示したフローチャートである。表示ユニット300に、編集ユニット200からミューテーションイベントが伝達されると、まず、レンダリングユニット選択部310が、表示すべきデータの名前空間を取得する(S402)。続いて、レンダリングユニット選択部310は、取得した名前空間のデータをレンダリングするレンダリングユニットを選択する(S404)。適当なレンダリングユニットがある場合は、Yへ進み、そのレンダリングユニットへレンダリング処理を実行するよう指示を送り、レンダリング処理が行われ(S406)、その結果を表示部340が表示装置62に表示する(S410)。適当なレンダリングユニットがない場合は、Nへ進み、ツリー表示処理部330がツリー表示処理を行い(S408)、その結果を表示部340が表示装置62に表示する(S410)。
【0098】
図32は、レンダリングユニット選択部310およびツリー表示処理部330を説明するために用いる構造化文書630を示す。文書630は、XHTMLで記述された部分632およびMATHMLで記述された部分634を含む。MATHMLは、数学分野で用いられる記号や式を記述するためのマークアップ言語である。
【0099】
図33は、MATHMLで記述された文書を処理するためのMATHMLプラグインユニット510を有する文書処理装置90によって構造化文書630をレンダリング処理し、表示装置62に表示した例を示す。表示ユニット300に文書630の表示要求が伝達されると、レンダリングユニット選択部310は、レンダリング部320に、XHTMLで記述された部分632をレンダリング処理するよう指示し、MATHMLプラグインユニット510に、MATHMLで記述された部分634をレンダリング処理するよう指示する。レンダリング部320は、XHTMLで記述された部分632のレンダリング処理を行い、画面を作成する。MATHMLプラグインユニット510は、MATHMLで記述された部分634のレンダリング処理を行い、画面を作成する。表示部340は、それぞれの画面を表示装置62に表示する。
【0100】
図34は、MATHMLで記述された文書を処理するためのMATHMLプラグインユニット510を有しない文書処理装置90によって構造化文書630をレンダリング処理し、表示装置62に表示した例を示す。表示ユニット300に文書630の表示要求が伝達されると、レンダリングユニット選択部310は、レンダリング部320に、XHTMLで記述された部分632をレンダリング処理するよう指示する。この場合、MATHMLで記述された部分634をレンダリング処理するためのプラグインユニット500は搭載されていない。レンダリングユニット選択部310は、MATHMLで記述された部分632を表示するためのスタイルシートが取得できるか否かを判断する。スタイルシートが取得できれば、レンダリング部320にレンダリング処理を行うよう指示する。スタイルシートが取得できなければ、ツリー表示処理部330に、ツリー表示処理を行うよう指示する。
【0101】
レンダリング部320は、XHTMLで記述された部分632のレンダリング処理を行い、画面を作成する。ツリー表示処理部330は、MATHMLで記述された部分634を階層構造が分かる形で表示するための処理を行い、画面を作成する。表示部340は、それぞれの画面を表示装置62に表示する。図34においては、MATHMLで記述された部分634は、文書表示部710内に設けられたウインドウ730に、ツリー表示されている。
【0102】
このとき、ウインドウ730内に表示されたデータの編集を禁止しても良い。図19において説明したように、編集適否判断部250が編集を許可した場合に限って、ウインドウ730内に表示されたデータの編集処理を行っても良い。階層構造の変化を伴う編集処理を禁止しても良い。階層構造の変化を伴わないような、テキストデータのみの編集処理を許可しても良い。
【0103】
図35は、MATHMLで記述された部分634を、スクロールバーのついたウインドウ730に表示した例を示す。ウインドウ730は、表示属性が不明なMATHMLで記述された部分634を、スクロール可能に設けられている。これにより、表示属性不明データが非常に多い場合であっても、限られた領域の中に全てのデータを表示することができる。
【0104】
図36は、MATHMLで記述された部分634のソースを、スクロールバーのついたウインドウ730に表示した例を示す。このように、文書をそのままの形をで表示した場合でも、ユーザーは文書の階層構造を知ることができる。
【0105】
以上の構成によれば、独自のタグセットによって記述された、表示属性が不明なデータが文書中にあっても、それを階層構造が分かる形で文書表示部710内に表示することによって、文書の内容を分かりやすく表示することができる。
【0106】
図37は、スタイル設定部322の動作を示すフローチャートである。スタイル設定部322は、スタイルシートに記述された、各要素の満たすべき表示属性を設定する。スタイル設定部322は、まず、デフォルトスタイルシートを取得して、デフォルトスタイルシートに記述された表示属性を設定する(S502)。デフォルトスタイルシートは、文書処理装置90の初期設定を規定したスタイルシートであり、ユーザーが表示属性を指定しなかったときに適用される。
【0107】
続いて、スタイル設定部322は、ユーザースタイルシートに記述された表示属性を上書き設定する(S504)。ユーザースタイルシートは、文書処理装置90を使用するユーザーが初期設定として規定したスタイルシートであり、文書内に表示属性を指定しなかったときに適用される。ユーザースタイルシートに記述された表示属性は、上書き設定されるので、デフォルトスタイルシートに記述された表示属性よりも優先される。ユーザースタイルシートに記述されていない表示属性については、デフォルトスタイルシートに記述された表示属性が適用される。
【0108】
続いて、スタイル設定部322は、オーサースタイルシートが指定されているか否かを判断する(S506)。オーサースタイルシートが指定されている場合は、Yへ進み、オーサースタイルシートに記述された表示属性を上書き設定する(S508)。オーサースタイルシートは、文書を編集した著者が文書全体に適用される表示属性として規定したスタイルシートであり、文書内の要素に表示属性を指定しなかったときに適用される。オーサースタイルシートに記述された表示属性は、上書き設定されるので、デフォルトスタイルシートおよびユーザースタイルシートに記述された表示属性よりも優先される。オーサースタイルシートに記述されていない表示属性については、デフォルトスタイルシートまたはユーザースタイルシートに記述された表示属性が適用される。オーサースタイルシートが指定されていない場合は、Nへ進み、表示属性の設定肯定は省略され、S510へ進む。
【0109】
続いて、スタイル設定部322は、要素に表示属性が指定されているか否かを判断する(S510)。要素に表示属性が指定されている場合は、Yへ進み、オーサースタイルシートに記述された表示属性を上書き設定する(S512)。要素に直接指定された表示属性は、上書き設定されるので、全てのスタイルシートに記述された表示属性よりも優先される。要素に表示属性が指定されていない場合は、デフォルトスタイルシート、ユーザースタイルシート、またはオーサースタイルシートに記述された表示属性が適用される。要素に表示属性が指定されていない場合は、Nへ進み、表示属性の設定工程は省略される。以上で、スタイル設定部322の動作が終了する。
【0110】
図38は、図37に示した表示属性の設定工程(S502、S504、およびS508)の詳細を示すフローチャートである。スタイル設定部322は、スタイルを設定すべきターゲット要素の要素名を取得する(S522)。続いて、その要素に適用すべき表示属性を、要素名をキーとして検索し、表示属性を設定する(S524)。続いて、ターゲット要素に、class属性、id属性などの属性が指定されているか否かを判断する(S526)。属性が指定されていなければ、Nへ進み、表示属性の設定工程を終了する。属性が指定されていれば、Yへ進み、さらにターゲット要素の属性名を取得する(S528)。続いて、属性名をキーとして表示属性を検索し、表示属性を設定する(S530)。以上で、表示属性の設定工程を終了する。属性名をキーとしたハッシュテーブルが用意されていない場合は、ハッシュテーブルを用いた検索工程(S530)は行われない。
【0111】
図39は、図38に示した表示属性の検索・設定工程(S524およびS530)の詳細を示すフローチャートである。スタイル設定部322は、取得したターゲット要素の要素名に基づいて、ハッシュ値を取得する(S542)。ハッシュ値は、例えば、要素名のアスキーコード値などから算出されてもよい。続いて、得られたハッシュ値をキーとして、ハッシュテーブルを検索する(S544)。ハッシュテーブルについては、図40において詳述する。
【0112】
ハッシュテーブルの中にハッシュ値が存在しなかったときは、ターゲット要素の表示属性が指定されていないということなので、S546のNへ進み、表示属性を設定せずに工程を終了する。ハッシュテーブルの中にハッシュ値が存在していたときは、S546のYへ進み、ハッシュ値に対応する適合セレクタが複数あるか否かを判断する(S548)。適合セレクタが複数ある場合には、Yへ進み、適合セレクタを絞り込み、ターゲット要素に合致するセレクタを取得する(S550)。続いて、ターゲット要素に合致したセレクタに設定されている表示属性を、ターゲット要素に設定する(S552)。適合セレクタが1つしかない場合には、Nへ進み、そのセレクタに設定されている表示属性を、ターゲット要素に設定する(S552)。以上で、表示属性の検索・設定工程を終了する。
【0113】
図40(a)(b)は、ハッシュテーブルの例を示す。図40(a)は、要素の属性による分類がなされていないハッシュテーブルの例を示す。ハッシュ値は、セレクタのうち最下位の階層の要素の要素名から算出される。例えば、要素名「body」のハッシュ値は、8である。このハッシュテーブルにおいては、属性による分類がなされていないので、要素「div」のハッシュ値と、「参照1」という属性が指定された要素「div」のハッシュ値は、同一になる。セレクタ「div p」は、要素「div」の子孫要素となっている要素「p」に対応する。このとき、ハッシュ値は、最下位の階層の要素の要素名から算出されるので、「div p」のハッシュ値は、「p」のハッシュ値と同一になる。
【0114】
図40(a)に示されたハッシュテーブルを用いて、ターゲット要素「div」の表示属性を設定する方法について説明する。ここで、ターゲット要素「div」には、class属性「参照2」が指定されている。まず、要素名「div」からハッシュ値を算出する。要素名「div」から算出されるハッシュ値は、14である。続いて、ハッシュ値14をキーとして、ハッシュテーブルを検索する。すると、適合セレクタは、「div」、「div.参照1」、および「div.参照2」であることが分かる。続いて、それぞれの適合セレクタとターゲット要素とを照らし合わせて、表示属性を設定すべきセレクタを取得する。ここでは、「div」および「div.参照2」が該当するので、まず、「div」に指定された表示属性を設定し、続いて、「div.参照2」に指定された表示属性を上書き設定する。
【0115】
図40(b)は、要素の属性によってさらに分類された階層化ハッシュテーブルの例を示す。ハッシュ値14に対応するセレクタは、「div」、「div.参照1」、「div.参照2」、および「div.参照2#abc」である。このうち、「div.参照1」、「div.参照2」、および「div.参照2#abc」については、属性が指定されているので、さらに属性名をキーとしたハッシュテーブルに分類されている。属性「参照1」が指定された要素「div」は、ハッシュ値5に分類されており、属性「参照2」が指定された要素「div」は、ハッシュ値11に分類されている。
【0116】
図40(b)に示されたハッシュテーブルを用いて、ターゲット要素<divclass=“参照2”>の表示属性を設定する方法について説明する。まず、要素名「div」からハッシュ値を算出する。要素名「div」から算出されるハッシュ値は、14である。続いて、ハッシュ値14をキーとして、ハッシュテーブルを検索する。すると、適合セレクタとして、まず、「div」。続いて、それぞれの適合セレクタとターゲット要素とを照らし合わせて、表示属性を設定すべきセレクタを取得する。ここでは、「div」および「div.参照2」が該当するので、まず、「div」に指定された表示属性を設定し、続いて、「div.参照2」に指定された表示属性を上書き設定する。
【0117】
本実施形態では、ハッシュテーブルを用いて適合セレクタを検索したが、二分木などの方法を用いて検索を実行しても良い。以上のような構成によれば、スタイル設定処理を高速化することができる。
【0118】
図41は、レイアウト処理部324の動作を示すフローチャートである。まず、編集位置より前の行から先送りされて配置されたフロートブロックを、再配置のためにレイアウトから外して、ソース上での出現位置の順番にキューへ待避する(S602)。続いて、編集位置を含む段落のテキストデータを再レイアウトする(S604)。テキストデータが配置可能な行矩形の中に、テキストデータを順に配置していく。続いて、編集位置以降の段落をシフト処理する(S606)。S604によって段落の行数が変化すると、以降の段落との間に、隙間または重なりが生じるので、それを解消すべく以降の段落を垂直方向にシフトする。続いて、キューに待避された配置待ちフロートブロックがあるか否かを判断する(S608)。
【0119】
キューにフロートブロックがある場合は、Yへ進み、フロートブロックが配置可能か否かを判断する(S610)。すなわち、キューに配置待ちのフロートブロックがある限り、必ず行頭で配置可能か否かを判断する。配置可能であれば、Yへ進み、フロートブロックをレイアウトする(S612)。その後、再びS608へ戻り、配置不可能なフロートブロックが出現するか、キューに待避された配置待ちフロートブロックが無くなるまで、フロートブロックのレイアウト処理が行われる。S610において、フロートブロックが配置できなかったときは、Nへ進み、テキストデータの行レイアウト処理が行われる(S614)。行矩形の中にテキストデータを順に配置し、1行分配置したところで終了する。
【0120】
続いて、文書末またはテーブルセルの末尾であるか否かを判断する(S622)。すなわち、配置すべきテキストデータがまだ残っているか否かを判断する。残っていれば、Nへ進み、再びフロートブロックが配置可能か否かを判断する。文書末またはテーブルセルの末尾である場合には、Yへ進み、フロートブロックが配置可能か否かを判断するための仮想行を設定する(S624)。キューに残っているフロートブロックを末尾行に配置した場合に、そのフロートブロックと重なる最も内側の配置済みフロートブロックの、下辺の直下に仮想行を設定する。その後、再びキューに待避された配置待ちフロートブロックが配置可能か否かを判断するときに、この仮想行の行頭で判断が行われる。
【0121】
S608において、キューに待避された配置待ちのフロートブロックがなくなった場合には、Nへ進み、次の段落の1行目の行矩形と、フロートブロックとの間に、重なりまたは隙間があるか否かを判断する(S616)。重なりまたは隙間がある場合は、Nへ進み、その段落を末尾まで再レイアウトする(S618)。その後、再びS616へ進む。重なりまたは隙間がない場合は、Yへ進み、それ以降の段落をシフト処理する(S620)。以上により、文書が編集されたときの、再レイアウト処理を終了する。
【0122】
図42は、レイアウト処理部324の動作を説明するために用いる構造化文書の例を示す。構造化文書640は、XHTMLで記述された文書である。文書640の第1段落には、イメージファイルが埋め込まれており、右寄せで表示されるよう指定されている。
【0123】
図43は、図42に示した文書640を表示装置62へ表示した様子を示す。画像642は、右寄せで表示されている。各段落のテキストデータは、画像642と重ならないようにレイアウトされている。
【0124】
図44は、レイアウト処理部324がレイアウト処理を行う際に、テキストデータを行矩形として管理する様子を示す。レイアウト処理部324は、画像、表、縦書きブロック、ツリー表示ウインドウ、などのフローティングブロックと、テキストデータの行とを、矩形データとして管理している。レイアウト処理部324は、これらの矩形データが重なるか否かを調べることによって、正しくレイアウトされているか否かを判断する。
【0125】
図45(a)(b)(c)は、文書640のうち、範囲644が削除されたときの、レイアウト処理部324の動作を説明するための図である。図45(a)は、文書640のうち、範囲644が選択された様子を示す。入力装置60を介してユーザーが範囲644を選択した後、さらに削除コマンドを実行すると、編集ユニット200が必要な処理を行い、表示ユニット300へミューテーションイベントを伝達する。このとき、レイアウト処理部324は、編集部分から後の部分を再レイアウトする。
【0126】
この場合、削除された行よりも前の行から先送りされて配置されたフロートブロックが存在しないので、キューに待避されるフロートブロックはない。まず、第2段落のテキストデータを再レイアウトする。第2段落のテキストデータのうち、範囲644が削除されているので、第2行から第4行が消失する。続いて、第3段落および第4段落を、上方へシフトする。その結果を図45(b)に示す。この状態は、実際には表示されない。ここで、シフト処理の結果、行矩形データと、フローティングブロックの矩形データとの間に、重なりまたは隙間があるか否かを調べる。この場合、第3段落の1行目の行矩形データと、画像642の矩形データとが重なるので、このままの状態では正しいレイアウトではない。したがって、さらに、第3段落を再レイアウトし、画像642と重ならないようにする。画像642と重ならないように新たに設定された行矩形内に、第3段落のテキストデータを配置していく。この結果、行の増減などによって段落の高さが変化すると、その段落以降の段落とそれらに含まれる行をシフトする。その結果を図45(c)に示す。
【0127】
第4段落以降も、同様に、各行の行頭において、行矩形データとフロートブロックの矩形データとの重なりまたは隙間があるか否かを調べる。第4段落の第1行目は、フロートブロックとの重なりがない。さらに、以前フロートブロックを避けていた隙間がない。すなわち、行矩形が、文書表示部710の左端から右端までの全てに渡っている。このとき、この行以降のレイアウトには変化が生じないので、行の重なりまたは隙間のチェックを終了し、この行以降の行をシフト処理する。この場合は、図45(c)の状態が、正しくレイアウトされた状態に対応する。
【0128】
図46は、レイアウト処理部324の動作を説明するために用いる構造化文書の他の例を示す。構造化文書650は、XHTMLで記述された文書である。文書650の第1段落には、イメージファイルが3つ埋め込まれており、1つは右寄せで、残りの2つは左寄せで表示されるよう指定されている。
【0129】
図47は、図46に示した文書650を表示装置62へ表示した様子を示す。画像652は、右寄せで表示されている。画像654および656は、左寄せで表示されている。各段落のテキストデータは、画像652、654、および656と重ならないように、回り込んでレイアウトされている。フロートブロックは、原則として、行単位で位置決めされる。すなわち、行の上辺とフロートブロックの上辺のy座標は一致する。文書の末尾やテーブルセルの末尾行以下に配置される場合は、ピクセル単位で位置決めされる。今、範囲658が選択されている。
【0130】
図48から図50は、文書650のうち、範囲658が削除されたときの、レイアウト処理部324の動作を説明するための図である。図48は、文書650のうち、範囲658が削除され、削除された行よりも前の行から先送りされて配置された画像654および656がキュー660に待避され、第2段落が再レイアウトされ、第3段落がシフト処理されたときの様子を示す。キュー660には、ソース上の出現位置の順番に、画像654および画像656がバッファに積まれている。
【0131】
図49は、続いて、第3段落が再レイアウトされた様子を示す。まず、図48の状態から、キューにフロートブロックが積まれているので、第2段落の直下の行に配置可能か否かを判断する。この場合、配置不可能なので、第3段落の第1行目が行レイアウト処理される。続いて、第3段落の第1行目の直下の行にフロートブロックを配置可能か否かを判断する。画像654が配置可能なので、画像654を左寄せにして配置する。さらに、画像656が配置可能か否かを判断する。画像656は配置不可能なので、キューに積んだまま、第3段落の第2行目を行レイアウトする。このように、改行毎にフロートブロックの配置チェックを行い、配置できなければテキストデータの行レイアウトを行う。第3段落の末尾まで行レイアウトが終了した状態が図49に示されている。
【0132】
図50は、画像656がレイアウトされた様子を示す。図49において、文書末までレイアウトが終了したときに、まだキュー660には画像656が残っていたので、仮想行を設定する。仮想行は、末尾行に画像656を配置したときに重なりが生じる、画像654の下辺の直下に設定される。この行の行頭において、画像656が配置可能か否かのチェックが行われる。画像656は、配置可能であるから、左寄せにして配置される。これで、文書650の再レイアウト処理が終了する。
【0133】
以上の構成によれば、CSSの仕様に準拠したレイアウトを実現することができる。また、改段落のときに、フロートブロックとの重なりや隙間がないときには、以下の段落をレイアウトせず、シフト処理を行うため、再表示に要する時間を短縮することができる。本実施形態の方法によれば、多くの場合、フロートブロックの重なりや隙間があるかどうかの判定は、全段落について行う必要がないので、高速な処理を実現することができる。
【0134】
記録媒体の一例としてのフロッピーディスク56またはCD−ROM58には、本出願で説明した端末10の動作の一部または全ての機能を格納することができる。またフロッピーディスク106には他の装置の動作の一部または全ての機能を格納することができる。これらのプログラムは記録媒体から直接RAMに読み出されて実行されても良い。
【0135】
本実施形態においては、構造化文書の一例として、XHTML形式およびXML形式の文書を処理する方法について説明したが、本実施形態の方法は、SGML、MHEG、HTML、その他の形式、およびそれらに対して拡張または限定を行った形式を用いて記述された構造化文書についても適用することができる。
【0136】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更又は改良を加えることができることが当業者に明らかである。その様な変更又は改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【0137】
【発明の効果】
上記説明から明らかなように、本発明によれば構造化文書を適切に処理することができる文書処理装置、およびその文書処理装置で利用可能な文書処理方法、およびその方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体を提供することができる。
【図面の簡単な説明】
【図1】 図1は、本実施形態の文書処理方法をコンピュータに実行させるためのプログラムがネットワークを介して配信される様子を示す図である。
【図2】 図2は、コンピュータの構成を示す図である。
【図3】 図3は、本発明の実施形態に係る文書処理装置90の概略機能ブロックを示す図である。
【図4】 図4は、ユーザーインターフェース100のより詳細な機能ブロックを示す図である。
【図5】 図5は、編集ユニット200のより詳細な機能ブロックを示す図である。
【図6】 図6は、表示ユニット300のより詳細な機能ブロックを示す図である。
【図7】 図7は、文書処理装置90によって処理可能な構造化文書600を示す図である。
【図8】 図8は、文書処理装置90が構造化文書600を読み込み、表示ユニット300によって表示装置62へ表示させた様子を示す図である。
【図9】 図9は、編集処理が実行された後の構造化文書600を示す図である。
【図10】 図10は、編集処理が実行された後の画面700を示す図である。
【図11】 図11は、メニュー制御部140の動作を示すフローチャートである。
【図12】 図12は、XMLによって記述された構造化文書610を示す図である。
【図13】 図13は、構造化文書610のうち、名前空間が「sample」である部分616の階層構造を分かりやすく示した模式図である。
【図14】 図14は、カーソル712が図13における位置(4)にあるときに、メニューを表示させた様子を示す図である。
【図15】 図15は、文書610における編集位置と、その位置に挿入可能なタグとの関係を示す図である。
【図16】 図16は、範囲724を選択している状態で、メニューを表示させた様子を示す図である。
【図17】 図17は、文書610における編集位置と、その範囲をタグ化可能なタグとの関係を示す図である。
【図18】 図18は、カーソル712が図13における位置(4)にあるときに、文書表示部710の中でマウスを右クリックしてメニューを表示させた様子を示す図である。
【図19】 図19は、編集適否判断部250の動作を示すフローチャートである。
【図20】 図20は、文書修正部260の動作を示すフローチャートである。
【図21】 図21(a)(b)は、文書修正部260の動作の例を説明するための図である。
【図22】 図22(a)(b)は、文書修正部260の動作の他の例を説明するための図である。
【図23】 図23(a)(b)は、図22(b)において、選択された範囲を削除する編集コマンドが実行されたときの、文書修正部260の動作を説明するための図である。
【図24】 図24は、位置情報保持部240のデータ構成を示す図である。
【図25】 図25は、図7に示した構造化文書600を、表示装置62に表示させた様子を示す図である。
【図26】 図26は、位置情報保持部240の位置情報を自動更新するための方法を示すフローチャートである。
【図27】 図27(a)(b)は、図26に示した位置情報の自動補正方法の具体例を示す図である。
【図28】 図28(a)(b)は、編集処理によって文書が処理されたことを、表示ユニット300に伝達するためのミューテーションイベントについて説明するための図である。
【図29】 図29は、取消再実行処理制御ユニット400の構成を示す図である。
【図30】 図30(a)(b)は、取消再実行処理制御ユニット400の動作を説明するための図である。
【図31】 図31は、表示ユニット300における動作を概略的に示したフローチャートである。
【図32】 図32は、レンダリングユニット選択部310およびツリー表示処理部330を説明するために用いる構造化文書630を示す図である。
【図33】 図33は、MATHMLで記述された文書を処理するためのMATHMLプラグインユニット510を有する文書処理装置90によって構造化文書630をレンダリングし、表示装置62に表示した例を示す図である。
【図34】 図34は、MATHMLで記述された文書を処理するためのMATHMLプラグインユニット510を有しない文書処理装置90によって構造化文書630をレンダリングし、表示装置62に表示した例を示す図である。
【図35】 図35は、MATHMLで記述された部分634を、スクロールバーのついたウインドウ730に表示した例を示す図である。
【図36】 図36は、MATHMLで記述された部分634のソースを、スクロールバーのついたウインドウ730に表示した例を示す図である。
【図37】 図37は、スタイル設定部322の動作を示すフローチャートである。
【図38】 図38は、図37に示した表示属性の設定工程(S502、S504、およびS508)の詳細を示すフローチャートである。
【図39】 図39は、図38に示した表示属性の検索・設定工程(S524およびS530)の詳細を示すフローチャートである。
【図40】 図40(a)(b)は、ハッシュテーブルの例を示す図である。
【図41】 図41は、レイアウト処理部324の動作を示すフローチャートである。
【図42】 図42は、レイアウト処理部324の動作を説明するために用いる構造化文書640を示す図である。
【図43】 図43は、図42に示した文書640を表示装置62へ表示した様子を示す図である。
【図44】 図44は、レイアウト処理部324がレイアウト処理を行う際に、テキストデータを行矩形として管理する様子を示す図である。
【図45】 図45(a)(b)(c)は、文書640のうち、範囲644が削除されたときの、レイアウト処理部324の動作を説明するための図である。
【図46】 図46は、レイアウト処理部324の動作を説明するために用いる構造化文書650を示す図である。
【図47】 図47は、図46に示した文書650を表示装置62へ表示した様子を示す図である。
【図48】 図48は、文書650のうち、範囲658が削除されたときの、レイアウト処理部324の動作を説明するための図である。
【図49】 図49は、文書650のうち、範囲658が削除されたときの、レイアウト処理部324の動作を説明するための図である。
【図50】 図50は、文書650のうち、範囲658が削除されたときの、レイアウト処理部324の動作を説明するための図である。
【符号の説明】
10 インターネット、 20 ダウンロードサーバ、 30 利用者端末、40 文書サーバ、 50 編集端末、 60 入力装置、 62 表示装置、64 通信装置、 66 CPU、 68 メモリ、 70 ハードディスク、72 外部記憶装置、 90 文書処理装置、 100 ユーザーインターフェース、 110 イベント解析部、 120 イベントマップ、 130 UIコマンド実行部、 140 メニュー制御部、 200 編集ユニット、 210編集コマンド実行部、 220 DOMエンジン、 230 文書保持部、 240 位置情報保持部、 250 編集適否判断部、 260 文書修正部、300 表示ユニット、 310 レンダリングユニット選択部、 320 レンダリング部、 322 スタイル設定部、 324 レイアウト処理部、 330 ツリー表示処理部、 340 表示部、 400 取消再実行処理制御ユニット、 402 アンドゥスタック、 404 リドゥスタック、 410コマンド、 500 プラグインユニット、 660 キュー、 700 画面、 702 メニューバー、 704 ツールバー、 706 水平ルーラ、708 垂直ルーラ、 710 文書表示部、 712 カーソル、 730ウインドウ
Claims (2)
- 文書内のデータが階層構造を有する複数の構成要素に分類された構造化文書をコンピュータにより処理するための方法であって、
前記コンピュータに備えられたユーザーインターフェースが、前記構造化文書を編集するための編集要求を取得する工程と、
前記コンピュータに備えられた編集ユニットが、前記編集要求を取得して、前記構造化文書に対する編集処理を実行する工程と、
前記編集ユニットが、複数の前記編集処理によって変更された前記データを全て含む前記構成要素のうち、最下位の階層を有する前記構成要素が更新されたことを通知するための文書編集通知を発行する工程と、
前記コンピュータに備えられた表示ユニットが、前記文書編集通知を取得して、前記構成要素に含まれる前記データをレイアウトする工程と、
前記ユーザーインターフェースが、改行処理要求を取得する工程と、
前記編集ユニットが、改行位置を含む第1の構成要素のテキストデータのうち、改行位置よりも後のテキストデータを削除する工程と、
前記編集ユニットが、前記第1の構成要素の後ろに新たな第2の構成要素を追加する工程と、
前記編集ユニットが、前記第2の構成要素のテキストデータとして、前記第1の構成要素のテキストデータのうち、改行位置よりも後のテキストデータを追加する工程と、
前記編集ユニットが、前記第1の構成要素が更新されたことを通知する文書編集通知を発行する工程と、
前記編集ユニットが、前記第1の構成要素の後に、前記第2の構成要素が挿入されたことを通知する文書編集通知を発行する工程と、
前記表示ユニットが、前記文書編集通知を取得して、前記第1及び第2の構成要素に含まれる前記データをレイアウトする工程と、
を含むことを特徴とする文書処理方法。 - 前記構造化文書は、SGML、XML、MHEG、HTML、XHTML、およびそれらに対して拡張または限定を行った形式のうちのいずれかの形式で記述されたことを特徴とする請求項1に記載の文書処理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000107469A JP4514888B2 (ja) | 2000-04-10 | 2000-04-10 | 文書処理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000107469A JP4514888B2 (ja) | 2000-04-10 | 2000-04-10 | 文書処理方法 |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2001290804A JP2001290804A (ja) | 2001-10-19 |
JP2001290804A5 JP2001290804A5 (ja) | 2007-05-31 |
JP4514888B2 true JP4514888B2 (ja) | 2010-07-28 |
Family
ID=18620456
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000107469A Expired - Fee Related JP4514888B2 (ja) | 2000-04-10 | 2000-04-10 | 文書処理方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4514888B2 (ja) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1743254A4 (en) * | 2004-04-08 | 2008-10-29 | Justsystems Corp | PROCESSING OF DATA AND DOCUMENTS USING A MARKING LANGUAGE |
WO2006046664A1 (ja) | 2004-10-27 | 2006-05-04 | Justsystems Corporation | 時間共有管理装置、文書作成装置、文書閲覧装置、時間共有管理方法、文書作成方法および文書閲覧方法 |
JPWO2006051970A1 (ja) * | 2004-11-12 | 2008-05-29 | 株式会社ジャストシステム | データ処理装置、文書処理装置、データ中継装置、データ処理方法およびデータ中継方法 |
JPWO2006051966A1 (ja) | 2004-11-12 | 2008-05-29 | 株式会社ジャストシステム | 文書管理装置及び文書管理方法 |
EP1811399A1 (en) | 2004-11-12 | 2007-07-25 | JustSystems Corporation | Data processing device and data processing method |
WO2007007529A1 (ja) * | 2005-06-24 | 2007-01-18 | Justsystems Corporation | 文書処理装置および文書処理モジュール |
CN105867919A (zh) * | 2016-03-28 | 2016-08-17 | 浙江大学 | 一种基于访问器劫持的前端数据双向绑定实现方法 |
CN108388462B (zh) * | 2018-02-28 | 2021-04-27 | 武汉斗鱼网络科技有限公司 | 元素变更通知方法、装置及终端设备 |
-
2000
- 2000-04-10 JP JP2000107469A patent/JP4514888B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2001290804A (ja) | 2001-10-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CA2773152C (en) | A method for users to create and edit web page layouts | |
US8918729B2 (en) | Designing electronic forms | |
US8584009B2 (en) | Automatically propagating changes in document access rights for subordinate document components to superordinate document components | |
JP2001290811A (ja) | 文書処理装置、文書処理方法、および記録媒体 | |
WO2006051715A1 (ja) | 文書処理装置及び文書処理方法 | |
US20100107048A1 (en) | Document processor and document processing method | |
US20190147022A1 (en) | Method, program, recording medium, and device for assisting in creating homepage | |
US20100162095A1 (en) | Data processing apparatus and data processing method | |
WO2006051713A1 (ja) | 文書処理装置及び文書処理方法 | |
US20100218083A1 (en) | Document processing apparatus and document processing method | |
US8935608B2 (en) | Information processing method and apparatus | |
JP2012064207A (ja) | ホスト装置及びホスト装置のコンテンツ表示方法 | |
JP4514888B2 (ja) | 文書処理方法 | |
EP1744255A1 (en) | Document processing device and document processing method | |
EP1768034A1 (en) | Document processing device and document processing method | |
EP1821221A1 (en) | Document processing device and document processing method | |
EP1837776A1 (en) | Document processing device and document processing method | |
JP4566196B2 (ja) | 文書処理方法および装置 | |
JP2001290803A (ja) | 文書処理方法、文書処理装置、および記録媒体 | |
US20090287994A1 (en) | Document processing device and document processing method | |
WO2006051712A1 (ja) | 文書処理装置及び文書処理方法 | |
WO2006051721A1 (ja) | 文書処理装置及び文書処理方法 | |
JP2001290802A (ja) | 文書処理方法、文書処理装置、および記録媒体 | |
JP2001290806A (ja) | 文書処理方法、文書処理装置、および記録媒体 | |
JP2001290805A (ja) | 文書処理方法、文書処理装置、および記録媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20041227 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20041227 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050127 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070405 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20070406 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090707 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090817 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20091110 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100112 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20100413 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20100512 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130521 Year of fee payment: 3 |
|
LAPS | Cancellation because of no payment of annual fees |