| OLD | NEW |
| (Empty) |
| 1 /* | |
| 2 ******************************************************************************* | |
| 3 * | |
| 4 * Copyright (C) 2000-2011, International Business Machines | |
| 5 * Corporation and others. All Rights Reserved. | |
| 6 * | |
| 7 ******************************************************************************* | |
| 8 * file name: ucol_elm.h | |
| 9 * encoding: US-ASCII | |
| 10 * tab size: 8 (not used) | |
| 11 * indentation:4 | |
| 12 * | |
| 13 * created 02/22/2001 | |
| 14 * created by: Vladimir Weinstein | |
| 15 * | |
| 16 * This program reads the Franctional UCA table and generates | |
| 17 * internal format for UCA table as well as inverse UCA table. | |
| 18 * It then writes binary files containing the data: ucadata.dat | |
| 19 * & invuca.dat | |
| 20 */ | |
| 21 #ifndef UCOL_UCAELEMS_H | |
| 22 #define UCOL_UCAELEMS_H | |
| 23 | |
| 24 #include "unicode/utypes.h" | |
| 25 #include "unicode/uniset.h" | |
| 26 #include "ucol_tok.h" | |
| 27 | |
| 28 #if !UCONFIG_NO_COLLATION | |
| 29 | |
| 30 #include "ucol_imp.h" | |
| 31 | |
| 32 #ifdef UCOL_DEBUG | |
| 33 #include "cmemory.h" | |
| 34 #include <stdio.h> | |
| 35 #endif | |
| 36 | |
| 37 U_CDECL_BEGIN | |
| 38 | |
| 39 /* This is the maximum trie capacity for the mapping trie. | |
| 40 Due to current limitations in genuca and the design of UTrie, | |
| 41 this number can't be more than 256K. | |
| 42 As of Unicode 5, it currently could safely go to 128K without | |
| 43 a problem. Normally, less than 32K are tailored. | |
| 44 */ | |
| 45 #define UCOL_ELM_TRIE_CAPACITY 0x40000 | |
| 46 | |
| 47 /* This is the maxmun capacity for temparay combining class | |
| 48 * table. The table will be compacted after scanning all the | |
| 49 * Unicode codepoints. | |
| 50 */ | |
| 51 #define UCOL_MAX_CM_TAB 0x10000 | |
| 52 | |
| 53 | |
| 54 typedef struct { | |
| 55 uint32_t *CEs; | |
| 56 int32_t position; | |
| 57 int32_t size; | |
| 58 } ExpansionTable; | |
| 59 | |
| 60 typedef struct { | |
| 61 UChar prefixChars[128]; | |
| 62 UChar *prefix; | |
| 63 uint32_t prefixSize; | |
| 64 UChar uchars[128]; | |
| 65 UChar *cPoints; | |
| 66 uint32_t cSize; /* Number of characters in sequence - for contracti
on */ | |
| 67 uint32_t noOfCEs; /* Number of collation elements
*/ | |
| 68 uint32_t CEs[128]; /* These are collation elements - there could be mor
e than one - in case of expansion */ | |
| 69 uint32_t mapCE; /* This is the value element maps in original table
*/ | |
| 70 uint32_t sizePrim[128]; | |
| 71 uint32_t sizeSec[128]; | |
| 72 uint32_t sizeTer[128]; | |
| 73 UBool caseBit; | |
| 74 UBool isThai; | |
| 75 } UCAElements; | |
| 76 | |
| 77 typedef struct { | |
| 78 uint32_t *endExpansionCE; | |
| 79 UBool *isV; | |
| 80 int32_t position; | |
| 81 int32_t size; | |
| 82 uint8_t maxLSize; | |
| 83 uint8_t maxVSize; | |
| 84 uint8_t maxTSize; | |
| 85 } MaxJamoExpansionTable; | |
| 86 | |
| 87 typedef struct { | |
| 88 uint32_t *endExpansionCE; | |
| 89 uint8_t *expansionCESize; | |
| 90 int32_t position; | |
| 91 int32_t size; | |
| 92 } MaxExpansionTable; | |
| 93 | |
| 94 typedef struct { | |
| 95 uint16_t index[256]; /* index of cPoints by combining class 0-255. */ | |
| 96 UChar *cPoints; /* code point array of all combining marks */ | |
| 97 uint32_t size; /* total number of combining marks */ | |
| 98 } CombinClassTable; | |
| 99 | |
| 100 typedef struct { | |
| 101 /*CompactEIntArray *mapping; */ | |
| 102 UNewTrie *mapping; | |
| 103 ExpansionTable *expansions; | |
| 104 struct CntTable *contractions; | |
| 105 UCATableHeader *image; | |
| 106 UColOptionSet *options; | |
| 107 MaxExpansionTable *maxExpansions; | |
| 108 MaxJamoExpansionTable *maxJamoExpansions; | |
| 109 uint8_t *unsafeCP; | |
| 110 uint8_t *contrEndCP; | |
| 111 const UCollator *UCA; | |
| 112 UHashtable *prefixLookup; | |
| 113 CombinClassTable *cmLookup; /* combining class lookup for tailoring. */ | |
| 114 } tempUCATable; | |
| 115 | |
| 116 typedef struct { | |
| 117 UChar cp; | |
| 118 uint16_t cClass; // combining class | |
| 119 }CompData; | |
| 120 | |
| 121 typedef struct { | |
| 122 CompData *precomp; | |
| 123 int32_t precompLen; | |
| 124 UChar *decomp; | |
| 125 int32_t decompLen; | |
| 126 UChar *comp; | |
| 127 int32_t compLen; | |
| 128 uint16_t curClass; | |
| 129 uint16_t tailoringCM; | |
| 130 int32_t cmPos; | |
| 131 }tempTailorContext; | |
| 132 | |
| 133 U_CAPI tempUCATable * U_EXPORT2 uprv_uca_initTempTable(UCATableHeader *image, UC
olOptionSet *opts, const UCollator *UCA, UColCETags initTag, UColCETags suppleme
ntaryInitTag, UErrorCode *status); | |
| 134 U_CAPI void U_EXPORT2 uprv_uca_closeTempTable(tempUCATable *t); | |
| 135 U_CAPI uint32_t U_EXPORT2 uprv_uca_addAnElement(tempUCATable *t, UCAElements *el
ement, UErrorCode *status); | |
| 136 U_CAPI UCATableHeader * U_EXPORT2 uprv_uca_assembleTable(tempUCATable *t, UError
Code *status); | |
| 137 | |
| 138 U_CAPI int32_t U_EXPORT2 | |
| 139 uprv_uca_canonicalClosure(tempUCATable *t, UColTokenParser *src, | |
| 140 icu::UnicodeSet *closed, UErrorCode *status); | |
| 141 | |
| 142 U_CDECL_END | |
| 143 | |
| 144 #endif /* #if !UCONFIG_NO_COLLATION */ | |
| 145 | |
| 146 #endif | |
| OLD | NEW |