Unidades de texto de automatización de la interfaz de usuario

En este tema se describen las unidades de texto compatibles con el patrón de control TextRange de la automatización de la interfaz de usuario de Microsoft. Los proveedores y clientes de automatización de la interfaz de usuario usan unidades de texto para especificar la cantidad en la que mover o cambiar el tamaño de un intervalo de texto.

Elementos de API de unidad de texto

La API de automatización de la interfaz de usuario incluye los métodos siguientes que requieren que se especifique una unidad de texto:

La enumeración TextUnit define las unidades de texto admitidas por los intervalos de texto de la automatización de la interfaz de usuario. Para especificar la unidad de texto, se especifica un miembro de la enumeración TextUnit en una llamada a un método ITextRangeProvider o IUIAutomationTextRange. Las unidades de texto, de menor a mayor, son las siguientes:

Si un control determinado basado en texto no admite la unidad de texto especificada, el proveedor debe responder sustituyendo la siguiente unidad de texto más grande compatible con el control. Por ejemplo, si se especifica TextUnit_Paragraph, pero no se admite, el método puede sustituir TextUnit_Page o TextUnit_Document.

Las características lingüísticas del texto de origen pueden dificultar que un proveedor determine los límites de texto en función de la unidad de texto especificada. Para obtener ayuda para determinar los límites de texto, un proveedor puede usar funciones de la API de Uniscribe, como ScriptBreak. Para obtener más información, consulte Uniscribe en el sitio web de MSDN.

Inclusividad de los extremos

El extremo de una unidad de texto puede servir como extremo de inicial y extremo final para intervalos de texto adyacentes del mismo tipo. Si el final de una unidad de texto es también el inicio de otra unidad de texto, el intervalo que contiene el extremo final no comparte ningún atributo ni objeto del intervalo adyacente que contenga el extremo inicial.

Por ejemplo, una secuencia de texto "Hola, mundo", contiene dos palabras con diferentes atributos de espesor de fuente (normal y negrita). En este caso, el extremo final de la palabra "Hello" y el extremo inicial de la palabra "world" son el mismo, lo que da como resultado lo siguiente:

  • El intervalo de "Hola" no comparte el atributo de negrita de la palabra "mundo" y no devuelve el valor de atributo mixto para el atributo de texto de espesor de la fuente.
  • El intervalo de "mundo" tiene un solo espesor de fuente (negrita) y no tiene el espesor de fuente de la palabra anterior, "Hola".

Este es otro ejemplo en el que una secuencia de texto contiene dos palabras, una de las cuales es un vínculo: [Foo]() Bar. En este caso, el extremo final de la palabra [Foo]() y el extremo inicial de la palabra "Bar" son el mismo, lo que da como resultado lo siguiente:

  • El vínculo pertenece al intervalo de texto que contiene "Foo".
  • El vínculo es un elemento secundario del intervalo de texto "Foo" y está delimitado por ITextProvider.
  • El intervalo de texto "Barra" no tiene elementos secundarios y está delimitado por ITextProvider.

Notas adicionales:

Un intervalo degenerado (vacío) en un límite de unidad de texto con un intervalo de texto del mismo tipo asume las propiedades de la unidad de texto adyacente inmediatamente.

Si se llama a IUIAutomationTextRange::ExpandToEnclosingUnit en un intervalo degenerado en un límite de unidad de texto con un intervalo de texto del mismo tipo, se amplía el intervalo degenerado a la siguiente unidad de texto.

Descripciones de unidades de texto

En esta sección se describe cada una de las unidades de texto admitidas por la automatización de la interfaz de usuario.

Carácter

TextUnit_Character es una unidad lingüística de texto que representa un solo carácter. La definición lingüística de un carácter varía según el idioma. En el caso del inglés de EE. UU., un carácter suele estar bordeado por un espacio u otro carácter, como un signo de puntuación, un número o una letra.

