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