Home | History | Annotate | Download | only in i18n
      1 /*
      2 *******************************************************************************
      3 * Copyright (C) 1997-2015, International Business Machines Corporation and    *
      4 * others. All Rights Reserved.                                                *
      5 *******************************************************************************
      6 */
      7 #ifndef _DECIMAL_FORMAT_PATTERN
      8 #define _DECIMAL_FORMAT_PATTERN
      9 
     10 #include "unicode/utypes.h"
     11 
     12 #if !UCONFIG_NO_FORMATTING
     13 
     14 #include "unicode/uobject.h"
     15 #include "unicode/unistr.h"
     16 #include "digitlst.h"
     17 #include "affixpatternparser.h"
     18 
     19 U_NAMESPACE_BEGIN
     20 
     21 // currency sign count
     22 enum CurrencySignCount {
     23     fgCurrencySignCountZero,
     24     fgCurrencySignCountInSymbolFormat,
     25     fgCurrencySignCountInISOFormat,
     26     fgCurrencySignCountInPluralFormat
     27 };
     28 
     29 class DecimalFormatSymbols;
     30 
     31 struct DecimalFormatPattern : UMemory {
     32   enum EPadPosition {
     33       kPadBeforePrefix,
     34       kPadAfterPrefix,
     35       kPadBeforeSuffix,
     36       kPadAfterSuffix
     37   };
     38 
     39   DecimalFormatPattern();
     40 
     41   int32_t fMinimumIntegerDigits;
     42   int32_t fMaximumIntegerDigits;
     43   int32_t fMinimumFractionDigits;
     44   int32_t fMaximumFractionDigits;
     45   UBool fUseSignificantDigits;
     46   int32_t fMinimumSignificantDigits;
     47   int32_t fMaximumSignificantDigits;
     48   UBool fUseExponentialNotation;
     49   int32_t fMinExponentDigits;
     50   UBool fExponentSignAlwaysShown;
     51   int32_t fCurrencySignCount;
     52   UBool fGroupingUsed;
     53   int32_t fGroupingSize;
     54   int32_t fGroupingSize2;
     55   int32_t fMultiplier;
     56   UBool fDecimalSeparatorAlwaysShown;
     57   int32_t fFormatWidth;
     58   UBool fRoundingIncrementUsed;
     59   DigitList fRoundingIncrement;
     60   UChar32 fPad;
     61   UBool fNegPatternsBogus;
     62   UBool fPosPatternsBogus;
     63   UnicodeString fNegPrefixPattern;
     64   UnicodeString fNegSuffixPattern;
     65   UnicodeString fPosPrefixPattern;
     66   UnicodeString fPosSuffixPattern;
     67   AffixPattern fNegPrefixAffix;
     68   AffixPattern fNegSuffixAffix;
     69   AffixPattern fPosPrefixAffix;
     70   AffixPattern fPosSuffixAffix;
     71   EPadPosition fPadPosition;
     72 };
     73 
     74 class DecimalFormatPatternParser : UMemory {
     75   public:
     76     DecimalFormatPatternParser();
     77     void useSymbols(const DecimalFormatSymbols& symbols);
     78 
     79     void applyPatternWithoutExpandAffix(
     80         const UnicodeString& pattern,
     81         DecimalFormatPattern& out,
     82         UParseError& parseError,
     83         UErrorCode& status);
     84   private:
     85     DecimalFormatPatternParser(const DecimalFormatPatternParser&);
     86     DecimalFormatPatternParser& operator=(DecimalFormatPatternParser& rhs);
     87     UChar32 fZeroDigit;
     88     UChar32 fSigDigit;
     89     UnicodeString fGroupingSeparator;
     90     UnicodeString fDecimalSeparator;
     91     UnicodeString fPercent;
     92     UnicodeString fPerMill;
     93     UnicodeString fDigit;
     94     UnicodeString fSeparator;
     95     UnicodeString fExponent;
     96     UnicodeString fPlus;
     97     UnicodeString fMinus;
     98     UnicodeString fPadEscape;
     99 };
    100 
    101 U_NAMESPACE_END
    102 
    103 #endif /* !UCONFIG_NO_FORMATTING */
    104 #endif
    105