Partilhar via


Unidades de texto de automação da interface do usuário

Este tópico descreve as unidades de texto suportadas pelo padrão de controle de Microsoft UI Automation TextRange. Os provedores e clientes de automação da interface do usuário usam unidades de texto para especificar a quantidade pela qual mover ou alterar o tamanho de um intervalo de texto.

Elementos da API da unidade de texto

A API de automação da interface do usuário inclui os seguintes métodos que exigem que uma unidade de texto seja especificada:

A enumeração TextUnit define as unidades de texto suportadas pelos intervalos de texto da Automação da Interface do Usuário. Para especificar a unidade de texto, um membro da enumeraçãoTextUnit é especificado em uma chamada para um ITextRangeProvider ou método IUIAutomationTextRange. As unidades de texto, do menor para o maior, são as seguintes:

Se um determinado controle baseado em texto não suportar a unidade de texto especificada, o provedor deve responder substituindo a próxima unidade de texto maior que é suportada pelo controle. Por exemplo, se TextUnit_Paragraph for especificado, mas não for suportado, o método pode substituir TextUnit_Page ou TextUnit_Document.

As características linguísticas do texto de partida podem tornar difícil para um provedor determinar os limites do texto com base na unidade de texto especificada. Para obter ajuda na determinação de limites de texto, um provedor pode usar funções de API Uniscribe, como ScriptBreak. Para obter mais informações, consulte Uniscribe.

Inclusão no endpoint

Um ponto de extremidade de unidade de texto pode servir como um ponto de extremidade Início e um ponto de extremidade Fim para intervalos de texto adjacentes do mesmo tipo. Se o final de uma unidade de texto for também o início de outra unidade de texto, o intervalo que contém o ponto de extremidade End não compartilhará atributos ou objetos do intervalo adjacente que contém o ponto de extremidade Start.

Por exemplo, um fluxo de texto, "Hello world", contém duas unidades de palavras com diferentes atributos de peso de fonte (normal e negrito). Neste caso, o ponto final da unidade de palavras "Olá" e o ponto de extremidade Início da unidade de palavras "mundo" são os mesmos, o que resulta no seguinte:

  • O intervalo de "Olá" não compartilha o atributo negrito da unidade de palavra "mundo" e não retorna o valor de atributo misto para o atributo de texto de peso da fonte.
  • O intervalo de "mundo" tem um único peso de fonte (negrito), e não compartilha o peso da fonte da unidade de palavra anterior "Olá".

Aqui está outro exemplo em que um fluxo de texto contém duas unidades de palavras, uma das quais é um link: [Foo]() Bar. Nesse caso, o ponto de extremidade da unidade de palavra [Foo]() e o ponto de extremidade de início de da unidade de palavra "Barra" são os mesmos, o que resulta no seguinte:

  • O link pertence ao intervalo de texto que contém "Foo".
  • O link é filho do intervalo de texto "Foo" e é incluído pelo ITextProvider.
  • O intervalo de texto "Bar" não tem filhos e é incluído pelo ITextProvider.

Notas adicionais:

Um intervalo degenerado (vazio) em um limite de unidade de texto com um intervalo de texto do mesmo tipo assume propriedades da unidade de texto imediatamente adjacente.

Chamar IUIAutomationTextRange::ExpandToEnclosingUnit em um intervalo degenerado em um limite de unidade de texto com um intervalo de texto do mesmo tipo, expande o intervalo degenerado para a unidade de texto a seguir.

Descrições de unidades de texto

Esta seção descreve cada uma das unidades de texto suportadas pela Automação da Interface do Usuário.

Personagem

TextUnit_Character é uma unidade linguística de texto que representa um único caractere. A definição linguística de um caractere varia de acordo com o idioma. Para o inglês dos EUA, um caractere normalmente é limitado por um espaço ou outro caractere, como um sinal de pontuação, um número ou uma letra.

