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 
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 
00498 class U_I18N_API RuleBasedNumberFormat : public NumberFormat {
00499 public:
00500 
00501   //-----------------------------------------------------------------------
00502   // constructors
00503   //-----------------------------------------------------------------------
00504 
00520   RuleBasedNumberFormat(const UnicodeString& rules, const Locale& locale, 
00521                         UParseError& perror, UErrorCode& status);
00522 
00536   RuleBasedNumberFormat(URBNFRuleSetTag tag, const Locale& locale, UErrorCode& status);
00537 
00538   //-----------------------------------------------------------------------
00539   // boilerplate
00540   //-----------------------------------------------------------------------
00541 
00546   RuleBasedNumberFormat(const RuleBasedNumberFormat& rhs);
00547 
00552   RuleBasedNumberFormat& operator=(const RuleBasedNumberFormat& rhs);
00553 
00557   virtual ~RuleBasedNumberFormat();
00558 
00564   virtual Format* clone(void) const;
00565 
00572   virtual UBool operator==(const Format& other) const;
00573 
00574 //-----------------------------------------------------------------------
00575 // public API functions
00576 //-----------------------------------------------------------------------
00577 
00583   virtual UnicodeString getRules() const;
00584 
00592   virtual UnicodeString getRuleSetName(int32_t index) const;
00593 
00599   virtual int32_t getNumberOfRuleSetNames() const;
00600 
00609   virtual UnicodeString& format(int32_t number,
00610                                 UnicodeString& toAppendTo,
00611                                 FieldPosition& pos) const;
00612 
00621   virtual UnicodeString& format(int64_t number,
00622                                 UnicodeString& toAppendTo,
00623                                 FieldPosition& pos) const;
00632   virtual UnicodeString& format(double number,
00633                                 UnicodeString& toAppendTo,
00634                                 FieldPosition& pos) const;
00635 
00647   virtual UnicodeString& format(int32_t number,
00648                                 const UnicodeString& ruleSetName,
00649                                 UnicodeString& toAppendTo,
00650                                 FieldPosition& pos,
00651                                 UErrorCode& status) const;
00663   virtual UnicodeString& format(int64_t number,
00664                                 const UnicodeString& ruleSetName,
00665                                 UnicodeString& toAppendTo,
00666                                 FieldPosition& pos,
00667                                 UErrorCode& status) const;
00679   virtual UnicodeString& format(double number,
00680                                 const UnicodeString& ruleSetName,
00681                                 UnicodeString& toAppendTo,
00682                                 FieldPosition& pos,
00683                                 UErrorCode& status) const;
00684 
00694   virtual UnicodeString& format(const Formattable& obj,
00695                                 UnicodeString& toAppendTo,
00696                                 FieldPosition& pos,
00697                                 UErrorCode& status) const;
00706   UnicodeString& format(const Formattable& obj,
00707                         UnicodeString& result,
00708                         UErrorCode& status) const;
00709 
00717    UnicodeString& format(double number,
00718                          UnicodeString& output) const;
00719 
00727    UnicodeString& format(int32_t number,
00728                          UnicodeString& output) const;
00729 
00744   virtual void parse(const UnicodeString& text,
00745                      Formattable& result,
00746                      ParsePosition& parsePosition) const;
00747 
00748   
00756   virtual inline void parse(const UnicodeString& text,
00757                       Formattable& result,
00758                       UErrorCode& status) const;
00759 
00760 #if !UCONFIG_NO_COLLATION
00761 
00795   virtual void setLenient(UBool enabled);
00796 
00804   virtual inline UBool isLenient(void) const;
00805 
00806 #endif
00807 
00814   virtual void setDefaultRuleSet(const UnicodeString& ruleSetName, UErrorCode& status);
00815 
00816 private:
00817   void init(const UnicodeString& rules, UParseError& perror, UErrorCode& status);
00818   void dispose();
00819   void stripWhitespace(UnicodeString& src);
00820   void initDefaultRuleSet();
00821   void format(double number, NFRuleSet& ruleSet);
00822   NFRuleSet* findRuleSet(const UnicodeString& name, UErrorCode& status) const;
00823 
00824   /* friend access */
00825   friend class NFSubstitution;
00826   friend class NFRule;
00827   friend class FractionalPartSubstitution;
00828 
00829   inline NFRuleSet * getDefaultRuleSet() const;
00830   Collator * getCollator() const;
00831   DecimalFormatSymbols * getDecimalFormatSymbols() const;
00832 
00833 private:
00834     static const char fgClassID;
00835 
00836 public:
00837     static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
00838     virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); }
00839 
00840 private:
00841     NFRuleSet **ruleSets;
00842     NFRuleSet *defaultRuleSet;
00843     Locale locale;
00844     Collator* collator;
00845     DecimalFormatSymbols* decimalFormatSymbols;
00846     UBool lenient;
00847     UnicodeString* lenientParseRules;
00848 };
00849 
00850 // ---------------
00851 
00852 inline UnicodeString&
00853 RuleBasedNumberFormat::format(const Formattable& obj,
00854                               UnicodeString& result,
00855                               UErrorCode& status) const
00856 {
00857     // Don't use Format:: - use immediate base class only,
00858     // in case immediate base modifies behavior later.
00859     // dlf - the above comment is bogus, if there were a reason to modify
00860     // it, it would be virtual, and there's no reason because it is
00861     // a one-line macro in NumberFormat anyway, just like this one.
00862     return NumberFormat::format(obj, result, status);
00863 }
00864 
00865 inline UnicodeString&
00866 RuleBasedNumberFormat::format(double number, UnicodeString& output) const {
00867     FieldPosition pos(0);
00868     return format(number, output, pos);
00869 }
00870 
00871 inline UnicodeString&
00872 RuleBasedNumberFormat::format(int32_t number, UnicodeString& output) const {
00873     FieldPosition pos(0);
00874     return format(number, output, pos);
00875 }
00876 
00877 inline void
00878 RuleBasedNumberFormat::parse(const UnicodeString& text, Formattable& result, UErrorCode& status) const
00879 {
00880     NumberFormat::parse(text, result, status);
00881 }
00882 
00883 #if !UCONFIG_NO_COLLATION
00884 
00885 inline UBool 
00886 RuleBasedNumberFormat::isLenient(void) const { 
00887     return lenient; 
00888 }
00889 
00890 #endif
00891 
00892 inline NFRuleSet* 
00893 RuleBasedNumberFormat::getDefaultRuleSet() const { 
00894     return defaultRuleSet; 
00895 }
00896 
00897 U_NAMESPACE_END
00898 
00899 /* U_HAVE_RBNF */
00900 #endif
00901 
00902 /* RBNF_H */
00903 #endif

Generated on Wed Dec 18 16:49:43 2002 for ICU 2.4 by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001