ICU 55.1 55.1

- Main Page
- Related Pages
- Modules
- Namespaces
- Data Structures
- Files

- File List
- Globals

All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
dcfmtsym.h
Go to the documentation of this file.
1 /*
2 ********************************************************************************
3 * Copyright (C) 1997-2015, International Business Machines
4 * Corporation and others. All Rights Reserved.
5 ********************************************************************************
6 *
7 * File DCFMTSYM.H
8 *
9 * Modification History:
10 *
11 * Date Name Description
12 * 02/19/97 aliu Converted from java.
13 * 03/18/97 clhuang Updated per C++ implementation.
14 * 03/27/97 helena Updated to pass the simple test after code review.
15 * 08/26/97 aliu Added currency/intl currency symbol support.
16 * 07/22/98 stephen Changed to match C++ style
17 * currencySymbol -> fCurrencySymbol
18 * Constants changed from CAPS to kCaps
19 * 06/24/99 helena Integrated Alan's NF enhancements and Java2 bug fixes
20 * 09/22/00 grhoten Marked deprecation tags with a pointer to replacement
21 * functions.
22 ********************************************************************************
23 */
24
25 #ifndef DCFMTSYM_H
26 #define DCFMTSYM_H
27
28 #include "unicode/utypes.h"
29 #include "unicode/uchar.h"
30
31 #if !UCONFIG_NO_FORMATTING
32
33 #include "unicode/uobject.h"
34 #include "unicode/locid.h"
35 #include "unicode/unum.h"
36
43 U_NAMESPACE_BEGIN
44
84 class U_I18N_API DecimalFormatSymbols : public UObject {
85 public:
90 enum ENumberFormatSymbol {
92 kDecimalSeparatorSymbol,
94 kGroupingSeparatorSymbol,
96 kPatternSeparatorSymbol,
98 kPercentSymbol,
100 kZeroDigitSymbol,
102 kDigitSymbol,
104 kMinusSignSymbol,
106 kPlusSignSymbol,
108 kCurrencySymbol,
110 kIntlCurrencySymbol,
112 kMonetarySeparatorSymbol,
114 kExponentialSymbol,
116 kPerMillSymbol,
118 kPadEscapeSymbol,
120 kInfinitySymbol,
122 kNaNSymbol,
125 kSignificantDigitSymbol,
129 kMonetaryGroupingSeparatorSymbol,
133 kOneDigitSymbol,
137 kTwoDigitSymbol,
141 kThreeDigitSymbol,
145 kFourDigitSymbol,
149 kFiveDigitSymbol,
153 kSixDigitSymbol,
157 kSevenDigitSymbol,
161 kEightDigitSymbol,
165 kNineDigitSymbol,
166 #ifndef U_HIDE_DRAFT_API
167
170 kExponentMultiplicationSymbol,
171 #endif /* U_HIDE_DRAFT_API */
172
173 kFormatSymbolCount = kNineDigitSymbol + 2
174 };
175
184 DecimalFormatSymbols(const Locale& locale, UErrorCode& status);
185
196 DecimalFormatSymbols(UErrorCode& status);
197
213 static DecimalFormatSymbols* createWithLastResortData(UErrorCode& status);
214
219 DecimalFormatSymbols(const DecimalFormatSymbols&);
220
225 DecimalFormatSymbols& operator=(const DecimalFormatSymbols&);
226
231 virtual ~DecimalFormatSymbols();
232
240 UBool operator==(const DecimalFormatSymbols& other) const;
241
249 UBool operator!=(const DecimalFormatSymbols& other) const { return !operator==(other); }
250
260 inline UnicodeString getSymbol(ENumberFormatSymbol symbol) const;
261
274 void setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propogateDigits);
275
280 inline Locale getLocale() const;
281
287 Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
288
305 const UnicodeString& getPatternForCurrencySpacing(UCurrencySpacing type,
306 UBool beforeCurrency,
307 UErrorCode& status) const;
318 void setPatternForCurrencySpacing(UCurrencySpacing type,
319 UBool beforeCurrency,
320 const UnicodeString& pattern);
321
327 virtual UClassID getDynamicClassID() const;
328
334 static UClassID U_EXPORT2 getStaticClassID();
335
336 private:
337 DecimalFormatSymbols();
338
349 void initialize(const Locale& locale, UErrorCode& success, UBool useLastResortData = FALSE);
350
354 void initialize();
355
356 void setCurrencyForSymbols();
357
358 public:
371 inline const UnicodeString &getConstSymbol(ENumberFormatSymbol symbol) const;
372
373 #ifndef U_HIDE_INTERNAL_API
374
378 inline const UChar* getCurrencyPattern(void) const;
379 #endif /* U_HIDE_INTERNAL_API */
380
381 private:
397 UnicodeString fSymbols[kFormatSymbolCount];
398
403 UnicodeString fNoSymbol;
404
405 Locale locale;
406
407 char actualLocale[ULOC_FULLNAME_CAPACITY];
408 char validLocale[ULOC_FULLNAME_CAPACITY];
409 const UChar* currPattern;
410
411 UnicodeString currencySpcBeforeSym[UNUM_CURRENCY_SPACING_COUNT];
412 UnicodeString currencySpcAfterSym[UNUM_CURRENCY_SPACING_COUNT];
413 };
414
415 // -------------------------------------
416
417 inline UnicodeString
418 DecimalFormatSymbols::getSymbol(ENumberFormatSymbol symbol) const {
419 const UnicodeString *strPtr;
420 if(symbol < kFormatSymbolCount) {
421 strPtr = &fSymbols[symbol];
422 } else {
423 strPtr = &fNoSymbol;
424 }
425 return *strPtr;
426 }
427
428 //#ifndef U_HIDE_INTERNAL_API
429 // See comments above for this function. Not hidden.
430 inline const UnicodeString &
431 DecimalFormatSymbols::getConstSymbol(ENumberFormatSymbol symbol) const {
432 const UnicodeString *strPtr;
433 if(symbol < kFormatSymbolCount) {
434 strPtr = &fSymbols[symbol];
435 } else {
436 strPtr = &fNoSymbol;
437 }
438 return *strPtr;
439 }
440
441 //#endif /* U_HIDE_INTERNAL_API */
442
443
444 // -------------------------------------
445
446 inline void
447 DecimalFormatSymbols::setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propogateDigits = TRUE) {
448 if(symbol<kFormatSymbolCount) {
449 fSymbols[symbol]=value;
450 }
451
452 // If the zero digit is being set to a known zero digit according to Unicode,
453 // then we automatically set the corresponding 1-9 digits
454 if ( propogateDigits && symbol == kZeroDigitSymbol && value.countChar32() == 1 ) {
455 UChar32 sym = value.char32At(0);
456 if ( u_charDigitValue(sym) == 0 ) {
457 for ( int8_t i = 1 ; i<= 9 ; i++ ) {
458 sym++;
459 fSymbols[(int)kOneDigitSymbol+i-1] = UnicodeString(sym);
460 }
461 }
462 }
463 }
464
465 // -------------------------------------
466
467 inline Locale
468 DecimalFormatSymbols::getLocale() const {
469 return locale;
470 }
471
472 #ifndef U_HIDE_INTERNAL_API
473 inline const UChar*
474 DecimalFormatSymbols::getCurrencyPattern() const {
475 return currPattern;
476 }
477 #endif /* U_HIDE_INTERNAL_API */
478
479 U_NAMESPACE_END
480
481 #endif /* #if !UCONFIG_NO_FORMATTING */
482
483 #endif // _DCFMTSYM
484 //eof