00001
00002
00003
00004
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
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
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
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
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
00824
00825
00826
00827
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
00862
#endif
00863
00864
00865
#endif