ICU 56.1  56.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
dcfmtsym.h
Go to the documentation of this file.
1 /*
2 ********************************************************************************
3 * Copyright (C) 1997-2015, 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 
44 
85 public:
171  kFormatSymbolCount = kNineDigitSymbol + 2
172  };
173 
182  DecimalFormatSymbols(const Locale& locale, UErrorCode& status);
183 
195 
211  static DecimalFormatSymbols* createWithLastResortData(UErrorCode& status);
212 
218 
223  DecimalFormatSymbols& operator=(const DecimalFormatSymbols&);
224 
229  virtual ~DecimalFormatSymbols();
230 
238  UBool operator==(const DecimalFormatSymbols& other) const;
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 
285  Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
286 
303  const UnicodeString& getPatternForCurrencySpacing(UCurrencySpacing type,
304  UBool beforeCurrency,
305  UErrorCode& status) const;
316  void setPatternForCurrencySpacing(UCurrencySpacing type,
317  UBool beforeCurrency,
318  const UnicodeString& pattern);
319 
325  virtual UClassID getDynamicClassID() const;
326 
332  static UClassID U_EXPORT2 getStaticClassID();
333 
334 private:
336 
347  void initialize(const Locale& locale, UErrorCode& success, UBool useLastResortData = FALSE);
348 
352  void initialize();
353 
354  void setCurrencyForSymbols();
355 
356 public:
357 
358 #ifndef U_HIDE_INTERNAL_API
359 
362  inline UBool isCustomCurrencySymbol() const {
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
389 
393  inline const UChar* getCurrencyPattern(void) const;
394 #endif /* U_HIDE_INTERNAL_API */
395 
396 private:
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 
434 inline UnicodeString
435 DecimalFormatSymbols::getSymbol(ENumberFormatSymbol symbol) const {
436  const UnicodeString *strPtr;
437  if(symbol < kFormatSymbolCount) {
438  strPtr = &fSymbols[symbol];
439  } else {
440  strPtr = &fNoSymbol;
441  }
442  return *strPtr;
443 }
444 
445 //#ifndef U_HIDE_INTERNAL_API
446 // See comments above for this function. Not hidden.
447 inline const UnicodeString &
448 DecimalFormatSymbols::getConstSymbol(ENumberFormatSymbol symbol) const {
449  const UnicodeString *strPtr;
450  if(symbol < kFormatSymbolCount) {
451  strPtr = &fSymbols[symbol];
452  } else {
453  strPtr = &fNoSymbol;
454  }
455  return *strPtr;
456 }
457 
458 //#endif /* U_HIDE_INTERNAL_API */
459 
460 
461 // -------------------------------------
462 
463 inline void
464 DecimalFormatSymbols::setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propogateDigits = TRUE) {
465  if (symbol == kCurrencySymbol) {
466  fIsCustomCurrencySymbol = TRUE;
467  }
468  else if (symbol == kIntlCurrencySymbol) {
469  fIsCustomIntlCurrencySymbol = TRUE;
470  }
471  if(symbol<kFormatSymbolCount) {
472  fSymbols[symbol]=value;
473  }
474 
475  // If the zero digit is being set to a known zero digit according to Unicode,
476  // then we automatically set the corresponding 1-9 digits
477  if ( propogateDigits && symbol == kZeroDigitSymbol && value.countChar32() == 1 ) {
478  UChar32 sym = value.char32At(0);
479  if ( u_charDigitValue(sym) == 0 ) {
480  for ( int8_t i = 1 ; i<= 9 ; i++ ) {
481  sym++;
482  fSymbols[(int)kOneDigitSymbol+i-1] = UnicodeString(sym);
483  }
484  }
485  }
486 }
487 
488 // -------------------------------------
489 
490 inline Locale
491 DecimalFormatSymbols::getLocale() const {
492  return locale;
493 }
494 
495 #ifndef U_HIDE_INTERNAL_API
496 inline const UChar*
497 DecimalFormatSymbols::getCurrencyPattern() const {
498  return currPattern;
499 }
500 #endif /* U_HIDE_INTERNAL_API */
501 
503 
504 #endif /* #if !UCONFIG_NO_FORMATTING */
505 
506 #endif // _DCFMTSYM
507 //eof