00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef DCFMTSYM_H
00026 #define DCFMTSYM_H
00027
00028 #include "unicode/utypes.h"
00029
00030 #if !UCONFIG_NO_FORMATTING
00031
00032 #include "unicode/uobject.h"
00033 #include "unicode/locid.h"
00034
00041 U_NAMESPACE_BEGIN
00042
00082 class U_I18N_API DecimalFormatSymbols : public UObject {
00083 public:
00088 enum ENumberFormatSymbol {
00090 kDecimalSeparatorSymbol,
00092 kGroupingSeparatorSymbol,
00094 kPatternSeparatorSymbol,
00096 kPercentSymbol,
00098 kZeroDigitSymbol,
00100 kDigitSymbol,
00102 kMinusSignSymbol,
00104 kPlusSignSymbol,
00106 kCurrencySymbol,
00108 kIntlCurrencySymbol,
00110 kMonetarySeparatorSymbol,
00112 kExponentialSymbol,
00114 kPerMillSymbol,
00116 kPadEscapeSymbol,
00118 kInfinitySymbol,
00120 kNaNSymbol,
00123 kSignificantDigitSymbol,
00127 kMonetaryGroupingSeparatorSymbol,
00129 kFormatSymbolCount
00130 };
00131
00136 enum ECurrencySpacing {
00137 kCurrencyMatch,
00138 kSurroundingMatch,
00139 kInsert,
00140 kCurrencySpacingCount
00141 };
00142
00151 DecimalFormatSymbols(const Locale& locale, UErrorCode& status);
00152
00163 DecimalFormatSymbols( UErrorCode& status);
00164
00169 DecimalFormatSymbols(const DecimalFormatSymbols&);
00170
00175 DecimalFormatSymbols& operator=(const DecimalFormatSymbols&);
00176
00181 virtual ~DecimalFormatSymbols();
00182
00190 UBool operator==(const DecimalFormatSymbols& other) const;
00191
00199 UBool operator!=(const DecimalFormatSymbols& other) const { return !operator==(other); }
00200
00210 inline UnicodeString getSymbol(ENumberFormatSymbol symbol) const;
00211
00221 void setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value);
00222
00227 inline Locale getLocale() const;
00228
00234 Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
00235
00252 const UnicodeString& getPatternForCurrencySpacing(ECurrencySpacing type,
00253 UBool beforeCurrency,
00254 UErrorCode& status) const;
00265 void setPatternForCurrencySpacing(ECurrencySpacing type,
00266 UBool beforeCurrency,
00267 const UnicodeString& pattern);
00268
00274 virtual UClassID getDynamicClassID() const;
00275
00281 static UClassID U_EXPORT2 getStaticClassID();
00282
00283 private:
00284 DecimalFormatSymbols();
00285
00296 void initialize(const Locale& locale, UErrorCode& success, UBool useLastResortData = FALSE);
00297
00305 void initialize(const UChar** numberElements, int32_t *numberElementsStrLen, int32_t numberElementsLength);
00306
00310 void initialize();
00311
00312 void setCurrencyForSymbols();
00313
00314 public:
00326 inline const UnicodeString &getConstSymbol(ENumberFormatSymbol symbol) const;
00327
00332 inline const UChar* getCurrencyPattern(void) const;
00333
00334 private:
00350 UnicodeString fSymbols[kFormatSymbolCount];
00351
00356 UnicodeString fNoSymbol;
00357
00358 Locale locale;
00359
00360 char actualLocale[ULOC_FULLNAME_CAPACITY];
00361 char validLocale[ULOC_FULLNAME_CAPACITY];
00362 const UChar* currPattern;
00363
00364 UnicodeString currencySpcBeforeSym[kCurrencySpacingCount];
00365 UnicodeString currencySpcAfterSym[kCurrencySpacingCount];
00366 };
00367
00368
00369
00370 inline UnicodeString
00371 DecimalFormatSymbols::getSymbol(ENumberFormatSymbol symbol) const {
00372 const UnicodeString *strPtr;
00373 if(symbol < kFormatSymbolCount) {
00374 strPtr = &fSymbols[symbol];
00375 } else {
00376 strPtr = &fNoSymbol;
00377 }
00378 return *strPtr;
00379 }
00380
00381 inline const UnicodeString &
00382 DecimalFormatSymbols::getConstSymbol(ENumberFormatSymbol symbol) const {
00383 const UnicodeString *strPtr;
00384 if(symbol < kFormatSymbolCount) {
00385 strPtr = &fSymbols[symbol];
00386 } else {
00387 strPtr = &fNoSymbol;
00388 }
00389 return *strPtr;
00390 }
00391
00392
00393
00394 inline void
00395 DecimalFormatSymbols::setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value) {
00396 if(symbol<kFormatSymbolCount) {
00397 fSymbols[symbol]=value;
00398 }
00399 }
00400
00401
00402
00403 inline Locale
00404 DecimalFormatSymbols::getLocale() const {
00405 return locale;
00406 }
00407
00408 inline const UChar*
00409 DecimalFormatSymbols::getCurrencyPattern() const {
00410 return currPattern;
00411 }
00412 U_NAMESPACE_END
00413
00414 #endif
00415
00416 #endif // _DCFMTSYM
00417