Compartilhar via


Scripts complexos

Embora as funções discutidas no anterior funcionem bem para muitas linguagens, elas podem não lidar com as necessidades de scripts complexos. Scripts complexos são idiomas cujo formulário impresso não é renderizado de maneira simples. Por exemplo, um script complexo pode permitir renderização bidirecional, formatação contextual de glifos ou combinação de caracteres. Devido a esses requisitos especiais, o controle da saída de texto deve ser muito flexível.

As funções que exibem texto TextOut, ExtTextOut, TabbedTextOut, DrawText e GetTextExtentExPoint foram estendidas para dar suporte a scripts complexos. Em geral, esse suporte é transparente para o aplicativo. No entanto, os aplicativos devem salvar caracteres em um buffer e exibir uma linha inteira de texto ao mesmo tempo, para que os módulos complexos de formatação de script possam usar o contexto para reordenar e gerar glifos corretamente. Além disso, como a largura de um glifo pode variar de acordo com o contexto, os aplicativos devem usar GetTextExtentExPoint para determinar o comprimento da linha em vez de usar larguras de caractere armazenadas em cache.

Além disso, aplicativos complexos com reconhecimento de script devem considerar a adição de suporte para ordem de leitura da direita para a esquerda e alinhamento à direita para seus aplicativos. Você pode alternar a ordem de leitura ou o alinhamento entre a esquerda e a direita com o seguinte código:

// Save lAlign (this example uses static variables) 
static LONG lAlign = TA_LEFT;

// When user toggles alignment (assuming TA_CENTER is not supported). 

lAlign = TA_RIGHT;

// When the user toggles reading order. 

lAlign = TA_RTLREADING;

// Before calling ExtTextOut, for example, when processing WM_PAINT  

SetTextAlign (hDc, lAlign);

Para alternar ambos os atributos de uma só vez, execute a seguinte instrução e chame SetTextAlign e ExtTextOut, conforme mostrado anteriormente:

lAlign = TA_RIGHT^TA_RTLREADING;  //pre-inline !

Você também pode processar scripts complexos com Uniscribe. Uniscribe é um conjunto de funções que permitem um bom grau de controle para scripts complexos. Para obter mais informações, confira Uniscribe e Processando scripts complexos.