]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/i18n/ucol_elm.h
ICU-400.37.tar.gz
[apple/icu.git] / icuSources / i18n / ucol_elm.h
index 5e980e2645d273d40219f8cc76b7c2d8d861819b..3f78003febf7f3c0e2606b757d627583a2f22783 100644 (file)
@@ -1,7 +1,7 @@
 /*
 *******************************************************************************
 *
-*   Copyright (C) 2000-2005, International Business Machines
+*   Copyright (C) 2000-2008, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *
 *******************************************************************************
 #define UCOL_UCAELEMS_H
 
 #include "unicode/utypes.h"
+#include "ucol_tok.h"
 
 #if !UCONFIG_NO_COLLATION
 
-#include "ucol_cnt.h"
 #include "ucol_imp.h"
 
 #ifdef UCOL_DEBUG
 
 U_CDECL_BEGIN
 
+/* This is the maximum trie capacity for the mapping trie.
+Due to current limitations in genuca and the design of UTrie,
+this number can't be more than 256K.
+As of Unicode 5, it currently could safely go to 128K without
+a problem. Normally, less than 32K are tailored.
+*/
+#define UCOL_ELM_TRIE_CAPACITY 0x40000
+
+/* This is the maxmun capacity for temparay combining class 
+ * table.  The table will be compacted after scanning all the
+ * Unicode codepoints.
+*/
+#define UCOL_MAX_CM_TAB  0x10000
+
+
 typedef struct {
     uint32_t *CEs;
     int32_t position;
@@ -76,6 +91,12 @@ typedef struct {
   int32_t   size;
 } MaxExpansionTable;
 
+typedef struct {
+    uint16_t   index[256];  /* index of cPoints by combining class 0-255. */
+    UChar      *cPoints;    /* code point array of all combining marks */
+    uint32_t   size;        /* total number of combining marks */
+} CombinClassTable;
+
 typedef struct {
   /*CompactEIntArray      *mapping; */
   UNewTrie                 *mapping; 
@@ -89,19 +110,31 @@ typedef struct {
   uint8_t               *contrEndCP;
   const UCollator       *UCA;
   UHashtable      *prefixLookup;
+  CombinClassTable      *cmLookup;  /* combining class lookup for tailoring. */
 } tempUCATable; 
 
+typedef struct {
+    UChar cp;
+    uint16_t cClass;   // combining class
+}CompData;
+
+typedef struct {
+    CompData *precomp;
+    int32_t precompLen;
+    UChar *decomp;
+    int32_t decompLen;
+    UChar *comp;
+    int32_t compLen;
+    uint16_t curClass;
+    uint16_t tailoringCM;
+    int32_t  cmPos;
+}tempTailorContext;
+
 U_CAPI tempUCATable * U_EXPORT2 uprv_uca_initTempTable(UCATableHeader *image, UColOptionSet *opts, const UCollator *UCA, UColCETags initTag, UColCETags supplementaryInitTag, UErrorCode *status);
-U_CAPI tempUCATable * U_EXPORT2 uprv_uca_cloneTempTable(tempUCATable *t, UErrorCode *status);
 U_CAPI void U_EXPORT2 uprv_uca_closeTempTable(tempUCATable *t);
 U_CAPI uint32_t U_EXPORT2 uprv_uca_addAnElement(tempUCATable *t, UCAElements *element, UErrorCode *status);
 U_CAPI UCATableHeader * U_EXPORT2 uprv_uca_assembleTable(tempUCATable *t, UErrorCode *status);
-U_CAPI int32_t U_EXPORT2
-uprv_uca_canonicalClosure(tempUCATable *t, UErrorCode *status);
-
-
-#define paddedsize(something) ((something)+((((something)%4)!=0)?(4-(something)%4):0))
-#define headersize (paddedsize(sizeof(UCATableHeader))+paddedsize(sizeof(UColOptionSet)))
+U_CAPI int32_t U_EXPORT2 uprv_uca_canonicalClosure(tempUCATable *t, UColTokenParser *src, UErrorCode *status);
 
 U_CDECL_END