Compartilhar via


unidades de texto da Automação da Interface do Usuário

Este tópico descreve as unidades de texto com suporte no padrão de controle TextRange da Automação da Interface do Usuário da Microsoft. Os clientes e os provedores de Automação da Interface do Usuário usam unidades de texto para especificar a quantidade pela qual o tamanho de um intervalo de texto deve ser movido ou alterado.

Elementos da API de 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 com suporte nos intervalos de texto da Automação da Interface do Usuário. Para especificar a unidade de texto, um membro da enumeração TextUnit é especificado em uma chamada a um método ITextRangeProvider ou IUIAutomationTextRange. As unidades de texto, da menor para a maior, são as seguintes:

Se determinado controle baseado em texto não der suporte à unidade de texto especificada, o provedor deverá responder substituindo a próxima unidade de texto maior que tenha suporte no controle. Por exemplo, se TextUnit_Paragraph for especificado, mas não houver suporte para ela, o método poderá substituir TextUnit_Page ou TextUnit_Document.

As características linguísticas do texto de origem podem dificultar para um provedor determinar os limites de texto com base na unidade de texto especificada. Para obter ajuda a fim de determinar os limites de texto, um provedor pode usar as funções da API Uniscribe, como ScriptBreak. Para obter mais informações, confira Uniscribe no site do MSDN.

Inclusividade do ponto de extremidade

Um ponto de extremidade de unidade de texto pode servir como um ponto de extremidade Inicial e um ponto de extremidade Final para intervalos de texto adjacentes do mesmo tipo. Se o final de uma unidade de texto também for o início de outra unidade de texto, o intervalo que contém o ponto de extremidade Final não compartilhará nenhum atributo ou objeto do intervalo adjacente que contém o ponto de extremidade Inicial.

Por exemplo, um fluxo de texto, “Olá mundo”, contém duas unidades de palavras com atributos de peso de fonte diferentes (normal e negrito). Nesse caso, o ponto de extremidade Final da unidade de palavra “Olá” e o ponto de extremidade Inicial da unidade de palavra “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 espessura da fonte.
  • O intervalo de “mundo” tem um só peso de fonte (negrito) e não compartilha o peso da fonte da unidade de palavra anterior “Olá”.

Este é 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 Final da unidade de palavra [Foo]() e o ponto de extremidade Inicial da unidade de palavra “Bar” 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 fica entre o ITextProvider.
  • O intervalo de texto “Bar” não tem filhos e fica entre o ITextProvider.

Observações adicionais:

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

A chamada a IUIAutomationTextRange::ExpandToEnclosingUnit em um intervalo de degeneração em um limite de unidade de texto com um intervalo de texto do mesmo tipo expande o intervalo de degeneração para a unidade de texto seguinte.

Descrições da unidade de texto

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

Character

TextUnit_Character é uma unidade linguística de texto que representa um caractere individual. A definição linguística de um caractere varia conforme o idioma. No inglês dos EUA, um caractere costuma ser acompanhado por um espaço ou outro caractere, como um sinal de pontuação, um número ou uma letra.

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

Sinais de pontuação e caracteres de quebra de palavra, como espaços, devem ser considerados caracteres.

Formatar

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 posicionado atualmente em um só caractere de uma palavra, a especificação de TextUnit_Format em uma chamada a IUIAutomationTextRange::ExpandToEnclosingUnit expandirá o intervalo de texto para incluir todo o texto que compartilha todos os mesmos atributos que o caractere individual. O intervalo de texto resultante pode ou não incluir a palavra inteira. Além disso, o uso da unidade de texto de formato não expandirá um intervalo de texto pelo limite de um objeto incorporado, como uma imagem ou um 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 pode ser menor ou maior que as outras unidades. Por exemplo, se um documento inteiro compartilhar os atributos de texto e não contiver objetos incorporados, a expansão de um intervalo de texto por TextUnit_Format criará um intervalo que abrange todo o documento, enquanto a expansão do intervalo de texto por TextUnit_Word criará um intervalo menor.

Word

TextUnit_Word é uma unidade linguística de texto que representa uma palavra inteira individual. A definição linguística de uma palavra varia conforme o idioma. No inglês dos EUA, as palavras costumam ser acompanhadas 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 estejam presentes no final da palavra, mas antes do início da próxima palavra.

Linha

TextUnit_Line é uma unidade de texto que representa uma só 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 em que um caractere de controle quebra a linha ou em que o visor do controle quebra o texto em uma nova linha. O limite deve ser definido no ponto em que 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 logo antes do primeiro caractere de um parágrafo e normalmente deve terminar logo após o último caractere. Todas as 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.

Page

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

Documento

TextUnit_Document representa todo o conteúdo de um documento, conforme o suporte fornecido pelo padrão de controle Text. 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.

Outros intervalos potenciais

A especificação atual do padrão de controle TextRange não permite que novos valores de unidade de texto sejam adicionados à enumeração TextUnit 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 aos padrões de controle apropriados. Essa solução é mais flexível e extensível do que a definição de novas unidades de texto.

Referência

TextPatternRangeEndpoint

ITextRangeProvider::GetChildren

Conceitual

Suporte da Automação da Interface do Usuário ao conteúdo textual

Como trabalhar com controles baseados em texto