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

rbnf.h

00001 /* 00002 ******************************************************************************* 00003 * Copyright (C) 1997-2003, International Business Machines Corporation and others. 00004 * All Rights Reserved. 00005 ******************************************************************************* 00006 */ 00007 00008 #ifndef RBNF_H 00009 #define RBNF_H 00010 00011 #include "unicode/utypes.h" 00012 00013 #if defined(U_INT64_T_UNAVAILABLE) || UCONFIG_NO_FORMATTING 00014 #define U_HAVE_RBNF 0 00015 #else 00016 #define U_HAVE_RBNF 1 00017 00018 #include "unicode/coll.h" 00019 #include "unicode/dcfmtsym.h" 00020 #include "unicode/fmtable.h" 00021 #include "unicode/locid.h" 00022 #include "unicode/numfmt.h" 00023 #include "unicode/unistr.h" 00024 00025 U_NAMESPACE_BEGIN 00026 00027 class NFRuleSet; 00028 00030 enum URBNFRuleSetTag { 00031 URBNF_SPELLOUT, 00032 URBNF_ORDINAL, 00033 URBNF_DURATION, 00034 URBNF_COUNT 00035 }; 00036 00037 #if UCONFIG_NO_COLLATION 00038 class Collator; 00039 #endif 00040 00465 class U_I18N_API RuleBasedNumberFormat : public NumberFormat { 00466 public: 00467 00468 //----------------------------------------------------------------------- 00469 // constructors 00470 //----------------------------------------------------------------------- 00471 00487 RuleBasedNumberFormat(const UnicodeString& rules, const Locale& locale, 00488 UParseError& perror, UErrorCode& status); 00489 00503 RuleBasedNumberFormat(URBNFRuleSetTag tag, const Locale& locale, UErrorCode& status); 00504 00505 //----------------------------------------------------------------------- 00506 // boilerplate 00507 //----------------------------------------------------------------------- 00508 00514 RuleBasedNumberFormat(const RuleBasedNumberFormat& rhs); 00515 00521 RuleBasedNumberFormat& operator=(const RuleBasedNumberFormat& rhs); 00522 00527 virtual ~RuleBasedNumberFormat(); 00528 00535 virtual Format* clone(void) const; 00536 00544 virtual UBool operator==(const Format& other) const; 00545 00546 //----------------------------------------------------------------------- 00547 // public API functions 00548 //----------------------------------------------------------------------- 00549 00555 virtual UnicodeString getRules() const; 00556 00564 virtual UnicodeString getRuleSetName(int32_t index) const; 00565 00571 virtual int32_t getNumberOfRuleSetNames() const; 00572 00581 virtual UnicodeString& format(int32_t number, 00582 UnicodeString& toAppendTo, 00583 FieldPosition& pos) const; 00584 00593 virtual UnicodeString& format(int64_t number, 00594 UnicodeString& toAppendTo, 00595 FieldPosition& pos) const; 00604 virtual UnicodeString& format(double number, 00605 UnicodeString& toAppendTo, 00606 FieldPosition& pos) const; 00607 00619 virtual UnicodeString& format(int32_t number, 00620 const UnicodeString& ruleSetName, 00621 UnicodeString& toAppendTo, 00622 FieldPosition& pos, 00623 UErrorCode& status) const; 00635 virtual UnicodeString& format(int64_t number, 00636 const UnicodeString& ruleSetName, 00637 UnicodeString& toAppendTo, 00638 FieldPosition& pos, 00639 UErrorCode& status) const; 00651 virtual UnicodeString& format(double number, 00652 const UnicodeString& ruleSetName, 00653 UnicodeString& toAppendTo, 00654 FieldPosition& pos, 00655 UErrorCode& status) const; 00656 00666 virtual UnicodeString& format(const Formattable& obj, 00667 UnicodeString& toAppendTo, 00668 FieldPosition& pos, 00669 UErrorCode& status) const; 00678 UnicodeString& format(const Formattable& obj, 00679 UnicodeString& result, 00680 UErrorCode& status) const; 00681 00689 UnicodeString& format(double number, 00690 UnicodeString& output) const; 00691 00699 UnicodeString& format(int32_t number, 00700 UnicodeString& output) const; 00701 00716 virtual void parse(const UnicodeString& text, 00717 Formattable& result, 00718 ParsePosition& parsePosition) const; 00719 00720 00728 virtual inline void parse(const UnicodeString& text, 00729 Formattable& result, 00730 UErrorCode& status) const; 00731 00732 #if !UCONFIG_NO_COLLATION 00733 00767 virtual void setLenient(UBool enabled); 00768 00776 virtual inline UBool isLenient(void) const; 00777 00778 #endif 00779 00788 virtual void setDefaultRuleSet(const UnicodeString& ruleSetName, UErrorCode& status); 00789 00790 public: 00796 static UClassID getStaticClassID(void); 00797 00803 virtual UClassID getDynamicClassID(void) const; 00804 00805 private: 00806 RuleBasedNumberFormat(); // default constructor not implemented 00807 00808 void init(const UnicodeString& rules, UParseError& perror, UErrorCode& status); 00809 void dispose(); 00810 void stripWhitespace(UnicodeString& src); 00811 void initDefaultRuleSet(); 00812 void format(double number, NFRuleSet& ruleSet); 00813 NFRuleSet* findRuleSet(const UnicodeString& name, UErrorCode& status) const; 00814 00815 /* friend access */ 00816 friend class NFSubstitution; 00817 friend class NFRule; 00818 friend class FractionalPartSubstitution; 00819 00820 inline NFRuleSet * getDefaultRuleSet() const; 00821 Collator * getCollator() const; 00822 DecimalFormatSymbols * getDecimalFormatSymbols() const; 00823 00824 private: 00825 NFRuleSet **ruleSets; 00826 NFRuleSet *defaultRuleSet; 00827 Locale locale; 00828 Collator* collator; 00829 DecimalFormatSymbols* decimalFormatSymbols; 00830 UBool lenient; 00831 UnicodeString* lenientParseRules; 00832 }; 00833 00834 // --------------- 00835 00836 inline UnicodeString& 00837 RuleBasedNumberFormat::format(const Formattable& obj, 00838 UnicodeString& result, 00839 UErrorCode& status) const 00840 { 00841 // Don't use Format:: - use immediate base class only, 00842 // in case immediate base modifies behavior later. 00843 // dlf - the above comment is bogus, if there were a reason to modify 00844 // it, it would be virtual, and there's no reason because it is 00845 // a one-line macro in NumberFormat anyway, just like this one. 00846 return NumberFormat::format(obj, result, status); 00847 } 00848 00849 inline UnicodeString& 00850 RuleBasedNumberFormat::format(double number, UnicodeString& output) const { 00851 FieldPosition pos(0); 00852 return format(number, output, pos); 00853 } 00854 00855 inline UnicodeString& 00856 RuleBasedNumberFormat::format(int32_t number, UnicodeString& output) const { 00857 FieldPosition pos(0); 00858 return format(number, output, pos); 00859 } 00860 00861 inline void 00862 RuleBasedNumberFormat::parse(const UnicodeString& text, Formattable& result, UErrorCode& status) const 00863 { 00864 NumberFormat::parse(text, result, status); 00865 } 00866 00867 #if !UCONFIG_NO_COLLATION 00868 00869 inline UBool 00870 RuleBasedNumberFormat::isLenient(void) const { 00871 return lenient; 00872 } 00873 00874 #endif 00875 00876 inline NFRuleSet* 00877 RuleBasedNumberFormat::getDefaultRuleSet() const { 00878 return defaultRuleSet; 00879 } 00880 00881 U_NAMESPACE_END 00882 00883 /* U_HAVE_RBNF */ 00884 #endif 00885 00886 /* RBNF_H */ 00887 #endif

Generated on Wed Jul 28 09:15:54 2004 for ICU 2.8 by doxygen 1.3.7