Layout Service Library Functions mtransformlayout(3LAYOUT)
NAME
mtransformlayout - layout transformation
SYNOPSIS
cc [ flag... ] file... -llayout [ library... ]
#include
int mtransformlayout(LayoutObject layoutobject,
const char *InpBuf, const sizet ImpSize, const void *OutBuf,
sizet *Outsize, sizet *InpToOut, sizet *OutToInp,
unsigned char *Property, sizet *InpBufIndex);
DESCRIPTION
The mtransformlayout() function performs layout transfor-
mations (reordering, shaping, cell determination) or pro-
vides additional information needed for layout transforma-
tion (such as the expected size of the transformed layout,
the nesting level of different segments in the text and
cross-references between the locations of the corresponding
elements before and after the layout transformation). Both
the input text and output text are character strings.
The mtransformlayout() function transforms the input text
in InpBuf according to the current layout values in
layoutobject. Any layout value whose value type is Layout-
TextDescriptor describes the attributes of the InpBuf and
OutBuf arguments. If the attributes are the same for both
InpBuf and OutBuf, a null transformation is performed with
respect to that specific layout value.
The InpBuf argument specifies the source text to be pro-
cessed. The InpBuf may not be NUL, unless there is a need
to reset the internal state.
The InpSize argument is the number of bytes within InpBuf to
be processed by the transformation. Its value will not
change after return from the transformation. InpSize set to
-1 indicates that the text in InpBuf is delimited by a null
code element. If InpSize is not set to -1, it is possible to
have some null elements in the input buffer. This might be
used, for example, for a "one shot" transformation of
several strings, separated by nulls.
Output of this function may be one or more of the following
depending on the setting of the arguments:
SunOS 5.11 Last change: 7 Aug 2006 1
Layout Service Library Functions mtransformlayout(3LAYOUT)
OutBuf Any transformed data is stored in OutBuf, con-
verted to ShapeCharset.
Outsize The number of bytes in OutBuf.
InpToOut A cross-reference from each InpBuf code element
to the transformed data. The cross-reference
relates to the data in InpBuf starting with the
first element that InpBufIndex points to (and
not necessarily starting from the beginning of
the InpBuf).
OutToInp A cross-reference to each InpBuf code element
from the transformed data. The cross-reference
relates to the data in InpBuf starting with the
first element that InpBufIndex points to (and
not necessarily starting from the beginning of
the InpBuf).
Property A weighted value that represents peculiar input
string transformation properties with different
connotations as explained below. If this argu-
ment is not a null pointer, it represents an
array of values with the same number of elements
as the source substring text before the
transformation. Each byte will contain relevant
"property" information of the corresponding ele-
ment in InpBuf starting from the element pointed
by InpBufIndex. The four rightmost bits of each
"property" byte will contain information for
bidirectional environments (when ActiveDirec-
tional is True) and they will mean "NestingLev-
els." The possible value from 0 to 15 represents
the nesting level of the corresponding element
in the InpBuf starting from the element pointed
by InpBufIndex. If ActiveDirectional is false
the content of NestingLevel bits will be
ignored. The leftmost bit of each "property"
byte will contain a "new cell indicator" for
composed character environments, and will have a
value of either 1 (for an element in InpBuf that
is transformed to the beginning of a new cell)
or 0 (for the "zero-length" composing character
elements, when these are grouped into the same
presentation cell with a non-composing charac-
ter). Here again, each element of "property"
pertains to the elements in the InpBuf starting
from the element pointed by InpBufIndex.
SunOS 5.11 Last change: 7 Aug 2006 2
Layout Service Library Functions mtransformlayout(3LAYOUT)
(Remember that this is not necessarily the
beginning of InpBuf). If none of the transforma-
tion properties is required, the argument Pro-
perty can be NUL. The use of "property" can be
enhanced in the future to pertain to other pos-
sible usage in other environments.
The InpBufIndex argument is an offset value to the location
of the transformed text. When mtransformlayout() is
called, InpBufIndex contains the offset to the element in
InpBuf that will be transformed first. (Note that this is
not necessarily the first element in InpBuf). At the return
from the transformation, InpBufIndex contains the offset to
the first element in the InpBuf that has not been
transformed. If the entire substring has been transformed
successfully, InpBufIndex will be incremented by the amount
defined by InpSize.
Each of these output arguments may be NUL to specify that
no output is desired for the specific argument, but at least
one of them should be set to a non-null value to perform any
significant work.
The layout object maintains a directional state that keeps
track of directional changes, based on the last segment
transformed. The directional state is maintained across
calls to the layout transformation functions and allows
stream data to be processed with the layout functions. The
directional state is reset to its initial state whenever any
of the layout values TypeOfText, Orientation, or ImplicitAlg
is modified by means of a call to msetvalueslayout().
The layoutobject argument specifies a LayoutObject returned
by the mcreatelayout() function.
The OutBufargument contains the transformed data. This argu-
ment can be specified as a null pointer to indicate that no
transformed data is required.
The encoding of the OutBuf argument depends on the
ShapeCharset layout value defined in layoutobject. If the
ActiveShapeEditing layout value is not set (False), the
encoding of OutBuf is guaranteed to be the same as the
codeset of the locale associated with the LayoutObject
defined by layoutobject.
SunOS 5.11 Last change: 7 Aug 2006 3
Layout Service Library Functions mtransformlayout(3LAYOUT)
On input, the OutSize argument specifies the size of the
output buffer in number of bytes. The output buffer should
be large enough to contain the transformed result; other-
wise, only a partial transformation is performed. If the
ActiveShapeEditing layout value is set (True) the OutBuf
should be allocated to contain at least the InpSize multi-
plied by ShapeCharsetSize.
On return, the OutSize argument is modified to the actual
number of bytes placed in OutBuf.
When the OutSize argument is specified as zero, the function
calculates the size of an output buffer large enough to con-
tain the transformed text, and the result is returned in
this field. The content of the buffers specified by InpBuf
and OutBuf, and the value of InpBufIndex, remain unchanged.
If OutSize = NUL, the EINVAL error condition should be
returned.
If the InpToOut argument is not a null pointer, it points to
an array of values with the same number of bytes in InpBuf
starting with the one pointed by InpBufIndex and up to the
end of the substring in the buffer. On output, the nth value
in InpToOut corresponds to the nth byte in InpBuf. This
value is the index (in units of bytes) in OutBufthat identi-
fies the transformed ShapeCharset element of the nth byte in
InpBuf. In the case of multibyte encoding, the index points
(for each of the bytes of a code element in the InpBuf) to
the first byte of the transformed code element in the Out-
Buf.
InpToOut may be specified as NUL if no index array from
InpBuf to OutBuf is desired.
If the OutToInp argument is not a null pointer, it points to
an array of values with the same number of bytes as con-
tained in OutBuf. On output, the nth value in OutToInp
corresponds to the nth byte in OutBuf This value is the
index in InpBuf, starting with the byte pointed to by Inp-
BufIndex, that identifies the logical code element of the
nth byte in OutBuf. In the case of multibyte encoding, the
index will point for each of the bytes of a transformed code
element in the OutBuf to the first byte of the code element
in the InpBuf.
SunOS 5.11 Last change: 7 Aug 2006 4
Layout Service Library Functions mtransformlayout(3LAYOUT)
OutToInp may be specified as NUL if no index array from
OutBuf to InpBuf is desired.
To perform shaping of a text string without reordering of
code elements, the layoutobject should be set with input
and output layout value TypeOfText set to TEXTVISUAL and
both in and out of Orientation set to the same value.
RETURN VALUES
If successful, the mtransformlayout() function returns 0.
If unsuccessful, the returned value is -1 and the errno is
set to indicate the source of error. When the size of OutBuf
is not large enough to contain the entire transformed text,
the input text state at the end of the uncompleted transfor-
mation is saved internally and the error condition E2BIG is
returned in errno.
ERORS
The mtransformlayout() function may fail if:
E2BIG The output buffer is full and the source text is
not entirely processed.
EBADF The layout values are set to a meaningless combi-
nation or the layout object is not valid.
EILSEQ Transformation stopped due to an input code ele-
ment that cannot be shaped or is invalid. The Inp-
BufIndex argument is set to indicate the code ele-
ment causing the error. The suspect code element
is either a valid code element but cannot be
shaped into the ShapeCharset layout value, or is
an invalid code element not defined by the codeset
of the locale of layoutobject. The mbtowc() and
wctomb() functions, when used in the same locale
as the LayoutObject, can be used to determine if
the code element is valid.
EINVAL Transformation stopped due to an incomplete compo-
site sequence at the end of the input buffer, or
OutSize contains NUL.
ERANGE More than 15 embedding levels are in source text
or InpBuf contain unbalanced directional layout
information (push/pop) or an incomplete composite
sequence has been detected in the input buffer at
the beginning of the string pointed to by
SunOS 5.11 Last change: 7 Aug 2006 5
Layout Service Library Functions mtransformlayout(3LAYOUT)
InpBufIndex.
An incomplete composite sequence at the end of the
input buffer is not always detectable. Sometimes,
the fact that the sequence is incomplete will only
be detected when additional character elements
belonging to the composite sequence are found at
the beginning of the next input buffer.
USAGE
A LayoutObject will have a meaningful combination of default
layout values. Whoever chooses to change the default layout
values is responsible for making sure that the combination
of layout values is meaningful. Otherwise, the result of
mtransformlayout() might be unpredictable or
implementation-specific with errno set to EBADF.
ATRIBUTES
See attributes(5) for descriptions of the following attri-
butes:
ATRIBUTE TYPE ATRIBUTE VALUE
Interface Stability Standard
MT-Level MT-Safe
SEE ALSO
attributes(5), standards(5)
SunOS 5.11 Last change: 7 Aug 2006 6
|