(57)【要約】【課題】  アプリケーションと（グループに分割すべきインクストロークを格納する）インクディバイダオブジェクトとの間の通信を行うための方法を提供すること。【解決手段】  この方法は（ａ）オプションでアプリケーションによってインクディバイダオブジェクトに分割要求を発行すること、（ｂ）分割要求に応答して、格納されているインクストロークを、第１の所定の細分度（単語、行、段落、文、図など）を有する１つまたは複数のストロークのグループにグループ分けする分割メソッドを呼び出すこと、および（ｃ）１つまたは複数のストロークのグループに関する情報をアプリケーションから使用できるようにすることを含む。アプリケーションから使用できるこの「情報」は、例えば、ストロークの実際のグループ、ストロークのグループに対応するマシン生成テキストなどを含むことができる。分割メソッドの結果は、インク分割結果オブジェクトに格納することができる。【選択図】  図３
2004227564.tif 000002
【特許請求の範囲】
【請求項１】
情報をアプリケーションプログラムから使用できるようにする方法であって、
複数のインクストロークを格納すること、
分割要求を発行すること、
前記分割要求に応答して、前記格納されているインクストロークを、少なくとも第１の所定の細分度を有する１つまたは複数のストロークのグループにグループ分けすること、および、
前記１つまたは複数のストロークのグループに関する情報を前記アプリケーションプログラムから使用できるようにすること
を含むことを特徴とする方法。
【請求項２】
前記アプリケーションプログラムから使用できるようになる情報は前記１つまたは複数のストロークのグループのうちの少なくとも１つを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記アプリケーションプログラムから使用できるようになる情報は前記第１の所定の細分度を有する多数のストロークのグループを示す情報を含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記アプリケーションプログラムから使用できるようになる情報は前記１つまたは複数のストロークのグループのうちの少なくとも１つに相当するマシン生成テキストを含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記グループ分けが完了したとき前記アプリケーションプログラムに通知すること
をさらに備えることを特徴とする請求項１に記載の方法。
【請求項６】
前記アプリケーションプログラムから使用できるようになる１つまたは複数のストロークのグループに関する情報の少なくとも一部はインク分割結果オブジェクトに格納されることを特徴とする請求項１に記載の方法。
【請求項７】
言語は、前記格納されているインクストロークを前記第１の所定の細分度を有する１つまたは複数のストロークのグループにグループ分けする際に考慮する少なくとも１つの要因であることを特徴とする請求項１に記載の方法。
【請求項８】
前記第１の所定の細分度は単語、行、段落、文、および図から成るグループから選択されることを特徴とする請求項１に記載の方法。
【請求項９】
前記グループは、前記格納されているインクストロークを、少なくとも第２の所定の細分度を有する１つまたは複数のストロークのグループにさらにグループ分けすることを特徴とする請求項１に記載の方法。
【請求項１０】
第２の所定の細分度を有する１つまたは複数のストロークのグループに関する情報を前記アプリケーションプログラムから使用できるようにすること
をさらに備えることを特徴とする請求項１に記載の方法。
【請求項１１】
前記格納されているインクストロークを変更して変更されたインクストロークの組を生成すること、
第２の分割要求を発行すること、および、
前記第２の分割要求に応答して、前記一部変更されたインクストロークの組を１つまたは複数のグループにグループ分けすること
をさらに備えることを特徴とする請求項１に記載の方法。
【請求項１２】
情報をアプリケーションプログラムから使用できるようにする方法を実行するコンピュータ実行可能命令を有するコンピュータ可読媒体であって、前記方法は
複数のインクストロークを格納すること、
分割要求を受信すること、
前記分割要求に応答して、前記格納されているインクストロークを、少なくとも第１の所定の細分度を有する１つまたは複数のストロークのグループにグループ分けすること、および、
前記１つまたは複数のストロークのグループに関する情報を前記アプリケーションプログラムから使用できるようにすること
を備えることを特徴とするコンピュータ可読媒体。
【請求項１３】
前記アプリケーションプログラムから使用できるようになる前記情報は前記１つまたは複数のストロークのグループのうちの少なくとも１つを含むことを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項１４】
前記アプリケーションプログラムから使用できるようになる前記情報は前記第１の所定の細分度を有する多数のストロークのグループを示す情報を含むことを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項１５】
前記アプリケーションプログラムから使用できるようになる前記情報は前記１つまたは複数のストロークのグループのうちの少なくとも１つに相当するマシン生成テキストを含むことを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項１６】
前記方法は
前記グループ分けが完了したとき前記アプリケーションに通知すること
をさらに備えることを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項１７】
前記アプリケーションプログラムから使用できるようになる１つまたは複数のストロークのグループに関する情報の少なくとも一部はインク分割結果オブジェクトに格納されることを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項１８】
言語は、前記格納されているインクストロークを前記第１の所定の細分度を有する１つまたは複数のストロークのグループにグループ分けする際に考慮する少なくとも１つの要因であることを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項１９】
前記第１の所定の細分度は単語、行、段落、文、および図から成るグループから選択されることを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項２０】
前記グループは、前記格納されているインクストロークを、少なくとも第２の所定の細分度を有する１つまたは複数のストロークのグループにさらにグループ分けすることを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項２１】
前記方法は
第２の所定の細分度を有する１つまたは複数のストロークのグループに関する情報を前記アプリケーションプログラムから使用できるようにすること
をさらに含むことを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項２２】
前記方法は
一部変更されたインクストロークの組を受信すること、
第２の分割要求を受信すること、および、
前記第２の分割要求に応答して、前記一部変更されたインクストロークの組を１つまたは複数のグループにグループ分けすること
をさらに含むことを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項２３】
アプリケーションとグループに分割すべきインクストロークを格納するインクディバイダオブジェクトとの間の通信を行う方法であって、
分割要求を前記インクディバイダオブジェクトに発行すること、
前記分割要求に応答して、前記格納されているインクストロークを少なくとも第１の所定の細分度を有する１つまたは複数のストロークのグループにグループ分けする分割メソッドを呼び出すこと、および、
前記１つまたは複数のストロークのグループに関する情報を前記アプリケーションから使用できるようにすること
を備えることを特徴とする方法。
【請求項２４】
前記アプリケーションから使用できるようになる情報は前記１つまたは複数のストロークのグループのうちの少なくとも１つを含むことを特徴とする請求項２３に記載の方法。
【請求項２５】
前記アプリケーションから使用できるようになる情報は前記第１の所定の細分度を有する多数のストロークのグループを示す情報を含むことを特徴とする請求項２３に記載の方法。
【請求項２６】
前記アプリケーションから使用できるようになる情報は前記１つまたは複数のストロークのグループのうちの少なくとも１つに相当するマシン生成テキストを含むことを特徴とする請求項２３に記載の方法。
【請求項２７】
前記分割メソッドが完了したとき前記アプリケーションに通知すること
をさらに備えることを特徴とする請求項２３に記載の方法。
【請求項２８】
前記アプリケーションから使用できるようになる１つまたは複数のストロークのグループに関する情報の少なくとも一部はインク分割結果オブジェクトに格納されることを特徴とする請求項２３に記載の方法。
【請求項２９】
前記分割メソッドの動作中、言語は、前記格納されているインクストロークを前記第１の所定の細分度を有する１つまたは複数のストロークのグループにグループ分けする際に考慮する少なくとも１つの要因であることを特徴とする請求項２３に記載の方法。
【請求項３０】
前記第１の所定の細分度は単語、行、段落、文、および図から成るグループから選択されることを特徴とする請求項２３に記載の方法。
【請求項３１】
前記分割メソッドの動作中、前記分割メソッドは、前記格納されているインクストロークを、少なくとも第２の所定の細分度を有する１つまたは複数のストロークのグループにさらにグループ分けすることを特徴とする請求項２３に記載の方法。
【請求項３２】
第２の所定の細分度を有する１つまたは複数のストロークのグループに関する情報を前記アプリケーションから使用できるようにすること
をさらに備えることを特徴とする請求項２３に記載の方法。
【請求項３３】
前記格納されているインクストロークを変更して変更されたインクストロークの組を生成すること、
第２の分割要求を前記インクディバイダオブジェクトに発行すること、および、
前記第２の分割要求に応答して、前記変更されたインクストロークの組を１つまたは複数のグループにグループ分けする前記分割メソッドを呼び出すこと
をさらに備えることを特徴とする請求項２３に記載の方法。
【請求項３４】
アプリケーションとグループに分割すべきインクストロークを格納するインクディバイダオブジェクトとの間の通信を行う方法を実行するコンピュータ実行可能命令を有するコンピュータ可読媒体であって、前記方法は
分割要求を前記インクディバイダオブジェクトに発行すること、
前記分割要求に応答して、前記格納されているインクストロークを少なくとも第１の所定の細分度を有する１つまたは複数のストロークのグループにグループ分けする分割メソッドを呼び出すこと、および、
前記１つまたは複数のストロークのグループに関する情報を前記アプリケーションから使用できるようにすること
を備えることを特徴とするコンピュータ可読媒体。
【請求項３５】
前記アプリケーションから使用できるようになる情報は前記１つまたは複数のストロークのグループのうちの少なくとも１つを含むことを特徴とする請求項３４に記載のコンピュータ可読媒体。
【請求項３６】
前記アプリケーションから使用できるようになる情報は前記第１の所定の細分度を有する多数のストロークのグループを示す情報を含むことを特徴とする請求項３４に記載のコンピュータ可読媒体。
【請求項３７】
前記アプリケーションから使用できるようになる情報は前記１つまたは複数のストロークのグループのうちの少なくとも１つに相当するマシン生成テキストを含むことを特徴とする請求項３４に記載のコンピュータ可読媒体。
【請求項３８】
通信を行う前記方法は
前記分割メソッドが完了したとき前記アプリケーションに通知すること
をさらに含むことを特徴とする請求項３４に記載のコンピュータ可読媒体。
【請求項３９】
前記アプリケーションから使用できるようになる１つまたは複数のストロークのグループに関する情報の少なくとも一部はインク分割結果オブジェクトに格納されることを特徴とする請求項３４に記載のコンピュータ可読媒体。
【請求項４０】
前記分割メソッドの動作中、言語は、前記格納されているインクストロークを前記第１の所定の細分度を有する１つまたは複数のストロークのグループにグループ分けする際に考慮する少なくとも１つの要因であることを特徴とする請求項３４に記載のコンピュータ可読媒体。
【請求項４１】
前記第１の所定の細分度は単語、行、段落、文、および図から成るグループから選択されることを特徴とする請求項３４に記載のコンピュータ可読媒体。
【請求項４２】
前記分割メソッドの動作中、前記分割メソッドは、前記格納されているインクストロークを、少なくとも第２の所定の細分度を有する１つまたは複数のストロークのグループにさらにグループ分けすることを特徴とする請求項３４に記載のコンピュータ可読媒体。
【請求項４３】
通信を行う前記方法は
第２の所定の細分度を有する１つまたは複数のストロークのグループに関する情報を前記アプリケーションから使用できるようにすること
をさらに含むことを特徴とする請求項３４に記載のコンピュータ可読媒体。
【請求項４４】
通信を行う前記方法は
前記格納されているインクストロークへの変更を受信して変更されたインクストロークの組を生成すること、
第２の分割要求を前記インクディバイダオブジェクトに発行すること、および、
前記第２の分割要求に応答して、前記変更されたインクストロークの組を１つまたは複数のグループにグループ分けする前記分割メソッドを呼び出すこと
をさらに含むことを特徴とする請求項３４に記載のコンピュータ可読媒体。
【請求項４５】
インクディバイダオブジェクトに対するデータ構造を格納しているコンピュータ可読媒体であって、
１つまたは複数のインクストロークに関する情報を格納するためのストロークプロパティを規定する第１のデータセットと、
前記１つまたは複数のインクストロークを、少なくとも第１の所定の細分度を有する１つまたは複数のストロークのグループにグループ分けするための分割メソッドを規定する第２のデータセットと
を備えることを特徴とするコンピュータ可読媒体。
【請求項４６】
前記インクディバイダオブジェクトは、前記１つまたは複数のインクストロークの分割に使用する認識器に関する情報を格納するための認識器コンテキストプロパティを規定する第３のデータセットをさらに含むことを特徴とする請求項４５に記載のコンピュータ可読媒体。
【請求項４７】
インク分割結果オブジェクトに対するデータ構造を格納しているコンピュータ可読媒体であって、
分割メソッドの対象となり、少なくとも第１の所定の細分度を有する１つまたは複数のグループにグループ分けされた１つまたは複数のインクストロークに関する情報を格納するためのストロークプロパティを規定する第１のデータセットと、
少なくとも前記第１の所定の細分度のインクストロークのグループの取り出しを可能にするためのタイプごとの結果メソッド（ｒｅｓｕｌｔ  ｂｙ  ｔｙｐｅ  ｍｅｔｈｏｄ）を規定する第２のデータセットと
を備えることを特徴とするコンピュータ可読媒体。
【請求項４８】
前記タイプごとの結果メソッドは、前記第１の所定の細分度を含む異なる複数の細分度でインクストロークのグループを取り出すことができることを特徴とする請求項４７に記載のコンピュータ可読媒体。
【請求項４９】
インク分割ユニットオブジェクトに対するデータ構造を格納しているコンピュータ可読媒体であって、
１つまたは複数のインクストロークのグループに含まれる１つまたは複数のインクストロークに関する情報を格納するためのストロークプロパティを規定する第１のデータセットと、
前記グループに含まれるインクストロークのタイプに関する情報を格納するための分割タイプを規定する第２のデータセットと
を備えることを特徴とするコンピュータ可読媒体。
【請求項５０】
前記データ構造は、前記ストロークプロパティに含まれている前記１つまたは複数のインクストロークに相当するマシン生成テキストを規定する、またはそれを指す第３のデータセットをさらに含むことを特徴とする請求項４９に記載のコンピュータ可読媒体。
【請求項５１】
前記データ構造は、前記ストロークプロパティに含まれている前記１つまたは複数のストロークを手書き認識システムへの挿入に適した角度に回転させるのに必要な回転の角度を規定する第４のデータセットをさらに含むことを特徴とする請求項５０に記載のコンピュータ可読媒体。
【請求項５２】
前記データ構造は、前記分割タイプに相当する列挙型値を規定する第５のデータセットをさらに含むことを特徴とする請求項５１に記載のコンピュータ可読媒体。
【請求項５３】
前記データ構造は、前記ストロークプロパティに含まれている前記１つまたは複数のストロークを手書き認識システムへの挿入に適した角度に回転させるのに必要な回転の角度を規定する第３のデータセットをさらに含むことを特徴とする請求項４９に記載のコンピュータ可読媒体。
【請求項５４】
前記データ構造は、前記分割タイプに相当する列挙型値を規定する第３のデータセットをさらに含むことを特徴とする請求項４９に記載のコンピュータ可読媒体。
【請求項５５】
インク分割ユニット群オブジェクトに対するデータ構造を格納しているコンピュータ可読媒体であって、
インクオブジェクトに存在するストロークのグループの数を規定する第１のデータセットと、
特定のストロークのグループのインデックス値が与えられると、前記特定のストロークのグループを取り出す項目メソッドを規定する第２のデータセットと
を備えることを特徴とするコンピュータ可読媒体。
【請求項５６】
パーサとアプリケーションプログラムとの間の通信を行う方法であって、
前記アプリケーションプログラムから複数のインクストロークを表すデータを前記パーサに送信すること、
前記パーサに解析情報を提供すること、
前記インクストロークを少なくとも第１の所定の細分度を有する１つまたは複数のストロークのグループにグループ分けすること、および、
前記１つまたは複数のストロークのグループに関する情報を前記アプリケーションプログラムから使用できるようにすること
を備えることを特徴とする方法。
【請求項５７】
前記解析情報を提供することは前記グループ分けに使用すべき認識器を設定することを含むことを特徴とする請求項５６に記載の方法。
【請求項５８】
前記解析情報を提供することは前記グループ分けに使用すべき言語を設定することを含むことを特徴とする請求項５６に記載の方法。
【請求項５９】
前記解析情報を提供することは前記第１の所定の細分度を設定することを含むことを特徴とする請求項５６に記載の方法。
【請求項６０】
前記解析情報を提供することは前記インクストロークに含まれるテキストの行に対して期待される行間隔を設定することを含むことを特徴とする請求項５６に記載の方法。
【請求項６１】
請求項５６に記載の前記方法を実行するコンピュータ実行可能命令を格納するコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の形態は、アプリケーションプログラムと、種々のインクおよびインクディバイダオブジェクト（ｉｎｋ  ｄｉｖｉｄｅｒ  ｏｂｊｅｃｔ）を含む電子インクとの間の通信を容易にするシステム、方法、およびコンピュータ可読媒体に関する。こうしたシステム、方法、およびコンピュータ可読媒体の一部の例によって、アプリケーションプログラムまたはクライアントコードが種々の細分度（ｇｒａｎｕｌａｒｉｔｙ）のインクストロークグループにアクセスできるようになり、アプリケーションプログラムの性能が向上し、こうしたプログラムおよびその関連するコードのデジタルインクとの対話の向上が可能となる。
【背景技術】
【０００２】
一般に、本発明は、以下の特許出願で開示されているシステムおよび方法とともに使用することができる。
（ａ）「Handwriting Layout Analysis of Freeform Digital Ink Input」という名称の2002年5月14日出願（特許文献１）
（ｂ）「Classification Analysis of Freeform Digital Ink Input」という名称の2002年5月14日出願（特許文献２）
（ｃ）「An Incremental System for Real Time Digital Ink Analysis」という名称の2002年5月14日出願（特許文献３）
（ｄ）「Interfacing With Ink」という名称の2002年6月28日出願（特許文献４）
これらの同時係属の米国特許出願のそれぞれを参照により本明細書にすべて組み込む。
【０００３】
一般のコンピュータシステム、特にＭｉｃｒｏｓｏｆｔ  ＷＩＮＤＯＷＳ（登録商標）などグラフィカルユーザインターフェース（ＧＵＩ）システムを使用するコンピュータシステムは、テキストを入力するキーボード、およびユーザインターフェースを駆動させるポインティング装置（１つまたは複数のボタンを備えるマウスなど）など、１つまたは複数の個別の入力装置からユーザ入力を受け付けるように最適化される。ユビキタスなキーボード、およびマウスインターフェースによって、ドキュメント、スプレッドシート、データベースフィールド、図、写真などを迅速に作成し、変更することができる。しかし、コンピュータ以外の（従来の）ペンおよび用紙と比較して、キーボード、およびマウスインターフェースによって提供される柔軟性にはいくつかの点で大きなギャップがある。従来のペンおよび用紙を使用すると、ユーザは、書類の編集、欄外へのメモの書き留め、ならびに絵および他の形状の描画などを行うことができる。いくつかの場合、ユーザは、キーボードおよびマウスインターフェースの範囲を超えてメモを自由に書き留めることができるため、コンピュータ画面上で書類を見直すよりペンを使用して書類を作成することを好むかもしれない。
【０００４】
一部のコンピュータシステムでは、ユーザが画面上に描画することができる。例えば、Ｍｉｃｒｏｓｏｆｔ  ＲＥＡＤＥＲアプリケーションによって、ユーザは、電子インク（本明細書では「インク」または「デジタルインク」とも呼ぶ）をドキュメントに追加することができる。システムは、インクを格納し、要求に応じてそれをユーザに提供する。他のアプリケーション（例えばＰａｌｍ３．ｘおよび４．ｘ、およびＰｏｃｋｅｔＰＣオペレーティングシステムに関連して当分野で知られている描画アプリケーションなど）では、図の捕捉および格納が可能である。また、Ｃｏｒｅｌ  Ｄｒａｗなどの種々の描画アプリケーション、およびＰｈｏｔｏｓｈｏｐなどの写真および編集アプリケーションをＷａｃｏｍタブレット製品などスタイラスベースの入力製品とともに使用することができる。こうした描画は、描画の作成に使用するインクストロークと関連付けられた他のプロパティを含む。例えば、線幅および色をインクとともに格納することができる。こうしたシステムの１つの目的は、用紙に適用される物理的なインクのルックアンドフィールを複製することである。
【０００５】
電子インクを受け付けるコンピュータシステムは知られているが、現在のところ、その可用性および有用性は、少なくともいくつかの点で若干限られている。さらにその可用性および有用性を向上させるには、アプリケーションプログラムは、電子インクと対話し、インターフェースをとることができるようにするコードを含んでいなければならない。したがって、コードライタが容易に、フレキシブルに、かつ一貫性をもって異なる種々のインクのグループと対話し、インターフェースをとることができるようになるためのアプリケーションプログラムインターフェース（「ＡＰＩ」）は、何らかのやり方で電子インクと対話するアプリケーションプログラムのコードを書きたい人には非常に有用である。
【０００６】
【特許文献１】米国特許出願第１０／１４３，８６５号明細書
【特許文献２】米国特許出願第１０／１４３，８６４号明細書
【特許文献３】米国特許出願第１０／１４３，８０４号明細書
【特許文献４】米国特許出願第１０／１８４，１０８号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００７】
例えば、ユーザがあるページ上で入力を行い、電子インクと対話することができる自由な形式の描画面を実装するアプリケーションは、ユーザが提供するストロークを格納し、処理する範囲を決定するという問題に直面する。アプリケーション開発者にとって直接的な手法には次のものがある。それは、（１）各ストロークを別個に扱う、または（２）すべてのストロークをあるページ上で、または所与の編集セッションでいっしょに扱うことである。しかし、こうした手法のそれぞれには、エンドユーザにとっての使いやすさ、および既存のドキュメントレイアウトコードとの互換性の点からみると、実用上重大な制限がある。アプリケーションに理想の手法は、通常は実施はかなり難しいが、単語、行、段落を備えるグループ内のストロークを扱うことである。この手法は、使いやすさ、互換性、手書き認識の向上を可能にすること、および他の特徴などにかなりの利点がある。
【０００８】
本発明では、アプリケーション開発者が使用してこうした利点を容易に得ることができ、ストロークをどのようにグループ分けするかを決定する必要なく、したがってこの手法の大きな問題をとり除くことができるＡＰＩを作り出す。
【課題を解決するための手段】
【０００９】
本発明の形態は、情報をアプリケーションプログラムから使用できるようにするシステムおよび方法に関する。これらのシステムおよび方法は、複数のインクストロークを格納することと、分割要求を発行し、あるいは受信することと、分割要求に応答して、格納されているインクストロークを、少なくとも第１の所定の細分度を有する１つまたは複数のストロークのグループにグループ分けすることと、１つまたは複数のストロークのグループに関する情報をアプリケーションプログラムから使用できるようにすることを含むことができる。アプリケーションプログラムから使用できるようになる「情報」は、例えば、１つまたは複数のストロークのグループうちの少なくとも１つと、第１の所定の細分度を有するいくつかのストロークのグループを示す情報と、１つまたは複数のストロークのグループのうちの少なくとも１つに対応するマシン生成テキストとを含むことができる。ストロークは、単語、行、段落、文、図などを含むグループなど、異なる種々の細分度にグループ分けすることができる。また、グループ分け動作では、ストロークを、１つを超える異なる細分度のグループにグループ分けすることができ、例えば、１つまたは複数のストロークを追加する、削除する、移動する、サイズ変更する、ないしは変更することによってインクストロークの組が変更された後で繰り返すことができる。アプリケーションプログラムコードは、解析中に使用すべき認識器を設定する、解析中に使用すべき言語を設定する、ストロークが解析される所望の細分度を設定する、インクストロークに含まれるテキストの行の期待される行間隔を設定するなど、上述の方法の操作中に種々のタイプの解析情報をパーサに提供することができる。
【００１０】
本発明の他の形態は、アプリケーションと、グループに分割すべきインクストロークを格納するインクディバイダオブジェクトとの間の通信を行うためのシステムおよび方法に関する。一部の例では、このシステムおよび方法は、（ａ）オプションでアプリケーションによってインクディバイダオブジェクトに分割要求を発行することと、（ｂ）分割要求に応答して、格納されているインクストロークを、少なくとも第１の所定の細分度（単語、行、段落、文、図など）を有する１つまたは複数のストロークのグループにグループ分けする分割メソッドを呼び出すことと、（ｃ）１つまたは複数のストロークのグループに関する情報をアプリケーションから使用できるようにすることを含む。分割メソッドの結果は、インク分割結果オブジェクト（ｉｎｋ  ｄｉｖｉｓｉｏｎ  ｒｅｓｕｌｔ  ｏｂｊｅｃｔ）に格納することができる。一部の例では、インク分割結果オブジェクトは、元々分割されていたインクストロークを含み（かつアプリケーションプログラムがそれにアクセスできるようにし）、異なる種々の細分度のストロークのグループを取り出せるようにする。本発明の他の例では、分割メソッドは、インクストロークに関連する所定の、あるいはあらかじめ設定されている言語特性を使用して、インクストロークのグループをよりよく規定できるよう助けることができる。
【００１１】
本発明のさらに別の形態は、上述で概要を述べた種々の方法を実行するコンピュータ実行可能命令を格納しているコンピュータ可読媒体に関する。本発明の別の形態は、種々のインクディバイダオブジェクト、インク分割結果オブジェクト、インク分割ユニット群オブジェクト（ｉｎｋ  ｄｉｖｉｓｉｏｎ  ｕｎｉｔｓ  ｏｂｊｅｃｔ）、およびインク分割ユニットオブジェクト（ｉｎｋ  ｄｉｖｉｓｉｏｎ  ｕｎｉｔ  ｏｂｊｅｃｔ）のデータ構造を格納しているコンピュータ可読媒体に関する。
【００１２】
本発明のこれらおよび他の特徴および形態は、以下の詳細な説明および図面を考察することによってより明らかになる。
【発明を実施するための最良の形態】
【００１３】
上述の概要、および以下の詳細な説明は、添付の図面と併せ読めば、よりよく理解されよう。添付の図面は、特許請求した本発明に関して限定的なものではなく、例示的なものとして含める。
【００１４】
以下の説明は、読者を助けるためにサブセクションに分割する。サブセクションは、用語、汎用コンピュータ、インクレイアウト分析および分類分析の一般的な背景、インクディバイダオブジェクトおよびＡＰＩ、インクディバイダオブジェクトおよびＡＰＩの動作、アプリケーションプログラムインターフェース、代替のインクディバイダオブジェクト、および結論を含む。
【００１５】
Ｉ．用語
インク−オプションでプロパティを備える１連のまたは１組の１つまたは複数のストローク。１連のストロークは、ストロークを順序付けられた形で含むことができる。シーケンスは、捕捉された時間、またはストロークがあるページ上のどこに表示されるかによって順序付けることができる。他の順序も可能である。１組のストロークは、複数の１連のストローク、または順序付けられていないストローク、またはその任意の組合せを含むことができる。インクは、追加のプロパティ、メソッド、およびトリガイベントなどを含むように拡張することができる。
【００１６】
インクオブジェクト−プロパティ、メソッド、および／またはイベントを備えている、または備えていない１つまたは複数のインクストロークを格納するデータ構造。
【００１７】
ストローク−１連または１組の捕捉された点。例えば、１連の点は、レンダされると、線で結ぶことができる。あるいはまた、ストロークは点または次の点の方向へのベクトルとして表すことができる。簡単に言えば、ストロークは、点および／または点を結ぶものの基礎的な表現に関わらず、インクに関連する点またはセグメントの任意の表現を含むものである。
【００１８】
点−空間におけるある位置を規定する情報。例えば、点は、捕捉する空間（例えばデジタイザ上の点）、仮想インク空間（捕捉されたインクが表される、または格納される空間内の座標系）、および／または表示空間（表示装置の点またはピクセル）を基準にして規定することができる。
【００１９】
レンダ−グラフィックおよび／またはインクがどのように表示されるか、画面上か、印刷されるか、または別のデータ形式に出力されるかを決定するプロセス。
【００２０】
インキングセッション−アプリケーションがインクの作成または編集を開始したときからパーサ（インクディバイダオブジェクトなど）がインクストロークを検査し、解析されたインクエンティティを戻すことを要求されるまでの時間。所与のインキングセッション中にパーサを複数回呼び出すことができ、パーサの呼出の間にストロークを追加、削除、ないしは変更することができる。
【００２１】
ＩＩ．汎用コンピュータ
図１は、本発明の種々の形態の実施に使用できる従来の汎用デジタルコンピューティング環境の例を示す概略図である。図１では、コンピュータ１００は、処理ユニットまたはシステム１１０、システムメモリ１２０、およびシステムメモリを含む様々なシステム構成要素を処理ユニット１１０に結合するシステムバス１３０を含む。システムバス１３０は、種々のバス構造のうちの任意のものを使用する、メモリバスまたはメモリコントローラ、周辺バス、およびローカルバスなど、いくつかのタイプのバス構造のうちのどんなものでもよい。システムメモリ１２０は、読取り専用メモリ（ＲＯＭ）１４０およびランダムアクセスメモリ（ＲＡＭ）１５０を含む。
【００２２】
起動時などコンピュータ１００内の要素間で情報の転送を助ける基本ルーチンを含むＢＩＯＳ（ｂａｓｉｃ  ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｓｙｓｔｅｍ）１６０がＲＯＭ１４０に格納されている。コンピュータ１００は、ハードディスク（図示せず）からの読出し、およびそこへの書込みを行うためのハードディスクドライブ１７０、取外し可能磁気ディスク１９０からの読出し、またはそこへの書込みを行うための磁気ディスクドライブ１８０、ＣＤ  ＲＯＭまたは他の光媒体など取外し可能光ディスク１９２からの読出し、またはそこへの書込みを行うための光ディスクドライブ１９１も含む。ハードディスクドライブ１７０、磁気ディスクドライブ１８０、および光ディスクドライブ１９１は、それぞれハードディスクドライブインターフェース１９２、磁気ディスクドライブインターフェース１９３、および光ディスクドライブインターフェース１９４によってシステムバス１３０に接続されている。ドライブおよびその関連するコンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、およびパーソナルコンピュータ１００用の他のデータの不揮発性記憶装置を提供する。動作環境の例では、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）など、コンピュータでアクセス可能なデータを格納することができる他のタイプのコンピュータ可読媒体も使用できることを、当業者であれば理解されよう。
【００２３】
オペレーティングシステム１９５、１つまたは複数のアプリケーションプログラム１９６、他のプログラムモジュール１９７、およびプログラムデータ１９８を含むいくつかのプログラムモジュールは、ハードディスクドライブ１７０、磁気ディスク１９０、光ディスク１９２、ＲＯＭ１４０、またはＲＡＭ１５０に格納することができる。ユーザは、キーボード１０１やポインティング装置１０２などの入力装置を介してコマンドおよび情報をコンピュータ１００に入力することができる。他の入力装置（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナなどがある。これらおよび他の入力装置はしばしばシリアルポートインターフェース１０６を介して処理ユニット１１０に接続される。シリアルポートインターフェース１０６は、システムバス１３０に結合されているが、パラレルポート、ゲームポート、ユニバーサルシリアルバス（ＵＳＢ）など他のインターフェースによって接続することもできる。さらに、これらの装置を、適切なインターフェース（図示せず）を介して直接システムバス１３０に結合することもできる。モニタ１０７または他のタイプの表示装置も、ビデオアダプタ１０８などのインターフェースを介してシステムバス１３０に結合される。モニタ１０７に加えて、パーソナルコンピュータは一般に、スピーカ、プリンタなど他の周辺出力装置（図示せず）を含む。一例として、フリーハンド入力をデジタル式に捕捉するためにペンデジタイザ１６５および付属ペンすなわちユーザ入力装置１６６が設けられている。ペンデジタイザ１６５は、図１に示すように、シリアルポートインターフェース１０６およびシステムバス１３０を介して、または他の任意の適した接続を介して処理ユニット１１０に結合することができる。さらに、デジタイザ１６５をモニタ１０７から離して示しているが、デジタイザ１６５の使用可能なエリアは、モニタ１０７の表示エリアと同程度の範囲を占める。さらに、デジタイザ１６５をモニタ１０７と一体化する、あるいはモニタ１０７に重ねる別個の装置として、ないしはモニタ１０７に取り付ける装置として存在させても良い。
【００２４】
コンピュータ１００は、リモートコンピュータ１０９など１つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク式環境で動作することができる。リモートコンピュータ１０９は、サーバ、ルータ、ネットワークＰＣ、ピア装置、または他の一般のネットワークノードとすることができ、図１にはメモリ記憶装置１１１のみを関連のアプリケーションプログラム１９６とともに示しているが、一般にコンピュータ１００に関連して上述した多くの、またはすべての要素を含む。図１に示した論理接続は、ローカルエリアネットワーク（ＬＡＮ）１１２、およびワイドエリアネットワーク（ＷＡＮ）１１３を含む。こうしたネットワーキング環境は、有線および無線の通信システムを使用するオフィス、企業全体のコンピュータネットワーク、イントラネット、およびインターネットにおいて一般的である。
【００２５】
ＬＡＮネットワーキング環境で使用する場合、コンピュータ１００は、ネットワークインターフェースまたはアダプタ１１４を介してローカルネットワーク１１２に接続される。ＷＡＮネットワーキング環境で使用する場合、パーソナルコンピュータ１００は一般に、モデム１１５、またはワイドエリアネットワーク１１３を介してインターネットなどに通信を確立する他の手段を含む。モデム１１５は、内蔵または外付けでもよく、シリアルポートインターフェース１０６を介してシステムバス１３０に接続される。ネットワーク式環境では、パーソナルコンピュータ１００に関連して示したプログラムモジュール、またはその一部をリモートメモリ記憶装置に格納することができる。
【００２６】
示したネットワーク接続は例であり、コンピュータ間の通信リンクを確立する他の技術を使用できることは理解されよう。ＴＣＰ／ＩＰ、Ｅｔｈｅｒｎｅｔ（登録商標）、ＦＴＰ、ＨＴＴＰなどよく知られている様々な任意のプロトコルの存在が想定され、システムは、クライアント−サーバ構造でユーザがＷｅｂベースのサーバからＷｅｂページを取り出すことができるように動作することができる。従来の種々のＷｅｂブラウザのうちの任意のものを使用してＷｅｂページ上でデータを表示し処理することができる。
【００２７】
図２は、本発明の種々の形態とともに使用できるペンベースまたはスタイラスベースのコンピューティングシステム２０１の一例を示している。図１のシステムの任意またはすべての特徴、サブシステム、および機能を図２のコンピュータに含めることができる。ペンベースのコンピューティングシステム２０１は、複数のウィンドウ２０３が表示される、液晶ディスプレイ（ＬＣＤ）画面など、例えばデジタル化フラットパネルディスプレイなどの大きい表示面２０２を含む。スタイラス２０４を使用して、ユーザは、デジタル化表示面２０２上で選択、強調表示、および／または書込みを行うことができる。適切なデジタル化表示面２０２の例には、ＭｕｔｏｈやＷａｃｏｍのペンデジタイザなどの電磁ペンデジタイザがある。他のタイプのペンデジタイザ、例えば光デジタイザを使用してもよい。ペンベースのコンピューティングシステム２０１は、スタイラス２０４を使用して示されたジェスチャを解釈してデータを処理し、テキストを入力し、作図し、および／またはスプレッドシート、文書処理プログラムなど従来のコンピュータアプリケーションタスクを実行する。
【００２８】
スタイラス２０４は、１つまたは複数のボタン、またはその選択能力を増大させる他の特徴を備えることができる。一例では、スタイラス２０４は、一端が筆記要素を構成し、もう一端が「イレーザ」端を構成する「鉛筆」または「ペン」として実装することができる。消しゴムのように表示を横切ると、イレーザは消去すべき表示の部分を示す。マウス、トラックボールなど他のタイプの入力装置を使用してもよい。さらに、ユーザ自身の指をスタイラス２０４とし、その指を使用してタッチセンシティブディスプレイまたは近接センシティブディスプレイ（ｐｒｏｘｉｍｉｔｙ−ｓｅｎｓｉｔｉｖｅ  ｄｉｓｐｌａｙ）上の表示画像の一部を選択し、あるいは示すこともできる。したがって、「ユーザ入力表示」という用語は、本明細書で使用する場合、広範な定義を有するものとし、スタイラス２０４など、よく知られている入力装置に対する種々の変形を含む。領域２０５は、スタイラス２０４がどこで表示面２０２に接触しているかをユーザが判断することができるフィードバック領域または接触領域を示す。
【００２９】
本発明の例によるアプリケーションプログラムインターフェースおよびシステム、および方法を、図２に関連して上述したような電子インクおよびインクストロークを受け付け、処理するペンベースのコンピューティングシステムとともに使用することができる。
【００３０】
ＩＩＩ．インクレイアウト分析および分類分析の一般的な背景
Ａ．インク分析システムおよび方法全体の概要
本発明の理解を助けるために、インク「レイアウト分析」およびインク分類分析（「インク解析」とも呼ぶ）に関するいくつかの背景情報の再検討を行うことが有効である。本発明から逸脱することなく任意の適したデータ処理システムおよび方法を使用することはできるが、本発明の一部の例では、例えば２００２年５月１４日出願の米国特許出願第１０／１４３，８６５号に記載のもの（例えば、特許文献１参照）などのレイアウト分析システムおよび方法を使用することができ、また本発明の一部の例では、２００２年５月１４日出願の米国特許出願第１０／１４３，８６４号に記載のもの（例えば、特許文献２参照）などの分類分析システムおよび方法を使用することができる。一般に、インクの解析は、本発明から逸脱することなく任意の適したやり方で行うことができる。
【００３１】
図３は、本発明の一部の例においてインクを解析し、分割するシステムおよび方法全体の一例を概して図示する概略図である。図３の例において、入来または入力されるインクストローク３００は、まずレイアウト分析手順３０２の対象となる。これは、入力インクストローク３００を組み合わせ、解析して、単語、行、段落（またはブロック）、および／または他のグループ３０４など関連するストロークの組にする。一般に、レイアウト分析方法またはシステム３０２は、あるページ上のインクストローク３００のサイズおよびレイアウトに関連するある情報を確認し、サイズ、レイアウトなどに基づいていくつかのストロークを一緒にする。こうしたシステムまたは方法の例は、図５、図６Ａ、および図６Ｂと併せて詳しく説明する。
【００３２】
レイアウト分析３０２の後、データを、他の種々のインク分析エンジンに挿入することができる。図３に示すシステムの例では、データは次に、分類分析システムまたはエンジン３０６に挿入される。この分類分析システムまたはエンジン３０６は、特定の入力データに含まれるストロークのタイプ（個々のストロークまたはストロークの組がフロー図、自由形式の図、手書きのテキスト、音楽、数学、チャート、グラフなどであるかどうか）を決定する。本発明の一部の例では、要望に応じて、ユーザは、（例えばブロックまたはラッソ選択（ｌａｓｓｏ  ｓｅｌｅｃｔ）および割当手順を使用して）「描画モード」、「テキストモード」などを選択する、あるいは特定のストロークタイプを１つまたは複数のストロークに割り当てることによって、入力ストロークのタイプなどについてシステムに「通知する」ことができる。
【００３３】
入力インクのさらなる処理は、分類分析システムまたはエンジン３０６によって認識される（ないしは決定される）ストロークタイプによって決まる。例えば、手書きのテキストとして分類されるストロークまたはストロークの組の場合、そのように分類されたストロークの組を、手書き認識システム３１０、または別の適切な処理システムに送信することができる。必要に応じて、または要望に応じて、手書き認識システム３１０または他の処理システムに挿入する前に、正規化アルゴリズムまたはシステム３０８を使用して入力インクデータを「正規化」して、入力インクデータを手書き認識システム３１０または他の処理システムによる分析に最適な向きに配置することができる（例えば、必要に応じて斜めの入力テキストストロークを水平方向の基準線に対して回転させる）。従来の正規化システムまたは方法３０８、および／または手書き認識システムまたは方法３１０を、本発明から逸脱することなく（必要に応じて、および／または要望に応じて）使用することができる。手書き認識システムまたは方法３１０から出力されたデータは、従来の文書処理システム（Ｍｉｃｒｏｓｏｆｔ  ＷＯＲＤ（登録商標）など）、電子メール処理システム、カレンダ、スケジュール表などで従来の任意のやり方で使用可能なマシン生成テキスト（行、単語、段落など）を構成し、またはそれにつながる。
【００３４】
別の例として、図３で図示したように、分類分析エンジン３０６が入力ストロークまたはストロークの組を描画ストロークを含むものと認識した場合、次いでこのデータは、注釈認識システムまたは方法３１４に転送される。注釈認識システムまたは方法３１４は、例えば図中のテキスト情報の認識に使用することができる。任意の適したやり方で、処理をさらに進めることができる。例えば、要望に応じて図を「クリーンアップ」して、手書きの注釈をマシン生成テキストと置き換え、また手書きの図の線または形状（円、三角、四角など）をマシン生成要素と置き換えることなどができる。また、図（手書きバージョンまたはその後のマシン生成バージョン）を、本発明から逸脱することなく任意の適したプログラムまたはシステムに挿入することができる。
【００３５】
本発明の一部の例で使用する分類分析システムおよび方法３０６は、本発明から逸脱することなく、他の特定の書き物や図のタイプを認識することもできる。例えば分類分析システムは、本発明から逸脱することなく、入力ストロークの組を、音符、数学的情報（式、数学記号（＋、−、＝、％、ｘ、ｓｉｎ、ｃｏｓ、ｔａｎなど）など）、表、チャート、グラフ、フロー図、概略図、線画、スケッチ、いたずら書きなどを含むものとして認識することができる。こうしたストロークの組がある場合は、それらを、本発明から逸脱することなく、より特化された認識システム、および／または他の適した処理アプリケーションに送信することができる。
【００３６】
図３と併せて説明した一部またはすべての機能を、ユーザが電子ページまたは電子ドキュメント上に完全にすべてのインクを入力した後（例えば「ｓａｖｅ」、「ｐａｒｓｅ」、「ｃｌｏｓｅ」、または「ｒｅｃｏｇｎｉｚｅ」コマンドなどユーザのコマンドの後）で入力インクデータに対して実行することができる。しかし、一般のレイアウト分析および手書き認識分析の実行にコンピュータ処理時間が必要であるために、処理がこれほど非常にごくまれに、特別な方式で行われる場合、ユーザは、かなりの遅延を経験することがある。こうした処理遅延は、特に、電子ドキュメントが長い、あるいは大量のインクを含んでいる場合、次の所望の操作（例えば、さらにインクを入れる、次のページに進む、印刷する、新しいドキュメントまたはアプリケーションを開くなど）に進む前に、コンピュータシステムがその分析を完了させるのを待っているユーザがフラストレーションを起こすほど長く続くことがある。
【００３７】
本発明の少なくとも一部の例によるシステムおよび方法によって、ユーザがペンベースのコンピューティングシステムを（例えばページ上でインクストロークを入力する、および／または変更するために）使用し続けている間に、ペンベースのコンピューティングシステムが、レイアウト分析３０２、分類分析３０６、手書き認識分析３１０などの種々の分析を漸進的に、リアルタイムに行うことができるようになる。さらに、本発明によるシステムおよび方法の一部の例では、種々のパーサエンジンが背景スレッドでアプリケーションデータ構造の「スナップショット」に対して作用し、ユーザがインクを入力するためにアプリケーションデータ構造を使用できない時間を最低限に抑えるようにする（「アプリケーションデータ構造」という用語は、本明細書で使用する場合、アプリケーションプログラムとともに使用するデータ構造を意味する）。本発明から逸脱することなく任意の適した漸進的データ分析システムおよび方法を使用することはできるが、適したシステムおよび方法の例が２００２年５月１４日出願の米国特許出願第１０／１４３，８０４号に記載されている（例えば、特許文献３参照）。
【００３８】
Ｂ．レイアウト分析および分類のためのシステムおよび方法の例の説明
図４は、本発明を実施するのに有用なシステムの一例を示す概略図である。図示したように、システム全体４１０は、パーサ４２２を含む、またはそれと通信するアプリケーションシステムまたはプログラム４２０を含む。システム全体４１０は、図２で図示したようなペンベースのコンピューティングシステムで具現化することができる。ユーザ４００は、インクストロークをシステム４１０に入力し（あるいはインクストロークがメモリや外部ソースなどからダウンロードされ）、インクストロークは、アプリケーションプログラム４２０によって、例えば（図６Ａおよび図６Ｂに示すようなドキュメントツリーデータ構造４０２と考えることもできる）アプリケーションデータ構造４０２で格納される。パーサ４２２が動作している間にユーザ４００が引き続きドキュメントツリーデータ構造４０２に変更を行うことができるように、パーサ４２２はミラーツリーデータ構造４０４を含んでいる。（例えばユーザ４００やパーサ４２２によって、あるいは別のソースから）ドキュメントツリーデータ構造４０２に加えられる変更は、すぐにミラーツリーデータ構造４０４に渡され、その結果ミラーツリーデータ構造４０４がドキュメントツリーデータ構造４０２の内容を全体的に「ミラーする」。
【００３９】
ミラーツリーデータ構造４０４を使用して、パーサ４２２内の２つの分析エンジン４０６および４０８に入力データを供給する。図４に示す例では、一方の分析エンジンはレイアウト分析エンジン４０６（例えば図３と併せて上述したように、レイアウト分析３０２を実施することができる）、もう一方は認識エンジン４０８である（例えば、図３と併せて上述したように、手書き認識分析３１０および／または注釈認識エンジン３１４を実施することができる）。エンジン４０６および４０８は、ミラーツリーデータ構造４０４の「スナップショット」４２４および４２６を入力データとしてそれぞれ受信し、ドキュメントツリーデータ構造４０２またはミラーツリーデータ構造４０４に対して直接作用するのではなく、これらの「スナップショット」４２４および４２６に対してバックグラウンドで作用する。このようにユーザ４００は、種々のパーサ分析エンジン４０６および４０８も動作している間に、アプリケーションプログラム４２０内のドキュメントツリーデータ構造４０２に対して引き続き操作を行う（インクの追加、インクの削除、インクの変更など）ことができ、エンジン４０６および４０８はデータに対して作用するため、ユーザ４００は、操作の大幅な中断（処理遅延など）を経験しなくてすむ。
【００４０】
一部の例では、「スナップショット」４２４および４２６を生成するために、既存のスナップショットデータ構造をミラーツリーデータ構造４０４と比較することができる。両者の間の違いに注目し、スナップショット４２４または４２６をミラーツリーデータ構造４０４と同期させるために最低数の操作が行われる。このように、スナップショットの作成時にデータの最小の書き直しが行われて（例えば前のスナップショットから変更されていないデータは書き換えられない）、パーサ４２２の動作の高速化を助ける。
【００４１】
パーサエンジン４０６および４０８の出力は、変更済みまたは修正済みのデータ構造となり得る。例えば、レイアウト分析エンジン４０６が、図５に示したものに似ている場合、レイアウト分析エンジン４０６の出力は、関連する単語、行、段落などにグループ分けされる別個のインクストロークを含むデータ構造となり得る。このタイプのレイアウト分析エンジンの動作を以下でより詳しく説明する。同様に、パーサエンジン４０８が手書き認識システム３１０である場合、出力は、インクストロークをマシン生成テキストに結び付ける情報またはデータ構造を含んでいてもよい。
【００４２】
パーサエンジン４０６および４０８がスナップショット入力データ４２４および４２６に対する操作をそれぞれ完了すると、それぞれ矢印４２８および４３０で示すように、その結果得られる情報がアプリケーションプログラム４２０に送り返される。しかし、上述したように、ユーザ４００は、パーサエンジン４０６および４０８がスナップショット４２４および４２６に対する操作を行っている期間中にドキュメントツリーデータ構造４０２を変更することができる。したがって、ドキュメントツリーデータ構造４０２に戻ってパーサ分析エンジン結果を書き込む前に、パーサ４２２は、オプションでミラーツリーデータ構造４０４を使用して、現在アプリケーションプログラム４２０内にあるドキュメントツリーデータ構造４０２を（ユーザの変更を含めて）、パーサエンジン４０６および４０８によって送信された修正済みのドキュメントツリーデータ構造と比較する。ユーザ４００が、ドキュメントツリーデータ構造４０２に、パーサエンジン４０６および４０８からの修正済みのドキュメントツリーデータ構造４０２に含まれていない変更を（１つまたは複数のストロークを追加する、削除する、移動する、サイズ変更する、ないしは変更するなどによって）加えた場合、あるいはユーザがドキュメントツリーデータ構造４０２に（ストロークを追加する、削除する、ないしは変更するなどによって）加えた変更によって、パーサエンジン４０６および４０８によって加えられたデータ構造への変更の意味が失われる、あるいはそれと対立する場合、アプリケーションドキュメントツリーデータ構造４０２は、ユーザの加えた変更と対立しないパーサ分析エンジンによって加えられた変更のみを含むように修正される（ユーザの加えた変更は、パーサの加えた変更に優先する）。また、データ書込み時間（およびユーザ４００が経験する関連の中断）を短縮するために、既存のバージョンから変更されたドキュメントツリーデータ構造４０２の一部のみが変更、または書き換えられる。このように、アプリケーションプログラム４２０内に存在する最終的に修正されたドキュメントツリーデータ構造４０２は、パーサエンジンがユーザによる変更と矛盾しない、あるいはユーザが加えた変更より優先しない変更を加えている限り、ユーザ４００が加えたすべての変更、および前のパーサエンジン分析の結果を含む。
【００４３】
ドキュメントツリーデータ構造４０２がユーザ４００およびパーサエンジン４０６および４０８によって最終的に変更可能な共有データを含んでいるため、パーサによって加えられた変更を含むようにドキュメントツリーデータ構造４０２が書き換えられている間、ユーザ４００は、新しいデータをドキュメントツリーデータ構造４０２に入力することはできない。ユーザ４００がそれを試みると、本発明によるシステムおよび方法は、こうした試みを任意の適したやり方で処理することができる。修正済みアプリケーションドキュメントツリーデータ構造４０２がデータ入力に対して利用できるようになるまで、例えば、新しいストロークまたは変更を無視する、あるいは一時バッファメモリに格納することができる。しかし、本発明のこの例によるアプリケーションプログラム４２０のドキュメントツリーデータ構造４０２は一般に、システムがデータ構造４０２の変更された部分を書き換えている間のみ使用できないため、使用できない期間は一般に非常に短く、ユーザは気づかないことが多い。
【００４４】
ドキュメントツリーデータ構造４０２が（ユーザおよび／またはパーサエンジンが加えた変更も含めて）書き換えられ、あるいは変更されると、ミラーツリーデータ構造４０４が書き換えられたまたは変更されたドキュメントツリーデータ構造４０２をミラーするように更新され、パーサエンジン４０６および４０８は、（必要に応じて）それらの分析を繰り返すことができる。好都合なことに、一部の例では、パーサエンジン４０６および４０８が最近変更されたドキュメントツリーデータ構造の一部分のみ（および最近の変更によって影響を受けた任意の部分）に対する操作を行って、処理時間を短縮させる。パーサエンジンの動作をユーザのデータ入力と同時に漸進的に更新することによって、パーサ４２２は、ユーザのデータ入力に概ねついていくことができ、それによってユーザが気づく処理遅延を最低限に抑えることができる。
【００４５】
上述したように、本発明の一部の例では、変更が行われたデータ構造の一部（およびこれらの変更によって影響を受けたすべてのエリア）に処理を限定することによって処理時間を短縮することができる。ユーザ入力または以前のパーサエンジンの動作がデータ構造の一部に影響を与えていない場合、パーサエンジンは、これらの同じ部分を再度分析する必要はない（またおそらく同じ結果に帰着する）。例として、一部の例によるシステムおよび方法は、変更の所定の距離内にあるデータ構造の任意の部分を再分析することができる。例えば、再分析は、任意の変更の行およびその変更の付近の１つまたは２つの任意の行、変更の付近のあらかじめ選択された半径の円内にある任意のストローク、変更を含む任意のテキストのブロック（以下で詳述）などを含み得る。以下で、これらの特徴を利用したパーサの例についてより詳しく説明する。
【００４６】
Ｃ．解析中に行われる処理の例
本発明の例によるシステムおよび方法で分析または処理されるデータは、任意の適した形または構造を呈する。例えば、図３に示した１つの手順では、インクレイアウト全体および入力インクから得られた統計に基づいていくつかの個々のストロークをグループ分けし、または関連付ける、レイアウト分析エンジン３０２による一連の決定の結果、入力インクデータの個々のストローク３００が組み合わされて１つのデータ構造になる。レイアウト分析エンジン３０２は、インクストロークの階層的なグループをページ上に提供し、これによってグループにわたるグローバルな統計計算が可能になる。最初のストロークグループ分けの決定は、インクストロークのグループが小さい場合（例えば、個々のインクストロークを表す小さいグループまたはストロークの相対的に小さい組合せ）は、ローカルなレイアウト関係に基づいて、控えめである。後のストロークグループ分けの決定は、より大きい統計サンプルサイズがより大きいインクストロークグループ（例えば、より長い行にわたるストロークサイズ、相対的なストローク間隔、行の角度など）から収集されるため、より積極的に行うことができる。入力インクデータを数回通過して、ストロークをマージさせて、入力インクストロークの単語、行、および／またはブロック３０４などストロークの組を形成するかどうかを決定する、積極的な決定を徐々に行えるようにしてもよい。
【００４７】
図５は、本発明の一部の例に使用するデータ構造の生成および／または変更に有用なインクレイアウト分析パーサエンジン、システム、または方法３０２の一例に含まれるステップまたは解析エンジンの概略を示している。本発明の一部の例によるシステムおよび方法にデジタルインクを入力する際にユーザに提供される自由度が非常に高い（例えば、ユーザはデジタイザ入力画面上のどこにでも、任意の向きで、いつでも、所望のストロークサイズを使用して書き込むことができる）ため、図５のレイアウト分析手順３０２が開始するとき、入力データの適切なレイアウト、向き、またはタイプ（例えば入来入力データ５００がテキスト、図、数学、音楽、フロー図、チャート、グラフなどであるか否かなど）の決定に使用可能な事前情報はない。図５の要素５０２は、このレイアウト分析手順の開始時に、可能な入力データ構造５００のタイプの１つの概略的なグラフィカル表現を提供する。グラフィカル表現５０２は、図６Ａの解析ツリーデータ構造により詳しく示している。一般に、（例えばユーザが引き続きインクストロークをペンベースのコンピューティングシステムに入力すると同時に）レイアウト分析手順３０２が開始するとき、システムは、所与のページ（または所与のドキュメント内）Ｐ６０８のすべてのストロークＳ６００を別個の単語Ｗ６０２として扱い、すべての単語Ｗ６０２が別個の行Ｌ６０４として扱われ、すべての行Ｌ６０４が別個のブロックＢ６０６（または段落）として扱われる。レイアウト分析エンジン３０２は、一緒に、ストロークの関連付けまたはマージのタスクを行い、関連するインクデータの適切な単語、行、およびブロックを含むストロークの組を形成する。任意の適したレイアウト分析エンジンを本発明とともに使用することはできるが、図５の例について以下でより詳しく説明する。
【００４８】
例示したレイアウト分析エンジン３０２のこの説明では、「単語」、「行」、「ブロック」などの用語を使用しているが、これらの単語は、本明細書のこの部分では、便宜上、１つまたは複数の関連するストロークまたはストロークの組を表すために使用する。レイアウト分析３０２が本発明の少なくとも一部の例で最初に行われる時点で、個々のストロークまたはストロークの組が文書、図、音楽などを構成しているかどうかに関する最終的な決定はなされていない。また、上述の説明は「ページ」という用語を使用しているが、所与の電子ドキュメントを１ページずつ解析する必要はない。例えば、本発明から逸脱することなく、電子ドキュメントの「ブロック」または「段落」がドキュメントの２枚または３枚以上のページをまたぐこともあり得る。
【００４９】
本発明のこの例によるレイアウト分析エンジン３０２は、各パス（または各解析エンジンの動作）中、ストロークまたは行のマージ動作は起こるが分割は起こらないように、しきりに動作する。さらに、エンジン３０２は、望ましくないマージ動作を遡り、訂正する必要がないように適切なテストおよび許容度で行うことができる。
【００５０】
レイアウト分析エンジン３０２の動作の結果、電子ドキュメントの個々のストローク６００が組み合わされて、適切な場合、単語Ｗ、行Ｌ、およびブロックＢ（または段落）を含む関連するストロークの組になる。図６Ｂは、レイアウト分析エンジン３０２からのデータ出力５０４の可能なデータ構造のグラフィカル表現５０６を図示している。図６Ａと６Ｂとの比較から明らかなように、ページ（またはドキュメント）６０８は、全体的に同じストローク情報を含んでいるが、いくつかのストロークＳ６００が、一緒に組み合わされ、または関連付けられて単語Ｗ６１０を形成し、いくつかの単語Ｗ６１０が、一緒に結合されて図６Ｂのデータ構造の行Ｌ６１２を形成する。当然、単語Ｗ６１０は、任意の数のストロークＳ６００を含むことができ、同様に行Ｌ６１２は、任意の数の単語Ｗ６１０を含むことができる。また、図６Ｂの特定の解析ツリーの例には示していないが、２つまたは３つ以上の行６１２を一緒に結合させてブロックＢ６１４（または段落）を形成することもできる。
【００５１】
ドキュメント内のインクの構造の規定を助けることに加えて、解析ツリーにおける種々のノード（図６Ｂのノード６００、６１０、６１２など）を使用して、ツリーの種々のレベルに関する空間情報を格納することができる。例えば、各行レベルノード６１２は、行のストローク、行の各ストロークの凸包、および／または他の任意の所望の情報を構成するすべての点の回帰線／適合線を格納することができる。また、解析ツリーデータ構造は、種々の基本操作を、それに含まれるストローク、単語、行、およびブロックに対して適用することによって変更することができる。適切な操作には、追加、削除、マージ、分割、および親の変更などがある。より複雑な操作を、これらの基本操作を使用して構成することができる。こうした操作は、データ構造ツリーに対して行われるので、異なるノードレベルで維持される統計は、新しい構成に対応するように自動的に更新される。
【００５２】
図５は、本発明の一部の例に有用な、適したレイアウト分析エンジン３０２の一例を示す概略図である。この例では、レイアウト分析手順３０２の第１のステップは、時間的行グループ分けステップ５０８である。これは一般に、時間的に隣接するストローク（すなわち連続的に書かれたストローク）の特徴を比較し、適切な場合はそれらを「行」として組み合わせる。時間的行グループを時間的に隣接する２つまたは３つ以上のストロークから作成すべきか否かを決定する際に、ストロークサイズ、ストローク間の間隔、ストローク角度など、種々の要因を考慮に入れることができる。この時間的行グループ分けステップ５０８が終了すると、分析３０２の次のステップ、空間的ブロックグループ分けステップ５１０は、ステップ５０８で形成された物理的に隣接する時間的行グループを比較し、近接して配置される時間的行グループを空間的ブロックとして互いに組み合わせる。空間的ブロックグループを隣接する時間的行グループから作成すべきかどうかを決定する際に、ストロークサイズ、ストローク間の間隔、ストローク角度など、様々な要因を考慮に入れることができる。
【００５３】
（ステップ５０８で）時間的にグループ分けされた行は、適切な場合、空間的行グループ分けステップ５１２でオプションで空間的ブロックの関係または向きを考慮に入れてさらにグループ分けすることができる。この空間的行グループ分けステップ５１２では、行の空間的関係に加えて、行の角度、ストロークサイズなどの要因を考慮に入れることはできるが、もう１つのストロークと比較したあるストロークの時間を考慮に入れる必要はない。また、上述の空間的ブロックグループ分け手順５１０の結果は、空間的行グループが２つの既存の時間的行グループの間に作成されるべきか否かを決定する際の一要因として使用することができる。
【００５４】
空間的行グループが完成すると、次いでこの例によるレイアウト分析手順３０２は、例えばストローク間の間隔、行の向き、ストロークサイズなどの要因に応じて、行グループ内の個々のストロークを組み合わせて１つまたは複数の空間的単語グループ５１６にする。その結果得られた出力５０４は、図６Ｂと併せて説明したようにストロークが単語、行、ブロックにグループ分けされた状態のデータ構造５０６となり得る。
【００５５】
また、図５では、レイアウト分析３０２の一部として使用できるオプションの解析エンジンまたはステップを破線内に示している。このオプションのステップは、「リスト検出」５１４と呼ばれる。多くの場合、表を書くときに、数字、文字、または黒丸の（縦方向の）列を書き、次いで（横方向に）リスト要素を記入する傾向にある。また別のときには、表の内容を書き上げ、次いで後で縦方向の列の数字、文字、黒丸を加える。このリスト決定エンジン５１４は、（例えば、時間的行グループの向きおよびタイミングを調べることによって）こうした空間的状況を検出し、リストの数字、文字、または黒丸のストロークを対応するリスト要素テキストに結び付けることができる。
【００５６】
この例示のインク分析エンジン３０２（図５）における様々なステップは、本発明から逸脱することなく順序を変更したり省略したりすることができる。例えば、要望に応じて、空間的行グループ分けステップ５１２を空間的ブロックグループ分けステップ５１０の前に行っても良い。
【００５７】
レイアウト分析エンジン３０２からの出力データ５０４を、例えば図３に示す分類エンジン３０６など任意の適したやり方で使用することができ、データはそこから別の適切な処理エンジン（注釈認識３１４、手書き認識３１０など）に進むことができる。レイアウト分析エンジン３０２、またはレイアウト分析エンジン３０２および分類エンジン３０６の組合せによって、図４と併せて示したパーサエンジン４０６を形成することができる。
【００５８】
当然、本発明は、レイアウト分析エンジン、または特定のタイプの任意の分析エンジンでの動作に限定されるものではない。個々のストロークをグループ分けし、または関連付けて適切なデータ構造にするのに適した他のエンジンまたは手順、または他の任意の所望の分析を、本発明から逸脱することなく行うことができる。また、要望に応じて、ユーザは、処理の前に、（例えば線を引くまたは縄で囲む、強調表示する、ないしは一緒に関連付けるべき入力データストロークを選択することによって）いくつかのストロークを常にグループにまとめるようシステムに指示することができる。
【００５９】
ＩＶ．インクディバイダオブジェクトおよびＡＰＩ
Ａ．概要
本明細書では引き続き、特定の例、つまりＩｎｋＤｉｖｉｄｅｒオブジェクトを含めて、本発明によるパーサおよびアプリケーションプログラムインターフェースの例の詳細な説明を行う。本発明によるシステムおよび方法の１つの機能（例えばＩｎｋＤｉｖｉｄｅｒオブジェクト）は、アプリケーションによって提供されたインクストロークを集め、これらのストロークを指定された細分度の解析済みエンティティ（単語、行、文、段落、図など）に分割することである。適切な解析を行わなければ、電子インクは、非常に粗すぎる（すなわちグループ分けされていないストロークが大量にある）か、単一のインクオブジェクトとしてまとめられるかのいずれかの傾向にあり、特に個々のインクストローク、またはインクストロークの小さいグループの場合、所望の移動、選択、スケール変更、および他の操作を行うことが難しい、または不可能になる。本発明によるシステムおよび方法では、例えばインクディバイダオブジェクトおよびＡＰＩを含み、解析技術および結果を開発者界に公開し、それによってコードライタが新しいアプリケーションのコードを書くときに解析エンジンの結果を駆使し使用できるようにする。
【００６０】
一般に、インキングセッション中、あるやり方では、インクストロークがそのアプリケーションに存在するインクストロークの集まりに追加される、および／またはそこから削除される。さらに、インキングセッション中、インクストロークの集まり内にある既存のストロークを移動する、サイズ変更する、部分的に削除する、および／ないしは変更することができる。
【００６１】
インキングセッションが終了したとき（およびオプションでインキングセッションが行われている間に漸進的に終了したとき）、動作しているアプリケーションプログラムは、ストローク（少なくとも前のパーサの呼出以降の新しいストロークおよび／または変更されたストローク、および／または新しいおよび／または変更されたストロークによって影響を受ける任意のストローク）をストロークの組または異なる細分度のグループに処理する、パーサ（例えばＩｎｋＤｉｖｉｄｅｒオブジェクトに含まれる）を呼び出す。一般にパーサが呼び出されると、アプリケーションプログラムは、インクストロークをパーサに提供し、戻されたある情報を受け取る。一部の例では、戻された情報は、分割された元のストロークを識別するバックポインタを含む。本発明の一部の例によるシステムおよび方法は、指定された細分度のストロークの所望の集まりを取り出すメソッド（この例で「ＲｅｓｕｌｔＢｙＴｙｐｅ」と呼ばれる）も提供することができる。例えば、アプリケーションプログラムは、分割結果に問合せを行い、所望の細分度タイプ（単語、行、ブロック、図など）に応じて異なる解析細分度のユニットを得ることができる。また、解析結果は、必要に応じて、および／または要望に応じて、手書き認識器にこのデータを送り込む前に水平方向の基準線に対して斜めの書き物を修正する目的で基準線の概念を有していてもよい。これを、例えば、コードライタが回転行列を使用できるようにすることによって達成することができる。
【００６２】
とりわけ、個々のインクストロークは、複数のインクストロークの集まりまたは異なる細分度グループに属していてもよく、例えば、ストロークは、「単語（Ｗｏｒｄ）」の一部、および「段落（Ｐａｒａｇｒａｐｈ）」の一部とすることができる。
【００６３】
この一般的な背景および概要を念頭において、本発明によるインクディバイダオブジェクトおよびＡＰＩの例の種々の特徴を以下でより詳しく説明する。以下の説明のほとんどは、特定のインクディバイダオブジェクトおよびその関連のオブジェクト、プロパティなどに関連するが、本発明から逸脱することなく以下の特定の実装に種々の変更を加えることができることを当業者であれば理解されよう。
【００６４】
Ｂ．インクディバイダオブジェクト
図７は、本発明の一部の例に有用なＩｎｋＤｉｖｉｄｅｒオブジェクト７００の例の内容を概略的に示している。この例では、ＩｎｋＤｉｖｉｄｅｒオブジェクト７００は、２つのプロパティ７０２、すなわちＳｔｒｏｋｅｓプロパティ７０４およびＲｅｃｏｇｎｉｚｅｒＣｏｎｔｅｘｔプロパティ７０６を含む。このＩｎｋＤｉｖｉｄｅｒオブジェクト７００の例は、１つのメソッド７０８、すなわちＤｉｖｉｄｅメソッド７１０も含む。
【００６５】
Ｓｔｒｏｋｅｓプロパティ７０４は、Ｄｉｖｉｄｅメソッド７１０の対象となるインクストロークの集まりを戻す、および／または設定する。ストロークは一般に、使用されているアプリケーションプログラムによってＳｔｒｏｋｅｓプロパティ７０４に送信されて、Ｓｔｒｏｋｅｓプロパティ７０４のストロークの集まりにどのストロークを追加するか、および／またはそこからどのストロークを削除するか、および／ないしはその中のどのストロークに変更を加えるかが決定される。これを図７に矢印７１２で概略的に図示しており、これは、アプリケーションプログラムによって送信された（ないしは任意の適切なおよび／または望むやり方でＳｔｒｏｋｅｓプロパティ７０４に送信された）入来ストロークを表す。またストロークは、例えばインク挿入アクション、インク貼り付けアクション、インク切り取りまたは削除アクションなど、任意の適したやり方で最後のユーザによってＳｔｒｏｋｅｓプロパティ７０４に追加する、および／またはそこから削除することができる。要望に応じて、Ｓｔｒｏｋｅｓプロパティ７０４に送信されたストローク情報は、色など、インクストロークのすべての特徴およびプロパティを含んでいる必要はない。むしろ、要望に応じて、解析に関するインクストロークの特徴またはプロパティのみを送信することで十分である。
【００６６】
Ｓｔｒｏｋｅｓプロパティ７０４の入出力データは、以下の形式をとり得る。  
[propputref]HRESULT Strokes([in]InkStrokes* Strokes)  
[propget]HRESULT Strokes([out,retval]InkStrokes** Strokes)
【００６７】
ＲｅｃｏｇｎｉｚｅｒＣｏｎｔｅｘｔプロパティ７０６は、ＩｎｋＤｉｖｉｄｅｒオブジェクト７００とともに使用する、および／またはそれに関連付けられるべき認識器を戻す、および／または設定する。このプロパティ７０６は、所望の解析操作がソフトウェアまたはアプリケーションプログラムが稼働しているシステムのデフォルトの言語とは異なる言語に基づく手書きテキストの認識を含む可能性があるため、本発明の少なくとも一部の例で有用である。例えば、ペンベースのコンピューティングシステムでは、そのオペレーティングシステムおよび／またはキーボードのデフォルトの言語が英語である。しかし、コンピュータユーザが二カ国語を使える場合、または別のユーザがコンピュータを使用する場合、いくつかの場合に、英語以外の言語で書き込む、またはメモすることがある。デフォルトの英語の手書き認識器がそのシステムで使用可能な唯一の選択肢である場合、このことによって認識器が英語以外の手書きテキストを認識しようと試みるので結果としてエラーになる可能性がある。例えば音符、数式および数学記号、図の特徴などを認識する特化された認識器など、他の特化された認識器もアプリケーションコードによって設定することができる。コードライタが異なる手書き認識器（異なる言語用の認識器を含む）を設定し、および／または使用できるようにすることによって、その結果得られる手書き認識結果を向上させることができる。図７に矢印７１４で、所望の手書き認識器を設定するコードライタの能力を示している。
【００６８】
本発明の一部の例では、ＲｅｃｏｇｎｉｚｅｒＣｏｎｔｅｘｔプロパティ７０６は、デフォルトでは「ヌル」値となり得る。これは、これらの例では、コンピュータのオペレーティングシステムのデフォルトの言語を手書き認識言語として使用し、および／または別の認識器を指定するようにＲｅｃｏｇｎｉｚｅｒＣｏｎｔｅｘｔプロパティ７０６が変更されない限りおよびそれまでオペレーティングシステムに提供された認識器が認識器として使用されることを意味する。デフォルトまたは「ヌル」の言語値は、最初のシステムのセットアップ中に設定された「キーボード」デフォルトローカルＩＤに対応する。このデフォルトまたはヌルの入力の特徴を、図７に「ＮＵＬＬ」とラベル付きの矢印７１６で示している。
【００６９】
ＲｅｃｏｇｎｉｚｅｒＣｏｎｔｅｘｔプロパティ７０６の入出力データは、以下の形式をとり得る。  
[propputref]Recognizer([in]InkRecognizer* Recognizer)  
[propget]Recognizer([out,reval]InkRecognizer** Recognizer)
【００７０】
動作中、本発明の少なくとも一部の例では、パーサは、インクストロークに関連する空間的および時間的メタデータに基づいて手書きテキストにおける単語の境目の決定時に第１のパスを試みる。これは、例えば、図５と併せて概説した時間的行グループ分け、空間的ブロックグループ分け、および空間的行グループ分けのステップを含む。これらの解析操作は比較的迅速に行うことはできるが、その結果には一般に、手書き認識器、およびその関連の言語モデルに関連付けられた精巧さおよび精度は含まれない。したがって、本発明の一部の例で、手書き認識器を使用して、テキストの各手書きの「行」で第２のパスを行い、よりよく単語の境目を識別するために手書き認識器に関連付けられている辞書を使用して単語間の境目を正確に識別する。また、認識器は、手書きテキストをマシン生成テキスト（例えば文書処理プログラム、電子メール、電子カレンダ、およびスケジュール表などに適した形式）に変換することもできる。
【００７１】
また図７は、この例におけるＩｎｋＤｉｖｉｄｅｒオブジェクト７００の一部を構成するＤｉｖｉｄｅメソッド７１０を示している。このメソッド７１０は、ＲｅｃｏｇｎｉｚｅｒＣｏｎｔｅｘｔプロパティ７０６によって設定（矢印７２０）された認識器を使用して関連するストローク（Ｓｔｒｏｋｅｓプロパティ７０４から取得。矢印７１８参照）を分割または解析する。Ｄｉｖｉｄｅメソッド７１０は、インク分割（または解析）の結果を含むＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００を生成し、戻す。ＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００の生成および戻しを、図７に矢印７２２で示している。Ｄｉｖｉｄｅメソッド７１０の使用可能な出力データ形式の一例は、次の通りである。  
HRESULT Divide([out, retval]InkDivisionResult** divisionResults)
【００７２】
本発明の少なくとも一部の例では、Ｄｉｖｉｄｅメソッド７１０が同時に実行され、または呼び出され、アプリケーションプログラム中のドキュメントに別のインクが追加され、そこから削除され、ないしはそこで変更される。本発明によるシステムおよび方法の別の例では、Ｄｉｖｉｄｅメソッド７１０は、Ｓｔｒｏｋｅｓプロパティ７０４を介して提供されるストロークに対してバックグラウンドスレッドで動作し、解析操作のすべてが完了するまでＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔ８００を戻さない。バックグラウンドスレッドで動作することによって、また別のストロークの入力または変更に影響を与えることがなければ、多くの場合、Ｄｉｖｉｄｅメソッド７１０の使用は、ペンベースのコンピューティングシステムユーザにまったくまたはほぼトランスペアレントであり、また大幅な処理遅延をもたらさない。
【００７３】
Ｄｉｖｉｄｅメソッド７１０が呼び出されるたびに、新しいＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００が作成される。これによって、Ｄｉｖｉｄｅメソッド７１０が呼び出されるときにインク解析ツリーデータ構造（図６Ｂ参照）のスナップショットが有効に捕捉される。本発明の少なくとも一部の例で、アプリケーションプログラムの責任は、各ＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００（以下で詳述）のＳｔｒｏｋｅｓを比較して、解析結果がＤｉｖｉｄｅメソッド７１０の異なる呼出の間に変わったか否かを決定することである。
【００７４】
当然、本発明から逸脱することなく、インクディバイダオブジェクトは、図７に示した特定のメソッドおよびプロパティに加えて、および／またはそれらの代わりに、および／またはそれらと組み合わせて、メソッド、プロパティ、および／または要素を含むことができる。一例として、インクディバイダオブジェクトはさらに、「行間隔」プロパティを含むことができる（あるいはまた、行間隔プロパティを別のオブジェクトに関連付ける、または任意の適したやり方で提供することができる）。行間隔プロパティによって、コードライタは、入力時にテキストの行に期待される行間隔を設定することができるようになる。このように、解析中、レイアウト分析システム、および／または分類分析システム（またはパーサ内の他のシステム）は、テキストの行と図や図表との間を区別する際に、この期待される行間隔情報を使用し、よりよく働くことができる。パーサにこの行間隔の基準を与えることによって、複数行（段落の向き）、または単一行を図からより有効かつ効率的に区別することができる（例えば図の行は、一般に手書きの単一行より高い）。
【００７５】
手書きの行の期待される行間隔サイズへの制限は必要ないが、本発明の一部の例では、システムおよび方法は、ある範囲内の期待される行間隔を受け付ける。当然、期待される行間隔のこの範囲は大きく異っていてよい。本発明の一例では、期待される行間隔は、最小間隔１００デジタイザピクセル、最大間隔５００００デジタイザピクセルの範囲内でなければならない。デフォルトの間隔は１２００ピクセルである。コードライタが期待される行間隔をこの範囲外に設定しようと試みた場合、行間隔プロパティは、エラーメッセージを戻す。あるいはまた、行間隔プロパティは、エラーメッセージを戻すことなく、関連の最小値または最大値に自動的に入力行間隔を変更する（例えば、アプリケーションプログラムコードが値を５０００３に設定しようと試みた場合、５００００の行間隔値を自動的に設定する）。もう１つの代替として、有効な範囲外に行間隔値を設定しようと試みることによって、値が単に無視される（そして直前の行間隔値またはデフォルト値に戻る）。
【００７６】
出力の際に、行間隔プロパティは、アプリケーションプログラムに行間隔プロパティの直前の設定値を伝える、あるいはあらかじめ値が設定されていなかった場合はデフォルトに戻る。
【００７７】
一例として、本発明のこの例による行間隔プロパティの入出力データは、以下の形式をとり得る。  
HRESULT[propput]LineHeight([in]Long LineHeight)  
HRESULT[propget]LineHeight([out,retval]Long* LineHeight)
【００７８】
Ｃ．インク分割結果オブジェクト
図８は、本発明の一部の例によるＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００を図示している。上述したように、ＩｎｋＤｉｖｉｄｅｒオブジェクト７００のＤｉｖｉｄｅメソッド７１０は、選択されたＲｅｃｏｇｎｉｚｅｒＣｏｎｔｅｘｔプロパティ７０６に基づいて（Ｓｔｒｏｋｅｓプロパティ７０４から得られた）ストロークの集まりを解析し、ＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００を作成する。ＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００は、分割および／または解析操作の結果生じるデータ構造を捕捉する。これは、本発明の少なくとも一部の例において、図６Ｂに示した形の「解析ツリー」とみなすことができる。その結果得られる、ＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００に存在するデータ構造をさらに使用して、例えばその後のＲｅｓｕｌｔＢｙＴｙｐｅ操作（以下で詳述）で、所与のストロークの集まりの異なるレベルの細分度のインクデータの組を取り出すことができる。
【００７９】
図８に図示すように、ＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００のこの例は、「Ｓｔｒｏｋｅｓ」８０４と呼ばれるプロパティ８０２を有する。このＳｔｒｏｋｅｓプロパティ８０４は、呼び出されると、元々ＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００の生成に使用されたストロークへの参照を戻す。ＩｎｋＤｉｖｉｄｅｒオブジェクト７００は、同時に特定の１組のストロークに対応するデータ構造を内部で構築する。しかし、これらのストロークを含むＩｎｋオブジェクトは固定的ではない。むしろ、任意の時点に（解析操作が実行中でさえも）、新しいストロークを追加することができ（例えば貼り付け操作によって個々に、またはまとめて）、既存のストロークを削除する、あるいは移動する、ないしは変更することができる。したがって、ＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００中のＳｔｒｏｋｅｓプロパティ８０４は、アプリケーションプログラムコードまたはクライアントコードに、（ａ）どのストロークが特定のＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００を作成するために分割の対象となったか、（ｂ）最後のＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクトの取得以降（例えば、最後のＤｉｖｉｓｉｏｎメソッド７１０の呼出以降）それらのストロークが影響を受けた、または変更されたかどうかを決定する手段を提供する。このＳｔｒｏｋｅｓプロパティ８０４によって、アプリケーションコードまたはクライアントコードが２つのＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクトを比較して、解析ツリーが１つのＤｉｖｉｄｅメソッドの呼出から次の呼出の間に変わったか否かを判断できるようになる。
【００８０】
ＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００のＳｔｒｏｋｅｓプロパティ８０４は、ＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００の生成に使用されるストロークのリストを受信する、含む、かつ／または維持する。これは、図８に入力矢印８０６で示されている。この入力ストロークデータは、例えば、ＩｎｋＤｉｖｉｄｅｒオブジェクト７００のＳｔｒｏｋｅｓプロパティ７０４から、あるいは他の任意の適したソースから取得する、または挿入することができる。ＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００の取得に使用されるインクストロークを表すデータを出力する能力を、図８にＳｔｒｏｋｅｓプロパティ８０４からの矢印８０８として示している。Ｓｔｒｏｋｅｓプロパティ８０４の出力データ８０８は、以下の形式をとり得る。  
[propget]HRESULT Strokes([out,retval]InkStrokes** Strokes)
【００８１】
特定のインク分割操作のために、ＩｎｋＤｉｖｉｄｅｒオブジェクト７００が解析エンジンをカプセル化し、ＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００が解析ツリーデータ構造をカプセル化するため、１つまたは複数のＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００が存在し続けている間にＩｎｋＤｉｖｉｄｅｒオブジェクト７００を（例えば別の操作用に）解放することが可能である。
【００８２】
代替として、ＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００にＳｔｒｏｋｅｓプロパティ８０４を含めるのではなく、クライアントコードまたはアプリケーションプログラムコードがストローク情報を外部でキャッシュすることができる。しかし、あるインキングセッションの過程にわたってＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００が複数作成されることがあり得るので、複数のＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００の対および外部インクストロークデータの組を管理することは難しく、計算上費用がかかり得る。したがって、Ｓｔｒｏｋｅｓプロパティ８０４をＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００の一部として設けることによって、クライアントコードまたはアプリケーションコードのオーバーヘッドが低減し、インクディバイダＡＰＩの有効な使用を助けることができる。
【００８３】
この例によるＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００は、さらに図８に示すように、さらにＲｅｓｕｌｔＢｙＴｙｐｅ８１２と呼ばれるメソッド８１０を含む。このＲｅｓｕｌｔＢｙＴｙｐｅメソッド８１２は、呼び出されると、所与のＤｉｖｉｓｉｏｎＴｙｐｅ（単語、行、段落、図など分割のタイプ）の結果生じる（Ｕｎｉｔｓ区分内の）ストロークの集まりの集まりを戻す。例として、このメソッド８１２は、クライアントコードまたはアプリケーションコードが単語、行、段落、図などを要求したか否かに応じて単語、行、段落、図などとしてグループ分けされた入力ストロークを戻す。このメソッド８１２は、要望に応じて、複数回呼び出して、異なる種々の解析細分度の分割結果を取り出すことができる。例えば、ある呼出は解析されたストロークの集まり中の単語を提供し、別の呼出は行を、また別の呼出は段落を、などを、提供することができる。
【００８４】
ＲｅｓｕｌｔＢｙＴｙｐｅメソッド８１２への入力は、少なくとも所望のＩｎｋＤｉｖｉｓｉｏｎＴｙｐｅを含む。これは、上述したように、一部の例では、単語、行、段落、図などを意味する。この入力を、図８に入力矢印８１４で示している。出力は、所与のＤｉｖｉｓｉｏｎＴｙｐｅのストロークの集まりの集まり（例えばＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔｓオブジェクト）を含み、図８に出力矢印８１６で示している。このデータは、以下の形式をとり得る。  
HRESULT ResultByType([in]InkDivisionType division Type,[out,retval]InkDivisionUnits* divisionUnits)
本発明の一部の例で、図８に矢印８１８で示すように、ＤｉｖｉｓｉｏｎＴｙｐｅが指定されていない（ＤｉｖｉｓｉｏｎＴｙｐｅ＝ＮＵＬＬ）場合、戻されたＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔｓオブジェクトの集まりは、本発明の少なくとも一部の例では、パーサによって識別されたすべての細分度を含み得る。一部の細分度は他の細分度を含む（例えば「行」は複数の「単語」を含み得る）ため、その結果得られる集まりは、重複する分割ユニットを含み得る。当然、適した任意のデフォルトの細分度（あるいはデフォルトの細分度でなくても）を、本発明から逸脱することなく容易に使用することができる。例えば、一部のバージョンでは、ユーザコードまたはアプリケーションコードによって別の細分度が指定されるかぎりおよびされるまで、デフォルトのＤｉｖｉｓｉｏｎＴｙｐｅは「単語」となり得る。
【００８５】
図８に図示するように、ＲｅｓｕｌｔＢｙＴｙｐｅメソッド８１２は、矢印８２０で示すように、ＩｎｋＤｉｖｉｄｅｒオブジェクト７００のＤｉｖｉｄｅメソッド７１０から入力データ構造を受信することができる。
【００８６】
当然、本発明から逸脱しなければ、ＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００は、図８に図示する特定のメソッドおよびプロパティに加えて、および／またはそれらの代わりに、および／またはそれらと組み合わせて、メソッド、プロパティ、および／または他の要素を含むことができる。
【００８７】
Ｄ．インク分割ユニット群オブジェクト
図９は、本発明の一部の例で有用なＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔｓオブジェクト９００を示している。このオブジェクト９００は、解析操作の結果の集まりのラッパである。この集まりは、本発明の少なくとも一部の例では、一般にＩｎｋＤｉｖｉｄｅｒオブジェクト７００に元々与えられているすべてのストロークを有効に備えることを期待されている。例えば、「単語」に分割されたストロークの集まりは、単語ごとに単一のＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔオブジェクト１０００を含むＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔｓオブジェクト９００の集まりによって表すことができる（図１０も参照のこと。以下で詳述）。個々のＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔオブジェクト１０００をそれぞれのストロークに拡張した結果生じるストロークは、ＩｎｋＤｉｖｉｄｅｒオブジェクト７００に渡された元の組のストロークと一致することが予想される。
【００８８】
図９に示すように、この例のＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔｓオブジェクト９００は、Ｃｏｕｎｔ９０４と呼ばれるプロパティ９０２を含む。Ｃｏｕｎｔプロパティ９０４は、所与のストロークの集まりに存在する分割ユニットのカウント（または数）を提供し、この情報をＡＰＩが使用できるようにして、アプリケーションコードまたはクライアントコードで使用できるようにする。例えば、Ｃｏｕｎｔプロパティ９０４は、所与のストロークの集まりがｘ個の単語、および／またはｙ個の行、および／またはｚ個の段落を含むことをアプリケーションプログラムに通知することができる。このデータは、任意の適したやり方で、例えばＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００内に存在する所与のストロークの集まりについて図６Ｂの解析ツリーデータ構造を調べることによって決定することができる。Ｃｏｕｎｔプロパティ９０４の出力を、図９に矢印９０６で示している。出力データは、以下のように構成することができる。  
[propget]HRESULT Count([out,retval]Long** Count)
【００８９】
この例のＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔｓオブジェクト９００はさらに、Ｉｔｅｍ９１０と呼ばれるメソッド９０８を含む。Ｉｔｅｍメソッド９１０は、呼び出されると、その集まりにおけるユニットのインデックス値が与えられると、ストロークの集まり中の特定のＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔオブジェクト１０００を戻す（例えば「４番目の単語を戻す」）。出力を、図９に矢印９１２で示す。Ｉｔｅｍメソッド９１０の出力データは、次のように構成することができる。  
HRESULT Item([in]Long index,[out,retval]InkDivisionUnit* divisionUnit)
【００９０】
この例のＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔｓオブジェクト９００に含まれる別のプロパティ９０２は、「＿ＮｅｗＥｎｕｍ」９１４と呼ばれる。このプロパティ９１４は、評価されるストロークの集まりについて、ＩＥｎｕｍ  ＶＡＲＩＡＮＴまたはＩＥｎｕｍ  ＵＮＫＮＯＷＮのいずれかの列挙子インターフェース（ｅｎｕｍｅｒａｔｏｒ  ｉｎｔｅｒｆａｃｅ）を戻す。図９に出力矢印９１６および９１８でそれぞれ示すように、このプロパティ９１４を使用して、評価されるインクストロークの集まり中の個々のオブジェクトを取り出すことができる。＿ＮｅｗＥｎｕｍプロパティ９１４によって評価されるデータは、以下の形式をとり得る。  
[propget]HRESULT_NewEnum([out,retval]IUnknown**_NewEnum)
【００９１】
とりわけ、本発明のこの例では、（ａ）Ｃｏｕｎｔプロパティ９０４＋Ｉｔｅｍメソッド９１０、および（ｂ）上述の＿ＮｅｗＥｎｕｍプロパティ９１４が、クライアントコードまたはアプリケーションプログラムコードによって使用されるプログラミング言語およびコーディングスタイルに応じてインクストロークの集まりの要素にアクセスする事実上同等な２つの方法である。Ｉｔｅｍメソッド９１０およびＣｏｕｎｔプロパティ９０４の組合せを従来の「ｆｏｒ」ループに使用することができ、＿ＮｅｗＥｎｕｍプロパティ９１４を、一部のプログラミング言語で使用可能な「ｆｏｒ  ｅａｃｈ」構文によって使用することができる。
【００９２】
当然、本発明から逸脱しなければ、ＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔｓオブジェクト９００は、図９と併せて説明した特定のプロパティおよびメソッドに加えて、および／またはそれらの代わりに、および／またはそれらと組み合わせて、プロパティ、メソッド、および／または他の要素を含むことができる。
【００９３】
Ｅ．インク分割ユニットオブジェクト
本発明の一部の例によるＡＰＩの別のオブジェクトは、図１０に示すように、「ＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔ」オブジェクト１０００と呼ばれている。このオブジェクト１０００は、ＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔ．ＲｅｓｕｌｔＢｙＴｙｐｅ操作によって指定された細分度についての解析操作の結果生じるインクストロークの集まりの個々の要素を表す。例えば、ＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔオブジェクト１０００は、指定された解析細分度（または分割タイプ）が「単語」であった場合、解析されたインクストロークの集まりの個々の単語を含み得る。
【００９４】
この例のオブジェクト１０００の第１のプロパティ１００２は、Ｓｔｒｏｋｅｓプロパティ１００４である。Ｓｔｒｏｋｅｓプロパティ１００４は、インク分割の結果生じたユニットに含まれるストロークを含む（例えば選択された細分度に応じて、単語または行または段落のストローク）。このプロパティ１００４によって、コードライタは、解析操作の各粗い結果を構成するストロークに素早くアクセスできるようになる。このＳｔｒｏｋｅｓプロパティ１００４による、またはそれを介してアクセス可能なデータ出力は、以下の形式をとり得る。
[propget]HRESULT Strokes([out,retval]InkStrokes** Strokes)  
【００９５】
ＲｅｃｏｇｎｉｚｅｄＳｔｒｉｎｇプロパティ１００６もまた、図１０に図示するようにＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔオブジェクト１０００のこの例に含まれる。図１０に矢印１０３２で示したこのプロパティ１００６の出力は、手書き認識操作の結果生じるマシン生成テキスト（および／またはこの認識されたテキストのデータのメモリ位置へのポインタ）である。
【００９６】
ＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔオブジェクト１０００のこの例はさらに、図１０に示すようにＤｉｖｉｓｉｏｎＴｙｐｅ１００８と呼ばれるプロパティを含む。このプロパティ１００８は、図１０に出力矢印１０３４で示すように、オブジェクト１０００内の分割ユニットのタイプ（単語、行、文、段落、図など）を戻す。出力されたＤｉｖｉｓｉｏｎＴｙｐｅプロパティ１００８のデータは、以下の形式をとり得る。  
[propget]HRESULT divisionType([out,retval]InkDivisionType** divisionType)  
【００９７】
本発明の一部の例および／または使用において、このＤｉｖｉｓｉｏｎＴｙｐｅプロパティ１００８は、所与のＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔｓオブジェクトの集まり９００が異なるＩｎｋＤｉｖｉｓｉｏｎＴｙｐｅのＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔオブジェクト１０００を含むという場合に有用となり得る。
【００９８】
ＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔオブジェクト１０００の少なくとも一部の例の別のプロパティは、ＲｏｔａｔｉｏｎＴｒａｎｓｆｏｒｍプロパティ１０１０である。このプロパティ１０１０は、例えばＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔオブジェクト１０００のストロークを水平方向に回転させるのに必要な変換行列情報を戻す。これは例えば、このオブジェクト１０００のインクストロークを認識器に送信する前に水平方向の基準線に対して回転させるために使用することができる。このプロパティ１０１０からの出力データは、本発明の少なくとも一部の例では以下の形式をとり得る。  
[propget] HRESULT RotationTransform([out,retval]InkTransform* Rotation Transform
ＲｏｔａｔｉｏｎＴｒａｎｓｆｏｒｍプロパティ１０１０からの出力データの可用性を、図１０に出力矢印１０３６で示している。
【００９９】
本発明の少なくとも一部の例において使用可能なＲｏｔａｔｉｏｎＴｒａｎｓｆｏｒｍプロパティ１０１０は、一部のアプリケーションプログラムにある有利な特徴を示し、水平方向に書かれていない手書きをそれでもなお正確に解析することができる。一般に、多くの知られている手書き認識器は、水平に書かれていない行を内部でうまく扱うことができず、こうした製品では、最適な認識結果は一般に、手書きの基準線が水平である場合にのみ得られる。しかし、一部のパーサシステムでは、パーサは、基準線を自動的に計算または決定し、必要に応じて回転変換を適用して、水平方向の線に対応するデータを取得し、それによって手書き認識器の手書き認識能力を向上させる。ＲｏｔａｔｉｏｎＴｒａｎｓｆｏｒｍプロパティ１０１０によって、クライアントコードが、手書き情報が水平方向に集められたか否かを決定できるようになる。こうしたクライアントコードは、このプロパティを使用して、エンドユーザの手書きを水平にすることによって「クリーンアップ」し、および／またはユーザの手書きの周りの線または別の形状を正確に描くことができる。
【０１００】
本発明の一部の例では、個々のＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔオブジェクト１０００が同じＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔｓの集まり９００に存在し、しかし異なるＲｏｔａｔｉｏｎＴｒａｎｓｆｏｒｍプロパティ１０１０を有することが可能である。例えば、ユーザが円を書き、すべての単語を要求した場合、ＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔｓの集まり９００はすべての単語を含み、各ＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔオブジェクト１０００はそのＲｏｔａｔｉｏｎＴｒａｎｓｆｏｒｍプロパティ１０１０に異なる基準線角度を有することができる。
【０１０１】
とりわけ、ＲｏｔａｔｉｏｎＴｒａｎｓｆｏｒｍプロパティ１０１０は、すべてのＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔオブジェクト１０００に関連があるわけではない。例えば、このプロパティ１０１０は、ＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔ「単語」およびＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔ「行」には関連があるが、必ずしも「図」または「段落」に関連があるとは限らない。要望に応じて、ＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔ  ＤｉｖｉｓｉｏｎＴｙｐｅが「段落」の場合、パーサは、本発明から逸脱することなく、その個々の成分の行に基づいて段落の回転角を計算することができる。また、要望に応じて、パーサは、少なくとも一部の場合、図の回転角をそのストロークに見られるパターンから計算することができる。したがって、ＲｏｔａｔｉｏｎＴｒａｎｓｆｏｒｍプロパティ１０１０がすべてのＩｎｋＤｉｖｉｓｉｏｎＴｙｐｅについて存在していることはあるが、これは必ずしもそうであるとは限らない。
【０１０２】
ＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔオブジェクト１０００は、図１０に示すように、ＩｎｋＤｉｖｉｓｉｏｎＴｙｐｅ１０２２と呼ばれるＥｎｕｍ１０２０をさらに含む。所望のＩｎｋＤｉｖｉｓｉｏｎＴｙｐｅは、デフォルトではクライアントコードまたはアプリケーションプログラムコードによって、あるいは他の任意の適切なやり方によって設定することができる。（出力矢印１０３８によって表される）この出力で、このＥｎｕｍ１０２２は、解析操作から望まれるＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔｓのタイプを表す。この情報を、例えばＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔ．ＲｅｓｕｌｔＢｙＴｙｐｅ操作によって使用することができる。一例として、このＥｎｕｍ１０２０のＩｎｋＤｉｖｉｓｉｏｎＴｙｐｅは、次のように規定することができる。  
InkDivisionType for Word=0
InkDivisionType for Line=1
InkDivisionType for Paragraph=2
InkDivisionType for Drawing=3
当然、本発明から逸脱することなく他の列挙型を使用することができる。例えば、特に極東言語用に設計されたシステムで使用する場合に、列挙型「Ｓｅｇｍｅｎｔ」を使用して単語または文字に一致させることができる。
【０１０３】
別の例として、所与のＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔｓオブジェクトの集まりが異なるＩｎｋＤｉｖｉｓｉｏｎＴｙｐｅのＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔオブジェクトを含むことが可能となる場合、このＥｎｕｍのエントリの特定の値は、例えば以下のようなものに変わり得る。  
All InkDivisionTypes=0
InkDivisionType for Word=1
InkDivisionType for Line=2
InkDivisionType for Paragraph=4
InkDivisionType for Drawing=8
このように、ＩｎｋＤｉｖｉｓｉｏｎＴｙｐｅは、ビットフィールドになり、個々のタイプは、共に論理和をとり、Ｒｒｅｓｕｌｔ−ＢｙＴｙｐｅｓ操作から望まれるＩｎｋＤｉｖｉｓｉｏｎＴｙｐｅの組合せを指定することができる。
【０１０４】
当然、本発明から逸脱しなければ、ＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔオブジェクト１０００は、図１０に示す特定のプロパティおよび列挙型に加えて、および／またはそれらの代わりに、および／またはそれらと組み合わせて、プロパティ、メソッド、列挙型、および／または他の要素を含むことができる。
【０１０５】
Ｖ．インクディバイダオブジェクトおよびＡＰＩの動作
Ａ．インキングセッション中の性能
使用中、インクストロークを、本発明から逸脱することなく適した任意のやり方で、ＩｎｋＤｉｖｉｄｅｒオブジェクト７００のＳｔｒｏｋｅｓプロパティ７０４の集まりに追加する、そこから削除する、および／ないしはそこで変更を行うことができる。要望に応じて、例えばストロークが既存のＳｔｒｏｋｅｓプロパティ７０４に追加され、そこから削除され、および／ないしはそこで変更されるたびに、まったく新しいＳｔｒｏｋｅｓプロパティ７０４を書き込み、挿入することができる。しかしこのようなやり方は、ストロークが変更されるたびにコンピュータが最初からＳｔｒｏｋｅｓプロパティ７０４内のすべてのインクストロークを解析し直す必要があるため、受け入れがたい処理遅延がもたらされることになる。
【０１０６】
したがって、本発明の一部の例では、ＩｎｋＤｉｖｉｄｅｒオブジェクト７００を使用するクライアントコード（またはアプリケーションプログラムコード）は、ストロークが追加され、削除され、ないしは変更されるたびにＳｔｒｏｋｅｓプロパティの集まり７０４全体を交換するのではなく、ＩｎｋＤｉｖｉｄｅｒオブジェクトのＳｔｒｏｋｅｓプロパティの集まり７０４に（ａ）個々のインクストロークを追加するメソッド、および（ｂ）インクストロークの組を追加するメソッド（貼り付け操作などによる）、ＩｎｋＤｉｖｉｄｅｒオブジェクトのＳｔｒｏｋｅｓプロパティの集まり７０４から（ｃ）インクストロークを削除するメソッド、および（ｄ）インクストロークの組を削除するメソッド（切り取り操作などによる）を含む。現在のＩｎｋＤｉｖｉｄｅｒオブジェクトのＳｔｒｏｋｅｓプロパティ７０４の中の影響を受けたストロークのみを追加し、削除し、ないしは変更するメソッドを使用することによって、内部解析ツリーデータ構造を漸進的に更新することができる。例えば、あるストロークが（おそらく「ｔ」と交差するために）以前解析された行に追加されたとき、新しいストロークが「追加」メソッドを使用して（例えば「Ｉｎｋ  Ｄｉｖｉｄｅｒ．Ｓｔｒｏｋｅｓ．Ａｄｄ（ｎｅｗｓｔｒｏｋｅ）」操作によって）ＩｎｋＤｉｖｉｄｅｒオブジェクト７００に渡される場合、内部パーサの解析ツリーデータ構造は、新しいストロークの位置から所定の距離以内で無効になり、それによって新しいストロークの隣接したエリア内のストローク（「ダーティ」ストロークまたは「ダーティ」ノードとも呼ぶ）のみ、すなわちこの例では文字「ｔ」に関連する新しいストロークおよび近接した周囲のストロークを解析し直すことができる。この漸進的なストローク解析の一部の例では、実際に新しく追加されたインクストロークを解析するだけではなく、新しいストロークの存在を考慮に入れて新しいストロークの近辺の他のインクストロークも解析し直す。本発明の一部の例では、（新しく追加され、削除され、あるいは変更されたストロークが周囲のストロークとの関係で確実に表示され、周囲のストロークが最近の変更との関係で確実に表示されるようにするために）新しく追加された、削除された、および／ないしは変更されたストロークの周りの円形領域を解析し直す。
【０１０７】
また、一部の例では、本発明によるシステムおよび方法は、Ｄｉｖｉｄｅメソッドがクライアントコードまたはアプリケーションプログラムコードによって明示的に呼び出されるのを待つことなくバックグラウンドでできるだけ多くの解析を行う。例えば、ＩｎｋＤｉｖｉｄｅｒオブジェクトのＳｔｒｏｋｅｓプロパティ７０４が設定されている、あるいはストロークがＩｎｋＤｉｖｉｄｅｒオブジェクトのＳｔｒｏｋｅｓプロパティ７０４に追加され、そこから削除され、そうでない場合はそこで変更されたとき、図４と併せて概説したように、解析が解析ツリーデータ構造の「スナップショット」に対してバックグラウンドスレッドで直ちに行われる。したがって、クライアントコードまたはアプリケーションプログラムコードが実際にＤｉｖｉｄｅメソッドを呼び出したとき（例えばインキングセッションの最後に）、ＩｎｋＤｉｖｉｄｅｒオブジェクト７００は、（ａ）最も最近追加／削除／変更されたストロークを解析し終え（すなわち「ダーティノード」がある場合はそれに焦点を当てて）、次いで（ｂ）新しいＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００を作成し、戻すだけですむ。
【０１０８】
Ｂ．インキングセッションに戻るときの性能
ユーザアプリケーションが複数回インキングセッションを開始し、終了し、インクオブジェクトをアプリケーションに「委ねる」予定でいる場合、ＩｎｋＤｉｖｉｄｅｒオブジェクト７００は、アプリケーションプログラムがインクを含むドキュメントを開くたびに最初から既存のデータをすべて解析し直すことが求められることになる。これは、一部の状況では許容できるが、特に大量のインクデータを含むドキュメントを開くときは、性能が悪化し、処理遅延がもたらされることがある。
【０１０９】
本発明の少なくとも一部の例では、既存のドキュメントを開き直すこうした状況で性能を向上させるために、以下のオプションが有用となり得る。
【０１１０】
１．シャドーオブジェクトの保持
アプリケーションプログラムがインキングセッションを終了し、インクデータを画面に委ねるとき、本発明の少なくとも一部の例では、各ＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔオブジェクト１０００のＳｔｒｏｋｅｓプロパティの集まり１００４中の元のストロークを集まりから切り離すのではなく、それらのコピーを作成し、維持することが有用となり得る。
【０１１１】
この種のアプリケーションは、解析を必要とするすべてのインクストロークのシャドーインクオブジェクト、およびＩｎｋＤｉｖｉｄｅｒオブジェクト７００およびそのＳｔｒｏｋｅｓプロパティの集まり７０４（インクディバイダに接続されているストローク）を常に維持するように設計することができる。（例えばインキングセッションの最後に）Ｄｉｖｉｄｅメソッドが呼び出されると、アプリケーションは、シャドーオブジェクトからインクオブジェクトを切り離すのではなく、インクオブジェクトをネイティブのアプリケーションオブジェクトにコピーする。
【０１１２】
アプリケーションオブジェクトの任意のインクがインキングセッション中以外に（例えばスケール変更または回転など他の操作を実行することによって）編集される場合、本発明のこの例では、アプリケーションは、このアプリケーションオブジェクトに対応するストロークを削除し、シャドーの集まりに追加し直すことが必要となり得る。例えば、文書処理プログラムで提供された描画オブジェクトの位置変更が行われた場合、シャドーインクオブジェクトを更新して、この位置変更を反映させる必要がある。
【０１１３】
インキングセッションに戻ると、Ｄｉｖｉｄｅメソッド７１０が再度呼び出される前に、新しいストロークのみを追加し、または削除する必要がある。これによって、インキングセッション間のインクの漸進的な処理が可能になる。
【０１１４】
一般に、漸進的な解析をサポートするには、単一のシャドーインクオブジェクトのみが必要であり、したがって所与のインクオブジェクトの２つの物理的コピーが存在し、それらは同期されなければならない。ＩｎｋＤｉｖｉｄｅｒオブジェクト７００の結果を取得し、ＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔオブジェクト１０００ごとに別個のインクオブジェクトを作成する（その結果それらを描画要素として個々に稼働させ、編集することができる）描画アプリケーションプログラムの場合、描画アプリケーションプログラムが作成するインクオブジェクトごとに単一のシャドーインクオブジェクトが必要であるが、全体的にはインクの２つのコピーのみが依然として存在する。
【０１１５】
この方法に対する利点は、インキングセッション間に移動するときの性能の向上である。欠点は、メモリのフットプリント、およびインクオブジェクトの集まりを同期状態に保つことの負担である。
【０１１６】
２．低減ヒューリスティックス（Ｒｅｄｕｃｔｉｏｎ  Ｈｅｕｒｉｓｔｉｃｓ）
（セッションの終了後）インキングセッションに戻るときに解析性能を向上させる別の可能性は、パーサが処理する必要があるデータセットを低減することである。例えば、「委ねられた」インクオブジェクトが再解析から利益を受けるか否かを決定するヒューリスティックスを実施することが可能である。一例として、アプリケーションは、再解析を、新しいインクと交差する、あるいは新しいインクとのある空間的距離にある、「委ねられた」インクオブジェクトのみに限定することができる。一部の場合、シナリオおよび／または実装に応じて、「委ねられた」インクオブジェクトのｚオーダ（ｚ−ｏｒｄｅｒ）も再解析の要因とすることができる。
【０１１７】
この手法は最初、上記のシャドーオブジェクト手法より容易なように思われるかもしれないが、全部とはいわないが、ＩｎｋＤｉｖｉｄｅｒが変更するＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔｓに関係するほとんどのストロークが必ず低減ヒューリスティックスに含まれることに注意する必要がある。こうしなかった場合は、解析結果、したがってエンドユーザのインキング経験が一貫性のないものになるおそれがある。
【０１１８】
さらに、内部パーサ自体は、どのストロークを再解析するかを決定するのに使用する無効方式を知っているため、実際にどのストロークが含まれるべきかを決定するのによりよい立場にある。無効方式は、半径方向の無効を使用するが、本発明から逸脱することなく他の方式を使用してもよい。
【０１１９】
ＶＩ．アプリケーションプログラムインターフェース
Ｉｎｋ  ＡＰＩの種々の機能を活用するのに多数のアプリケーションプログラムインターフェース（「ＡＰＩ」）が可能である。一部の例を以下に示す。
【０１２０】
（ａ）イベント：本発明の一部の例では、解析操作（例えば上述のＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔ８００）の種々の部分の完了によって種々のイベントをトリガして、例えば解析操作の少なくとも一部が完了したこと、少なくとも一部の解析結果が入手可能であること、および／またはパーサを再度呼び出すことができることなどをクライアントコードに通知する。こうしたイベントの例には、「ＰａｒｓｉｎｇＣｏｍｐｌｅｔｅ」イベントおよび「ＤｉｖｉｓｉｏｎＣｏｍｐｌｅｔｅ」イベントなどがある。「ＰａｒｓｉｎｇＣｏｍｐｌｅｔｅ」イベントは、本発明の一部の例で使用する場合、入力インクストロークが（例えば図６Ｂに示すような）解析ツリーデータ構造のそれぞれの位置に分割されていることをアプリケーションプログラムに通知する。現時点で、本発明のこの例では、認識器は、まだインクストロークデータに作用しないため、個々の単語ごとの結果を使用することができない。一方、「ＤｉｖｉｓｉｏｎＣｏｍｐｌｅｔｅ」イベントを使用して、解析操作および認識操作全体が完了したことをアプリケーションプログラムに通知することができる。上述の例では、ＤｉｖｉｓｉｏｎＣｏｍｐｌｅｔｅイベントは、実行されると、ＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト８００がすぐに使用可能であることをアプリケーションコードに伝え、そのＲｅｓｕｌｔＢｙＴｙｐｅメソッドを使用して所望の解析細分度のＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔオブジェクトを取り出すことができる。
【０１２１】
（ｂ）疑似事実（Ｆａｃｔｏｉｄ）：疑似事実を使用して、例えば、認識すべきインクの期待される情報またはパターンをパーサに通知することによって、認識を操縦することができる。例えば、疑似事実は、入来文字列が郵便番号の欄内にあったことをパーサに通知する。次いでパーサは、なじみのある５桁または９桁のパターンを探すことができる。さらにパーサは、郵便番号の欄に入来する場合は文字を数字として優先的に認識することができる（ｓ字形のストロークを文字の「Ｓ」ではなく数字の「５」として優先的に認識する、および／または小文字の「ｌ」または大文字の「Ｉ」ではなく数字の「１」を優先的に認識するなど）。
【０１２２】
（ｃ）シャドーオブジェクト：ＩｎｋＤｉｖｉｄｅｒオブジェクト７００は、少なくとも一部の例では、外部で管理されるインクオブジェクトの代わりにそれが参照する内部Ｓｈａｄｏｗ  Ｉｎｋ  Ｏｂｊｅｃｔを作成させるメソッドを提供する。当然、ＩｎｋＤｉｖｉｄｅｒ（または関連のシャドーインクマネージャオブジェクト）もシャドーインクオブジェクトへのアクセス機構およびそれらを管理するメソッドを提供する。
【０１２３】
（ｄ）低減ヒューリスティックス：本発明の少なくとも一部の例では、パーサのＡＰＩもまた、「推奨される」データセットの低減機構を含むように拡張し、その結果開発者のアプリケーション要件に互換性がある場合、開発者が低減ヒューリスティックスに神経を使う必要はなく、代わりにパーサに最善を尽くすよう伝えればよいことになる。
【０１２４】
（ｅ）パーサ交換（Ｐａｒｓｅｒ  Ｒｅｐｌａｃｅｍｅｎｔ）：サードパーティが望む任意の認識器またはパーサを使用できるようにするために、パーサのＡＰＩは、ユーザがダウンロードする新しい認識器およびパーサ用の「プラグイン」サポートを含むことができる。これらの代替の解析エンジンは必然的に、上述のＡＰＩのＲｅｃｏｇｎｉｚｅｒＣｏｎｔｅｘｔオブジェクトに似たそれ自体のオブジェクトモデルを有していることになる。
【０１２５】
ＶＩＩ．代替のインクディバイダオブジェクト
図７〜１０は、本発明の一部の例によるインクディバイダオブジェクトおよびそれに関連するいくつかのオブジェクトの例を示している。図１１は、ＩｎｋＤｉｖｉｄｅｒオブジェクト１１００の別の例を示している。このサンプルオブジェクト１１００は、様々なプロパティ１１０２、メソッド１１０４、Ｅｎｕｍ１１０６、およびＥｖｅｎｔ１１０８を含むことができる。それぞれについて以下で詳述する。
【０１２６】
「Ｉｎｋ」プロパティ１１１０は、処理すべきインクオブジェクトまたはストロークへの参照を戻す／設定する。このプロパティ１１１０は、上述のＳｔｒｏｋｅｓプロパティ７０４と同種のものである。「Ｉｎｋｓ」プロパティ１１１２は、Ｄｉｖｉｄｅメソッド１１２０（以下で詳述）によって生成されたインクオブジェクトの集まりを戻す。ＤｉｖｉｓｉｏｎＧｒａｎｕｌａｒｉｔｙプロパティ１１１４は、Ｉｎｋプロパティ１１１０のインクがＤｉｖｉｄｅメソッド１１２０によって解析される細分度を取得／設定する。デフォルトの任意の値（あるいはデフォルトの値がない場合でさえも）本発明から逸脱することなく使用することができるが、本発明の一部の例では、ＤｉｖｉｓｉｏｎＧｒａｎｕｌａｒｉｔｙプロパティ１１１４は、デフォルトでは「単語」細分度である。ＤｉｖｉｓｉｏｎＧｒａｎｕｌａｒｉｔｙプロパティ１１１４は、例えば、「段落」、「行」、「文」、「単語」、「図」などを表すＥｎｕｍを含むことができるＤｉｖｉｓｉｏｎＧｒａｎｕｌａｒｉｔｙＥｎｕｍ１１０６を使用して設定することができる。所望のＤｉｖｉｓｉｏｎＧｒａｎｕｌａｒｉｔｙは、クライアントコードまたはアプリケーションプログラムコードによって、デフォルトで、または他の任意の適切なやり方で設定することができる。
【０１２７】
Ｄｉｖｉｄｅメソッド１１２０は、設定されたＤｉｖｉｓｉｏｎＧｒａｎｕｌａｒｉｔｙプロパティ１１１４に基づいてＩｎｋプロパティ１１１０に存在するインクストロークに対してインク解析操作を行う。ＤｉｖｉｓｉｏｎＣｏｍｐｌｅｔｅイベント１１３０を実行して、Ｄｉｖｉｄｅメソッド１１２０がその動作を終了したときアプリケーションプログラムに通知する。Ｄｉｖｉｄｅメソッド１１２０からの解析結果がＩｎｋｓプロパティ１１１２に書き込まれ、矢印１１３２で示すように、アプリケーションプログラムコードまたはクライアントコードがそこから使用できるようにすることができる。クライアントコードまたはアプリケーションプログラムコードは、ＤｉｖｉｓｉｏｎＣｏｍｐｌｅｔｅイベント１１３０を受信すると、Ｉｎｋｓプロパティ１１１２を取り出し、解析操作の結果を取り出すことができることがわかる。
【０１２８】
実装の細部に応じて、Ｉｎｋｓプロパティ１１１２は、解析操作（すなわちＤｉｖｉｄｅメソッド１１２０）が行われており、インクの内部解析ツリー表現が構築されている間にアクセス可能であってもアクセス不可であってもよい。
【０１２９】
当然、本発明から逸脱しなければ、ＩｎｋＤｉｖｉｄｅｒオブジェクト１１１０は、プロパティ、メソッド、列挙型、イベント、および／または他の要素を、図１１に図示した特定のプロパティ、メソッド、列挙型、およびイベントとの組合せで、および／またはそれらに加えて、および／またはそれらの代わりに含んでいてもよい。
【０１３０】
ＶＩＩＩ．結論
本発明は、種々の特定の例に関して説明してきたが、これらの特定の例は単に本発明を例として示すものであり、それを限定するものではない。例えば、本明細書では種々の特定の名前がオブジェクト、プロパティ、メソッド、列挙型、イベントなどに使用されているが、こうした特定の名前は単に考え得る名前の例にすぎず、本発明を限定するものと解釈されるべきではないことを当業者であれば理解されよう。当然、本発明から逸脱することなく他の名前をオブジェクト、プロパティ、メソッド、列挙型、イベントなどに使用してもよい。さらに、オブジェクト、プロパティ、メソッド、列挙型、イベントなどの特定の構成は、本発明から逸脱することなく、記載し図示した特定の構成と異なっていてもよい。
【０１３１】
さらに、本発明の特定の特徴および機能を特定の例とともに記載していることは、この特徴または機能が本発明のその特定の例での使用に限定されること、あるいはすべての例がその特定の特徴または機能を含んでいなければならないことを意味するものではない。そうではなく、特別に指定のない限り、本発明の任意の例における上述の種々の特徴および機能を自由に使用することができる。添付の特許請求の範囲に定義した本発明の意図および範囲から逸脱することなく本発明の変形の例に変更および修正を加えることができることを当業者であれば理解されよう。
【図面の簡単な説明】
【０１３２】
【図１】本発明の種々の形態の実施に使用することができる汎用デジタルコンピューティング環境を示す概略図である。
【図２】本発明の種々の形態に従って使用することができるスタイラスベースのコンピューティングシステムを示す平面図である。
【図３】本発明の例とともに使用できる解析システムおよび／または方法の一例を示す概要図である。
【図４】本発明の例とともに使用できる漸進的解析処理を説明する全体図である。
【図５】本発明の例とともに使用できる種々のレイアウト分析の例を示す図である。
【図６Ａ】例えば図５に図示した諸ステップを実行するレイアウト分析エンジンを使用して得られる解析ツリーデータ構造の例を示す図である。
【図６Ｂ】例えば図５に図示した諸ステップを実行するレイアウト分析エンジンを使用して得られる解析ツリーデータ構造の例を示す図である。
【図７】本発明の一部の例で使用するＩｎｋＤｉｖｉｄｅｒオブジェクトの構成要素および特徴を示す図である。
【図８】本発明の一部の例で使用するＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクトの構成要素および特徴を示す図である。
【図９】本発明の一部の例で使用するＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔｓオブジェクトの構成要素および特徴を示す図である。
【図１０】本発明の一部の例で使用するＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔオブジェクトの構成要素および特徴を示す図である。
【図１１】本発明の一部の例で使用するＩｎｋＤｉｖｉｄｅｒオブジェクトの別の例を示す図である。
【符号の説明】
【０１３３】
１００  コンピュータ
１０１  キーボード
１０２  ポインティング装置
１０６  シリアルポートインターフェース
１０７  モニタ
１０８  ビデオアダプタ
１０９  リモートコンピュータ
１１０  処理ユニットまたはシステム
１１１  メモリ記憶装置
１１２  ローカルエリアネットワーク（ＬＡＮ）
１１３  ワイドエリアネットワーク（ＷＡＮ）
１１４  アダプタ
１１５  モデム
１２０  システムメモリ
１３０  システムバス
１４０  読取り専用メモリ（ＲＯＭ）
１５０  ランダムアクセスメモリ（ＲＡＭ）
１６０  基本入出力システム（ＢＩＯＳ）
１６５  ペンデジタイザ
１６６  付属ペンまたはユーザ入力装置
１７０  ハードディスクドライブ
１８０  磁気ディスクドライブ
１９０  取外し可能磁気ディスク
１９１  光ディスクドライブ
１９２  ハードディスクドライブインターフェース
１９３  磁気ディスクドライブインターフェース
１９４  光ディスクドライブインターフェース
１９５  オペレーティングシステム
１９６  アプリケーションプログラム
１９７  プログラムモジュール
１９８  プログラムデータ
２０１  ペンベースまたはスタイラスベースのコンピューティングシステム
２０２  表示面
２０３  ウィンドウ
２０４  スタイラス
２０５  領域
３００  インクストローク
３０２  レイアウト分析
３０４  単語、行、段落（またはブロック）、および／または他のグループ
３０６  分類分析システムまたはエンジン
３０８  正規化アルゴリズムまたはシステム
３１０  手書き認識システム
３１４  注釈認識システムまたは方法
４００  ユーザ
４０２  ドキュメントツリーデータ構造
４０４  ミラーツリーデータ構造
４０６  レイアウト分析エンジン
４０８  認識エンジン
４１０  システム
４２０  アプリケーションシステムまたはプログラム
４２２  パーサ
４２４、４２６  スナップショット
５００  入来入力データ
５０２、５０６  グラフィカル表現
５０４  データ出力
５０８  時間的行グループ分けステップ
５１０  空間的ブロックグループ分けステップ
５１２  空間的行グループ分けステップ
５１４  リスト検出
５１６  空間的単語グループ分け
６００  ストローク
６０２、６１０  単語
６０４、６１２  行
６０６、６１４  ブロック
６０８  ページ
７００  ＩｎｋＤｉｖｉｄｅｒオブジェクト
７０２、９０２、１００２、１１０２  プロパティ
７０４  Ｓｔｒｏｋｅｓプロパティ
７０６  ＲｅｃｏｇｎｉｚｅｒＣｏｎｔｅｘｔプロパティ
７０８、８０２、８１０、９０８、１１０４  メソッド
７１０  Ｄｉｖｉｄｅメソッド
８００  ＩｎｋＤｉｖｉｓｉｏｎＲｅｓｕｌｔオブジェクト
８０４  Ｓｔｒｏｋｅｓプロパティ
８０８  出力データ
８１２  ＲｅｓｕｌｔＢｙＴｙｐｅメソッド
９００  ＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔｓオブジェクト
９０４  Ｃｏｕｎｔプロパティ
９１０  Ｉｔｅｍメソッド
９１４  ＿ＮｅｗＥｎｕｍプロパティ
１０００  ＩｎｋＤｉｖｉｓｉｏｎＵｎｉｔオブジェクト
１００４  Ｓｔｒｏｋｅｓプロパティ
１００６  ＲｅｃｏｇｎｉｚｅｄＳｔｒｉｎｇプロパティ
１００８  ＤｉｖｉｓｉｏｎＴｙｐｅプロパティ
１０１０  ＲｏｔａｔｉｏｎＴｒａｎｓｆｏｒｍプロパティ
１０２０  Ｅｎｕｍ
１０２２  ＩｎｋＤｉｖｉｓｉｏｎＴｙｐｅ
１１００  ＩｎｋＤｉｖｉｄｅｒオブジェクト
１１０６  列挙型
１１０８  イベント
１１１０  Ｉｎｋプロパティ
１１１２  Ｉｎｋｓプロパティ
１１１４  ＤｉｖｉｓｉｏｎＧｒａｎｕｌａｒｉｔｙプロパティ
１１１６  ＤｉｖｉｓｉｏｎＧｒａｎｕｌａｒｉｔｙ列挙型
１１２０  Ｄｉｖｉｄｅメソッド
１１３０  ＤｉｖｉｓｉｏｎＣｏｍｐｌｅｔｅイベント
【図１】
2004227564.tif 000003
【図２】
2004227564.tif 000004
【図３】
2004227564.tif 000005
【図４】
2004227564.tif 000006
【図５】
2004227564.tif 000007
【図６Ａ】
2004227564.tif 000008
【図６Ｂ】
2004227564.tif 000009
【図７】
2004227564.tif 000010
【図８】
2004227564.tif 000011
【図９】
2004227564.tif 000012
【図１０】
2004227564.tif 000013
【図１１】
2004227564.tif 000014