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) 2003-2006, 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: sprpimpl.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: 2003feb1 16*0e209d39SAndroid Build Coastguard Worker * created by: Ram Viswanadha 17*0e209d39SAndroid Build Coastguard Worker */ 18*0e209d39SAndroid Build Coastguard Worker 19*0e209d39SAndroid Build Coastguard Worker #ifndef SPRPIMPL_H 20*0e209d39SAndroid Build Coastguard Worker #define SPRPIMPL_H 21*0e209d39SAndroid Build Coastguard Worker 22*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h" 23*0e209d39SAndroid Build Coastguard Worker 24*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_IDNA 25*0e209d39SAndroid Build Coastguard Worker 26*0e209d39SAndroid Build Coastguard Worker #include "unicode/ustring.h" 27*0e209d39SAndroid Build Coastguard Worker #include "unicode/parseerr.h" 28*0e209d39SAndroid Build Coastguard Worker #include "unicode/usprep.h" 29*0e209d39SAndroid Build Coastguard Worker #include "unicode/udata.h" 30*0e209d39SAndroid Build Coastguard Worker #include "utrie.h" 31*0e209d39SAndroid Build Coastguard Worker #include "udataswp.h" 32*0e209d39SAndroid Build Coastguard Worker #include "ubidi_props.h" 33*0e209d39SAndroid Build Coastguard Worker 34*0e209d39SAndroid Build Coastguard Worker #define _SPREP_DATA_TYPE "spp" 35*0e209d39SAndroid Build Coastguard Worker 36*0e209d39SAndroid Build Coastguard Worker enum UStringPrepType{ 37*0e209d39SAndroid Build Coastguard Worker USPREP_UNASSIGNED = 0x0000 , 38*0e209d39SAndroid Build Coastguard Worker USPREP_MAP = 0x0001 , 39*0e209d39SAndroid Build Coastguard Worker USPREP_PROHIBITED = 0x0002 , 40*0e209d39SAndroid Build Coastguard Worker USPREP_DELETE = 0x0003 , 41*0e209d39SAndroid Build Coastguard Worker USPREP_TYPE_LIMIT = 0x0004 42*0e209d39SAndroid Build Coastguard Worker }; 43*0e209d39SAndroid Build Coastguard Worker 44*0e209d39SAndroid Build Coastguard Worker typedef enum UStringPrepType UStringPrepType; 45*0e209d39SAndroid Build Coastguard Worker 46*0e209d39SAndroid Build Coastguard Worker #ifdef USPREP_TYPE_NAMES_ARRAY 47*0e209d39SAndroid Build Coastguard Worker static const char* usprepTypeNames[] ={ 48*0e209d39SAndroid Build Coastguard Worker "UNASSIGNED" , 49*0e209d39SAndroid Build Coastguard Worker "MAP" , 50*0e209d39SAndroid Build Coastguard Worker "PROHIBITED" , 51*0e209d39SAndroid Build Coastguard Worker "DELETE", 52*0e209d39SAndroid Build Coastguard Worker "TYPE_LIMIT" 53*0e209d39SAndroid Build Coastguard Worker }; 54*0e209d39SAndroid Build Coastguard Worker #endif 55*0e209d39SAndroid Build Coastguard Worker 56*0e209d39SAndroid Build Coastguard Worker enum{ 57*0e209d39SAndroid Build Coastguard Worker _SPREP_NORMALIZATION_ON = 0x0001, 58*0e209d39SAndroid Build Coastguard Worker _SPREP_CHECK_BIDI_ON = 0x0002 59*0e209d39SAndroid Build Coastguard Worker }; 60*0e209d39SAndroid Build Coastguard Worker 61*0e209d39SAndroid Build Coastguard Worker enum{ 62*0e209d39SAndroid Build Coastguard Worker _SPREP_TYPE_THRESHOLD = 0xFFF0, 63*0e209d39SAndroid Build Coastguard Worker _SPREP_MAX_INDEX_VALUE = 0x3FBF, /*16139*/ 64*0e209d39SAndroid Build Coastguard Worker _SPREP_MAX_INDEX_TOP_LENGTH = 0x0003 65*0e209d39SAndroid Build Coastguard Worker }; 66*0e209d39SAndroid Build Coastguard Worker 67*0e209d39SAndroid Build Coastguard Worker /* indexes[] value names */ 68*0e209d39SAndroid Build Coastguard Worker enum { 69*0e209d39SAndroid Build Coastguard Worker _SPREP_INDEX_TRIE_SIZE = 0, /* number of bytes in StringPrep trie */ 70*0e209d39SAndroid Build Coastguard Worker _SPREP_INDEX_MAPPING_DATA_SIZE = 1, /* The array that contains the mapping */ 71*0e209d39SAndroid Build Coastguard Worker _SPREP_NORM_CORRECTNS_LAST_UNI_VERSION = 2, /* The index of Unicode version of last entry in NormalizationCorrections.txt */ 72*0e209d39SAndroid Build Coastguard Worker _SPREP_ONE_UCHAR_MAPPING_INDEX_START = 3, /* The starting index of 1 UChar mapping index in the mapping data array */ 73*0e209d39SAndroid Build Coastguard Worker _SPREP_TWO_UCHARS_MAPPING_INDEX_START = 4, /* The starting index of 2 UChars mapping index in the mapping data array */ 74*0e209d39SAndroid Build Coastguard Worker _SPREP_THREE_UCHARS_MAPPING_INDEX_START = 5, /* The starting index of 3 UChars mapping index in the mapping data array */ 75*0e209d39SAndroid Build Coastguard Worker _SPREP_FOUR_UCHARS_MAPPING_INDEX_START = 6, /* The starting index of 4 UChars mapping index in the mapping data array */ 76*0e209d39SAndroid Build Coastguard Worker _SPREP_OPTIONS = 7, /* Bit set of options to turn on in the profile */ 77*0e209d39SAndroid Build Coastguard Worker _SPREP_INDEX_TOP=16 /* changing this requires a new formatVersion */ 78*0e209d39SAndroid Build Coastguard Worker }; 79*0e209d39SAndroid Build Coastguard Worker 80*0e209d39SAndroid Build Coastguard Worker typedef struct UStringPrepKey UStringPrepKey; 81*0e209d39SAndroid Build Coastguard Worker 82*0e209d39SAndroid Build Coastguard Worker 83*0e209d39SAndroid Build Coastguard Worker struct UStringPrepKey{ 84*0e209d39SAndroid Build Coastguard Worker char* name; 85*0e209d39SAndroid Build Coastguard Worker char* path; 86*0e209d39SAndroid Build Coastguard Worker }; 87*0e209d39SAndroid Build Coastguard Worker 88*0e209d39SAndroid Build Coastguard Worker struct UStringPrepProfile{ 89*0e209d39SAndroid Build Coastguard Worker int32_t indexes[_SPREP_INDEX_TOP]; 90*0e209d39SAndroid Build Coastguard Worker UTrie sprepTrie; 91*0e209d39SAndroid Build Coastguard Worker const uint16_t* mappingData; 92*0e209d39SAndroid Build Coastguard Worker UDataMemory* sprepData; 93*0e209d39SAndroid Build Coastguard Worker int32_t refCount; 94*0e209d39SAndroid Build Coastguard Worker UBool isDataLoaded; 95*0e209d39SAndroid Build Coastguard Worker UBool doNFKC; 96*0e209d39SAndroid Build Coastguard Worker UBool checkBiDi; 97*0e209d39SAndroid Build Coastguard Worker }; 98*0e209d39SAndroid Build Coastguard Worker 99*0e209d39SAndroid Build Coastguard Worker /** 100*0e209d39SAndroid Build Coastguard Worker * Helper function for populating the UParseError struct 101*0e209d39SAndroid Build Coastguard Worker * @internal 102*0e209d39SAndroid Build Coastguard Worker */ 103*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2 104*0e209d39SAndroid Build Coastguard Worker uprv_syntaxError(const UChar* rules, 105*0e209d39SAndroid Build Coastguard Worker int32_t pos, 106*0e209d39SAndroid Build Coastguard Worker int32_t rulesLen, 107*0e209d39SAndroid Build Coastguard Worker UParseError* parseError); 108*0e209d39SAndroid Build Coastguard Worker 109*0e209d39SAndroid Build Coastguard Worker 110*0e209d39SAndroid Build Coastguard Worker /** 111*0e209d39SAndroid Build Coastguard Worker * Swap StringPrep .spp profile data. See udataswp.h. 112*0e209d39SAndroid Build Coastguard Worker * @internal 113*0e209d39SAndroid Build Coastguard Worker */ 114*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2 115*0e209d39SAndroid Build Coastguard Worker usprep_swap(const UDataSwapper *ds, 116*0e209d39SAndroid Build Coastguard Worker const void *inData, int32_t length, void *outData, 117*0e209d39SAndroid Build Coastguard Worker UErrorCode *pErrorCode); 118*0e209d39SAndroid Build Coastguard Worker 119*0e209d39SAndroid Build Coastguard Worker #endif /* #if !UCONFIG_NO_IDNA */ 120*0e209d39SAndroid Build Coastguard Worker 121*0e209d39SAndroid Build Coastguard Worker #endif 122*0e209d39SAndroid Build Coastguard Worker 123*0e209d39SAndroid Build Coastguard Worker /* 124*0e209d39SAndroid Build Coastguard Worker * Hey, Emacs, please set the following: 125*0e209d39SAndroid Build Coastguard Worker * 126*0e209d39SAndroid Build Coastguard Worker * Local Variables: 127*0e209d39SAndroid Build Coastguard Worker * indent-tabs-mode: nil 128*0e209d39SAndroid Build Coastguard Worker * End: 129*0e209d39SAndroid Build Coastguard Worker * 130*0e209d39SAndroid Build Coastguard Worker */ 131