1 /* 2 ******************************************************************************* 3 * 4 * Copyright (C) 2001-2008, International Business Machines 5 * Corporation and others. All Rights Reserved. 6 * 7 ******************************************************************************* 8 * file name: ucol_tok.cpp 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 module maintains a contraction table structure in expanded form 17 * and provides means to flatten this structure 18 * 19 */ 20 21 #ifndef UCOL_CNTTABLE_H 22 #define UCOL_CNTTABLE_H 23 24 #include "unicode/utypes.h" 25 26 #if !UCONFIG_NO_COLLATION 27 28 #include "utrie.h" 29 #include "ucol_imp.h" 30 31 U_CDECL_BEGIN 32 33 #define UPRV_CNTTAB_NEWELEMENT 0xFFFFFF 34 35 #define isCntTableElement(CE) (isSpecial((CE)) && \ 36 ((getCETag((CE)) == CONTRACTION_TAG)||(getCETag((CE)) == SPEC_PROC_TAG))) 37 38 typedef struct ContractionTable ContractionTable; 39 struct ContractionTable { 40 UChar *codePoints; 41 uint32_t *CEs; 42 uint32_t position; 43 uint32_t size; 44 }; 45 46 struct CntTable { 47 ContractionTable **elements; 48 /*CompactEIntArray *mapping;*/ 49 UNewTrie *mapping; 50 UChar *codePoints; 51 uint32_t *CEs; 52 int32_t *offsets; 53 int32_t position; 54 int32_t size; 55 int32_t capacity; 56 UColCETags currentTag; 57 }; 58 59 U_CAPI CntTable* U_EXPORT2 60 /*uprv_cnttab_open(CompactEIntArray *mapping, UErrorCode *status);*/ 61 uprv_cnttab_open(UNewTrie *mapping, UErrorCode *status); 62 U_CAPI CntTable* U_EXPORT2 63 uprv_cnttab_clone(CntTable *table, UErrorCode *status); 64 U_CAPI void U_EXPORT2 65 uprv_cnttab_close(CntTable *table); 66 67 /* construct the table for output */ 68 U_CAPI int32_t U_EXPORT2 69 uprv_cnttab_constructTable(CntTable *table, uint32_t mainOffset, UErrorCode *status); 70 /* adds more contractions in table. If element is non existant, it creates on. Returns element handle */ 71 U_CAPI uint32_t U_EXPORT2 72 uprv_cnttab_addContraction(CntTable *table, uint32_t element, UChar codePoint, uint32_t value, UErrorCode *status); 73 /* sets a part of contraction sequence in table. If element is non existant, it creates on. Returns element handle */ 74 U_CAPI uint32_t U_EXPORT2 75 uprv_cnttab_setContraction(CntTable *table, uint32_t element, uint32_t offset, UChar codePoint, uint32_t value, UErrorCode *status); 76 /* inserts a part of contraction sequence in table. Sequences behind the offset are moved back. If element is non existant, it creates on. Returns element handle */ 77 U_CAPI uint32_t U_EXPORT2 78 uprv_cnttab_insertContraction(CntTable *table, uint32_t element, UChar codePoint, uint32_t value, UErrorCode *status); 79 /* this is for adding non contractions */ 80 U_CAPI uint32_t U_EXPORT2 81 uprv_cnttab_changeLastCE(CntTable *table, uint32_t element, uint32_t value, UErrorCode *status); 82 83 U_CAPI int32_t U_EXPORT2 84 uprv_cnttab_findCP(CntTable *table, uint32_t element, UChar codePoint, UErrorCode *status); 85 86 U_CAPI uint32_t U_EXPORT2 87 uprv_cnttab_getCE(CntTable *table, uint32_t element, uint32_t position, UErrorCode *status); 88 89 U_CAPI uint32_t U_EXPORT2 90 uprv_cnttab_changeContraction(CntTable *table, uint32_t element, UChar codePoint, uint32_t newCE, UErrorCode *status); 91 92 U_CAPI uint32_t U_EXPORT2 93 uprv_cnttab_findCE(CntTable *table, uint32_t element, UChar codePoint, UErrorCode *status); 94 95 U_CAPI UBool U_EXPORT2 96 uprv_cnttab_isTailored(CntTable *table, uint32_t element, UChar *ztString, UErrorCode *status); 97 98 U_CDECL_END 99 100 #endif /* #if !UCONFIG_NO_COLLATION */ 101 102 #endif 103