ICU 72.1 72.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"
24
25#if U_SHOW_CPLUSPLUS_API
27#endif // U_SHOW_CPLUSPLUS_API
28
293/*DOCXX_TAG*/
340typedef uint8_t UBiDiLevel;
341
366#define UBIDI_DEFAULT_LTR 0xfe
367
393#define UBIDI_DEFAULT_RTL 0xff
394
402#define UBIDI_MAX_EXPLICIT_LEVEL 125
403
408#define UBIDI_LEVEL_OVERRIDE 0x80
409
423#define UBIDI_MAP_NOWHERE (-1)
424
469
472
483struct UBiDi;
484
486typedef struct UBiDi UBiDi;
487
503U_CAPI UBiDi * U_EXPORT2
505
540U_CAPI UBiDi * U_EXPORT2
541ubidi_openSized(int32_t maxLength, int32_t maxRunCount, UErrorCode *pErrorCode);
542
563U_CAPI void U_EXPORT2
565
566#if U_SHOW_CPLUSPLUS_API
567
568U_NAMESPACE_BEGIN
569
580
581U_NAMESPACE_END
582
583#endif
584
633U_CAPI void U_EXPORT2
634ubidi_setInverse(UBiDi *pBiDi, UBool isInverse);
635
652U_CAPI UBool U_EXPORT2
654
675U_CAPI void U_EXPORT2
676ubidi_orderParagraphsLTR(UBiDi *pBiDi, UBool orderParagraphsLTR);
677
689U_CAPI UBool U_EXPORT2
691
733#ifndef U_HIDE_DEPRECATED_API
739#endif // U_HIDE_DEPRECATED_API
741
893U_CAPI void U_EXPORT2
895
906
922
968
986
1035
1049U_CAPI void U_EXPORT2
1050ubidi_setReorderingOptions(UBiDi *pBiDi, uint32_t reorderingOptions);
1051
1060U_CAPI uint32_t U_EXPORT2
1062
1147U_CAPI void U_EXPORT2
1149 const UChar *prologue, int32_t proLength,
1150 const UChar *epilogue, int32_t epiLength,
1151 UErrorCode *pErrorCode);
1152
1235U_CAPI void U_EXPORT2
1236ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length,
1237 UBiDiLevel paraLevel, UBiDiLevel *embeddingLevels,
1238 UErrorCode *pErrorCode);
1239
1286U_CAPI void U_EXPORT2
1287ubidi_setLine(const UBiDi *pParaBiDi,
1288 int32_t start, int32_t limit,
1289 UBiDi *pLineBiDi,
1290 UErrorCode *pErrorCode);
1291
1307U_CAPI UBiDiDirection U_EXPORT2
1309
1337U_CAPI UBiDiDirection U_EXPORT2
1338ubidi_getBaseDirection(const UChar *text, int32_t length );
1339
1351U_CAPI const UChar * U_EXPORT2
1352ubidi_getText(const UBiDi *pBiDi);
1353
1362U_CAPI int32_t U_EXPORT2
1364
1380U_CAPI UBiDiLevel U_EXPORT2
1382
1391U_CAPI int32_t U_EXPORT2
1393
1428U_CAPI int32_t U_EXPORT2
1429ubidi_getParagraph(const UBiDi *pBiDi, int32_t charIndex, int32_t *pParaStart,
1430 int32_t *pParaLimit, UBiDiLevel *pParaLevel,
1431 UErrorCode *pErrorCode);
1432
1460U_CAPI void U_EXPORT2
1461ubidi_getParagraphByIndex(const UBiDi *pBiDi, int32_t paraIndex,
1462 int32_t *pParaStart, int32_t *pParaLimit,
1463 UBiDiLevel *pParaLevel, UErrorCode *pErrorCode);
1464
1480U_CAPI UBiDiLevel U_EXPORT2
1481ubidi_getLevelAt(const UBiDi *pBiDi, int32_t charIndex);
1482
1501U_CAPI const UBiDiLevel * U_EXPORT2
1502ubidi_getLevels(UBiDi *pBiDi, UErrorCode *pErrorCode);
1503
1528U_CAPI void U_EXPORT2
1529ubidi_getLogicalRun(const UBiDi *pBiDi, int32_t logicalPosition,
1530 int32_t *pLogicalLimit, UBiDiLevel *pLevel);
1531
1547U_CAPI int32_t U_EXPORT2
1548ubidi_countRuns(UBiDi *pBiDi, UErrorCode *pErrorCode);
1549
1606U_CAPI UBiDiDirection U_EXPORT2
1607ubidi_getVisualRun(UBiDi *pBiDi, int32_t runIndex,
1608 int32_t *pLogicalStart, int32_t *pLength);
1609
1647U_CAPI int32_t U_EXPORT2
1648ubidi_getVisualIndex(UBiDi *pBiDi, int32_t logicalIndex, UErrorCode *pErrorCode);
1649
1682U_CAPI int32_t U_EXPORT2
1683ubidi_getLogicalIndex(UBiDi *pBiDi, int32_t visualIndex, UErrorCode *pErrorCode);
1684
1725U_CAPI void U_EXPORT2
1726ubidi_getLogicalMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode);
1727
1761U_CAPI void U_EXPORT2
1762ubidi_getVisualMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode);
1763
1784U_CAPI void U_EXPORT2
1785ubidi_reorderLogical(const UBiDiLevel *levels, int32_t length, int32_t *indexMap);
1786
1807U_CAPI void U_EXPORT2
1808ubidi_reorderVisual(const UBiDiLevel *levels, int32_t length, int32_t *indexMap);
1809
1842U_CAPI void U_EXPORT2
1843ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length);
1844
1854#define UBIDI_KEEP_BASE_COMBINING 1
1855
1864#define UBIDI_DO_MIRRORING 2
1865
1878#define UBIDI_INSERT_LRM_FOR_NUMERIC 4
1879
1891#define UBIDI_REMOVE_BIDI_CONTROLS 8
1892
1907#define UBIDI_OUTPUT_REVERSE 16
1908
1947U_CAPI int32_t U_EXPORT2
1949
1977U_CAPI int32_t U_EXPORT2
1979
1981
1982#ifndef U_HIDE_DEPRECATED_API
1992#define U_BIDI_CLASS_DEFAULT U_CHAR_DIRECTION_COUNT
1993#endif // U_HIDE_DEPRECATED_API
1994
2016UBiDiClassCallback(const void *context, UChar32 c);
2017
2019
2035U_CAPI UCharDirection U_EXPORT2
2037
2065U_CAPI void U_EXPORT2
2067 const void *newContext, UBiDiClassCallback **oldFn,
2068 const void **oldContext, UErrorCode *pErrorCode);
2069
2082U_CAPI void U_EXPORT2
2083ubidi_getClassCallback(UBiDi *pBiDi, UBiDiClassCallback **fn, const void **context);
2084
2150U_CAPI int32_t U_EXPORT2
2152 UChar *dest, int32_t destSize,
2153 uint16_t options,
2154 UErrorCode *pErrorCode);
2155
2202U_CAPI int32_t U_EXPORT2
2203ubidi_writeReverse(const UChar *src, int32_t srcLength,
2204 UChar *dest, int32_t destSize,
2205 uint16_t options,
2206 UErrorCode *pErrorCode);
2207
2208/*#define BIDI_SAMPLE_CODE*/
2211#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.
Definition: localpointer.h:550
#define U_CALLCONV
Similar to U_CDECL_BEGIN/U_CDECL_END, this qualifier is necessary in callback function typedefs to ma...
Definition: platform.h:885
U_CAPI void ubidi_getLogicalRun(const UBiDi *pBiDi, int32_t logicalPosition, int32_t *pLogicalLimit, UBiDiLevel *pLevel)
Get a logical run.
U_CAPI int32_t ubidi_countParagraphs(UBiDi *pBiDi)
Get the number of paragraphs.
U_CAPI int32_t ubidi_countRuns(UBiDi *pBiDi, UErrorCode *pErrorCode)
Get the number of runs.
U_CAPI void ubidi_reorderVisual(const UBiDiLevel *levels, int32_t length, int32_t *indexMap)
This is a convenience function that does not use a UBiDi object.
U_CAPI int32_t ubidi_getLength(const UBiDi *pBiDi)
Get the length of the text.
U_CAPI const UChar * ubidi_getText(const UBiDi *pBiDi)
Get the pointer to the text.
U_CAPI UCharDirection ubidi_getCustomizedClass(UBiDi *pBiDi, UChar32 c)
Retrieve the Bidi class for a given code point.
UBiDiReorderingOption
UBiDiReorderingOption values indicate which options are specified to affect the Bidi algorithm.
Definition: ubidi.h:914
@ UBIDI_OPTION_INSERT_MARKS
option bit for ubidi_setReorderingOptions: insert Bidi marks (LRM or RLM) when needed to ensure corre...
Definition: ubidi.h:967
@ UBIDI_OPTION_STREAMING
option bit for ubidi_setReorderingOptions: process the output as part of a stream to be continued
Definition: ubidi.h:1033
@ UBIDI_OPTION_DEFAULT
option value for ubidi_setReorderingOptions: disable all the options which can be set with this funct...
Definition: ubidi.h:921
@ UBIDI_OPTION_REMOVE_CONTROLS
option bit for ubidi_setReorderingOptions: remove Bidi control characters
Definition: ubidi.h:985
U_CAPI int32_t ubidi_getProcessedLength(const UBiDi *pBiDi)
Get the length of the source text processed by the last call to ubidi_setPara().
U_CAPI UBiDiDirection ubidi_getBaseDirection(const UChar *text, int32_t length)
Gets the base direction of the text provided according to the Unicode Bidirectional Algorithm.
U_CAPI 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,...
U_CAPI void ubidi_close(UBiDi *pBiDi)
ubidi_close() must be called to free the memory associated with a UBiDi object.
UBiDiDirection
UBiDiDirection values indicate the text direction.
Definition: ubidi.h:429
@ UBIDI_LTR
Left-to-right text.
Definition: ubidi.h:441
@ UBIDI_NEUTRAL
No strongly directional text.
Definition: ubidi.h:467
@ UBIDI_MIXED
Mixed-directional text.
Definition: ubidi.h:460
@ UBIDI_RTL
Right-to-left text.
Definition: ubidi.h:453
U_CAPI 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...
U_CAPI void ubidi_setReorderingOptions(UBiDi *pBiDi, uint32_t reorderingOptions)
Specify which of the reordering options should be applied during Bidi transformations.
U_CAPI 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...
U_CAPI 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.
UCharDirection UBiDiClassCallback(const void *context, UChar32 c)
Callback type declaration for overriding default Bidi class values with custom ones.
Definition: ubidi.h:2016
U_CAPI 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.
UBiDiReorderingMode
UBiDiReorderingMode values indicate which variant of the Bidi algorithm to use.
Definition: ubidi.h:699
@ UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL
Inverse Bidi (Visual to Logical) algorithm for the UBIDI_REORDER_NUMBERS_SPECIAL Bidi algorithm.
Definition: ubidi.h:732
@ UBIDI_REORDER_GROUP_NUMBERS_WITH_R
Logical to Visual algorithm grouping numbers with adjacent R characters (reversible algorithm).
Definition: ubidi.h:711
@ 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:719
@ UBIDI_REORDER_NUMBERS_SPECIAL
Logical to Visual algorithm which handles numbers in a way which mimics the behavior of Windows XP.
Definition: ubidi.h:707
@ 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:724
@ UBIDI_REORDER_INVERSE_LIKE_DIRECT
Visual to Logical algorithm equivalent to the regular Logical to Visual algorithm.
Definition: ubidi.h:728
@ UBIDI_REORDER_DEFAULT
Regular Logical to Visual Bidi algorithm according to Unicode.
Definition: ubidi.h:703
@ UBIDI_REORDER_COUNT
Number of values for reordering mode.
Definition: ubidi.h:738
U_CAPI UBiDi * ubidi_openSized(int32_t maxLength, int32_t maxRunCount, UErrorCode *pErrorCode)
Allocate a UBiDi structure with preallocated memory for internal structures.
U_CAPI UBool ubidi_isInverse(UBiDi *pBiDi)
Is this Bidi object set to perform the inverse Bidi algorithm?
U_CAPI void ubidi_reorderLogical(const UBiDiLevel *levels, int32_t length, int32_t *indexMap)
This is a convenience function that does not use a UBiDi object.
U_CAPI void ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length, UBiDiLevel paraLevel, UBiDiLevel *embeddingLevels, UErrorCode *pErrorCode)
Perform the Unicode Bidi algorithm.
U_CAPI 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.
U_CAPI 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.
U_CAPI uint32_t ubidi_getReorderingOptions(UBiDi *pBiDi)
What are the reordering options applied to a given Bidi object?
U_CAPI const UBiDiLevel * ubidi_getLevels(UBiDi *pBiDi, UErrorCode *pErrorCode)
Get an array of levels for each character.
U_CAPI UBiDi * ubidi_open(void)
Allocate a UBiDi structure.
U_CAPI UBiDiDirection ubidi_getDirection(const UBiDi *pBiDi)
Get the directionality of the text.
U_CAPI void ubidi_getClassCallback(UBiDi *pBiDi, UBiDiClassCallback **fn, const void **context)
Get the current callback function used for Bidi class determination.
uint8_t UBiDiLevel
UBiDiLevel is the type of the level values in this Bidi implementation.
Definition: ubidi.h:340
U_CAPI void ubidi_orderParagraphsLTR(UBiDi *pBiDi, UBool orderParagraphsLTR)
Specify whether block separators must be allocated level zero, so that successive paragraphs will pro...
U_CAPI int32_t ubidi_getResultLength(const UBiDi *pBiDi)
Get the length of the reordered text resulting from the last call to ubidi_setPara().
U_CAPI 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().
U_CAPI int32_t ubidi_getVisualIndex(UBiDi *pBiDi, int32_t logicalIndex, UErrorCode *pErrorCode)
Get the visual position from a logical text position.
U_CAPI UBiDiLevel ubidi_getParaLevel(const UBiDi *pBiDi)
Get the paragraph level of the text.
U_CAPI UBiDiLevel ubidi_getLevelAt(const UBiDi *pBiDi, int32_t charIndex)
Get the level for one character.
U_CAPI UBool ubidi_isOrderParagraphsLTR(UBiDi *pBiDi)
Is this Bidi object set to allocate level 0 to block separators so that successive paragraphs progres...
U_CAPI int32_t ubidi_getLogicalIndex(UBiDi *pBiDi, int32_t visualIndex, UErrorCode *pErrorCode)
Get the logical text position from a visual position.
U_CAPI void ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length)
Invert an index map.
U_CAPI void ubidi_setInverse(UBiDi *pBiDi, UBool isInverse)
Modify the operation of the Bidi algorithm such that it approximates an "inverse Bidi" algorithm.
U_CAPI 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.
U_CAPI 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.
struct UBiDi UBiDi
Definition: ubidi.h:486
U_CAPI UBiDiReorderingMode ubidi_getReorderingMode(UBiDi *pBiDi)
What is the requested reordering mode for a given Bidi object?
U_CAPI 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:970
int32_t UChar32
Define UChar32 as a type for single Unicode code points.
Definition: umachine.h:461
#define U_CDECL_END
This is used to end a declaration of a library private ICU C API.
Definition: umachine.h:86
int8_t UBool
The ICU boolean type, a signed-byte integer.
Definition: umachine.h:269
#define U_CAPI
This is used to declare a function as a public ICU C API.
Definition: umachine.h:110
char16_t UChar
The base type for UTF-16 code units and pointers.
Definition: umachine.h:412
#define U_CDECL_BEGIN
This is used to begin a declaration of a library private ICU C API.
Definition: umachine.h:85
Basic definitions for ICU, for both C and C++ APIs.
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Definition: utypes.h:415