16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*******************************************************************************
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Copyright (C) 2001-2011, International Business Machines
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Corporation and others.  All Rights Reserved.
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*******************************************************************************
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   file name:  ucol_tok.h
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   encoding:   US-ASCII
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   tab size:   8 (not used)
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   indentation:4
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   created 02/22/2001
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   created by: Vladimir Weinstein
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* This module reads a tailoring rule string and produces a list of
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* tokens that will be turned into collation elements
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef UCOL_TOKENS_H
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UCOL_TOKENS_H
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h"
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uset.h"
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_COLLATION
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "ucol_imp.h"
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "uhash.h"
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/parseerr.h"
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UCOL_TOK_UNSET 0xFFFFFFFF
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UCOL_TOK_RESET 0xDEADBEEF
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UCOL_TOK_POLARITY_NEGATIVE 0
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UCOL_TOK_POLARITY_POSITIVE 1
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UCOL_TOK_TOP 0x04
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UCOL_TOK_VARIABLE_TOP 0x08
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UCOL_TOK_BEFORE 0x03
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UCOL_TOK_SUCCESS 0x10
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* this is space for the extra strings that need to be unquoted */
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* during the parsing of the rules */
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UCOL_TOK_EXTRA_RULE_SPACE_SIZE 4096
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct UColToken UColToken;
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct  {
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UColToken* first;
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UColToken* last;
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UColToken* reset;
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UBool indirect;
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t baseCE;
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t baseContCE;
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t nextCE;
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t nextContCE;
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t previousCE;
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t previousContCE;
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  int32_t pos[UCOL_STRENGTH_LIMIT];
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t gapsLo[3*UCOL_CE_STRENGTH_LIMIT];
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t gapsHi[3*UCOL_CE_STRENGTH_LIMIT];
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t numStr[UCOL_CE_STRENGTH_LIMIT];
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UColToken* fStrToken[UCOL_CE_STRENGTH_LIMIT];
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UColToken* lStrToken[UCOL_CE_STRENGTH_LIMIT];
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} UColTokListHeader;
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstruct UColToken {
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UChar debugSource;
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UChar debugExpansion;
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UChar debugPrefix;
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t CEs[128];
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t noOfCEs;
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t expCEs[128];
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t noOfExpCEs;
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t source;
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t expansion;
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t prefix;
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t strength;
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t toInsert;
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t polarity; /* 1 for <, <<, <<<, , ; and -1 for >, >>, >>> */
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UColTokListHeader *listHeader;
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UColToken* previous;
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UColToken* next;
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UChar **rulesToParseHdl;
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint16_t flags;
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is a token that has been parsed
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * but not yet processed. Used to reduce
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the number of arguments in the parser
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct {
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t strength;
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t charsOffset;
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t charsLen;
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t extensionOffset;
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t extensionLen;
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t prefixOffset;
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t prefixLen;
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint16_t flags;
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint16_t indirectIndex;
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} UColParsedToken;
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct {
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UColParsedToken parsedToken;
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UChar *source;
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UChar *end;
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  const UChar *current;
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UChar *sourceCurrent;
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UChar *extraCurrent;
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UChar *extraEnd;
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  const InverseUCATableHeader *invUCA;
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  const UCollator *UCA;
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UHashtable *tailored;
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UColOptionSet *opts;
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t resultLen;
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t listCapacity;
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UColTokListHeader *lh;
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UColToken *varTop;
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  USet *copySet;
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  USet *removeSet;
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UBool buildCCTabFlag;  /* Tailoring rule requirs building combining class table. */
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UChar32 previousCp;               /* Previous code point. */
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /* For processing starred lists. */
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UBool isStarred;                   /* Are we processing a starred token? */
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UBool savedIsStarred;
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t currentStarredCharIndex;  /* Index of the current charrecter in the starred expression. */
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  uint32_t lastStarredCharIndex;    /* Index to the last character in the starred expression. */
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /* For processing ranges. */
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UBool inRange;                     /* Are we in a range? */
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UChar32 currentRangeCp;           /* Current code point in the range. */
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UChar32 lastRangeCp;              /* The last code point in the range. */
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /* reorder codes for collation reordering */
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  int32_t* reorderCodes;
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  int32_t reorderCodesLength;
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} UColTokenParser;
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct {
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  const UChar *subName;
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  int32_t subLen;
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UColAttributeValue attrVal;
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} ucolTokSuboption;
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct {
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   const UChar *optionName;
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   int32_t optionLen;
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   const ucolTokSuboption *subopts;
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   int32_t subSize;
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   UColAttribute attr;
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} ucolTokOption;
1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define ucol_tok_isSpecialChar(ch)              \
1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    (((((ch) <= 0x002F) && ((ch) >= 0x0020)) || \
1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      (((ch) <= 0x003F) && ((ch) >= 0x003A)) || \
1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      (((ch) <= 0x0060) && ((ch) >= 0x005B)) || \
1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      (((ch) <= 0x007E) && ((ch) >= 0x007D)) || \
1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      (ch) == 0x007B))
1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CFUNC
1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orguint32_t ucol_tok_assembleTokenList(UColTokenParser *src,
1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                    UParseError *parseError,
1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                    UErrorCode *status);
1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CFUNC
1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ucol_tok_initTokenList(UColTokenParser *src,
1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            const UChar *rules,
1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            const uint32_t rulesLength,
1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            const UCollator *UCA,
1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            GetCollationRulesFunction importFunc,
1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            void* context,
1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            UErrorCode *status);
1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CFUNC void ucol_tok_closeTokenList(UColTokenParser *src);
1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI const UChar* U_EXPORT2 ucol_tok_parseNextToken(UColTokenParser *src,
1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        UBool startOfRules,
1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        UParseError *parseError,
1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        UErrorCode *status);
1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI const UChar * U_EXPORT2
1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgucol_tok_getNextArgument(const UChar *start, const UChar *end,
1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                               UColAttribute *attrib, UColAttributeValue *value,
1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                               UErrorCode *status);
1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int32_t U_EXPORT2 ucol_inv_getNextCE(const UColTokenParser *src,
1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                            uint32_t CE, uint32_t contCE,
1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                            uint32_t *nextCE, uint32_t *nextContCE,
1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                            uint32_t strength);
1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CFUNC int32_t U_EXPORT2 ucol_inv_getPrevCE(const UColTokenParser *src,
1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                            uint32_t CE, uint32_t contCE,
1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                            uint32_t *prevCE, uint32_t *prevContCE,
2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                            uint32_t strength);
2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgconst UChar* U_CALLCONV ucol_tok_getRulesFromBundle(
2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void* context,
2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const char* locale,
2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const char* type,
2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t* pLength,
2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode* status);
2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_COLLATION */
2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
212