Caracteres de controle, como retornos de carro e a marca Unicode da esquerda para a direita (LTM) não devem ser considerados caracteres, mas podem ser incluídos em um intervalo de texto que é normalizado com base na unidade de texto de caracteres.

Os sinais de pontuação e os carateres de quebra de palavras, tais como espaços, devem ser considerados carateres.

Formato

TextUnit_Format é usado para posicionar o limite de um intervalo de texto com base nos atributos de formatação do texto. Por exemplo, se um intervalo de texto estiver atualmente posicionado em um único caractere de uma palavra, especificar TextUnit_Format em uma chamada para IUIAutomationTextRange::ExpandToEnclosingUnit expandirá o intervalo de texto para incluir todo o texto que compartilha todos os mesmos atributos que o caractere único. O intervalo de texto resultante pode ou não incluir a palavra inteira. Além disso, usar a unidade de texto de formato não expandirá um intervalo de texto através do limite de um objeto incorporado, como uma imagem ou hiperlink.

Ao contrário das outras unidades de texto, que incluem as unidades de texto que são menores do que elas mesmas, TextUnit_Format podem ser menores ou maiores do que as outras unidades. Por exemplo, se um documento inteiro compartilha os mesmos atributos de texto e não contém objetos incorporados, expandir um intervalo de texto por TextUnit_Format criaria um novo intervalo que englobaria todo o documento, enquanto expandir o intervalo de texto por TextUnit_Word criaria um intervalo menor.

Palavra

TextUnit_Word é uma unidade linguística de texto que representa uma única palavra inteira. A definição linguística de uma palavra varia de acordo com a língua. Para o inglês dos EUA, as palavras são normalmente bordejadas por espaços ou caracteres de pontuação.

Quando TextUnit_Word é usado para definir o limite de um intervalo de texto, o intervalo de texto resultante deve incluir todos os caracteres de quebra de palavra que estão presentes no final da palavra, mas antes do início da próxima palavra.

Linha

TextUnit_Line é uma unidade de texto que representa uma única linha de texto conforme apresentado no visor do controle. Ao usar TextUnit_Line para definir o limite de um intervalo de texto, um provedor deve definir o limite imediatamente após o ponto onde um caractere de controle quebra a linha ou onde o visor do controle quebra o texto para uma nova linha. O limite deve ser definido onde uma nova linha começa.

Parágrafo

TextUnit_Paragraph é uma unidade linguística de texto que representa um parágrafo completo. Um parágrafo deve começar imediatamente antes do primeiro caractere de um parágrafo e normalmente deve terminar logo após o último caractere. Quaisquer linhas vazias após um parágrafo devem ser mescladas no parágrafo, a menos que algo na fonte do texto indique o contrário. Normalmente, o limite final de um parágrafo também marca o limite final de uma unidade de texto TextUnit_Line.

Página

TextUnit_Page representa uma página de texto completa de um documento. Os limites de uma página devem ser definidos nos pontos imediatos onde uma página começa e termina.

Documento

TextUnit_Document representa todo o conteúdo de um documento, conforme suportado pelo padrão de controle texto. Nenhum texto deve existir fora de um intervalo de texto que contenha um documento. Todos os objetos inseridos em um documento, como anotações que cruzam um limite de página, devem ser tratados como objetos incorporados do documento e não como parte do conteúdo de texto do documento.

Outras gamas potenciais

A especificação atual do padrão de controle TextRange não permite que novos valores de unidade de texto sejam adicionados à enumeraçãoTextUnit, nem permite que os valores de unidade de texto existentes sejam redefinidos. Para expor outros intervalos potenciais, como cabeçalhos e anotações, um provedor deve expor esses intervalos como objetos incorporados com um intervalo de texto associado. Dessa forma, você também pode adicionar suporte para os padrões de controle apropriados. Esta solução é mais flexível e extensível do que a definição de novas unidades de texto.

Referência

TextPatternRangeEndpoint

ITextRangeProvider::GetChildren

Conceptual

Suporte de automação de interface do usuário para conteúdo textual

Trabalhando com controles baseados em texto