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

rbnf.h

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 #include "unicode/strenum.h"
00032 
00033 U_NAMESPACE_BEGIN
00034 
00035 class NFRuleSet;
00036 class LocalizationInfo;
00037 
00043 enum URBNFRuleSetTag {
00044     URBNF_SPELLOUT,
00045     URBNF_ORDINAL,
00046     URBNF_DURATION,
00047     URBNF_COUNT
00048 };
00049 
00050 #if UCONFIG_NO_COLLATION
00051 class Collator;
00052 #endif
00053 
00501 class U_I18N_API RuleBasedNumberFormat : public NumberFormat {
00502 public:
00503 
00504   //-----------------------------------------------------------------------
00505   // constructors
00506   //-----------------------------------------------------------------------
00507 
00518     RuleBasedNumberFormat(const UnicodeString& rules, UParseError& perror, UErrorCode& status);
00519 
00543     RuleBasedNumberFormat(const UnicodeString& rules, const UnicodeString& localizations,
00544                         UParseError& perror, UErrorCode& status);
00545 
00561   RuleBasedNumberFormat(const UnicodeString& rules, const Locale& locale,
00562                         UParseError& perror, UErrorCode& status);
00563 
00590     RuleBasedNumberFormat(const UnicodeString& rules, const UnicodeString& localizations,
00591                         const Locale& locale, UParseError& perror, UErrorCode& status);
00592 
00606   RuleBasedNumberFormat(URBNFRuleSetTag tag, const Locale& locale, UErrorCode& status);
00607 
00608   //-----------------------------------------------------------------------
00609   // boilerplate
00610   //-----------------------------------------------------------------------
00611 
00617   RuleBasedNumberFormat(const RuleBasedNumberFormat& rhs);
00618 
00624   RuleBasedNumberFormat& operator=(const RuleBasedNumberFormat& rhs);
00625 
00630   virtual ~RuleBasedNumberFormat();
00631 
00638   virtual Format* clone(void) const;
00639 
00647   virtual UBool operator==(const Format& other) const;
00648 
00649 //-----------------------------------------------------------------------
00650 // public API functions
00651 //-----------------------------------------------------------------------
00652 
00658   virtual UnicodeString getRules() const;
00659 
00665   virtual int32_t getNumberOfRuleSetNames() const;
00666 
00674   virtual UnicodeString getRuleSetName(int32_t index) const;
00675 
00681   virtual int32_t getNumberOfRuleSetDisplayNameLocales(void) const;
00682 
00691   virtual Locale getRuleSetDisplayNameLocale(int32_t index, UErrorCode& status) const;
00692 
00706   virtual UnicodeString getRuleSetDisplayName(int32_t index, 
00707                           const Locale& locale = Locale::getDefault());
00708 
00717   virtual UnicodeString getRuleSetDisplayName(const UnicodeString& ruleSetName, 
00718                           const Locale& locale = Locale::getDefault());
00719 
00728   virtual UnicodeString& format(int32_t number,
00729                                 UnicodeString& toAppendTo,
00730                                 FieldPosition& pos) const;
00731 
00740   virtual UnicodeString& format(int64_t number,
00741                                 UnicodeString& toAppendTo,
00742                                 FieldPosition& pos) const;
00751   virtual UnicodeString& format(double number,
00752                                 UnicodeString& toAppendTo,
00753                                 FieldPosition& pos) const;
00754 
00766   virtual UnicodeString& format(int32_t number,
00767                                 const UnicodeString& ruleSetName,
00768                                 UnicodeString& toAppendTo,
00769                                 FieldPosition& pos,
00770                                 UErrorCode& status) const;
00782   virtual UnicodeString& format(int64_t number,
00783                                 const UnicodeString& ruleSetName,
00784                                 UnicodeString& toAppendTo,
00785                                 FieldPosition& pos,
00786                                 UErrorCode& status) const;
00798   virtual UnicodeString& format(double number,
00799                                 const UnicodeString& ruleSetName,
00800                                 UnicodeString& toAppendTo,
00801                                 FieldPosition& pos,
00802                                 UErrorCode& status) const;
00803 
00813   virtual UnicodeString& format(const Formattable& obj,
00814                                 UnicodeString& toAppendTo,
00815                                 FieldPosition& pos,
00816                                 UErrorCode& status) const;
00825   UnicodeString& format(const Formattable& obj,
00826                         UnicodeString& result,
00827                         UErrorCode& status) const;
00828 
00836    UnicodeString& format(double number,
00837                          UnicodeString& output) const;
00838 
00846    UnicodeString& format(int32_t number,
00847                          UnicodeString& output) const;
00848 
00863   virtual void parse(const UnicodeString& text,
00864                      Formattable& result,
00865                      ParsePosition& parsePosition) const;
00866 
00867 
00875   virtual inline void parse(const UnicodeString& text,
00876                       Formattable& result,
00877                       UErrorCode& status) const;
00878 
00879 #if !UCONFIG_NO_COLLATION
00880 
00914   virtual void setLenient(UBool enabled);
00915 
00923   virtual inline UBool isLenient(void) const;
00924 
00925 #endif
00926 
00935   virtual void setDefaultRuleSet(const UnicodeString& ruleSetName, UErrorCode& status);
00936 
00943   virtual UnicodeString getDefaultRuleSetName() const;
00944 
00945 public:
00951     static UClassID U_EXPORT2 getStaticClassID(void);
00952 
00958     virtual UClassID getDynamicClassID(void) const;
00959 
00960 private:
00961     RuleBasedNumberFormat(); // default constructor not implemented
00962 
00963     // this will ref the localizations if they are not NULL
00964     // caller must deref to get adoption 
00965     RuleBasedNumberFormat(const UnicodeString& description, LocalizationInfo* localizations, 
00966               const Locale& locale, UParseError& perror, UErrorCode& status);
00967 
00968     void init(const UnicodeString& rules, LocalizationInfo* localizations, UParseError& perror, UErrorCode& status);
00969     void dispose();
00970     void stripWhitespace(UnicodeString& src);
00971     void initDefaultRuleSet();
00972     void format(double number, NFRuleSet& ruleSet);
00973     NFRuleSet* findRuleSet(const UnicodeString& name, UErrorCode& status) const;
00974 
00975     /* friend access */
00976     friend class NFSubstitution;
00977     friend class NFRule;
00978     friend class FractionalPartSubstitution;
00979 
00980     inline NFRuleSet * getDefaultRuleSet() const;
00981     Collator * getCollator() const;
00982     DecimalFormatSymbols * getDecimalFormatSymbols() const;
00983 
00984 private:
00985     NFRuleSet **ruleSets;
00986     NFRuleSet *defaultRuleSet;
00987     Locale locale;
00988     Collator* collator;
00989     DecimalFormatSymbols* decimalFormatSymbols;
00990     UBool lenient;
00991     UnicodeString* lenientParseRules;
00992     LocalizationInfo* localizations;
00993 };
00994 
00995 // ---------------
00996 
00997 inline UnicodeString&
00998 RuleBasedNumberFormat::format(const Formattable& obj,
00999                               UnicodeString& result,
01000                               UErrorCode& status) const
01001 {
01002     // Don't use Format:: - use immediate base class only,
01003     // in case immediate base modifies behavior later.
01004     // dlf - the above comment is bogus, if there were a reason to modify
01005     // it, it would be virtual, and there's no reason because it is
01006     // a one-line macro in NumberFormat anyway, just like this one.
01007     return NumberFormat::format(obj, result, status);
01008 }
01009 
01010 inline UnicodeString&
01011 RuleBasedNumberFormat::format(double number, UnicodeString& output) const {
01012     FieldPosition pos(0);
01013     return format(number, output, pos);
01014 }
01015 
01016 inline UnicodeString&
01017 RuleBasedNumberFormat::format(int32_t number, UnicodeString& output) const {
01018     FieldPosition pos(0);
01019     return format(number, output, pos);
01020 }
01021 
01022 inline void
01023 RuleBasedNumberFormat::parse(const UnicodeString& text, Formattable& result, UErrorCode& status) const
01024 {
01025     NumberFormat::parse(text, result, status);
01026 }
01027 
01028 #if !UCONFIG_NO_COLLATION
01029 
01030 inline UBool
01031 RuleBasedNumberFormat::isLenient(void) const {
01032     return lenient;
01033 }
01034 
01035 #endif
01036 
01037 inline NFRuleSet*
01038 RuleBasedNumberFormat::getDefaultRuleSet() const {
01039     return defaultRuleSet;
01040 }
01041 
01042 U_NAMESPACE_END
01043 
01044 /* U_HAVE_RBNF */
01045 #endif
01046 
01047 /* RBNF_H */
01048 #endif

Generated on Tue Jul 26 00:39:58 2005 for ICU 3.2 by  doxygen 1.3.9.1