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
21
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"
42
43U_NAMESPACE_BEGIN
44
45class NFRule;
46class NFRuleSet;
47class LocalizationInfo;
48class PluralFormat;
49class RuleBasedCollator;
50
67#ifndef U_HIDE_DEPRECATED_API
73#endif // U_HIDE_DERECATED_API
81#ifndef U_HIDE_DEPRECATED_API
87#endif // U_HIDE_DEPRECATED_API
88};
89
625public:
626
627 //-----------------------------------------------------------------------
628 // constructors
629 //-----------------------------------------------------------------------
630
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
735
736 //-----------------------------------------------------------------------
737 // boilerplate
738 //-----------------------------------------------------------------------
739
746
753
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
810
819 virtual Locale getRuleSetDisplayNameLocale(int32_t index, UErrorCode& status) const;
820
835 const Locale& locale = Locale::getDefault());
836
846 const Locale& locale = Locale::getDefault());
847
848
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
935protected:
953 virtual UnicodeString& format(const number::impl::DecimalQuantity &number,
954 UnicodeString& appendTo,
955 FieldPosition& pos,
956 UErrorCode& status) const override;
957public:
958
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
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
1071public:
1077 static UClassID U_EXPORT2 getStaticClassID();
1078
1084 virtual UClassID getDynamicClassID() const override;
1085
1095
1105 virtual void setDecimalFormatSymbols(const DecimalFormatSymbols& symbols);
1106
1107private:
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
1141private:
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
1166inline UBool
1168 return lenient;
1169}
1170
1171#endif
1172
1173inline NFRuleSet*
1174RuleBasedNumberFormat::getDefaultRuleSet() const {
1175 return defaultRuleSet;
1176}
1177
1178U_NAMESPACE_END
1179
1180/* U_HAVE_RBNF */
1181#endif
1182
1183#endif /* U_SHOW_CPLUSPLUS_API */
1184
1185/* RBNF_H */
1186#endif
C++ API: Break Iterator.
The BreakIterator class implements methods for finding the location of boundaries in text.
Definition brkiter.h:108
This class represents the set of symbols needed by DecimalFormat to format numbers.
Definition dcfmtsym.h:87
FieldPosition is a simple class used by Format and its subclasses to identify fields in formatted out...
Definition fieldpos.h:110
Base class for all formats.
Definition format.h:99
Formattable objects can be passed to the Format class or its subclasses for formatting.
Definition fmtable.h:63
A Locale object represents a specific geographical, political, or cultural region.
Definition locid.h:195
static const Locale & getDefault()
Common methods of getting the current default Locale.
NumberFormat()
Default constructor for subclass use only.
ERoundingMode
Rounding mode.
Definition numfmt.h:186
virtual void parse(const UnicodeString &text, Formattable &result, ParsePosition &parsePosition) const =0
Return a long if possible (e.g.
virtual UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const override
Format an object to produce a string.
virtual UBool isLenient() const
Returns whether lenient parsing is enabled (it is off by default).
Definition numfmt.h:1274
ParsePosition is a simple class used by Format and its subclasses to keep track of the current positi...
Definition parsepos.h:52
The RuleBasedCollator class provides the implementation of Collator, using data-driven tables.
Definition tblcoll.h:115
virtual UBool isLenient() const override
Returns true if lenient-parse mode is turned on.
Definition rbnf.h:1167
virtual void setLenient(UBool enabled) override
Turns lenient parse mode on and off.
virtual UnicodeString & format(int64_t number, UnicodeString &toAppendTo, FieldPosition &pos) const override
Formats the specified 64-bit number using the default ruleset.
virtual UnicodeString getRuleSetName(int32_t index) const
Return the name of the index'th public ruleSet.
RuleBasedNumberFormat(const UnicodeString &rules, const UnicodeString &localizations, UParseError &perror, UErrorCode &status)
Creates a RuleBasedNumberFormat that behaves according to the description passed in.
virtual UnicodeString getRules() const
return the rules that were provided to the RuleBasedNumberFormat.
virtual int32_t getNumberOfRuleSetDisplayNameLocales() const
Return the number of locales for which we have localized rule set display names.
RuleBasedNumberFormat(const UnicodeString &rules, const Locale &locale, UParseError &perror, UErrorCode &status)
Creates a RuleBasedNumberFormat that behaves according to the rules passed in.
virtual int32_t getNumberOfRuleSetNames() const
Return the number of public rule set names.
virtual UnicodeString & format(double number, const UnicodeString &ruleSetName, UnicodeString &toAppendTo, FieldPosition &pos, UErrorCode &status) const
Formats the specified number using the named ruleset.
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.
virtual UnicodeString & format(int32_t number, UnicodeString &toAppendTo, FieldPosition &pos) const override
Formats the specified 32-bit number using the default ruleset.
virtual void setDecimalFormatSymbols(const DecimalFormatSymbols &symbols)
Sets the decimal format symbols, which is generally not changed by the programmer or user.
virtual void setContext(UDisplayContext value, UErrorCode &status) override
Set a particular UDisplayContext value in the formatter, such as UDISPCTX_CAPITALIZATION_FOR_STANDALO...
virtual ~RuleBasedNumberFormat()
Release memory allocated for a RuleBasedNumberFormat when you are finished with it.
virtual UnicodeString & format(int32_t number, const UnicodeString &ruleSetName, UnicodeString &toAppendTo, FieldPosition &pos, UErrorCode &status) const
Formats the specified number using the named ruleset.
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...
virtual ERoundingMode getRoundingMode() const override
Get the rounding mode.
virtual void setRoundingMode(ERoundingMode roundingMode) override
Set the rounding mode.
virtual void setDefaultRuleSet(const UnicodeString &ruleSetName, UErrorCode &status)
Override the default rule set to use.
virtual UClassID getDynamicClassID() const override
ICU "poor man's RTTI", returns a UClassID for the actual class.
static UClassID getStaticClassID()
ICU "poor man's RTTI", returns a UClassID for this class.
RuleBasedNumberFormat & operator=(const RuleBasedNumberFormat &rhs)
Assignment operator.
virtual UnicodeString & format(double number, UnicodeString &toAppendTo, FieldPosition &pos) const override
Formats the specified number using the default ruleset.
virtual RuleBasedNumberFormat * clone() const override
Clone this object polymorphically.
virtual UnicodeString & format(const number::impl::DecimalQuantity &number, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const override
Format a decimal number.
RuleBasedNumberFormat(URBNFRuleSetTag tag, const Locale &locale, UErrorCode &status)
Creates a RuleBasedNumberFormat from a predefined ruleset.
virtual UnicodeString getRuleSetDisplayName(int32_t index, const Locale &locale=Locale::getDefault())
Return the rule set display names for the provided locale.
RuleBasedNumberFormat(const RuleBasedNumberFormat &rhs)
Copy constructor.
virtual UnicodeString getDefaultRuleSetName() const
Return the name of the current default rule set.
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.
virtual Locale getRuleSetDisplayNameLocale(int32_t index, UErrorCode &status) const
Return the index'th display name locale.
virtual bool operator==(const Format &other) const override
Return true if the given Format objects are semantically equal.
virtual UnicodeString getRuleSetDisplayName(const UnicodeString &ruleSetName, const Locale &locale=Locale::getDefault())
Return the rule set display name for the provided rule set and locale.
virtual void adoptDecimalFormatSymbols(DecimalFormatSymbols *symbolsToAdopt)
Sets the decimal format symbols, which is generally not changed by the programmer or user.
RuleBasedNumberFormat(const UnicodeString &rules, UParseError &perror, UErrorCode &status)
Creates a RuleBasedNumberFormat that behaves according to the description passed in.
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition unistr.h:296
C++ API: Symbols for formatting numbers.
C++ API: Formattable is a thin wrapper for primitive types used for formatting and parsing.
C++ API: Locale ID object.
URBNFRuleSetTag
Tags for the predefined rulesets.
Definition rbnf.h:56
@ URBNF_COUNT
One more than the highest normal URBNFRuleSetTag value.
Definition rbnf.h:86
@ URBNF_DURATION
Requests predefined ruleset for formatting a value as a duration in hours, minutes,...
Definition rbnf.h:72
@ URBNF_NUMBERING_SYSTEM
Requests predefined ruleset for various non-place-value numbering systems.
Definition rbnf.h:80
@ URBNF_ORDINAL
Requests predefined ruleset for the ordinal form of a number.
Definition rbnf.h:66
@ URBNF_SPELLOUT
Requests predefined ruleset for spelling out numeric values in words.
Definition rbnf.h:61
C++ API: Compatibility APIs for number formatting.
C++ API: String Enumeration.
A UParseError struct is used to returned detailed information about parsing errors.
Definition parseerr.h:58
UDisplayContext
Display context settings.
int8_t UBool
The ICU boolean type, a signed-byte integer.
Definition umachine.h:247
C++ API: Unicode String.
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition uobject.h:96
C API: Plural rules, select plural keywords for numeric values.
UPluralType
Type of plurals and PluralRules.
Basic definitions for ICU, for both C and C++ APIs.
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Definition utypes.h:430
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside.
Definition utypes.h:316