UI Automation テキスト単位

このトピックでは、Microsoft UI Automation TextRange コントロール パターンでサポートされるテキスト 単位について説明します。 UI Automation プロバイダーとクライアントは、テキスト単位を使用して、テキスト範囲のサイズを移動または変更する量を指定します。

テキスト ユニット API 要素

UI Automation API には、テキスト単位を指定する必要がある次のメソッドが含まれています:

TextUnit 列挙体は、UI Automation のテキスト範囲でサポートされるテキスト単位を定義します。 テキスト単位を指定するには、ITextRangeProvider または IUIAutomationTextRange メソッドの呼び出しで TextUnit 列挙体のメンバー を指定します。 テキスト単位は、最小から最大まで、次のとおりです:

特定のテキスト ベースのコントロールが指定されたテキスト単位をサポートしていない場合、プロバイダーは、コントロールでサポートされている次の大きなテキスト単位を置き換えて応答する必要があります。 たとえば、TextUnit_Paragraph が指定されていてもサポートされていない場合、メソッドは TextUnit_Page または TextUnit_Document に置き換えることができます。

ソース テキストの言語的特性により、プロバイダーが指定したテキスト単位に基づいてテキストの境界を決定することが困難になる場合があります。 テキストの境界を決定する際に役立つよう、プロバイダーは ScriptBreak などの Uniscribe API 関数を使用できます。 詳細については、MSDN Web サイトの Uniscribe を参照してください。

エンドポイントのインクルーシビティ

テキスト ユニット エンドポイントは、同じ種類の隣接するテキスト範囲の開始エンドポイントと終了エンドポイントの両方として機能できます。 1 つのテキストユニットの末尾が別のテキストユニットの先頭でもある場合、終了エンドポイントを含む範囲は、開始エンドポイントを含む隣接する範囲の属性またはオブジェクトを共有しません。

たとえば、テキスト ストリーム "Hello world" には、フォントの太さ属性 (標準と太字) が異なる 2 つの単語単位が含まれています。 この場合、単語ユニット "Hello" の終了 エンドポイントと単語ユニット " world" の 開始エンドポイントは同じになり、次のようになります:

  • "Hello" の範囲は、単語単位 "world" の太字属性を共有せず、フォントの太さテキスト属性の混合属性値を返しません。
  • "world" の範囲には 1 つのフォントの太さ (太字) があり、前の単語単位 "Hello" のフォントの太さは共有されません。

テキスト ストリームに 2 つの単語単位が含まれているもう 1 つの例を次に示します。そのうちの 1 つはリンク: [Foo]() Bar です。 この場合、 単語単位 [Foo]()終了エンドポイントと 単語単位 "Bar" の開始エンドポイントは同じになり、次のようになります:

  • リンクは、"Foo" を含むテキスト範囲に属しています。
  • リンクはテキスト範囲 "Foo" の子であり、ITextProvider で囲まれています。
  • テキスト範囲 "Bar" には子がなく、ITextProvider で囲まれています。

追加メモ:

同じ型のテキスト範囲を持つテキスト単位の境界にある縮退 (空) 範囲は、すぐに隣接するテキスト単位のプロパティを前提としています。

IUIAutomationTextRange::ExpandToEnclosingUnit を、同じ型のテキスト範囲を持つテキスト単位境界の縮退範囲で呼び出すと、縮退範囲が次のテキスト単位に拡張されます。

テキスト単位の説明

このセクションでは、UI Automation でサポートされる各テキスト 単位について説明します。

文字

TextUnit_Character は、1 文字を表すテキストの言語単位です。 文字の言語定義は言語によって異なります。 米国英語の場合、文字は通常、スペースまたは別の文字 (句読点、数字、文字など) で囲まれます。

復帰や Unicode の左から右へのマーク (LTM) などの制御文字は文字と見なすべきではありませんが、文字テキスト単位に基づいて正規化されたテキスト範囲に含まれる場合があります。

区切り記号や単語区切り文字 (スペースなど) は文字と見なす必要があります。

形式

TextUnit_Format は、テキストの書式設定属性に基づいてテキスト範囲の境界を配置するために使用されます。 たとえば、現在、テキスト範囲が単語の 1 文字に配置されている場合、IUIAutomationTextRange::ExpandToEnclosingUnit の呼び出しで TextUnit_Format を指定すると、テキスト範囲が展開され、1 文字と同じ属性をすべて共有するすべてのテキストが含まれます。 結果のテキスト範囲には、単語全体が含まれている場合と含まれていない場合があります。 また、テキストの書式設定単位を使用しても、画像やハイパーリンクなどの埋め込みオブジェクトの境界を越えてテキスト範囲が展開されることはありません。

それ自体より小さいテキスト単位を含む他のテキスト単位とは異なり、 TextUnit_Format は他の単位よりも小さくも大きくもなる可能性があります。 たとえば、文書全体が同じテキスト属性を共有し、埋め込みオブジェクトを含まない場合、TextUnit_Format でテキスト範囲を展開すると、文書全体を含む新しい範囲が作成され、TextUnit_Word でテキスト範囲を展開すると、より小さな範囲が作成されます。

Word

TextUnit_Word は、1 つの単語全体を表すテキストの言語単位です。 単語の言語定義は言語によって異なります。 米国英語の場合、単語は通常、スペースまたは句読点文字で囲まれます。

TextUnit_Word を使用してテキスト範囲の境界を設定する場合、結果のテキスト範囲には、単語の末尾に存在し、次の単語の先頭より前にある単語区切り文字が含まれている必要があります。

折れ線グラフ

TextUnit_Line は、コントロールのビューポートに表示される 1 行のテキストを表すテキストの単位です。 TextUnit_Line を使用して テキスト範囲の境界を設定する場合、プロバイダーは、コントロール文字が改行する位置、またはコントロールのビューポートがテキストを新しい行に折り返す位置の直後に境界を設定する必要があります。 境界は、新しい行の開始位置に設定する必要があります。

段落

TextUnit_Paragraph は、完全な段落を表すテキストの言語単位です。 段落は、段落の最初の文字の直前に開始し、通常は最後の文字の直後に終了する必要があります。 テキスト ソース内の何かが特に指定されていない限り、段落の後の空の行を段落にマージする必要があります。 通常、段落の終了境界は、TextUnit_Line テキスト単位の終了境界もマークします。

ページ

TextUnit_Page は、ドキュメントの完全なテキスト ページを表します。 ページの境界は、ページの開始位置と終了位置の直接に設定する必要があります。

Document

TextUnit_Document は、Text コントロール パターンでサポートされているドキュメントの内容全体を表します。 文書を含むテキスト範囲の外側にテキストを存在させる必要はありません。 ページ境界を越える注釈メモなど、ドキュメントに挿入されるすべてのオブジェクトは、ドキュメントのテキスト コンテンツの一部ではなく、ドキュメントの埋め込みオブジェクトとして扱う必要があります。

その他の潜在的な範囲

現在の TextRange コントロール パターン仕様では、新しいテキスト単位値をTextUnit 列挙体に追加することも、既存のテキスト単位値を再定義することもできません。 ヘッダーや注釈など、他の潜在的な範囲を公開するには、プロバイダーはこれらの範囲を、関連付けられたテキスト範囲を持つ埋め込みオブジェクトとして公開する必要があります。 そうすることで、適切なコントロール パターンのサポートを追加することもできます。 このソリューションは、新しいテキスト単位を定義するよりも柔軟で拡張可能です。

リファレンス

TextPatternRangeEndpoint

ITextRangeProvider::GetChildren

概念

Textual Content 用 UI Automation Support

テキスト ベースのコントロールの操作