ICU 65.1 65.1

dcfmtsym.h
Go to the documentation of this file.
1 // © 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /*
4 ********************************************************************************
5 * Copyright (C) 1997-2016, International Business Machines
6 * Corporation and others. All Rights Reserved.
7 ********************************************************************************
8 *
9 * File DCFMTSYM.H
10 *
11 * Modification History:
12 *
13 * Date Name Description
14 * 02/19/97 aliu Converted from java.
15 * 03/18/97 clhuang Updated per C++ implementation.
16 * 03/27/97 helena Updated to pass the simple test after code review.
17 * 08/26/97 aliu Added currency/intl currency symbol support.
18 * 07/22/98 stephen Changed to match C++ style
19 * currencySymbol -> fCurrencySymbol
20 * Constants changed from CAPS to kCaps
21 * 06/24/99 helena Integrated Alan's NF enhancements and Java2 bug fixes
22 * 09/22/00 grhoten Marked deprecation tags with a pointer to replacement
23 * functions.
24 ********************************************************************************
25 */
26
27 #ifndef DCFMTSYM_H
28 #define DCFMTSYM_H
29
30 #include "unicode/utypes.h"
31
32 #if U_SHOW_CPLUSPLUS_API
33
34 #if !UCONFIG_NO_FORMATTING
35
36 #include "unicode/uchar.h"
37 #include "unicode/uobject.h"
38 #include "unicode/locid.h"
39 #include "unicode/numsys.h"
40 #include "unicode/unum.h"
41 #include "unicode/unistr.h"
42
49 U_NAMESPACE_BEGIN
50
86 class U_I18N_API DecimalFormatSymbols : public UObject {
87 public:
92 enum ENumberFormatSymbol {
94 kDecimalSeparatorSymbol,
96 kGroupingSeparatorSymbol,
98 kPatternSeparatorSymbol,
100 kPercentSymbol,
102 kZeroDigitSymbol,
104 kDigitSymbol,
106 kMinusSignSymbol,
108 kPlusSignSymbol,
110 kCurrencySymbol,
112 kIntlCurrencySymbol,
114 kMonetarySeparatorSymbol,
116 kExponentialSymbol,
118 kPerMillSymbol,
120 kPadEscapeSymbol,
122 kInfinitySymbol,
124 kNaNSymbol,
127 kSignificantDigitSymbol,
131 kMonetaryGroupingSeparatorSymbol,
135 kOneDigitSymbol,
139 kTwoDigitSymbol,
143 kThreeDigitSymbol,
147 kFourDigitSymbol,
151 kFiveDigitSymbol,
155 kSixDigitSymbol,
159 kSevenDigitSymbol,
163 kEightDigitSymbol,
167 kNineDigitSymbol,
171 kExponentMultiplicationSymbol,
173 kFormatSymbolCount = kNineDigitSymbol + 2
174 };
175
184 DecimalFormatSymbols(const Locale& locale, UErrorCode& status);
185
202 DecimalFormatSymbols(const Locale& locale, const NumberingSystem& ns, UErrorCode& status);
203
214 DecimalFormatSymbols(UErrorCode& status);
215
231 static DecimalFormatSymbols* createWithLastResortData(UErrorCode& status);
232
237 DecimalFormatSymbols(const DecimalFormatSymbols&);
238
243 DecimalFormatSymbols& operator=(const DecimalFormatSymbols&);
244
249 virtual ~DecimalFormatSymbols();
250
258 UBool operator==(const DecimalFormatSymbols& other) const;
259
267 UBool operator!=(const DecimalFormatSymbols& other) const { return !operator==(other); }
268
278 inline UnicodeString getSymbol(ENumberFormatSymbol symbol) const;
279
292 void setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propogateDigits);
293
298 inline Locale getLocale() const;
299
305 Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
306
323 const UnicodeString& getPatternForCurrencySpacing(UCurrencySpacing type,
324 UBool beforeCurrency,
325 UErrorCode& status) const;
336 void setPatternForCurrencySpacing(UCurrencySpacing type,
337 UBool beforeCurrency,
338 const UnicodeString& pattern);
339
345 virtual UClassID getDynamicClassID() const;
346
352 static UClassID U_EXPORT2 getStaticClassID();
353
354 private:
355 DecimalFormatSymbols();
356
369 void initialize(const Locale& locale, UErrorCode& success,
370 UBool useLastResortData = FALSE, const NumberingSystem* ns = nullptr);
371
375 void initialize();
376
377 void setCurrencyForSymbols();
378
379 public:
380
381 #ifndef U_HIDE_INTERNAL_API
382
385 inline UBool isCustomCurrencySymbol() const {
386 return fIsCustomCurrencySymbol;
387 }
388
392 inline UBool isCustomIntlCurrencySymbol() const {
393 return fIsCustomIntlCurrencySymbol;
394 }
395
399 inline UChar32 getCodePointZero() const {
400 return fCodePointZero;
401 }
402 #endif /* U_HIDE_INTERNAL_API */
403
419 inline const UnicodeString& getConstSymbol(ENumberFormatSymbol symbol) const;
420
421 #ifndef U_HIDE_INTERNAL_API
422
437 inline const UnicodeString& getConstDigitSymbol(int32_t digit) const;
438
443 inline const char16_t* getCurrencyPattern(void) const;
444 #endif /* U_HIDE_INTERNAL_API */
445
446 private:
461 UnicodeString fSymbols[kFormatSymbolCount];
462
466 UnicodeString fNoSymbol;
467
482 UChar32 fCodePointZero;
483
484 Locale locale;
485
486 char actualLocale[ULOC_FULLNAME_CAPACITY];
487 char validLocale[ULOC_FULLNAME_CAPACITY];
488 const char16_t* currPattern;
489
490 UnicodeString currencySpcBeforeSym[UNUM_CURRENCY_SPACING_COUNT];
491 UnicodeString currencySpcAfterSym[UNUM_CURRENCY_SPACING_COUNT];
492 UBool fIsCustomCurrencySymbol;
493 UBool fIsCustomIntlCurrencySymbol;
494 };
495
496 // -------------------------------------
497
498 inline UnicodeString
499 DecimalFormatSymbols::getSymbol(ENumberFormatSymbol symbol) const {
500 const UnicodeString *strPtr;
501 if(symbol < kFormatSymbolCount) {
502 strPtr = &fSymbols[symbol];
503 } else {
504 strPtr = &fNoSymbol;
505 }
506 return *strPtr;
507 }
508
509 // See comments above for this function. Not hidden with #ifdef U_HIDE_INTERNAL_API
510 inline const UnicodeString &
511 DecimalFormatSymbols::getConstSymbol(ENumberFormatSymbol symbol) const {
512 const UnicodeString *strPtr;
513 if(symbol < kFormatSymbolCount) {
514 strPtr = &fSymbols[symbol];
515 } else {
516 strPtr = &fNoSymbol;
517 }
518 return *strPtr;
519 }
520
521 #ifndef U_HIDE_INTERNAL_API
522 inline const UnicodeString& DecimalFormatSymbols::getConstDigitSymbol(int32_t digit) const {
523 if (digit < 0 || digit > 9) {
524 digit = 0;
525 }
526 if (digit == 0) {
527 return fSymbols[kZeroDigitSymbol];
528 }
529 ENumberFormatSymbol key = static_cast<ENumberFormatSymbol>(kOneDigitSymbol + digit - 1);
530 return fSymbols[key];
531 }
532 #endif /* U_HIDE_INTERNAL_API */
533
534 // -------------------------------------
535
536 inline void
537 DecimalFormatSymbols::setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propogateDigits = TRUE) {
538 if (symbol == kCurrencySymbol) {
539 fIsCustomCurrencySymbol = TRUE;
540 }
541 else if (symbol == kIntlCurrencySymbol) {
542 fIsCustomIntlCurrencySymbol = TRUE;
543 }
544 if(symbol<kFormatSymbolCount) {
545 fSymbols[symbol]=value;
546 }
547
548 // If the zero digit is being set to a known zero digit according to Unicode,
549 // then we automatically set the corresponding 1-9 digits
550 // Also record updates to fCodePointZero. Be conservative if in doubt.
551 if (symbol == kZeroDigitSymbol) {
552 UChar32 sym = value.char32At(0);
553 if ( propogateDigits && u_charDigitValue(sym) == 0 && value.countChar32() == 1 ) {
554 fCodePointZero = sym;
555 for ( int8_t i = 1 ; i<= 9 ; i++ ) {
556 sym++;
557 fSymbols[(int)kOneDigitSymbol+i-1] = UnicodeString(sym);
558 }
559 } else {
560 fCodePointZero = -1;
561 }
562 } else if (symbol >= kOneDigitSymbol && symbol <= kNineDigitSymbol) {
563 fCodePointZero = -1;
564 }
565 }
566
567 // -------------------------------------
568
569 inline Locale
570 DecimalFormatSymbols::getLocale() const {
571 return locale;
572 }
573
574 #ifndef U_HIDE_INTERNAL_API
575 inline const char16_t*
576 DecimalFormatSymbols::getCurrencyPattern() const {
577 return currPattern;
578 }
579 #endif /* U_HIDE_INTERNAL_API */
580
581 U_NAMESPACE_END
582
583 #endif /* #if !UCONFIG_NO_FORMATTING */
584
585 #endif /* U_SHOW_CPLUSPLUS_API */
586
587 #endif // _DCFMTSYM
588 //eof
icu::DecimalFormatSymbols::kInfinitySymbol
Infinity symbol.
Definition: dcfmtsym.h:122
icu::DecimalFormatSymbols::isCustomCurrencySymbol
UBool isCustomCurrencySymbol() const
Definition: dcfmtsym.h:385
icu::DecimalFormatSymbols::kExponentialSymbol
The exponential symbol.
Definition: dcfmtsym.h:116
icu::DecimalFormatSymbols::kFourDigitSymbol
Four.
Definition: dcfmtsym.h:147
icu::DecimalFormatSymbols
This class represents the set of symbols needed by DecimalFormat to format numbers.
Definition: dcfmtsym.h:86
icu::DecimalFormatSymbols::kPadEscapeSymbol
Escape padding character.
Definition: dcfmtsym.h:120
icu::DecimalFormatSymbols::kSixDigitSymbol
Six.
Definition: dcfmtsym.h:155
icu::DecimalFormatSymbols::kNaNSymbol
Nan symbol.
Definition: dcfmtsym.h:124
icu::DecimalFormatSymbols::kExponentMultiplicationSymbol
Multiplication sign.
Definition: dcfmtsym.h:171
icu::DecimalFormatSymbols::kPercentSymbol
The percent sign.
Definition: dcfmtsym.h:100
icu::DecimalFormatSymbols::kIntlCurrencySymbol
The international currency symbol.
Definition: dcfmtsym.h:112
unistr.h
C++ API: Unicode String.
icu::operator==
U_EXPORT UBool operator==(const StringPiece &x, const StringPiece &y)
Global operator == for StringPiece.
icu::DecimalFormatSymbols::getLocale
Locale getLocale() const
Returns the locale for which this object was constructed.
Definition: dcfmtsym.h:570
icu::DecimalFormatSymbols::kSevenDigitSymbol
Seven.
Definition: dcfmtsym.h:159
icu::DecimalFormatSymbols::getCurrencyPattern
const char16_t * getCurrencyPattern(void) const
Returns that pattern stored in currecy info.
Definition: dcfmtsym.h:576
icu::NumberingSystem
Defines numbering systems.
Definition: numsys.h:60
UCurrencySpacing
UCurrencySpacing
Constants for specifying currency spacing.
Definition: unum.h:331
icu::DecimalFormatSymbols::kPatternSeparatorSymbol
The pattern separator.
Definition: dcfmtsym.h:98
UClassID
void * UClassID
UClassID is used to identify classes without using the compiler&#39;s RTTI.
Definition: uobject.h:96
icu::DecimalFormatSymbols::kTwoDigitSymbol
Two.
Definition: dcfmtsym.h:139
u_charDigitValue
int32_t u_charDigitValue(UChar32 c)
Returns the decimal digit value of a decimal digit character.
ULOC_FULLNAME_CAPACITY
#define ULOC_FULLNAME_CAPACITY
Useful constant for the maximum size of the whole locale ID (including the terminating NULL and all k...
Definition: uloc.h:264
icu::DecimalFormatSymbols::setSymbol
void setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propogateDigits)
Set one of the format symbols by its enum constant.
Definition: dcfmtsym.h:537
icu::DecimalFormatSymbols::getCodePointZero
UChar32 getCodePointZero() const
Definition: dcfmtsym.h:399
icu::DecimalFormatSymbols::ENumberFormatSymbol
ENumberFormatSymbol
Constants for specifying a number format symbol.
Definition: dcfmtsym.h:92
icu::DecimalFormatSymbols::kThreeDigitSymbol
Three.
Definition: dcfmtsym.h:143
icu::DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol
The monetary grouping separator.
Definition: dcfmtsym.h:131
U_I18N_API
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside...
Definition: utypes.h:301
icu::DecimalFormatSymbols::getSymbol
UnicodeString getSymbol(ENumberFormatSymbol symbol) const
Get one of the format symbols by its enum constant.
Definition: dcfmtsym.h:499
icu::DecimalFormatSymbols::kZeroDigitSymbol
Zero.
Definition: dcfmtsym.h:102
icu::DecimalFormatSymbols::kGroupingSeparatorSymbol
The grouping separator.
Definition: dcfmtsym.h:96
UChar32
int32_t UChar32
Define UChar32 as a type for single Unicode code points.
Definition: umachine.h:425
icu::UObject::getDynamicClassID
virtual UClassID getDynamicClassID() const
ICU4C "poor man&#39;s RTTI", returns a UClassID for the actual ICU class.
TRUE
#define TRUE
The TRUE value of a UBool.
Definition: umachine.h:265
icu::DecimalFormatSymbols::kCurrencySymbol
The currency symbol.
Definition: dcfmtsym.h:110
numsys.h
C++ API: NumberingSystem object.
icu::DecimalFormatSymbols::kMonetarySeparatorSymbol
The monetary separator.
Definition: dcfmtsym.h:114
uchar.h
C API: Unicode Properties.
uobject.h
C++ API: Common ICU base class UObject.
icu::DecimalFormatSymbols::isCustomIntlCurrencySymbol
UBool isCustomIntlCurrencySymbol() const
Definition: dcfmtsym.h:392
icu::DecimalFormatSymbols::kDecimalSeparatorSymbol
The decimal separator.
Definition: dcfmtsym.h:94
icu::DecimalFormatSymbols::getConstDigitSymbol
const UnicodeString & getConstDigitSymbol(int32_t digit) const
Returns the const UnicodeString reference, like getConstSymbol, corresponding to the digit with the g...
Definition: dcfmtsym.h:522
icu::DecimalFormatSymbols::kEightDigitSymbol
Eight.
Definition: dcfmtsym.h:163
icu::DecimalFormatSymbols::kNineDigitSymbol
Nine.
Definition: dcfmtsym.h:167
UErrorCode
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Definition: utypes.h:415
ULocDataLocaleType
ULocDataLocaleType
Constants for *_getLocale() Allow user to select whether she wants information on requested...
Definition: uloc.h:338
icu::UnicodeString::countChar32
int32_t countChar32(int32_t start=0, int32_t length=INT32_MAX) const
Count Unicode code points in the length char16_t code units of the string.
locid.h
C++ API: Locale ID object.
utypes.h
Basic definitions for ICU, for both C and C++ APIs.
icu::DecimalFormatSymbols::kDigitSymbol
Character representing a digit in the pattern.
Definition: dcfmtsym.h:104
FALSE
#define FALSE
The FALSE value of a UBool.
Definition: umachine.h:269
icu::DecimalFormatSymbols::kFiveDigitSymbol
Five.
Definition: dcfmtsym.h:151
icu::UnicodeString
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:294
icu::DecimalFormatSymbols::kMinusSignSymbol
The minus sign.
Definition: dcfmtsym.h:106
icu::DecimalFormatSymbols::kPerMillSymbol
Per mill symbol - replaces kPermillSymbol.
Definition: dcfmtsym.h:118
icu::UObject
UObject is the common ICU "boilerplate" class.
Definition: uobject.h:223
UNUM_CURRENCY_SPACING_COUNT
One more than the highest normal UCurrencySpacing value.
Definition: unum.h:346
icu::DecimalFormatSymbols::kSignificantDigitSymbol
Significant digit symbol.
Definition: dcfmtsym.h:127
icu::DecimalFormatSymbols::operator!=
UBool operator!=(const DecimalFormatSymbols &other) const
Return true if another object is semantically unequal to this one.
Definition: dcfmtsym.h:267
icu::DecimalFormatSymbols::getConstSymbol
const UnicodeString & getConstSymbol(ENumberFormatSymbol symbol) const
Internal function - more efficient version of getSymbol, returning a const reference to one of the sy...
Definition: dcfmtsym.h:511
icu::UnicodeString::char32At
UChar32 char32At(int32_t offset) const
Return the code point that contains the code unit at offset offset.
icu::DecimalFormatSymbols::kOneDigitSymbol
One.
Definition: dcfmtsym.h:135
UBool
int8_t UBool
The ICU boolean type.
Definition: umachine.h:261
unum.h
C API: Compatibility APIs for number formatting.
icu::DecimalFormatSymbols::kPlusSignSymbol
The plus sign.
Definition: dcfmtsym.h:108
icu::Locale
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:195