16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 2004-2013, International Business Machines 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Corporation and others. All Rights Reserved. 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* file name: ubidi_props.h 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* encoding: US-ASCII 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* tab size: 8 (not used) 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* indentation:4 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* created on: 2004dec30 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* created by: Markus W. Scherer 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Low-level Unicode bidi/shaping properties access. 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef __UBIDI_PROPS_H__ 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define __UBIDI_PROPS_H__ 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uset.h" 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "putilimp.h" 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "uset_imp.h" 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "udataswp.h" 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CDECL_BEGIN 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* library API -------------------------------------------------------------- */ 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstruct UBiDiProps; 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct UBiDiProps UBiDiProps; 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CFUNC const UBiDiProps * 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgubidi_getSingleton(void); 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CFUNC void 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgubidi_addPropertyStarts(const UBiDiProps *bdp, const USetAdder *sa, UErrorCode *pErrorCode); 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* property access functions */ 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CFUNC int32_t 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgubidi_getMaxValue(const UBiDiProps *bdp, UProperty which); 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI UCharDirection 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgubidi_getClass(const UBiDiProps *bdp, UChar32 c); 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CFUNC UBool 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgubidi_isMirrored(const UBiDiProps *bdp, UChar32 c); 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CFUNC UChar32 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgubidi_getMirror(const UBiDiProps *bdp, UChar32 c); 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CFUNC UBool 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgubidi_isBidiControl(const UBiDiProps *bdp, UChar32 c); 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CFUNC UBool 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgubidi_isJoinControl(const UBiDiProps *bdp, UChar32 c); 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CFUNC UJoiningType 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgubidi_getJoiningType(const UBiDiProps *bdp, UChar32 c); 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CFUNC UJoiningGroup 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgubidi_getJoiningGroup(const UBiDiProps *bdp, UChar32 c); 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CFUNC UBidiPairedBracketType 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgubidi_getPairedBracketType(const UBiDiProps *bdp, UChar32 c); 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CFUNC UChar32 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgubidi_getPairedBracket(const UBiDiProps *bdp, UChar32 c); 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* file definitions --------------------------------------------------------- */ 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UBIDI_DATA_NAME "ubidi" 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UBIDI_DATA_TYPE "icu" 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* format "BiDi" */ 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UBIDI_FMT_0 0x42 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UBIDI_FMT_1 0x69 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UBIDI_FMT_2 0x44 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UBIDI_FMT_3 0x69 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* indexes into indexes[] */ 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgenum { 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBIDI_IX_INDEX_TOP, 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBIDI_IX_LENGTH, 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBIDI_IX_TRIE_SIZE, 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBIDI_IX_MIRROR_LENGTH, 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBIDI_IX_JG_START, 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBIDI_IX_JG_LIMIT, 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBIDI_MAX_VALUES_INDEX=15, 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBIDI_IX_TOP=16 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* definitions for 16-bit bidi/shaping properties word ---------------------- */ 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgenum { 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* UBIDI_CLASS_SHIFT=0, */ /* bidi class: 5 bits (4..0) */ 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBIDI_JT_SHIFT=5, /* joining type: 3 bits (7..5) */ 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBIDI_BPT_SHIFT=8, /* Bidi_Paired_Bracket_Type(bpt): 2 bits (9..8) */ 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBIDI_JOIN_CONTROL_SHIFT=10, 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBIDI_BIDI_CONTROL_SHIFT=11, 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBIDI_IS_MIRRORED_SHIFT=12, /* 'is mirrored' */ 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBIDI_MIRROR_DELTA_SHIFT=13, /* bidi mirroring delta: 3 bits (15..13) */ 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBIDI_MAX_JG_SHIFT=16 /* max JG value in indexes[UBIDI_MAX_VALUES_INDEX] bits 23..16 */ 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UBIDI_CLASS_MASK 0x0000001f 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UBIDI_JT_MASK 0x000000e0 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UBIDI_BPT_MASK 0x00000300 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UBIDI_MAX_JG_MASK 0x00ff0000 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UBIDI_GET_CLASS(props) ((props)&UBIDI_CLASS_MASK) 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UBIDI_GET_FLAG(props, shift) (((props)>>(shift))&1) 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_SIGNED_RIGHT_SHIFT_IS_ARITHMETIC 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define UBIDI_GET_MIRROR_DELTA(props) ((int16_t)(props)>>UBIDI_MIRROR_DELTA_SHIFT) 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define UBIDI_GET_MIRROR_DELTA(props) (int16_t)(((props)&0x8000) ? (((props)>>UBIDI_MIRROR_DELTA_SHIFT)|0xe000) : ((props)>>UBIDI_MIRROR_DELTA_SHIFT)) 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgenum { 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBIDI_ESC_MIRROR_DELTA=-4, 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBIDI_MIN_MIRROR_DELTA=-3, 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBIDI_MAX_MIRROR_DELTA=3 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* definitions for 32-bit mirror table entry -------------------------------- */ 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgenum { 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* the source Unicode code point takes 21 bits (20..0) */ 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBIDI_MIRROR_INDEX_SHIFT=21, 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBIDI_MAX_MIRROR_INDEX=0x7ff 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UBIDI_GET_MIRROR_CODE_POINT(m) (UChar32)((m)&0x1fffff) 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UBIDI_GET_MIRROR_INDEX(m) ((m)>>UBIDI_MIRROR_INDEX_SHIFT) 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CDECL_END 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 151