ICU 77.1: i18n/unicode/rbnf.h Source File

ICU 77.1 77.1

rbnf.h
Go to the documentation of this file.
1 // © 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /*
4 *******************************************************************************
5 * Copyright (C) 1997-2015, International Business Machines Corporation and others.
6 * All Rights Reserved.
7 *******************************************************************************
8 */
9
10 #ifndef RBNF_H
11 #define RBNF_H
12
13 #include "unicode/utypes.h"
14
15 #if U_SHOW_CPLUSPLUS_API
16
29 #if UCONFIG_NO_FORMATTING
30 #define U_HAVE_RBNF 0
31 #else
32 #define U_HAVE_RBNF 1
33
34 #include "unicode/dcfmtsym.h"
35 #include "unicode/fmtable.h"
36 #include "unicode/locid.h"
37 #include "unicode/numfmt.h"
38 #include "unicode/unistr.h"
39 #include "unicode/strenum.h"
40 #include "unicode/brkiter.h"
41 #include "unicode/upluralrules.h"
42
43 U_NAMESPACE_BEGIN
44
45 class NFRule;
46 class NFRuleSet;
47 class LocalizationInfo;
48 class PluralFormat;
49 class RuleBasedCollator;
50
56 enum URBNFRuleSetTag {
61 URBNF_SPELLOUT,
66 URBNF_ORDINAL,
67 #ifndef U_HIDE_DEPRECATED_API
72 URBNF_DURATION,
73 #endif // U_HIDE_DERECATED_API
80 URBNF_NUMBERING_SYSTEM = 3,
81 #ifndef U_HIDE_DEPRECATED_API
86 URBNF_COUNT
87 #endif // U_HIDE_DEPRECATED_API
88 };
89
624 class U_I18N_API RuleBasedNumberFormat : public NumberFormat {
625 public:
626
627 //-----------------------------------------------------------------------
628 // constructors
629 //-----------------------------------------------------------------------
630
641 RuleBasedNumberFormat(const UnicodeString& rules, UParseError& perror, UErrorCode& status);
642
666 RuleBasedNumberFormat(const UnicodeString& rules, const UnicodeString& localizations,
667 UParseError& perror, UErrorCode& status);
668
684 RuleBasedNumberFormat(const UnicodeString& rules, const Locale& locale,
685 UParseError& perror, UErrorCode& status);
686
713 RuleBasedNumberFormat(const UnicodeString& rules, const UnicodeString& localizations,
714 const Locale& locale, UParseError& perror, UErrorCode& status);
715
734 RuleBasedNumberFormat(URBNFRuleSetTag tag, const Locale& locale, UErrorCode& status);
735
736 //-----------------------------------------------------------------------
737 // boilerplate
738 //-----------------------------------------------------------------------
739
745 RuleBasedNumberFormat(const RuleBasedNumberFormat& rhs);
746
752 RuleBasedNumberFormat& operator=(const RuleBasedNumberFormat& rhs);
753
758 virtual ~RuleBasedNumberFormat();
759
766 virtual RuleBasedNumberFormat* clone() const override;
767
775 virtual bool operator==(const Format& other) const override;
776
777 //-----------------------------------------------------------------------
778 // public API functions
779 //-----------------------------------------------------------------------
780
786 virtual UnicodeString getRules() const;
787
793 virtual int32_t getNumberOfRuleSetNames() const;
794
802 virtual UnicodeString getRuleSetName(int32_t index) const;
803
809 virtual int32_t getNumberOfRuleSetDisplayNameLocales() const;
810
819 virtual Locale getRuleSetDisplayNameLocale(int32_t index, UErrorCode& status) const;
820
834 virtual UnicodeString getRuleSetDisplayName(int32_t index,
835 const Locale& locale = Locale::getDefault());
836
845 virtual UnicodeString getRuleSetDisplayName(const UnicodeString& ruleSetName,
846 const Locale& locale = Locale::getDefault());
847
848
849 using NumberFormat::format;
850
859 virtual UnicodeString& format(int32_t number,
860 UnicodeString& toAppendTo,
861 FieldPosition& pos) const override;
862
871 virtual UnicodeString& format(int64_t number,
872 UnicodeString& toAppendTo,
873 FieldPosition& pos) const override;
882 virtual UnicodeString& format(double number,
883 UnicodeString& toAppendTo,
884 FieldPosition& pos) const override;
885
897 virtual UnicodeString& format(int32_t number,
898 const UnicodeString& ruleSetName,
899 UnicodeString& toAppendTo,
900 FieldPosition& pos,
901 UErrorCode& status) const;
913 virtual UnicodeString& format(int64_t number,
914 const UnicodeString& ruleSetName,
915 UnicodeString& toAppendTo,
916 FieldPosition& pos,
917 UErrorCode& status) const;
929 virtual UnicodeString& format(double number,
930 const UnicodeString& ruleSetName,
931 UnicodeString& toAppendTo,
932 FieldPosition& pos,
933 UErrorCode& status) const;
934
935 protected:
953 virtual UnicodeString& format(const number::impl::DecimalQuantity &number,
954 UnicodeString& appendTo,
955 FieldPosition& pos,
956 UErrorCode& status) const override;
957 public:
958
959 using NumberFormat::parse;
960
975 virtual void parse(const UnicodeString& text,
976 Formattable& result,
977 ParsePosition& parsePosition) const override;
978
979 #if !UCONFIG_NO_COLLATION
980
1014 virtual void setLenient(UBool enabled) override;
1015
1023 virtual inline UBool isLenient() const override;
1024
1025 #endif
1026
1035 virtual void setDefaultRuleSet(const UnicodeString& ruleSetName, UErrorCode& status);
1036
1043 virtual UnicodeString getDefaultRuleSetName() const;
1044
1055 virtual void setContext(UDisplayContext value, UErrorCode& status) override;
1056
1062 virtual ERoundingMode getRoundingMode() const override;
1063
1069 virtual void setRoundingMode(ERoundingMode roundingMode) override;
1070
1071 public:
1077 static UClassID U_EXPORT2 getStaticClassID();
1078
1084 virtual UClassID getDynamicClassID() const override;
1085
1094 virtual void adoptDecimalFormatSymbols(DecimalFormatSymbols* symbolsToAdopt);
1095
1105 virtual void setDecimalFormatSymbols(const DecimalFormatSymbols& symbols);
1106
1107 private:
1108 RuleBasedNumberFormat() = delete; // default constructor not implemented
1109
1110 // this will ref the localizations if they are not nullptr
1111 // caller must deref to get adoption
1112 RuleBasedNumberFormat(const UnicodeString& description, LocalizationInfo* localizations,
1113 const Locale& locale, UParseError& perror, UErrorCode& status);
1114
1115 void init(const UnicodeString& rules, LocalizationInfo* localizations, UParseError& perror, UErrorCode& status);
1116 void initCapitalizationContextInfo(const Locale& thelocale);
1117 void dispose();
1118 void stripWhitespace(UnicodeString& src);
1119 void initDefaultRuleSet();
1120 NFRuleSet* findRuleSet(const UnicodeString& name, UErrorCode& status) const;
1121
1122 /* friend access */
1123 friend class NFSubstitution;
1124 friend class NFRule;
1125 friend class NFRuleSet;
1126 friend class FractionalPartSubstitution;
1127
1128 inline NFRuleSet * getDefaultRuleSet() const;
1129 const RuleBasedCollator * getCollator() const;
1130 DecimalFormatSymbols * initializeDecimalFormatSymbols(UErrorCode &status);
1131 const DecimalFormatSymbols * getDecimalFormatSymbols() const;
1132 NFRule * initializeDefaultInfinityRule(UErrorCode &status);
1133 const NFRule * getDefaultInfinityRule() const;
1134 NFRule * initializeDefaultNaNRule(UErrorCode &status);
1135 const NFRule * getDefaultNaNRule() const;
1136 PluralFormat *createPluralFormat(UPluralType pluralType, const UnicodeString &pattern, UErrorCode& status) const;
1137 UnicodeString& adjustForCapitalizationContext(int32_t startPos, UnicodeString& currentResult, UErrorCode& status) const;
1138 UnicodeString& format(int64_t number, NFRuleSet *ruleSet, UnicodeString& toAppendTo, UErrorCode& status) const;
1139 void format(double number, NFRuleSet& rs, UnicodeString& toAppendTo, UErrorCode& status) const;
1140
1141 private:
1142 NFRuleSet **fRuleSets;
1143 UnicodeString* ruleSetDescriptions;
1144 int32_t numRuleSets;
1145 NFRuleSet *defaultRuleSet;
1146 Locale locale;
1147 RuleBasedCollator* collator;
1148 DecimalFormatSymbols* decimalFormatSymbols;
1149 NFRule *defaultInfinityRule;
1150 NFRule *defaultNaNRule;
1151 ERoundingMode fRoundingMode;
1152 UBool lenient;
1153 UnicodeString* lenientParseRules;
1154 LocalizationInfo* localizations;
1155 UnicodeString originalDescription;
1156 UBool capitalizationInfoSet;
1157 UBool capitalizationForUIListMenu;
1158 UBool capitalizationForStandAlone;
1159 BreakIterator* capitalizationBrkIter;
1160 };
1161
1162 // ---------------
1163
1164 #if !UCONFIG_NO_COLLATION
1165
1166 inline UBool
1167 RuleBasedNumberFormat::isLenient() const {
1168 return lenient;
1169 }
1170
1171 #endif
1172
1173 inline NFRuleSet*
1174 RuleBasedNumberFormat::getDefaultRuleSet() const {
1175 return defaultRuleSet;
1176 }
1177
1178 U_NAMESPACE_END
1179
1180 /* U_HAVE_RBNF */
1181 #endif
1182
1183 #endif /* U_SHOW_CPLUSPLUS_API */
1184
1185 /* RBNF_H */
1186 #endif
brkiter.h
C++ API: Break Iterator.
icu::BreakIterator
The BreakIterator class implements methods for finding the location of boundaries in text.
Definition: brkiter.h:108
icu::DecimalFormatSymbols
This class represents the set of symbols needed by DecimalFormat to format numbers.
Definition: dcfmtsym.h:87
icu::FieldPosition
FieldPosition is a simple class used by Format and its subclasses to identify fields in formatted out...
Definition: fieldpos.h:110
icu::Format
Base class for all formats.
Definition: format.h:99
icu::Formattable
Formattable objects can be passed to the Format class or its subclasses for formatting.
Definition: fmtable.h:63
icu::Locale
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:195
icu::NumberFormat
Definition: numfmt.h:175
icu::NumberFormat::ERoundingMode
ERoundingMode
Rounding mode.
Definition: numfmt.h:186
icu::NumberFormat::parse
virtual void parse(const UnicodeString &text, Formattable &result, ParsePosition &parsePosition) const =0
Return a long if possible (e.g.
icu::NumberFormat::isLenient
virtual UBool isLenient() const
Returns whether lenient parsing is enabled (it is off by default).
Definition: numfmt.h:1274
icu::NumberFormat::format
UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, UErrorCode &status) const
Formats an object to produce a string.
icu::ParsePosition
ParsePosition is a simple class used by Format and its subclasses to keep track of the current positi...
Definition: parsepos.h:52
icu::PluralFormat
Definition: plurfmt.h:148
icu::RuleBasedCollator
The RuleBasedCollator class provides the implementation of Collator, using data-driven tables.
Definition: tblcoll.h:115
icu::RuleBasedNumberFormat
The RuleBasedNumberFormat class formats numbers according to a set of rules.
Definition: rbnf.h:624
icu::RuleBasedNumberFormat::setLenient
virtual void setLenient(UBool enabled) override
Turns lenient parse mode on and off.
icu::RuleBasedNumberFormat::operator=
RuleBasedNumberFormat & operator=(const RuleBasedNumberFormat &rhs)
Assignment operator.
icu::RuleBasedNumberFormat::format
virtual UnicodeString & format(double number, UnicodeString &toAppendTo, FieldPosition &pos) const override
Formats the specified number using the default ruleset.
icu::RuleBasedNumberFormat::getRuleSetName
virtual UnicodeString getRuleSetName(int32_t index) const
Return the name of the index'th public ruleSet.
icu::RuleBasedNumberFormat::RuleBasedNumberFormat
RuleBasedNumberFormat(const UnicodeString &rules, const UnicodeString &localizations, UParseError &perror, UErrorCode &status)
Creates a RuleBasedNumberFormat that behaves according to the description passed in.
icu::RuleBasedNumberFormat::format
virtual UnicodeString & format(int32_t number, UnicodeString &toAppendTo, FieldPosition &pos) const override
Formats the specified 32-bit number using the default ruleset.
icu::RuleBasedNumberFormat::getRules
virtual UnicodeString getRules() const
return the rules that were provided to the RuleBasedNumberFormat.
icu::RuleBasedNumberFormat::getNumberOfRuleSetDisplayNameLocales
virtual int32_t getNumberOfRuleSetDisplayNameLocales() const
Return the number of locales for which we have localized rule set display names.
icu::RuleBasedNumberFormat::RuleBasedNumberFormat
RuleBasedNumberFormat(const UnicodeString &rules, const Locale &locale, UParseError &perror, UErrorCode &status)
Creates a RuleBasedNumberFormat that behaves according to the rules passed in.
icu::RuleBasedNumberFormat::getNumberOfRuleSetNames
virtual int32_t getNumberOfRuleSetNames() const
Return the number of public rule set names.
icu::RuleBasedNumberFormat::format
virtual UnicodeString & format(int64_t number, UnicodeString &toAppendTo, FieldPosition &pos) const override
Formats the specified 64-bit number using the default ruleset.
icu::RuleBasedNumberFormat::setDecimalFormatSymbols
virtual void setDecimalFormatSymbols(const DecimalFormatSymbols &symbols)
Sets the decimal format symbols, which is generally not changed by the programmer or user.
icu::RuleBasedNumberFormat::setContext
virtual void setContext(UDisplayContext value, UErrorCode &status) override
Set a particular UDisplayContext value in the formatter, such as UDISPCTX_CAPITALIZATION_FOR_STANDALO...
icu::RuleBasedNumberFormat::format
virtual UnicodeString & format(int64_t number, const UnicodeString &ruleSetName, UnicodeString &toAppendTo, FieldPosition &pos, UErrorCode &status) const
Formats the specified 64-bit number using the named ruleset.
icu::RuleBasedNumberFormat::~RuleBasedNumberFormat
virtual ~RuleBasedNumberFormat()
Release memory allocated for a RuleBasedNumberFormat when you are finished with it.
icu::RuleBasedNumberFormat::parse
virtual void parse(const UnicodeString &text, Formattable &result, ParsePosition &parsePosition) const override
Parses the specified string, beginning at the specified position, according to this formatter's rules...
icu::RuleBasedNumberFormat::getRoundingMode
virtual ERoundingMode getRoundingMode() const override
Get the rounding mode.
icu::RuleBasedNumberFormat::setRoundingMode
virtual void setRoundingMode(ERoundingMode roundingMode) override
Set the rounding mode.
icu::RuleBasedNumberFormat::setDefaultRuleSet
virtual void setDefaultRuleSet(const UnicodeString &ruleSetName, UErrorCode &status)
Override the default rule set to use.
icu::RuleBasedNumberFormat::getDynamicClassID
virtual UClassID getDynamicClassID() const override
ICU "poor man's RTTI", returns a UClassID for the actual class.
icu::RuleBasedNumberFormat::clone
virtual RuleBasedNumberFormat * clone() const override
Clone this object polymorphically.
icu::RuleBasedNumberFormat::getStaticClassID
static UClassID getStaticClassID()
ICU "poor man's RTTI", returns a UClassID for this class.
icu::RuleBasedNumberFormat::format
virtual UnicodeString & format(double number, const UnicodeString &ruleSetName, UnicodeString &toAppendTo, FieldPosition &pos, UErrorCode &status) const
Formats the specified number using the named ruleset.
icu::RuleBasedNumberFormat::RuleBasedNumberFormat
RuleBasedNumberFormat(URBNFRuleSetTag tag, const Locale &locale, UErrorCode &status)
Creates a RuleBasedNumberFormat from a predefined ruleset.
icu::RuleBasedNumberFormat::getRuleSetDisplayName
virtual UnicodeString getRuleSetDisplayName(int32_t index, const Locale &locale=Locale::getDefault())
Return the rule set display names for the provided locale.
icu::RuleBasedNumberFormat::RuleBasedNumberFormat
RuleBasedNumberFormat(const RuleBasedNumberFormat &rhs)
Copy constructor.
icu::RuleBasedNumberFormat::getDefaultRuleSetName
virtual UnicodeString getDefaultRuleSetName() const
Return the name of the current default rule set.
icu::RuleBasedNumberFormat::RuleBasedNumberFormat
RuleBasedNumberFormat(const UnicodeString &rules, const UnicodeString &localizations, const Locale &locale, UParseError &perror, UErrorCode &status)
Creates a RuleBasedNumberFormat that behaves according to the description passed in.
icu::RuleBasedNumberFormat::getRuleSetDisplayNameLocale
virtual Locale getRuleSetDisplayNameLocale(int32_t index, UErrorCode &status) const
Return the index'th display name locale.
icu::RuleBasedNumberFormat::format
virtual UnicodeString & format(const number::impl::DecimalQuantity &number, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const override
Format a decimal number.
icu::RuleBasedNumberFormat::format
virtual UnicodeString & format(int32_t number, const UnicodeString &ruleSetName, UnicodeString &toAppendTo, FieldPosition &pos, UErrorCode &status) const
Formats the specified number using the named ruleset.
icu::RuleBasedNumberFormat::operator==
virtual bool operator==(const Format &other) const override
Return true if the given Format objects are semantically equal.
icu::RuleBasedNumberFormat::getRuleSetDisplayName
virtual UnicodeString getRuleSetDisplayName(const UnicodeString &ruleSetName, const Locale &locale=Locale::getDefault())
Return the rule set display name for the provided rule set and locale.
icu::RuleBasedNumberFormat::adoptDecimalFormatSymbols
virtual void adoptDecimalFormatSymbols(DecimalFormatSymbols *symbolsToAdopt)
Sets the decimal format symbols, which is generally not changed by the programmer or user.
icu::RuleBasedNumberFormat::RuleBasedNumberFormat
RuleBasedNumberFormat(const UnicodeString &rules, UParseError &perror, UErrorCode &status)
Creates a RuleBasedNumberFormat that behaves according to the description passed in.
icu::UnicodeString
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:296
dcfmtsym.h
C++ API: Symbols for formatting numbers.
fmtable.h
C++ API: Formattable is a thin wrapper for primitive types used for formatting and parsing.
locid.h
C++ API: Locale ID object.
icu::URBNFRuleSetTag
URBNFRuleSetTag
Tags for the predefined rulesets.
Definition: rbnf.h:56
icu::URBNF_COUNT
@ URBNF_COUNT
One more than the highest normal URBNFRuleSetTag value.
Definition: rbnf.h:86
icu::URBNF_DURATION
@ URBNF_DURATION
Requests predefined ruleset for formatting a value as a duration in hours, minutes,...
Definition: rbnf.h:72
icu::URBNF_ORDINAL
@ URBNF_ORDINAL
Requests predefined ruleset for the ordinal form of a number.
Definition: rbnf.h:66
icu::URBNF_SPELLOUT
@ URBNF_SPELLOUT
Requests predefined ruleset for spelling out numeric values in words.
Definition: rbnf.h:61
numfmt.h
C++ API: Compatibility APIs for number formatting.
strenum.h
C++ API: String Enumeration.
UParseError
A UParseError struct is used to returned detailed information about parsing errors.
Definition: parseerr.h:58
UDisplayContext
UDisplayContext
Display context settings.
Definition: udisplaycontext.h:64
UBool
int8_t UBool
The ICU boolean type, a signed-byte integer.
Definition: umachine.h:247
unistr.h
C++ API: Unicode String.
UClassID
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:96
upluralrules.h
C API: Plural rules, select plural keywords for numeric values.
UPluralType
UPluralType
Type of plurals and PluralRules.
Definition: upluralrules.h:59
utypes.h
Basic definitions for ICU, for both C and C++ APIs.
UErrorCode
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Definition: utypes.h:430
U_I18N_API
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside.
Definition: utypes.h:316