ICU 76.1: i18n/unicode/dcfmtsym.h Source File

ICU 76.1 76.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
49U_NAMESPACE_BEGIN
50
86 class U_I18N_API DecimalFormatSymbols : public UObject {
87public:
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
371private:
372 DecimalFormatSymbols();
373
386 void initialize(const Locale& locale, UErrorCode& success,
387 UBool useLastResortData = false, const NumberingSystem* ns = nullptr);
388
392 void initialize();
393
394public:
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
467private:
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
520inline UnicodeString
521DecimalFormatSymbols::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
532inline const UnicodeString &
533DecimalFormatSymbols::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
558inline void
559DecimalFormatSymbols::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[static_cast<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
591inline Locale
592DecimalFormatSymbols::getLocale() const {
593 return locale;
594}
595
596#ifndef U_HIDE_INTERNAL_API
597inline const char16_t*
598DecimalFormatSymbols::getCurrencyPattern() const {
599 return currPattern;
600}
601inline const char*
602DecimalFormatSymbols::getNumberingSystemName() const {
603 return nsName;
604}
605#endif /* U_HIDE_INTERNAL_API */
606
607U_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::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::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::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::getCodePointZero
UChar32 getCodePointZero() const
Definition dcfmtsym.h:414
icu::DecimalFormatSymbols::operator=
DecimalFormatSymbols & operator=(const DecimalFormatSymbols &)
Assignment operator.
icu::DecimalFormatSymbols::createWithLastResortData
static DecimalFormatSymbols * createWithLastResortData(UErrorCode &status)
Creates a DecimalFormatSymbols object with last-resort data.
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:430
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