ICU 57.1 57.1
dcfmtsym.h
Go to the documentation of this file.
1/*
2********************************************************************************
3* Copyright (C) 1997-2016, 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
41
42
44
85public:
173
182 DecimalFormatSymbols(const Locale& locale, UErrorCode& status);
183
195
212
218
224
230
239
247 UBool operator!=(const DecimalFormatSymbols& other) const { return !operator==(other); }
248
258 inline UnicodeString getSymbol(ENumberFormatSymbol symbol) const;
259
272 void setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propogateDigits);
273
278 inline Locale getLocale() const;
279
286
304 UBool beforeCurrency,
305 UErrorCode& status) const;
317 UBool beforeCurrency,
318 const UnicodeString& pattern);
319
326
332 static UClassID U_EXPORT2 getStaticClassID();
333
334private:
336
347 void initialize(const Locale& locale, UErrorCode& success, UBool useLastResortData = FALSE);
348
352 void initialize();
353
354 void setCurrencyForSymbols();
355
356public:
357
358#ifndef U_HIDE_INTERNAL_API
363 return fIsCustomCurrencySymbol;
364 }
365
370 return fIsCustomIntlCurrencySymbol;
371 }
372#endif /* U_HIDE_INTERNAL_API */
373
386 inline const UnicodeString &getConstSymbol(ENumberFormatSymbol symbol) const;
387
388#ifndef U_HIDE_INTERNAL_API
393 inline const UChar* getCurrencyPattern(void) const;
394#endif /* U_HIDE_INTERNAL_API */
395
396private:
412 UnicodeString fSymbols[kFormatSymbolCount];
413
418 UnicodeString fNoSymbol;
419
420 Locale locale;
421
422 char actualLocale[ULOC_FULLNAME_CAPACITY];
423 char validLocale[ULOC_FULLNAME_CAPACITY];
424 const UChar* currPattern;
425
426 UnicodeString currencySpcBeforeSym[UNUM_CURRENCY_SPACING_COUNT];
427 UnicodeString currencySpcAfterSym[UNUM_CURRENCY_SPACING_COUNT];
428 UBool fIsCustomCurrencySymbol;
429 UBool fIsCustomIntlCurrencySymbol;
430};
431
432// -------------------------------------
433
434inline UnicodeString
436 const UnicodeString *strPtr;
437 if(symbol < kFormatSymbolCount) {
438 strPtr = &fSymbols[symbol];
439 } else {
440 strPtr = &fNoSymbol;
441 }
442 return *strPtr;
443}
444
445// See comments above for this function. Not hidden with #ifndef U_HIDE_INTERNAL_API
446inline const UnicodeString &
448 const UnicodeString *strPtr;
449 if(symbol < kFormatSymbolCount) {
450 strPtr = &fSymbols[symbol];
451 } else {
452 strPtr = &fNoSymbol;
453 }
454 return *strPtr;
455}
456
457// -------------------------------------
458
459inline void
460DecimalFormatSymbols::setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propogateDigits = TRUE) {
461 if (symbol == kCurrencySymbol) {
462 fIsCustomCurrencySymbol = TRUE;
463 }
464 else if (symbol == kIntlCurrencySymbol) {
465 fIsCustomIntlCurrencySymbol = TRUE;
466 }
467 if(symbol<kFormatSymbolCount) {
468 fSymbols[symbol]=value;
469 }
470
471 // If the zero digit is being set to a known zero digit according to Unicode,
472 // then we automatically set the corresponding 1-9 digits
473 if ( propogateDigits && symbol == kZeroDigitSymbol && value.countChar32() == 1 ) {
474 UChar32 sym = value.char32At(0);
475 if ( u_charDigitValue(sym) == 0 ) {
476 for ( int8_t i = 1 ; i<= 9 ; i++ ) {
477 sym++;
478 fSymbols[(int)kOneDigitSymbol+i-1] = UnicodeString(sym);
479 }
480 }
481 }
482}
483
484// -------------------------------------
485
486inline Locale
488 return locale;
489}
490
491#ifndef U_HIDE_INTERNAL_API
492inline const UChar*
494 return currPattern;
495}
496#endif /* U_HIDE_INTERNAL_API */
497
499
500#endif /* #if !UCONFIG_NO_FORMATTING */
501
502#endif // _DCFMTSYM
503//eof
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:447
DecimalFormatSymbols & operator=(const DecimalFormatSymbols &)
Assignment operator.
UBool isCustomIntlCurrencySymbol() const
Definition dcfmtsym.h:369
ENumberFormatSymbol
Constants for specifying a number format symbol.
Definition dcfmtsym.h:90
@ kPerMillSymbol
Per mill symbol - replaces kPermillSymbol.
Definition dcfmtsym.h:116
@ kInfinitySymbol
Infinity symbol.
Definition dcfmtsym.h:120
@ kGroupingSeparatorSymbol
The grouping separator.
Definition dcfmtsym.h:94
@ kMonetarySeparatorSymbol
The monetary separator.
Definition dcfmtsym.h:112
@ kPlusSignSymbol
The plus sign.
Definition dcfmtsym.h:106
@ kSevenDigitSymbol
Seven.
Definition dcfmtsym.h:157
@ kNaNSymbol
Nan symbol.
Definition dcfmtsym.h:122
@ kSignificantDigitSymbol
Significant digit symbol.
Definition dcfmtsym.h:125
@ kPercentSymbol
The percent sign.
Definition dcfmtsym.h:98
@ kThreeDigitSymbol
Three.
Definition dcfmtsym.h:141
@ kPadEscapeSymbol
Escape padding character.
Definition dcfmtsym.h:118
@ kExponentMultiplicationSymbol
Multiplication sign.
Definition dcfmtsym.h:169
@ kEightDigitSymbol
Eight.
Definition dcfmtsym.h:161
@ kDigitSymbol
Character representing a digit in the pattern.
Definition dcfmtsym.h:102
@ kCurrencySymbol
The currency symbol.
Definition dcfmtsym.h:108
@ kMinusSignSymbol
The minus sign.
Definition dcfmtsym.h:104
@ kIntlCurrencySymbol
The international currency symbol.
Definition dcfmtsym.h:110
@ kMonetaryGroupingSeparatorSymbol
The monetary grouping separator.
Definition dcfmtsym.h:129
@ kPatternSeparatorSymbol
The pattern separator.
Definition dcfmtsym.h:96
@ kExponentialSymbol
The exponential symbol.
Definition dcfmtsym.h:114
@ kDecimalSeparatorSymbol
The decimal separator.
Definition dcfmtsym.h:92
@ kFormatSymbolCount
count symbol constants
Definition dcfmtsym.h:171
DecimalFormatSymbols(const DecimalFormatSymbols &)
Copy constructor.
Locale getLocale() const
Returns the locale for which this object was constructed.
Definition dcfmtsym.h:487
static UClassID getStaticClassID()
ICU "poor man's RTTI", returns a UClassID for this class.
virtual UClassID getDynamicClassID() const
ICU "poor man's RTTI", returns a UClassID for the actual class.
UBool operator!=(const DecimalFormatSymbols &other) const
Return true if another object is semantically unequal to this one.
Definition dcfmtsym.h:247
Locale getLocale(ULocDataLocaleType type, UErrorCode &status) const
Returns the locale for this object.
static DecimalFormatSymbols * createWithLastResortData(UErrorCode &status)
Creates a DecimalFormatSymbols object with last-resort data.
void setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propogateDigits)
Set one of the format symbols by its enum constant.
Definition dcfmtsym.h:460
DecimalFormatSymbols(UErrorCode &status)
Create a DecimalFormatSymbols object for the default locale.
void setPatternForCurrencySpacing(UCurrencySpacing type, UBool beforeCurrency, const UnicodeString &pattern)
Set pattern string for 'CurrencySpacing' that can be applied to currency format.
DecimalFormatSymbols(const Locale &locale, UErrorCode &status)
Create a DecimalFormatSymbols object for the given locale.
virtual ~DecimalFormatSymbols()
Destructor.
const UnicodeString & getPatternForCurrencySpacing(UCurrencySpacing type, UBool beforeCurrency, UErrorCode &status) const
Get pattern string for 'CurrencySpacing' that can be applied to currency format.
UnicodeString getSymbol(ENumberFormatSymbol symbol) const
Get one of the format symbols by its enum constant.
Definition dcfmtsym.h:435
UBool isCustomCurrencySymbol() const
Definition dcfmtsym.h:362
UBool operator==(const DecimalFormatSymbols &other) const
Return true if another object is semantically equal to this one.
const UChar * getCurrencyPattern(void) const
Returns that pattern stored in currecy info.
Definition dcfmtsym.h:493
A Locale object represents a specific geographical, political, or cultural region.
Definition locid.h:185
UObject is the common ICU "boilerplate" class.
Definition uobject.h:221
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition unistr.h:294
int32_t countChar32(int32_t start=0, int32_t length=INT32_MAX) const
Count Unicode code points in the length UChar code units of the string.
UChar32 char32At(int32_t offset) const
Return the code point that contains the code unit at offset offset.
C++ API: Locale ID object.
U_EXPORT UBool operator==(const StringPiece &x, const StringPiece &y)
Global operator == for StringPiece.
C API: Unicode Properties.
int32_t u_charDigitValue(UChar32 c)
Returns the decimal digit value of a decimal digit character.
#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:262
ULocDataLocaleType
Constants for *_getLocale() Allow user to select whether she wants information on requested,...
Definition uloc.h:336
int32_t UChar32
Define UChar32 as a type for single Unicode code points.
Definition umachine.h:332
int8_t UBool
The ICU boolean type.
Definition umachine.h:234
#define TRUE
The TRUE value of a UBool.
Definition umachine.h:238
#define FALSE
The FALSE value of a UBool.
Definition umachine.h:242
uint16_t UChar
Define UChar to be UCHAR_TYPE, if that is #defined (for example, to char16_t), or wchar_t if that is ...
Definition umachine.h:312
C API: NumberFormat.
UCurrencySpacing
Constants for specifying currency spacing.
Definition unum.h:319
@ UNUM_CURRENCY_SPACING_COUNT
Definition unum.h:327
C++ API: Common ICU base class UObject.
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition uobject.h:91
Basic definitions for ICU, for both C and C++ APIs.
UErrorCode
Error code to replace exception handling, so that the code is compatible with all C++ compilers,...
Definition utypes.h:476
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside.
Definition utypes.h:358
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition uversion.h:130
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition uversion.h:129