ICU 78.1 78.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_CLASS 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,
172 #ifndef U_HIDE_INTERNAL_API
176 kApproximatelySignSymbol,
177 #endif /* U_HIDE_INTERNAL_API */
179 kFormatSymbolCount = kExponentMultiplicationSymbol + 2
180 };
181
190 U_I18N_API DecimalFormatSymbols(const Locale& locale, UErrorCode& status);
191
208 U_I18N_API DecimalFormatSymbols(const Locale& locale, const NumberingSystem& ns, UErrorCode& status);
209
220 U_I18N_API DecimalFormatSymbols(UErrorCode& status);
221
237 U_I18N_API static DecimalFormatSymbols* createWithLastResortData(UErrorCode& status);
238
243 U_I18N_API DecimalFormatSymbols(const DecimalFormatSymbols&);
244
249 U_I18N_API DecimalFormatSymbols& operator=(const DecimalFormatSymbols&);
250
255 U_I18N_API virtual ~DecimalFormatSymbols();
256
264 U_I18N_API bool operator==(const DecimalFormatSymbols& other) const;
265
273 U_I18N_API bool operator!=(const DecimalFormatSymbols& other) const { return !operator==(other); }
274
284 U_I18N_API inline UnicodeString getSymbol(ENumberFormatSymbol symbol) const;
285
298 U_I18N_API void setSymbol(ENumberFormatSymbol symbol,
299 const UnicodeString& value,
300 const UBool propagateDigits);
301
302 #ifndef U_HIDE_INTERNAL_API
310 U_I18N_API void setCurrency(const char16_t* currency, UErrorCode& status);
311 #endif // U_HIDE_INTERNAL_API
312
317 U_I18N_API inline Locale getLocale() const;
318
324 U_I18N_API Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
325
342 U_I18N_API const UnicodeString& getPatternForCurrencySpacing(UCurrencySpacing type,
343 UBool beforeCurrency,
344 UErrorCode& status) const;
345
356 U_I18N_API void setPatternForCurrencySpacing(UCurrencySpacing type,
357 UBool beforeCurrency,
358 const UnicodeString& pattern);
359
365 U_I18N_API virtual UClassID getDynamicClassID() const override;
366
372 U_I18N_API static UClassID getStaticClassID();
373
374 private:
375 DecimalFormatSymbols();
376
389 void initialize(const Locale& locale, UErrorCode& success,
390 UBool useLastResortData = false, const NumberingSystem* ns = nullptr);
391
395 void initialize();
396
397 public:
398
399 #ifndef U_HIDE_INTERNAL_API
403 U_I18N_API inline UBool isCustomCurrencySymbol() const {
404 return fIsCustomCurrencySymbol;
405 }
406
410 U_I18N_API inline UBool isCustomIntlCurrencySymbol() const {
411 return fIsCustomIntlCurrencySymbol;
412 }
413
417 U_I18N_API inline UChar32 getCodePointZero() const {
418 return fCodePointZero;
419 }
420 #endif /* U_HIDE_INTERNAL_API */
421
437 U_I18N_API inline const UnicodeString& getConstSymbol(ENumberFormatSymbol symbol) const;
438
439 #ifndef U_HIDE_INTERNAL_API
455 U_I18N_API inline const UnicodeString& getConstDigitSymbol(int32_t digit) const;
456
461 U_I18N_API inline const char16_t* getCurrencyPattern() const;
462
467 U_I18N_API inline const char* getNumberingSystemName() const;
468 #endif /* U_HIDE_INTERNAL_API */
469
470 private:
485 UnicodeString fSymbols[kFormatSymbolCount];
486
490 UnicodeString fNoSymbol;
491
506 UChar32 fCodePointZero;
507
508 Locale locale;
509
510 Locale actualLocale;
511 Locale validLocale;
512 const char16_t* currPattern = nullptr;
513
514 UnicodeString currencySpcBeforeSym[UNUM_CURRENCY_SPACING_COUNT];
515 UnicodeString currencySpcAfterSym[UNUM_CURRENCY_SPACING_COUNT];
516 UBool fIsCustomCurrencySymbol;
517 UBool fIsCustomIntlCurrencySymbol;
518 char nsName[kInternalNumSysNameCapacity+1] = {};
519 };
520
521 // -------------------------------------
522
523 inline UnicodeString
524 DecimalFormatSymbols::getSymbol(ENumberFormatSymbol symbol) const {
525 const UnicodeString *strPtr;
526 if(symbol < kFormatSymbolCount) {
527 strPtr = &fSymbols[symbol];
528 } else {
529 strPtr = &fNoSymbol;
530 }
531 return *strPtr;
532 }
533
534 // See comments above for this function. Not hidden with #ifdef U_HIDE_INTERNAL_API
535 inline const UnicodeString &
536 DecimalFormatSymbols::getConstSymbol(ENumberFormatSymbol symbol) const {
537 const UnicodeString *strPtr;
538 if(symbol < kFormatSymbolCount) {
539 strPtr = &fSymbols[symbol];
540 } else {
541 strPtr = &fNoSymbol;
542 }
543 return *strPtr;
544 }
545
546 #ifndef U_HIDE_INTERNAL_API
547 inline const UnicodeString& DecimalFormatSymbols::getConstDigitSymbol(int32_t digit) const {
548 if (digit < 0 || digit > 9) {
549 digit = 0;
550 }
551 if (digit == 0) {
552 return fSymbols[kZeroDigitSymbol];
553 }
554 ENumberFormatSymbol key = static_cast<ENumberFormatSymbol>(kOneDigitSymbol + digit - 1);
555 return fSymbols[key];
556 }
557 #endif /* U_HIDE_INTERNAL_API */
558
559 // -------------------------------------
560
561 inline void
562 DecimalFormatSymbols::setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propagateDigits = true) {
563 if (symbol == kCurrencySymbol) {
564 fIsCustomCurrencySymbol = true;
565 }
566 else if (symbol == kIntlCurrencySymbol) {
567 fIsCustomIntlCurrencySymbol = true;
568 }
569 if(symbol<kFormatSymbolCount) {
570 fSymbols[symbol]=value;
571 }
572
573 // If the zero digit is being set to a known zero digit according to Unicode,
574 // then we automatically set the corresponding 1-9 digits
575 // Also record updates to fCodePointZero. Be conservative if in doubt.
576 if (symbol == kZeroDigitSymbol) {
577 UChar32 sym = value.char32At(0);
578 if ( propagateDigits && u_charDigitValue(sym) == 0 && value.countChar32() == 1 ) {
579 fCodePointZero = sym;
580 for ( int8_t i = 1 ; i<= 9 ; i++ ) {
581 sym++;
582 fSymbols[static_cast<int>(kOneDigitSymbol) + i - 1] = UnicodeString(sym);
583 }
584 } else {
585 fCodePointZero = -1;
586 }
587 } else if (symbol >= kOneDigitSymbol && symbol <= kNineDigitSymbol) {
588 fCodePointZero = -1;
589 }
590 }
591
592 // -------------------------------------
593
594 inline Locale
595 DecimalFormatSymbols::getLocale() const {
596 return locale;
597 }
598
599 #ifndef U_HIDE_INTERNAL_API
600 inline const char16_t*
601 DecimalFormatSymbols::getCurrencyPattern() const {
602 return currPattern;
603 }
604 inline const char*
605 DecimalFormatSymbols::getNumberingSystemName() const {
606 return nsName;
607 }
608 #endif /* U_HIDE_INTERNAL_API */
609
610 U_NAMESPACE_END
611
612 #endif /* #if !UCONFIG_NO_FORMATTING */
613
614 #endif /* U_SHOW_CPLUSPLUS_API */
615
616 #endif // _DCFMTSYM
617 //eof
icu::DecimalFormatSymbols
This class represents the set of symbols needed by DecimalFormat to format numbers.
Definition: dcfmtsym.h:86
icu::DecimalFormatSymbols::operator==
U_I18N_API bool operator==(const DecimalFormatSymbols &other) const
Return true if another object is semantically equal to this one.
icu::DecimalFormatSymbols::DecimalFormatSymbols
U_I18N_API DecimalFormatSymbols(UErrorCode &status)
Create a DecimalFormatSymbols object for the default locale.
icu::DecimalFormatSymbols::getPatternForCurrencySpacing
U_I18N_API const UnicodeString & getPatternForCurrencySpacing(UCurrencySpacing type, UBool beforeCurrency, UErrorCode &status) const
Get pattern string for 'CurrencySpacing' that can be applied to currency format.
icu::DecimalFormatSymbols::~DecimalFormatSymbols
virtual U_I18N_API ~DecimalFormatSymbols()
Destructor.
icu::DecimalFormatSymbols::isCustomIntlCurrencySymbol
U_I18N_API UBool isCustomIntlCurrencySymbol() const
Definition: dcfmtsym.h:410
icu::DecimalFormatSymbols::ENumberFormatSymbol
ENumberFormatSymbol
Constants for specifying a number format symbol.
Definition: dcfmtsym.h:92
icu::DecimalFormatSymbols::kEightDigitSymbol
@ kEightDigitSymbol
Eight.
Definition: dcfmtsym.h:163
icu::DecimalFormatSymbols::kThreeDigitSymbol
@ kThreeDigitSymbol
Three.
Definition: dcfmtsym.h:143
icu::DecimalFormatSymbols::kDecimalSeparatorSymbol
@ kDecimalSeparatorSymbol
The decimal separator.
Definition: dcfmtsym.h:94
icu::DecimalFormatSymbols::kNineDigitSymbol
@ kNineDigitSymbol
Nine.
Definition: dcfmtsym.h:167
icu::DecimalFormatSymbols::kPlusSignSymbol
@ kPlusSignSymbol
The plus sign.
Definition: dcfmtsym.h:108
icu::DecimalFormatSymbols::kMinusSignSymbol
@ kMinusSignSymbol
The minus sign.
Definition: dcfmtsym.h:106
icu::DecimalFormatSymbols::kExponentMultiplicationSymbol
@ kExponentMultiplicationSymbol
Multiplication sign.
Definition: dcfmtsym.h:171
icu::DecimalFormatSymbols::kInfinitySymbol
@ kInfinitySymbol
Infinity symbol.
Definition: dcfmtsym.h:122
icu::DecimalFormatSymbols::kExponentialSymbol
@ kExponentialSymbol
The exponential symbol.
Definition: dcfmtsym.h:116
icu::DecimalFormatSymbols::kPerMillSymbol
@ kPerMillSymbol
Per mill symbol - replaces kPermillSymbol.
Definition: dcfmtsym.h:118
icu::DecimalFormatSymbols::kPatternSeparatorSymbol
@ kPatternSeparatorSymbol
The pattern separator.
Definition: dcfmtsym.h:98
icu::DecimalFormatSymbols::kCurrencySymbol
@ kCurrencySymbol
The currency symbol.
Definition: dcfmtsym.h:110
icu::DecimalFormatSymbols::kSixDigitSymbol
@ kSixDigitSymbol
Six.
Definition: dcfmtsym.h:155
icu::DecimalFormatSymbols::kTwoDigitSymbol
@ kTwoDigitSymbol
Two.
Definition: dcfmtsym.h:139
icu::DecimalFormatSymbols::kFiveDigitSymbol
@ kFiveDigitSymbol
Five.
Definition: dcfmtsym.h:151
icu::DecimalFormatSymbols::kSignificantDigitSymbol
@ kSignificantDigitSymbol
Significant digit symbol.
Definition: dcfmtsym.h:127
icu::DecimalFormatSymbols::kIntlCurrencySymbol
@ kIntlCurrencySymbol
The international currency symbol.
Definition: dcfmtsym.h:112
icu::DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol
@ kMonetaryGroupingSeparatorSymbol
The monetary grouping separator.
Definition: dcfmtsym.h:131
icu::DecimalFormatSymbols::kSevenDigitSymbol
@ kSevenDigitSymbol
Seven.
Definition: dcfmtsym.h:159
icu::DecimalFormatSymbols::kPadEscapeSymbol
@ kPadEscapeSymbol
Escape padding character.
Definition: dcfmtsym.h:120
icu::DecimalFormatSymbols::kPercentSymbol
@ kPercentSymbol
The percent sign.
Definition: dcfmtsym.h:100
icu::DecimalFormatSymbols::kNaNSymbol
@ kNaNSymbol
Nan symbol.
Definition: dcfmtsym.h:124
icu::DecimalFormatSymbols::kApproximatelySignSymbol
@ kApproximatelySignSymbol
Approximately sign.
Definition: dcfmtsym.h:176
icu::DecimalFormatSymbols::kDigitSymbol
@ kDigitSymbol
Character representing a digit in the pattern.
Definition: dcfmtsym.h:104
icu::DecimalFormatSymbols::kMonetarySeparatorSymbol
@ kMonetarySeparatorSymbol
The monetary separator.
Definition: dcfmtsym.h:114
icu::DecimalFormatSymbols::kZeroDigitSymbol
@ kZeroDigitSymbol
Zero.
Definition: dcfmtsym.h:102
icu::DecimalFormatSymbols::kGroupingSeparatorSymbol
@ kGroupingSeparatorSymbol
The grouping separator.
Definition: dcfmtsym.h:96
icu::DecimalFormatSymbols::kOneDigitSymbol
@ kOneDigitSymbol
One.
Definition: dcfmtsym.h:135
icu::DecimalFormatSymbols::kFourDigitSymbol
@ kFourDigitSymbol
Four.
Definition: dcfmtsym.h:147
icu::DecimalFormatSymbols::getLocale
U_I18N_API Locale getLocale(ULocDataLocaleType type, UErrorCode &status) const
Returns the locale for this object.
icu::DecimalFormatSymbols::createWithLastResortData
static U_I18N_API DecimalFormatSymbols * createWithLastResortData(UErrorCode &status)
Creates a DecimalFormatSymbols object with last-resort data.
icu::DecimalFormatSymbols::getDynamicClassID
virtual U_I18N_API UClassID getDynamicClassID() const override
ICU "poor man's RTTI", returns a UClassID for the actual class.
icu::DecimalFormatSymbols::DecimalFormatSymbols
U_I18N_API DecimalFormatSymbols(const DecimalFormatSymbols &)
Copy constructor.
icu::DecimalFormatSymbols::operator=
U_I18N_API DecimalFormatSymbols & operator=(const DecimalFormatSymbols &)
Assignment operator.
icu::DecimalFormatSymbols::setPatternForCurrencySpacing
U_I18N_API void setPatternForCurrencySpacing(UCurrencySpacing type, UBool beforeCurrency, const UnicodeString &pattern)
Set pattern string for 'CurrencySpacing' that can be applied to currency format.
icu::DecimalFormatSymbols::DecimalFormatSymbols
U_I18N_API DecimalFormatSymbols(const Locale &locale, UErrorCode &status)
Create a DecimalFormatSymbols object for the given locale.
icu::DecimalFormatSymbols::isCustomCurrencySymbol
U_I18N_API UBool isCustomCurrencySymbol() const
Definition: dcfmtsym.h:403
icu::DecimalFormatSymbols::setCurrency
U_I18N_API void setCurrency(const char16_t *currency, UErrorCode &status)
Loads symbols for the specified currency into this instance.
icu::DecimalFormatSymbols::getCodePointZero
U_I18N_API UChar32 getCodePointZero() const
Definition: dcfmtsym.h:417
icu::DecimalFormatSymbols::DecimalFormatSymbols
U_I18N_API DecimalFormatSymbols(const Locale &locale, const NumberingSystem &ns, UErrorCode &status)
Creates a DecimalFormatSymbols instance for the given locale with digits and symbols corresponding to...
icu::DecimalFormatSymbols::getStaticClassID
static U_I18N_API UClassID getStaticClassID()
ICU "poor man's RTTI", returns a UClassID for this class.
icu::DecimalFormatSymbols::operator!=
U_I18N_API bool operator!=(const DecimalFormatSymbols &other) const
Return true if another object is semantically unequal to this one.
Definition: dcfmtsym.h:273
icu::Locale
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:198
icu::NumberingSystem
Defines numbering systems.
Definition: numsys.h:60
icu::UObject
UObject is the common ICU "boilerplate" class.
Definition: uobject.h:222
icu::UnicodeString
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:303
icu::UnicodeString::char32At
UChar32 char32At(int32_t offset) const
Return the code point that contains the code unit at offset offset.
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.
icu::operator==
U_COMMON_API UBool operator==(const StringPiece &x, const StringPiece &y)
Global operator == for StringPiece.
icu::kInternalNumSysNameCapacity
constexpr const size_t kInternalNumSysNameCapacity
Size of a numbering system name.
Definition: numsys.h:42
numsys.h
C++ API: NumberingSystem object.
uchar.h
C API: Unicode Properties.
u_charDigitValue
U_CAPI int32_t u_charDigitValue(UChar32 c)
Returns the decimal digit value of a decimal digit character.
ULocDataLocaleType
ULocDataLocaleType
Constants for *_getLocale() Allow user to select whether she wants information on requested,...
Definition: uloc.h:338
UChar32
int32_t UChar32
Define UChar32 as a type for single Unicode code points.
Definition: umachine.h:449
UBool
int8_t UBool
The ICU boolean type, a signed-byte integer.
Definition: umachine.h:269
unistr.h
C++ API: Unicode String.
unum.h
C API: Compatibility APIs for number formatting.
UCurrencySpacing
UCurrencySpacing
Constants for specifying currency spacing.
Definition: unum.h:301
UNUM_CURRENCY_SPACING_COUNT
@ UNUM_CURRENCY_SPACING_COUNT
One more than the highest normal UCurrencySpacing value.
Definition: unum.h:316
uobject.h
C++ API: Common ICU base class UObject.
UClassID
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:96
utypes.h
Basic definitions for ICU, for both C and C++ APIs.
UErrorCode
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Definition: utypes.h:509
U_I18N_API_CLASS
#define U_I18N_API_CLASS
Set to export library symbols from inside the i18n library, and to import them from outside,...
Definition: utypes.h:457
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:316