ICU 73.2  73.2
ubidi.h
Go to the documentation of this file.
00001 // © 2016 and later: Unicode, Inc. and others.
00002 // License & terms of use: http://www.unicode.org/copyright.html
00003 /*
00004 ******************************************************************************
00005 *
00006 *   Copyright (C) 1999-2013, International Business Machines
00007 *   Corporation and others.  All Rights Reserved.
00008 *
00009 ******************************************************************************
00010 *   file name:  ubidi.h
00011 *   encoding:   UTF-8
00012 *   tab size:   8 (not used)
00013 *   indentation:4
00014 *
00015 *   created on: 1999jul27
00016 *   created by: Markus W. Scherer, updated by Matitiahu Allouche
00017 */
00018 
00019 #ifndef UBIDI_H
00020 #define UBIDI_H
00021 
00022 #include "unicode/utypes.h"
00023 #include "unicode/uchar.h"
00024 
00025 #if U_SHOW_CPLUSPLUS_API
00026 #include "unicode/localpointer.h"
00027 #endif   // U_SHOW_CPLUSPLUS_API
00028 
00293 /*DOCXX_TAG*/
00340 typedef uint8_t UBiDiLevel;
00341 
00366 #define UBIDI_DEFAULT_LTR 0xfe
00367 
00393 #define UBIDI_DEFAULT_RTL 0xff
00394 
00402 #define UBIDI_MAX_EXPLICIT_LEVEL 125
00403 
00408 #define UBIDI_LEVEL_OVERRIDE 0x80
00409 
00423 #define UBIDI_MAP_NOWHERE   (-1)
00424 
00429 enum UBiDiDirection {
00441   UBIDI_LTR,
00453   UBIDI_RTL,
00460   UBIDI_MIXED,
00467   UBIDI_NEUTRAL
00468 };
00469 
00471 typedef enum UBiDiDirection UBiDiDirection;
00472 
00483 struct UBiDi;
00484 
00486 typedef struct UBiDi UBiDi;
00487 
00503 U_CAPI UBiDi * U_EXPORT2
00504 ubidi_open(void);
00505 
00540 U_CAPI UBiDi * U_EXPORT2
00541 ubidi_openSized(int32_t maxLength, int32_t maxRunCount, UErrorCode *pErrorCode);
00542 
00563 U_CAPI void U_EXPORT2
00564 ubidi_close(UBiDi *pBiDi);
00565 
00566 #if U_SHOW_CPLUSPLUS_API
00567 
00568 U_NAMESPACE_BEGIN
00569 
00579 U_DEFINE_LOCAL_OPEN_POINTER(LocalUBiDiPointer, UBiDi, ubidi_close);
00580 
00581 U_NAMESPACE_END
00582 
00583 #endif
00584 
00633 U_CAPI void U_EXPORT2
00634 ubidi_setInverse(UBiDi *pBiDi, UBool isInverse);
00635 
00652 U_CAPI UBool U_EXPORT2
00653 ubidi_isInverse(UBiDi *pBiDi);
00654 
00675 U_CAPI void U_EXPORT2
00676 ubidi_orderParagraphsLTR(UBiDi *pBiDi, UBool orderParagraphsLTR);
00677 
00689 U_CAPI UBool U_EXPORT2
00690 ubidi_isOrderParagraphsLTR(UBiDi *pBiDi);
00691 
00699 typedef enum UBiDiReorderingMode {
00703     UBIDI_REORDER_DEFAULT = 0,
00707     UBIDI_REORDER_NUMBERS_SPECIAL,
00711     UBIDI_REORDER_GROUP_NUMBERS_WITH_R,
00719     UBIDI_REORDER_RUNS_ONLY,
00724     UBIDI_REORDER_INVERSE_NUMBERS_AS_L,
00728     UBIDI_REORDER_INVERSE_LIKE_DIRECT,
00732     UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL,
00733 #ifndef U_HIDE_DEPRECATED_API
00734 
00738     UBIDI_REORDER_COUNT
00739 #endif  // U_HIDE_DEPRECATED_API
00740 } UBiDiReorderingMode;
00741 
00893 U_CAPI void U_EXPORT2
00894 ubidi_setReorderingMode(UBiDi *pBiDi, UBiDiReorderingMode reorderingMode);
00895 
00904 U_CAPI UBiDiReorderingMode U_EXPORT2
00905 ubidi_getReorderingMode(UBiDi *pBiDi);
00906 
00914 typedef enum UBiDiReorderingOption {
00921     UBIDI_OPTION_DEFAULT = 0,
00922 
00967     UBIDI_OPTION_INSERT_MARKS = 1,
00968 
00985     UBIDI_OPTION_REMOVE_CONTROLS = 2,
00986 
01033     UBIDI_OPTION_STREAMING = 4
01034 } UBiDiReorderingOption;
01035 
01049 U_CAPI void U_EXPORT2
01050 ubidi_setReorderingOptions(UBiDi *pBiDi, uint32_t reorderingOptions);
01051 
01060 U_CAPI uint32_t U_EXPORT2
01061 ubidi_getReorderingOptions(UBiDi *pBiDi);
01062 
01147 U_CAPI void U_EXPORT2
01148 ubidi_setContext(UBiDi *pBiDi,
01149                  const UChar *prologue, int32_t proLength,
01150                  const UChar *epilogue, int32_t epiLength,
01151                  UErrorCode *pErrorCode);
01152 
01235 U_CAPI void U_EXPORT2
01236 ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length,
01237               UBiDiLevel paraLevel, UBiDiLevel *embeddingLevels,
01238               UErrorCode *pErrorCode);
01239 
01286 U_CAPI void U_EXPORT2
01287 ubidi_setLine(const UBiDi *pParaBiDi,
01288               int32_t start, int32_t limit,
01289               UBiDi *pLineBiDi,
01290               UErrorCode *pErrorCode);
01291 
01307 U_CAPI UBiDiDirection U_EXPORT2
01308 ubidi_getDirection(const UBiDi *pBiDi);
01309 
01337 U_CAPI UBiDiDirection U_EXPORT2
01338 ubidi_getBaseDirection(const UChar *text,  int32_t length );
01339 
01351 U_CAPI const UChar * U_EXPORT2
01352 ubidi_getText(const UBiDi *pBiDi);
01353 
01362 U_CAPI int32_t U_EXPORT2
01363 ubidi_getLength(const UBiDi *pBiDi);
01364 
01380 U_CAPI UBiDiLevel U_EXPORT2
01381 ubidi_getParaLevel(const UBiDi *pBiDi);
01382 
01391 U_CAPI int32_t U_EXPORT2
01392 ubidi_countParagraphs(UBiDi *pBiDi);
01393 
01428 U_CAPI int32_t U_EXPORT2
01429 ubidi_getParagraph(const UBiDi *pBiDi, int32_t charIndex, int32_t *pParaStart,
01430                    int32_t *pParaLimit, UBiDiLevel *pParaLevel,
01431                    UErrorCode *pErrorCode);
01432 
01460 U_CAPI void U_EXPORT2
01461 ubidi_getParagraphByIndex(const UBiDi *pBiDi, int32_t paraIndex,
01462                           int32_t *pParaStart, int32_t *pParaLimit,
01463                           UBiDiLevel *pParaLevel, UErrorCode *pErrorCode);
01464 
01480 U_CAPI UBiDiLevel U_EXPORT2
01481 ubidi_getLevelAt(const UBiDi *pBiDi, int32_t charIndex);
01482 
01501 U_CAPI const UBiDiLevel * U_EXPORT2
01502 ubidi_getLevels(UBiDi *pBiDi, UErrorCode *pErrorCode);
01503 
01528 U_CAPI void U_EXPORT2
01529 ubidi_getLogicalRun(const UBiDi *pBiDi, int32_t logicalPosition,
01530                     int32_t *pLogicalLimit, UBiDiLevel *pLevel);
01531 
01547 U_CAPI int32_t U_EXPORT2
01548 ubidi_countRuns(UBiDi *pBiDi, UErrorCode *pErrorCode);
01549 
01606 U_CAPI UBiDiDirection U_EXPORT2
01607 ubidi_getVisualRun(UBiDi *pBiDi, int32_t runIndex,
01608                    int32_t *pLogicalStart, int32_t *pLength);
01609 
01647 U_CAPI int32_t U_EXPORT2
01648 ubidi_getVisualIndex(UBiDi *pBiDi, int32_t logicalIndex, UErrorCode *pErrorCode);
01649 
01682 U_CAPI int32_t U_EXPORT2
01683 ubidi_getLogicalIndex(UBiDi *pBiDi, int32_t visualIndex, UErrorCode *pErrorCode);
01684 
01725 U_CAPI void U_EXPORT2
01726 ubidi_getLogicalMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode);
01727 
01761 U_CAPI void U_EXPORT2
01762 ubidi_getVisualMap(UBiDi *pBiDi, int32_t *indexMap, UErrorCode *pErrorCode);
01763 
01784 U_CAPI void U_EXPORT2
01785 ubidi_reorderLogical(const UBiDiLevel *levels, int32_t length, int32_t *indexMap);
01786 
01807 U_CAPI void U_EXPORT2
01808 ubidi_reorderVisual(const UBiDiLevel *levels, int32_t length, int32_t *indexMap);
01809 
01842 U_CAPI void U_EXPORT2
01843 ubidi_invertMap(const int32_t *srcMap, int32_t *destMap, int32_t length);
01844 
01854 #define UBIDI_KEEP_BASE_COMBINING       1
01855 
01864 #define UBIDI_DO_MIRRORING              2
01865 
01878 #define UBIDI_INSERT_LRM_FOR_NUMERIC    4
01879 
01891 #define UBIDI_REMOVE_BIDI_CONTROLS      8
01892 
01907 #define UBIDI_OUTPUT_REVERSE            16
01908 
01947 U_CAPI int32_t U_EXPORT2
01948 ubidi_getProcessedLength(const UBiDi *pBiDi);
01949 
01977 U_CAPI int32_t U_EXPORT2
01978 ubidi_getResultLength(const UBiDi *pBiDi);
01979 
01980 U_CDECL_BEGIN
01981 
01982 #ifndef U_HIDE_DEPRECATED_API
01983 
01992 #define U_BIDI_CLASS_DEFAULT  U_CHAR_DIRECTION_COUNT
01993 #endif  // U_HIDE_DEPRECATED_API
01994 
02015 typedef UCharDirection U_CALLCONV
02016 UBiDiClassCallback(const void *context, UChar32 c);
02017 
02018 U_CDECL_END
02019 
02035 U_CAPI UCharDirection U_EXPORT2
02036 ubidi_getCustomizedClass(UBiDi *pBiDi, UChar32 c);
02037 
02065 U_CAPI void U_EXPORT2
02066 ubidi_setClassCallback(UBiDi *pBiDi, UBiDiClassCallback *newFn,
02067                        const void *newContext, UBiDiClassCallback **oldFn,
02068                        const void **oldContext, UErrorCode *pErrorCode);
02069 
02082 U_CAPI void U_EXPORT2
02083 ubidi_getClassCallback(UBiDi *pBiDi, UBiDiClassCallback **fn, const void **context);
02084 
02150 U_CAPI int32_t U_EXPORT2
02151 ubidi_writeReordered(UBiDi *pBiDi,
02152                      UChar *dest, int32_t destSize,
02153                      uint16_t options,
02154                      UErrorCode *pErrorCode);
02155 
02202 U_CAPI int32_t U_EXPORT2
02203 ubidi_writeReverse(const UChar *src, int32_t srcLength,
02204                    UChar *dest, int32_t destSize,
02205                    uint16_t options,
02206                    UErrorCode *pErrorCode);
02207 
02208 /*#define BIDI_SAMPLE_CODE*/
02211 #endif