IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ シトリックス・システムズ・インコーポレイテッドの特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-09-27
(45)【発行日】2022-10-05
(54)【発明の名称】動的領域ベースのアプリケーション操作
(51)【国際特許分類】
   G06F 40/166 20200101AFI20220928BHJP
【FI】
G06F40/166
【請求項の数】 20
(21)【出願番号】P 2021519152
(86)(22)【出願日】2020-05-07
(65)【公表番号】
(43)【公表日】2022-07-12
(86)【国際出願番号】 CN2020089056
(87)【国際公開番号】W WO2021223186
(87)【国際公開日】2021-11-11
【審査請求日】2021-04-08
【早期審査対象出願】
(73)【特許権者】
【識別番号】508045099
【氏名又は名称】シトリックス・システムズ・インコーポレイテッド
【氏名又は名称原語表記】Citrix Systems,Inc.
(74)【代理人】
【識別番号】100118902
【弁理士】
【氏名又は名称】山本 修
(74)【代理人】
【識別番号】100106208
【弁理士】
【氏名又は名称】宮前 徹
(74)【代理人】
【識別番号】100196508
【弁理士】
【氏名又は名称】松尾 淳一
(74)【代理人】
【識別番号】100147991
【弁理士】
【氏名又は名称】鳥居 健一
(74)【代理人】
【識別番号】100201743
【弁理士】
【氏名又は名称】井上 和真
(72)【発明者】
【氏名】ヤオ,ヤジュン
(72)【発明者】
【氏名】バイ,ユアン
(72)【発明者】
【氏名】チェン,ジュアンジュアン
【審査官】木村 大吾
(56)【参考文献】
【文献】特表2012-525635(JP,A)
【文献】米国特許出願公開第2011/0107246(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 40/00-40/58
(57)【特許請求の範囲】
【請求項1】
コンピューティングデバイスにより実行される方法であって、
文書の領域のデータ構造を与えるステップであって、前記データ構造が前記文書内の前記領域を定める開始値、終了値およびオフセット値を含む、ステップを備えるとともに、
前記領域内のコンテンツの変更の検出に応答して、
前記領域内の前記文書の行数のカウント値を決定し、
前記領域の範囲を変更するために、前記行数の前記カウント値に基づいて、前記領域の前記開始値、前記終了値および前記オフセット値のうちの少なくとも1つを調整し、
前記領域内のコンテンツの前記変更に応じて、前記領域のスタックに前記変更の記録をプッシュするステップを備え、前記スタックは、前記変更を不連続的に取り消または再実行することを可能とするように、前記文書の前記領域内のコンテンツに対して実行される個々のアクションを表す要素を受け入れるように構成される、方法。
【請求項2】
前記変更は、前記領域における少なくとも1行の追加となる、請求項1に記載の方法。
【請求項3】
前記変更は、前記領域における少なくとも1行の削除となる、請求項1に記載の方法。
【請求項4】
前記スタックは、取消スタックまたは再実行スタックのうちの1つである、請求項1に記載の方法。
【請求項5】
前記変更は、取消操作であり、前記スタックは、再実行スタックである、請求項1に記載の方法。
【請求項6】
前記変更は、再実行操作であり、前記スタックは、取消スタックである、請求項1に記載の方法。
【請求項7】
前記領域は第1の領域であり、
前記方法はさらに、
前記文書の前記第1の領域の上に位置する当該文書の第2の領域内に少なくとも1行を追加または削除するコンテンツの変更の検出に応答して、前記第1の領域の範囲を変更するために、前記第2の領域内のコンテンツの前記変更に基づいて前記第1の領域の前記オフセット値を調整するステップを備える、請求項1に記載の方法。
【請求項8】
前記変更は、前記文書の隣接領域と前記領域とのマージとなる、請求項1に記載の方法。
【請求項9】
メモリと、
前記メモリと通信する1つまたは複数のプロセッサと
を備えたシステムであって、
前記1つまたは複数のプロセッサは、
文書の領域のデータ構造を与える処理であって、前記データ構造が前記文書内の前記領域を定める開始値、終了値およびオフセット値を含む、処理を実行するとともに、
前記領域内のコンテンツの変更の検出に応答して、
前記領域内の前記文書の行数のカウント値を決定し、
前記領域の範囲を変更するために、前記行数の前記カウント値に基づいて、前記領域の前記開始値、前記終了値およびオフセット値のうちの少なくとも1つを調整し、
前記領域内のコンテンツの前記変更に応じて前記領域のスタックに前記変更の記録をプッシュする処理を実行するように構成されており、前記スタックは、前記変更を不連続的に取り消しまたは再実行することを可能とするように、前記文書の前記領域内のコンテンツに対して実行される個々のアクションを表す要素を受け入れるように構成される、システム。
【請求項10】
前記変更は、取消操作であり、前記スタックは、再実行スタックである、請求項9に記載のシステム。
【請求項11】
前記変更は、再実行操作であり、前記スタックは、取消スタックである、請求項9に記載のシステム。
【請求項12】
前記変更は、前記領域における少なくとも1行の追加となる、請求項9に記載のシステム。
【請求項13】
前記変更は、前記領域における少なくとも1行の削除となる、請求項9に記載のシステム。
【請求項14】
前記領域は第1の領域であり、
前記1つまたは複数のプロセッサはさらに、
前記文書の前記第1の領域の上に位置する当該文書の第2の領域内に少なくとも1行を追加または削除するコンテンツの変更の検出に応答して、前記第1の領域の範囲を変更するために、前記第2の領域内のコンテンツの前記変更に基づいて前記第1の領域の前記オフセット値を調整するように構成される、請求項9に記載のシステム。
【請求項15】
前記変更は、前記文書の隣接領域と前記領域とのマージとなる、請求項9に記載のシステム。
【請求項16】
コンピューティングデバイスにより実行される方法であって、
文書の第1の領域の第1のデータ構造を与えるステップであって、前記第1のデータ構造が前記文書内の前記第1の領域を定める開始値、終了値およびオフセット値を含む、ステップと、
前記第1の領域の下における文書の第2の領域の第2のデータ構造を与えるステップであって、前記第2のデータ構造が前記文書内の前記第2の領域を定める開始値、終了値およびオフセット値を含む、ステップと
を備えるとともに、
前記第1の領域内のコンテンツの変更の検出に応答して、
前記第1の領域内で追加または削除される行数のカウント値を決定し、
前記第1の領域内のコンテンツの前記変更に基づいて、前記第1の領域の前記開始値と前記終了値とのうちの少なくとも一方を調整し、
前記第2の領域の範囲を変更するために、前記第1の領域内で追加または削除される前記行数の前記カウント値に基づいて、前記第2の領域の前記オフセット値を調整するステップを備える、方法。
【請求項17】
前記第1の領域内のコンテンツの前記変更の検出に応答して、前記第1の領域内のコンテンツの前記変更に応じて前記第1の領域のスタックに前記変更の記録をプッシュするステップをさらに備え、前記スタックは、前記変更を不連続的に取り消しまたは再実行することを可能とするように、前記文書の前記第1の領域内のコンテンツに対して実行される個々のアクションを表す要素を受け入れるように構成される、請求項16に記載の方法。
【請求項18】
前記スタックは、取消スタックである、請求項17に記載の方法。
【請求項19】
前記スタックは、再実行スタックである、請求項17に記載の方法。
【請求項20】
前記変更は、前記第1の領域と前記第2の領域とのマージとなる、請求項16に記載の方法。
【発明の詳細な説明】
【背景技術】
【0001】
[0001]多くのソフトウェアアプリケーション(「アプリケーションソフトウェア」、または単に「アプリケーション」、またはより単純に「アプリ」とも呼ばれる)は、ユーザが文書に変更を加えることができる編集機能を提供する。たとえば、そのような編集機能を使用すると、ユーザは、文書内の既存のコンテンツを変更したり、コンテンツを追加したり、コンテンツを削除したりできる。これらのアプリケーションの多くは、取消(Undo)操作や再実行(Redo)操作もサポートしている。簡単に言うと、取消操作は、文書に加えられた最後の変更を消去または取り消し、文書を以前の状態(文書に最後に変更がされた前の状態)に戻す。再実行操作は、最新の取消操作を撤回または打ち消す。
【発明の概要】
【0002】
[0002]本概要は、詳細説明において以下でさらに説明される選択された概念を、簡略化された形式で紹介するために提供される。本概要は、特許請求された主題の主要なまたは不可欠な特徴または組合せを特定することを意図しておらず、特許請求された主題の範囲を限定するために使用されることも意図していない。
【0003】
[0003]本明細書に記載のより広い概念、システムおよび技法を説明するために提供される1つの例示的な実施形態によれば、方法は、文書の領域のデータ構造を与えるステップを含み得、データ構造は、文書内の領域を定める開始値、終了値およびオフセット値を含む。この方法はまた、領域内のコンテンツの変更の検出に応答して、領域内の文書の行数のカウント値を決定し、領域の範囲を変更するために、行数のカウント値に基づいて領域の開始値、終了値およびオフセット値のうちの少なくとも1つを調整し、領域内のコンテンツの変更に応じて、領域のスタックに変更の記録をプッシュするステップを含み得、当該スタックは、変更を不連続的に取り消しまたは再実行することを可能とするように、文書の領域内のコンテンツに対して実行される個々のアクションを表す要素を受け入れるように構成される。
【0004】
[0004]1つの態様では、領域は第1の領域であり、この方法はまた、文書の第1の領域の上に位置する当該文書の第2の領域内に少なくとも1行を追加または削除するコンテンツの変更の検出に応答して、第1の領域の範囲を変更するために、第2の領域内のコンテンツの変更に基づいて第1の領域のオフセット値を調整するステップを含み得る。
【0005】
[0005]本明細書で説明されるより広い概念を説明するために提供される別の例示的な実施形態によれば、システムは、メモリと、メモリと通信する1つまたは複数のプロセッサとを含む。プロセッサは、文書の領域のデータ構造を与えるように構成され得、データ構造は、文書内の領域を定める開始値、終了値およびオフセット値を含む。プロセッサはまた、領域内のコンテンツの変更の検出に応答して、領域内の文書の行数のカウント値を決定し、領域の範囲を変更するために、行数のカウント値に基づいて、領域の開始値、終了値およびオフセット値のうちの少なくとも1つを調整し、領域内のコンテンツの変更に応じて、領域のスタックに変更の記録をプッシュするように構成され得、スタックは、変更を不連続的に取り消しまたは再実行することを可能とするように、文書の領域内のコンテンツに対して実行される個々のアクションを表す要素を受け入れるように構成される。
【0006】
[0006]本明細書に記載されたより広い概念を説明するために提供される別の例示的な実施形態によれば、方法は、文書の第1の領域の第1のデータ構造を与えるステップであって、第1のデータ構造が文書内の第1の領域を定める開始値、終了値およびオフセット値を含む、ステップと、第1の領域の下の文書の第2の領域の第2のデータ構造を与えるステップであって、第2のデータ構造が文書内の第2の領域を定める開始値、終了値およびオフセット値を含む、ステップとを含み得る。方法はまた、第1の領域内のコンテンツの変更の検出に応答して、第1の領域内で追加または削除される行数のカウント値を決定し、第1の領域内のコンテンツの変更に基づいて第1の領域の開始値と終了値とのうちの少なくとも一方を調整し、第2の領域の範囲を変更するために、第1の領域内で追加または削除される行数のカウント値に基づいて第2の領域のオフセット値を調整するステップを含み得る。
【0007】
[0007]1つの態様では、方法はまた、第1の領域内のコンテンツの変更の検出に応答して、第1の領域内のコンテンツの変更に応じて、第1の領域のスタックに変更の記録をプッシュするステップを含み得、スタックは、変更を不連続的に取り消しまたは再実行することを可能とするように、文書の第1の領域内のコンテンツに対して実行される個々のアクションを表す要素を受け入れるように構成される。
【0008】
[0008]前述および他の目的、特徴および利点は、同様の参照文字が異なる図全体を通して同じ部分を指す添付図面に例示されるように、以下の実施形態のより具体的な説明から明らかになるであろう。図面は必ずしも縮尺通りではなく、代わりに実施形態の原理を例示することに重点が置かれている。
【図面の簡単な説明】
【0009】
図1】[0009]本開示の実施形態が実施され得る例示的なネットワークコンピューティング環境の図である。
図2】[0010]本開示の実施形態にしたがって、本開示の様々な態様が実施され得る例示的なコンピューティングデバイスの選択的な構成要素を例示するブロック図である。
図3】[0011]本開示の様々な態様が実施され得るクラウドコンピューティング環境の概略ブロック図である。
図4A】[0012]リソース管理サービスが、(1つまたは複数のゲートウェイサービスを介して)リソースフィードおよび/またはソフトウェアアズアサービス(SaaS)アプリケーションへのクライアントによるアクセスを管理および効率化し得る例示的なシステムのブロック図である。
図4B】[0013]様々なリソース管理サービスおよびゲートウェイサービスがクラウドコンピューティング環境内に配置された、図4Aに示されるシステムの例示的な実施形態を示すブロック図である。
図4C】[0014]図4Bと同様であるが、「記録システム」との名称が付された単一のブロックで利用可能なリソースが表され、さらにいくつかの異なるサービスがリソース管理サービス間に含まれているブロック図である。
図5】[0015]本開示の実施形態による、文書内の例示的な動的領域を示すブロック図である。
図6】[0016]本開示の実施形態による、例示的な動的領域データ構造の図である。
図7】[0017]本開示の実施形態による、例示的な編集操作記録の図である。
図8A】[0018]本開示の実施形態による、文書編集セッション中に実行される編集操作を処理する際の動的領域データ構造の例示的な操作を示す図である。
図8B】本開示の実施形態による、文書編集セッション中に実行される編集操作を処理する際の動的領域データ構造の例示的な操作を示す図である。
図8C】本開示の実施形態による、文書編集セッション中に実行される編集操作を処理する際の動的領域データ構造の例示的な操作を示す図である。
図8D】本開示の実施形態による、文書編集セッション中に実行される編集操作を処理する際の動的領域データ構造の例示的な操作を示す図である。
図8E】本開示の実施形態による、文書編集セッション中に実行される編集操作を処理する際の動的領域データ構造の例示的な操作を示す図である。
図9】[0019]図9Aおよび図9Bは、本開示の実施形態による、文書内の行の削除例を示す図である。
図10】[0020]本開示の実施形態による、文書内の行の削除を処理する際の動的領域データ構造の例示的な操作の図である。
図11】[0021]本開示の実施形態による、文書内の複数の行の編集を処理する際の動的領域データ構造の例示的な操作の図である。
図12】[0022]図12Aおよび図12Bは、本開示の実施形態による、文書内の2つの動的領域の例示的なマージ(合成)を示す図である。
図13】[0023]本開示の実施形態による、取消操作を処理する際の動的領域データ構造の例示的な操作の図である。
図14】[0024]本開示の実施形態による、別の取消操作を処理する際の動的領域データ構造の例示的な操作の図である。
図15】[0025]本開示の実施形態による、文書への変更を処理するための例示的なプロセスのフロー図である。
図16】[0026]本開示の実施形態による、取消操作を処理するための例示的なプロセスのフロー図である。
図17】[0027]本開示の実施形態による、再実行操作を処理するための例示的なプロセスのフロー図である。
【発明を実施するための形態】
【0010】
[0028]多くの既存のアプリケーションによってサポートされる取消(Undo)操作/再実行(Redo)操作により、ユーザは、文書に変更を加えることができ、当該変更を容易に取り消して再実行できることを知り得るので、これによりユーザとコンピュータとの間のやり取りが強化される。文書に対してなされた変更を取り消したり、再実行したりする機能は、安全措置を提供することによって、ユーザが通常行うことのない変更を行う自信をユーザに植え付ける。
【0011】
[0029]多くの従来の取消の実施は、連続的な取消操作である。連続的な取消は通常、実行されたすべての操作の履歴を格納するスタック(たとえば、後入れ先出し(LIFO)データ構造など)を使用して実施される。新しい操作が実行されると、この操作は、スタックの最上位に配置ないしは「プッシュ」される。したがって、最後に実行された操作(スタックの最上位の操作)のみをスタックから、消去ないしは「ポップ」して、取り消すことができる。スタックが空でない限り、取消操作を繰り返すことができる。
【0012】
[0030]たとえば、ユーザが一連の操作A、B、C、DおよびEを実行すると仮定する。これらの操作が完了すると、スタックのコンテンツは下から上に向かってA-B-C-D-Eになる。したがって、ユーザは、スタックの最上位にある操作Eのみを取り消すことができる。
【0013】
[0031]言い換えれば、ユーザは、操作A、B、CまたはDがスタックの最上位にないため、これらの操作を取り消すことができない。たとえば、ユーザが操作Bを取り消したい場合、ユーザは最初に操作Eを、その後、操作Dを、その後、操作Cを取り消す必要がある。操作Cが取り消された後、操作Bはスタックの最上位になり、ユーザはその後操作Bを取り消すことができる。すなわち、連続的な取消の連続的特性である。しかしながら、ユーザが、操作C、DおよびEを、取り消したくない場合がある。この場合、ユーザは操作Bが取り消された後、操作C、DおよびEを繰り返す(すなわち、再実行する)必要があるため、ユーザは不便を感じるであろう。
【0014】
[0032]概念、デバイス、システムおよび技法は、テキスト編集のためのハイブリッドな取消/再実行について開示され、不連続的な取消操作および再実行操作は、文書内の動的領域全体にわたって実行され、連続的な取消操作および再実行操作は、文書内の動的領域内で実行される。文書内の動的領域は、文書に対して1つまたは複数の編集(本明細書では「変化」または「変更」と置換可能に呼ばれる)が行われる領域または文書の一部を定めるものである。特定の動的領域に関連付けられた領域オフセット値は、文書内の特定の動的領域の上に(すなわち、より高い位置に)位置する動的領域において行われた行追加(挿入)および行削減(削除)を含む編集の結果として、文書内の特定の動的領域の移動またはシフトの記録を保持するために使用される。したがって、特定の動的領域の領域オフセット値を使用して、特定の動的領域に対するそのような編集の効果を打ち消すか、さもなければ妨げる(たとえば、文書内の特定の動的領域のシフトの効果を打ち消す)ことができ、不連続的な取消操作が、文書内の動的領域全体にわたって実行されるようになる。言い換えると、動的領域のそれぞれの領域オフセット値を使用して、動的領域全体にわたる依存関係を解決できるため、文書内の動的領域全体にわたる不連続的な取消が可能になる。
【0015】
[0033]実施形態では、ハイブリッドな取消機能および再実行機能は、テキスト編集アプリケーションソフトウェアによって実施および提供され得る。本明細書に開示される技法を実施するのに適したアプリケーションソフトウェアの非限定的な例は、ワシントン州レドモンドのマイクロソフト社によって提供されるVISUAL STUDIO CODEや、Notepad++、または他の適切なテキスト編集アプリケーションソフトウェアを含む。ハイブリッドな取消/再実行は、文書内の動的領域のそれぞれの領域オフセット値を維持することによって達成される。
【0016】
[0034]たとえば、ユーザは、テキスト編集ソフトウェアを使用して文書を編集(すなわち、変更)し得る。編集セッションの開始時に、文書は、いかなる動的領域も含んでいない。ユーザは、文書の7行目におけるテキストに対して第1の編集を行うことができ、これにより、文書内に、7行目を含む第1の動的領域が生成される。第1の編集は、文書内の第1の動的領域において行われた(すなわち、関連付けられた)ものとして記録される。ユーザは、その後、文書の13行目におけるテキストに、第2の編集を行うことができる。13行目は、第1の動的領域に十分に近くない(たとえば、13行目は、第1の動的領域のしきい範囲内にない)ので、第2の編集により、文書内に、13行目を含む第2の動的領域が生成される。13行目は7行目の下にあるため、第2の動的領域は、文書内の第1の動的領域の下に(すなわち、より低い位置)に位置する。第2の編集は、第2の動的領域において行われたものとして記録される。ユーザは、その後、文書内に、新しい9行目を追加(挿入)する第3の編集を行うことができる。第3の編集は、新しい9行目を追加するために、元の8行目の末尾に入力されたキャリッジリターン(たとえば、改行)によって引き起こされる元の8行目への変更も含む。変更された8行目は、第1の動的領域に十分に近いため、第1の動的領域は、8行目および9行目を含むように拡張され(すなわち、第1の動的領域が、7~9行目を含むようになり)、第3の編集は、第1の動的領域において行われたものとして記録される。新しい9行目を追加すると、文書内の下側のテキストの行(すなわち、元の9行目以上)が、1行下にシフトする。たとえば、新しい9行目を追加する前の元の9行目は、新しい9行目を追加した後、10行目になり、新しい9行目を追加する前の元の10行目は、新しい9行目を追加した後、11行目になり、以下も同様となる。
【0017】
[0035]元の13行目を含む第2の動的領域は、文書内の新しい9行目の下にあるので、元の13行目は、新しい9行目の追加後、14行目になる。元の13行目の1行下へのシフトを考慮するために、第2の動的領域に関連付けられた領域オフセット値が1だけ増分される(すなわち、値1が、第2の動的領域の領域オフセット値に追加される)。この時点まで、第3の編集は、ユーザが最後に実行した編集であることに留意されたい。
【0018】
[0036]連続的な取消により、ユーザは、第3の編集を取り消すことができるが、第1または第2の編集を取り消すことはできない。つまり、ユーザは、最後に実行された編集のみを取り消すことができ、任意の順序で編集を取り消すことはできない。
【0019】
[0037]しかしながら、本明細書に記載の概念、デバイス、システムおよび技法によれば、第2の動的領域に含まれる行のシフトを考慮する第2の動的領域の領域オフセット値を維持することにより、ユーザは、第1の動的領域において実行された最後の編集(すなわち、第3の編集)を最初に取り消すことなく、第2の動的領域において実行された最後の編集(すなわち、この例では、第2の編集)を取り消すことができる。言い換えると、文書内の動的領域のそれぞれの領域オフセット値により、文書内の動的領域全体にわたって任意の順序で取消操作を実行できる。これは、領域オフセット値が、取消を実行する文書内の実際のアドレスまたは位置を導出するために、ベースアドレスまたは相対アドレスに追加できる値に対応しているためである。これらおよび他の利点、変形および実施形態は、本開示に照らして明らかになるであろう。
【0020】
[0038]次に図1を参照して示すように、本開示の実施形態にしたがって、本開示の様々な態様が実施され得るコンピューティングデバイスの例示的なネットワーク環境101が示される。図示されるように、環境101は、1つまたは複数のクライアントマシン102A~102N、1つまたは複数のリモートマシン106A~106N、1つまたは複数のネットワーク104、104’、および環境101内に組み込まれた1つまたは複数の機器108を含む。クライアントマシン102A~102Nは、ネットワーク104、104’を介してリモートマシン106A~106Nと通信する。
【0021】
[0039]いくつかの実施形態では、クライアントマシン102A~102Nは、中間機器108を介してリモートマシン106A~106Nと通信する。例示された機器108は、ネットワーク104、104’の間に配置され、ネットワークインターフェースまたはゲートウェイとも呼ばれ得る。いくつかの実施形態では、機器108は、アプリケーション配信コントローラ(ADC)として動作して、データセンタ、クラウドコンピューティング環境に展開される、または、クライアントデバイスの範囲全体にわたるソフトウェアアズアサービス(SaaS)として配信されるビジネスアプリケーションおよび他のデータへのアクセスをクライアントに提供するか、および/または、負荷平準などの他の機能を提供し得る。いくつかの実施形態では、複数の機器108が使用され得、機器108は、ネットワーク104および/または104’の一部として展開され得る。
【0022】
[0040]クライアントマシン102A~102Nは、一般に、クライアントマシン102、ローカルマシン102、クライアント102、クライアントノード102、クライアントコンピュータ102、クライアントデバイス102、コンピューティングデバイス102、エンドポイント102、またはエンドポイントノード102と呼ばれ得る。リモートマシン106A~106Nは、一般に、サーバ106またはサーバファーム106と呼ばれ得る。いくつかの実施形態では、クライアントデバイス102は、サーバ106によって提供されるリソースへのアクセスを求めるクライアントノードと、他のクライアントデバイス102A~102Nのためにホストされたリソースへのアクセスを提供するサーバ106との両方として機能する能力を有し得る。ネットワーク104、104’は、一般にネットワーク104と呼ばれ得る。ネットワーク104は、有線ネットワークとワイヤレスネットワークとの任意の組合せで構成され得る。
【0023】
[0041]サーバ106は、たとえば、ファイルサーバ、アプリケーションサーバ、ウェブサーバ、プロキシサーバ、機器、ネットワーク機器、ゲートウェイ、アプリケーションゲートウェイ、ゲートウェイサーバ、仮想化サーバ、展開サーバ、セキュアソケットレイヤ仮想プライベートネットワーク(SSL VPN)サーバ、ファイアウォール、ウェブサーバ、アクティブディレクトリを実行するサーバ、クラウドサーバ、または、ファイアウォール機能とアプリケーション機能もしくは負荷平準機能を提供するアプリケーションアクセラレーションプログラムを実行するサーバのような任意のサーバタイプであり得る。
【0024】
[0042]サーバ106は、ソフトウェア、プログラム、実行可能な命令、仮想マシン、ハイパバイザ、ウェブブラウザ、ウェブベースのクライアント、クライアントサーバアプリケーション、シンクライアントコンピューティングクライアント、ActiveXコントロール、Javaアプレット、ソフトIP電話のようなボイスオーバインターネットプロトコル(VoIP)通信に関連するソフトウェア、ビデオおよび/またはオーディオをストリーミングするためのアプリケーション、リアルタイムデータ通信を容易にするためのアプリケーション、HTTPクライアント、FTPクライアント、Oscarクライアント、Telnetクライアント、または他の任意の実行可能な命令のセットのうちのいずれか1つであり得るアプリケーションを実行、動作、または、さもなければ提供し得る。
【0025】
[0043]いくつかの実施形態では、サーバ106は、リモートプレゼンテーションサービスプログラム、または、シンクライアントもしくはリモートディスプレイプロトコルを使用する他のプログラムを実行して、サーバ106上で実行するアプリケーションによって生成されたディスプレイ出力をキャプチャし、アプリケーションディスプレイ出力をクライアントデバイス102に送信し得る。
【0026】
[0044]さらに他の実施形態では、サーバ106は、クライアントデバイス102のユーザに、コンピューティング環境へのアクセスを提供する仮想マシンを実現し得る。クライアントデバイス102は、仮想マシンであり得る。仮想マシンは、たとえば、ハイパバイザ、仮想マシンマネジャ(VMM)、またはサーバ106内の他の任意のハードウェア仮想化技法によって管理され得る。
【0027】
[0045]いくつかの実施形態では、ネットワーク104は、ローカルエリアネットワーク(LAN)、メトロポリタンエリアネットワーク(MAN)、広域ネットワーク(WAN)、プライマリパブリックネットワーク、およびプライマリプライベートネットワークであり得る。追加の実施形態は、モバイルデバイス間で通信するために様々なプロトコルを使用するモバイル電話ネットワークのネットワーク104を含み得る。ワイヤレスローカルエリアネットワーク(WLAN)内の短距離通信の場合、プロトコルは、802.11、Bluetooth、および近距離無線通信(NFC)を含み得る。
【0028】
[0046]図2は、本開示の実施形態にしたがって、本開示の様々な態様が実施され得る例示的なコンピューティングデバイス100の選択的な構成要素を例示するブロック図である。たとえば、図1のクライアントデバイス102、機器108、および/またはサーバ106は、コンピューティングデバイス100と実質的に同様であり得る。図示されるように、コンピューティングデバイス100は、1つまたは複数のプロセッサ103、揮発性メモリ122(たとえば、ランダムアクセスメモリ(RAM))、不揮発性メモリ128、ユーザインターフェース(UI)123、1つまたは複数の通信インターフェース118、および通信バス150を含む。
【0029】
[0047]不揮発性メモリ128は、1つまたは複数のハードディスクドライブ(HDD)または他の磁気もしくは光ストレージ媒体、フラッシュドライブや他のソリッドステートストレージ媒体などの1つまたは複数のソリッドステートドライブ(SSD)、1つまたは複数のハイブリッド磁気およびソリッドステートドライブ、および/または、クラウドストレージなどの1つまたは複数の仮想ストレージボリューム、またはそのような物理ストレージボリュームと仮想ストレージボリュームもしくはそのアレイの組合せを含み得る。
【0030】
[0048]ユーザインターフェース123は、グラフィカルユーザインターフェース(GUI)124(たとえば、タッチスクリーン、ディスプレイなど)および1つまたは複数の入力/出力(I/O)デバイス126(たとえば、マウス、キーボード、マイクロフォン、1つまたは複数のスピーカ、1つまたは複数のカメラ、1つまたは複数の生体認証スキャナ、1つまたは複数の環境センサ、および1つまたは複数の加速度計など)を含み得る。
【0031】
[0049]不揮発性メモリ128は、たとえば、オペレーティングシステム115および/またはアプリケーション116のコンピュータ命令が、揮発性メモリ122の外部のプロセッサ103によって実行されるように、オペレーティングシステム115、1つまたは複数のアプリケーション116、およびデータ117を格納する。いくつかの実施形態では、揮発性メモリ122は、メインメモリよりも速い応答時間を提供し得る1つまたは複数のタイプのRAMおよび/またはキャッシュメモリを含み得る。データは、GUI124の入力デバイスを使用して入力され得るか、I/Oデバイス126から受信され得る。コンピューティングデバイス100の様々な要素は、通信バス150を介して通信し得る。
【0032】
[0050]例示されたコンピューティングデバイス100は、単に例示的なクライアントデバイスまたはサーバとして示され、任意のコンピューティング環境またはプロセシング環境によって、本明細書で説明するように、適切なハードウェアおよび/または動作可能なソフトウェアを有し得る任意のタイプのマシンまたはマシンのセットで実施され得る。
【0033】
[0051]プロセッサ103は、1つまたは複数のプログラマブルプロセッサによって実施されて、コンピュータプログラムなどの1つまたは複数の実行可能な命令を実行して、システムの機能を実行することができる。本明細書で使用される場合、「プロセッサ」という用語は、機能、動作、または一連の動作を実行する回路構成を説明する。機能、動作、または一連の動作は、回路構成にハードコード化され得るか、またはメモリデバイスに保持され、回路構成によって実行される命令によってソフトコード化され得る。プロセッサは、デジタル値を使用して、および/または、アナログ信号を使用して、機能、動作、または一連の動作を実行し得る。
【0034】
[0052]いくつかの実施形態では、プロセッサは、1つまたは複数の特定用途向け集積回路(ASIC)、マイクロプロセッサ、デジタル信号プロセッサ(DSP)、グラフィック処理ユニット(GPU)、マイクロコントローラ、フィールドプログラマブルゲートアレイ(FPGA)、プログラマブルロジックアレイ(PLA)、マルチコアプロセッサ、または関連するメモリを備えた汎用コンピュータにおいて具体化され得る。
【0035】
[0053]プロセッサ103は、アナログ、デジタル、または混合信号であり得る。いくつかの実施形態では、プロセッサ103は、1つまたは複数の物理的プロセッサ、または1つまたは複数の仮想(たとえば、リモートに配置された、またはクラウドコンピューティング環境の)プロセッサであり得る。複数のプロセッサコアおよび/または複数のプロセッサを含むプロセッサは、命令の並列同時実行、または、複数のデータの断片に対する1つの命令の並列同時実行のための機能を提供し得る。
【0036】
[0054]通信インターフェース118は、コンピューティングデバイス100が、ローカルエリアネットワーク(LAN)、広域ネットワーク(WAN)、パーソナルエリアネットワーク(PAN)、またはインターネットなどのコンピュータネットワークに、セルラ接続を含む様々な有線接続および/またはワイヤレス接続を介してアクセスできるようにする1つまたは複数のインターフェースを含み得る。
【0037】
[0055]説明される実施形態では、コンピューティングデバイス100は、クライアントデバイスのユーザに代わってアプリケーションを実行し得る。たとえば、コンピューティングデバイス100は、ハイパバイザによって管理される1つまたは複数の仮想マシンを実行し得る。各仮想マシンは、ホストされたデスクトップセッションなど、アプリケーションがユーザまたはクライアントデバイスに代わって実行する実行セッションを提供し得る。コンピューティングデバイス100はまた、ターミナルサービスセッションを実行して、ホストされたデスクトップ環境を提供し得る。コンピューティングデバイス100は、1つまたは複数のアプリケーションと、1つまたは複数のデスクトップアプリケーションと、1つまたは複数のアプリケーションが実行し得る1つまたは複数のデスクトップセッションとを含むリモートコンピューティング環境へのアクセスを提供し得る。
【0038】
[0056]図3を参照して示すように、クラウドコンピューティング環境300が示され、これは、クラウド環境、クラウドコンピューティング、またはクラウドネットワークとも呼ばれ得る。クラウドコンピューティング環境300は、共有コンピューティングサービスおよび/またはリソースの配信を、複数のユーザまたはテナントに提供することができる。たとえば、共有リソースおよびサービスは、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、データベース、ソフトウェア、ハードウェア、分析、およびインテリジェンスを含むが、これらに限定されない。
【0039】
[0057]クラウドコンピューティング環境300では、(上記で説明したような)1つまたは複数のクライアント102a~102nは、クラウドネットワーク304と通信している。クラウドネットワーク304は、バックエンドプラットフォーム、たとえば、サーバ、ストレージ、サーバファーム、またはデータセンタを含み得る。ユーザまたはクライアント102a~102nは、単一の組織/テナントまたは複数の組織/テナントに対応することができる。より具体的には、1つの例示的な実施では、クラウドコンピューティング環境300は、単一の組織(たとえば、企業クラウド)にサービスを提供するプライベートクラウドを提供し得る。別の例では、クラウドコンピューティング環境300は、複数の組織/テナントにサービスを提供するコミュニティまたはパブリッククラウドを提供し得る。
【0040】
[0058]いくつかの実施形態では、ゲートウェイ機器またはサービスを利用して、クラウドコンピューティングリソースおよび仮想セッションへのアクセスを提供し得る。例として、シトリックス・システムズ(Citrix Systems)社によって提供されるCitrix Gatewayが、オンプレミスまたはパブリッククラウドに展開され、仮想的なSaaSおよびウェブアプリケーションへの安全なアクセスおよびシングルサインオンをユーザに提供し得る。さらに、ユーザをウェブ脅威から保護するために、Citrix Secure Web Gatewayなどのゲートウェイが使用され得る。Citrix Secure Web Gatewayは、クラウドベースのサービスおよびローカルキャッシュを使用して、URLの評判およびカテゴリを確認する。
【0041】
[0059]さらに別の実施形態では、クラウドコンピューティング環境300は、パブリッククラウドとプライベートクラウドとの組合せであるハイブリッドクラウドを提供し得る。パブリッククラウドは、クライアント102a~102nまたは企業/テナントへのサードパーティによって管理されるパブリックサーバを含み得る。サーバは、地理的に離れた位置などのオフサイトに配置され得る。
【0042】
[0060]クラウドコンピューティング環境300は、それぞれの環境内の異なる要求に応答して動的に割り当てられ、再割り当てされる異なる物理的および仮想的なリソースを有するマルチテナント環境またはマルチテナントモデルを通じて、クライアント102a~102nを介して複数のユーザにサービスを提供するリソースプーリングを提供できる。マルチテナント環境は、複数のユーザにサービスするために、ソフトウェア、アプリケーション、またはソフトウェアアプリケーションの単一のインスタンスを提供することができるシステムまたはアーキテクチャを含むことができる。いくつかの実施形態では、クラウドコンピューティング環境300は、複数のクライアント102a~102nのためにネットワーク全体にわたって一方向のプロビジョン・コンピューティング機能(たとえば、サーバ時間、ネットワークストレージ)に対するオンデマンドセルフサービスを提供することができる。例として、プロビジョニングサービスは、Citrix Provisioning Services(Citrix PVS)などのシステムを通じて提供され得る。Citrix PVSは、共有のデスクトップ画像を介して、複数の仮想デスクトップエンドポイントにパッチ、アップデート、および他の構成情報を配信するソフトウェアストリーミング技術である。クラウドコンピューティング環境300は、1つまたは複数のクライアント102からの異なる要求に応じて、動的にスケールアウトまたはスケールインする弾性を提供することができる。いくつかの実施形態では、クラウドコンピューティング環境300は、提供された共有サービスおよびリソースに対応するレポートを監視、制御および/または生成する監視サービスを含むかまたは提供することができる。
【0043】
[0061]いくつかの実施形態では、クラウドコンピューティング環境300は、たとえば、ソフトウェアアズアサービス(SaaS)308、プラットフォームアズアサービス(PaaS)312、インフラストラクチャアズアサービス(IaaS)316、およびデスクトップアズアサービス(DaaS)320のような異なるタイプのクラウドコンピューティングサービスのクラウドベースの配信を提供し得る。IaaSは、指定された期間中に必要なインフラストラクチャリソースの使用をレンタルするユーザを指向し得るものである。IaaSプロバイダは、大規模なプールからストレージ、ネットワーキング、サーバ、または仮想化リソースを提供することができ、ユーザは、必要に応じてより多くのリソースにアクセスすることで、迅速にスケールアップできる。IaaSの例は、ワシントン州シアトルのAmazon.com社によって提供されるAMAZON WEB SERVICES、テキサス州サンアントニオのRackspace US社によって提供されるRACKSPACE CLOUD、カリフォルニア州マウンテンビューのGoogle社によって提供されるGoogle Compute Engine、またはカリフォルニア州サンタバーバラのRightScale社によって提供されるRIGHTSCALEを含む。
【0044】
[0062]PaaSプロバイダは、たとえば、ストレージ、ネットワーキング、サーバ、または仮想化、ならびに、たとえば、オペレーティングシステム、ミドルウェア、またはランタイムリソースなどの追加のリソースを含む、IaaSによって提供される機能を提供し得る。PaaSの例は、ワシントン州レドモンドのマイクロソフト社によって提供されるWINDOWS(登録商標) AZURE、Google社によって提供されるGoogle App Engine、およびカリフォルニア州サンフランシスコのHeroku社によって提供されるHEROKUを含む。
【0045】
[0063]SaaSプロバイダは、ストレージ、ネットワーキング、サーバ、仮想化、オペレーティングシステム、ミドルウェア、またはランタイムリソースを含む、PaaSが提供するリソースを提案し得る。いくつかの実施形態では、SaaSプロバイダは、たとえば、データおよびアプリケーションリソースを含む追加のリソースを提案し得る。SaaSの例は、Google社によって提供されるGOOGLE APPS、カリフォルニア州サンフランシスコのSalesforce.com社によって提供されるSALESFORCE、またはマイクロソフト社によって提供されるOFFICE 365を含む。SaaSの例はまた、たとえば、シトリックス・システムズからのCitrix ShareFile、カリフォルニア州サンフランシスコのDropbox社によって提供されるDROPBOX、マイクロソフト社によって提供されるMicrosoft SKYDRIVE、Google社によって提供されるGoogle Drive、またはカリフォルニア州クパチーノのApple社によって提供されるApple ICLOUDのようなデータストレージプロバイダを含み得る。たとえば、いくつかの実施形態では、本明細書で説明されるハイブリッドな取消/再実行の概念および技法は、RESTfulアプリケーションプログラミングインターフェース(API)またはライブラリを介して領域ベースの取消/再実行機能を伴うテキスト処理をサポートするためにSaaSアプリケーションによって実施され得る。
【0046】
[0064]SaaSと同様に、DaaS(ホストされたデスクトップサービスとしても知られている)は、仮想デスクトップセッションが通常、仮想デスクトップで使用されるアプリとともにクラウドサービスとして配信される仮想デスクトップインフラストラクチャ(VDI)の形態である。シトリックス・システムズからのCitrix Cloudは、DaaS配信プラットフォームの一例である。DaaS配信プラットフォームは、たとえば、ワシントン州レドモンドのマイクロソフト社からのAZURE CLOUD(ここでは「Azure」)、またはワシントン州シアトルのAmazon.com社によって提供されるAMAZON WEB SERVICES(ここでは「AWS」)のようなパブリッククラウドコンピューティングインフラストラクチャへホストされ得る。Citrix Cloudの場合、Citrix Workspaceアプリは、アプリ、ファイル、デスクトップを(オンプレミスでもクラウドでも)統合し、統一された体験を提供するための単一エントリポイントとして使用され得る。
【0047】
[0065]図4Aは、1つまたは複数のリソース管理サービス402が、1つまたは複数のクライアント202による、(1つまたは複数のゲートウェイサービス408を介した)1つまたは複数のリソースフィード406への、および/または、1つまたは複数のソフトウェアアズアサービス(SaaS)アプリケーション410へのアクセスを管理および効率化できる例示的なシステム400のブロック図である。特に、リソース管理サービス402は、アイデンティティプロバイダ412を適用して、クライアント202のユーザのアイデンティティ(資格)を認証し、認証後、ユーザがアクセスを許可されている多くのリソースのうちの1つのリソースを識別し得る。ユーザが、識別されたリソースのうちの1つのリソースを選択することに応じて、リソース管理サービス402は、適切なアクセス資格情報を、要求元のクライアント202に送信し得、その後、要求元のクライアント202は、それらの資格情報を使用して、選択されたリソースにアクセスし得る。リソースフィード406の場合、クライアント202は、供給された資格情報を使用して、ゲートウェイサービス408を介して選択されたリソースにアクセスすることができる。SaaSアプリケーション410の場合、クライアント202は、資格情報を使用して、選択されたアプリケーションに直接アクセスできる。
【0048】
[0066]クライアント202は、リソースフィード406および/またはSaaSアプリケーション410にアクセスすることができる任意のタイプのコンピューティングデバイスであり得、たとえば、様々なデスクトップまたはラップトップコンピュータ、スマートフォン、タブレットなどを含み得る。リソースフィード406は、多数のリソースタイプのいずれかを含むことができ、多数の位置のいずれかから提供され得る。いくつかの実施形態では、たとえば、リソースフィード406は、仮想アプリケーションおよび/またはデスクトップをクライアント202に提供するための1つまたは複数のシステムまたはサービスと、1つまたは複数のファイルリポジトリおよび/またはファイル共有システムと、1つまたは複数の安全なブラウザサービスと、SaaSアプリケーション410のための1つまたは複数のアクセス制御サービスと、クライアント202におけるローカルアプリケーションのための1つまたは複数の管理サービスと、1つまたは複数のインターネット対応デバイスまたはセンサなどを含み得る。リソース管理サービス402、リソースフィード406、ゲートウェイサービス408、SaaSアプリケーション410およびアイデンティティプロバイダ412の各々は、組織のオンプレミスデータセンタ内に配置され得、そのために、システム400は、1つまたは複数のクラウドコンピューティング環境内、または他の場所において展開される。
【0049】
[0067]図4Bは、様々なリソース管理サービス402およびゲートウェイサービス408がクラウドコンピューティング環境414内に配置されている、図4Aに示されるシステム400の例示的な実施形態を示すブロック図である。クラウドコンピューティング環境は、たとえば、Microsoft Azure Cloud、Amazon Web Services、Google Cloud、またはIBM Cloudを含み得る。
【0050】
[0068]クラウドコンピューティング環境414内に基づかない図示された(クライアント202以外の)構成要素のいずれかについて、クラウドコネクタ(図4Bには示されていない)を使用して、それらの構成要素を、クラウドコンピューティング環境414と相互接続させることができる。そのようなクラウドコネクタは、たとえば、リソース位置においてホストされているWindows Serverインスタンスで実行でき、サイトと、クラウドコンピューティング環境414との間でトラフィックをルーティングするためのリバースプロキシを生成できる。例示される例では、クラウドベースのリソース管理サービス402は、クライアントインターフェースサービス416、アイデンティティサービス418、リソースフィードサービス420、およびシングルサインオンサービス422を含む。図示されるように、いくつかの実施形態では、クライアント202は、リソースアクセスアプリケーション424を使用して、クライアントインターフェースサービス416と通信し、ならびにユーザ426がリソースフィード406および/またはSaaSアプリケーション410にアクセスするために動作できるクライアント202上にユーザインターフェースを提示し得る。リソースアクセスアプリケーション424は、クライアント202にインストールされ得るか、またはクライアントインターフェースサービス416(またはシステム400におけるどこか)によって実行され、クライアント202上でウェブブラウザ(図4Bには示されていない)を使用してアクセスされ得る。たとえば、Citrix Cloudの場合、いくつかの実施形態では、リソースアクセスアプリケーション424は、Citrix Workspace Appであり得、領域ベースの取消/再実行を伴うテキスト処理を提供するようにプログラムされるか、さもなければ構成され得る。領域ベースの取消/再実行を伴うテキスト処理はさらに、少なくとも図5図17と併せて以下に説明される。
【0051】
[0069]以下でより詳細に説明するように、いくつかの実施形態では、リソースアクセスアプリケーション424および関連付けられた構成要素は、ユーザ426に、すべてのユーザのSaaSおよびウェブアプリケーション、ファイル、仮想Windowsアプリケーション、仮想Linux(登録商標)アプリケーション、デスクトップ、モバイルアプリケーション、Citrix Virtual AppsおよびDesktops(商標)、ローカルアプリケーション、ならびに他のデータへの即時かつシームレスなアクセスを可能にするパーソナライズされたオールインワンインターフェースを提供し得る。
【0052】
[0070]リソースアクセスアプリケーション424が起動されるか、さもなければユーザ426によってアクセスされるとき、クライアントインターフェースサービス416は、サインオン要求をアイデンティティサービス418に送信し得る。いくつかの実施形態では、アイデンティティプロバイダ412は、システム400が展開されている組織の構内に配置され得る。アイデンティティプロバイダ412は、たとえば、オンプレミスのWindows Active Directoryに対応し得る。そのような実施形態では、アイデンティティプロバイダ412は、上記で説明したようなクラウドコネクタ(図4Bには示されていない)を使用して、クラウドベースのアイデンティティサービス418に接続され得る。サインオン要求を受信すると、アイデンティティサービス418は、(クライアントインターフェースサービス416を介して)リソースアクセスアプリケーション424に対して、ユーザ426に、ユーザの認証資格情報(たとえば、ユーザ名およびパスワード)を促させることができる。ユーザの認証資格情報を受信すると、クライアントインターフェースサービス416は、資格情報をアイデンティティサービス418に渡すことができ、アイデンティティサービス418は、今度は、たとえば、それらをActive Directory領域と比較することによって、認証のためにそれらをアイデンティティプロバイダ412に転送することができる。アイデンティティサービス418が、ユーザのアイデンティティが適切に認証されたという確認をアイデンティティプロバイダ412から受信すると、クライアントインターフェースサービス416は、ユーザ426について申し込まれたリソースのリストを求める要求を、リソースフィードサービス420に送信することができる。
【0053】
[0071](図4Bには示されていない)他の実施形態では、アイデンティティプロバイダ412は、Microsoft Azure Active Directoryなどのクラウドベースのアイデンティティサービスであり得る。そのような実施形態では、クライアントインターフェースサービス416からサインオン要求を受信すると、アイデンティティサービス418は、認証プロセスの完了のために、クライアントインターフェースサービス416を介して、クライアント202を、クラウドベースのアイデンティティサービスにリダイレクトさせることができる。クラウドベースのアイデンティティサービスは、その後、クライアント202に、ユーザ426にユーザの認証資格情報を入力するように促させることができる。ユーザのアイデンティティが適切に認証されたと判定すると、クラウドベースのアイデンティティサービスは、認証の試みが成功したことを示すメッセージを、リソースアクセスアプリケーション424に送信し得、リソースアクセスアプリケーション424は、その後、クライアントインターフェースサービス416に、認証の成功を通知し得る。アイデンティティサービス418が、ユーザのアイデンティティが適切に認証されたという確認をクライアントインターフェースサービス416から受信すると、クライアントインターフェースサービス416は、ユーザ426のために申し込まれたリソースのリストを求める要求を、リソースフィードサービス420に送信し得る。
【0054】
[0072]構成されたリソースフィードごとに、リソースフィードサービス420は、シングルサインオンサービス422からアイデンティティトークンを要求し得る。リソースフィードサービス420は、その後、受信するフィード固有のアイデンティティトークンを、それぞれのリソースフィード406の認証ポイントに渡し得る。各リソースフィード406は、その後、それぞれのアイデンティティのために構成されたリソースのリストで応答し得る。リソースフィードサービス420は、その後、異なるフィードからのすべての項目を集約し、それらをクライアントインターフェースサービス416に転送することができ、これにより、リソースアクセスアプリケーション424は、クライアント202のユーザインターフェースに、利用可能なリソースのリストを提示することができる。利用可能なリソースのリストは、たとえば、クライアント202のユーザインターフェースに、アクセス可能なリソースに対応する選択可能なアイコンまたは他の要素のセットとして提示され得る。そのように識別されたリソースは、たとえば、1つまたは複数の仮想アプリケーションおよび/またはデスクトップ(たとえば、Citrix Virtual AppsおよびDesktops(商標)、VMware Horizon、Microsoft RDSなど)、1つまたは複数のファイルリポジトリおよび/またはファイル共有システム(たとえば、Sharefile(登録商標))、1つまたは複数の安全なブラウザ、1つまたは複数のインターネット対応デバイスもしくはセンサ、クライアント202にインストールされた1つまたは複数のローカルアプリケーション、および/または、ユーザ426が申し込んだ1つまたは複数のSaaSアプリケーション410を含み得る。ローカルアプリケーションおよびSaaSアプリケーション410のリストは、たとえば、リソースアクセスアプリケーション424を介してユーザ426に対して利用可能とされるそのようなアプリケーションを管理するそれぞれのサービスのためのリソースフィード406によって供給され得る。管理およびアクセスされ得るSaaSアプリケーション410の例は、本明細書で説明するように、Microsoft Office 365アプリケーション、SAP SaaSアプリケーション、Workdayアプリケーションなどを含む。
【0055】
[0073]ローカルアプリケーションおよびSaaSアプリケーション410以外のリソースの場合、ユーザ426が、リストされた利用可能なリソースのうちの1つのリソースを選択すると、リソースアクセスアプリケーション424は、クライアントインターフェースサービス416に、指定されたリソースを求める要求を、リソースフィードサービス420に転送させることができる。そのような要求を受信することに応じて、リソースフィードサービス420は、シングルサインオンサービス422からの対応するフィードのアイデンティティトークンを要求し得る。リソースフィードサービス420は、その後、シングルサインオンサービス422から受信したアイデンティティトークンを、クライアントインターフェースサービス416に渡すことができ、ここでは、リソースの起動チケットが生成され、リソースアクセスアプリケーション424に送信され得る。起動チケットを受信すると、リソースアクセスアプリケーション424は、ゲートウェイサービス408への安全なセッションを開始し、起動チケットを提示し得る。ゲートウェイサービス408は、起動チケットとともに提示されると、適切なリソースフィードへの安全なセッションを開始し、そのフィードにアイデンティティトークンを提示して、ユーザ426をシームレスに認証することができる。セッションが初期化されると、クライアント202は、選択されたリソースへのアクセスに進み得る。
【0056】
[0074]ユーザ426がローカルアプリケーションを選択すると、リソースアクセスアプリケーション424は、選択されたローカルアプリケーションをクライアント202において起動させ得る。ユーザ426がSaaSアプリケーション410を選択すると、リソースアクセスアプリケーション424は、クライアントインターフェースサービス416に、ゲートウェイサービス408からのワンタイムユニフォームリソースロケータ(URL)、ならびにSaaSアプリケーション410へのアクセスに使用するための優先ブラウザを要求させることができる。ゲートウェイサービス408がワンタイムURLを返し、優先ブラウザを識別した後、クライアントインターフェースサービス416は、その情報を、リソースアクセスアプリケーション424に渡し得る。クライアント202は、その後、識別されたブラウザを起動し、ゲートウェイサービス408への接続を開始し得る。ゲートウェイサービス408は、その後、シングルサインオンサービス422からのアサーションを要求し得る。アサーションを受信すると、ゲートウェイサービス408は、クライアント202において識別されたブラウザを、識別されたSaaSアプリケーション410のログオンページにリダイレクトさせ、アサーションを提示することができる。SaaSは、その後、ゲートウェイサービス408に連絡して、アサーションを検証し、ユーザ426を認証することができる。ユーザが認証されると、識別されたブラウザと、選択されたSaaSアプリケーション410との間で直接通信が行われ得、したがって、ユーザ426は、クライアント202を使用して、選択されたSaaSアプリケーション410にアクセスすることができる。
【0057】
[0075]いくつかの実施形態では、ゲートウェイサービス408によって識別される優先ブラウザは、(リソースアプリケーションがクライアント202にインストールされている場合)リソースアクセスアプリケーション424に埋め込まれた、または(リソースアプリケーション424がリモートに配置されている場合)、たとえば、安全なブラウザサービスを介して、リソースフィード406のうちの1つによって提供された専用ブラウザであり得る。そのような実施形態では、SaaSアプリケーション410は、埋め込みブラウザに1つまたは複数の制限を実施するために、強化されたセキュリティポリシを組み込むことができる。そのようなポリシの例は、(1)専用ブラウザの使用を要求し、他のローカルブラウザの使用を無効にすること、(2)たとえば、アプリケーションとクリップボードとの間の切り取り/複写/貼り付け操作を無効にすることによって、クリップボードへのアクセスを制限すること、(3)たとえば、ブラウザ内から印刷機能を無効にすることによって、印刷を制限すること、(3)たとえば、ブラウザの次へボタンおよび/または戻るボタンを無効にすることによって、ナビゲーションを制限すること、(4)たとえば、SaaSアプリケーション内からダウンロードする機能を制限することによって、ダウンロードを制限すること、および、(5)たとえば、ユーザがスクリーンショットを印刷または撮影しようとすると、透かしが表示面に表示されるように表示面ベースの透かしをオーバレイすることによって、クライアント202に関連付けられたユーザ名およびIPアドレスを示す透かしを表示することを含む。さらに、いくつかの実施形態では、ユーザがSaaSアプリケーション内でハイパーリンクを選択すると、専用ブラウザは、ウェブフィルタリングサービスによるセキュリティリスクの評価のために、リンクのURLを(たとえば、リソースフィード406のうちの1つとして実施される)アクセス制御サービスに送信し得る。承認されたURLについて、専用ブラウザは、リンクへのアクセスを許可され得る。しかしながら、疑わしいリンクについては、ウェブフィルタリングサービスは、クライアントインターフェースサービス416に対して、リンクを安全なブラウザサービスに送信させることができ、安全なブラウザサービスは、クライアント202との新しい仮想ブラウザセッションを開始し、したがって、ユーザは、潜在的に有害なリンクされたコンテンツに、安全な環境において、アクセスできるようにすることができる。
【0058】
[0076]いくつかの実施形態では、上記で説明したように、個別にアクセスするために利用可能なリソースのリストをユーザ426に提供することに加えて、またはその代わりに、ユーザ426は、代わりに、リソースのうちの1つまたは複数に関して自動的に検出されるイベントに関して講じられる可能性のあるイベント通知および/または利用可能なアクションの、効率化されたフィードにアクセスすることを選択することを許可され得る。この効率化されたリソースアクティビティフィードは、ユーザ426ごとにカスタマイズでき、ユーザは、SaaSアプリケーション、ウェブアプリケーション、Windowsアプリケーション、Linuxアプリケーション、デスクトップ、ファイルリポジトリおよび/またはファイル共有システム、および他のデータといったリソースのすべてに関連する重要なアクティビティを、単一のインターフェースを介して、コンテキストをあるリソースから別のリソースに切り替える必要なく、監視することができる。さらに、リソースアクティビティフィードにおけるイベント通知には、たとえば、「承認」、「拒否」、「詳細表示」ボタンなどの、ユーザインターフェース要素の個別のセットが付随している場合があり、ユーザは、ユーザのフィード内に確かにある各イベントに関して、1つまたは複数の単純なアクションを実行できる。いくつかの実施形態では、そのような効率化されたインテリジェントなリソースアクティビティフィードは、APIなどを使用して、基礎となる関連付けられたリソースとインターフェースできる1つまたは複数のマイクロアプリケーション、または「マイクロアプリ」によって可能とされ得る。応答的なアクションは、マイクロアプリ内で行われ、APIまたは他のインターフェースを介して、基となるアプリケーションに入力を提供する、ユーザが開始したアクティビティであり得る。マイクロアプリ内でユーザが実行するアクションは、たとえば、特定の一般的な問題や使用例にすばやく簡単に対処するように設計され得、(たとえば、個人的な休暇の要求、ヘルプデスクチケットの発行など)ユーザの生産性が向上する。いくつかの実施形態では、そのようなイベント駆動型マイクロアプリからの通知は、追加的または代替的に、クライアント202にプッシュされて、ユーザの注意を必要とする何か(たとえば、経費報告書の承認、登録に利用可能な新しいコースなど)をユーザ426に通知することができる。
【0059】
[0077]図4Cは、図4Bに示されているものと同様のブロック図であるが、利用可能なリソース(たとえば、SaaSアプリケーション、ウェブアプリケーション、Windowsアプリケーション、Linuxアプリケーション、デスクトップ、ファイルリポジトリ、および/またはファイル共有システム、および他のデータ)は、「記録システム」との名称が付された単一のブロック428で表され、さらに、いくつかの異なるサービスが、リソース管理サービスブロック402内に含まれる。以下に説明するように、図4Cに示されるサービスは、クライアント202のための効率化されたリソースアクティビティフィードおよび/または通知プロセスのプロビジョンを可能にし得る。示されている例では、上記で議論されたクライアントインターフェースサービス416に加えて、示されているサービスは、マイクロアプリサービス430、データ統合プロバイダサービス432、資格情報ウォレットサービス434、アクティブデータキャッシュサービス436、分析サービス438および通知サービス440を含む。様々な実施形態において、図4Cに示されるサービスは、図4Bに示される異なるサービスに加えて、またはその代わりに適用され得る。
【0060】
[0078]いくつかの実施形態では、マイクロアプリは、複雑なエンタプライズアプリケーションからの機能を効率化するためにユーザが利用できるようにされた単一の使用例であり得る。マイクロアプリは、たとえば、SaaS、ウェブ、または自社開発のアプリケーション内で利用可能なAPIを利用して、ユーザがアプリケーションを完全に起動したり、コンテキストを切り替えたりする必要なく、コンテンツを見ることができるようにする。そのようなマイクロアプリがない場合、ユーザは、アプリケーションを起動し、実行する必要のあるアクションに移動してから、アクションを実行する必要がある。マイクロアプリは、頻繁に実行されるアクションのルーチンタスクを効率化し、ネイティブなアプリケーションを起動することなく、リソースアクセスアプリケーション424内でアクションを実行する機能をユーザに提供することができる。図4Cに示されるシステムは、たとえば、関連する通知、タスクおよび洞察を集約し、それによって、ユーザ426に、動的で生産的なツールを与えることができる。いくつかの実施形態では、リソースアクティビティフィードは、機械学習および人工知能(AI)アルゴリズムを利用することによって、インテリジェントに投入され得る。さらに、いくつかの実施では、マイクロアプリは、クラウドコンピューティング環境414内で構成され得、したがって、管理者に、追加のインフラストラクチャを必要とせずに、より生産的なワークフローを作成するための強力なツールを与える。マイクロアプリは、ユーザにプッシュされるか、ユーザによって開始されるかに関わらず、完全なエンタプライズアプリケーションを開く必要がある主要なタスクを簡素化および効率化するショートカットを提供できる。いくつかの実施形態では、すぐに使えるテンプレートにより、APIアカウント許可を有する管理者は、彼らのニーズに標的を絞ったマイクロアプリソリューションを構築することができる場合がある。管理者はまた、いくつかの実施形態において、カスタムマイクロアプリを構築するために必要なツールを提供され得る。
【0061】
[0079]図4Cを参照して示すように、記録システム428は、リソース管理サービス402がインタラクトしてマイクロアプリを生成することができるアプリケーションおよび/または他のリソースを表すことができる。これらのリソースは、SaaSアプリケーション、レガシーアプリケーション、または自社開発のアプリケーションであり得、オンプレミスまたはクラウドコンピューティングの環境内でホストされ得る。複数のアプリケーション用のすぐに使えるテンプレートを備えたコネクタが提供され得、他のアプリケーションとの統合が、追加的または代替的に、マイクロアプリページビルダを介して構成され得る。そのようなマイクロアプリページビルダは、たとえば、マイクロアプリのアクションを介して、効率化されたユーザワークフローを作成することにより、レガシー、オンプレミス、およびSaaSのシステムに接続できる。リソース管理サービス402、特に、データ統合プロバイダサービス432は、たとえば、REST API、JSON、OData-JSON、および6MLをサポートすることができる。以下でより詳細に説明するように、データ統合プロバイダサービス432はまた、たとえば、OAuth2またはサービスアカウントを使用して、記録システムに書き戻すことができる。
【0062】
[0080]いくつかの実施形態では、マイクロアプリサービス430は、マイクロアプリの生成を担当する単一のテナントサービスであり得る。マイクロアプリサービス430は、記録システム428から引き出された生のイベントを、処理のために分析サービス438に送信することができる。マイクロアプリサービスは、たとえば、記録システム428からアクティブデータを定期的に引き出すことができる。
【0063】
[0081]いくつかの実施形態では、アクティブデータキャッシュサービス436は、単一のテナントであり得、すべての構成情報およびマイクロアプリデータを格納し得る。たとえば、テナントごとのデータベース暗号鍵と、テナントごとのデータベース資格情報とを利用できる。
【0064】
[0082]いくつかの実施形態では、資格情報ウォレットサービス434は、記録システム428およびユーザOAuth2トークンのための暗号化されたサービス資格情報を格納し得る。
【0065】
[0083]いくつかの実施形態では、データ統合プロバイダサービス432は、記録システム428とインタラクトして、エンドユーザの資格情報を復号し、エンドユーザのアイデンティティの下で、記録システム428にアクションを書き戻すことができる。書き戻しアクションは、たとえば、ユーザの実際のアカウントを利用して、実行されるすべてのアクションが、インタラクトするアプリケーションまたは他のリソースのデータポリシに準拠していることを確認できる。
【0066】
[0084]いくつかの実施形態では、分析サービス438は、マイクロアプリサービス430から受信した生のイベントを処理して、標的を絞ったスコア付き通知を作成し、そのような通知を通知サービス440に送信することができる。
【0067】
[0085]最後に、いくつかの実施形態では、通知サービス440は、分析サービス438から受信する任意の通知を処理することができる。いくつかの実施形態では、通知サービス440は、通知をデータベースに格納して、後に、通知フィードで提供することができる。他の実施形態では、通知サービス440は、追加的または代替的に、この通知を、ユーザ426へのプッシュ通知として、クライアント202に直ちに送信することができる。
【0068】
[0086]いくつかの実施形態では、記録システム428と同期し、通知を生成するためのプロセスは、以下のように動作し得る。マイクロアプリサービス430は、資格情報ウォレットサービス434から、記録システム428の暗号化されたサービスアカウント資格情報を検索し、データ統合プロバイダサービス432との同期を要求することができる。データ統合プロバイダサービス432は、その後、サービスアカウント資格情報を復号し、それらの資格情報を使用して、記録システム428からデータを検索することができる。データ統合プロバイダサービス432は、その後、検索されたデータをマイクロアプリサービス430に流すことができる。マイクロアプリサービス430は、受信した記録システムデータを、アクティブデータキャッシュサービス436に格納し、生のイベントを、分析サービス438に送信することもできる。分析サービス438は、標的を絞ったスコア付き通知を作成し、そのような通知を通知サービス440に送信することができる。通知サービス440は、この通知をデータベースに格納して、後に、通知フィードでサービス提供することができ、および/または、この通知を、ユーザ426へのプッシュ通知としてクライアント202に直ちに送信することができる。
【0069】
[0087]いくつかの実施形態では、マイクロアプリを介して、ユーザが開始したアクションを処理するためのプロセスは、以下のように動作することができる。クライアント202は、マイクロアプリサービス430から(クライアントインターフェースサービス416を介して)データを受信して、マイクロアプリに対応する情報をレンダリングすることができる。マイクロアプリサービス430は、そのレンダリングをサポートするために、アクティブデータキャッシュサービス436からデータを受信することができる。ユーザ426は、マイクロアプリからアクションを呼び出すことができ、リソースアクセスアプリケーション424に、そのアクションを(クライアントインターフェースサービス416を介して)マイクロアプリサービス430に送信させる。マイクロアプリサービス430は、その後、資格情報ウォレットサービス434から、アクションが呼び出される記録システムの暗号化されたOauth2トークンを検索することができ、暗号化されたOath2トークンとともにデータ統合プロバイダサービス432にアクションを送信することができる。データ統合プロバイダサービス432は、その後、Oath2トークンを復号し、ユーザ426のアイデンティティの下で適切な記録システムにアクションを書き込むことができる。データ統合プロバイダサービス432は、その後、書き込まれた記録システムから、変更されたデータを読み戻し、その変更されたデータを、マイクロアプリサービス430に送信することができる。マイクロアプリサービス432は、その後、アクティブデータキャッシュサービス436を、更新されたデータで更新し、アクションが正常に完了したことをユーザ426に通知するメッセージを、(クライアントインターフェースサービス416を介して)リソースアクセスアプリケーション424に送信させることができる。
【0070】
[0088]いくつかの実施形態では、上記で説明した機能に加えて、またはその代わりに、リソース管理サービス402は、すべてのファイルおよびアプリケーション全体にわたって関連情報を検索する機能をユーザに提供することができる。単純なキーワード検索は、たとえば、アプリケーションリソース、SaaSアプリケーション、デスクトップ、ファイルなどを見つけるために使用できる。この機能は、アプリケーションとデータの無秩序な増加がすべての組織全体に蔓延しているため、ユーザの生産性と効率を向上させる可能性がある。
【0071】
[0089]他の実施形態では、上記で説明した機能に加えて、またはその代わりに、リソース管理サービス402は、ユーザが生産性を維持し、迅速なアクションを講じることを可能にする仮想支援機能を可能にし得る。ユーザは、たとえば、「仮想アシスタント」とインタラクトして、「ボブスミスの電話番号は?」または「どれが私の承認待ちですか?」などの質問をすることができる。リソース管理サービス402は、バックエンド上の複数のシステムと統合されているので、たとえば、これらの要求を解析し、応答することができる。いくつかの実施形態では、ユーザは、リソースアクセスアプリケーション424を介して、またはMicrosoft Teamsなどの別のリソースから直接、仮想支援とインタラクトできる場合がある。この機能により、従業員は効率的に作業し、体系化された状態を保ち、探索している特定の情報のみを提供できるようになる。
【0072】
[0090]図5は、本開示の実施形態による、文書504内の例示的な動的領域506、508、510を示すブロック図である。たとえば、図5に示されるように、ユーザは、図4のコンピューティングデバイス400などの適切なコンピューティングデバイスにおいて実行される、テキスト編集アプリケーション502を使用して、文書504を編集することができる。図5に示されるように、文書504に対するユーザの編集に応じて、アプリケーション502は、動的領域A506、動的領域B508および動的領域C510を作成することができる。動的領域506、508、510は、1つまたは複数の編集が文書に対して行われた、文書504内のそれぞれの領域を定める。一般に、動的領域506、508、510は、一旦作成されると、領域は、文書に対して行われた追加の編集に基づいて、文書内のサイズおよび/または位置において調整、または、そうでなければ変更できるという意味で「動的」である。たとえば、動的領域A506は、ユーザによって行われる1つまたは複数の編集を含むまたはホストする文書504内の領域を定め、動的領域B508は、ユーザによって行われる1つまたは複数の編集を含むまたはホストする文書504内の領域を定め、動的領域C510は、ユーザによって行われる1つまたは複数の編集を含むまたはホストする文書504内の領域を定める。この目的のために、動的領域506、508、510は、それぞれの動的領域開始値および動的領域終了値を使用して定められ得る。動的領域開始値は、特定の動的領域が開始する文書504の行番号を示し、動的領域終了値は、特定の動的領域が終了する文書504の行番号を示す。また、図5にさらに示されるように、文書504内で、動的領域A506は、動的領域C510の上に位置する動的領域B508の上に位置している。明確にするために、図5には3つの動的領域のみが示されているが、アプリケーション502は、文書504内でユーザによって行われる編集の位置に基づいて、文書504内に任意の数の動的領域を作成できることが理解されよう。
【0073】
[0091]依然として図5を参照して示すように、動的領域506、508、510は、取消スタックおよび再実行スタックを有する。たとえば、示されるように、動的領域A506は、取消スタック506aおよび再実行スタック506bを有し、動的領域B508は、取消スタック508aおよび再実行スタック508bを有し、動的領域C510は、取消スタック510aおよび再実行スタック510bを有する。取消スタック506a、508a、510aおよび再実行スタック506b、508b、510bは、それぞれ、文書504に対して実行される編集操作および取消操作を格納する後入れ先出し(LIFO)データ構造として実施され得る。たとえば、動的領域A506において編集操作が実行されると、編集アクションは、取消スタック506aの最上位にプッシュされる。同様に、編集操作が動的領域B508で実行されると、編集アクションは、取消スタック508aの最上位にプッシュされ、編集操作が動的領域C510で実行されると、編集アクションは、取消スタック510aの最上位にプッシュされる。
【0074】
[0092]ユーザが、動的領域において、取消アクションをトリガすると、動的領域の取消スタックの最上位における編集アクションがポップされ(すなわち、取消スタックの最上位から削除され)、ポップされた編集アクションの逆が実行され、取消スタックからポップされた編集アクションが、動的領域の再実行スタックの最上位にプッシュ(すなわち、配置)される。編集アクションを取り消すために、ポップされた編集アクションの逆が実行されることに留意されたい。また、取消スタックからポップされた編集アクションを、再実行スタックの最上位にプッシュすると、取り消された編集アクションを、後で再実行することができる。たとえば、取消アクションが動的領域A506でトリガされると、取消スタック506aの最上位における編集アクションがポップされ、ポップされた編集アクションの逆が実行され、取消スタック506aからポップされた編集アクションが、再実行スタック506bの最上位にプッシュされる。同様に、取消アクションが動的領域B508でトリガされると、取消スタック508aの最上位における編集アクションがポップされ、ポップされた編集アクションの逆が実行され、取消スタック508aからポップされた編集アクションが、再実行スタック508bの最上位にプッシュされ、取消アクションが動的領域C510でトリガされると、取消スタック510aの最上位における編集アクションがポップされ、ポップされた編集アクションの逆が実行され、取消スタック510aからポップされた編集アクションが、再実行スタック510bの最上位にプッシュされる。
【0075】
[0093]ユーザが、動的領域において、再実行アクションをトリガすると、動的領域の再実行スタックの最上位にある編集アクションがポップされ、ポップされた編集アクションが実行され、再実行スタックからポップされた編集アクション(すなわち、実行された再実行アクション)が、動的領域の取消の最上位にプッシュされる。たとえば、再実行アクションが動的領域A506でトリガされると、再実行スタック506bの最上位の編集アクションがポップされ、ポップされた編集アクションが実行され、実行された編集アクションが、取消スタック506aの最上位にプッシュされる。同様に、再実行アクションが動的領域B508でトリガされると、再実行スタック508bの最上位の編集アクションがポップされ、ポップされた編集アクションが実行され、実行された編集アクションが、取消スタック508aの最上位にプッシュされ、再実行アクションが動的領域C510でトリガされると、再実行スタック510bの最上位の編集アクションがポップされ、ポップされた編集アクションが実行され、実行された編集アクションが、取消スタック510aの最上位にプッシュされる。文書内に個別の動的領域を生成し、個別の動的領域に対してそれぞれの取消スタックおよび再実行スタックを維持した結果、文書に対して行われたすべての編集の観点から、動的領域全体にわたる不連続的な取消操作を実行できる。しかしながら、動的領域内では、1つの取消スタックと、1つの再実行スタックとが、動的領域内で行われた編集を格納するために使用されるため、取消操作および再実行操作は連続的である。
【0076】
[0094]図6は、本開示の実施形態による、例示的な動的領域データ構造600の図である。実施形態では、テキスト編集アプリケーション502は、文書内に作成された動的領域のそれぞれの動的領域データ構造600を生成および維持することができる。たとえば、実施では、テキスト編集アプリケーション502は、ユーザが最初に文書内の1つまたは連続した行を変更したときに、文書内に動的領域を作成することができる。テキスト編集アプリケーション502は、ユーザが動的領域において行われたすべての変更を取り消すと、文書に作成された動的領域を削除(すなわち、消去)することができる。テキスト編集アプリケーション502は、ユーザが、近くの動的領域全体にわたって変更を行う場合、文書内の近くのまたは隣接する動的領域を、単一の動的領域にマージ(すなわち、結合)することができる。テキスト編集アプリケーション502は、ユーザが、2つの近くの動的領域のマージを引き起こした変更を取り消した場合、文書内の動的領域を、2つの近くの動的領域に分離することができる。
【0077】
[0095]図6に示すように、動的領域データ構造600は、領域開始値、領域終了値および領域オフセット値を含む。領域開始値は、動的領域データ構造600によって定められる動的領域の相対的な開始行番号を示す。領域終了値は、動的領域データ構造600によって定められる動的領域の相対的な終了行番号を示す。領域オフセット値は、動的領域データ構造600によって定められる動的領域内の行番号オフセット値を示す。領域オフセット値は、正の値(すなわち、正の行数のオフセット値)または負の値(すなわち、負の行数のオフセット値)であり得る。編集依存関係の問題は、特定の動的領域において行が追加または削除され、この特定の動的領域の下にある文書の行番号が、特定の動的領域において追加または削除される行数の影響を受ける場合に発生する可能性がある。このような場合、特定の動的領域の下にある動的領域における対応する行番号は、特定の動的領域において追加または削除される行数を考慮して調整される必要がある。つまり、行番号は、追加または削除が行われることに基づいて変更される場合がある。したがって、行番号は、行われている編集に依存していると言われる。この目的のために、特定の動的領域の下の動的領域のそれぞれの領域オフセット値は、特定の動的領域において追加または削除された行を考慮して更新される。したがって、領域オフセット値は、文書内で作成された動的領域全体にわたる編集依存関係の問題を解決するために使用される。
【0078】
[0096]領域開始値および領域終了値は、これらの値が、文書内の動的領域の実際の(すなわち、現実の)開始行番号および終了行番号を示さない場合があるという点で、相対値であり得る。言い換えると、領域開始値および領域終了値は、編集セッション中の所与の時点での文書内の動的領域の実際の位置を示していない場合がある。むしろ、文書内の動的領域の実際の開始行番号は、領域開始値と領域オフセット値との合計(領域開始値+領域オフセット値)として計算、さもなければ決定され得る。同様に、文書内の動的領域の実際の終了行番号は、領域終了値と領域オフセット値との合計(領域終了値+領域オフセット値)として計算、さもなければ決定され得る。たとえば、文書内の動的領域が、8である領域開始値、10である領域終了値、および1である領域オフセット値によって定められていると仮定する。この場合、文書内の動的領域の実際の開始行番号は9行目(8+1)であり、動的領域の実際の終了行番号は11行目(10+1)である。上記の例では、領域オフセット値が-2であると仮定する。この場合、文書内の動的領域の実際の開始行番号は6行目(8-2)であり、動的領域の実際の終了行番号は8行目(10-2)である。
【0079】
[0097]図7は、本開示の実施形態による、例示的な編集操作記録700の図である。実施形態では、テキスト編集アプリケーション502は、文書編集セッション中に実行される編集操作のために、それぞれの編集操作記録700を生成および維持することができる。示されるように、編集操作記録700は、編集操作の説明、行開始値、行終了値およびオプションとしての変更番号値を含む。編集操作の説明は、編集操作によって文書になされた編集または変更を定めるか、さもなければ説明する。行開始値は、編集操作によって変更された(すなわち、影響を受けた)文書の開始行番号を示す。行終了値は、編集操作によって変更された文書の終了行番号を示す。言い換えれば、行開始値は、編集操作が開始される文書内の位置(すなわち、行番号)を示し、行終了値は、編集操作が終了する文書内の位置(すなわち、行番号)を示す。たとえば、編集操作が、文書内の7行目および8行目を変更した場合、行開始値を7に設定し、行終了値を8に設定できる。オプションとしての変更番号値は、編集セッションにおける編集操作を一意に識別する値である。たとえば、編集操作が編集セッション中に実行される7番目の編集操作である場合、変更番号値は7に設定され得る。
【0080】
[0098]図8A図8Eは、本開示の実施形態にしたがって、文書編集セッション中に実行される編集操作を処理する際の動的領域データ構造の例示的な操作を示す。テキスト編集アプリケーション502は、動的領域データ構造を使用して、文書編集セッション中の動的領域の生成および操作を管理することができる。例示的な使用例および実施形態では、ユーザは、テキスト編集アプリケーション502を使用して、文書のコンテンツにアクセスして編集することができる。ユーザによる文書編集セッションの開始時に、テキスト編集アプリケーション502は、文書における任意の動的領域なしで初期化または開始する。
【0081】
[0099]たとえば、編集セッションの開始時に、ユーザは、文書の1行目のテキストに対する編集を行うことができる。1行目への編集を検出することに応じて、テキスト編集アプリケーション502(図5)は、1行目への編集から生じる文書への変更を記録するために編集操作記録810を作成することができる。この目的のために、図8Aに見られるように、テキスト編集アプリケーション502は、編集操作記録810に、(図8AにおいてC1と示される)1行目への変更の説明を含み、行開始値を1行目(LS:1)に、行終了値を1行目(LE:1)に設定することができる。結果として生じる変更は単一行(1行目)であるため、行開始値は行終了値と同じである。
【0082】
[00100]実施において、テキスト編集アプリケーション502は、オプションのグローバル変更スタック802に編集操作記録810を格納することができる。テキスト編集アプリケーション502は、グローバル変更スタック802を使用して、編集セッション中に実行された編集操作の履歴を記録することができる。この目的のために、新しい編集操作が実行されると、テキスト編集アプリケーション502は、新しい編集操作に対応する編集操作記録を、グローバル変更スタック802の最上位に追加することができる。
【0083】
[00101]テキスト編集アプリケーション502はまた、編集操作(すなわち、1行目への変更)が、文書内の既存の動的領域に、または既存の動的領域のしきい範囲内に存在するか、さもなければ発生するのかを判定するためにチェックし得る。実施形態では、動的領域のしきい範囲は、以下によって定められ得る。
[領域開始値+領域オフセット値-1、領域終了値+領域オフセット値+1]
しきい範囲は、文書内の動的領域の実際の開始からの行数と、動的領域の実際の終了からの行数とを指定する。たとえば、上記で指定された範囲によれば、動的領域のしきい範囲は、文書内の動的領域の実際の開始前の1行(領域開始値+領域オフセット値-1)から、動的領域の実際の終了後の1行(領域終了値+領域オフセット値+1)までである。編集が動的領域のしきい範囲内にある場合、テキスト編集アプリケーション502は、編集が動的領域内で変更をもたらすかのように編集を処理する。他の実施形態では、しきい範囲は、動的領域の実際の開始および実際の終了からの、たとえば、2つ、3つ、または他の任意の適切な値などの異なる行数であり得る。さらに、しきい範囲は、動的領域の実際の開始および動的領域の実際の終了からの異なる行数を指定することができる。たとえば、しきい範囲は、動的領域の実際の開始から1行、動的領域の実際の終了から2行を指定できる。
【0084】
[00102]この時点で、文書内に動的領域が作成されていないので、テキスト編集アプリケーション502は、この編集操作(すなわち、1行目への変更)のために動的領域Aを作成することができる。この目的のために、図8Aに見られるように、テキスト編集アプリケーション502は、動的領域Aデータ構造804A、動的領域A取消スタック806Aおよび動的領域A再実行スタック808Aを作成することができる。
【0085】
[00103]動的領域Aデータ構造804Aは、1行目への編集をホストするために作成される動的領域Aを定める。したがって、テキスト編集アプリケーション502は、領域開始値を1行目(RS:1)に、領域終了値を1行目(RE:1)に、領域オフセット値をゼロ(Off:0)に設定することができる。言い換えれば、この時点で、動的領域Aは、1行目のみを含む。テキスト編集アプリケーション502は、編集操作記録810を、動的領域A取消スタック806Aの最上位にプッシュすることができる。動的領域Aにおいて最後に実行された編集操作として、編集操作(すなわち、編集操作記録810に記録された1行目への変更)は、動的領域A取消スタック806Aの最上位からポップされ、取り消すことができる。
【0086】
[00104]例示的な使用例を続けると、ユーザは、その後、文書の7行目のテキストを編集することができる。7行目への編集を検出することに応じて、テキスト編集アプリケーション502は、7行目への編集から生じる文書への変更を記録するために編集操作記録812を作成することができる。この目的のために、図8Bに見られるように、テキスト編集アプリケーション502は、編集操作記録812に、(図8BにおいてC2と示される)7行目への変更の説明を含み、行開始値を7行目(LS:7)に、行終了値を7行目(LE:7)に設定することができる。結果として生じる変更は単一行(7行目)であるため、行開始値は行終了値と同じである。
【0087】
[00105]テキスト編集アプリケーション502はまた、編集操作(すなわち、7行目への変更)が、文書内の既存の動的領域に、または既存の動的領域のしきい範囲内に存在するか、さもなければ発生するのかを判定するためにチェックし得る。この時点で、文書は、動的領域Aデータ構造804Aによって定められる動的領域Aを含む。テキスト編集アプリケーション502は、変更された7行目が動的領域Aのしきい範囲に、またはその範囲内にないことを判定することができる。この判定の結果として、テキスト編集アプリケーション502は、この編集操作(すなわち、7行目への変更)のための動的領域Bを作成することができる。この目的のために、図8Bに見られるように、テキスト編集アプリケーション502は、動的領域Bデータ構造804B、動的領域B取消スタック806B、および動的領域B再実行スタック808Bを作成することができる。動的領域Bデータ構造804Bは、7行目への編集をホストするために作成された動的領域Bを定める。したがって、テキスト編集アプリケーション502は、領域開始値を7行目(RS:7)に、領域終了値を7行目(RE:7)に、領域オフセット値をゼロ(Off:0)に設定することができる。言い換えると、この時点で、動的領域Bは、7行目のみを含む。テキスト編集アプリケーション502は、編集操作記録812を動的領域B取消スタック806Bの最上位にプッシュすることができる。動的領域Bにおいて最後に実行された編集操作として、編集操作(すなわち、編集操作記録812に記録された7行目への変更)は、動的領域B取消スタック806Bの最上位からポップされ、取り消すことができる。
【0088】
[00106]動的領域Aは、自身の動的領域A取消スタック806Aを有するので、編集操作記録810によって記録された1行目への編集は、動的領域A取消スタック806Aの最上位からポップされ、最初に7行目への編集を取り消す必要なしに、取り消すことができることに留意されたい。簡単に言うと、動的領域Aおよび動的領域Bは、独自の取消スタックを有するため、動的領域Bで実行された編集操作(7行目への変更)が、文書で実行された最後の編集操作となっても、動的領域Aで実行された最後の編集操作(1行目への変更)を取り消すことができる。その結果、文書内の動的領域全体にわたる取消操作が不連続的になる。
【0089】
[00107]例示的な使用例を続けると、ユーザは、その後、文書の20行目のテキストに対する編集を行うことができる。20行目への編集を検出することに応じて、テキスト編集アプリケーション502は、20行目への編集から生じる文書への変更を記録するために編集操作記録814を作成することができる。この目的のために、図8Cに見られるように、テキスト編集アプリケーション502は、編集操作記録814に、(図8CにおいてC3と示される)20行目への変更の説明を含め、行開始値を20行目(LS:20)に、行終了値を20行目(LE:20)に設定することができる。結果として生じる変更は単一行(20行目)であるため、行開始値は行終了値と同じである。
【0090】
[00108]テキスト編集アプリケーション502は、編集操作(すなわち、20行目への変更)が、文書内の既存の動的領域に、または既存の動的領域のしきい範囲内に存在するか、さもなければ発生するのかを判定するためにチェックし得る。この時点で、文書は、動的領域Aデータ構造804Aによって定められる動的領域Aと、動的領域Bデータ構造804Bによって定められる動的領域Bとを含む。テキスト編集アプリケーション502は、変更された20行目が、動的領域Aまたは動的領域Bのいずれかに、またはそのしきい範囲内にないことを判定することができる。この判定の結果として、テキスト編集アプリケーション502は、この編集操作(すなわち、20行目への変更)のために動的領域Cを作成することができる。
【0091】
[00109]この目的のために、図8Cに見られるように、テキスト編集アプリケーション502は、動的領域Cデータ構造804C、動的領域C取消スタック806C、および動的領域C再実行スタック808Cを作成することができる。動的領域Cデータ構造804Cは、20行目への編集をホストするために作成された動的領域Cを定める。したがって、テキスト編集アプリケーション502は、領域開始値を20行目(RS:20)に、領域終了値を20行目(RE:20)に、領域オフセット値をゼロ(Off:0)に設定することができる。言い換えると、この時点で、動的領域Cは、20行目のみを含む。テキスト編集アプリケーション502は、編集操作記録814を、動的領域C取消スタック806Cの最上位にプッシュすることができる。動的領域Cで最後に実行された編集操作として、編集操作(すなわち、編集操作記録814に記録された20行目への変更)は、動的領域C取消スタック806Cの最上位からポップされ、取り消すことができる。
【0092】
[00110]動的領域Aは、自身の動的領域A取消スタック806Aを有するので、編集操作記録810によって記録された1行目への編集は、動的領域A取消スタック806Aの最上位からポップされ、最初に20行目への編集を取り消す必要なしに、取り消すことができることに留意されたい。同様に、動的領域Bは、自身の動的領域B取消スタック806Bを有するので、編集操作記録812によって記録された7行目への編集は、動的領域B取消スタック806Bの最上位からポップされ、最初に20行目への編集を取り消す必要なしに、取り消すことができる。簡単に言うと、動的領域A、動的領域Bおよび動的領域Cは、それぞれ独自の取消スタックを有するため、動的領域Cで実行された編集操作(20行目への変更)が、文書において最後に実行された編集操作となっても、動的領域A(1行目への変更)および/または動的領域B(7行目への変更)において実行された最後の編集操作を、取り消すことができる。
【0093】
[00111]例示的な使用例を続けると、ユーザは、その後、文書に新しい3行目を追加する編集を行うことができる。たとえば、文書に新しい3行目を追加するには、ユーザは、文書の2行目の最後にキャリッジリターン(たとえば、改行)を入力するか、さもなければ配置することができる。言い換えると、文書内の新しい3行目の追加は、(キャリッジリターンを入力する)2行目の編集の結果である。2行目および3行目への編集を検出することに応じて、テキスト編集アプリケーション502は、2行目および3行目への編集から生じる文書への変更を記録するために編集操作記録816を作成することができる。
【0094】
[00112]この目的のために、図8Dに見られるように、テキスト編集アプリケーション502は、編集操作記録816に、(図8DにおいてC4と示される)2行目および3行目への変更の説明を含め、行開始値を2行目(LS:2)に、行終了値を3行目(LE:3)に設定することができる。行開始値2および行終了値3は、新しい3行目を追加する編集が、文書内の2行目で開始し、文書内の3行目で終了することを示す。文書に新しい3行目を追加すると、文書の新しい3行目よりも低いテキスト行(すなわち、元の3行目以上)が、1行下にシフトすることに留意されたい。
【0095】
[00113]テキスト編集アプリケーション502は、編集操作(すなわち、2行目への変更、または新しい3行目の追加のいずれか)が、文書内の既存の動的領域に、または既存の動的領域のしきい範囲内に存在するか、さもなければ発生するかを判定するためにチェックし得る。この時点で、文書は、動的領域Aデータ構造804Aによって定められる動的領域A、動的領域Bデータ構造804Bによって定められる動的領域B、および動的領域Cデータ構造804Cによって定められる動的領域Cを含む。テキスト編集アプリケーション502は、変更された2行目が、動的領域Aのしきい範囲内にあると判定することができる。より具体的には、変更された2行目は、動的領域Aデータ構造804Aによって示される動的領域Aの実際の終了行番号(すなわち、RE:1+Off:0=1行目)である1行目のしきい範囲内にある。この判定の結果として、図8Dに見られるように、テキスト編集アプリケーション502は、編集操作記録816を、動的領域A取消スタック806Aの最上位にプッシュすることができる。
【0096】
[00114]このようにして新しい3行目を追加するための編集は、動的領域Aに2行を追加したことに留意されたい。すなわち、2行目を変更して新しい3行目を挿入することによって新しい3行目を追加する編集は、動的領域Aにおいて2行(2行目および3行目)を増加させる。したがって、テキスト編集アプリケーション502は、領域終了値を、動的領域Aデータ構造804Aにおける3行目(RE:3)に設定し、新しい3行目を追加するための編集操作の結果として、動的領域Aの新しい終了位置を示すことができる。動的領域Aにおいて最後に実行された編集操作として、編集操作(すなわち、編集操作記録816に記録された2行目および3行目への変更)は、動的領域A取消スタック806Aの最上位からポップされ、取り消される。編集操作記録810は、動的領域A取消スタック806Aの最上位にもはやないので、編集操作記録810によって記録された1行目への編集は、取り消すことができないことに留意されたい。1行目への編集を取り消すために、編集操作記録816に記録された編集操作(すなわち、新しい3行目を追加するための編集)を最初に取り消す必要がある。これは、編集操作記録810を動的領域A取消スタック806Aの最上位に配置する。
【0097】
[00115]編集操作が、文書への行の追加をもたらしたので、テキスト編集アプリケーション502は、文書内の動的領域が、新しい3行目を含む編集をホストする動的領域Aの下に配置されているか否かを判定するためにチェックし得る。この時点で、動的領域A以外に、文書は、動的領域Bデータ構造804Bによって定められる動的領域Bと、動的領域Cデータ構造804Cによって定められる動的領域Cとをも含む。テキスト編集アプリケーション502は、動的領域Bと動的領域Cの両方が、文書内の動的領域Aの下に配置されていることを判定することができる。この判定の結果として、テキスト編集アプリケーション502は、動的領域Aに追加される行数を考慮するために、動的領域Bおよび動的領域Cのそれぞれの領域オフセット値を調整することができる。たとえば、1行(すなわち、新しい3行目)が動的領域Aに追加されたので、テキスト編集アプリケーション502は、動的領域Bデータ構造804Bにおける領域オフセット値を1つ(すなわち、Off:0からOff:1へ)インクリメント、すなわち増加させることができる。テキスト編集アプリケーション502はまた、動的領域Cデータ構造804Cにおける領域オフセット値を1つ(すなわち、Off:0からOff:1へ)インクリメント、すなわち増加させることができる。
【0098】
[00116]例示的な使用例を続けると、ユーザは、その後、文書の21行目におけるテキストに対する編集を行うことができる。文書における21行目は、ユーザが、文書内に新しい3行目を追加する以前の編集を行う前の、元の20行目であることに留意されたい。21行目への編集を検出することに応じて、テキスト編集アプリケーション502は、21行目への編集から生じる文書への変更を記録するために編集操作記録818を作成することができる。
【0099】
[00117]この目的のために、図8Eに見られるように、テキスト編集アプリケーション502は、編集操作記録818に、(図8EにおいてC5と示される)21行目への変更の説明を含め、行開始値を21行目(LS:21)に、行終了値を21行目(LE:21)に設定することができる。結果として生じる変更は、単一行(21行目)であるため、行開始値は、行終了値と同じである。
【0100】
[00118]テキスト編集アプリケーション502は、編集操作(すなわち、21行目への変更)が、文書内の既存の動的領域に、または既存の動的領域のしきい範囲内に存在するか、さもなければ発生するかを判定するためにチェックし得る。この時点で、文書は、動的領域Aデータ構造804Aによって定められる動的領域A、動的領域Bデータ構造804Bによって定められる動的領域B、および動的領域Cデータ構造804Cによって定められる動的領域Cを含む。動的領域Aは、ゼロである領域オフセット値(Off:0)を有し、動的領域Bと動的領域Cとの両方は、1である領域オフセット値(Off:1)を有することに留意されたい。ゼロではない領域オフセット値は、文書内の動的領域Bと動的領域Cとの実際の位置に影響する。ゼロではない領域オフセット値のために、文書内の動的領域Bの実際の位置は、8行目(すなわち、RSの実際の開始行番号:7+Off:1)で開始し、8行目(すなわち、REの実際の終了行番号:7+Off:1)で終了し、文書内の動的領域Cの実際の位置は、21行目(すなわち、RSの実際の開始行番号:20+Off:1)で開始し、21行目(すなわち、REの実際の終了行番号:20+Off:1)で終了する。文書内の動的領域Aの実際の位置は、動的領域Aデータ構造804Aにおける現在のRS値およびRE値によって反映されるように、1行目(すなわち、RSの実際の開始行番号:1+Off:0)で開始し、3行目(すなわち、REの実際の終了行番号:3+Off:0)で終了する。文書内の動的領域の実際の位置に基づいて、テキスト編集アプリケーション502は、動的領域Cデータ構造804Cによって示されるように、変更された21行目が動的領域C内にあると判定することができる。しかしながら、動的領域Cのゼロではない領域オフセット値は、21行目への編集操作の実際の位置に影響を与えるので、編集操作記録818に記録された21行目への編集の位置は、動的領域Cの、ゼロではない領域オフセット値を考慮するために調整される必要がある。したがって、テキスト編集アプリケーション502は、行開始値および行終了値への適切な調整を反映する編集操作記録818aを作成することができる。
【0101】
[00119]図8Eに見られるように、テキスト編集アプリケーション502は、編集操作記録818aに、21行目への変更の説明を含め、行開始値を20行目に(すなわち、動的領域Aに追加された行数だけ、編集操作記録818の行開始値を減少させ)、行終了値を20行目に(すなわち、動的領域Aに追加された行数だけ、編集操作記録818の行開始値を減少させ)設定することができる。テキスト編集アプリケーション502は、編集操作記録818aを、動的領域C取消スタック806Cの最上位にプッシュすることができる。動的領域Cにおいて最後に実行された編集操作として、編集操作(すなわち、編集操作記録818aに記録された20行目への変更)は、動的領域C取消スタック806Cの最上位からポップされ、取り消すことができる。動的領域Cに関連付けられた領域オフセット値のため、編集操作の実際の位置は、21行目(すなわち、RS:20+Off:1)であることに留意されたい。
【0102】
[00120]ユーザは、文書編集セッション中、文書を編集し続けることができる。たとえば、図9Aおよび図9Bに見られるように、ユーザは、文書を編集して、13行目を削除することができる。特に、ユーザが編集する前の文書の一部を示す図9Aに見られるように、文書は、「Environment:」というテキストを有する12行目(参照符号904を参照)と、「Kernel-mode Driver Framework」というテキストを有する14行目(参照符号906を参照)との間の空白行(参照符号902を参照)である13行目を含む。ユーザが編集した後の文書の一部を示す図9Bに見られるように、文書には、13行目を削除する編集前に文書に存在していた元の13行目(すなわち、空白行)が含まれなくなった。一方、「Kernel-mode Driver Framework」(参照符号906を参照)というテキストを有する元の14行目は、新しい13行目として12行目(参照符号904を参照)の直後に続く。より一般的には、削除された元の13行目の下に位置していた文書のすべての行は、文書内の1行上に移動またはシフトする。
【0103】
[00121]文書内の13行目を削除するために、ユーザは、12行目の終わりにあったキャリッジリターン(たとえば、改行)を削除するか、さもなければ消去した。言い換えれば、文書内の12行目を(キャリッジリターンを削除するために)編集した結果、文書内の元の13行目が削除される。実施では、図9Bに示されるように、12行目への変更は、12行目の隣の文書の余白に表示される変更バー908によって示され得る。より一般的には、編集セッション中に変更された文書内のテキストの行を示すために、同様の変更バーが文書の余白に表示される場合がある。
【0104】
[00122]次に図10を参照して示すように、12行目への編集と、削除された元の13行目とを検出することに応じて、テキスト編集アプリケーション502は、文書への変更を記録するための編集操作記録820を作成することができる。この目的のために、テキスト編集アプリケーション502は、編集操作記録820に、12行目への変更と、(図10においてC6と示される)削除された元の13行目との説明を含め、行開始値を12行目(LS:12)に、行終了値を、編集操作によって削除された行である13行目(LE:13)に設定することができる。行開始値12および行終了値13は、元の3行目を削除するための編集が、文書の12行目で開始し、文書の13行目で終了することを示す。
【0105】
[00123]引き続き図10を参照すると、テキスト編集アプリケーション502は、編集操作(すなわち、12行目に対する変更、または削除された元の13行目)が、文書内の既存の動的領域に存在するか、さもなければ発生するか否かを判定するためにチェックし得る。この時点で、文書は、動的領域Aデータ構造804Aによって定められる動的領域A、動的領域Bデータ構造804Bによって定められる動的領域B、および動的領域Cデータ構造804Cによって定められる動的領域Cを含む。前述のように、ゼロではない領域オフセット値のために、文書内の動的領域Bの実際の位置は8行目(すなわち、RSの実際の開始行番号:7+Off:1)で開始し、8行目(すなわち、REの実際の終了行番号:7+Off:1)で終了し、文書内の動的領域Cの実際の位置は21行目(すなわち、RSの実際の開始行番号:20+Off:1)で開始し、21行目(すなわち、REの実際の終了行番号:20+Off:1)で終了する。文書内の動的領域Aの実際の位置は、動的領域Aデータ構造804Aにおける現在のRSおよびRE値によって反映されるように、1行目(すなわち、RSの実際の開始行番号:1+Off:0)で開始し、3行目(すなわち、REの実際の終了行番号:3+Off:0)で終了する。文書内の動的領域の実際の位置に基づいて、テキスト編集アプリケーション502は、変更された12行目、または削除された元の13行目が、動的領域A、動的領域B、または動的領域C内にないことを判定することができる。この判定の結果として、テキスト編集アプリケーション502は、この編集操作(すなわち、元の13行目の削除)のために動的領域Dを作成することができる。この目的のために、テキスト編集アプリケーション502は、動的領域Dデータ構造804D、動的領域D取消スタック806D、および動的領域D再実行スタック808Dを作成することができる。動的領域Dデータ構造804Dは、元の13行目を削除するために、12行目への編集をホストするために作成された動的領域Dを定める。したがって、テキスト編集アプリケーション502は、領域開始値を12行目(RS:12)に、領域終了値を12行目(RE:12)に、領域オフセット値をゼロ(Off:0)に設定することができる。言い換えると、この時点で、動的領域Dには、元の13行目を削除させるように変更された12行目のみが含まれている。テキスト編集アプリケーション502は、編集操作記録820を、動的領域D取消スタック806Dの最上位にプッシュすることができる。動的領域Dにおいて最後に実行された編集操作として、編集操作(すなわち、編集操作記録820に記録されるように、新しい13行目を追加するための12行目への変更)は、動的領域D取消スタック806Dの最上位からポップされ、取り消すことができる。
【0106】
[00124]元の13行目を削除するための編集操作により、文書から1行を削除したので、テキスト編集アプリケーション502は、文書内の動的領域が、元の13行目を削除する編集をホストする動的領域Dの下に配置されているか否かを判定するためにチェックし得る。この時点で、動的領域D以外に、文書は、動的領域Aデータ構造804Aによって定められる動的領域A、動的領域Bデータ構造804Bによって定められる動的領域B、および動的領域Cデータ構造804Cによって定められる動的領域Cも含む。動的領域A、動的領域Bおよび動的領域Cの実際の位置に基づいて、テキスト編集アプリケーション502は、動的領域Cが文書内の動的領域Dの下に配置されていることを判定することができる。この判定の結果として、テキスト編集アプリケーション502は、動的領域Cの領域オフセット値を調整して、動的領域Dでホストされる編集操作によって文書内で削除された行数を考慮することができる。たとえば、文書内で1行が削除された(すなわち、元の13行目の削除)ので、テキスト編集アプリケーション502は、動的領域Cデータ構造804Cにおける領域オフセット値を1つだけ(すなわち、Off:1からOff:0へ)減少させることができる。このようにして動的領域Cの領域オフセット値を減少させることは、編集操作記録820に記録された元の13行目の削除の結果として、動的領域Cに含まれるテキストの行のアップシフトを考慮する。
【0107】
[00125]例示的な使用例を続けると、ユーザは、その後、文書の4~7行目のテキストを編集することができる。文書の4~7行目は、ユーザが、文書内に新しい3行目を追加する以前の編集を行う前の、元の3~6行目であることに留意されたい。4~7行目への編集を検出することに応じて、テキスト編集アプリケーション502は、編集操作記録822を作成して、4~7行目への編集から生じる文書への変更を記録することができる。この目的のために、図11に見られるように、テキスト編集アプリケーション502は、編集操作記録822に、(図11においてC7と示される)4~7行目への変更の説明を含め、行開始値を4行目(LS:4)に、行終了値を7行目(LE:7)に設定することができる。行開始値4および行終了値7は、4~7行目への編集が、文書の4行目で開始し、文書の7行目で終了することを示す。
【0108】
[00126]テキスト編集アプリケーション502は、編集操作(すなわち、4行目、5行目、6行目、または7行目への変更のいずれか)が、文書内の既存の動的領域に、または既存の動的領域のしきい範囲内に存在するか、さもなければ発生するか否かを判定するためにチェックし得る。この時点で、文書は、動的領域Aデータ構造804Aによって定められる動的領域A、動的領域Bデータ構造804Bによって定められる動的領域B、動的領域Cデータ構造804Cによって定められる動的領域C、および動的領域Dデータ構造804Dによって定められる動的領域Dを含む。文書内の動的領域の実際の位置に基づいて、テキスト編集アプリケーション502は、変更された4行目が、動的領域Aのしきい範囲内にあると判定することができる。テキスト編集アプリケーション502はまた、変更された7行目が、動的領域Bのしきい範囲内にあると判定することができる。実施において、編集操作が、文書内の複数の動的領域のしきい範囲内にある場合、テキスト編集アプリケーション502は、文書内において、より高い位置にある動的領域(すなわち、より小さな領域開始値を有する動的領域)を選択することができる。この判定の結果として、テキスト編集アプリケーション502は、編集操作記録822を、動的領域A取消スタック806Aの最上位にプッシュすることができる。この開示に照らして、他の実施では、複数の動的領域のしきい範囲内にある編集操作をホストするために、テキスト編集アプリケーション502は、文書内において、より低い位置にある動的領域(すなわち、より高い領域開始値を有する動的領域)を選択するか、または、複数の動的領域から動的領域を任意に選択できることが理解されよう。
【0109】
[00127]編集操作(4~7行目におけるテキストへの編集)、より具体的には、変更された7行目は、動的領域Bのしきい範囲内にもあるので、編集操作は、動的領域Aと動的領域Bとのマージとなることに留意されたい。編集操作をホストするために動的領域Aが選択されているため、動的領域Bは、動的領域Aにマージされたものとして扱うことができる。この目的のために、動的領域Aの終了位置は、動的領域Aと動的領域Bとの結合された範囲を反映するように調整される。ここで、動的領域Bのゼロではない領域オフセット値(すなわち、動的領域Bは、領域オフセット値1を有する)のために、文書内の動的領域Bの実際の位置は、8行目(すなわち、RSの実際の開始行番号:7+Off:1)で開始し、8行目(すなわち、REの実際の終了行番号:7+Off:1)で終了する。したがって、図11に見られるように、テキスト編集アプリケーション502は、動的領域Aデータ構造804Aにおいて、領域終了値を8行目(RE:8)に設定し、動的領域Bの動的領域Aへのマージの結果として、動的領域Aの新しい終了位置を示すことができる。
【0110】
[00128]図12Aおよび図12Bは、文書内の動的領域のマージの例をより明確に示している。ユーザが4~7行目に編集を行い、その結果として、動的領域Aと動的領域Bとをマージする前の、文書の一部を示す図12Aに見られるように、文書は、動的領域A(参照符号1202参照)および動的領域B(参照符号1204参照)を含む。実施では、変更バー1206は、動的領域Aにおける1~3行目に変更が加えられたことを示すために、1~3行目の隣の文書の余白に表示され得る。同様に、変更バー1208は、8行目の隣の文書の余白に表示され、動的領域Bにおける8行目に変更が加えられたことを示す(上記のように、ゼロではない領域オフセット値のために、文書内の動的領域Bの実際の位置は、8行目である)。ユーザが4~7行目に編集を行い、その結果として、動的領域Aと動的領域Bとをマージした後の、文書の一部を示す図12Bに見られるように、文書は、動的領域B(参照符号1210参照)を含む新しい動的領域Aを含む。変更バー1212は、新しい動的領域Aにおける1~8行目に変更が加えられたことを示すために、1~8行目の隣の文書の余白に表示され得る。
【0111】
[00129]再び図11を参照して示すように、動的領域Bの範囲は動的領域Aによってカバーされるので、テキスト編集アプリケーション502は、(たとえば、動的領域Bデータ構造804B、動的領域B取消スタック806B、および動的領域B再実行スタック808Bの破線によって示されるように)動的領域Bを、文書内の休止状態の、または非アクティブな動的領域として扱うことができる。図11に見られるように、動的領域Bデータ構造804Bの値と、動的領域B取消スタック806Bおよび動的領域B再実行スタック808Bのコンテンツとは、変更されないままである。これにより、動的領域Bの動的領域Aへのマージを引き起こした編集操作(すなわち、編集操作記録822に記録された4~7行目におけるテキストへの編集)が取り消されると、動的領域Bが再びアクティブになることができる。たとえば、動的領域A取消スタック806Aの最上位から編集操作記録822をポップし、4~7行目への変更を取り消すと、動的領域Aと動的領域Bとのマージが取り消される。言い換えれば、編集操作記録822に記録されたように4~7行目への変更を取り消すと、動的領域Aが、動的領域Aおよび動的領域Bに分割されて戻される。
【0112】
[00130]例示的な使用例を続けると、ユーザは、文書内の特定の動的領域において行われた編集の取消を要求することができる。動的領域において取消アクションをトリガするために、実施では、ユーザは、ポインティングデバイスまたはキーボードを使用して、カーソルを所望の動的領域の近くまたは隣の位置(たとえば、変更行の隣に表示される変更バーの近くまたは隣)に移動させることができる。たとえば、ユーザは、動的領域Cで行われた編集の取消をトリガできる。ユーザが取消アクションをトリガすると、テキスト編集アプリケーション502は、カーソルの位置に基づいて、取消操作を実行する特定の動的領域を識別し得る。この例の場合、テキスト編集アプリケーション502は、動的領域Cを、取消操作を実行する動的領域として識別し得る。図13に見られるように、動的領域Cで取消操作を実行するために、テキスト編集アプリケーション502は、動的領域C取消スタック806Cの最上位から編集操作記録818aをポップし、編集操作記録818aに記録された編集操作の逆を実行し、編集操作記録818aを、動的領域C再実行スタック808Cの最上位にプッシュすることができる。以前に説明したように、編集操作記録818aは、21行目への変更を記録した。したがって、編集操作記録818aに記録された編集操作の逆を実行すると、編集操作を実行するときに21行目に対してなされた変更が取り消される。しかしながら、この時点で、記録された編集操作の逆を実行する文書内の実際の位置は、動的領域Cデータ構造804C(Off:0)における動的領域C領域オフセット値によって調整される編集操作記録818aにおける行開始値(LS:20)と、編集操作記録818aにおける行終了値(LE:20)とによって示される。これらの値に基づいて、逆編集操作を実行する文書内の実際の位置は20行目(実際の行番号LS:20+Off:0からLE:20+Off:0)である。このようにして記録された編集操作の逆を実行するために実際の行番号を計算することは、編集操作記録820に記録された元の13行目の削除の結果として、動的領域Cに含まれるテキストの行のアップシフトを考慮する。編集操作記録818aに記録された編集操作の逆を実行しても、文書内の行の追加または削除は生じなかったので、テキスト編集アプリケーション502は、文書内の動的領域Cの下に位置する動的領域をチェックする必要はない。
【0113】
[00131]例示的な使用例を続けると、ユーザは、文書内の動的領域Aにおいてなされた編集の取消を要求することができる。ユーザが、取消アクションをトリガすると、テキスト編集アプリケーション502は、動的領域Aを、取消操作を実行する動的領域として識別することができる。図14に見られるように、動的領域Aにおける取消操作を実行するために、テキスト編集アプリケーション502は、動的領域A取消スタック806Aの最上位から編集操作記録822をポップし、編集操作記録822に記録された編集操作の逆を実行し、編集操作記録822を、動的領域A再実行スタック808Aの最上位にプッシュすることができる。以前に説明したように、編集操作記録822は、4~7行目への変更を記録した。このように、編集操作記録822に記録された編集操作の逆を実行すると、編集操作を実行するときに4~7行目に対してなされた変更が取り消される。しかしながら、この時点で、記録された編集操作の逆を実行する文書内の実際の位置は、動的領域Aデータ構造804Aにおける動的領域A領域オフセット値(Off:0)によって調整される編集操作記録822における行開始値(LS:4)と、編集操作記録822における行終了値(LE:7)とによって示される。これらの値に基づいて、逆編集操作を実行する文書内の実際の位置は4~7行目(実際の行番号LS:4+Off:0から、LE:7+Off:0)である。このようにして記録された編集操作の逆を実行するために実際の行番号を計算することは、編集操作記録820に記録された元の13行目の削除の結果として、動的領域Cに含まれるテキストの行のアップシフトを考慮する。編集操作記録822に記録された編集操作の逆を実行しても、文書内の行の追加または削除は生じなかったので、テキスト編集アプリケーション502は、文書内の動的領域Cの下に位置する動的領域をチェックする必要はない。
【0114】
[00132]編集操作記録822に記録されたように4~7行目への変更を取り消すと、動的領域Aの範囲が変更され、4~7行目が含まれなくなることに留意されたい。4~7行目への変更を取り消し、動的領域Aの範囲から4~7行目を消去すると、動的領域Aと動的領域Bのマージが取り消されることにも留意されたい。この目的のために、テキスト編集アプリケーション502は、動的領域Bの分離または分割、および4~7行目への変更の取消を示すために、領域終了値を動的領域Aデータ構造804Aの3行目(RE:3)に設定することができる。テキスト編集アプリケーション502は、(たとえば、動的領域Bデータ構造804B、動的領域B取消スタック806B、および動的領域B再実行スタック808Bの実線で示されるように)動的領域Bを文書内のアクティブな動的領域として再び扱うことができる
【0115】
[00133]本開示に照らして、特定の動的領域における再実行操作は、特定の動的領域の取消スタックの最上位から編集操作記録をポップし、ポップされた編集操作記録に記録された編集操作を実行し、ポップされた編集操作記録を、特定の動的領域の取消スタックの最上位にプッシュすることによって処理できることが理解されよう。以下で少なくとも図17と併せてさらに説明するように、再実行操作は、編集操作および/または取消操作と同じまたは実質的に同じ方式で処理することができる。
【0116】
[00134]図15は、本開示の実施形態による、文書への変更を処理するための例示的なプロセス1500のフロー図である。例示的なプロセス1500、および以下でさらに説明される例示的なプロセス1600および1700は、少なくとも図2図3および/または図4A図4Cに関して上記で開示されたものなどのコンピューティング環境またはシステム内で実施または使用され得る。たとえば、いくつかの実施形態では、例示的なプロセス1500、および以下でさらに説明される例示的なプロセス1600および1700に示される動作、機能またはアクションは、図2のコンピューティングデバイス100の揮発性メモリ122および/または不揮発性メモリ128などのコンピュータ可読媒体(たとえば、図1のクライアントマシン102、図3のクライアントマシン102a~102n、および/または図4A図4Cのクライアント202のコンピュータ可読媒体)にコンピュータ実行可能命令として格納され得る。いくつかの実施形態では、例示的なプロセス1500、および以下でさらに説明される例示的なプロセス1600および1700は、図2のコンピューティングデバイス100、図3のクライアントマシン102a~102n、および/または図4A図4Cのクライアント202などの適切なコンピューティングデバイス上で実行され得るテキスト編集アプリケーション502などのアプリケーションソフトウェアによって実施され得る。たとえば、例示的なプロセス1500、および以下でさらに説明される例示的なプロセス1600および1700のそれぞれのブロックにおいて説明される動作、機能またはアクションは、コンピューティングデバイス100のアプリケーション116および/またはデータ117によって実施され得る。プロセス1500、1600および1700の以下の説明は、文書を参照し得るが、本明細書では、プロセスが、他のタイプのテキストベースのコンテンツに適用され得ることが理解される。
【0117】
[00135]図15を参照して示すように、プロセス1500が開始され、1502において、テキスト編集アプリケーション502などのアプリケーションソフトウェアは、文書内の動的領域における変更を検出することができる。たとえば、ユーザが、テキスト編集アプリケーションを使用して、文書のコンテンツを編集することができる。
【0118】
[00136]1504において、テキスト編集アプリケーション502は、編集操作記録を作成し、作成された編集操作記録に、文書への変更を記録することができる。テキスト編集アプリケーション502は、その後、作成された編集操作記録を、変更が行われた動的領域に関連付けられた取消スタックにプッシュすることができる。
【0119】
[00137]1506において、テキスト編集アプリケーション502は、動的領域における変更が、動的領域における行の追加を引き起こすか、さもなければ結果的にそうなるか否かを判定するためにチェックし得る。変更によって、動的領域に行が追加される場合、1508において、テキスト編集アプリケーション502は、変更によって追加される行数のカウント値を計算するか、さもなければ決定することができる。
【0120】
[00138]1510において、テキスト編集アプリケーション502は、変更によって動的領域に追加される行数のカウント値によって、文書内の動的領域の終了を示す領域終了値を増加させることができる。実施形態では、テキスト編集アプリケーション502は、動的領域データ構造において、領域終了値を含む動的領域位置情報を維持することができる。
【0121】
[00139]1512において、テキスト編集アプリケーション502は、変更が行われた動的領域の下に位置する文書内の動的領域を識別し得る。識別された動的領域について、テキスト編集アプリケーション502は、変更によって動的領域に追加される行数のカウント値によって、動的領域のそれぞれの領域オフセット値を増加させることができる。それぞれの領域オフセット値は、文書内の動的領域全体にわたる編集依存関係の問題を解決するために使用される。実施形態では、テキスト編集アプリケーション502は、文書内の動的領域に対して作成されたそれぞれの動的領域データ構造内の領域オフセット値を維持することができる。その後、プロセス1500は終了し得る。
【0122】
[00140]変更が動的領域の行の追加をもたらさない場合、1514において、テキスト編集アプリケーション502は、動的領域における変更が、動的領域における行の削除を引き起こすか、さもなければ結果的にそうなるか否かを判定するためにチェックし得る。変更が、動的領域の行の削除をもたらす場合、1516において、テキスト編集アプリケーション502は、変更によって削除される行数のカウント値を計算するか、さもなければ決定することができる。
【0123】
[00141]1518において、テキスト編集アプリケーション502は、変更によって動的領域において削除される行数のカウント値によって、文書内の動的領域の終了を示す領域終了値を減少させることができる。1520において、テキスト編集アプリケーション502は、変更が行われた動的領域の下に位置する文書内の動的領域を識別し得る。識別された動的領域について、テキスト編集アプリケーション502は、変更によって動的領域において削除される行数のカウント値によって、動的領域のそれぞれの領域オフセット値を減少させることができる。その後、プロセス1500は終了し得る。
【0124】
[00142]一方、1514において、変更が動的領域内の行の削除をもたらさないのであれば、プロセス1500は終了し得る。この場合、変更によって動的領域において行の追加または行の削除はないため、変更が行われた動的領域の下に位置する動的領域の領域終了値、または動的領域の領域オフセット値の調整は不要である。
【0125】
[00143]図16は、本開示の実施形態による、取消操作を処理するための例示的なプロセス1600のフロー図である。プロセス1600が開始され、1602において、テキスト編集アプリケーション502などのアプリケーションソフトウェアは、文書内の動的領域における取消操作を検出することができる。たとえば、ユーザが、テキスト編集アプリケーションを使用して文書のコンテンツを編集し、編集セッション中に、文書内の動的領域において取消アクションをトリガすることができる。
【0126】
[00144]1604において、テキスト編集アプリケーション502は、取消アクションが検出された動的領域に関連付けられた取消スタックの最上位から編集操作記録をポップすることができる。編集操作記録は、文書に対して行われた、以前の変更を記録することができる。1606において、テキスト編集アプリケーション502は、取消操作を実行させることができる。より具体的には、テキスト編集アプリケーション502は、ポップされた編集操作記録に記録された変更の逆を実行させることができる。1608において、テキスト編集アプリケーション502は、ポップされた編集操作記録を、取消アクションが検出された動的領域に関連付けられた再実行スタックにプッシュすることができる。
【0127】
[00145]1610において、テキスト編集アプリケーション502は、動的領域における取消操作が、動的領域における行の追加を引き起こすか、さもなければ結果的にそうなるか否かを判定するためにチェックし得る。取消操作によって動的領域に行が追加される場合、1612において、テキスト編集アプリケーション502は、取消操作によって追加される行数のカウント値を計算するか、さもなければ決定することができる。
【0128】
[00146]1614において、テキスト編集アプリケーション502は、取消操作によって動的領域に追加される行数のカウント値によって、文書内の動的領域の終了を示す領域終了値を増加させることができる。実施形態では、テキスト編集アプリケーション502は、動的領域データ構造において、領域終了値を含む動的領域位置情報を維持することができる。
【0129】
[00147]1616において、テキスト編集アプリケーション502は、取消操作が実行された動的領域の下に位置する文書内の動的領域を識別し得る。識別された動的領域について、テキスト編集アプリケーション502は、取消操作によって動的領域に追加される行数のカウント値によって、動的領域のそれぞれの領域オフセット値を増加させることができる。実施形態では、テキスト編集アプリケーション502は、文書内の動的領域に対して作成されたそれぞれの動的領域データ構造内の領域オフセット値を維持することができる。その後、プロセス1600は終了し得る。
【0130】
[00148]取消操作が動的領域に行の追加をもたらさない場合、1618において、テキスト編集アプリケーション502は、動的領域における取消操作が、動的領域における行の削除を引き起こすか、さもなければ結果的にそうなるか否かを判定するためにチェックし得る。取消操作によって動的領域の行が削除される場合、1620において、テキスト編集アプリケーション502は、取消操作によって削除される行数を計算するか、さもなければ決定することができる。
【0131】
[00149]1622において、テキスト編集アプリケーション502は、取消操作によって動的領域において削除される行数のカウント値によって、文書内の動的領域の終了を示す領域終了値を減少させることができる。1624において、テキスト編集アプリケーション502は、取消操作が実行された動的領域の下に位置する文書内の動的領域を識別し得る。識別された動的領域について、テキスト編集アプリケーション502は、取消操作によって動的領域において削除される行数のカウント値によって、動的領域のそれぞれの領域オフセット値を減少させることができる。その後、プロセス1600は終了し得る。
【0132】
[00150]一方、1618において、取消操作が動的領域内の行の削除をもたらさないのであれば、プロセス1600は終了し得る。この場合、取消操作を実行しても、動的領域の行の追加または行の削除にはならないため、取消操作が実行された動的領域の下に位置する動的領域の領域終了値、または動的領域の領域オフセット値の調整は不要である。
【0133】
[00151]図17は、本開示の実施形態による、再実行操作を処理するための例示的なプロセス1700のフロー図である。プロセス1700が開始され、1702において、テキスト編集アプリケーション502などのアプリケーションソフトウェアは、文書内の動的領域における再実行操作を検出することができる。たとえば、ユーザが、テキスト編集アプリケーションを使用して、文書のコンテンツを編集し、編集セッション中に、文書内の動的領域において再実行アクションをトリガすることができる。
【0134】
[00152]1704において、テキスト編集アプリケーション502は、再実行アクションが検出された動的領域に関連付けられた再実行スタックの最上位から編集操作記録をポップすることができる。編集操作記録は、文書に対して行われ、取消操作の実行によって以前に取り消された、以前の変更を記録することができる。1706において、テキスト編集アプリケーション502は、再実行操作を実行させることができる。より具体的には、テキスト編集アプリケーション502は、以前に取り消された操作を再実行させることができる。1708において、テキスト編集アプリケーション502は、ポップされた編集操作記録を、再実行アクションが検出された動的領域に関連付けられた取消スタックにプッシュすることができる。
【0135】
[00153]1710において、テキスト編集アプリケーション502は、動的領域における再実行操作が、動的領域における行の追加を引き起こすか、さもなければ結果的にそうなるか否かを判定するためにチェックし得る。再実行操作が動的領域に行の追加をもたらす場合、1712において、テキスト編集アプリケーション502は、再実行操作によって追加される行数のカウント値を計算するか、さもなければ決定することができる。
【0136】
[00154]1714において、テキスト編集アプリケーション502は、再実行操作によって動的領域に追加される行数のカウント値によって、文書内の動的領域の終了を示す領域終了値を増加させることができる。実施形態では、テキスト編集アプリケーション502は、動的領域データ構造において、領域終了値を含む動的領域位置情報を維持することができる。
【0137】
[00155]1716において、テキスト編集アプリケーション502は、再実行操作が実行された動的領域の下に位置する文書内の動的領域を識別し得る。識別された動的領域について、テキスト編集アプリケーション502は、再実行操作によって動的領域に追加される行数のカウント値によって、動的領域のそれぞれの領域オフセット値を増加させることができる。実施形態では、テキスト編集アプリケーション502は、文書内の動的領域に対して作成されたそれぞれの動的領域データ構造に、領域オフセット値を維持することができる。その後、プロセス1700は終了し得る。
【0138】
[00156]再実行操作が動的領域に行の追加をもたらさない場合、1718において、テキスト編集アプリケーション502は、動的領域における再実行操作が、動的領域における行の削除を引き起こすか、さもなければ結果的にそうなるか否かを判定するためにチェックし得る。再実行操作が動的領域の行の削除をもたらす場合、1720において、テキスト編集アプリケーション502は、再実行操作によって削除される行数のカウント値を計算するか、さもなければ決定することができる。
【0139】
[00157]1722において、テキスト編集アプリケーション502は、再実行操作によって動的領域において削除される行数のカウント値によって、文書内の動的領域の終了を示す領域終了値を減少させることができる。1724において、テキスト編集アプリケーション502は、再実行操作が実行された動的領域の下に位置する文書内の動的領域を識別し得る。識別された動的領域について、テキスト編集アプリケーション502は、再実行操作によって動的領域において削除される行数のカウント値によって、動的領域のそれぞれの領域オフセット値を減少させることができる。その後、プロセス1700は終了し得る。
【0140】
[00158]一方、1718において、再実行操作が動的領域内の行の削除をもたらさないのであれば、プロセス1700は終了し得る。この場合、再実行操作の実行によって動的領域の行が追加されたり、行が削除されたりすることはないため、再実行操作が実行された動的領域の下に位置する動的領域の領域終了値、または動的領域の領域オフセット値の調整は不要である。
<さらなる例示的な実施形態>
【0141】
[00159]以下の例は、さらなる実施形態に関するものであり、そこから、多数の置換および構成が明らかになるであろう。
【0142】
[00160]例1は方法を含み、この方法は、文書の領域のデータ構造を与えるステップであって、そのデータ構造が文書内の領域を定める開始値、終了値およびオフセット値を含む、ステップを備えるとともに、領域内のコンテンツの変更の検出に応答して、領域内の文書の行数のカウント値を決定し、領域の範囲を変更するために、行数のカウント値に基づいて、領域の開始値、終了値およびオフセット値のうちの少なくとも1つを調整し、領域内のコンテンツの変更に応じて、領域のスタックに変更の記録をプッシュするステップを備え、当該スタックは、変更を不連続的に取り消しまたは再実行することを可能とするように、文書の領域内のコンテンツに対して実行される個々のアクションを表す要素を受け入れるように構成される。
【0143】
[00161]例2は、例1の主題を含み、変更は、領域における少なくとも1行の追加となる。
【0144】
[00162]例3は、例1の主題を含み、変更は、領域における少なくとも1行の削除となる。
【0145】
[00163]例4は、例1から例3のいずれかの主題を含み、スタックは、取消スタックまたは再実行スタックのうちの1つである。
【0146】
[00164]例5は、例1から例4のいずれかの主題を含み、変更は、取消操作であり、スタックは、再実行スタックである。
【0147】
[00165]例6は、例1から例4のいずれかの主題を含み、変更は、再実行操作であり、スタックは、取消スタックである。
【0148】
[00166]例7は、例1から例6のいずれかの主題を含み、文書の第1の領域の上に位置する当該文書の第2の領域内に少なくとも1行を追加または削除するコンテンツの変更の検出に応答して、第1の領域の範囲を変更するために、第2の領域内のコンテンツの変更に基づいて第1の領域のオフセット値を調整することをさらに含む。
【0149】
[00167]例8は、例1から例7のいずれかの主題を含み、変更は、当該領域と文書の隣接領域とのマージとなる。
【0150】
[00168]例9はシステムを含み、このシステムは、メモリと、メモリと通信する1つまたは複数のプロセッサとを備えており、当該1つまたは複数のプロセッサは、文書の領域のデータ構造を与える処理であって、そのデータ構造が文書内の領域を定める開始値、終了値およびオフセット値を含む、処理を実行するとともに、領域内のコンテンツの変更の検出に応答して、領域内の文書の行数のカウント値を決定し、領域の範囲を変更するために、行数のカウント値に基づいて、領域の開始値、終了値およびオフセット値のうちの少なくとも1つを調整し、領域内のコンテンツの変更に応じて当該領域のスタックに変更の記録をプッシュする処理を実行するように構成されており、当該スタックは、変更を不連続的に取り消しまたは再実行することを可能とするように、文書の領域内のコンテンツに対して実行される個々のアクションを表す要素を受け入れるように構成される。
【0151】
[00169]例10は、例9の主題を含み、変更は、取消操作であり、スタックは、再実行スタックである。
【0152】
[00170]例11は、例9の主題を含み、変更は、再実行操作であり、スタックは、取消スタックである。
【0153】
[00171]例12は、例9から例11のいずれかの主題を含み、変更は、領域における少なくとも1行の追加となる。
【0154】
[00172]例13は、例9から例11のいずれかの主題を含み、変更は、領域における少なくとも1行の削除となる。
【0155】
[00173]例14は、例9から例13のいずれかの主題を含み、1つまたは複数のプロセッサはさらに、文書の第1の領域の上に位置する当該文書の第2の領域内に少なくとも1行を追加または削除するコンテンツの変更の検出に応答して、第1の領域の範囲を変更するために、第2の領域内のコンテンツの変更に基づいて、第1の領域のオフセット値を調整するように構成される。
【0156】
[00174]例15は、例9から例14のいずれかの主題を含み、変更は、文書の隣接領域と、領域とのマージとなる。
【0157】
[00175]例16は方法を含み、この方法は、文書の第1の領域の第1のデータ構造を与えるステップであって、その第1のデータ構造が文書内の第1の領域を定める開始値、終了値およびオフセット値を含む、ステップと、第1の領域の下における文書の第2の領域の第2のデータ構造を与えるステップであって、その第2のデータ構造が文書内の第2の領域を定める開始値、終了値およびオフセット値を含む、ステップとを備えるとともに、第1の領域内のコンテンツの変更の検出に応答して、第1の領域内で追加または削除される行数のカウント値を決定し、第1の領域内のコンテンツの変更に基づいて、第1の領域の開始値と終了値とのうちの少なくとも一方を調整し、第2の領域の範囲を変更するために、第1の領域内で追加または削除される行数のカウント値に基づいて、第2の領域のオフセット値を調整するステップを備える。
【0158】
[00176]例17は、例16の主題を含み、第1の領域内のコンテンツの変更の検出に応答して、第1の領域内のコンテンツの変更に応じて、第1の領域のスタックに変更の記録をプッシュするステップをさらに備え、当該スタックは、変更を不連続的に取り消しまたは再実行することを可能とするように、文書の第1の領域内のコンテンツに対して実行される個々のアクションを表す要素を受け入れるように構成される。
【0159】
[00177]例18は、例16および例17のいずれかの主題を含み、スタックは、取消スタックである。
【0160】
[00178]例19は、例16および例17のいずれかの主題を含み、スタックは、再実行スタックである。
【0161】
[00179]例20は、例16から例19のいずれかの主題を含み、変更は、領域における少なくとも1行の追加となる。
【0162】
[00180]例21は、例16から例19のいずれかの主題を含み、変更は、領域における少なくとも1行の削除となる。
【0163】
[00181]例22は、例16から例21のいずれかの主題を含み、変更は、第1の領域と第2の領域とのマージとなる。
【0164】
[00182]例23はシステムを含み、このシステムは、メモリと、メモリと通信する1つまたは複数のプロセッサとを備えており、当該1つまたは複数のプロセッサは、文書の第1の領域の第1のデータ構造を与える処理であって、その第1のデータ構造が文書内の第1の領域を定める開始値、終了値およびオフセット値を含む、処理と、第1の領域の下の文書の第2の領域の第2のデータ構造を与える処理であって、その第2のデータ構造が文書内の第2の領域を定める開始値、終了値およびオフセット値を含む、処理とを実行するとともに、第1の領域内のコンテンツの変更の検出に応答して、第1の領域内で追加または削除される行数のカウント値を決定し、第1の領域内のコンテンツの変更に基づいて、第1の領域の開始値と終了値とのうちの少なくとも一方を調整し、第2の領域の範囲を変更するために、第1の領域内で追加または削除される行数のカウント値に基づいて、第2の領域のオフセット値を調整する処理を実行するように構成されている。
【0165】
[00183]例24は、例23の主題を含み、1つまたは複数のプロセッサはさらに、第1の領域内のコンテンツの変更の検出に応答して、第1の領域内のコンテンツの変更に応じて、第1の領域のスタックに変更の記録をプッシュすることを実行するように構成され、スタックは、変更を不連続的に取り消しまたは再実行することを可能とするように、文書の第1の領域内のコンテンツに対して実行される個々のアクションを表す要素を受け入れるように構成される。
【0166】
[00184]例25は、例23および例24のいずれかの主題を含み、スタックは、取消スタックである。
【0167】
[00185]例26は、例23および例24のいずれかの主題を含み、スタックは、再実行スタックである。
【0168】
[00186]例27は、例23から例26のいずれかの主題を含み、変更は、領域における少なくとも1行の追加となる。
【0169】
[00187]例28は、例23から例26のいずれかの主題を含み、変更は、領域における少なくとも1行の削除となる。
【0170】
[00188]例29は、例23から例28のいずれかの主題を含み、変更は、第1の領域と第2の領域とのマージとなる。
【0171】
[000189]この開示に照らしてさらに理解されるように、本明細書で開示されるプロセスおよび方法に関し、プロセスおよび方法で実行される機能は、異なる順序で実施され得る。追加的または代替的に、2つ以上の動作は、同時に、または、さもなければ、重複する同時方式で実行され得る。さらに、概説されたアクションおよび動作は例としてのみ提供され、アクションおよび動作のいくつかはオプションであり、より少ないアクションおよび動作に組み合わされるか、または開示された実施形態の本質を損なうことなく追加のアクションおよび動作に拡張され得る。
【0172】
[00190]様々な実施形態の説明では、上記で特定され、本明細書の一部を形成し、本明細書で説明される概念の態様が実現され得る様々な実施形態を例示として示す添付図面が参照される。本明細書で説明される概念の範囲から逸脱することなく、他の実施形態が利用され得、構造的および機能的な修正が行われ得ることを理解されたい。したがって、本明細書で説明される概念の様々な態様は、本明細書で具体的に説明されるもの以外の実施形態で実施され得ることを理解されたい。本明細書で説明される概念は、本明細書で具体的に説明されるものとは異なる手法で実現または実行できることも理解されたい。
【0173】
[00191]本開示で使用される場合、「エンジン」または「モジュール」または「構成要素」という用語は、エンジンまたはモジュールまたは構成要素および/またはソフトウェアオブジェクトまたはソフトウェアルーチンのアクションを実行するように構成された特定のハードウェア実施形態を指す場合があり、コンピューティングシステムの汎用ハードウェア(たとえば、コンピュータ可読媒体、処理デバイスなど)で格納および/または実行され得る。いくつかの実施形態では、本開示で説明される異なる構成要素、モジュール、エンジンおよびサービスは、コンピューティングシステム上で(たとえば、別個のスレッドとして)実行するオブジェクトまたはプロセスとして実施され得る。本開示で説明されるシステムおよび方法のいくつかは、全体的にソフトウェアで実施される(汎用ハードウェアで格納および/または実行される)として説明されるが、特定のハードウェア実施、ファームウェア実施、またはそれらの任意の組合せも可能であり、考慮される。この説明では、「コンピューティングエンティティ」は、本開示で以前に説明した任意のコンピューティングシステム、またはコンピューティングシステムで実行する任意のモジュールまたはモジュレートの組合せであり得る。
【0174】
[00192]本開示および添付の特許請求の範囲(たとえば、添付の特許請求の範囲のボディ部)で使用される用語は、概して「オープン」な用語として意図されている(たとえば、「含んでいる」という用語は、「含んでいるが、それに限定されない」と解釈されるべきであり、「有する」という用語は「少なくとも有する」と解釈されるべきであり、「含む」という用語は「含むが、それに限定されない」などと解釈されるべきである)。
【0175】
[00193]さらに、特定数の導入された特許請求の範囲の列挙が意図されている場合、そのような意図は特許請求の範囲に明示的に列挙され、そのような列挙がない場合、そのような意図は存在しない。たとえば、理解の助けとして、以下の添付の特許請求の範囲は、特許請求の範囲の列挙を導入するための導入句「少なくとも1つ」および「1つまたは複数」の使用を含み得る。しかしながら、そのような語句の使用は、たとえ同じ特許請求の範囲が「1つまたは複数」または「少なくとも1つ」といった導入句と、「a」または「an」などの不定冠詞とを含む(たとえば、「a」および/または「an」が、「少なくとも1つ」または「1つまたは複数」を意味するように解釈されるべきである)場合であっても、不定冠詞「a」または「an」による特許請求の範囲の列挙の導入により、そのような導入された特許請求の範囲の列挙を含むどの特定の特許請求の範囲も、そのような列挙を1つだけ含む実施形態に限定することを意味すると解釈されるべきではなく、特許請求の範囲の列挙を導入するために使用される定冠詞の使用についても同じことが当てはまる。
【0176】
[00194]さらに、特定数の導入された特許請求の範囲の列挙が、明示的に列挙されている場合でも、そのような列挙は、少なくとも列挙された数を意味すると解釈されるべきである(たとえば、他の修飾子なしの「2つのウィジェット」というままの列挙は、少なくとも2つのウィジェット、または2つ以上のウィジェットを意味する)。さらに、「A、B、Cのうちの少なくとも1つなど」または「A、B、Cのうちの1つまたは複数など」に類似した慣例が使用されるこれらの例では、一般に、そのような構造は、Aのみ、Bのみ、Cのみ、AとBとの組合せ、AとCとの組合せ、BとCとの組合せ、またはA、BおよびCの組合せなどを含むことが意図される。
【0177】
[00195]本明細書で使用される語法および用語は、説明を目的とするものであり、限定と見なされるべきではないことを理解されたい。むしろ、本明細書で使用される語句および用語は、それらの最も広い解釈および意味を与えられるべきである。「含んでいる」および「備えている」ならびにそれらの変形の使用は、その後に列挙される項目およびその均等物、ならびに追加の項目およびその均等物を包含することが意味される。「接続された」、「結合された」、および同様の用語の使用は、直接的および間接的の両方の接続および結合を含むことが意味される。
【0178】
[00196]本開示で列挙されるすべての例および条件付き言語は、読者が本開示を理解するのを助けるための教育学的例のために意図されており、そのような具体的に列挙される例および条件に限定されないものとして解釈されるべきである。本開示の例示的な実施形態を詳細に説明したが、本開示の趣旨および範囲から逸脱することなく、様々な変更、置換および変形が、これに対してなされ得る。したがって、本開示の範囲は、この詳細説明によってではなく、本明細書に添付された特許請求の範囲によって限定されることが意図されている。
図1
図2
図3
図4A
図4B
図4C
図5
図6
図7
図8A
図8B
図8C
図8D
図8E
図9
図10
図11
図12
図13
図14
図15
図16
図17