1/* 2******************************************************************************* 3* Copyright (C) 1997-2014, 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 18U_NAMESPACE_BEGIN 19 20// currency sign count 21enum CurrencySignCount { 22 fgCurrencySignCountZero, 23 fgCurrencySignCountInSymbolFormat, 24 fgCurrencySignCountInISOFormat, 25 fgCurrencySignCountInPluralFormat 26}; 27 28class DecimalFormatSymbols; 29 30struct DecimalFormatPattern : UMemory { 31 enum EPadPosition { 32 kPadBeforePrefix, 33 kPadAfterPrefix, 34 kPadBeforeSuffix, 35 kPadAfterSuffix 36 }; 37 38 DecimalFormatPattern(); 39 40 int32_t fMinimumIntegerDigits; 41 int32_t fMaximumIntegerDigits; 42 int32_t fMinimumFractionDigits; 43 int32_t fMaximumFractionDigits; 44 UBool fUseSignificantDigits; 45 int32_t fMinimumSignificantDigits; 46 int32_t fMaximumSignificantDigits; 47 UBool fUseExponentialNotation; 48 int32_t fMinExponentDigits; 49 UBool fExponentSignAlwaysShown; 50 int32_t fCurrencySignCount; 51 UBool fGroupingUsed; 52 int32_t fGroupingSize; 53 int32_t fGroupingSize2; 54 int32_t fMultiplier; 55 UBool fDecimalSeparatorAlwaysShown; 56 int32_t fFormatWidth; 57 UBool fRoundingIncrementUsed; 58 DigitList fRoundingIncrement; 59 UChar32 fPad; 60 UBool fNegPatternsBogus; 61 UBool fPosPatternsBogus; 62 UnicodeString fNegPrefixPattern; 63 UnicodeString fNegSuffixPattern; 64 UnicodeString fPosPrefixPattern; 65 UnicodeString fPosSuffixPattern; 66 EPadPosition fPadPosition; 67}; 68 69class DecimalFormatPatternParser : UMemory { 70 public: 71 DecimalFormatPatternParser(); 72 void useSymbols(const DecimalFormatSymbols& symbols); 73 74 void applyPatternWithoutExpandAffix( 75 const UnicodeString& pattern, 76 DecimalFormatPattern& out, 77 UParseError& parseError, 78 UErrorCode& status); 79 private: 80 DecimalFormatPatternParser(const DecimalFormatPatternParser&); 81 DecimalFormatPatternParser& operator=(DecimalFormatPatternParser& rhs); 82 UChar32 fZeroDigit; 83 UChar32 fSigDigit; 84 UnicodeString fGroupingSeparator; 85 UnicodeString fDecimalSeparator; 86 UnicodeString fPercent; 87 UnicodeString fPerMill; 88 UnicodeString fDigit; 89 UnicodeString fSeparator; 90 UnicodeString fExponent; 91 UnicodeString fPlus; 92 UnicodeString fMinus; 93 UnicodeString fPadEscape; 94}; 95 96U_NAMESPACE_END 97 98#endif /* !UCONFIG_NO_FORMATTING */ 99#endif 100