layout_object_transform ou wcslayout_object_transformar Subroutine

Propósito

Transforma o texto de acordo com os valores de layout atuais de uma estrutura LayoutObject

Biblioteca

Biblioteca de Layout (libi18n.a)

Sintaxe

#include <sys/lc_layout.h>
int layout_object_transform 
( layout_object,  InpBuf,  InpSize,  OutBuf,  OutSize,  InpToOut,  OutToInp,  BidiLvl)
LayoutObject layout_object;
const char *InpBuf;
size_t *InpSize;
void * OutBuf;
size_t *OutSize;
size_t  *InpToOut;
size_t *OutToInp;
unsigned char *BidiLvl;

int wcslayout_object_transform 
(layout_object, InpBuf, InpSize, OutBuf, OutSize, InpToOut, OutToInp, BidiLvl)
LayoutObject layout_object;
const char *InpBuf;
size_t *InpSize;
void *OutBuf;
Size_t *OutSize;
size_t *InpToOut;
size_t *OutToInp;
unsigned char *BidiLvl;

Descrição

As sub-rotinas layout_object_transform e wcslayout_object_transform transformarão o texto especificado pelo parâmetro InpBuf de acordo com os valores de layout atuais na estrutura LayoutObject . Qualquer valor de layout cujo tipo seja LayoutTextDescriptor descreve os atributos dentro dos parâmetros InpBuf e OutBuf. Se os atributos forem os mesmos que os parâmetros InpBuf e OutBuf , uma transformação nula será feita com relação a esse valor de layout específico.

A saída dessas subroutines pode ser um ou mais dos seguintes resultados dependendo da configuração dos respectivos parâmetros:

Item Descrição
OutBuf, OutSize Quaisquer dados transformados são armazenados no parâmetro OutBuf .
InpToOut Uma referência cruzada de cada elemento de código do parâmetro InpBuf para os dados transformados.
OutToInp Uma referência cruzada para cada elemento de código do parâmetro InpBuf dos dados transformados.
BidiLvl Um valor ponderado que representa o nível direcional de cada elemento de código do parâmetro InpBuf . O nível depende do algoritmo direcional interno da estrutura LayoutObject .

Você pode especificar cada um desses parâmetros de saída como Nulo para indicar que nenhuma saída é necessária para o parâmetro específico. No entanto, é necessário configurar pelo menos um desses parâmetros para um valor nonNULL para executar qualquer trabalho significativo.

Para executar a modelagem de uma cadeia de texto sem reordenar os elementos de código, defina o valor de layout TypeOfText como TEXT_VISUAL e os valores de entrada e saída do valor de layout Orientation como iguais. Esses valores de layout estão na estrutura LayoutObject .

Nota: Se você está desenvolvendo aplicativos internacionalizados que podem suportar os locales multibyte, por favor, veja Uso do Pacote libcur em Conceitos Gerais de Programação: Programas de escrita e depuração

Parâmetros

Item Descrição
objeto_de_layout Especifica a estrutura LayoutObject criada pela sub-rotina layout_object_create .
InpBuf Especifica o texto de origem a ser processado. Este parâmetro não pode ser nulo.
InpSize Especifica as unidades de elementos de código processados associados com os bytes para as sub-rotinas layout_object_transform e wcslayout_object_transform . Um valor de -1 indica que a entrada é delimitada por um elemento de código nulo. No retorno, o valor é modificado para o número real de elementos de código processados no parâmetro InBuf. Entretanto, se o valor no parâmetro OutSize for zero, o valor do parâmetro InpSize não será alterado.
OutBuf Contém os dados transformados. Você pode especificar este parâmetro como um ponteiro nulo para indicar que nenhum dado transformado é necessário.

A codificação do parâmetro OutBuf depende do valor do layout ShapeCharset definido na estrutura LayoutObject . Se o valor do layout ActiveShapeEditing estiver definido como True, a codificação do parâmetro OutBuf será a mesma do conjunto de códigos da localidade associada à estrutura LayoutObject.

OutSize Especifica o tamanho do buffer de saída em número de bytes. O buffer de saída deve ser grande o suficiente para conter o resultado transformado; caso contrário, apenas uma transformação parcial é realizada. Se o valor de layout ActiveShapeEditing for definido como True, o parâmetro OutBuf deverá ser alocado para conter pelo menos o número de elementos de código multiplicado pelo valor de layout ShapeCharsetSize.

