ICU 62.1 62.1
ubidi.h
Go to the documentation of this file.
1// © 2016 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html
3/*
4******************************************************************************
5*
6* Copyright (C) 1999-2013, International Business Machines
7* Corporation and others. All Rights Reserved.
8*
9******************************************************************************
10* file name: ubidi.h
11* encoding: UTF-8
12* tab size: 8 (not used)
13* indentation:4
14*
15* created on: 1999jul27
16* created by: Markus W. Scherer, updated by Matitiahu Allouche
17*/
18
19#ifndef UBIDI_H
20#define UBIDI_H
21
22#include "unicode/utypes.h"
23#include "unicode/uchar.h"
25
289/*DOCXX_TAG*/
332typedef uint8_t UBiDiLevel;
333
358#define UBIDI_DEFAULT_LTR 0xfe
359
385#define UBIDI_DEFAULT_RTL 0xff
386
392#define UBIDI_MAX_EXPLICIT_LEVEL 125
393
398#define UBIDI_LEVEL_OVERRIDE 0x80
399
413#define UBIDI_MAP_NOWHERE (-1)
414
459
462
473struct UBiDi;
474
476typedef struct UBiDi UBiDi;
477
493U_STABLE UBiDi * U_EXPORT2
495
530U_STABLE UBiDi * U_EXPORT2
531ubidi_openSized(int32_t maxLength, int32_t maxRunCount, UErrorCode *pErrorCode);
532
553U_STABLE void U_EXPORT2
555
556#if U_SHOW_CPLUSPLUS_API
557
559
570
572
573#endif
574
623U_STABLE void U_EXPORT2
624ubidi_setInverse(UBiDi *pBiDi, UBool isInverse);
625
642U_STABLE UBool U_EXPORT2
644
665U_STABLE void U_EXPORT2
666ubidi_orderParagraphsLTR(UBiDi *pBiDi, UBool orderParagraphsLTR);
667
679U_STABLE UBool U_EXPORT2
681
731
883U_STABLE void U_EXPORT2
885
896
1025
1039U_STABLE void U_EXPORT2
1040ubidi_setReorderingOptions(UBiDi *pBiDi, uint32_t reorderingOptions);
1041
1050U_STABLE uint32_t U_EXPORT2
1052
1137U_STABLE void U_EXPORT2
1139 const UChar *prologue, int32_t proLength,
1140 const UChar *epilogue, int32_t epiLength,
1141 UErrorCode *pErrorCode);
1142
1225U_STABLE void U_EXPORT2
1226ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length,
1227 UBiDiLevel paraLevel, UBiDiLevel *embeddingLevels,
1228 UErrorCode *pErrorCode);
1229
1276U_STABLE void U_EXPORT2
1277ubidi_setLine(const UBiDi *pParaBiDi,
1278 int32_t start, int32_t limit,
1279 UBiDi *pLineBiDi,
1280 UErrorCode *pErrorCode);
1281
1297U_STABLE UBiDiDirection U_EXPORT2
1299
1327U_STABLE UBiDiDirection U_EXPORT2
1328ubidi_getBaseDirection(const UChar *text, int32_t length );
1329
1341U_STABLE const UChar * U_EXPORT2
1342ubidi_getText(const UBiDi *pBiDi);
1343
1352U_STABLE int32_t U_EXPORT2
1354
1370U_STABLE UBiDiLevel U_EXPORT2
1372
1381U_STABLE int32_t U_EXPORT2
1383
1418U_STABLE int32_t U_EXPORT2
1419ubidi_getParagraph(const UBiDi *pBiDi, int32_t charIndex, int32_t *pParaStart,
1420 int32_t *pParaLimit, UBiDiLevel *pParaLevel,
1421 UErrorCode *pErrorCode);
1422
1450U_STABLE void U_EXPORT2
1451ubidi_getParagraphByIndex(const UBiDi *pBiDi, int32_t paraIndex,
1452 int32_t *pParaStart, int32_t *pParaLimit,
1453 UBiDiLevel *pParaLevel, UErrorCode *pErrorCode);
1454
1470U_STABLE UBiDiLevel U_EXPORT2
1471ubidi_getLevelAt(const UBiDi *pBiDi, int32_t charIndex);
1472
1491U_STABLE const UBiDiLevel * U_EXPORT2
1492ubidi_getLevels(UBiDi *pBiDi, UErrorCode *pErrorCode);
1493
1518U_STABLE void U_EXPORT2
1519ubidi_getLogicalRun(const UBiDi *pBiDi, int32_t logicalPosition,
1520 int32_t *pLogicalLimit, UBiDiLevel *pLevel);
1521
1537U_STABLE int32_t U_EXPORT2
1538ubidi_countRuns(UBiDi *pBiDi, UErrorCode *pErrorCode);
1539
1596U_STABLE UBiDiDirection U_EXPORT2
1597ubidi_getVisualRun(UBiDi *pBiDi, int32_t runIndex,
1598 int32_t *pLogicalStart, int32_t *pLength);
1599
1637U_STABLE int32_t U_EXPORT2
1638ubidi_getVisualIndex(UBiDi *pBiDi, int32_t logicalIndex, UErrorCode *pErrorCode);
1639
1672U_STABLE int32_t U_EXPORT2
1673ubidi_getLogicalIndex(UBiDi *pBiDi, int32_t visualIndex, UErrorCode *pErrorCode);
1674
1715U_STABLE void U_EXPORT2
1716ubidi_getLogicalMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode);
1717
1751U_STABLE void U_EXPORT2
1752ubidi_getVisualMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode);
1753
1774U_STABLE void U_EXPORT2
1775ubidi_reorderLogical(const UBiDiLevel *levels, int32_t length, int32_t *indexMap);
1776
1797U_STABLE void U_EXPORT2
1798ubidi_reorderVisual(const UBiDiLevel *levels, int32_t length, int32_t *indexMap);
1799
1832U_STABLE void U_EXPORT2
1833ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length);
1834
1844#define UBIDI_KEEP_BASE_COMBINING 1
1845
1854#define UBIDI_DO_MIRRORING 2
1855
1868#define UBIDI_INSERT_LRM_FOR_NUMERIC 4
1869
1881#define UBIDI_REMOVE_BIDI_CONTROLS 8
1882
1897#define UBIDI_OUTPUT_REVERSE 16
1898
1937U_STABLE int32_t U_EXPORT2
1939
1967U_STABLE int32_t U_EXPORT2
1969
1971
1972#ifndef U_HIDE_DEPRECATED_API
1982#define U_BIDI_CLASS_DEFAULT U_CHAR_DIRECTION_COUNT
1983#endif // U_HIDE_DEPRECATED_API
1984
2006UBiDiClassCallback(const void *context, UChar32 c);
2007
2009
2025U_STABLE UCharDirection U_EXPORT2
2027
2055U_STABLE void U_EXPORT2
2057 const void *newContext, UBiDiClassCallback **oldFn,
2058 const void **oldContext, UErrorCode *pErrorCode);
2059
2072U_STABLE void U_EXPORT2
2073ubidi_getClassCallback(UBiDi *pBiDi, UBiDiClassCallback **fn, const void **context);
2074
2140U_STABLE int32_t U_EXPORT2
2142 UChar *dest, int32_t destSize,
2143 uint16_t options,
2144 UErrorCode *pErrorCode);
2145
2192U_STABLE int32_t U_EXPORT2
2193ubidi_writeReverse(const UChar *src, int32_t srcLength,
2194 UChar *dest, int32_t destSize,
2195 uint16_t options,
2196 UErrorCode *pErrorCode);
2197
2198/*#define BIDI_SAMPLE_CODE*/
2201#endif
"Smart pointer" class, closes a UBiDi via ubidi_close().
C++ API: "Smart pointers" for use with and in ICU4C C++ code.
#define U_DEFINE_LOCAL_OPEN_POINTER(LocalPointerClassName, Type, closeFunction)
"Smart pointer" definition macro, deletes objects via the closeFunction.
#define U_CALLCONV
Similar to U_CDECL_BEGIN/U_CDECL_END, this qualifier is necessary in callback function typedefs to ma...
Definition platform.h:835
void ubidi_reorderVisual(const UBiDiLevel *levels, int32_t length, int32_t *indexMap)
This is a convenience function that does not use a UBiDi object.
void ubidi_getClassCallback(UBiDi *pBiDi, UBiDiClassCallback **fn, const void **context)
Get the current callback function used for Bidi class determination.
int32_t ubidi_getVisualIndex(UBiDi *pBiDi, int32_t logicalIndex, UErrorCode *pErrorCode)
Get the visual position from a logical text position.
const UChar * ubidi_getText(const UBiDi *pBiDi)
Get the pointer to the text.
void ubidi_reorderLogical(const UBiDiLevel *levels, int32_t length, int32_t *indexMap)
This is a convenience function that does not use a UBiDi object.
int32_t ubidi_countRuns(UBiDi *pBiDi, UErrorCode *pErrorCode)
Get the number of runs.
void ubidi_setContext(UBiDi *pBiDi, const UChar *prologue, int32_t proLength, const UChar *epilogue, int32_t epiLength, UErrorCode *pErrorCode)
Set the context before a call to ubidi_setPara().
void ubidi_setReorderingOptions(UBiDi *pBiDi, uint32_t reorderingOptions)
Specify which of the reordering options should be applied during Bidi transformations.
int32_t ubidi_writeReordered(UBiDi *pBiDi, UChar *dest, int32_t destSize, uint16_t options, UErrorCode *pErrorCode)
Take a UBiDi object containing the reordering information for a piece of text (one or more paragraphs...
void ubidi_getLogicalMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode)
Get a logical-to-visual index map (array) for the characters in the UBiDi (paragraph or line) object.
int32_t ubidi_writeReverse(const UChar *src, int32_t srcLength, UChar *dest, int32_t destSize, uint16_t options, UErrorCode *pErrorCode)
Reverse a Right-To-Left run of Unicode text.
int32_t ubidi_getResultLength(const UBiDi *pBiDi)
Get the length of the reordered text resulting from the last call to ubidi_setPara().
void ubidi_close(UBiDi *pBiDi)
ubidi_close() must be called to free the memory associated with a UBiDi object.
UBiDiReorderingOption
UBiDiReorderingOption values indicate which options are specified to affect the Bidi algorithm.
Definition ubidi.h:904
@ UBIDI_OPTION_INSERT_MARKS
option bit for ubidi_setReorderingOptions: insert Bidi marks (LRM or RLM) when needed to ensure corre...
Definition ubidi.h:957
@ UBIDI_OPTION_STREAMING
option bit for ubidi_setReorderingOptions: process the output as part of a stream to be continued
Definition ubidi.h:1023
@ UBIDI_OPTION_DEFAULT
option value for ubidi_setReorderingOptions: disable all the options which can be set with this funct...
Definition ubidi.h:911
@ UBIDI_OPTION_REMOVE_CONTROLS
option bit for ubidi_setReorderingOptions: remove Bidi control characters
Definition ubidi.h:975
void ubidi_setClassCallback(UBiDi *pBiDi, UBiDiClassCallback *newFn, const void *newContext, UBiDiClassCallback **oldFn, const void **oldContext, UErrorCode *pErrorCode)
Set the callback function and callback data used by the UBA implementation for Bidi class determinati...
uint32_t ubidi_getReorderingOptions(UBiDi *pBiDi)
What are the reordering options applied to a given Bidi object?
int32_t ubidi_getParagraph(const UBiDi *pBiDi, int32_t charIndex, int32_t *pParaStart, int32_t *pParaLimit, UBiDiLevel *pParaLevel, UErrorCode *pErrorCode)
Get a paragraph, given a position within the text.
UBool ubidi_isOrderParagraphsLTR(UBiDi *pBiDi)
Is this Bidi object set to allocate level 0 to block separators so that successive paragraphs progres...
void ubidi_getParagraphByIndex(const UBiDi *pBiDi, int32_t paraIndex, int32_t *pParaStart, int32_t *pParaLimit, UBiDiLevel *pParaLevel, UErrorCode *pErrorCode)
Get a paragraph, given the index of this paragraph.
UBiDiLevel ubidi_getParaLevel(const UBiDi *pBiDi)
Get the paragraph level of the text.
UBiDiDirection
UBiDiDirection values indicate the text direction.
Definition ubidi.h:419
@ UBIDI_LTR
Left-to-right text.
Definition ubidi.h:431
@ UBIDI_NEUTRAL
No strongly directional text.
Definition ubidi.h:457
@ UBIDI_MIXED
Mixed-directional text.
Definition ubidi.h:450
@ UBIDI_RTL
Right-to-left text.
Definition ubidi.h:443
UCharDirection UBiDiClassCallback(const void *context, UChar32 c)
Callback type declaration for overriding default Bidi class values with custom ones.
Definition ubidi.h:2006
UBool ubidi_isInverse(UBiDi *pBiDi)
Is this Bidi object set to perform the inverse Bidi algorithm?
UCharDirection ubidi_getCustomizedClass(UBiDi *pBiDi, UChar32 c)
Retrieve the Bidi class for a given code point.
void ubidi_setInverse(UBiDi *pBiDi, UBool isInverse)
Modify the operation of the Bidi algorithm such that it approximates an "inverse Bidi" algorithm.
UBiDiReorderingMode
UBiDiReorderingMode values indicate which variant of the Bidi algorithm to use.
Definition ubidi.h:689
@ UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL
Inverse Bidi (Visual to Logical) algorithm for the UBIDI_REORDER_NUMBERS_SPECIAL Bidi algorithm.
Definition ubidi.h:722
@ UBIDI_REORDER_GROUP_NUMBERS_WITH_R
Logical to Visual algorithm grouping numbers with adjacent R characters (reversible algorithm).
Definition ubidi.h:701
@ UBIDI_REORDER_RUNS_ONLY
Reorder runs only to transform a Logical LTR string to the Logical RTL string with the same display,...
Definition ubidi.h:709
@ UBIDI_REORDER_NUMBERS_SPECIAL
Logical to Visual algorithm which handles numbers in a way which mimics the behavior of Windows XP.
Definition ubidi.h:697
@ UBIDI_REORDER_INVERSE_NUMBERS_AS_L
Visual to Logical algorithm which handles numbers like L (same algorithm as selected by ubidi_setInve...
Definition ubidi.h:714
@ UBIDI_REORDER_INVERSE_LIKE_DIRECT
Visual to Logical algorithm equivalent to the regular Logical to Visual algorithm.
Definition ubidi.h:718
@ UBIDI_REORDER_DEFAULT
Regular Logical to Visual Bidi algorithm according to Unicode.
Definition ubidi.h:693
@ UBIDI_REORDER_COUNT
Number of values for reordering mode.
Definition ubidi.h:728
int32_t ubidi_countParagraphs(UBiDi *pBiDi)
Get the number of paragraphs.
int32_t ubidi_getLength(const UBiDi *pBiDi)
Get the length of the text.
int32_t ubidi_getLogicalIndex(UBiDi *pBiDi, int32_t visualIndex, UErrorCode *pErrorCode)
Get the logical text position from a visual position.
UBiDiReorderingMode ubidi_getReorderingMode(UBiDi *pBiDi)
What is the requested reordering mode for a given Bidi object?
UBiDi * ubidi_openSized(int32_t maxLength, int32_t maxRunCount, UErrorCode *pErrorCode)
Allocate a UBiDi structure with preallocated memory for internal structures.
const UBiDiLevel * ubidi_getLevels(UBiDi *pBiDi, UErrorCode *pErrorCode)
Get an array of levels for each character.
void ubidi_getLogicalRun(const UBiDi *pBiDi, int32_t logicalPosition, int32_t *pLogicalLimit, UBiDiLevel *pLevel)
Get a logical run.
uint8_t UBiDiLevel
UBiDiLevel is the type of the level values in this Bidi implementation.
Definition ubidi.h:332
void ubidi_orderParagraphsLTR(UBiDi *pBiDi, UBool orderParagraphsLTR)
Specify whether block separators must be allocated level zero, so that successive paragraphs will pro...
void ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length, UBiDiLevel paraLevel, UBiDiLevel *embeddingLevels, UErrorCode *pErrorCode)
Perform the Unicode Bidi algorithm.
int32_t ubidi_getProcessedLength(const UBiDi *pBiDi)
Get the length of the source text processed by the last call to ubidi_setPara().
void ubidi_setLine(const UBiDi *pParaBiDi, int32_t start, int32_t limit, UBiDi *pLineBiDi, UErrorCode *pErrorCode)
ubidi_setLine() sets a UBiDi to contain the reordering information, especially the resolved levels,...
UBiDi * ubidi_open(void)
Allocate a UBiDi structure.
UBiDiLevel ubidi_getLevelAt(const UBiDi *pBiDi, int32_t charIndex)
Get the level for one character.
UBiDiDirection ubidi_getVisualRun(UBiDi *pBiDi, int32_t runIndex, int32_t *pLogicalStart, int32_t *pLength)
Get one run's logical start, length, and directionality, which can be 0 for LTR or 1 for RTL.
UBiDiDirection ubidi_getBaseDirection(const UChar *text, int32_t length)
Gets the base direction of the text provided according to the Unicode Bidirectional Algorithm.
struct UBiDi UBiDi
Definition ubidi.h:476
UBiDiDirection ubidi_getDirection(const UBiDi *pBiDi)
Get the directionality of the text.
void ubidi_getVisualMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode)
Get a visual-to-logical index map (array) for the characters in the UBiDi (paragraph or line) object.
void ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length)
Invert an index map.
void ubidi_setReorderingMode(UBiDi *pBiDi, UBiDiReorderingMode reorderingMode)
Modify the operation of the Bidi algorithm such that it implements some variant to the basic Bidi alg...
C API: Unicode Properties.
UCharDirection
This specifies the language directional property of a character set.
Definition uchar.h:869
int32_t UChar32
Define UChar32 as a type for single Unicode code points.
Definition umachine.h:400
#define U_CDECL_END
This is used to end a declaration of a library private ICU C API.
Definition umachine.h:85
int8_t UBool
The ICU boolean type.
Definition umachine.h:236
uint16_t UChar
The base type for UTF-16 code units and pointers.
Definition umachine.h:353
#define U_CDECL_BEGIN
This is used to begin a declaration of a library private ICU C API.
Definition umachine.h:84
#define U_STABLE
This is used to declare a function as a stable public ICU C API.
Definition umachine.h:111
Basic definitions for ICU, for both C and C++ APIs.
UErrorCode
Error code to replace exception handling, so that the code is compatible with all C++ compilers,...
Definition utypes.h:396
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition uversion.h:138
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition uversion.h:137