ICU 75.1 75.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,
172 #ifndef U_HIDE_INTERNAL_API
176 kApproximatelySignSymbol,
177 #endif /* U_HIDE_INTERNAL_API */
179 kFormatSymbolCount = kExponentMultiplicationSymbol + 2
180 };
181
190 DecimalFormatSymbols(const Locale& locale, UErrorCode& status);
191
208 DecimalFormatSymbols(const Locale& locale, const NumberingSystem& ns, UErrorCode& status);
209
220 DecimalFormatSymbols(UErrorCode& status);
221
237 static DecimalFormatSymbols* createWithLastResortData(UErrorCode& status);
238
243 DecimalFormatSymbols(const DecimalFormatSymbols&);
244
249 DecimalFormatSymbols& operator=(const DecimalFormatSymbols&);
250
255 virtual ~DecimalFormatSymbols();
256
264 bool operator==(const DecimalFormatSymbols& other) const;
265
273 bool operator!=(const DecimalFormatSymbols& other) const { return !operator==(other); }
274
284 inline UnicodeString getSymbol(ENumberFormatSymbol symbol) const;
285
298 void setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propagateDigits);
299
300 #ifndef U_HIDE_INTERNAL_API
308 void setCurrency(const char16_t* currency, UErrorCode& status);
309 #endif // U_HIDE_INTERNAL_API
310
315 inline Locale getLocale() const;
316
322 Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
323
340 const UnicodeString& getPatternForCurrencySpacing(UCurrencySpacing type,
341 UBool beforeCurrency,
342 UErrorCode& status) const;
353 void setPatternForCurrencySpacing(UCurrencySpacing type,
354 UBool beforeCurrency,
355 const UnicodeString& pattern);
356
362 virtual UClassID getDynamicClassID() const override;
363
369 static UClassID U_EXPORT2 getStaticClassID();
370
371 private:
372 DecimalFormatSymbols();
373
386 void initialize(const Locale& locale, UErrorCode& success,
387 UBool useLastResortData = false, const NumberingSystem* ns = nullptr);
388
392 void initialize();
393
394 public:
395
396 #ifndef U_HIDE_INTERNAL_API
400 inline UBool isCustomCurrencySymbol() const {
401 return fIsCustomCurrencySymbol;
402 }
403
407 inline UBool isCustomIntlCurrencySymbol() const {
408 return fIsCustomIntlCurrencySymbol;
409 }
410
414 inline UChar32 getCodePointZero() const {
415 return fCodePointZero;
416 }
417 #endif /* U_HIDE_INTERNAL_API */
418
434 inline const UnicodeString& getConstSymbol(ENumberFormatSymbol symbol) const;
435
436 #ifndef U_HIDE_INTERNAL_API
452 inline const UnicodeString& getConstDigitSymbol(int32_t digit) const;
453
458 inline const char16_t* getCurrencyPattern() const;
459
464 inline const char* getNumberingSystemName() const;
465 #endif /* U_HIDE_INTERNAL_API */
466
467 private:
482 UnicodeString fSymbols[kFormatSymbolCount];
483
487 UnicodeString fNoSymbol;
488
503 UChar32 fCodePointZero;
504
505 Locale locale;
506
507 char actualLocale[ULOC_FULLNAME_CAPACITY];
508 char validLocale[ULOC_FULLNAME_CAPACITY];
509 const char16_t* currPattern = nullptr;
510
511 UnicodeString currencySpcBeforeSym[UNUM_CURRENCY_SPACING_COUNT];
512 UnicodeString currencySpcAfterSym[UNUM_CURRENCY_SPACING_COUNT];
513 UBool fIsCustomCurrencySymbol;
514 UBool fIsCustomIntlCurrencySymbol;
515 char nsName[kInternalNumSysNameCapacity+1] = {};
516 };
517
518 // -------------------------------------
519
520 inline UnicodeString
521 DecimalFormatSymbols::getSymbol(ENumberFormatSymbol symbol) const {
522 const UnicodeString *strPtr;
523 if(symbol < kFormatSymbolCount) {
524 strPtr = &fSymbols[symbol];
525 } else {
526 strPtr = &fNoSymbol;
527 }
528 return *strPtr;
529 }
530
531 // See comments above for this function. Not hidden with #ifdef U_HIDE_INTERNAL_API
532 inline const UnicodeString &
533 DecimalFormatSymbols::getConstSymbol(ENumberFormatSymbol symbol) const {
534 const UnicodeString *strPtr;
535 if(symbol < kFormatSymbolCount) {
536 strPtr = &fSymbols[symbol];
537 } else {
538 strPtr = &fNoSymbol;
539 }
540 return *strPtr;
541 }
542
543 #ifndef U_HIDE_INTERNAL_API
544 inline const UnicodeString& DecimalFormatSymbols::getConstDigitSymbol(int32_t digit) const {
545 if (digit < 0 || digit > 9) {
546 digit = 0;
547 }
548 if (digit == 0) {
549 return fSymbols[kZeroDigitSymbol];
550 }
551 ENumberFormatSymbol key = static_cast<ENumberFormatSymbol>(kOneDigitSymbol + digit - 1);
552 return fSymbols[key];
553 }
554 #endif /* U_HIDE_INTERNAL_API */
555
556 // -------------------------------------
557
558 inline void
559 DecimalFormatSymbols::setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propagateDigits = true) {
560 if (symbol == kCurrencySymbol) {
561 fIsCustomCurrencySymbol = true;
562 }
563 else if (symbol == kIntlCurrencySymbol) {
564 fIsCustomIntlCurrencySymbol = true;
565 }
566 if(symbol<kFormatSymbolCount) {
567 fSymbols[symbol]=value;
568 }
569
570 // If the zero digit is being set to a known zero digit according to Unicode,
571 // then we automatically set the corresponding 1-9 digits
572 // Also record updates to fCodePointZero. Be conservative if in doubt.
573 if (symbol == kZeroDigitSymbol) {
574 UChar32 sym = value.char32At(0);
575 if ( propagateDigits && u_charDigitValue(sym) == 0 && value.countChar32() == 1 ) {
576 fCodePointZero = sym;
577 for ( int8_t i = 1 ; i<= 9 ; i++ ) {
578 sym++;
579 fSymbols[(int)kOneDigitSymbol+i-1] = UnicodeString(sym);
580 }
581 } else {
582 fCodePointZero = -1;
583 }
584 } else if (symbol >= kOneDigitSymbol && symbol <= kNineDigitSymbol) {
585 fCodePointZero = -1;
586 }
587 }
588
589 // -------------------------------------
590
591 inline Locale
592 DecimalFormatSymbols::getLocale() const {
593 return locale;
594 }
595
596 #ifndef U_HIDE_INTERNAL_API
597 inline const char16_t*
598 DecimalFormatSymbols::getCurrencyPattern() const {
599 return currPattern;
600 }
601 inline const char*
602 DecimalFormatSymbols::getNumberingSystemName() const {
603 return nsName;
604 }
605 #endif /* U_HIDE_INTERNAL_API */
606
607 U_NAMESPACE_END
608
609 #endif /* #if !UCONFIG_NO_FORMATTING */
610
611 #endif /* U_SHOW_CPLUSPLUS_API */
612
613 #endif // _DCFMTSYM
614 //eof
icu::DecimalFormatSymbols
This class represents the set of symbols needed by DecimalFormat to format numbers.
Definition: dcfmtsym.h:86
icu::DecimalFormatSymbols::setPatternForCurrencySpacing
void setPatternForCurrencySpacing(UCurrencySpacing type, UBool beforeCurrency, const UnicodeString &pattern)
Set pattern string for 'CurrencySpacing' that can be applied to currency format.
icu::DecimalFormatSymbols::isCustomCurrencySymbol
UBool isCustomCurrencySymbol() const
Definition: dcfmtsym.h:400
icu::DecimalFormatSymbols::operator==
bool operator==(const DecimalFormatSymbols &other) const
Return true if another object is semantically equal to this one.
icu::DecimalFormatSymbols::~DecimalFormatSymbols
virtual ~DecimalFormatSymbols()
Destructor.
icu::DecimalFormatSymbols::getPatternForCurrencySpacing
const UnicodeString & getPatternForCurrencySpacing(UCurrencySpacing type, UBool beforeCurrency, UErrorCode &status) const
Get pattern string for 'CurrencySpacing' that can be applied to currency format.
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
Locale getLocale(ULocDataLocaleType type, UErrorCode &status) const
Returns the locale for this object.
icu::DecimalFormatSymbols::getDynamicClassID
virtual UClassID getDynamicClassID() const override
ICU "poor man's RTTI", returns a UClassID for the actual class.
icu::DecimalFormatSymbols::getStaticClassID
static UClassID getStaticClassID()
ICU "poor man's RTTI", returns a UClassID for this class.
icu::DecimalFormatSymbols::DecimalFormatSymbols
DecimalFormatSymbols(UErrorCode &status)
Create a DecimalFormatSymbols object for the default locale.
icu::DecimalFormatSymbols::DecimalFormatSymbols
DecimalFormatSymbols(const Locale &locale, UErrorCode &status)
Create a DecimalFormatSymbols object for the given locale.
icu::DecimalFormatSymbols::setCurrency
void setCurrency(const char16_t *currency, UErrorCode &status)
Loads symbols for the specified currency into this instance.
icu::DecimalFormatSymbols::DecimalFormatSymbols
DecimalFormatSymbols(const DecimalFormatSymbols &)
Copy constructor.
icu::DecimalFormatSymbols::operator!=
bool operator!=(const DecimalFormatSymbols &other) const
Return true if another object is semantically unequal to this one.
Definition: dcfmtsym.h:273
icu::DecimalFormatSymbols::createWithLastResortData
static DecimalFormatSymbols * createWithLastResortData(UErrorCode &status)
Creates a DecimalFormatSymbols object with last-resort data.
icu::DecimalFormatSymbols::getCodePointZero
UChar32 getCodePointZero() const
Definition: dcfmtsym.h:414
icu::DecimalFormatSymbols::operator=
DecimalFormatSymbols & operator=(const DecimalFormatSymbols &)
Assignment operator.
icu::DecimalFormatSymbols::DecimalFormatSymbols
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::isCustomIntlCurrencySymbol
UBool isCustomIntlCurrencySymbol() const
Definition: dcfmtsym.h:407
icu::Locale
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:195
icu::NumberingSystem
Defines numbering systems.
Definition: numsys.h:60
icu::UObject
UObject is the common ICU "boilerplate" class.
Definition: uobject.h:223
icu::UnicodeString
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:296
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_EXPORT 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.
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
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:427
UBool
int8_t UBool
The ICU boolean type, a signed-byte integer.
Definition: umachine.h:247
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:415
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