No retorno, o parâmetro OutSize é modificado para o número real de bytes colocados neste parâmetro

Ao especificar o parâmetro OutSize como 0, a sub-rotina calcula o tamanho de um buffer de saída para ser grande o suficiente para conter o texto transformado. O resultado é retornado neste campo. O conteúdo dos buffers especificados pelo parâmetro InpBuf e OutBuf e um valor do parâmetro InpSize permanece inalterado.

InpToOut Representa uma matriz de valores com o mesmo número de elementos de código que o parâmetro InpBuf se o parâmetro InpToOut não for um ponteiro nulo.

Na saída, o enésimovalor no parâmetro InpToOut corresponde ao enésimoelemento de código no parâmetro InpBuf. Esse valor é o índice no parâmetro OutBuf que identifica o elemento ShapeCharset transformado do elemento nth code no parâmetro InpBuf . Você pode especificar o parâmetro InpToOut como nulo se não desejar nenhuma matriz de índice dos parâmetros InpBuf para OutBuf.

OutTolnp Representa uma matriz de valores com o mesmo número de elementos de código contidos no parâmetro OutBuf se o parâmetro OutToInp não for um ponteiro nulo.

Na saída, o valor nth no parâmetro OutTolnp corresponde ao nth ShapeCharset no parâmetro OutBuf . Esse valor é o índice no parâmetro InpBuf que identifica o elemento de código original do nth ShapeCharset no parâmetro OutBuf . É possível especificar o parâmetro OutTolnp como NULL se nenhuma matriz de índice dos parâmetros OutBuf para InpBuf for desejada.

BidiLvl Representa uma matriz de valores com o mesmo número de elementos que o texto de origem se o parâmetro BidiLvl não for um ponteiro nulo. O nth valor no parâmetro BidiLvl corresponde ao nth elemento de código no parâmetro InpBuf . Este valor é o nível deste elemento de código conforme determinado pelo algoritmo bidirecional. É possível especificar o parâmetro BidiLvl como nulo se uma matriz de níveis não for desejada.

Valores De Retorno

Após a conclusão bem-sucedida, essas subroutines retornam um valor de 0.

Códigos De Erro

Se essas subroutines falharem, retornam os seguintes valores:

Item Descrição
LAYOUT_EILSEQ A transformação parou devido a um elemento de código de entrada que não pode ser moldado ou é inválido. O parâmetro InpSize indica o número do elemento de código transformado com êxito..
Nota: Você pode usar este código de erro para determinar o elemento de código causando o erro.

Esse elemento de código é um elemento de código válido, mas não pode ser moldado no valor do layout ShapeCharset ou é um elemento de código inválido não definido pelo conjunto de códigos do código do idioma da estrutura LayoutObject . É possível usar as sub-rotinas mbtowc e wctomb para determinar se o elemento de código é válido quando usado no mesmo código de idioma da estrutura LayoutObject .

LAYOUT_E2BIG O buffer de saída está cheio e o texto de origem não é inteiramente processado.
LAYOUT_EINVAL Transformação interrompida devido a um elemento de código incompleto ou sequência de turnos na extremidade do buffer de entrada. O parâmetro InpSize indica o número dos elementos de código transformados com êxito
Nota: Você pode usar este código de erro para determinar o elemento de código causando o erro.
LAYOUT_ERANGE Mais de 15 níveis de integração estão no texto de origem ou o parâmetro InpBuf contém Formato Direcional não balanceado (Push/Pop).

Quando o tamanho do parâmetro OutBuf não for grande o suficiente para conter todo o texto transformado, o estado do texto de entrada no final do código de erro LAYOUT_E2BIG será retornado. Para continuar a transformação no texto restante, o aplicativo chama a sub-rotina layout_object_transform com a mesma estrutura LayoutObject , o mesmo parâmetro InpBuf e o parâmetro InpSize configurado como 0.

Exemplos

A seguir, um exemplo de transformação de reordenação e moldagem direcional.

Observação:
  1. Maiúsculas representam caracteres de esquerda para direita; minúsculas representam caracteres de direita para esquerda.
  2. xyzrepresentam as formas decde.
    Position:            0123456789
    InpBuf:              AB cde 12Z
    
    Position:            0123456789
    OutBuf:              AB 12 zyxZ
    
    Position:            0123456789
    ToTarget:            0128765349
    
    Position:            0123456789
    ToSource:            0127865439
    
    Position:            0123456789
    BidiLevel:           0001111220