sl@0: /* sl@0: ******************************************************************************* sl@0: * sl@0: * Copyright (C) 2002-2005, International Business Machines sl@0: * Corporation and others. All Rights Reserved. sl@0: * sl@0: ******************************************************************************* sl@0: * file name: uprops.h sl@0: * encoding: US-ASCII sl@0: * tab size: 8 (not used) sl@0: * indentation:4 sl@0: * sl@0: * created on: 2002feb24 sl@0: * created by: Markus W. Scherer sl@0: * sl@0: * Constants for mostly non-core Unicode character properties sl@0: * stored in uprops.icu. sl@0: */ sl@0: sl@0: #ifndef __UPROPS_H__ sl@0: #define __UPROPS_H__ sl@0: sl@0: #include "unicode/utypes.h" sl@0: #include "unicode/uset.h" sl@0: #include "uset_imp.h" sl@0: #include "udataswp.h" sl@0: sl@0: /* indexes[] entries */ sl@0: enum { sl@0: UPROPS_PROPS32_INDEX, sl@0: UPROPS_EXCEPTIONS_INDEX, sl@0: UPROPS_EXCEPTIONS_TOP_INDEX, sl@0: sl@0: UPROPS_ADDITIONAL_TRIE_INDEX, sl@0: UPROPS_ADDITIONAL_VECTORS_INDEX, sl@0: UPROPS_ADDITIONAL_VECTORS_COLUMNS_INDEX, sl@0: sl@0: UPROPS_RESERVED_INDEX, /* 6 */ sl@0: sl@0: /* maximum values for code values in vector word 0 */ sl@0: UPROPS_MAX_VALUES_INDEX=10, sl@0: /* maximum values for code values in vector word 2 */ sl@0: UPROPS_MAX_VALUES_2_INDEX, sl@0: sl@0: UPROPS_INDEX_COUNT=16 sl@0: }; sl@0: sl@0: /* definitions for the main properties words */ sl@0: enum { sl@0: /* general category shift==0 0 (5 bits) */ sl@0: UPROPS_NUMERIC_TYPE_SHIFT=5, /* 5 (3 bits) */ sl@0: UPROPS_NUMERIC_VALUE_SHIFT=8 /* 8 (8 bits) */ sl@0: }; sl@0: sl@0: #define GET_CATEGORY(props) ((props)&0x1f) sl@0: #define CAT_MASK(props) U_MASK(GET_CATEGORY(props)) sl@0: sl@0: #define GET_NUMERIC_TYPE(props) (((props)>>UPROPS_NUMERIC_TYPE_SHIFT)&7) sl@0: #define GET_NUMERIC_VALUE(props) (((props)>>UPROPS_NUMERIC_VALUE_SHIFT)&0xff) sl@0: sl@0: /* internal numeric pseudo-types for special encodings of numeric values */ sl@0: enum { sl@0: UPROPS_NT_FRACTION=4, /* ==U_NT_COUNT, must not change unless binary format version changes */ sl@0: UPROPS_NT_LARGE, sl@0: UPROPS_NT_COUNT sl@0: }; sl@0: sl@0: /* encoding of fractional and large numbers */ sl@0: enum { sl@0: UPROPS_MAX_SMALL_NUMBER=0xff, sl@0: sl@0: UPROPS_FRACTION_NUM_SHIFT=3, /* numerator: bits 7..3 */ sl@0: UPROPS_FRACTION_DEN_MASK=7, /* denominator: bits 2..0 */ sl@0: sl@0: UPROPS_FRACTION_MAX_NUM=31, sl@0: UPROPS_FRACTION_DEN_OFFSET=2, /* denominator values are 2..9 */ sl@0: sl@0: UPROPS_FRACTION_MIN_DEN=UPROPS_FRACTION_DEN_OFFSET, sl@0: UPROPS_FRACTION_MAX_DEN=UPROPS_FRACTION_MIN_DEN+UPROPS_FRACTION_DEN_MASK, sl@0: sl@0: UPROPS_LARGE_MANT_SHIFT=4, /* mantissa: bits 7..4 */ sl@0: UPROPS_LARGE_EXP_MASK=0xf, /* exponent: bits 3..0 */ sl@0: UPROPS_LARGE_EXP_OFFSET=2, /* regular exponents 2..17 */ sl@0: UPROPS_LARGE_EXP_OFFSET_EXTRA=18, /* extra large exponents 18..33 */ sl@0: sl@0: UPROPS_LARGE_MIN_EXP=UPROPS_LARGE_EXP_OFFSET, sl@0: UPROPS_LARGE_MAX_EXP=UPROPS_LARGE_MIN_EXP+UPROPS_LARGE_EXP_MASK, sl@0: UPROPS_LARGE_MAX_EXP_EXTRA=UPROPS_LARGE_EXP_OFFSET_EXTRA+UPROPS_LARGE_EXP_MASK sl@0: }; sl@0: sl@0: /* number of properties vector words */ sl@0: #define UPROPS_VECTOR_WORDS 3 sl@0: sl@0: /* sl@0: * Properties in vector word 0 sl@0: * Bits sl@0: * 31..24 DerivedAge version major/minor one nibble each sl@0: * 23..18 Line Break sl@0: * 17..15 East Asian Width sl@0: * 14.. 7 UBlockCode sl@0: * 6.. 0 UScriptCode sl@0: */ sl@0: sl@0: /* derived age: one nibble each for major and minor version numbers */ sl@0: #define UPROPS_AGE_MASK 0xff000000 sl@0: #define UPROPS_AGE_SHIFT 24 sl@0: sl@0: #define UPROPS_LB_MASK 0x00FC0000 sl@0: #define UPROPS_LB_SHIFT 18 sl@0: sl@0: #define UPROPS_EA_MASK 0x00038000 sl@0: #define UPROPS_EA_SHIFT 15 sl@0: sl@0: #define UPROPS_BLOCK_MASK 0x00007f80 sl@0: #define UPROPS_BLOCK_SHIFT 7 sl@0: sl@0: #define UPROPS_SCRIPT_MASK 0x0000007f sl@0: sl@0: /* sl@0: * Properties in vector word 1 sl@0: * Each bit encodes one binary property. sl@0: * The following constants represent the bit number, use 1<