00001
00002
00003
00004
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
00032
U_NAMESPACE_BEGIN
00033
00034
class NFRuleSet;
00035
00041
enum URBNFRuleSetTag {
00042
URBNF_SPELLOUT,
00043 URBNF_ORDINAL,
00044
URBNF_DURATION,
00045
URBNF_COUNT
00046 };
00047
00048
#if UCONFIG_NO_COLLATION
00049
class Collator;
00050
#endif
00051
00481
class U_I18N_API RuleBasedNumberFormat :
public NumberFormat {
00482
public:
00483
00484
00485
00486
00487
00503 RuleBasedNumberFormat(
const UnicodeString& rules,
const Locale& locale,
00504
UParseError& perror,
UErrorCode& status);
00505
00519 RuleBasedNumberFormat(URBNFRuleSetTag tag,
const Locale& locale, UErrorCode& status);
00520
00521
00522
00523
00524
00530 RuleBasedNumberFormat(
const RuleBasedNumberFormat& rhs);
00531
00537 RuleBasedNumberFormat& operator=(
const RuleBasedNumberFormat& rhs);
00538
00543
virtual ~RuleBasedNumberFormat();
00544
00551
virtual Format*
clone(
void) const;
00552
00560 virtual UBool operator==(const
Format& other) const;
00561
00562
00563
00564
00565
00571 virtual
UnicodeString getRules() const;
00572
00580 virtual
UnicodeString getRuleSetName(
int32_t index) const;
00581
00587 virtual int32_t getNumberOfRuleSetNames() const;
00588
00597 virtual
UnicodeString& format(int32_t number,
00598
UnicodeString& toAppendTo,
00599
FieldPosition& pos) const;
00600
00609 virtual
UnicodeString& format(
int64_t number,
00610
UnicodeString& toAppendTo,
00611
FieldPosition& pos) const;
00620 virtual
UnicodeString& format(
double number,
00621
UnicodeString& toAppendTo,
00622
FieldPosition& pos) const;
00623
00635 virtual
UnicodeString& format(int32_t number,
00636 const
UnicodeString& ruleSetName,
00637
UnicodeString& toAppendTo,
00638
FieldPosition& pos,
00639 UErrorCode& status) const;
00651 virtual
UnicodeString& format(int64_t number,
00652 const
UnicodeString& ruleSetName,
00653
UnicodeString& toAppendTo,
00654
FieldPosition& pos,
00655 UErrorCode& status) const;
00667 virtual
UnicodeString& format(
double number,
00668 const
UnicodeString& ruleSetName,
00669
UnicodeString& toAppendTo,
00670
FieldPosition& pos,
00671 UErrorCode& status) const;
00672
00682 virtual
UnicodeString& format(const
Formattable& obj,
00683
UnicodeString& toAppendTo,
00684
FieldPosition& pos,
00685 UErrorCode& status) const;
00694
UnicodeString& format(const
Formattable& obj,
00695
UnicodeString& result,
00696 UErrorCode& status) const;
00697
00705
UnicodeString& format(
double number,
00706
UnicodeString& output) const;
00707
00715
UnicodeString& format(int32_t number,
00716
UnicodeString& output) const;
00717
00732 virtual
void parse(const
UnicodeString& text,
00733
Formattable& result,
00734
ParsePosition& parsePosition) const;
00735
00736
00744 virtual inline
void parse(const
UnicodeString& text,
00745
Formattable& result,
00746 UErrorCode& status) const;
00747
00748 #if !UCONFIG_NO_COLLATION
00749
00783 virtual
void setLenient(UBool enabled);
00784
00792 virtual inline UBool isLenient(
void) const;
00793
00794 #endif
00795
00804 virtual
void setDefaultRuleSet(const
UnicodeString& ruleSetName, UErrorCode& status);
00805
00812 virtual
UnicodeString getDefaultRuleSetName() const;
00813
00814 public:
00820 static
UClassID getStaticClassID(
void);
00821
00827 virtual UClassID getDynamicClassID(
void) const;
00828
00829 private:
00830 RuleBasedNumberFormat();
00831
00832
void init(const
UnicodeString& rules,
UParseError& perror, UErrorCode& status);
00833
void dispose();
00834
void stripWhitespace(
UnicodeString& src);
00835
void initDefaultRuleSet();
00836
void format(
double number, NFRuleSet& ruleSet);
00837 NFRuleSet* findRuleSet(const
UnicodeString& name, UErrorCode& status) const;
00838
00839
00840 friend class NFSubstitution;
00841 friend class NFRule;
00842 friend class FractionalPartSubstitution;
00843
00844 inline NFRuleSet * getDefaultRuleSet() const;
00845
Collator * getCollator() const;
00846
DecimalFormatSymbols * getDecimalFormatSymbols() const;
00847
00848 private:
00849 NFRuleSet **ruleSets;
00850 NFRuleSet *defaultRuleSet;
00851
Locale locale;
00852
Collator* collator;
00853
DecimalFormatSymbols* decimalFormatSymbols;
00854 UBool lenient;
00855
UnicodeString* lenientParseRules;
00856 };
00857
00858
00859
00860 inline
UnicodeString&
00861 RuleBasedNumberFormat::format(const
Formattable& obj,
00862
UnicodeString& result,
00863 UErrorCode& status)
const
00864
{
00865
00866
00867
00868
00869
00870
return NumberFormat::format(obj, result, status);
00871 }
00872
00873
inline UnicodeString&
00874 RuleBasedNumberFormat::format(
double number,
UnicodeString& output)
const {
00875
FieldPosition pos(0);
00876
return format(number, output, pos);
00877 }
00878
00879
inline UnicodeString&
00880
RuleBasedNumberFormat::format(int32_t number,
UnicodeString& output)
const {
00881
FieldPosition pos(0);
00882
return format(number, output, pos);
00883 }
00884
00885
inline void
00886
RuleBasedNumberFormat::parse(
const UnicodeString& text,
Formattable& result, UErrorCode& status)
const
00887
{
00888
NumberFormat::parse(text, result, status);
00889 }
00890
00891
#if !UCONFIG_NO_COLLATION
00892
00893
inline UBool
00894 RuleBasedNumberFormat::isLenient(
void)
const {
00895
return lenient;
00896 }
00897
00898
#endif
00899
00900
inline NFRuleSet*
00901 RuleBasedNumberFormat::getDefaultRuleSet()
const {
00902
return defaultRuleSet;
00903 }
00904
00905
U_NAMESPACE_END
00906
00907
00908
#endif
00909
00910
00911
#endif