intl/icu/source/i18n/dtptngen_impl.h

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /*
     2 *******************************************************************************
     3 * Copyright (C) 2007-2013, International Business Machines Corporation and
     4 * others. All Rights Reserved.                                                *
     5 *******************************************************************************
     6 *
     7 * File DTPTNGEN.H
     8 *
     9 *******************************************************************************
    10 */
    12 #include "uvector.h"
    14 #ifndef __DTPTNGEN_IMPL_H__
    15 #define __DTPTNGEN_IMPL_H__
    17 // TODO(claireho): Split off Builder class.
    18 // TODO(claireho): If splitting off Builder class: As subclass or independent?
    20 #define MAX_PATTERN_ENTRIES 52
    21 #define MAX_CLDR_FIELD_LEN  60
    22 #define MAX_DT_TOKEN        50
    23 #define MAX_RESOURCE_FIELD  12
    24 #define MAX_AVAILABLE_FORMATS  12
    25 #define NONE          0
    26 #define EXTRA_FIELD   0x10000
    27 #define MISSING_FIELD  0x1000
    28 #define MAX_STRING_ENUMERATION  200
    29 #define SINGLE_QUOTE      ((UChar)0x0027)
    30 #define FORWARDSLASH      ((UChar)0x002F)
    31 #define BACKSLASH         ((UChar)0x005C)
    32 #define SPACE             ((UChar)0x0020)
    33 #define QUOTATION_MARK    ((UChar)0x0022)
    34 #define ASTERISK          ((UChar)0x002A)
    35 #define PLUSSITN          ((UChar)0x002B)
    36 #define COMMA             ((UChar)0x002C)
    37 #define HYPHEN            ((UChar)0x002D)
    38 #define DOT               ((UChar)0x002E)
    39 #define COLON             ((UChar)0x003A)
    40 #define CAP_A             ((UChar)0x0041)
    41 #define CAP_C             ((UChar)0x0043)
    42 #define CAP_D             ((UChar)0x0044)
    43 #define CAP_E             ((UChar)0x0045)
    44 #define CAP_F             ((UChar)0x0046)
    45 #define CAP_G             ((UChar)0x0047)
    46 #define CAP_H             ((UChar)0x0048)
    47 #define CAP_J             ((UChar)0x004A)
    48 #define CAP_K             ((UChar)0x004B)
    49 #define CAP_L             ((UChar)0x004C)
    50 #define CAP_M             ((UChar)0x004D)
    51 #define CAP_O             ((UChar)0x004F)
    52 #define CAP_Q             ((UChar)0x0051)
    53 #define CAP_S             ((UChar)0x0053)
    54 #define CAP_T             ((UChar)0x0054)
    55 #define CAP_U             ((UChar)0x0055)
    56 #define CAP_V             ((UChar)0x0056)
    57 #define CAP_W             ((UChar)0x0057)
    58 #define CAP_X             ((UChar)0x0058)
    59 #define CAP_Y             ((UChar)0x0059)
    60 #define CAP_Z             ((UChar)0x005A)
    61 #define LOWLINE           ((UChar)0x005F)
    62 #define LOW_A             ((UChar)0x0061)
    63 #define LOW_C             ((UChar)0x0063)
    64 #define LOW_D             ((UChar)0x0064)
    65 #define LOW_E             ((UChar)0x0065)
    66 #define LOW_F             ((UChar)0x0066)
    67 #define LOW_G             ((UChar)0x0067)
    68 #define LOW_H             ((UChar)0x0068)
    69 #define LOW_I             ((UChar)0x0069)
    70 #define LOW_J             ((UChar)0x006A)
    71 #define LOW_K             ((UChar)0x006B)
    72 #define LOW_L             ((UChar)0x006C)
    73 #define LOW_M             ((UChar)0x006D)
    74 #define LOW_N             ((UChar)0x006E)
    75 #define LOW_O             ((UChar)0x006F)
    76 #define LOW_P             ((UChar)0x0070)
    77 #define LOW_Q             ((UChar)0x0071)
    78 #define LOW_R             ((UChar)0x0072)
    79 #define LOW_S             ((UChar)0x0073)
    80 #define LOW_T             ((UChar)0x0074)
    81 #define LOW_U             ((UChar)0x0075)
    82 #define LOW_V             ((UChar)0x0076)
    83 #define LOW_W             ((UChar)0x0077)
    84 #define LOW_X             ((UChar)0x0078)
    85 #define LOW_Y             ((UChar)0x0079)
    86 #define LOW_Z             ((UChar)0x007A)
    87 #define DT_SHORT          -0x102
    88 #define DT_LONG           -0x103
    89 #define DT_NUMERIC         0x100
    90 #define DT_NARROW         -0x101
    91 #define DT_DELTA           0x10
    93 U_NAMESPACE_BEGIN
    95 const int32_t UDATPG_FRACTIONAL_MASK = 1<<UDATPG_FRACTIONAL_SECOND_FIELD;
    96 const int32_t UDATPG_SECOND_AND_FRACTIONAL_MASK = (1<<UDATPG_SECOND_FIELD) | (1<<UDATPG_FRACTIONAL_SECOND_FIELD);
    98 typedef enum dtStrEnum {
    99     DT_BASESKELETON,
   100     DT_SKELETON,
   101     DT_PATTERN
   102 }dtStrEnum;
   104 typedef struct dtTypeElem {
   105     UChar                  patternChar;
   106     UDateTimePatternField  field;
   107     int16_t                type;
   108     int16_t                minLen;
   109     int16_t                weight;
   110 }dtTypeElem;
   112 class PtnSkeleton : public UMemory {
   113 public:
   114     int32_t type[UDATPG_FIELD_COUNT];
   115     UnicodeString original[UDATPG_FIELD_COUNT];
   116     UnicodeString baseOriginal[UDATPG_FIELD_COUNT];
   118     PtnSkeleton();
   119     PtnSkeleton(const PtnSkeleton& other);
   120     UBool equals(const PtnSkeleton& other);
   121     UnicodeString getSkeleton();
   122     UnicodeString getBaseSkeleton();
   123     virtual ~PtnSkeleton();
   124 };
   127 class PtnElem : public UMemory {
   128 public:
   129     UnicodeString basePattern;
   130     PtnSkeleton   *skeleton;
   131     UnicodeString pattern;
   132     UBool         skeletonWasSpecified; // if specified in availableFormats, not derived
   133     PtnElem       *next;
   135     PtnElem(const UnicodeString &basePattern, const UnicodeString &pattern);
   136     virtual ~PtnElem();
   138 };
   140 class FormatParser : public UMemory {
   141 public:
   142     UnicodeString items[MAX_DT_TOKEN];
   143     int32_t  itemNumber;
   145     FormatParser();
   146     virtual ~FormatParser();
   147     void set(const UnicodeString& patternString);
   148     UBool isQuoteLiteral(const UnicodeString& s) const;
   149     void getQuoteLiteral(UnicodeString& quote, int32_t *itemIndex);
   150     int32_t getCanonicalIndex(const UnicodeString& s) { return getCanonicalIndex(s, TRUE); }
   151     int32_t getCanonicalIndex(const UnicodeString& s, UBool strict);
   152     UBool isPatternSeparator(UnicodeString& field);
   153     void setFilter(UErrorCode &status);
   155 private:
   156    typedef enum TokenStatus {
   157        START,
   158        ADD_TOKEN,
   159        SYNTAX_ERROR,
   160        DONE
   161    } ToeknStatus;
   163    TokenStatus status;
   164    virtual TokenStatus setTokens(const UnicodeString& pattern, int32_t startPos, int32_t *len);
   165 };
   167 class DistanceInfo : public UMemory {
   168 public:
   169     int32_t missingFieldMask;
   170     int32_t extraFieldMask;
   172     DistanceInfo() {}
   173     virtual ~DistanceInfo();
   174     void clear() { missingFieldMask = extraFieldMask = 0; }
   175     void setTo(DistanceInfo& other);
   176     void addMissing(int32_t field) { missingFieldMask |= (1<<field); }
   177     void addExtra(int32_t field) { extraFieldMask |= (1<<field); }
   178 };
   180 class DateTimeMatcher: public UMemory {
   181 public:
   182     PtnSkeleton skeleton;
   184     void getBasePattern(UnicodeString &basePattern);
   185     UnicodeString getPattern();
   186     void set(const UnicodeString& pattern, FormatParser* fp);
   187     void set(const UnicodeString& pattern, FormatParser* fp, PtnSkeleton& skeleton);
   188     void copyFrom(const PtnSkeleton& skeleton);
   189     void copyFrom();
   190     PtnSkeleton* getSkeletonPtr();
   191     UBool equals(const DateTimeMatcher* other) const;
   192     int32_t getDistance(const DateTimeMatcher& other, int32_t includeMask, DistanceInfo& distanceInfo);
   193     DateTimeMatcher();
   194     DateTimeMatcher(const DateTimeMatcher& other);
   195     virtual ~DateTimeMatcher();
   196     int32_t getFieldMask();
   197 };
   199 class PatternMap : public UMemory {
   200 public:
   201     PtnElem *boot[MAX_PATTERN_ENTRIES];
   202     PatternMap();
   203     virtual  ~PatternMap();
   204     void  add(const UnicodeString& basePattern, const PtnSkeleton& skeleton, const UnicodeString& value, UBool skeletonWasSpecified, UErrorCode& status);
   205     const UnicodeString* getPatternFromBasePattern(UnicodeString& basePattern, UBool& skeletonWasSpecified);
   206     const UnicodeString* getPatternFromSkeleton(PtnSkeleton& skeleton, const PtnSkeleton** specifiedSkeletonPtr = 0);
   207     void copyFrom(const PatternMap& other, UErrorCode& status);
   208     PtnElem* getHeader(UChar baseChar);
   209     UBool equals(const PatternMap& other);
   210 private:
   211     UBool isDupAllowed;
   212     PtnElem*  getDuplicateElem(const UnicodeString &basePattern, const PtnSkeleton& skeleton, PtnElem *baseElem);
   213 }; // end  PatternMap
   215 class PatternMapIterator : public UMemory {
   216 public:
   217     PatternMapIterator();
   218     virtual ~PatternMapIterator();
   219     void set(PatternMap& patternMap);
   220     PtnSkeleton* getSkeleton();
   221     UBool hasNext();
   222     DateTimeMatcher& next();
   223 private:
   224     int32_t bootIndex;
   225     PtnElem *nodePtr;
   226     DateTimeMatcher *matcher;
   227     PatternMap *patternMap;
   228 };
   230 class DTSkeletonEnumeration : public StringEnumeration {
   231 public:
   232     DTSkeletonEnumeration(PatternMap &patternMap, dtStrEnum type, UErrorCode& status);
   233     virtual ~DTSkeletonEnumeration();
   234     static UClassID U_EXPORT2 getStaticClassID(void);
   235     virtual UClassID getDynamicClassID(void) const;
   236     virtual const UnicodeString* snext(UErrorCode& status);
   237     virtual void reset(UErrorCode& status);
   238     virtual int32_t count(UErrorCode& status) const;
   239 private:
   240     int32_t pos;
   241     UBool isCanonicalItem(const UnicodeString& item);
   242     UVector *fSkeletons;
   243 };
   245 class DTRedundantEnumeration : public StringEnumeration {
   246 public:
   247     DTRedundantEnumeration();
   248     virtual ~DTRedundantEnumeration();
   249     static UClassID U_EXPORT2 getStaticClassID(void);
   250     virtual UClassID getDynamicClassID(void) const;
   251     virtual const UnicodeString* snext(UErrorCode& status);
   252     virtual void reset(UErrorCode& status);
   253     virtual int32_t count(UErrorCode& status) const;
   254     void add(const UnicodeString &pattern, UErrorCode& status);
   255 private:
   256     int32_t pos;
   257     UBool isCanonicalItem(const UnicodeString& item);
   258     UVector *fPatterns;
   259 };
   261 U_NAMESPACE_END
   263 #endif

mercurial