Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

rbnf.h

Go to the documentation of this file.
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 #include "unicode/utypes.h"
00012 #ifdef U_INT64_T_UNAVAILABLE
00013 #define U_HAVE_RBNF 0
00014 #else
00015 #define U_HAVE_RBNF 1
00016 
00017 #include "unicode/coll.h"
00018 #include "unicode/dcfmtsym.h"
00019 #include "unicode/fmtable.h"
00020 #include "unicode/locid.h"
00021 #include "unicode/numfmt.h"
00022 #include "unicode/unistr.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 
00541   RuleBasedNumberFormat(const RuleBasedNumberFormat& rhs);
00542 
00547   RuleBasedNumberFormat& operator=(const RuleBasedNumberFormat& rhs);
00548 
00552   virtual ~RuleBasedNumberFormat();
00553 
00559   virtual Format* clone(void) const;
00560 
00567   virtual UBool operator==(const Format& other) const;
00568 
00569 //-----------------------------------------------------------------------
00570 // public API functions
00571 //-----------------------------------------------------------------------
00572 
00578   virtual UnicodeString getRules() const;
00579 
00587   virtual UnicodeString getRuleSetName(int32_t index) const;
00588 
00594   virtual int32_t getNumberOfRuleSetNames() const;
00595 
00604   virtual UnicodeString& format(int32_t number,
00605                                 UnicodeString& toAppendTo,
00606                                 FieldPosition& pos) const;
00607 
00616   virtual UnicodeString& format(int64_t number,
00617                                 UnicodeString& toAppendTo,
00618                                 FieldPosition& pos) const;
00627   virtual UnicodeString& format(double number,
00628                                 UnicodeString& toAppendTo,
00629                                 FieldPosition& pos) const;
00630 
00642   virtual UnicodeString& format(int32_t number,
00643                                 const UnicodeString& ruleSetName,
00644                                 UnicodeString& toAppendTo,
00645                                 FieldPosition& pos,
00646                                 UErrorCode& status) const;
00658   virtual UnicodeString& format(int64_t number,
00659                                 const UnicodeString& ruleSetName,
00660                                 UnicodeString& toAppendTo,
00661                                 FieldPosition& pos,
00662                                 UErrorCode& status) const;
00674   virtual UnicodeString& format(double number,
00675                                 const UnicodeString& ruleSetName,
00676                                 UnicodeString& toAppendTo,
00677                                 FieldPosition& pos,
00678                                 UErrorCode& status) const;
00679 
00689   virtual UnicodeString& format(const Formattable& obj,
00690                                 UnicodeString& toAppendTo,
00691                                 FieldPosition& pos,
00692                                 UErrorCode& status) const;
00701   UnicodeString& format(const Formattable& obj,
00702                         UnicodeString& result,
00703                         UErrorCode& status) const;
00704 
00712    UnicodeString& format(double number,
00713                          UnicodeString& output) const;
00714 
00722    UnicodeString& format(int32_t number,
00723                          UnicodeString& output) const;
00724 
00739   virtual void parse(const UnicodeString& text,
00740                      Formattable& result,
00741                      ParsePosition& parsePosition) const;
00742 
00743   
00751   virtual inline void parse(const UnicodeString& text,
00752                       Formattable& result,
00753                       UErrorCode& status) const;
00754 
00755 
00789   virtual void setLenient(UBool enabled);
00790 
00798   virtual inline UBool isLenient(void) const;
00799 
00806   virtual void setDefaultRuleSet(const UnicodeString& ruleSetName, UErrorCode& status);
00807 
00808 private:
00809   void init(const UnicodeString& rules, UParseError& perror, UErrorCode& status);
00810   void dispose();
00811   void stripWhitespace(UnicodeString& src);
00812   void initDefaultRuleSet();
00813   void format(double number, NFRuleSet& ruleSet);
00814   NFRuleSet* findRuleSet(const UnicodeString& name, UErrorCode& status) const;
00815 
00816   /* friend access */
00817   friend class NFSubstitution;
00818   friend class NFRule;
00819   friend class FractionalPartSubstitution;
00820 
00821   inline NFRuleSet * getDefaultRuleSet() const;
00822   Collator * getCollator() const;
00823   DecimalFormatSymbols * getDecimalFormatSymbols() const;
00824 
00825 private:
00826     static const char fgClassID;
00827 
00828 public:
00829     static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
00830     virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); }
00831 
00832 private:
00833     NFRuleSet **ruleSets;
00834     NFRuleSet *defaultRuleSet;
00835     Locale locale;
00836     Collator* collator;
00837     DecimalFormatSymbols* decimalFormatSymbols;
00838     UBool lenient;
00839     UnicodeString* lenientParseRules;
00840 };
00841 
00842 // ---------------
00843 
00844 inline UnicodeString&
00845 RuleBasedNumberFormat::format(const Formattable& obj,
00846                               UnicodeString& result,
00847                               UErrorCode& status) const
00848 {
00849     // Don't use Format:: - use immediate base class only,
00850     // in case immediate base modifies behavior later.
00851     // dlf - the above comment is bogus, if there were a reason to modify
00852     // it, it would be virtual, and there's no reason because it is
00853     // a one-line macro in NumberFormat anyway, just like this one.
00854     return NumberFormat::format(obj, result, status);
00855 }
00856 
00857 inline UnicodeString&
00858 RuleBasedNumberFormat::format(double number, UnicodeString& output) const {
00859     FieldPosition pos(0);
00860     return format(number, output, pos);
00861 }
00862 
00863 inline UnicodeString&
00864 RuleBasedNumberFormat::format(int32_t number, UnicodeString& output) const {
00865     FieldPosition pos(0);
00866     return format(number, output, pos);
00867 }
00868 
00869 inline void
00870 RuleBasedNumberFormat::parse(const UnicodeString& text, Formattable& result, UErrorCode& status) const
00871 {
00872     NumberFormat::parse(text, result, status);
00873 }
00874 
00875 inline UBool 
00876 RuleBasedNumberFormat::isLenient(void) const { 
00877     return lenient; 
00878 }
00879 
00880 inline NFRuleSet* 
00881 RuleBasedNumberFormat::getDefaultRuleSet() const { 
00882     return defaultRuleSet; 
00883 }
00884 
00885 U_NAMESPACE_END
00886 
00887 /* U_HAVE_RBNF */
00888 #endif
00889 
00890 /* RBNF_H */
00891 #endif

Generated on Thu Aug 15 14:13:28 2002 for ICU 2.2 by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001