Main Page | Class Hierarchy | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

rbnf.h

00001 /* 00002 ******************************************************************************* 00003 * Copyright (C) 1997-2002, International Business Machines Corporation and others. 00004 * All Rights Reserved. 00005 ******************************************************************************* 00006 */ 00007 00008 #ifndef RBNF_H 00009 #define RBNF_H 00010 00011 #ifdef U_INT64_T_UNAVAILABLE 00012 #define U_HAVE_RBNF 0 00013 #else 00014 #define U_HAVE_RBNF 1 00015 00016 #include "unicode/coll.h" 00017 #include "unicode/dcfmtsym.h" 00018 #include "unicode/fmtable.h" 00019 #include "unicode/locid.h" 00020 #include "unicode/numfmt.h" 00021 #include "unicode/unistr.h" 00022 #include "unicode/utypes.h" 00023 00024 U_NAMESPACE_BEGIN 00025 00026 class NFRuleSet; 00027 00029 enum URBNFRuleSetTag { 00030 URBNF_SPELLOUT, 00031 URBNF_ORDINAL, 00032 URBNF_DURATION, 00033 URBNF_COUNT 00034 }; 00035 00493 class U_I18N_API RuleBasedNumberFormat : public NumberFormat { 00494 public: 00495 00496 //----------------------------------------------------------------------- 00497 // constructors 00498 //----------------------------------------------------------------------- 00499 00515 RuleBasedNumberFormat(const UnicodeString& rules, const Locale& locale, 00516 UParseError& perror, UErrorCode& status); 00517 00531 RuleBasedNumberFormat(URBNFRuleSetTag tag, const Locale& locale, UErrorCode& status); 00532 00533 //----------------------------------------------------------------------- 00534 // boilerplate 00535 //----------------------------------------------------------------------- 00536 00540 RuleBasedNumberFormat(const RuleBasedNumberFormat& rhs); 00541 00545 RuleBasedNumberFormat& operator=(const RuleBasedNumberFormat& rhs); 00546 00550 virtual ~RuleBasedNumberFormat(); 00551 00556 virtual Format* clone(void) const; 00557 00562 virtual UBool operator==(const Format& other) const; 00563 00564 //----------------------------------------------------------------------- 00565 // public API functions 00566 //----------------------------------------------------------------------- 00567 00573 virtual UnicodeString getRules() const; 00574 00582 virtual UnicodeString getRuleSetName(int32_t index) const; 00583 00589 virtual int32_t getNumberOfRuleSetNames() const; 00590 00599 virtual UnicodeString& format(int32_t number, 00600 UnicodeString& toAppendTo, 00601 FieldPosition& pos) const; 00602 00611 virtual UnicodeString& format(int64_t number, 00612 UnicodeString& toAppendTo, 00613 FieldPosition& pos) const; 00622 virtual UnicodeString& format(double number, 00623 UnicodeString& toAppendTo, 00624 FieldPosition& pos) const; 00625 00637 virtual UnicodeString& format(int32_t number, 00638 const UnicodeString& ruleSetName, 00639 UnicodeString& toAppendTo, 00640 FieldPosition& pos, 00641 UErrorCode& status) const; 00653 virtual UnicodeString& format(int64_t number, 00654 const UnicodeString& ruleSetName, 00655 UnicodeString& toAppendTo, 00656 FieldPosition& pos, 00657 UErrorCode& status) const; 00669 virtual UnicodeString& format(double number, 00670 const UnicodeString& ruleSetName, 00671 UnicodeString& toAppendTo, 00672 FieldPosition& pos, 00673 UErrorCode& status) const; 00674 00684 virtual UnicodeString& format(const Formattable& obj, 00685 UnicodeString& toAppendTo, 00686 FieldPosition& pos, 00687 UErrorCode& status) const; 00692 UnicodeString& format(const Formattable& obj, 00693 UnicodeString& result, 00694 UErrorCode& status) const; 00695 00700 UnicodeString& format(double number, 00701 UnicodeString& output) const; 00702 00707 UnicodeString& format(int32_t number, 00708 UnicodeString& output) const; 00709 00724 virtual void parse(const UnicodeString& text, 00725 Formattable& result, 00726 ParsePosition& parsePosition) const; 00727 00728 00733 virtual inline void parse(const UnicodeString& text, 00734 Formattable& result, 00735 UErrorCode& status) const; 00736 00737 00771 virtual void setLenient(UBool enabled); 00772 00780 virtual inline UBool isLenient(void) const; 00781 00782 private: 00783 void init(const UnicodeString& rules, UParseError& perror, UErrorCode& status); 00784 void dispose(); 00785 void stripWhitespace(UnicodeString& src); 00786 void setDefaultRuleSet(); 00787 void format(double number, NFRuleSet& ruleSet); 00788 NFRuleSet* findRuleSet(const UnicodeString& name, UErrorCode& status) const; 00789 00790 /* friend access */ 00791 friend class NFSubstitution; 00792 friend class NFRule; 00793 friend class FractionalPartSubstitution; 00794 00795 inline NFRuleSet * getDefaultRuleSet() const; 00796 Collator * getCollator() const; 00797 DecimalFormatSymbols * getDecimalFormatSymbols() const; 00798 00799 private: 00800 static const char fgClassID; 00801 00802 public: 00803 static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; } 00804 virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); } 00805 00806 private: 00807 NFRuleSet **ruleSets; 00808 NFRuleSet *defaultRuleSet; 00809 Locale locale; 00810 Collator* collator; 00811 DecimalFormatSymbols* decimalFormatSymbols; 00812 UBool lenient; 00813 UnicodeString* lenientParseRules; 00814 }; 00815 00816 // --------------- 00817 00818 inline UnicodeString& 00819 RuleBasedNumberFormat::format(const Formattable& obj, 00820 UnicodeString& result, 00821 UErrorCode& status) const 00822 { 00823 // Don't use Format:: - use immediate base class only, 00824 // in case immediate base modifies behavior later. 00825 // dlf - the above comment is bogus, if there were a reason to modify 00826 // it, it would be virtual, and there's no reason because it is 00827 // a one-line macro in NumberFormat anyway, just like this one. 00828 return NumberFormat::format(obj, result, status); 00829 } 00830 00831 inline UnicodeString& 00832 RuleBasedNumberFormat::format(double number, UnicodeString& output) const { 00833 FieldPosition pos(0); 00834 return format(number, output, pos); 00835 } 00836 00837 inline UnicodeString& 00838 RuleBasedNumberFormat::format(int32_t number, UnicodeString& output) const { 00839 FieldPosition pos(0); 00840 return format(number, output, pos); 00841 } 00842 00843 inline void 00844 RuleBasedNumberFormat::parse(const UnicodeString& text, Formattable& result, UErrorCode& status) const 00845 { 00846 NumberFormat::parse(text, result, status); 00847 } 00848 00849 inline UBool 00850 RuleBasedNumberFormat::isLenient(void) const { 00851 return lenient; 00852 } 00853 00854 inline NFRuleSet* 00855 RuleBasedNumberFormat::getDefaultRuleSet() const { 00856 return defaultRuleSet; 00857 } 00858 00859 U_NAMESPACE_END 00860 00861 /* U_HAVE_RBNF */ 00862 #endif 00863 00864 /* RBNF_H */ 00865 #endif

Generated on Fri Aug 13 09:53:50 2004 for ICU 2.1 by doxygen 1.3.7