00001 /* 00002 ******************************************************************************** 00003 * Copyright (C) 1997-1999, International Business Machines 00004 * Corporation and others. All Rights Reserved. 00005 ******************************************************************************** 00006 * 00007 * File DCFMTSYM.H 00008 * 00009 * Modification History: 00010 * 00011 * Date Name Description 00012 * 02/19/97 aliu Converted from java. 00013 * 03/18/97 clhuang Updated per C++ implementation. 00014 * 03/27/97 helena Updated to pass the simple test after code review. 00015 * 08/26/97 aliu Added currency/intl currency symbol support. 00016 * 07/22/98 stephen Changed to match C++ style 00017 * currencySymbol -> fCurrencySymbol 00018 * Constants changed from CAPS to kCaps 00019 * 06/24/99 helena Integrated Alan's NF enhancements and Java2 bug fixes 00020 ******************************************************************************** 00021 */ 00022 00023 #ifndef DCFMTSYM_H 00024 #define DCFMTSYM_H 00025 00026 #include "unicode/utypes.h" 00027 #include "unicode/locid.h" 00028 00067 class U_I18N_API DecimalFormatSymbols { 00068 public: 00073 enum ENumberFormatSymbol { 00075 kDecimalSeparatorSymbol, 00077 kGroupingSeparatorSymbol, 00079 kPatternSeparatorSymbol, 00081 kPercentSymbol, 00083 kZeroDigitSymbol, 00085 kDigitSymbol, 00087 kMinusSignSymbol, 00089 kPlusSignSymbol, 00091 kCurrencySymbol, 00093 kIntlCurrencySymbol, 00095 kMonetarySeparatorSymbol, 00097 kExponentialSymbol, 00099 kPermillSymbol, 00101 kPadEscapeSymbol, 00103 kInfinitySymbol, 00105 kNaNSymbol, 00107 kFormatSymbolCount 00108 }; 00109 00118 DecimalFormatSymbols(const Locale& locale, UErrorCode& status); 00119 00130 DecimalFormatSymbols( UErrorCode& status); 00131 00136 DecimalFormatSymbols(const DecimalFormatSymbols&); 00137 00142 DecimalFormatSymbols& operator=(const DecimalFormatSymbols&); 00143 00148 ~DecimalFormatSymbols(); 00149 00154 UBool operator==(const DecimalFormatSymbols& other) const; 00155 00160 UBool operator!=(const DecimalFormatSymbols& other) const { return !operator==(other); } 00161 00168 UnicodeString getSymbol(ENumberFormatSymbol symbol) const; 00169 00176 void setSymbol(ENumberFormatSymbol symbol, UnicodeString value); 00177 00184 UChar getZeroDigit(void) const; 00191 void setZeroDigit(UChar zeroDigit); 00192 00199 UChar getGroupingSeparator(void) const; 00206 void setGroupingSeparator(UChar groupingSeparator); 00207 00214 UChar getDecimalSeparator(void) const; 00221 void setDecimalSeparator(UChar decimalSeparator); 00222 00229 UChar getPerMill(void) const; 00236 void setPerMill(UChar permill); 00237 00244 UChar getPercent(void) const; 00251 void setPercent(UChar percent); 00252 00259 UChar getDigit(void) const; 00266 void setDigit(UChar digit); 00267 00275 UChar getPatternSeparator(void) const; 00283 void setPatternSeparator(UChar patternSeparator); 00284 00290 UnicodeString& getInfinity(UnicodeString& result) const; 00296 void setInfinity(const UnicodeString& infinity); 00303 int32_t compareInfinity(const UnicodeString& text, UTextOffset offset) const; 00304 00310 UnicodeString& getNaN(UnicodeString& result) const; 00316 void setNaN(const UnicodeString& NaN); 00323 int32_t compareNaN(const UnicodeString& text, UTextOffset offset) const; 00324 00331 UChar getPlusSign(void) const; 00338 void setPlusSign(UChar minusSign); 00339 00348 UChar getMinusSign(void) const; 00357 void setMinusSign(UChar minusSign); 00358 00366 UChar getExponentialSymbol(void) const; 00374 void setExponentialSymbol(UChar exponential); 00375 00380 UnicodeString& getCurrencySymbol(UnicodeString& result) const; 00385 void setCurrencySymbol(const UnicodeString& currency); 00393 int32_t compareCurrencySymbol(const UnicodeString& text, UTextOffset offset) const; 00394 00399 UnicodeString& getInternationalCurrencySymbol(UnicodeString& result) const; 00404 void setInternationalCurrencySymbol(const UnicodeString& currency); 00413 int32_t compareInternationalCurrencySymbol(const UnicodeString& text, UTextOffset offset) const; 00414 00421 UChar getMonetaryDecimalSeparator(void) const; 00428 void setMonetaryDecimalSeparator(UChar sep); 00429 00444 UChar getPadEscape(void) const; 00445 00459 void setPadEscape(UChar c); 00460 00461 private: 00467 void initialize(const Locale& locale, UErrorCode& success, UBool useLastResortData = FALSE); 00468 00473 void initialize(const UnicodeString* numberElements, const UnicodeString* currencyElements); 00474 00478 void initialize(); 00479 00480 UnicodeString fSymbols[kFormatSymbolCount]; 00481 }; 00482 00483 00484 // ------------------------------------- 00485 00486 inline UnicodeString 00487 DecimalFormatSymbols::getSymbol(ENumberFormatSymbol symbol) const { 00488 if(symbol<kFormatSymbolCount) { 00489 return fSymbols[symbol]; 00490 } else { 00491 return UnicodeString(); 00492 } 00493 } 00494 00495 // ------------------------------------- 00496 00497 inline void 00498 DecimalFormatSymbols::setSymbol(ENumberFormatSymbol symbol, UnicodeString value) { 00499 if(symbol<kFormatSymbolCount) { 00500 fSymbols[symbol]=value; 00501 } 00502 } 00503 00504 // ------------------------------------- 00505 00506 inline UChar 00507 DecimalFormatSymbols::getZeroDigit() const 00508 { 00509 return fSymbols[kZeroDigitSymbol].charAt(0); 00510 } 00511 00512 // ------------------------------------- 00513 00514 inline void 00515 DecimalFormatSymbols::setZeroDigit(UChar zeroDigit) 00516 { 00517 fSymbols[kZeroDigitSymbol] = zeroDigit; 00518 } 00519 00520 // ------------------------------------- 00521 00522 inline UChar 00523 DecimalFormatSymbols::getGroupingSeparator() const 00524 { 00525 return fSymbols[kGroupingSeparatorSymbol].charAt(0); 00526 } 00527 00528 // ------------------------------------- 00529 00530 inline void 00531 DecimalFormatSymbols::setGroupingSeparator(UChar groupingSeparator) 00532 { 00533 fSymbols[kGroupingSeparatorSymbol] = groupingSeparator; 00534 } 00535 00536 // ------------------------------------- 00537 00538 inline UChar 00539 DecimalFormatSymbols::getDecimalSeparator() const 00540 { 00541 return fSymbols[kDecimalSeparatorSymbol].charAt(0); 00542 } 00543 00544 // ------------------------------------- 00545 00546 inline void 00547 DecimalFormatSymbols::setDecimalSeparator(UChar decimalSeparator) 00548 { 00549 fSymbols[kDecimalSeparatorSymbol] = decimalSeparator; 00550 } 00551 00552 // ------------------------------------- 00553 00554 inline UChar 00555 DecimalFormatSymbols::getPerMill() const 00556 { 00557 return fSymbols[kPermillSymbol].charAt(0); 00558 } 00559 00560 // ------------------------------------- 00561 00562 inline void 00563 DecimalFormatSymbols::setPerMill(UChar permill) 00564 { 00565 fSymbols[kPermillSymbol] = permill; 00566 } 00567 00568 // ------------------------------------- 00569 00570 inline UChar 00571 DecimalFormatSymbols::getPercent() const 00572 { 00573 return fSymbols[kPercentSymbol].charAt(0); 00574 } 00575 00576 // ------------------------------------- 00577 00578 inline void 00579 DecimalFormatSymbols::setPercent(UChar percent) 00580 { 00581 fSymbols[kPercentSymbol] = percent; 00582 } 00583 00584 // ------------------------------------- 00585 00586 inline UChar 00587 DecimalFormatSymbols::getDigit() const 00588 { 00589 return fSymbols[kDigitSymbol].charAt(0); 00590 } 00591 00592 // ------------------------------------- 00593 00594 inline void 00595 DecimalFormatSymbols::setDigit(UChar digit) 00596 { 00597 fSymbols[kDigitSymbol] = digit; 00598 } 00599 00600 // ------------------------------------- 00601 00602 inline UChar 00603 DecimalFormatSymbols::getPatternSeparator() const 00604 { 00605 return fSymbols[kPatternSeparatorSymbol].charAt(0); 00606 } 00607 00608 // ------------------------------------- 00609 00610 inline void 00611 DecimalFormatSymbols::setPatternSeparator(UChar patternSeparator) 00612 { 00613 fSymbols[kPatternSeparatorSymbol] = patternSeparator; 00614 } 00615 00616 // ------------------------------------- 00617 00618 inline UnicodeString& 00619 DecimalFormatSymbols::getInfinity(UnicodeString& result) const 00620 { 00621 return result = fSymbols[kInfinitySymbol]; 00622 } 00623 00624 // ------------------------------------- 00625 00626 inline void 00627 DecimalFormatSymbols::setInfinity(const UnicodeString& infinity) 00628 { 00629 fSymbols[kInfinitySymbol] = infinity; 00630 } 00631 00632 // ------------------------------------- 00633 00634 inline int32_t 00635 DecimalFormatSymbols::compareInfinity(const UnicodeString& text, 00636 UTextOffset offset) const 00637 { 00638 return text.compare(offset, 00639 fSymbols[kInfinitySymbol].length(), 00640 fSymbols[kInfinitySymbol], 00641 0, 00642 fSymbols[kInfinitySymbol].length()) 00643 ? 0 : fSymbols[kInfinitySymbol].length(); 00644 } 00645 00646 // ------------------------------------- 00647 00648 inline UnicodeString& 00649 DecimalFormatSymbols::getNaN(UnicodeString& result) const 00650 { 00651 return result = fSymbols[kNaNSymbol]; 00652 } 00653 00654 // ------------------------------------- 00655 00656 inline void 00657 DecimalFormatSymbols::setNaN(const UnicodeString& NaN) 00658 { 00659 fSymbols[kNaNSymbol] = NaN; 00660 } 00661 00662 // ------------------------------------- 00663 00664 inline int32_t 00665 DecimalFormatSymbols::compareNaN(const UnicodeString& text, UTextOffset offset) const 00666 { 00667 return text.compare(offset, 00668 fSymbols[kNaNSymbol].length(), 00669 fSymbols[kNaNSymbol], 00670 0, 00671 fSymbols[kNaNSymbol].length()) 00672 ? 0 : fSymbols[kNaNSymbol].length(); 00673 } 00674 00675 // ------------------------------------- 00676 00677 inline UChar 00678 DecimalFormatSymbols::getPlusSign() const 00679 { 00680 return fSymbols[kPlusSignSymbol].charAt(0); 00681 } 00682 00683 // ------------------------------------- 00684 00685 inline void 00686 DecimalFormatSymbols::setPlusSign(UChar plusSign) 00687 { 00688 fSymbols[kPlusSignSymbol] = plusSign; 00689 } 00690 00691 // ------------------------------------- 00692 00693 inline UChar 00694 DecimalFormatSymbols::getMinusSign() const 00695 { 00696 return fSymbols[kMinusSignSymbol].charAt(0); 00697 } 00698 00699 // ------------------------------------- 00700 00701 inline void 00702 DecimalFormatSymbols::setMinusSign(UChar minusSign) 00703 { 00704 fSymbols[kMinusSignSymbol] = minusSign; 00705 } 00706 00707 // ------------------------------------- 00708 00709 inline UChar 00710 DecimalFormatSymbols::getExponentialSymbol(void) const 00711 { 00712 return fSymbols[kExponentialSymbol].charAt(0); 00713 } 00714 00715 // ------------------------------------- 00716 00717 inline void 00718 DecimalFormatSymbols::setExponentialSymbol(UChar exponential) 00719 { 00720 fSymbols[kExponentialSymbol] = exponential; 00721 } 00722 00723 // ------------------------------------- 00724 00725 inline UnicodeString& 00726 DecimalFormatSymbols::getCurrencySymbol(UnicodeString& result) const 00727 { 00728 return result = fSymbols[kCurrencySymbol]; 00729 } 00730 00731 // ------------------------------------- 00732 00733 inline void 00734 DecimalFormatSymbols::setCurrencySymbol(const UnicodeString& str) 00735 { 00736 fSymbols[kCurrencySymbol] = str; 00737 } 00738 00739 // ------------------------------------- 00740 00741 inline int32_t 00742 DecimalFormatSymbols::compareCurrencySymbol(const UnicodeString& text, 00743 UTextOffset offset) const 00744 { 00745 return text.compare(offset, 00746 fSymbols[kCurrencySymbol].length(), 00747 fSymbols[kCurrencySymbol], 00748 0, 00749 fSymbols[kCurrencySymbol].length()) 00750 ? 0 : fSymbols[kCurrencySymbol].length(); 00751 } 00752 00753 // ------------------------------------- 00754 00755 inline UnicodeString& 00756 DecimalFormatSymbols::getInternationalCurrencySymbol(UnicodeString& result) const 00757 { 00758 return result = fSymbols[kIntlCurrencySymbol]; 00759 } 00760 00761 // ------------------------------------- 00762 00763 inline void 00764 DecimalFormatSymbols::setInternationalCurrencySymbol(const UnicodeString& str) 00765 { 00766 fSymbols[kIntlCurrencySymbol] = str; 00767 } 00768 00769 // ------------------------------------- 00770 00771 inline int32_t 00772 DecimalFormatSymbols::compareInternationalCurrencySymbol(const UnicodeString& text, 00773 UTextOffset offset) const 00774 { 00775 return text.compare(offset, 00776 fSymbols[kIntlCurrencySymbol].length(), 00777 fSymbols[kIntlCurrencySymbol], 00778 0, 00779 fSymbols[kIntlCurrencySymbol].length()) 00780 ? 0 : fSymbols[kIntlCurrencySymbol].length(); 00781 } 00782 00783 // ------------------------------------- 00784 00785 inline UChar 00786 DecimalFormatSymbols::getMonetaryDecimalSeparator(void) const 00787 { 00788 return fSymbols[kMonetarySeparatorSymbol].charAt(0); 00789 } 00790 00791 // ------------------------------------- 00792 00793 inline void 00794 DecimalFormatSymbols::setMonetaryDecimalSeparator(UChar sep) 00795 { 00796 fSymbols[kMonetarySeparatorSymbol] = sep; 00797 } 00798 00799 inline UChar DecimalFormatSymbols::getPadEscape(void) const { 00800 return fSymbols[kPadEscapeSymbol].charAt(0); 00801 } 00802 00803 inline void DecimalFormatSymbols::setPadEscape(UChar c) { 00804 fSymbols[kPadEscapeSymbol] = c; 00805 } 00806 00807 #endif // _DCFMTSYM 00808 //eof