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 31U_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 38typedef struct ContractionTable ContractionTable; 39struct ContractionTable { 40 UChar *codePoints; 41 uint32_t *CEs; 42 uint32_t position; 43 uint32_t size; 44}; 45 46struct 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 59U_CAPI CntTable* U_EXPORT2 60/*uprv_cnttab_open(CompactEIntArray *mapping, UErrorCode *status);*/ 61uprv_cnttab_open(UNewTrie *mapping, UErrorCode *status); 62U_CAPI CntTable* U_EXPORT2 63uprv_cnttab_clone(CntTable *table, UErrorCode *status); 64U_CAPI void U_EXPORT2 65uprv_cnttab_close(CntTable *table); 66 67/* construct the table for output */ 68U_CAPI int32_t U_EXPORT2 69uprv_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 */ 71U_CAPI uint32_t U_EXPORT2 72uprv_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 */ 74U_CAPI uint32_t U_EXPORT2 75uprv_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 */ 77U_CAPI uint32_t U_EXPORT2 78uprv_cnttab_insertContraction(CntTable *table, uint32_t element, UChar codePoint, uint32_t value, UErrorCode *status); 79/* this is for adding non contractions */ 80U_CAPI uint32_t U_EXPORT2 81uprv_cnttab_changeLastCE(CntTable *table, uint32_t element, uint32_t value, UErrorCode *status); 82 83U_CAPI int32_t U_EXPORT2 84uprv_cnttab_findCP(CntTable *table, uint32_t element, UChar codePoint, UErrorCode *status); 85 86U_CAPI uint32_t U_EXPORT2 87uprv_cnttab_getCE(CntTable *table, uint32_t element, uint32_t position, UErrorCode *status); 88 89U_CAPI uint32_t U_EXPORT2 90uprv_cnttab_changeContraction(CntTable *table, uint32_t element, UChar codePoint, uint32_t newCE, UErrorCode *status); 91 92U_CAPI uint32_t U_EXPORT2 93uprv_cnttab_findCE(CntTable *table, uint32_t element, UChar codePoint, UErrorCode *status); 94 95U_CAPI UBool U_EXPORT2 96uprv_cnttab_isTailored(CntTable *table, uint32_t element, UChar *ztString, UErrorCode *status); 97 98U_CDECL_END 99 100#endif /* #if !UCONFIG_NO_COLLATION */ 101 102#endif 103