(57)【要約】【課題】  画面に表示された情報が手書きの電子インクのとき、種々のインク要素とその要素グループとの区別を可能とすること。【解決手段】  指定されたノードまたはサブノードにおいて関数をオペレーション可能とするシステム、方法およびデータ構造が記載される。１つまたは複数のノードを指定する命令が処理されて、ノードの各々に関し関数が実行される。現在のノードで命令の実行ができない場合、現在のノードに関連するデータ構造は誘導されて、１つまたは複数のサブノードを獲得する。命令はサブノードに関し実行される。【選択図】  図２Ａ
2004171521.tif 000002
【特許請求の範囲】
【請求項１】
１つの節点データ構造に関しオペレーションを実行する工程であって、
命令を受信するステップと、
前記データ構造の少なくとも１つのノードの指定を受信するステップと、
前記命令を適切に実行することができる少なくとも１つのサブノードを探索するために前記少なくとも１つのノードから開始して前記データ構造を誘導することによって、前記少なくとも１つのノードの下の少なくとも１つまたは複数のノードに関し前記命令を実行するステップと
を備えたことを特徴とする工程。
【請求項２】
複数のノードが指定されると、前記命令を各指定されたノードについて独立に処理するステップをさらに備えたことを特徴とする請求項１に記載の工程。
【請求項３】
前記節点データ構造は、ツリーデータ構造であることを特徴とする請求項１に記載の工程。
【請求項４】
前記節点データ構造は、ツリーデータ構造であり、インク情報を含むことを特徴とする請求項１に記載の工程。
【請求項５】
より下のノードが存在しない場合、エラーを返すステップをさらに備えたことを特徴とする請求項１に記載の工程。
【請求項６】
前記命令を前記少なくとも１つのサブノードに関し実行するステップをさらに備えたことを特徴とする請求項１に記載の工程。
【請求項７】
前記命令の実行が成功したか否かを判定するステップと、
前記命令の実行の成功の表示を返し、そのように判定されない場合前記命令の実行の失敗の表示を返すステップと
をさらに備えたことを特徴とする請求項６に記載の工程。
【請求項８】
１つのデータ構造を格納して有するコンピュータ読取可能な媒体であって、該データ構造は、
ストローク情報に関連する少なくとも１つの単語ノードと、
該少なくとも１つの単語ノードを指す少なくとも１つのポインタを有する少なくとも１つの行ノードと、
該少なくとも１つの行ノードを指す少なくとも１つのポインタを有する少なくとも１つの段落ノードと
を備え、
受信した命令の実行の間、前記データ構造を再帰的に誘導することができることを特徴とするコンピュータ読取可能な媒体。
【請求項９】
文構造情報をさらに備えたことを特徴とする請求項８に記載のコンピュータ読取可能な媒体。
【請求項１０】
１つのデータ構造を格納して有するコンピュータ読取可能な媒体であって、該データ構造は、
ストローク情報に関連する少なくとも１つの単語ノードと、
該少なくとも１つの単語ノードを指す少なくとも１つのポインタを有する少なくとも１つの文ノードと、
該少なくとも１つの文ノードを指す少なくとも１つのポインタを有する少なくとも１つの段落ノードと
を備え、
受信した命令の実行の間、前記データ構造を再帰的に誘導することができることを特徴とするコンピュータ読取可能な媒体。
【請求項１１】
少なくとも１つの行ノードをさらに備えたことを特徴とする請求項１０に記載のコンピュータ読取可能な媒体。
【請求項１２】
１つのデータ構造に関しオペレーションを実行するシステムであって、
命令と、前記データ構造の少なくとも１つのノードの指定とを受信する入力と、
前記命令が前記少なくとも１つのノードにおいて実行することができるか否かを判定し、前記命令が前記少なくとも１つのノードにおいて実行することができない場合、少なくとももう１つのノードに誘導することを企図するプロセッサと
を備えたことを特徴とするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の態様の目的は、節点データ構造のようなデータ構造のための共通関数インタフェースに関し、より詳細には、ツリーデータ構造関係を用いて手書きインク（ｉｎｋ）を取り扱うための共通インタフェースに関する。
【背景技術】
【０００２】
ワードプロセッサは、線形に（ｌｉｎｅａｒ）配列して情報を格納する。テキストはウィンドウに適合するために覆い隠されるかもしれないが、そのデータの連続（ｓｔｒｅａｍ）は、一般に種々の改行、段落および改ページを有する線形のファイルである。ワードプロセッシング技術において知られるように、単語、文または節の選択が可能である。このように変化に富んでいるにも拘らずオペレーションが可能であるのは、１つには、句読点やその他フォーマットする要素が、ワードプロセッサによって、巧みに定められ認識されるからである。これらの句読点やその他フォーマットする要素がそのテキスト文書に組み込まれているので、選択されたテキストおよび／または領域に関して容易にオペレーションを実行することができる。なぜなら、選択された部分の最初と最後の箇所が容易に決定されるからである。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、画面に表示された情報が手書きの電子インクのとき、種々のインク要素とその要素グループとを区別できるようにすることは困難である。これは、電子インクの選択された部分または領域に関してオペレーションを実行してみれば証明することができる。例えば、電子インクがあるページをはみ出して次のページまで出てしまっている場合、各単語を別々に選択しようとして段落全体を目立たせる必要があって、この段落の選択（テキストのワードプロセッシング環境では容易だが）が困難であることを証明することができる。さらに、手書きインクに関して実行されるオペレーションは、プログラマにとって、選択された部分の種々の構成しなければならないことから困難なものとなる。このため、多くのインク語句（ｉｎｋ  ｗｏｒｄ）を選択して選択された語句に関してオペレーションを実行しようとする場合、そのオペレーションに関連する関数コードは、そのオペレーションを実行する際種々のインク語句（および／または選択されたインク語句を集めたもの）を適用させるように書き込まれる必要があるであろう。例えば、インク語句に下線を引くと、そのインク語句の直前のスペースと直後のスペースとに異なる影響があり、単語の集まりに下線を引くのと対照的である（この場合、隙間のスペースにも同様に下線が引かれる）。このような極めて堅固なコードを生成する必要があることから、将来のあらゆる選択の範囲に対処できることが必要となって、プログラマにとって困難なものとなる。
【０００４】
さらに、製品が変更されて種々のプラットフォームの間でコードを移行することには問題が多い。新たなコードは古いコードと対話する必要がある。より古いコードがもともとより古いコードへ作りこまれていない、それゆえより新しいコードにとって必要なオペレーションを実行することが要求されることが問題である。インク関連の情報については、各インクのストロークを独立して取り扱うといった方法よりもコンパクトな方法でインクのストロークに対処する方法の提供が必要である。
【課題を解決するための手段】
【０００５】
本発明の態様により、上述の問題の少なくとも１つを解決し、したがって入力のシナリオを完全に知ることなく容易にコードを書き込むことができる。本発明の態様により、関数の呼び出しおよび節点の選択を示すことが可能となる。さらに、その関数は、選択されたノードの下にある少なくとも１つのサブノードに関してオペレーションを行うことができる。
【０００６】
本発明の、以上のおよびその他の態様は、添付図面と関連する説明を通して理解されるであろう。
【発明を実施するための最良の形態】
【０００７】
本発明の態様は、入力の範囲の多様さにも拘らず、インクオペレーションを扱うための一貫したインタフェースを提供することに関連する。
【０００８】
本発明の種々の態様を理解する際に補助となるようにいくつかの小段落に分けて以下の説明を行う。その小段落は、以下のようなものである：用語；汎用コンピュータ；インクツリー；例示の段落；関数の実行；およびデータ構造。
【０００９】
（用語）
インク  −  諸所の特性を有する連続のまたは一組のストローク。連続するストロークは、順序付けられたフォームのストロークを含む。その連続は、捕捉された時間によって順序付けられることがあり、またあるページのどこに現れるかによって順序付けられることもある。他の順序付けも可能である。１組のストロークは、連続のストローク若しくは順序付けられないストロークまたはそれらの任意の組み合わせを含む。インクは、追加の特性、メソッド、およびトリガイベントなどを含むために拡張することができる。これらのイベントの少なくともいくつかを組み合わせると、それはインクオブジェクトと呼ぶことができる。
【００１０】
インクオブジェクト  −  特性、メソッドおよび／またはイベントを有するかまたは有さないインクを格納するデータ構造。
【００１１】
ストローク  −  捕捉された点の連続または１組。例えば、レンダーされると点の連続は結合して線とすることができる。これに換えて、ストロークは点と、次の点への方向をさすベクトルとで表現することができる。手短に言うと、ストロークは、点および／または点を結合するものの基本的な表現にかかわりなく、インクに関連する点またはセグメントのいかなる表現をも含むように企図されている。
【００１２】
点  −  空間におけるある場所を定める情報。例えば、点は、捕捉空間（デジタイザ上の点）、仮想インク空間（捕捉されたインクが配置される空間座標）、および／または表示空間（表示装置の点または画素）に関連して定めることができる。
【００１３】
（汎用コンピュータ）
図１は、本発明の種々の態様を実装するために用いることができる従来の汎用デジタルコンピューティング環境の一例を示す機能ブロック図である。図１において、コンピュータ１００は、処理ユニット１１０、システムメモリ１２０、およびシステムメモリと処理ユニット１１０とを含む種々のシステムコンポーネントを結合するシステムバス１３０を含む。システムバス１３０は、各種のバスアーキテクチャの任意のものを使用したメモリバスまたはメモリコントローラ、ペリフェラルバス、およびローカルバスを含む数種のバス構造とすることができる。システムメモリ１２０は、読み取り専用メモリ（ＲＯＭ）１４０およびランダムアクセスメモリ（ＲＡＭ）１５０を含む。
【００１４】
起動時などにコンピュータ１００内の要素間の情報転送を支援する基本ルーチンを含む基本入出力システム１６０（ＢＩＯＳ）は、通例ＲＯＭ１４０に記憶される。コンピュータ１００はまた、ハードディスク（図示せず）の読み取りまたは書き込みを行うハードディスクドライブ１７０、取り外し可能な磁気ディスク１９０の読み取りまたは書き込みを行う磁気ディスクドライブ１８０、およびＣＤ−ＲＯＭや他の光媒体などの取り外し可能な光ディスク１９９の読み取りまたは書き込みを行う光ディスクドライブ１９１を含む。ハードディスクドライブ１７０、磁気ディスクドライブ１８０および光ディスクドライブ１９１は、それぞれハードディスクドライブインタフェース１９２、磁気ディスクドライブインタフェース１９３および光ディスクドライブインタフェース１９４によってシステムバス１３０に結合される。ドライブとそれに関連付けられたコンピュータ読取可能な媒体は、コンピュータ読取可能命令、データ構造、プログラムモジュール、およびコンピュータ１００のその他のデータの不揮発性記憶を提供する。コンピュータによってアクセス可能なデータを格納することができるその他の種類のコンピュータ読取可能な媒体、例えば磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌイカートリッジ、ランダムアクセスメモリ（ＲＡＭｓ）、読み取り専用メモリ（ＲＯＭｓ）などもまた例示の動作環境で用いることができることは、当業者に理解されるであろう。
【００１５】
多くのプログラムモジュールをハードディスクドライブ１７０、磁気ディスク１９０、光ディスク１９９、ＲＯＭ１４０またはＲＡＭ１５０に格納することができるが、これにはオペレーティングシステム１９５、１つまたは複数のアプリケーションプログラム１９６、その他のプログラムモジュール１９７、およびプログラムデータ１９８が含まれる。ユーザは、キーボード１０１およびポインティングデバイス１０２などの入力装置を介してコンピュータ１００にコマンドと情報を入力することができる。他の入力装置（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナなどがある。これらおよび他の入力装置は、システムバスに結合されたシリアルポートインタフェース１０６を介して処理ユニット１１０に接続することが多いが、パラレルポート、ゲームポート、あるいはユニバーサルシリアルバス（ＵＳＢ）など他のインタフェースおよびバス構造によって接続することも可能である。さらに、これらのデバイスは適切なインタフェース（図示せず）を介してシステムバス１３０に直接結合することもできる。モニタ１０７または他タイプの表示装置も、ビデオアダプタ１０８などのインタフェースを介してシステムバス１３０に接続される。パーソナルコンピュータは、モニタに加えて、通常スピーカやプリンタなど他の周辺出力装置（図示せず）も含むことができる。好ましい実施形態において、ペンデジタイザ１６５および付随するペン若しくはスタイラス１６６が、手書き入力をデジタルに読み込むために提供される。ペンデジタイザ１６５とシリアルポートとが直接接続されているように示されているが、実際は、本技術分野で周知のようにペンデジタイザ１６５は、パラレルポート若しくは他のインタフェースおよびシステムバス１３０を介して直接処理ユニット１１０に結合することができる。さらに、デジタイザ１６５はモニタ１０７とは別に示されているが、デジタイザ１６５の使用に適した入力エリアは、モニタ１０７の表示エリアにまでかかっている方が望ましい。さらに、デジタイザ１６５は、モニタ１０７に合体させることもでき、またはモニタ１０７に別のデバイスを重ねるか、そうでなければ付加することができる。
【００１６】
コンピュータ１００は、リモートコンピュータ１０９など１つまたは複数のリモートコンピュータへの論理接続を使用するネットワーク環境で動作することができる。リモートコンピュータ１０９はパーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、あるいはその他の一般的なネットワークノードとすることができ、図１にはメモリ記憶装置１１１しか示していないが、通例はコンピュータ１００との関連で上記で挙げた要素の多くまたはすべてを含む。図１に示す論理接続には、構内ネットワーク（ＬＡＮ）１１２と広域ネットワーク（ＷＡＮ）１１３が含まれる。このようなネットワーキング環境は、オフィス、企業内のコンピュータネットワーク、イントラネット、およびインターネットに一般的に見られるものである。
【００１７】
ＬＡＮネットワーキング環境で使用される場合、コンピュータ１００はネットワークインタフェースまたはアダプタ１１４を介してＬＡＮ１１２に接続される。ＷＡＮネットワーキング環境で使用される場合、パーソナルコンピュータ１００は通例、インターネットなどのＷＡＮ１１３を介して通信を確立するためのモデム１１５またはその他の手段を含む。モデム１１５は内蔵型でも外付け型でもよく、シリアルポートインタフェース１０６を介してシステムバス１３０に接続することができる。ネットワーク環境では、パーソナルコンピュータ１００との関連で図示したプログラムモジュール、またはその一部は遠隔のメモリ記憶装置に格納することができる。
【００１８】
説明したネットワーク接続は例示であり、コンピュータ間で通信接続を確立するためその他の手法を用いることができることが理解されるであろう。種々の周知のプロトコル、例えばＴＣＰ／ＩＰ、イーサネット（登録商標）、ＦＴＰ、ＨＴＴＰなどのいずれかの存在を想定し、システムをクライアント−サーバ構成で動作させてユーザはウェブベースのサーバからウェブページをとってくるのを認められることができる。ウェブページ上でデータを表示し操作するために、種々の従来のウェブブラウザのいずれをも用いることができる。
【００１９】
（インクツリー）
コンピュータは、組織化された構造にデータを整理し、データを容易に配置して、アクセスできるようにする。通常用いられるデータ構造の１つには、節点データ構造があるが、そのツリー構造はほんの一例に過ぎない。（ルートノードを除く）各ノードは、ただ１つの親ノードを有するであろうが、複数の兄弟ノードおよび複数の子ノードを有することができる。慣習的に、ノードＡの親がノードＢの場合またはノードＡの親がノードＢの子孫の場合、ノードＡはノードＢの子孫と呼ばれる。同様に、ノードＢがノードＡの子孫の場合、ノードＡはノードＢの祖先と呼ぶ。図２Ａおよび図２Ｂは、ツリー構造が情報を組織化するためどのように用いられるかを図表を用いて示す図である。より具体的には、これらの図は、電子インクに関連するデータを組織化するためツリー構造はどのように用いることができて、そのインクをユーザが操作しアプリケーションの認識関数が認識できるようにすることができるかを示している。電子インクは、各ストロークを、例えばポインティングデバイスの動きに対応させることによって、ストロークから作ることができる。各ストロークには、そのストロークの特性、例えばストロークを組み立てるデータ点、ストロークの方向ベクトル、ストロークの色、およびストロークがディスプレイにレンダーされる際の太さを定める情報が含まれる。
【００２０】
インクに関連してツリー構造（または他の図表）を用いる利点の１つは、インク情報を（ストローク、単語、ブロック、などを用いて）直接またはそのノードおよび／または変更されるサブノードによりツリー中のノードをアドレスすることによって操作することが可能となるという点である。これによって、まだインクをアドレスする元のコードを直接用いることができるときは、異なるバージョンのコードのためのレガシーサポートが提供される。加えて、より新しいコードがその構造情報を用いて、アドレスする工程を簡単にする。
【００２１】
ツリーを用いるもう１つの利点は、サブツリー全体を容易にアドレスすることができる点である。例えば、段落を青のインク色に設定することがその段落自体にとっては意味がないかもしれないが、インクツリーを用いることによって段落についてインク色を特定し、そのインクのその色をその段落にある各ストロークに設定させることが可能となる。
【００２２】
ストロークは個々に操作されるが、一般的にはストロークは操作する前に先ず組織化するほうがより効果的である。したがって、個々のストロークの間の関係を確立させ、そのストロークを編集または手書き認識のためのより大きな単位に組織化するため、パーザを用いることができる。例えば、一群のつながりのあるストロークを、単語を形成する単位に関連付けるためにパーザを用いることができる。同様に、パーザは一群の１つまたは複数の単語を関連付けて行を形成し、および一群の１つまたは複数の行を関連付けて１ブロックまたは段落を形成することができる。次いでパーザは、一群の１つまたは複数の１ブロックまたは段落を関連付けて単独のページまたは文書を形成することができる。
【００２３】
パーザは自動的に（すなわち、それ自身に関する関係を作って）、手動で（すなわち、インク間の関係をユーザが特定して）、または双方を組み合わせて動作することができる。
【００２４】
パーザは、一般的に、電子インクのストロークの間の関係を正確に表現するため、その電子インクの解析を数度行う必要があるであろう。さらに、電子インクが編集される度に、パーザはそのツリーを更新する必要があるであろう。したがって、パーザは頻繁におよび時間間隔を延長して動作する必要があるかもしれない。パーザがツリー構造を改良する必要が生じるたびに動作中のソフトウェアアプリケーションを妨害し続けるのを回避するため、パーザは環境によってはバックグラウンドで動作し続けることができる。
【００２５】
図２Ａは、一般にパーザによって提供された結果を示すツリー構造２００を示す図である。ツリー２００は、単語ノード２０１を含む。各単語２０１には、対応する単語Ｗを作り上げる個々のストロークのためのデータが含まれる。より具体的には、一群のストロークが単語Ｗを作り上げるとパーザが判断した場合、これらのストロークに対するデータは、単語Ｗを表現する単語ノード２０１に（よって参照され、または）含められる。
【００２６】
複数の単語Ｗがパーザによってある単一の行に関連付けられている場合、単語Ｗに対する単語ノード２０１は、行Ｌに対応する行ノード２０２の子として整理される。行ノード２０２は、その子ノードのすべてに共通するデータ、例えば行Ｌにある単語Ｗを作り上げるインクの色または太さを含む。パーザがブロックＢに関連付けた行Ｌに対応する行ノード２０２は、ブロックＢに対応するブロックノード２０３の子ノードとして整理される。順に、ブロックノード２０３は、ページノード２０４の子ノードとして整理されるが、それは例示された例ではツリー２００のルートノードである。もちろん、複数のページを認識した場合、ページノード２０４は自身、全体の文書に対応するルートノードの子ノードになる。
【００２７】
図２Ｂは、行、ブロック、およびページとは対照的に、行および段落に関連してインク情報を構文解析する別のインク構造を示す図である。インクツリーは、行ノード２０６に接続するインクの単語ノード２０５を有する構造２０８として示される。行ノード２０６は、段落ノード２０７に戻って接続される。
【００２８】
任意の文構造情報は、図２Ａおよび図２Ｂの文ノードＳによって表現することができる。この情報は、行ノード２０６に替えてまたは一緒に用いることもできる。この文情報によって、システムは行に関するインクとは対照的に、個々の文に関して動作することができる。１文が複数の行にまたがる場合もありうる。それ以外では、複数の文が１行に入る場合もある。文情報を包含することによって、ツリーの正式な規則（すなわち、子ノードはすべて正確に１つの親ノードを持つ）に抵触するかもしれない。ここで、文情報を含むことによって、種々の単語ノードに対し２つの親（すなわち、行ノードと文ノード）が与えられることとなる。これは、非循環有効グラフ（ＤＡＧ）によってより正確に表現される。したがって、インク情報を正確に表現するため、ツリーまたはその他の構造のいずれかを用いることができる。
【００２９】
さらに、文ノードに付与される追加の情報によって、ノードまたはサブノードを呼び出す関数の性能を改善することができる。
【００３０】
（例示の段落）
図３は、インク構造情報をシステムに提供するために構文解析される段落を示す図である。この段落は２つの文を含む。例示のため、次の２つの文が用いられる。
2004171521.tif 000003
【００３１】
図３に示すように、この２つの文は３つの行Ｌ０、Ｌ１およびＬ２に構文解析される。これらの行は、段落Ｐ０にまとめられる。単語は次のように分離される：
【００３２】
【表１】
2004171521.tif 000004
【００３３】
図４は、構文解析の結果を含むインクツリーの例を示す図である。ここで、段落４０１Ｐ０は、３つの子、すなわち（段落中の３行を表現している）サブノード４０２（Ｌ０、Ｌ１およびＬ２）を有する。ノードＬ０は、（行Ｌ０中の２つの単語を表現している）２つの単語ノードＷ０およびＷ１の親である。ノードＬ１は、（行Ｌ１中の４つの単語を表現している）４つの単語ノードＷ２〜Ｗ５の親である。ノードＬ２は、（行Ｌ２中の２つの単語を表現している）２つの単語ノードＷ６およびＷ７の親であり、以上を合わせて４０３と表現される。
【００３４】
図５は、ストローク情報を格納することができる方法の一例を示す図である。インクオブジェクト５０１は、単一のストロークを含むことができる（ここで、単一のストロークによって、単語「John」が綴られる）。これに替えて、単語「John」は複数のストロークを含むことができる。図５は、インクオブジェクト５０１が単語「John」を作り上げる４つの一連のストローク５０２〜５０５を含む例を示す。他のストロークは、他のインクオブジェクト５０６〜５０８に格納することができる。最後に、インク構造情報５０９を格納することができる。インク構造情報によって、システムはインクオブジェクト５０１、５０６〜５０８が相互にどのように関係付けられるかを認識することができる。インク構造は、段落、行、ページ、ブロックおよびその他インクにおける相互関係を記述する情報を含むことができる。
【００３５】
再び図３を参照すると、単語（例えば、「walked」の単語Ｗ１）の属性を変更したい場合がある。クリックで選択する手法を用いて、単語Ｗ１をダブルクリックすることによって選択することができる。これに替えて、その実施形態によってはスタイラスを１回たたいて（ｔａｐ）単語またはストロークの集合を選択することができる。さらに、追加でたたいて選択範囲を変更することもできる。
【００３６】
１度選択されると、選択された単語に関するオペレーションを実行することができる。また、一群の単語を変更するため、単語を選択し、選択された一群で関数を実行しようとすることが期待される。この手法で困難なのは、単語Ｗ１を変更するための関数が、また、一群の単語（または行若しくは段落）の変更を扱うのに十分な処理能力をも必要とされるということである。簡単に言えば、この手法では複数の異なる種類の入力を扱うことができる関数が必要なのである。この関数への入力は、単一のストローク、複数のストローク、単一の単語、複数の単語、単一の行、複数の行、単一の段落、若しくは複数の段落または他の同様な群の組み合わせとすることができる。この関数への種々の異なる入力のため、プログラマが（１）受信する可能性のあるすべての入力を予想し、（２）異なる入力の数に拘わらず継続して実行されるように関数を記述する必要があるので、関数を記述するのは困難である。
【００３７】
（関数の実行）
プログラマにとってこの困難な問題を解決する１つの方法としては、その関数が扱うことができる以上の変更するオブジェクトをユーザに選択させないという方法がある。例えば、図６Ａにおいて関数Ｆ６０１は、インクオブジェクト（例えば、太線にする、下線を引く、イタリックにする、挿入する、削除する、拡大する、縮小するなど）のストロークに関するオペレーションを実行するために用いられる。ここで、ユーザは手動で関数Ｆを実行してストロークの各々を種々のインクオブジェクトに繰り返しアドレスすることを要求されるかもしれない。関数Ｆのオペレーションが繰り返し行われるのは、ストローク６１３〜６２１に関する関数ブロック６０１〜６０９のオペレーションとして示される。一群の関数６０１〜６０３は、インクオブジェクト６１０に影響を与える組６２２として示される。同様に、一群の関数６０４〜６０６は、インクオブジェクト６１１に変化を及ぼす組６２３として示される。最後に、一群の関数６０７〜６０９は、インクオブジェクト６１２に変化を及ぼす組６２４として示される。
【００３８】
図６Ｂは、これに替えて、インクオブジェクトに作用させるための関数Ｆを記述する手法を示す。関数Ｆ６２５〜６２７は、それぞれインクオブジェクト６２８〜６３０に関して動作する。図６Ａの手動の工程において、関数Ｆを実行するタスクを簡略化したが、単一のインクオブジェクトよりも大きいまたは小さい入力を関数Ｆが扱うことを可能とするのに条件はない。このように関数Ｆを限定的に使用すると、開発者は、種々の入力に適応するため関数Ｆを２倍近く記述しなければならないので仕事がより困難となる。入力の種類が多様なため、各関数は複数回記述されなければならない。
【００３９】
図７は、これに替えて、１つまたは複数のインクオブジェクトまたはインクのストロークに関し関数を実行するための改良された手法を提供するためにインクの構造を用いる手法を示す。図７において、すべてのノードは同じインタフェースを示している。この共通のインタフェースは、種々の下位構造を呼び出し側関数に渡すように実装することができる。例えば、関数Ｆ７０１は、変更すると想定されるものの特定情報（ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）をもって、関数要素７０２に渡される。関数要素７０２は、インク構造情報７０４に加え、インク情報７０３を含む。ここから、命令は関数Ｆを実行するコード７０５に渡すことができる。例えば、ユーザが段落を選択すると、ユーザの選択に関連する段落ノードは７０２に渡すことができる。７０２において、段落内の要素の特定情報は、関数Ｆ７０５を実行するコールに渡すことができる。関数Ｆがストロークに関連しコール７０１が段落の選択のみを含む場合、関数ブロック７０２は関数Ｆ７０５を実行するコードを呼び出し、選択された段落のストロークの処理を進める。同様に、行または文が選択され、関数Ｆのみがストロークの組み合わせとして単語に関連する場合、関数ブロック７０２は、選択された行または文に関連する単語の特定情報をインク構造７０４から取り戻すであろう。この単語の特定情報は、関数Ｆ７０５を実行するコードに渡されるであろう。
【００４０】
（データ構造）
図８Ａおよび図８Ｂは、インクツリーまたはその他の節点データ構造をサポートするために用いることができるデータ構造の一例を示す図である。図８Ａは、二重連結ツリー構造を示す図である。図８Ｂは、動的配列を用いている同様のツリーを示す図である。
【００４１】
図４のインクツリーは、一部図８Ａによって示される。段落ノード８０１は２つのポインタを含む。第１のポインタは、第１の行ノード８０４を指す。段落ノード８０１の第２のポインタ８０３は、最後の行ノード８２０を指す。図８Ａに示されていないが、段落ノード８０１はまた、後続段落ポインタおよび先行段落ポインタを含むことができる。もちろん、インクツリーを正確に表現するためにすべてのポインタが用いられ、および存在する必要はない。
【００４２】
第１の行ノード８０４は、４つのポインタを含む。第１のポインタ８０６は、後続行８１９を指す。第１の行ノード８０４の第２のポインタは先行の行ノードを指す。本実施例においては、第１の行ノード８０４への先行ノードは存在しないので、先行行ノードポインタ８０７は、いかなる先行ノードも指さない。次に、最初の単語ポインタ８０８は、最初の単語ノード８２１を指す。本実施例においては、行ノード８０４には１つのみ他の単語があるだけなので、最後の単語ポインタ８０９は最後の単語ノード８１４を指し、これはＷ０の次の単語でもある。
【００４３】
第２の行ノード８１９は、第１の行ノード８０４と同様に、４つのポインタも含む。第２の行ノード８１９の後続行ポインタは、第３の行ノード８２０を指す。第２の行ノード８１９の先行行ポインタは、戻って第１の行ノード８０４を指す。最初の単語ポインタおよび最後の単語ポインタは、それぞれ第２の行ノード８１９の最初の単語および最後の単語を指す。簡略化のため、行ノード８１９および８２０に関連する単語は図示しない。
【００４４】
第３の行ノード８２０もまた、４つのポインタを含む。第３の行ノード８２０の後続行ノードポインタは、（図４の例において第３の行ノードは最後の行なので）続く行ノードを指さない。第３の行ノード８２０の先行行ポインタは、戻って第２の行ノード８１９を指す。第３の行ノード８２０の最初の単語ポインタおよび最後の単語ポインタは、第３の行ノード８２０に関連する単語を指す。
【００４５】
最初の単語ノード８２１は４つのポインタを含む。最初のポインタは、後続単語ポインタ８１０であり、行ノード８０４の後続単語を指す。行ノード８０４には先行単語がないので、先行単語ポインタ８１１はいかなる単語も指さない。最初のストロークポインタ８１２および最後のストロークポインタ８１３は、それぞれ最初のおよび最後のストロークを指す。
【００４６】
最後の単語ノード８１４は、最初の単語ノード８２１と同様の構造である。最後の単語ノード８１４は、後続単語ポインタ８１５（それ以上いかなる単語も指さない）、先行単語ポインタ８１６（戻って、先行単語ノード８２１を指す）、最初のストロークポインタ８１７および最後のストロークポインタ８１８を含む。
【００４７】
単語ノード８１０および８１４の構造は、図８Ａで示すように実装することができ、またはこれに代わる表現を有することもできる。例えば、単語ノードは、インクストロークを含むインクオブジェクトとすることができる。また、単語はストロークを指すインクオブジェクトとすることができる。
【００４８】
さらに、図８Ａが図４のノードを示すことに留意されたい。図８Ａは、双方向参照のノードを示す。本実施例においては、すべてのノードは先行ノードに加え、続くノードへのポインタを含む。複数のポインタ（またはより多くの連結リスト）を有する利点は、いずれのノードからも、親ノードおよび周辺ノードを見つけることができる点である。これに替えて、ポインタをいくつか除去してこの処理を簡略化することができる。例えば、行ノード８０４、８１９および８２０の先行行ポインタは省略することができる。同様に、先行単語ポインタ８１１および８１６も省略することができる。先行行ポインタおよび先行単語ポインタを除去することによって、より小さいデータ構造の利点を得ることができる。
【００４９】
種々の行、単語および段落が複数のサブノードを有することができることが理解される。後続のノードを持つことができないノードがあることもさらに理解される。例えば、段落が３つの行を持ち、真ん中の行がコンテンツを持たない（例えば、２つの行の間にスペースが挿入された）場合、記述されたノードのいずれも、サブノードおよび／またはコンテンツを持たない場所取り（ｐｌａｃｅｈｏｌｄｅｒ）として用いることができる。
【００５０】
さらに、種々のノードおよびもう一方への関係を表現するため、他の名前を本発明の範囲から離れない限り使用することができることが理解される。例えば、段落ノード８０１は、ページノード、並びにノード８０１と、行ノード８０４、８１９および８２０、または単語ノード８２１および８１４との間に挿入された多くのノードを参照することができる。追加で挿入されたノードは、手書きインクの別の種類の構文解析を反映させることができる。これらの追加のノードは文情報（例えば、どのような単語が文を構成するか、など）を含むことができる。
【００５１】
図８Ａに替えて、図８Ｂのツリー構造を用いることができる。図８Ｂは、動的配列を用いるツリー構造を示す図である。動的配列は、リストを遡ることなく直接メンバーにアクセスできるという利点がある。動的配列を用いることによって、従来の静的配列を遡るため使用される無駄なメモリを最小化することができる。
【００５２】
動的配列の一実施形態は、Ｍｉｃｒｏｓｏｆｔ（登録商標）  Ｆｏｕｎｄａｔｉｏｎ  Ｃｌａｓｓ‘（ＭＦＣ’ｓ）  Ｃａｒｒａｙクラスに基づくことができる。動的配列の他の実施形態が、本技術分野で既知である。
【００５３】
図８Ｂは、ブロックノードを示しているが、それは、内包するブロック８２３の数（ここでは３個）の初期計数値を含んでいる。第１のブロック０（８２４）は、単語ノード８２７に連結する。他のブロック１（８２５）およびブロック２（８２６）は、追加の単語ノードに連結することができるが、簡略化のため図示しない。
【００５４】
単語ノード８２７は、それによって参照される単語の数（ここでは、２語）の初期計数値（８２８）を含む。単語０（８２９）は、ストロークノード８３１を参照する。単語１は、ストロークノード８３６を参照する。ストロークノード８３１は、１つまたは複数のストローク（例えば、ストローク０（８３２）およびストローク１（８３３））を含む。各ストロークは、そのインクストロークを作り上げる１つまたは複数の点を含む。これらの点はストローク０（８３２）およびストローク１（８３３）にそれぞれ集合８３４および８３５として格納される。
【００５５】
同様に、ストロークノード８３６は、１つまたは複数のストロークを含む（ここでは、ストローク０（８３７）およびストローク１（８３８）で示される）。各ストロークは、インクストロークを作り上げる１つまたは複数の点を含む（ここで、点８３９および点８４０は、それぞれストローク０（８３７）およびストローク１（８３８）に関連付けられる）。
【００５６】
図９は、インクツリーを誘導し（ｎａｖｉｇａｔｅ）、そのツリーのノードに基づいてオペレーションを実行するプロセスを示す。この誘導方法は、通常、再帰的ツリー降下（ｒｅｃｕｒｓｉｖｅ  ｔｒｅｅ  ｄｅｓｃｅｎｔ）と呼ばれる。ステップ９０１において、システムは命令と、その命令で処理すべきノードの指定とを受信する。ステップ９０２において、システムはノードが指定されたか否かを判断する。単一のノードのみが指定された場合、システムはステップ９０３に進む。複数のノードが指定された場合、システムはステップ９０５に進み、各ノードに対する命令を別々に処理する。換言すると、再帰的にツリーを降下して、必要ならばより下のノードに関して処理されるのである。次いでシステムはステップ９０３に進む。
【００５７】
ステップ９０３において、システムは、ステップ９０１で受信した命令が現在のノードでオペレーションが可能かを判断する。現在のノードでオペレーションが可能な場合、システムはステップ９０４に示すように、現在のノードに関しそのオペレーションを実行する。オペレーションが現在のノードで実行できない場合、システムはステップ９０６において、後続のより下のノードに対するツリーを誘導する。
【００５８】
任意で、システムはさらに、ステップ９１０において少なくとも１つのより下のノードが存在するか否かを実質上判断することができる。少なくとも１つのより下のノードが存在する場合、システムはステップ９０２に戻る。そうでなければ、システムはステップ９０９においてエラーを返す。
【００５９】
他の任意のステップとして、ステップ９０４の後、システムはステップ９０７において、ステップ９０４において実行されたオペレーションが成功したか否かを判断することができる。成功の場合、システムはステップ９０８において、成功という結果を返す。そうでない場合、ステップ９０９においてエラーを返す。
【００６０】
本発明は添付の特許請求の範囲を用いて定められたが、これらの請求項は、本発明が本明細書においていずれかの組み合わせまたは下位の組み合わせで記述されたその要素およびステップを含むことを企図されていることを示している。したがって、本発明を定めるための任意の数の代替の組み合わせが存在し、それは種々の組み合わせまたは下位の組み合わせとして詳細な説明、特許請求の範囲、図面を含む本明細書からの１つまたは複数の要素が組み込まれる。本発明の態様の代替の組み合わせは、単独でまたは本願に定められた１つまたは複数の要素若しくはステップと組み合わせて、本発明の変更または一部として利用することができることは、本明細書を考慮すれば当業者に明らかであろう。本明細書に含まれる本発明の記載は、このようなすべての変更をカバーするものであるということを企図することができる。
【図面の簡単な説明】
【００６１】
【図１】本発明の実施形態に関連して用いることができるコンピュータを一般的に説明するための図である。
【図２Ａ】本発明の実施形態による文の例示の構文解析を示す図である。
【図２Ｂ】本発明の実施形態による文の例示の構文解析を示す図である。
【図３】本発明の実施形態による例示の段落を示す図である。
【図４】本発明の実施形態による図３の段落に適用された例示のツリー構造を示す図である。
【図５】本発明の実施形態によるインクオブジェクトおよび構造情報を示す図である。
【図６Ａ】本発明の実施形態による複数のオブジェクトをアドレスするための例示の関数の複製を示す図である。
【図６Ｂ】本発明の実施形態による複数のオブジェクトをアドレスするための例示の関数の複製を示す図である。
【図７】本発明の実施形態による手書きインクに関するインク情報およびインク構造を用いる関数の処理を示す図である。
【図８Ａ】本発明の実施形態による例示のツリー構造を示す図である。
【図８Ｂ】本発明の実施形態による例示のツリー構造を示す図である。
【図９】本発明の実施形態による複数のオブジェクトに関する関数を実行するプロセスを示す図である。
【符号の説明】
【００６２】
１００  コンピュータ
１０１  キーボード
１０２  マウス
１０６  シリアルポートインタフェース
１０７  モニタ
１０８  ビデオアダプタ
１０９  リモートコンピュータ
１１０  処理装置
１１１  メモリ
１１２  ＬＡＮ
１１３  ＷＡＮ
１１４  ネットワークインタフェース
１１５  モデム
１２０  システムメモリ
１３０  システムバス
１４０  ＲＯＭ
１５０  ＲＡＭ
１６０  ＢＩＯＳ
１６５  デジタイザ
１６６  ペン
１７０  ハードディスクドライブ
１８０  磁気ディスクドライブ
１９０  磁気ディスク
１９１  光ディスクドライブ
１９２、１９３、１９４  インタフェース
１９５  オペレーティングシステム
１９６  アプリケーションプログラム
１９７  プログラムモジュール
１９８  プログラムデータ
１９９  光ディスク
５０２〜５０５  ストローク
５０６〜５０８  インクオブジェクト
５０９  インク構造情報
６０１〜６０６、６２５〜６２７  関数Ｆ
６１０〜６１２、６２８〜６３０  インクオブジェクト
８０１、８０４、８２１、８１５、８１９、８２０  ノード
８２２、８２７、８３１、８３６  ノード
【図１】
2004171521.tif 000005
【図２Ａ】
2004171521.tif 000006
【図２Ｂ】
2004171521.tif 000007
【図３】
2004171521.tif 000008
【図４】
2004171521.tif 000009
【図５】
2004171521.tif 000010
【図６Ａ】
2004171521.tif 000011
【図６Ｂ】
2004171521.tif 000012
【図７】
2004171521.tif 000013
【図８Ａ】
2004171521.tif 000014
【図８Ｂ】
2004171521.tif 000015
【図９】
2004171521.tif 000016