Поделиться через


модель автоматизации пользовательского интерфейса текстовых единиц

В этом разделе описываются текстовые единицы, поддерживаемые шаблоном элемента управления Microsoft модель автоматизации пользовательского интерфейса TextRange. модель автоматизации пользовательского интерфейса поставщики и клиенты используют текстовые единицы для указания объема, по которому следует перемещать или изменять размер текстового диапазона.

Элементы API единиц текста

API модель автоматизации пользовательского интерфейса включает следующие методы, требующие указания текстового блока:

Перечисление TextUnit определяет текстовые единицы, поддерживаемые модель автоматизации пользовательского интерфейса текстовыми диапазонами. Чтобы указать текстовое подразделение, элемент перечисления TextUnit указывается в вызове метода ITextRangeProvider или IUIAutomationTextRangeRange. Текстовые единицы, от наименьших до крупнейших, приведены следующим образом:

Если определенный текстовый элемент управления не поддерживает указанную единицу текста, поставщик должен отвечать, подставив следующее большее текстовое подразделение, поддерживаемое элементом управления. Например, если TextUnit_Paragraph указан, но не поддерживается, метод может заменить TextUnit_Page или TextUnit_Document.

Лингвистические характеристики исходного текста могут затруднить поставщику определить границы текста на основе указанного текстового блока. Для определения границ текста поставщик может использовать функции API Юниписи, такие как ScriptBreak. Дополнительные сведения см. в разделе Uniscribe.

Некластивность конечной точки

Конечная точка единицы текста может служить как конечной точкой запуска, так и конечной точкой для смежных текстовых диапазонов одного типа. Если конец одной текстовой единицы также является началом другого текстового блока, диапазон, содержащий конечную точку end , не использует атрибуты или объекты соседнего диапазона, содержащего конечную точку Start .

Например, текстовый поток "Hello world" содержит два единицы слова с различными атрибутами веса шрифта (обычный и полужирный). В этом случае конечная точка единицы слова "Hello" и начальной конечной точки единицы слова "world" совпадают, что приводит к следующему:

  • Диапазон "Hello" не разделяет полужирный атрибут единицы слова "world" и не возвращает значение смешанного атрибута для атрибута веса шрифта.
  • Диапазон "world" имеет один вес шрифта (полужирный) и не разделяет вес шрифта предыдущего блока слова "Hello".

Ниже приведен еще один пример, в котором текстовый поток содержит два единицы слова, одно из которых является ссылкой: [Foo]() Bar В этом случае конечная точка единицы [Foo]() слова и начальной конечной точки блока слова "Панель" совпадают, что приводит к следующему:

  • Ссылка относится к текстовому диапазону, содержаму "Foo".
  • Ссылка является дочерним элементом текстового диапазона "Foo" и заключена в ITextProvider.
  • Текстовый диапазон "Панель" не имеет дочерних элементов и заключен в ITextProvider.

Дополнительные заметки:

Дегенерный (пустой) диапазон на границе текстового блока с текстовым диапазоном того же типа предполагает свойства немедленного соседнего текстового блока.

Вызов IUIAutomationTextRange::ExpandToEnclosingUnit в дегенерируемом диапазоне на границе текстового блока с текстовым диапазоном того же типа расширяет дегенерный диапазон до следующей текстовой единицы.

Описания текстовых единиц

В этом разделе описывается каждый из текстовых единиц, поддерживаемых модель автоматизации пользовательского интерфейса.

Символ

TextUnit_Character — это лингвистическая единица текста, представляющая один символ. Лингвистическое определение символа зависит от языка. Для английского языка США символ обычно обрамлен пробелом или другим символом, например знак препинания, числом или буквой.

Управляющие символы, такие как возврат каретки, и символы Юникода слева направо (LTM) не должны рассматриваться как символы, но могут быть включены в текстовый диапазон, нормализованный на основе текстового блока символов.

Знаки препинания и символы разбиения слов, такие как пробелы, должны рассматриваться как символы.

Формат

TextUnit_Format используется для позиционирования границы текстового диапазона на основе атрибутов форматирования текста. Например, если текстовый диапазон в настоящее время расположен на одном символе слова, указывая TextUnit_Format в вызове IUIAutomationTextRange::ExpandToEnclosingUnit , чтобы включить весь текст, который использует все те же атрибуты, что и один символ. Результирующий текстовый диапазон может или не включать все слово. Кроме того, использование текстового блока форматирования не будет расширять текстовый диапазон по границе внедренного объекта, например изображения или гиперссылки.

В отличие от других текстовых единиц, которые включают текстовые единицы, которые меньше себя, TextUnit_Format могут быть меньше или больше, чем другие единицы. Например, если весь документ содержит одинаковые текстовые атрибуты и не содержит внедренных объектов, расширение текстового диапазона TextUnit_Format создаст новый диапазон, охватывающий весь документ, а расширение диапазона текста TextUnit_Word создаст меньший диапазон.

Word

TextUnit_Word — это лингвистическая единица текста, представляющая одно целое слово. Лингвистическое определение слова зависит от языка. Для английского языка США слова обычно обрамляются пробелами или знаками препинания.

Если TextUnit_Word используется для задания границы текстового диапазона, результирующий текстовый диапазон должен содержать любые символы разбиения слов, которые присутствуют в конце слова, но до начала следующего слова.

График

TextUnit_Line — это единица текста, представляющая одну строку текста, представленную в представлении элемента управления. При использовании TextUnit_Line для задания границы текстового диапазона поставщик должен задать границу сразу после точки, в которой символ элемента управления прерывает линию или где окно просмотра элемента управления помещает текст в новую строку. Граница должна быть задана, где начинается новая строка.

Абзац

TextUnit_Paragraph — это лингвистическая единица текста, представляющая полный абзац. Абзац должен начинаться непосредственно перед первым символом абзаца и обычно должен заканчиваться сразу после последнего символа. Любые пустые строки после абзаца должны быть объединены в абзац, если в текстовом источнике не указано в противном случае. Как правило, конечная граница абзаца также помечает конечную границу TextUnit_Line текстовой единицы.

Стр.

TextUnit_Page представляет полную текстовую страницу документа. Границы страницы должны быть заданы непосредственно в точках, где начинается и заканчивается страница.

Документ

TextUnit_Document представляет все содержимое документа, которое поддерживается шаблоном элемента управления "Текст". Текст не должен существовать вне текстового диапазона, содержащего документ. Все объекты, вставляемые в документ, такие как заметки заметок, пересекающих границу страницы, должны рассматриваться как внедренные объекты документа, а не часть текстового содержимого документа.

Другие потенциальные диапазоны

Текущая спецификация шаблона элемента управления TextRange не позволяет добавлять новые значения единиц текста в перечисление TextUnit , а также не позволяет переопределять существующие значения единиц текста. Чтобы предоставить другие потенциальные диапазоны, такие как заголовки и заметки, поставщик должен предоставлять эти диапазоны как внедренные объекты с соответствующим текстовым диапазоном. Таким образом можно также добавить поддержку соответствующих шаблонов элементов управления. Это решение является более гибким и расширяемым, чем определение новых текстовых единиц.

Справочные материалы

TextPatternRangeEndpoint

ITextRangeProvider::GetChildren

Основные понятия

поддержка текстового содержимого модель автоматизации пользовательского интерфейса

Работа с элементами управления на основе текста