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