バージョン

スナップショットの使用 (xamSyntaxEditor)

トピックの概要

目的

このトピックでは、 TextDocumentSnapshot クラスと TextDocumentSnapshotScanner クラスの機能を紹介します。

前提条件

このトピックの本題に入る前に、以下のトピックをお読みください。

トピック 目的

このトピックでは、 xamSyntaxEditor の 機能をわかりやすく解説します。

このトピックでは、開発者とユーザー双方の視点から xamSyntaxEditor コントロールのテキスト編集機能を取り上げます。

スナップショット

概要

スナップショットは、特定の瞬間における文書全体の状態を表した不変オブジェクトです。スナップショットは、( xamSyntaxEditor の 編集領域に入力するなど) 文書のコンテンツを変更するたびに作成されます。TextDocumentCurrentSnapshot プロパティには最新のスナップショットが保存され、タイプ TextDocumentSnapshot のオブジェクトを返します。

スナップショットはスレッドセーフなので、長時間かかる操作に使用しても、プロセスの間に発生する文書の変更を気に掛ける必要がありません。

用語:

用語 解説

オフセット

文書の先頭がゼロで始まる文字のインデックスです。

テキストのロケーション

ゼロで始まる行と、文書内の文字のロケーションを一意で識別する文字オフセットからなる構造体です。

トークン

文書の字句解析の際に生成されるトークンは、(キーワード、句読点、余白など) テキストのセクションを表します。テキストのトークンをすべて連結すると、文書のテキスト全体を再構築できます。

単語

トークンとは違って、 ワード 構造体で表現できるのはワードのみです (句読点、余白、区切り文字は不可)。

プロパティの要旨

以下の表は、文書情報の取得に利用できる読み取り専用のプロパティをまとめたものです。

プロパティ 解説

文字数で示すスナップショットの長さ。

スナップショット内の行数。

スナップショット内のトークン数。

メソッドの要旨

以下の表は、スナップショットに表示されるパブリック メソッドをまとめたものです。

メソッド 解説

スナップショットのコンテンツの一部または全体を返します。

オプションのフィルター コールバックでトークンの前方列挙体または後方列挙体を返します。

前方行列挙体または後方行列挙体を返します。

ゼロから始まるインデックスで行を取得します。

文書内の文字オフセットから行を取得します。

文書内の文字オフセットから行インデックスを取得します。

オフセットからロケーションを取得します。

ロケーションからオフセットを取得します。

オフセットからトークンを取得します。

オフセットからワードを取得します。

Note
注:

TextDocumentSnapshot クラスのインデックスで、ゼロから始まるオフセット位置の文字をアクセスできます。

Note
注:

スナップショットの Find メソッドや FindAll メソッドでは、 検索/置換トピックで解説したような検索基準で 1 つまたは複数の一致テキストを検索できます。

スナップショット スキャナー

概要

スナップショットの CreateScanner メソッドは、TextDocumentSnaphot の特定のインスタンスを対象にした TextDocumentSnapshotScanner クラスを作成します。スナップショットの行、トークン、ワードを効率的にスキャンできて便利です。

Note
注:

対象のスナップショットはスレッドセーフですが、スキャナーはスレッドセーフではありません。スキャナーは、そのスキャナーを使用するスレッドと同じスレッドに作成してください。スレッドの 1 つにスキャナーを作成し、別のスレッドに作成したスキャナーのプロパティやメソッドをアクセスしようとすると、 InvalidOperationException が発生します。

スキャナーを初めて作成するときに、そのスキャナーの現在のスキャン位置がゼロに初期化されます。スキャン位置は、(CurrentOffset プロパティで) 明示的に設定するか、以下の “シーク” メソッドのどれかを呼び出して操作します。“ピーク” メソッドもいくつかあり、これらは、現在のスキャン位置を変更することなく、現在のスキャン位置を囲む トークンワード を取得するのに便利です。

プロパティの要旨

以下のプロパティでは、現在のスキャン位置に関するさまざまな情報を取得できます。

プロパティ 解説

文書の先頭から現在のオフセットを返すか、設定します。

CurrentOffset の位置の文字を返します。

CurrentOffset の位置を含む行を返します。

CurrentOffset の位置を含むトークンを返します。

注:

Note

CurrentOffset をスナップショットの長さに設定すると、EOS (end-of-stream) トークンを返します。

CurrentOffset を含むワードを返します。CurrentOffset がワード内にない場合、null を返します。

メソッドの要旨

以下のメソッドでは、現在のスキャン位置を前後に移動できます。

メソッド 解説

スナップショット コンテンツの最後にスキャン位置を移動します。

スナップショット コンテンツの特定行にスキャン位置を移動します。

スナップショット コンテンツの先頭にスキャン位置を移動します。

スキャン位置を次の/前の開始/終了トークンまで移動します。

スキャン位置を次の/前の開始/終了ワードまで移動します。

以下のメソッドでは、現在のスキャン位置を移動することなく、前後の文書の部分を確認できます。

メソッド 解説

次のトークンを返します。

次のワードを返します。

前のトークンを返します。

前のワードを返します。

関連コンテンツ

以下のトピックでは、このトピックに関連する追加情報を提供しています。

トピック 目的

このトピックでは、 xamSyntaxEditor コントロールのエラー警告機能の概要を提供し、コントロールの構成および操作を解説します。

このトピックでは、xamSyntaxEditor コントロールの検索、置換、すべて置換の操作について解説します。