1*0e209d39SAndroid Build Coastguard Worker // © 2016 and later: Unicode, Inc. and others. 2*0e209d39SAndroid Build Coastguard Worker // License & terms of use: http://www.unicode.org/copyright.html 3*0e209d39SAndroid Build Coastguard Worker /* 4*0e209d39SAndroid Build Coastguard Worker ******************************************************************************* 5*0e209d39SAndroid Build Coastguard Worker * 6*0e209d39SAndroid Build Coastguard Worker * Copyright (C) 2004-2014, International Business Machines 7*0e209d39SAndroid Build Coastguard Worker * Corporation and others. All Rights Reserved. 8*0e209d39SAndroid Build Coastguard Worker * 9*0e209d39SAndroid Build Coastguard Worker ******************************************************************************* 10*0e209d39SAndroid Build Coastguard Worker * file name: ubidi_props.h 11*0e209d39SAndroid Build Coastguard Worker * encoding: UTF-8 12*0e209d39SAndroid Build Coastguard Worker * tab size: 8 (not used) 13*0e209d39SAndroid Build Coastguard Worker * indentation:4 14*0e209d39SAndroid Build Coastguard Worker * 15*0e209d39SAndroid Build Coastguard Worker * created on: 2004dec30 16*0e209d39SAndroid Build Coastguard Worker * created by: Markus W. Scherer 17*0e209d39SAndroid Build Coastguard Worker * 18*0e209d39SAndroid Build Coastguard Worker * Low-level Unicode bidi/shaping properties access. 19*0e209d39SAndroid Build Coastguard Worker */ 20*0e209d39SAndroid Build Coastguard Worker 21*0e209d39SAndroid Build Coastguard Worker #ifndef __UBIDI_PROPS_H__ 22*0e209d39SAndroid Build Coastguard Worker #define __UBIDI_PROPS_H__ 23*0e209d39SAndroid Build Coastguard Worker 24*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h" 25*0e209d39SAndroid Build Coastguard Worker #include "unicode/uset.h" 26*0e209d39SAndroid Build Coastguard Worker #include "putilimp.h" 27*0e209d39SAndroid Build Coastguard Worker #include "uset_imp.h" 28*0e209d39SAndroid Build Coastguard Worker #include "udataswp.h" 29*0e209d39SAndroid Build Coastguard Worker 30*0e209d39SAndroid Build Coastguard Worker U_CDECL_BEGIN 31*0e209d39SAndroid Build Coastguard Worker 32*0e209d39SAndroid Build Coastguard Worker /* library API -------------------------------------------------------------- */ 33*0e209d39SAndroid Build Coastguard Worker 34*0e209d39SAndroid Build Coastguard Worker U_CFUNC void 35*0e209d39SAndroid Build Coastguard Worker ubidi_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode); 36*0e209d39SAndroid Build Coastguard Worker 37*0e209d39SAndroid Build Coastguard Worker /* property access functions */ 38*0e209d39SAndroid Build Coastguard Worker 39*0e209d39SAndroid Build Coastguard Worker U_CFUNC int32_t 40*0e209d39SAndroid Build Coastguard Worker ubidi_getMaxValue(UProperty which); 41*0e209d39SAndroid Build Coastguard Worker 42*0e209d39SAndroid Build Coastguard Worker U_CAPI UCharDirection 43*0e209d39SAndroid Build Coastguard Worker ubidi_getClass(UChar32 c); 44*0e209d39SAndroid Build Coastguard Worker 45*0e209d39SAndroid Build Coastguard Worker U_CFUNC UBool 46*0e209d39SAndroid Build Coastguard Worker ubidi_isMirrored(UChar32 c); 47*0e209d39SAndroid Build Coastguard Worker 48*0e209d39SAndroid Build Coastguard Worker U_CFUNC UChar32 49*0e209d39SAndroid Build Coastguard Worker ubidi_getMirror(UChar32 c); 50*0e209d39SAndroid Build Coastguard Worker 51*0e209d39SAndroid Build Coastguard Worker U_CFUNC UBool 52*0e209d39SAndroid Build Coastguard Worker ubidi_isBidiControl(UChar32 c); 53*0e209d39SAndroid Build Coastguard Worker 54*0e209d39SAndroid Build Coastguard Worker U_CFUNC UBool 55*0e209d39SAndroid Build Coastguard Worker ubidi_isJoinControl(UChar32 c); 56*0e209d39SAndroid Build Coastguard Worker 57*0e209d39SAndroid Build Coastguard Worker U_CFUNC UJoiningType 58*0e209d39SAndroid Build Coastguard Worker ubidi_getJoiningType(UChar32 c); 59*0e209d39SAndroid Build Coastguard Worker 60*0e209d39SAndroid Build Coastguard Worker U_CFUNC UJoiningGroup 61*0e209d39SAndroid Build Coastguard Worker ubidi_getJoiningGroup(UChar32 c); 62*0e209d39SAndroid Build Coastguard Worker 63*0e209d39SAndroid Build Coastguard Worker U_CFUNC UBidiPairedBracketType 64*0e209d39SAndroid Build Coastguard Worker ubidi_getPairedBracketType(UChar32 c); 65*0e209d39SAndroid Build Coastguard Worker 66*0e209d39SAndroid Build Coastguard Worker U_CFUNC UChar32 67*0e209d39SAndroid Build Coastguard Worker ubidi_getPairedBracket(UChar32 c); 68*0e209d39SAndroid Build Coastguard Worker 69*0e209d39SAndroid Build Coastguard Worker /* file definitions --------------------------------------------------------- */ 70*0e209d39SAndroid Build Coastguard Worker 71*0e209d39SAndroid Build Coastguard Worker #define UBIDI_DATA_NAME "ubidi" 72*0e209d39SAndroid Build Coastguard Worker #define UBIDI_DATA_TYPE "icu" 73*0e209d39SAndroid Build Coastguard Worker 74*0e209d39SAndroid Build Coastguard Worker /* format "BiDi" */ 75*0e209d39SAndroid Build Coastguard Worker #define UBIDI_FMT_0 0x42 76*0e209d39SAndroid Build Coastguard Worker #define UBIDI_FMT_1 0x69 77*0e209d39SAndroid Build Coastguard Worker #define UBIDI_FMT_2 0x44 78*0e209d39SAndroid Build Coastguard Worker #define UBIDI_FMT_3 0x69 79*0e209d39SAndroid Build Coastguard Worker 80*0e209d39SAndroid Build Coastguard Worker /* indexes into indexes[] */ 81*0e209d39SAndroid Build Coastguard Worker enum { 82*0e209d39SAndroid Build Coastguard Worker UBIDI_IX_INDEX_TOP, 83*0e209d39SAndroid Build Coastguard Worker UBIDI_IX_LENGTH, 84*0e209d39SAndroid Build Coastguard Worker UBIDI_IX_TRIE_SIZE, 85*0e209d39SAndroid Build Coastguard Worker UBIDI_IX_MIRROR_LENGTH, 86*0e209d39SAndroid Build Coastguard Worker 87*0e209d39SAndroid Build Coastguard Worker UBIDI_IX_JG_START, 88*0e209d39SAndroid Build Coastguard Worker UBIDI_IX_JG_LIMIT, 89*0e209d39SAndroid Build Coastguard Worker UBIDI_IX_JG_START2, /* new in format version 2.2, ICU 54 */ 90*0e209d39SAndroid Build Coastguard Worker UBIDI_IX_JG_LIMIT2, 91*0e209d39SAndroid Build Coastguard Worker 92*0e209d39SAndroid Build Coastguard Worker UBIDI_MAX_VALUES_INDEX=15, 93*0e209d39SAndroid Build Coastguard Worker UBIDI_IX_TOP=16 94*0e209d39SAndroid Build Coastguard Worker }; 95*0e209d39SAndroid Build Coastguard Worker 96*0e209d39SAndroid Build Coastguard Worker /* definitions for 16-bit bidi/shaping properties word ---------------------- */ 97*0e209d39SAndroid Build Coastguard Worker 98*0e209d39SAndroid Build Coastguard Worker enum { 99*0e209d39SAndroid Build Coastguard Worker /* UBIDI_CLASS_SHIFT=0, */ /* bidi class: 5 bits (4..0) */ 100*0e209d39SAndroid Build Coastguard Worker UBIDI_JT_SHIFT=5, /* joining type: 3 bits (7..5) */ 101*0e209d39SAndroid Build Coastguard Worker 102*0e209d39SAndroid Build Coastguard Worker UBIDI_BPT_SHIFT=8, /* Bidi_Paired_Bracket_Type(bpt): 2 bits (9..8) */ 103*0e209d39SAndroid Build Coastguard Worker 104*0e209d39SAndroid Build Coastguard Worker UBIDI_JOIN_CONTROL_SHIFT=10, 105*0e209d39SAndroid Build Coastguard Worker UBIDI_BIDI_CONTROL_SHIFT=11, 106*0e209d39SAndroid Build Coastguard Worker 107*0e209d39SAndroid Build Coastguard Worker UBIDI_IS_MIRRORED_SHIFT=12, /* 'is mirrored' */ 108*0e209d39SAndroid Build Coastguard Worker UBIDI_MIRROR_DELTA_SHIFT=13, /* bidi mirroring delta: 3 bits (15..13) */ 109*0e209d39SAndroid Build Coastguard Worker 110*0e209d39SAndroid Build Coastguard Worker UBIDI_MAX_JG_SHIFT=16 /* max JG value in indexes[UBIDI_MAX_VALUES_INDEX] bits 23..16 */ 111*0e209d39SAndroid Build Coastguard Worker }; 112*0e209d39SAndroid Build Coastguard Worker 113*0e209d39SAndroid Build Coastguard Worker #define UBIDI_CLASS_MASK 0x0000001f 114*0e209d39SAndroid Build Coastguard Worker #define UBIDI_JT_MASK 0x000000e0 115*0e209d39SAndroid Build Coastguard Worker #define UBIDI_BPT_MASK 0x00000300 116*0e209d39SAndroid Build Coastguard Worker 117*0e209d39SAndroid Build Coastguard Worker #define UBIDI_MAX_JG_MASK 0x00ff0000 118*0e209d39SAndroid Build Coastguard Worker 119*0e209d39SAndroid Build Coastguard Worker #define UBIDI_GET_CLASS(props) ((props)&UBIDI_CLASS_MASK) 120*0e209d39SAndroid Build Coastguard Worker #define UBIDI_GET_FLAG(props, shift) (((props)>>(shift))&1) 121*0e209d39SAndroid Build Coastguard Worker 122*0e209d39SAndroid Build Coastguard Worker #if U_SIGNED_RIGHT_SHIFT_IS_ARITHMETIC 123*0e209d39SAndroid Build Coastguard Worker # define UBIDI_GET_MIRROR_DELTA(props) ((int16_t)(props)>>UBIDI_MIRROR_DELTA_SHIFT) 124*0e209d39SAndroid Build Coastguard Worker #else 125*0e209d39SAndroid Build Coastguard Worker # define UBIDI_GET_MIRROR_DELTA(props) (int16_t)(((props)&0x8000) ? (((props)>>UBIDI_MIRROR_DELTA_SHIFT)|0xe000) : ((props)>>UBIDI_MIRROR_DELTA_SHIFT)) 126*0e209d39SAndroid Build Coastguard Worker #endif 127*0e209d39SAndroid Build Coastguard Worker 128*0e209d39SAndroid Build Coastguard Worker enum { 129*0e209d39SAndroid Build Coastguard Worker UBIDI_ESC_MIRROR_DELTA=-4, 130*0e209d39SAndroid Build Coastguard Worker UBIDI_MIN_MIRROR_DELTA=-3, 131*0e209d39SAndroid Build Coastguard Worker UBIDI_MAX_MIRROR_DELTA=3 132*0e209d39SAndroid Build Coastguard Worker }; 133*0e209d39SAndroid Build Coastguard Worker 134*0e209d39SAndroid Build Coastguard Worker /* definitions for 32-bit mirror table entry -------------------------------- */ 135*0e209d39SAndroid Build Coastguard Worker 136*0e209d39SAndroid Build Coastguard Worker enum { 137*0e209d39SAndroid Build Coastguard Worker /* the source Unicode code point takes 21 bits (20..0) */ 138*0e209d39SAndroid Build Coastguard Worker UBIDI_MIRROR_INDEX_SHIFT=21, 139*0e209d39SAndroid Build Coastguard Worker UBIDI_MAX_MIRROR_INDEX=0x7ff 140*0e209d39SAndroid Build Coastguard Worker }; 141*0e209d39SAndroid Build Coastguard Worker 142*0e209d39SAndroid Build Coastguard Worker #define UBIDI_GET_MIRROR_CODE_POINT(m) (UChar32)((m)&0x1fffff) 143*0e209d39SAndroid Build Coastguard Worker 144*0e209d39SAndroid Build Coastguard Worker #define UBIDI_GET_MIRROR_INDEX(m) ((m)>>UBIDI_MIRROR_INDEX_SHIFT) 145*0e209d39SAndroid Build Coastguard Worker 146*0e209d39SAndroid Build Coastguard Worker U_CDECL_END 147*0e209d39SAndroid Build Coastguard Worker 148*0e209d39SAndroid Build Coastguard Worker #endif 149