m_wtransform_layout man page on SunOS

Man page or keyword search:  
man Server   20652 pages
apropos Keyword Search (all sections)
Output format
SunOS logo
[printable version]

m_wtransform_layout(3LALayout Service Library Funcm_wtransform_layout(3LAYOUT)

NAME
       m_wtransform_layout - layout transformation for wide character strings

SYNOPSIS
       cc [ flag... ] file... -llayout [ library... ]
       #include <sys/layout.h>

       int   m_wtransform_layout(LayoutObject	layout_object,	const  wchar_t
       *InpBuf, const size_t ImpSize, const  void  *OutBuf,  size_t  *Outsize,
       size_t  *InpToOut,  size_t  *OutToInp,  unsignedchar  *Property, size_t
       *InpBufIndex);

DESCRIPTION
       The  m_wtransform_layout()  function  performs  layout  transformations
       (reordering, shaping, cell determination) or provides additional infor‐
       mation needed for layout transformation (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 wide character strings.

       The m_wtransform_layout() function transforms the input text in	InpBuf
       according  to  the  current  layout values in layout_object. Any layout
       value whose value type is LayoutTextDescriptor 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 processed. The
       InpBuf may not be NULL, unless there is a need to  reset	 the  internal
       state.

       The  InpSize  argument  is the number of bytes within InpBuf to be pro‐
       cessed 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:

       OutBuf	       Any transformed data is stored in OutBuf, converted  to
		       ShapeCharset.

       Outsize	       The number of wide characters 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 argument 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 element in
		       InpBuf	starting   from	  the	element	  pointed   by
		       InpBufIndex. The four rightmost bits of each "property"
		       byte will contain information for  bidirectional	 envi‐
		       ronments (when ActiveDirectional is True) and they will
		       mean "NestingLevels." The possible value from 0	to  15
		       represents  the nesting level of the corresponding ele‐
		       ment 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 indi‐
		       cator" 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 character). Here again, each ele‐
		       ment of "property" pertains  to	the  elements  in  the
		       InpBuf	starting   from	  the	element	  pointed   by
		       InpBufIndex. (Remember that this is not necessarily the
		       beginning  of  InpBuf).	If  none of the transformation
		       properties is required, the argument  Property  can  be
		       NULL.   The  use	 of  "property" can be enhanced in the
		       future to pertain to  other  possible  usage  in	 other
		       environments.

       The  InpBufIndex	 argument  is  an  offset value to the location of the
       transformed text. When  m_wtransform_layout()  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	trans‐
       formed.	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 null 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.

       In addition to the possible outputs above,  layout_object  maintains  a
       directional  state  across calls to the transform functions. The direc‐
       tional 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 m_setvalues_layout().

       The layout_object argument specifies a  LayoutObject  returned  by  the
       m_create_layout() function.

       The OutBuf argument contains the transformed data. This argument 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 layout_object. 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 layout_object.

       On  input, the OutSize argument specifies the size of the output buffer
       in number of wide characters. The output buffer should be large	enough
       to  contain the transformed result; otherwise, only a partial transfor‐
       mation is performed. If the  ActiveShapeEditing	layout	value  is  set
       (True)  the  OutBuf should be allocated to contain at least the InpSize
       multiplied by ShapeCharsetSize.

       On return, the OutSize argument is modified to  the  actual  number  of
       code elements in OutBuf.

       When the OutSize argument is specified as zero, the function calculates
       the size of an output buffer large enough to  contain  the  transformed
       text, and the result is returned in this field. The content of the buf‐
       fers specified by InpBuf and OutBuf,  and  the  value  of  InpBufIndex,
       remain  unchanged. If OutSize = NULL, 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 wide characters 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	 wide  charac‐
       ters) in OutBuf that identifies the transformed ShapeCharset element of
       the nth byte in InpBuf.

       InpToOut may be specified as NULL if no index array from InpBuf to Out‐
       Buf is desired.

       If  the	OutToInp argument is not a null pointer, it points to an array
       of values with the same number of wide characters as contained in  Out‐
       Buf.  On	 output, the nth value in OutToInp corresponds to the nth byte
       in OutBuf. This value is the index in InpBuf, starting with wide	 char‐
       acter  byte pointed to by InpBufIndex, that identifies the logical code
       element of the nth wide character in OutBuf.

       OutToInp may be specified as NULL if no	index  array  from  OutBuf  to
       InpBuf is desired.

       To  perform  shaping  of	 a text string without reordering of code ele‐
       ments, the layout_object should be set with  input  and	output	layout
       value  TypeOfText set to TEXT_VISUAL and both in and out of Orientation
       set to the same value.

RETURN VALUES
       If successful, the m_wtransform_layout() function returns 0. If	unsuc‐
       cessful,	 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 transformation is saved internally and the error  condition
       E2BIG is returned in errno.

ERRORS
       The m_wtransform_layout() 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  combination
		       or the layout object is not valid.

       EILSEQ	       Transformation  stopped	due  to	 an input code element
		       that cannot be shaped or is  invalid.  The  InpBufIndex
		       argument	 is  set  to indicate the code element 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 layout_object. 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  composite
		       sequence	 at  the  end  of the input buffer, or OutSize
		       contains NULL.

       ERANGE	       More than 15 embedding levels are  in  source  text  or
		       InpBuf  contain	unbalanced directional layout informa‐
		       tion (push/pop) or an incomplete composite sequence has
		       been  detected  in the input buffer at the beginning of
		       the string pointed to by 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  respon‐
       sible for making sure that the combination of layout values is meaning‐
       ful. Otherwise, the result of  m_wtransform_layout()  might  be	unpre‐
       dictable or implementation-specific with errno set to EBADF.

EXAMPLES
       Example 1: Shaping and reordering input string into output buffer

       The  following  example	illustrated  what  the	different arguments of
       m_wtransform_layout() look like when a string in InpBuf is  shaped  and
       reordered  into	OutBuf.	 Upper-case  letters  in the example represent
       left-to-right letters while lower-case letters represent	 right-to-left
       letters. xyz represents the shapes of cde.

       Position:		    0123456789
       InpBuf:			    AB cde 12z

       Position:		    0123456789
       OutBuf:			    AB 12 zyxZ

       Position:		    0123456789
       OutToInp:		    0127865439

       Position:		    0123456789
       Property.NestLevel:	    0001111220
       Property.CelBdry:	    1111111111

       The values (encoded in bianry) returned in the Property argument define
       the directionality of each code element in the source text  as  defined
       by the type of algorithm used within the layout_object. Whlie the algo‐
       rithm may be implementation dependent, the resulting values and	levels
       are  defined such as to allow a single method to be used in determining
       the directionality of the sourece text. The base rules are:

	 ·  Odd levels are always RTL.

	 ·  Even levels are always LTR.

	 ·  The Orientation layout value setting determines the initial	 level
	    (0 or 1) used.

       Within  a Property array each increment in the level indicates the cor‐
       responding code elements should be presented in the opposite direction.
       Callers	of  this  function should realize that the Property values for
       certain code elements is dependent on the context of the given  charac‐
       ter  and the layout values: Orientation and ImplicitAlg. Callers should
       not assume that a given code element always has the same Property value
       in all cases.

       Example 2: Algorithm to handle nesting

       The  following  is an example of a standard presentation algorithm that
       handles nesting correctly. The goal of this algorithm is ultimately  to
       return  to  a  zero  nest level. Note that more efficient algorithms do
       exist; the following is provided for  clarity  rather  than  for	 effi‐
       ciency.

       1.  Search for the highest next level in the string.

       2.  Reverse all surrounding code elements of the same level. Reduce the
	   nest level of these code elements by 1.

       3.  Repeat 1 and 2 until all code elements are of level 0.

       The following shows the progression of the example from above:

       Position:	   0123456789	 0123456789    0123456789
       InpBuf:		   AB cde 12Z	 AB cde 21Z    AB 12 edcZ
       Property.NestLevel: 0001111220	 0001111110    0000000000
       Property.CellBdry:  1111111111	 1111111111    1111111111

ATTRIBUTES
       See attributes(5) for descriptions of the following attributes:

       ┌─────────────────────────────┬─────────────────────────────┐
       │      ATTRIBUTE TYPE	     │	    ATTRIBUTE VALUE	   │
       ├─────────────────────────────┼─────────────────────────────┤
       │MT-Level		     │MT-Safe			   │
       └─────────────────────────────┴─────────────────────────────┘

SEE ALSO
       attributes(5)

SunOS 5.10			  8 Jun 1999	  m_wtransform_layout(3LAYOUT)
[top]

List of man pages available for SunOS

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net