Los caracteres de control, como los retornos de carro y la marca Unicode de izquierda a derecha (LTM) no se deben considerar caracteres, pero se pueden incluir en un intervalo de texto normalizado en función de la unidad de texto de caracteres.

Los signos de puntuación y los caracteres de salto de palabra, como los espacios, deben considerarse caracteres.

Formato

TextUnit_Format se usa para colocar el límite de un intervalo de texto en función de los atributos de formato del texto. Por ejemplo, si un intervalo de texto está colocado en un solo carácter de una palabra, al especificar TextUnit_Format en una llamada a IUIAutomationTextRange::ExpandToEnclosingUnit se amplía el intervalo de texto para incluir todo el texto que comparte los mismos atributos que el carácter individual. El intervalo de texto resultante puede incluir o no toda la palabra. Además, al usar la unidad de formato de texto no se ampliará el intervalo de texto a lo largo de los límites de un objeto incrustado, como una imagen o un hipervínculo.

A diferencia de las otras unidades de texto, que incluyen las unidades de texto que son más pequeñas que ellas mismas, TextUnit_Format puede ser menor o mayor que las otras unidades. Por ejemplo, si en la totalidad de un documento se usan los mismos atributos de texto y no hay objetos incrustados, la ampliación de un intervalo de texto mediante TextUnit_Format creará un nuevo intervalo que abarcará todo el documento, mientras que la ampliación de un intervalo de texto mediante TextUnit_Word creará un intervalo más pequeño.

Word

TextUnit_Character es una unidad lingüística de texto que representa una sola palabra. La definición lingüística de una palabra varía según el idioma. En el caso del inglés de EE. UU., las palabras suelen estar bordeadas por espacios o caracteres de puntuación.

Cuando se usa TextUnit_Word para establecer el límite de un intervalo de texto, el intervalo de texto resultante debe incluir los caracteres de salto de palabra que estén presentes al final de la palabra, pero antes del inicio de la siguiente palabra.

Línea

TextUnit_Line es una unidad de texto que representa una sola línea de texto tal como se muestra en la ventanilla del control. Cuando se usa TextUnit_Line para establecer el límite de un intervalo de texto, un proveedor debe establecer el límite inmediatamente después del punto en el que un carácter de control interrumpe la línea, o bien donde la ventanilla del control ajusta el texto a una nueva línea. El límite debe establecerse donde se inicia una nueva línea.

Párrafo

TextUnit_Paragraph es una unidad lingüística de texto que representa un párrafo completo. Un párrafo debe comenzar justo antes del primer carácter de un párrafo y, normalmente, debería terminar justo después del último carácter. Las líneas vacías que siguen a un párrafo deben combinarse en el párrafo, a menos que algo en el origen de texto indique lo contrario. Normalmente, el límite final de un párrafo también marca el límite final de una unidad de textoTextUnit_Line .

Page

TextUnit_Page representa una página de texto completa de un documento. Los límites de una página deben establecerse en los puntos inmediatos donde se inicia y finaliza una página.

Documento

TextUnit_Document representa la totalidad del contenido de un documento tal y como admite el patrón de control Text. No debe haber ningún texto fuera del intervalo de texto que contenga un documento. Los objetos que se insertan en un documento, como las notas de anotación que cruzan un límite de página, deben tratarse como objetos incrustados del documento y no como parte del contenido de texto del documento.

Otros intervalos posibles

La especificación actual del patrón de control TextRange no permite agregar nuevos valores de unidad de texto a la enumeración TextUnit ni permite volver a definir los valores de unidad de texto existentes. Para exponer otros intervalos posibles, como encabezados y anotaciones, un proveedor debe exponer estos intervalos como objetos incrustados con un intervalo de texto asociado. De este modo, también se puede agregar compatibilidad con los patrones de control adecuados. Esta solución es más flexible y ampliable que definir nuevas unidades de texto.

Referencia

TextPatternRangeEndpoint

ITextRangeProvider::GetChildren

Conceptual

Compatibilidad de automatización de la interfaz de usuario con el contenido textual

Trabajo con controles basados en texto