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 .
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.
- Maiúsculas representam caracteres de esquerda para direita; minúsculas representam caracteres de direita para esquerda.
- 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