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 00182 UChar getZeroDigit(void) const; 00187 void setZeroDigit(UChar zeroDigit); 00188 00193 UChar getGroupingSeparator(void) const; 00198 void setGroupingSeparator(UChar groupingSeparator); 00199 00204 UChar getDecimalSeparator(void) const; 00209 void setDecimalSeparator(UChar decimalSeparator); 00210 00215 UChar getPerMill(void) const; 00220 void setPerMill(UChar permill); 00221 00226 UChar getPercent(void) const; 00231 void setPercent(UChar percent); 00232 00237 UChar getDigit(void) const; 00242 void setDigit(UChar digit); 00243 00249 UChar getPatternSeparator(void) const; 00255 void setPatternSeparator(UChar patternSeparator); 00256 00262 UnicodeString& getInfinity(UnicodeString& result) const; 00268 void setInfinity(const UnicodeString& infinity); 00269 00275 UnicodeString& getNaN(UnicodeString& result) const; 00281 void setNaN(const UnicodeString& NaN); 00282 00287 UChar getPlusSign(void) const; 00292 void setPlusSign(UChar minusSign); 00293 00300 UChar getMinusSign(void) const; 00307 void setMinusSign(UChar minusSign); 00308 00314 UChar getExponentialSymbol(void) const; 00320 void setExponentialSymbol(UChar exponential); 00321 00326 UnicodeString& getCurrencySymbol(UnicodeString& result) const; 00331 void setCurrencySymbol(const UnicodeString& currency); 00332 00337 UnicodeString& getInternationalCurrencySymbol(UnicodeString& result) const; 00342 void setInternationalCurrencySymbol(const UnicodeString& currency); 00343 00348 UChar getMonetaryDecimalSeparator(void) const; 00353 void setMonetaryDecimalSeparator(UChar sep); 00354 00367 UChar getPadEscape(void) const; 00368 00380 void setPadEscape(UChar c); 00381 00382 private: 00388 void initialize(const Locale& locale, UErrorCode& success, UBool useLastResortData = FALSE); 00389 00394 void initialize(const UnicodeString* numberElements, const UnicodeString* currencyElements); 00395 00399 void initialize(); 00400 00401 UnicodeString fSymbols[kFormatSymbolCount]; 00402 }; 00403 00404 00405 // ------------------------------------- 00406 00407 inline UnicodeString 00408 DecimalFormatSymbols::getSymbol(ENumberFormatSymbol symbol) const { 00409 if(symbol<kFormatSymbolCount) { 00410 return fSymbols[symbol]; 00411 } else { 00412 return UnicodeString(); 00413 } 00414 } 00415 00416 // ------------------------------------- 00417 00418 inline void 00419 DecimalFormatSymbols::setSymbol(ENumberFormatSymbol symbol, UnicodeString value) { 00420 if(symbol<kFormatSymbolCount) { 00421 fSymbols[symbol]=value; 00422 } 00423 } 00424 00425 // ------------------------------------- 00426 00427 inline UChar 00428 DecimalFormatSymbols::getZeroDigit() const 00429 { 00430 return fSymbols[kZeroDigitSymbol].charAt(0); 00431 } 00432 00433 // ------------------------------------- 00434 00435 inline void 00436 DecimalFormatSymbols::setZeroDigit(UChar zeroDigit) 00437 { 00438 fSymbols[kZeroDigitSymbol] = zeroDigit; 00439 } 00440 00441 // ------------------------------------- 00442 00443 inline UChar 00444 DecimalFormatSymbols::getGroupingSeparator() const 00445 { 00446 return fSymbols[kGroupingSeparatorSymbol].charAt(0); 00447 } 00448 00449 // ------------------------------------- 00450 00451 inline void 00452 DecimalFormatSymbols::setGroupingSeparator(UChar groupingSeparator) 00453 { 00454 fSymbols[kGroupingSeparatorSymbol] = groupingSeparator; 00455 } 00456 00457 // ------------------------------------- 00458 00459 inline UChar 00460 DecimalFormatSymbols::getDecimalSeparator() const 00461 { 00462 return fSymbols[kDecimalSeparatorSymbol].charAt(0); 00463 } 00464 00465 // ------------------------------------- 00466 00467 inline void 00468 DecimalFormatSymbols::setDecimalSeparator(UChar decimalSeparator) 00469 { 00470 fSymbols[kDecimalSeparatorSymbol] = decimalSeparator; 00471 } 00472 00473 // ------------------------------------- 00474 00475 inline UChar 00476 DecimalFormatSymbols::getPerMill() const 00477 { 00478 return fSymbols[kPermillSymbol].charAt(0); 00479 } 00480 00481 // ------------------------------------- 00482 00483 inline void 00484 DecimalFormatSymbols::setPerMill(UChar permill) 00485 { 00486 fSymbols[kPermillSymbol] = permill; 00487 } 00488 00489 // ------------------------------------- 00490 00491 inline UChar 00492 DecimalFormatSymbols::getPercent() const 00493 { 00494 return fSymbols[kPercentSymbol].charAt(0); 00495 } 00496 00497 // ------------------------------------- 00498 00499 inline void 00500 DecimalFormatSymbols::setPercent(UChar percent) 00501 { 00502 fSymbols[kPercentSymbol] = percent; 00503 } 00504 00505 // ------------------------------------- 00506 00507 inline UChar 00508 DecimalFormatSymbols::getDigit() const 00509 { 00510 return fSymbols[kDigitSymbol].charAt(0); 00511 } 00512 00513 // ------------------------------------- 00514 00515 inline void 00516 DecimalFormatSymbols::setDigit(UChar digit) 00517 { 00518 fSymbols[kDigitSymbol] = digit; 00519 } 00520 00521 // ------------------------------------- 00522 00523 inline UChar 00524 DecimalFormatSymbols::getPatternSeparator() const 00525 { 00526 return fSymbols[kPatternSeparatorSymbol].charAt(0); 00527 } 00528 00529 // ------------------------------------- 00530 00531 inline void 00532 DecimalFormatSymbols::setPatternSeparator(UChar patternSeparator) 00533 { 00534 fSymbols[kPatternSeparatorSymbol] = patternSeparator; 00535 } 00536 00537 // ------------------------------------- 00538 00539 inline UnicodeString& 00540 DecimalFormatSymbols::getInfinity(UnicodeString& result) const 00541 { 00542 return result = fSymbols[kInfinitySymbol]; 00543 } 00544 00545 // ------------------------------------- 00546 00547 inline void 00548 DecimalFormatSymbols::setInfinity(const UnicodeString& infinity) 00549 { 00550 fSymbols[kInfinitySymbol] = infinity; 00551 } 00552 00553 // ------------------------------------- 00554 00555 inline UnicodeString& 00556 DecimalFormatSymbols::getNaN(UnicodeString& result) const 00557 { 00558 return result = fSymbols[kNaNSymbol]; 00559 } 00560 00561 // ------------------------------------- 00562 00563 inline void 00564 DecimalFormatSymbols::setNaN(const UnicodeString& NaN) 00565 { 00566 fSymbols[kNaNSymbol] = NaN; 00567 } 00568 00569 // ------------------------------------- 00570 00571 inline UChar 00572 DecimalFormatSymbols::getPlusSign() const 00573 { 00574 return fSymbols[kPlusSignSymbol].charAt(0); 00575 } 00576 00577 // ------------------------------------- 00578 00579 inline void 00580 DecimalFormatSymbols::setPlusSign(UChar plusSign) 00581 { 00582 fSymbols[kPlusSignSymbol] = plusSign; 00583 } 00584 00585 // ------------------------------------- 00586 00587 inline UChar 00588 DecimalFormatSymbols::getMinusSign() const 00589 { 00590 return fSymbols[kMinusSignSymbol].charAt(0); 00591 } 00592 00593 // ------------------------------------- 00594 00595 inline void 00596 DecimalFormatSymbols::setMinusSign(UChar minusSign) 00597 { 00598 fSymbols[kMinusSignSymbol] = minusSign; 00599 } 00600 00601 // ------------------------------------- 00602 00603 inline UChar 00604 DecimalFormatSymbols::getExponentialSymbol(void) const 00605 { 00606 return fSymbols[kExponentialSymbol].charAt(0); 00607 } 00608 00609 // ------------------------------------- 00610 00611 inline void 00612 DecimalFormatSymbols::setExponentialSymbol(UChar exponential) 00613 { 00614 fSymbols[kExponentialSymbol] = exponential; 00615 } 00616 00617 // ------------------------------------- 00618 00619 inline UnicodeString& 00620 DecimalFormatSymbols::getCurrencySymbol(UnicodeString& result) const 00621 { 00622 return result = fSymbols[kCurrencySymbol]; 00623 } 00624 00625 // ------------------------------------- 00626 00627 inline void 00628 DecimalFormatSymbols::setCurrencySymbol(const UnicodeString& str) 00629 { 00630 fSymbols[kCurrencySymbol] = str; 00631 } 00632 00633 // ------------------------------------- 00634 00635 inline UnicodeString& 00636 DecimalFormatSymbols::getInternationalCurrencySymbol(UnicodeString& result) const 00637 { 00638 return result = fSymbols[kIntlCurrencySymbol]; 00639 } 00640 00641 // ------------------------------------- 00642 00643 inline void 00644 DecimalFormatSymbols::setInternationalCurrencySymbol(const UnicodeString& str) 00645 { 00646 fSymbols[kIntlCurrencySymbol] = str; 00647 } 00648 00649 // ------------------------------------- 00650 00651 inline UChar 00652 DecimalFormatSymbols::getMonetaryDecimalSeparator(void) const 00653 { 00654 return fSymbols[kMonetarySeparatorSymbol].charAt(0); 00655 } 00656 00657 // ------------------------------------- 00658 00659 inline void 00660 DecimalFormatSymbols::setMonetaryDecimalSeparator(UChar sep) 00661 { 00662 fSymbols[kMonetarySeparatorSymbol] = sep; 00663 } 00664 00665 inline UChar DecimalFormatSymbols::getPadEscape(void) const { 00666 return fSymbols[kPadEscapeSymbol].charAt(0); 00667 } 00668 00669 inline void DecimalFormatSymbols::setPadEscape(UChar c) { 00670 fSymbols[kPadEscapeSymbol] = c; 00671 } 00672 00673 #endif // _DCFMTSYM 00674 //eof