123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503 |
- #ifndef DCFMTSYM_H
- #define DCFMTSYM_H
- #include "unicode/utypes.h"
- #include "unicode/uchar.h"
- #if !UCONFIG_NO_FORMATTING
- #include "unicode/uobject.h"
- #include "unicode/locid.h"
- #include "unicode/unum.h"
- U_NAMESPACE_BEGIN
- class U_I18N_API DecimalFormatSymbols : public UObject {
- public:
-
- enum ENumberFormatSymbol {
-
- kDecimalSeparatorSymbol,
-
- kGroupingSeparatorSymbol,
-
- kPatternSeparatorSymbol,
-
- kPercentSymbol,
-
- kZeroDigitSymbol,
-
- kDigitSymbol,
-
- kMinusSignSymbol,
-
- kPlusSignSymbol,
-
- kCurrencySymbol,
-
- kIntlCurrencySymbol,
-
- kMonetarySeparatorSymbol,
-
- kExponentialSymbol,
-
- kPerMillSymbol,
-
- kPadEscapeSymbol,
-
- kInfinitySymbol,
-
- kNaNSymbol,
-
- kSignificantDigitSymbol,
-
- kMonetaryGroupingSeparatorSymbol,
-
- kOneDigitSymbol,
-
- kTwoDigitSymbol,
-
- kThreeDigitSymbol,
-
- kFourDigitSymbol,
-
- kFiveDigitSymbol,
-
- kSixDigitSymbol,
-
- kSevenDigitSymbol,
-
- kEightDigitSymbol,
-
- kNineDigitSymbol,
-
- kExponentMultiplicationSymbol,
-
- kFormatSymbolCount = kNineDigitSymbol + 2
- };
-
- DecimalFormatSymbols(const Locale& locale, UErrorCode& status);
-
- DecimalFormatSymbols(UErrorCode& status);
-
- static DecimalFormatSymbols* createWithLastResortData(UErrorCode& status);
-
- DecimalFormatSymbols(const DecimalFormatSymbols&);
-
- DecimalFormatSymbols& operator=(const DecimalFormatSymbols&);
-
- virtual ~DecimalFormatSymbols();
-
- UBool operator==(const DecimalFormatSymbols& other) const;
-
- UBool operator!=(const DecimalFormatSymbols& other) const { return !operator==(other); }
-
- inline UnicodeString getSymbol(ENumberFormatSymbol symbol) const;
-
- void setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propogateDigits);
-
- inline Locale getLocale() const;
-
- Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
-
- const UnicodeString& getPatternForCurrencySpacing(UCurrencySpacing type,
- UBool beforeCurrency,
- UErrorCode& status) const;
-
- void setPatternForCurrencySpacing(UCurrencySpacing type,
- UBool beforeCurrency,
- const UnicodeString& pattern);
-
- virtual UClassID getDynamicClassID() const;
-
- static UClassID U_EXPORT2 getStaticClassID();
- private:
- DecimalFormatSymbols();
-
- void initialize(const Locale& locale, UErrorCode& success, UBool useLastResortData = FALSE);
-
- void initialize();
- void setCurrencyForSymbols();
- public:
- #ifndef U_HIDE_INTERNAL_API
-
- inline UBool isCustomCurrencySymbol() const {
- return fIsCustomCurrencySymbol;
- }
-
- inline UBool isCustomIntlCurrencySymbol() const {
- return fIsCustomIntlCurrencySymbol;
- }
- #endif
-
- inline const UnicodeString &getConstSymbol(ENumberFormatSymbol symbol) const;
- #ifndef U_HIDE_INTERNAL_API
-
- inline const UChar* getCurrencyPattern(void) const;
- #endif
- private:
-
- UnicodeString fSymbols[kFormatSymbolCount];
-
- UnicodeString fNoSymbol;
- Locale locale;
- char actualLocale[ULOC_FULLNAME_CAPACITY];
- char validLocale[ULOC_FULLNAME_CAPACITY];
- const UChar* currPattern;
- UnicodeString currencySpcBeforeSym[UNUM_CURRENCY_SPACING_COUNT];
- UnicodeString currencySpcAfterSym[UNUM_CURRENCY_SPACING_COUNT];
- UBool fIsCustomCurrencySymbol;
- UBool fIsCustomIntlCurrencySymbol;
- };
- inline UnicodeString
- DecimalFormatSymbols::getSymbol(ENumberFormatSymbol symbol) const {
- const UnicodeString *strPtr;
- if(symbol < kFormatSymbolCount) {
- strPtr = &fSymbols[symbol];
- } else {
- strPtr = &fNoSymbol;
- }
- return *strPtr;
- }
- inline const UnicodeString &
- DecimalFormatSymbols::getConstSymbol(ENumberFormatSymbol symbol) const {
- const UnicodeString *strPtr;
- if(symbol < kFormatSymbolCount) {
- strPtr = &fSymbols[symbol];
- } else {
- strPtr = &fNoSymbol;
- }
- return *strPtr;
- }
- inline void
- DecimalFormatSymbols::setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propogateDigits = TRUE) {
- if (symbol == kCurrencySymbol) {
- fIsCustomCurrencySymbol = TRUE;
- }
- else if (symbol == kIntlCurrencySymbol) {
- fIsCustomIntlCurrencySymbol = TRUE;
- }
- if(symbol<kFormatSymbolCount) {
- fSymbols[symbol]=value;
- }
-
-
- if ( propogateDigits && symbol == kZeroDigitSymbol && value.countChar32() == 1 ) {
- UChar32 sym = value.char32At(0);
- if ( u_charDigitValue(sym) == 0 ) {
- for ( int8_t i = 1 ; i<= 9 ; i++ ) {
- sym++;
- fSymbols[(int)kOneDigitSymbol+i-1] = UnicodeString(sym);
- }
- }
- }
- }
- inline Locale
- DecimalFormatSymbols::getLocale() const {
- return locale;
- }
- #ifndef U_HIDE_INTERNAL_API
- inline const UChar*
- DecimalFormatSymbols::getCurrencyPattern() const {
- return currPattern;
- }
- #endif
- U_NAMESPACE_END
- #endif
- #endif
|