rbnf.h

Go to the documentation of this file.
00001 /* 00002 ******************************************************************************* 00003 * Copyright (C) 1997-2004, 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 00020 #if defined(U_INT64_T_UNAVAILABLE) || UCONFIG_NO_FORMATTING 00021 #define U_HAVE_RBNF 0 00022 #else 00023 #define U_HAVE_RBNF 1 00024 00025 #include "unicode/coll.h" 00026 #include "unicode/dcfmtsym.h" 00027 #include "unicode/fmtable.h" 00028 #include "unicode/locid.h" 00029 #include "unicode/numfmt.h" 00030 #include "unicode/unistr.h" 00031 00032 U_NAMESPACE_BEGIN 00033 00034 class NFRuleSet; 00035 00041 enum URBNFRuleSetTag { 00042 URBNF_SPELLOUT, 00043 URBNF_ORDINAL, 00044 URBNF_DURATION, 00045 URBNF_COUNT 00046 }; 00047 00048 #if UCONFIG_NO_COLLATION 00049 class Collator; 00050 #endif 00051 00481 class U_I18N_API RuleBasedNumberFormat : public NumberFormat { 00482 public: 00483 00484 //----------------------------------------------------------------------- 00485 // constructors 00486 //----------------------------------------------------------------------- 00487 00503 RuleBasedNumberFormat(const UnicodeString& rules, const Locale& locale, 00504 UParseError& perror, UErrorCode& status); 00505 00519 RuleBasedNumberFormat(URBNFRuleSetTag tag, const Locale& locale, UErrorCode& status); 00520 00521 //----------------------------------------------------------------------- 00522 // boilerplate 00523 //----------------------------------------------------------------------- 00524 00530 RuleBasedNumberFormat(const RuleBasedNumberFormat& rhs); 00531 00537 RuleBasedNumberFormat& operator=(const RuleBasedNumberFormat& rhs); 00538 00543 virtual ~RuleBasedNumberFormat(); 00544 00551 virtual Format* clone(void) const; 00552 00560 virtual UBool operator==(const Format& other) const; 00561 00562 //----------------------------------------------------------------------- 00563 // public API functions 00564 //----------------------------------------------------------------------- 00565 00571 virtual UnicodeString getRules() const; 00572 00580 virtual UnicodeString getRuleSetName(int32_t index) const; 00581 00587 virtual int32_t getNumberOfRuleSetNames() const; 00588 00597 virtual UnicodeString& format(int32_t number, 00598 UnicodeString& toAppendTo, 00599 FieldPosition& pos) const; 00600 00609 virtual UnicodeString& format(int64_t number, 00610 UnicodeString& toAppendTo, 00611 FieldPosition& pos) const; 00620 virtual UnicodeString& format(double number, 00621 UnicodeString& toAppendTo, 00622 FieldPosition& pos) const; 00623 00635 virtual UnicodeString& format(int32_t number, 00636 const UnicodeString& ruleSetName, 00637 UnicodeString& toAppendTo, 00638 FieldPosition& pos, 00639 UErrorCode& status) const; 00651 virtual UnicodeString& format(int64_t number, 00652 const UnicodeString& ruleSetName, 00653 UnicodeString& toAppendTo, 00654 FieldPosition& pos, 00655 UErrorCode& status) const; 00667 virtual UnicodeString& format(double number, 00668 const UnicodeString& ruleSetName, 00669 UnicodeString& toAppendTo, 00670 FieldPosition& pos, 00671 UErrorCode& status) const; 00672 00682 virtual UnicodeString& format(const Formattable& obj, 00683 UnicodeString& toAppendTo, 00684 FieldPosition& pos, 00685 UErrorCode& status) const; 00694 UnicodeString& format(const Formattable& obj, 00695 UnicodeString& result, 00696 UErrorCode& status) const; 00697 00705 UnicodeString& format(double number, 00706 UnicodeString& output) const; 00707 00715 UnicodeString& format(int32_t number, 00716 UnicodeString& output) const; 00717 00732 virtual void parse(const UnicodeString& text, 00733 Formattable& result, 00734 ParsePosition& parsePosition) const; 00735 00736 00744 virtual inline void parse(const UnicodeString& text, 00745 Formattable& result, 00746 UErrorCode& status) const; 00747 00748 #if !UCONFIG_NO_COLLATION 00749 00783 virtual void setLenient(UBool enabled); 00784 00792 virtual inline UBool isLenient(void) const; 00793 00794 #endif 00795 00804 virtual void setDefaultRuleSet(const UnicodeString& ruleSetName, UErrorCode& status); 00805 00812 virtual UnicodeString getDefaultRuleSetName() const; 00813 00814 public: 00820 static UClassID getStaticClassID(void); 00821 00827 virtual UClassID getDynamicClassID(void) const; 00828 00829 private: 00830 RuleBasedNumberFormat(); // default constructor not implemented 00831 00832 void init(const UnicodeString& rules, UParseError& perror, UErrorCode& status); 00833 void dispose(); 00834 void stripWhitespace(UnicodeString& src); 00835 void initDefaultRuleSet(); 00836 void format(double number, NFRuleSet& ruleSet); 00837 NFRuleSet* findRuleSet(const UnicodeString& name, UErrorCode& status) const; 00838 00839 /* friend access */ 00840 friend class NFSubstitution; 00841 friend class NFRule; 00842 friend class FractionalPartSubstitution; 00843 00844 inline NFRuleSet * getDefaultRuleSet() const; 00845 Collator * getCollator() const; 00846 DecimalFormatSymbols * getDecimalFormatSymbols() const; 00847 00848 private: 00849 NFRuleSet **ruleSets; 00850 NFRuleSet *defaultRuleSet; 00851 Locale locale; 00852 Collator* collator; 00853 DecimalFormatSymbols* decimalFormatSymbols; 00854 UBool lenient; 00855 UnicodeString* lenientParseRules; 00856 }; 00857 00858 // --------------- 00859 00860 inline UnicodeString& 00861 RuleBasedNumberFormat::format(const Formattable& obj, 00862 UnicodeString& result, 00863 UErrorCode& status) const 00864 { 00865 // Don't use Format:: - use immediate base class only, 00866 // in case immediate base modifies behavior later. 00867 // dlf - the above comment is bogus, if there were a reason to modify 00868 // it, it would be virtual, and there's no reason because it is 00869 // a one-line macro in NumberFormat anyway, just like this one. 00870 return NumberFormat::format(obj, result, status); 00871 } 00872 00873 inline UnicodeString& 00874 RuleBasedNumberFormat::format(double number, UnicodeString& output) const { 00875 FieldPosition pos(0); 00876 return format(number, output, pos); 00877 } 00878 00879 inline UnicodeString& 00880 RuleBasedNumberFormat::format(int32_t number, UnicodeString& output) const { 00881 FieldPosition pos(0); 00882 return format(number, output, pos); 00883 } 00884 00885 inline void 00886 RuleBasedNumberFormat::parse(const UnicodeString& text, Formattable& result, UErrorCode& status) const 00887 { 00888 NumberFormat::parse(text, result, status); 00889 } 00890 00891 #if !UCONFIG_NO_COLLATION 00892 00893 inline UBool 00894 RuleBasedNumberFormat::isLenient(void) const { 00895 return lenient; 00896 } 00897 00898 #endif 00899 00900 inline NFRuleSet* 00901 RuleBasedNumberFormat::getDefaultRuleSet() const { 00902 return defaultRuleSet; 00903 } 00904 00905 U_NAMESPACE_END 00906 00907 /* U_HAVE_RBNF */ 00908 #endif 00909 00910 /* RBNF_H */ 00911 #endif

Generated on Fri Jun 18 12:35:58 2004 for ICU by doxygen 1.3.7