ICU 76.1 76.1
|
C API: Bidi Transformations. More...
#include "unicode/utypes.h"
#include "unicode/ubidi.h"
#include "unicode/uchar.h"
#include "unicode/localpointer.h"
Go to the source code of this file.
Namespaces | |
namespace | icu |
File coll.h. | |
Typedefs | |
typedef struct UBiDiTransform | UBiDiTransform |
Forward declaration of the UBiDiTransform structure that stores information used by the layout transformation engine. | |
Enumerations | |
enum | UBiDiOrder { UBIDI_LOGICAL = 0 , UBIDI_VISUAL } |
UBiDiOrder indicates the order of text. More... | |
enum | UBiDiMirroring { UBIDI_MIRRORING_OFF = 0 , UBIDI_MIRRORING_ON } |
UBiDiMirroring indicates whether or not characters with the "mirrored" property in RTL runs should be replaced with their mirror-image counterparts. More... | |
Functions | |
U_CAPI uint32_t | ubiditransform_transform (UBiDiTransform *pBiDiTransform, const UChar *src, int32_t srcLength, UChar *dest, int32_t destSize, UBiDiLevel inParaLevel, UBiDiOrder inOrder, UBiDiLevel outParaLevel, UBiDiOrder outOrder, UBiDiMirroring doMirroring, uint32_t shapingOptions, UErrorCode *pErrorCode) |
Performs transformation of text from the bidi layout defined by the input ordering scheme to the bidi layout defined by the output ordering scheme, and applies character mirroring and Arabic shaping operations. | |
U_CAPI UBiDiTransform * | ubiditransform_open (UErrorCode *pErrorCode) |
Allocates a UBiDiTransform object. | |
U_CAPI void | ubiditransform_close (UBiDiTransform *pBidiTransform) |
Deallocates the given UBiDiTransform object. | |
C API: Bidi Transformations.
Definition in file ubiditransform.h.
typedef struct UBiDiTransform UBiDiTransform |
Forward declaration of the UBiDiTransform
structure that stores information used by the layout transformation engine.
Definition at line 115 of file ubiditransform.h.
enum UBiDiMirroring |
UBiDiMirroring
indicates whether or not characters with the "mirrored" property in RTL runs should be replaced with their mirror-image counterparts.
Enumerator | |
---|---|
UBIDI_MIRRORING_OFF | 0: Constant indicating that character mirroring should not be performed. This is the default.
|
UBIDI_MIRRORING_ON | 1: Constant indicating that character mirroring should be performed. This corresponds to calling
|
Definition at line 94 of file ubiditransform.h.
enum UBiDiOrder |
UBiDiOrder
indicates the order of text.
This bidi transformation engine supports all possible combinations (4 in total) of input and output text order:
UBiDi
when the reordering mode is set to UBIDI_REORDER_DEFAULT
. Visual RTL mode is not supported by UBiDi
and is accomplished through reversing a visual LTR string,UBiDi
with the reordering mode set to UBIDI_REORDER_INVERSE_LIKE_DIRECT
. Visual RTL mode is not not supported by UBiDi
and is accomplished through reversing a visual LTR string,UBiDi
implementation with the reordering mode set to UBIDI_REORDER_RUNS_ONLY
; and if the input and output base directions are identical, the transformation engine will only handle character mirroring and Arabic shaping operations without reordering,UBiDi
engine; it implies character mirroring, Arabic shaping, and - if the input/output base directions mismatch - string reverse operations. Enumerator | |
---|---|
UBIDI_LOGICAL | 0: Constant indicating a logical order. This is the default for input text.
|
UBIDI_VISUAL | 1: Constant indicating a visual order. This is a default for output text.
|
Definition at line 71 of file ubiditransform.h.
U_CAPI void ubiditransform_close | ( | UBiDiTransform * | pBidiTransform | ) |
Deallocates the given UBiDiTransform
object.
U_CAPI UBiDiTransform * ubiditransform_open | ( | UErrorCode * | pErrorCode | ) |
Allocates a UBiDiTransform
object.
This object can be reused, e.g. with different ordering schemes, mirroring or shaping options.
Note:The object can only be reused in the same thread. All other threads should allocate a new UBiDiTransform
object before using it.
Example of usage:
UErrorCode errorCode = U_ZERO_ERROR;// Open a new UBiDiTransform.UBiDiTransform* transform = ubiditransform_open(&errorCode);// Run a transformation.ubiditransform_transform(transform,text1, -1, text2, -1,&errorCode);// Do something with the output text and invoke another transformation using// that text as input.ubiditransform_transform(transform,text2, -1, text3, -1,0, &errorCode);*U_CAPI uint32_t ubiditransform_transform(UBiDiTransform *pBiDiTransform, const UChar *src, int32_t srcLength, UChar *dest, int32_t destSize, UBiDiLevel inParaLevel, UBiDiOrder inOrder, UBiDiLevel outParaLevel, UBiDiOrder outOrder, UBiDiMirroring doMirroring, uint32_t shapingOptions, UErrorCode *pErrorCode)Performs transformation of text from the bidi layout defined by the input ordering scheme to the bidi...struct UBiDiTransform UBiDiTransformForward declaration of the UBiDiTransform structure that stores information used by the layout transf...Definition ubiditransform.h:115@ UBIDI_MIRRORING_ON1: Constant indicating that character mirroring should be performed.Definition ubiditransform.h:107U_CAPI UBiDiTransform * ubiditransform_open(UErrorCode *pErrorCode)Allocates a UBiDiTransform object.#define U_SHAPE_DIGITS_EN2ANDigit shaping option: Replace European digits (U+0030...) by Arabic-Indic digits.Definition ushape.h:251
The UBiDiTransform
object must be deallocated by calling ubiditransform_close()
.
UBiDiTransform
object. U_CAPI uint32_t ubiditransform_transform | ( | UBiDiTransform * | pBiDiTransform, |
const UChar * | src, | ||
int32_t | srcLength, | ||
UChar * | dest, | ||
int32_t | destSize, | ||
UBiDiLevel | inParaLevel, | ||
UBiDiOrder | inOrder, | ||
UBiDiLevel | outParaLevel, | ||
UBiDiOrder | outOrder, | ||
UBiDiMirroring | doMirroring, | ||
uint32_t | shapingOptions, | ||
UErrorCode * | pErrorCode | ||
) |
Performs transformation of text from the bidi layout defined by the input ordering scheme to the bidi layout defined by the output ordering scheme, and applies character mirroring and Arabic shaping operations.
In terms of UBiDi
, such a transformation implies:
ubidi_setReorderingMode
as needed (when the reordering mode is other than normal), ubidi_setInverse
as needed (when text should be transformed from a visual to a logical form), ubidi_setPara
, ubidi_writeReordered
, u_shapeArabic
. An "ordering scheme" encompasses the base direction and the order of text, and these characteristics must be defined by the caller for both input and output explicitly .
There are 36 possible combinations of <input, output> ordering schemes, which are partially supported by UBiDi
already. Examples of the currently supported combinations:
ubidi_setPara
with paraLevel == UBIDI_LTR
, ubidi_setPara
with paraLevel == UBIDI_RTL
, ubidi_setPara
with paraLevel == UBIDI_DEFAULT_LTR
, ubidi_setPara
with paraLevel == UBIDI_DEFAULT_RTL
, ubidi_setInverse(UBiDi*, true)
and then ubidi_setPara
with paraLevel == UBIDI_LTR
, ubidi_setInverse(UBiDi*, true)
and then ubidi_setPara
with paraLevel == UBIDI_RTL
. All combinations that involve the Visual RTL scheme are unsupported by UBiDi
, for instance:
Example of usage of the transformation engine:
UErrorCode errorCode = U_ZERO_ERROR;// Run a transformation.ubiditransform_transform(pBidiTransform,text1, -1, text2, -1,&errorCode);// Do something with text2.text2[4] = '2';// Run a reverse transformation.ubiditransform_transform(pBidiTransform,text2, -1, text1, -1,&errorCode);*@ UBIDI_MIRRORING_OFF0: Constant indicating that character mirroring should not be performed.Definition ubiditransform.h:100#define U_SHAPE_DIGITS_AN2ENDigit shaping option: Replace Arabic-Indic digits by European digits (U+0030...).Definition ushape.h:258#define U_SHAPE_DIGIT_TYPE_AN_EXTENDEDDigit type option: Use Eastern (Extended) Arabic-Indic digits (U+06f0...U+06f9).Definition ushape.h:296
pBiDiTransform | A pointer to a UBiDiTransform object allocated with ubiditransform_open() or NULL . |
This object serves for one-time setup to amortize initialization overheads. Use of this object is not thread-safe. All other threads should allocate a new UBiDiTransform
object by calling ubiditransform_open()
before using it. Alternatively, a caller can set this parameter to NULL
, in which case the object will be allocated by the engine on the fly.
src | A pointer to the text that the Bidi layout transformations will be performed on. |
Note: the text must be (at least) srcLength
long.
srcLength | The length of the text, in number of UChars. If length == -1 then the text must be zero-terminated. |
dest | A pointer to where the processed text is to be copied. |
destSize | The size of the dest buffer, in number of UChars. If the U_SHAPE_LETTERS_UNSHAPE option is set, then the destination length could be as large as srcLength * 2 . Otherwise, the destination length will not exceed srcLength . If the caller reserves the last position for zero-termination, it should be excluded from destSize . |
destSize == -1
is allowed and makes sense when dest
was holds some meaningful value, e.g. that of src
. In this case dest
must be zero-terminated.
inParaLevel | A base embedding level of the input as defined in ubidi_setPara documentation for the paraLevel parameter. |
inOrder | An order of the input, which can be one of the UBiDiOrder values. |
outParaLevel | A base embedding level of the output as defined in ubidi_setPara documentation for the paraLevel parameter. |
outOrder | An order of the output, which can be one of the UBiDiOrder values. |
doMirroring | Indicates whether or not to perform character mirroring, and can accept one of the UBiDiMirroring values. |
shapingOptions | Arabic digit and letter shaping options defined in the ushape.h documentation. |
Note: Direction indicator options are computed by the transformation engine based on the effective ordering schemes, so user-defined direction indicators will be ignored.
pErrorCode | A pointer to an error code value. |
dest
. If the transformation fails, the return value will be 0 (and the error code will be written to pErrorCode
).