Index: icu46/source/i18n/ucol_tok.h |
=================================================================== |
--- icu46/source/i18n/ucol_tok.h (revision 0) |
+++ icu46/source/i18n/ucol_tok.h (revision 0) |
@@ -0,0 +1,211 @@ |
+/* |
+******************************************************************************* |
+* |
+* Copyright (C) 2001-2010, International Business Machines |
+* Corporation and others. All Rights Reserved. |
+* |
+******************************************************************************* |
+* file name: ucol_tok.h |
+* encoding: US-ASCII |
+* tab size: 8 (not used) |
+* indentation:4 |
+* |
+* created 02/22/2001 |
+* created by: Vladimir Weinstein |
+* |
+* This module reads a tailoring rule string and produces a list of |
+* tokens that will be turned into collation elements |
+* |
+*/ |
+ |
+#ifndef UCOL_TOKENS_H |
+#define UCOL_TOKENS_H |
+ |
+#include "unicode/utypes.h" |
+#include "unicode/uset.h" |
+ |
+#if !UCONFIG_NO_COLLATION |
+ |
+#include "ucol_imp.h" |
+#include "uhash.h" |
+#include "unicode/parseerr.h" |
+ |
+#define UCOL_TOK_UNSET 0xFFFFFFFF |
+#define UCOL_TOK_RESET 0xDEADBEEF |
+ |
+#define UCOL_TOK_POLARITY_NEGATIVE 0 |
+#define UCOL_TOK_POLARITY_POSITIVE 1 |
+ |
+#define UCOL_TOK_TOP 0x04 |
+#define UCOL_TOK_VARIABLE_TOP 0x08 |
+#define UCOL_TOK_BEFORE 0x03 |
+#define UCOL_TOK_SUCCESS 0x10 |
+ |
+/* this is space for the extra strings that need to be unquoted */ |
+/* during the parsing of the rules */ |
+#define UCOL_TOK_EXTRA_RULE_SPACE_SIZE 4096 |
+typedef struct UColToken UColToken; |
+ |
+typedef struct { |
+ UColToken* first; |
+ UColToken* last; |
+ UColToken* reset; |
+ UBool indirect; |
+ uint32_t baseCE; |
+ uint32_t baseContCE; |
+ uint32_t nextCE; |
+ uint32_t nextContCE; |
+ uint32_t previousCE; |
+ uint32_t previousContCE; |
+ int32_t pos[UCOL_STRENGTH_LIMIT]; |
+ uint32_t gapsLo[3*UCOL_CE_STRENGTH_LIMIT]; |
+ uint32_t gapsHi[3*UCOL_CE_STRENGTH_LIMIT]; |
+ uint32_t numStr[UCOL_CE_STRENGTH_LIMIT]; |
+ UColToken* fStrToken[UCOL_CE_STRENGTH_LIMIT]; |
+ UColToken* lStrToken[UCOL_CE_STRENGTH_LIMIT]; |
+} UColTokListHeader; |
+ |
+struct UColToken { |
+ UChar debugSource; |
+ UChar debugExpansion; |
+ UChar debugPrefix; |
+ uint32_t CEs[128]; |
+ uint32_t noOfCEs; |
+ uint32_t expCEs[128]; |
+ uint32_t noOfExpCEs; |
+ uint32_t source; |
+ uint32_t expansion; |
+ uint32_t prefix; |
+ uint32_t strength; |
+ uint32_t toInsert; |
+ uint32_t polarity; /* 1 for <, <<, <<<, , ; and -1 for >, >>, >>> */ |
+ UColTokListHeader *listHeader; |
+ UColToken* previous; |
+ UColToken* next; |
+ UChar **rulesToParseHdl; |
+ uint16_t flags; |
+}; |
+ |
+/* |
+ * This is a token that has been parsed |
+ * but not yet processed. Used to reduce |
+ * the number of arguments in the parser |
+ */ |
+typedef struct { |
+ uint32_t strength; |
+ uint32_t charsOffset; |
+ uint32_t charsLen; |
+ uint32_t extensionOffset; |
+ uint32_t extensionLen; |
+ uint32_t prefixOffset; |
+ uint32_t prefixLen; |
+ uint16_t flags; |
+ uint16_t indirectIndex; |
+} UColParsedToken; |
+ |
+ |
+typedef struct { |
+ UColParsedToken parsedToken; |
+ UChar *source; |
+ UChar *end; |
+ const UChar *current; |
+ UChar *sourceCurrent; |
+ UChar *extraCurrent; |
+ UChar *extraEnd; |
+ const InverseUCATableHeader *invUCA; |
+ const UCollator *UCA; |
+ UHashtable *tailored; |
+ UColOptionSet *opts; |
+ uint32_t resultLen; |
+ uint32_t listCapacity; |
+ UColTokListHeader *lh; |
+ UColToken *varTop; |
+ USet *copySet; |
+ USet *removeSet; |
+ UBool buildCCTabFlag; /* Tailoring rule requirs building combining class table. */ |
+ |
+ UChar32 previousCp; /* Previous code point. */ |
+ /* For processing starred lists. */ |
+ UBool isStarred; /* Are we processing a starred token? */ |
+ UBool savedIsStarred; |
+ uint32_t currentStarredCharIndex; /* Index of the current charrecter in the starred expression. */ |
+ uint32_t lastStarredCharIndex; /* Index to the last character in the starred expression. */ |
+ |
+ /* For processing ranges. */ |
+ UBool inRange; /* Are we in a range? */ |
+ UChar32 currentRangeCp; /* Current code point in the range. */ |
+ UChar32 lastRangeCp; /* The last code point in the range. */ |
+ |
+ /* reorder codes for collation reordering */ |
+ int32_t* reorderCodes; |
+ int32_t reorderCodesLength; |
+ |
+} UColTokenParser; |
+ |
+typedef struct { |
+ const UChar *subName; |
+ int32_t subLen; |
+ UColAttributeValue attrVal; |
+} ucolTokSuboption; |
+ |
+typedef struct { |
+ const UChar *optionName; |
+ int32_t optionLen; |
+ const ucolTokSuboption *subopts; |
+ int32_t subSize; |
+ UColAttribute attr; |
+} ucolTokOption; |
+ |
+#define ucol_tok_isSpecialChar(ch) \ |
+ (((((ch) <= 0x002F) && ((ch) >= 0x0020)) || \ |
+ (((ch) <= 0x003F) && ((ch) >= 0x003A)) || \ |
+ (((ch) <= 0x0060) && ((ch) >= 0x005B)) || \ |
+ (((ch) <= 0x007E) && ((ch) >= 0x007D)) || \ |
+ (ch) == 0x007B)) |
+ |
+ |
+U_CFUNC |
+uint32_t ucol_tok_assembleTokenList(UColTokenParser *src, |
+ UParseError *parseError, |
+ UErrorCode *status); |
+ |
+U_CFUNC |
+void ucol_tok_initTokenList(UColTokenParser *src, |
+ const UChar *rules, |
+ const uint32_t rulesLength, |
+ const UCollator *UCA, |
+ GetCollationRulesFunction importFunc, |
+ void* context, |
+ UErrorCode *status); |
+ |
+U_CFUNC void ucol_tok_closeTokenList(UColTokenParser *src); |
+ |
+U_CAPI const UChar* U_EXPORT2 ucol_tok_parseNextToken(UColTokenParser *src, |
+ UBool startOfRules, |
+ UParseError *parseError, |
+ UErrorCode *status); |
+ |
+ |
+U_CAPI const UChar * U_EXPORT2 |
+ucol_tok_getNextArgument(const UChar *start, const UChar *end, |
+ UColAttribute *attrib, UColAttributeValue *value, |
+ UErrorCode *status); |
+U_CAPI int32_t U_EXPORT2 ucol_inv_getNextCE(const UColTokenParser *src, |
+ uint32_t CE, uint32_t contCE, |
+ uint32_t *nextCE, uint32_t *nextContCE, |
+ uint32_t strength); |
+U_CFUNC int32_t U_EXPORT2 ucol_inv_getPrevCE(const UColTokenParser *src, |
+ uint32_t CE, uint32_t contCE, |
+ uint32_t *prevCE, uint32_t *prevContCE, |
+ uint32_t strength); |
+ |
+U_CFUNC const UChar* ucol_tok_getRulesFromBundle( |
+ void* context, |
+ const char* locale, |
+ const char* type, |
+ int32_t* pLength, |
+ UErrorCode* status); |
+ |
+#endif /* #if !UCONFIG_NO_COLLATION */ |
+ |
+#endif |
Property changes on: icu46/source/i18n/ucol_tok.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |