Main Page | Class Hierarchy | Alphabetical List | Data Structures | Directories | 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 Mon Jul 25 21:50:48 2005 for ICU 2.1 by  doxygen 1.4.3-20050530