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
19U_NAMESPACE_BEGIN
20
21// currency sign count
22enum CurrencySignCount {
23    fgCurrencySignCountZero,
24    fgCurrencySignCountInSymbolFormat,
25    fgCurrencySignCountInISOFormat,
26    fgCurrencySignCountInPluralFormat
27};
28
29class DecimalFormatSymbols;
30
31struct 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
74class 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
101U_NAMESPACE_END
102
103#endif /* !UCONFIG_NO_FORMATTING */
104#endif
105