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