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