"Fossies" - the Fresh Open Source Software Archive

Member "dcfmtsym_8h_source.html" (3 Oct 2019, 82194 Bytes) of package /linux/misc/icu4c-65_1-docs.zip:


Caution: In this restricted "Fossies" environment the current HTML page may not be correctly presentated and may have some non-functional links. You can here alternatively try to browse the pure source code or just view or download the uninterpreted raw source code. If the rendering is insufficient you may try to find and view the page on the project site itself.

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 
87 public:
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 
215 
231  static DecimalFormatSymbols* createWithLastResortData(UErrorCode& status);
232 
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:
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 
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
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 &
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
571  return locale;
572 }
573 
574 #ifndef U_HIDE_INTERNAL_API
575 inline const char16_t*
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
UBool isCustomCurrencySymbol() const
Definition: dcfmtsym.h:385
This class represents the set of symbols needed by DecimalFormat to format numbers.
Definition: dcfmtsym.h:86
Escape padding character.
Definition: dcfmtsym.h:120
The international currency symbol.
Definition: dcfmtsym.h:112
C++ API: Unicode String.
U_EXPORT UBool operator==(const StringPiece &x, const StringPiece &y)
Global operator == for StringPiece.
Locale getLocale() const
Returns the locale for which this object was constructed.
Definition: dcfmtsym.h:570
const char16_t * getCurrencyPattern(void) const
Returns that pattern stored in currecy info.
Definition: dcfmtsym.h:576
Defines numbering systems.
Definition: numsys.h:60
UCurrencySpacing
Constants for specifying currency spacing.
Definition: unum.h:331
void * UClassID
UClassID is used to identify classes without using the compiler&#39;s RTTI.
Definition: uobject.h:96
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:264
void setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propogateDigits)
Set one of the format symbols by its enum constant.
Definition: dcfmtsym.h:537
UChar32 getCodePointZero() const
Definition: dcfmtsym.h:399
ENumberFormatSymbol
Constants for specifying a number format symbol.
Definition: dcfmtsym.h:92
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside...
Definition: utypes.h:301
UnicodeString getSymbol(ENumberFormatSymbol symbol) const
Get one of the format symbols by its enum constant.
Definition: dcfmtsym.h:499
int32_t UChar32
Define UChar32 as a type for single Unicode code points.
Definition: umachine.h:425
virtual UClassID getDynamicClassID() const
ICU4C "poor man&#39;s RTTI", returns a UClassID for the actual ICU class.
#define TRUE
The TRUE value of a UBool.
Definition: umachine.h:265
C++ API: NumberingSystem object.
C API: Unicode Properties.
C++ API: Common ICU base class UObject.
UBool isCustomIntlCurrencySymbol() const
Definition: dcfmtsym.h:392
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
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Definition: utypes.h:415
ULocDataLocaleType
Constants for *_getLocale() Allow user to select whether she wants information on requested...
Definition: uloc.h:338
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.
C++ API: Locale ID object.
Basic definitions for ICU, for both C and C++ APIs.
Character representing a digit in the pattern.
Definition: dcfmtsym.h:104
#define FALSE
The FALSE value of a UBool.
Definition: umachine.h:269
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:294
Per mill symbol - replaces kPermillSymbol.
Definition: dcfmtsym.h:118
UObject is the common ICU "boilerplate" class.
Definition: uobject.h:223
One more than the highest normal UCurrencySpacing value.
Definition: unum.h:346
UBool operator!=(const DecimalFormatSymbols &other) const
Return true if another object is semantically unequal to this one.
Definition: dcfmtsym.h:267
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
UChar32 char32At(int32_t offset) const
Return the code point that contains the code unit at offset offset.
int8_t UBool
The ICU boolean type.
Definition: umachine.h:261
C API: Compatibility APIs for number formatting.
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:195