ICU 78.1  78.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 
67 #ifndef U_HIDE_DEPRECATED_API
73 #endif // U_HIDE_DERECATED_API
80  URBNF_NUMBERING_SYSTEM = 3,
81 #ifndef U_HIDE_DEPRECATED_API
87 #endif // U_HIDE_DEPRECATED_API
88 };
89 
625 public:
626 
627  //-----------------------------------------------------------------------
628  // constructors
629  //-----------------------------------------------------------------------
630 
642  UParseError& perror,
643  UErrorCode& status);
644 
669  const UnicodeString& localizations,
670  UParseError& perror,
671  UErrorCode& status);
672 
689  const Locale& locale,
690  UParseError& perror,
691  UErrorCode& status);
692 
720  const UnicodeString& localizations,
721  const Locale& locale,
722  UParseError& perror,
723  UErrorCode& status);
724 
744 
745  //-----------------------------------------------------------------------
746  // boilerplate
747  //-----------------------------------------------------------------------
748 
755 
762 
768 
775  U_I18N_API virtual RuleBasedNumberFormat* clone() const override;
776 
784  U_I18N_API virtual bool operator==(const Format& other) const override;
785 
786 //-----------------------------------------------------------------------
787 // public API functions
788 //-----------------------------------------------------------------------
789 
796 
802  U_I18N_API virtual int32_t getNumberOfRuleSetNames() const;
803 
811  U_I18N_API virtual UnicodeString getRuleSetName(int32_t index) const;
812 
819 
828  U_I18N_API virtual Locale getRuleSetDisplayNameLocale(int32_t index, UErrorCode& status) const;
829 
844  const Locale& locale = Locale::getDefault());
845 
855  const Locale& locale = Locale::getDefault());
856 
857 
858  using NumberFormat::format;
859 
868  U_I18N_API virtual UnicodeString& format(int32_t number,
869  UnicodeString& toAppendTo,
870  FieldPosition& pos) const override;
871 
880  U_I18N_API virtual UnicodeString& format(int64_t number,
881  UnicodeString& toAppendTo,
882  FieldPosition& pos) const override;
891  U_I18N_API virtual UnicodeString& format(double number,
892  UnicodeString& toAppendTo,
893  FieldPosition& pos) const override;
894 
906  U_I18N_API virtual UnicodeString& format(int32_t number,
907  const UnicodeString& ruleSetName,
908  UnicodeString& toAppendTo,
909  FieldPosition& pos,
910  UErrorCode& status) const;
922  U_I18N_API virtual UnicodeString& format(int64_t number,
923  const UnicodeString& ruleSetName,
924  UnicodeString& toAppendTo,
925  FieldPosition& pos,
926  UErrorCode& status) const;
938  U_I18N_API virtual UnicodeString& format(double number,
939  const UnicodeString& ruleSetName,
940  UnicodeString& toAppendTo,
941  FieldPosition& pos,
942  UErrorCode& status) const;
943 
944 protected:
962  virtual UnicodeString& format(const number::impl::DecimalQuantity &number,
963  UnicodeString& appendTo,
964  FieldPosition& pos,
965  UErrorCode& status) const override;
966 public:
967 
968  using NumberFormat::parse;
969 
984  U_I18N_API virtual void parse(const UnicodeString& text,
985  Formattable& result,
986  ParsePosition& parsePosition) const override;
987 
988 #if !UCONFIG_NO_COLLATION
989 
1023  U_I18N_API virtual void setLenient(UBool enabled) override;
1024 
1032  U_I18N_API virtual inline UBool isLenient() const override;
1033 
1034 #endif
1035 
1044  U_I18N_API virtual void setDefaultRuleSet(const UnicodeString& ruleSetName, UErrorCode& status);
1045 
1053 
1064  U_I18N_API virtual void setContext(UDisplayContext value, UErrorCode& status) override;
1065 
1071  U_I18N_API virtual ERoundingMode getRoundingMode() const override;
1072 
1078  U_I18N_API virtual void setRoundingMode(ERoundingMode roundingMode) override;
1079 
1080 public:
1087 
1093  U_I18N_API virtual UClassID getDynamicClassID() const override;
1094 
1104 
1115 
1116 private:
1117  RuleBasedNumberFormat() = delete; // default constructor not implemented
1118 
1119  // this will ref the localizations if they are not nullptr
1120  // caller must deref to get adoption
1121  RuleBasedNumberFormat(const UnicodeString& description, LocalizationInfo* localizations,
1122  const Locale& locale, UParseError& perror, UErrorCode& status);
1123 
1124  void init(const UnicodeString& rules, LocalizationInfo* localizations, UParseError& perror, UErrorCode& status);
1125  void initCapitalizationContextInfo(const Locale& thelocale);
1126  void dispose();
1127  void stripWhitespace(UnicodeString& src);
1128  void initDefaultRuleSet();
1129  NFRuleSet* findRuleSet(const UnicodeString& name, UErrorCode& status) const;
1130 
1131  /* friend access */
1132  friend class NFSubstitution;
1133  friend class NFRule;
1134  friend class NFRuleSet;
1135  friend class FractionalPartSubstitution;
1136 
1137  inline NFRuleSet * getDefaultRuleSet() const;
1138  const RuleBasedCollator * getCollator() const;
1139  DecimalFormatSymbols * initializeDecimalFormatSymbols(UErrorCode &status);
1140  const DecimalFormatSymbols * getDecimalFormatSymbols() const;
1141  NFRule * initializeDefaultInfinityRule(UErrorCode &status);
1142  const NFRule * getDefaultInfinityRule() const;
1143  NFRule * initializeDefaultNaNRule(UErrorCode &status);
1144  const NFRule * getDefaultNaNRule() const;
1145  PluralFormat *createPluralFormat(UPluralType pluralType, const UnicodeString &pattern, UErrorCode& status) const;
1146  UnicodeString& adjustForCapitalizationContext(int32_t startPos, UnicodeString& currentResult, UErrorCode& status) const;
1147  UnicodeString& format(int64_t number, NFRuleSet *ruleSet, UnicodeString& toAppendTo, UErrorCode& status) const;
1148  void format(double number, NFRuleSet& rs, UnicodeString& toAppendTo, UErrorCode& status) const;
1149 
1150 private:
1151  NFRuleSet **fRuleSets;
1152  UnicodeString* ruleSetDescriptions;
1153  int32_t numRuleSets;
1154  NFRuleSet *defaultRuleSet;
1155  Locale locale;
1156  RuleBasedCollator* collator;
1157  DecimalFormatSymbols* decimalFormatSymbols;
1158  NFRule *defaultInfinityRule;
1159  NFRule *defaultNaNRule;
1160  ERoundingMode fRoundingMode;
1161  UBool lenient;
1162  UnicodeString* lenientParseRules;
1163  LocalizationInfo* localizations;
1164  UnicodeString originalDescription;
1165  UBool capitalizationInfoSet;
1166  UBool capitalizationForUIListMenu;
1167  UBool capitalizationForStandAlone;
1168  BreakIterator* capitalizationBrkIter;
1169 };
1170 
1171 // ---------------
1172 
1173 #if !UCONFIG_NO_COLLATION
1174 
1175 inline UBool
1176 RuleBasedNumberFormat::isLenient() const {
1177  return lenient;
1178 }
1179 
1180 #endif
1181 
1182 inline NFRuleSet*
1183 RuleBasedNumberFormat::getDefaultRuleSet() const {
1184  return defaultRuleSet;
1185 }
1186 
1187 U_NAMESPACE_END
1188 
1189 /* U_HAVE_RBNF */
1190 #endif
1191 
1192 #endif /* U_SHOW_CPLUSPLUS_API */
1193 
1194 /* RBNF_H */
1195 #endif
C++ API: Break Iterator.
The BreakIterator class implements methods for finding the location of boundaries in text.
Definition: brkiter.h:106
This class represents the set of symbols needed by DecimalFormat to format numbers.
Definition: dcfmtsym.h:86
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:98
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:198
U_I18N_API UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, UErrorCode &status) const
Formats an object to produce a string.
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 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
The RuleBasedNumberFormat class formats numbers according to a set of rules.
Definition: rbnf.h:624
virtual U_I18N_API void setContext(UDisplayContext value, UErrorCode &status) override
Set a particular UDisplayContext value in the formatter, such as UDISPCTX_CAPITALIZATION_FOR_STANDALO...
virtual U_I18N_API UnicodeString & format(int64_t number, UnicodeString &toAppendTo, FieldPosition &pos) const override
Formats the specified 64-bit number using the default ruleset.
virtual U_I18N_API UClassID getDynamicClassID() const override
ICU "poor man's RTTI", returns a UClassID for the actual class.
virtual U_I18N_API UnicodeString getRuleSetName(int32_t index) const
Return the name of the index'th public ruleSet.
U_I18N_API RuleBasedNumberFormat(const UnicodeString &rules, const UnicodeString &localizations, UParseError &perror, UErrorCode &status)
Creates a RuleBasedNumberFormat that behaves according to the description passed in.
virtual U_I18N_API UnicodeString getDefaultRuleSetName() const
Return the name of the current default rule set.
virtual U_I18N_API UnicodeString & format(double number, UnicodeString &toAppendTo, FieldPosition &pos) const override
Formats the specified number using the default ruleset.
virtual U_I18N_API int32_t getNumberOfRuleSetDisplayNameLocales() const
Return the number of locales for which we have localized rule set display names.
virtual U_I18N_API 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 U_I18N_API void setRoundingMode(ERoundingMode roundingMode) override
Set the rounding mode.
U_I18N_API 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 U_I18N_API int32_t getNumberOfRuleSetNames() const
Return the number of public rule set names.
virtual U_I18N_API UnicodeString getRuleSetDisplayName(int32_t index, const Locale &locale=Locale::getDefault())
Return the rule set display names for the provided locale.
virtual U_I18N_API void setDefaultRuleSet(const UnicodeString &ruleSetName, UErrorCode &status)
Override the default rule set to use.
virtual U_I18N_API bool operator==(const Format &other) const override
Return true if the given Format objects are semantically equal.
virtual U_I18N_API UnicodeString & format(int32_t number, UnicodeString &toAppendTo, FieldPosition &pos) const override
Formats the specified 32-bit number using the default ruleset.
virtual U_I18N_API ~RuleBasedNumberFormat()
Release memory allocated for a RuleBasedNumberFormat when you are finished with it.
static U_I18N_API UClassID getStaticClassID()
ICU "poor man's RTTI", returns a UClassID for this class.
virtual U_I18N_API RuleBasedNumberFormat * clone() const override
Clone this object polymorphically.
virtual U_I18N_API UnicodeString & format(int32_t number, const UnicodeString &ruleSetName, UnicodeString &toAppendTo, FieldPosition &pos, UErrorCode &status) const
Formats the specified number using the named ruleset.
virtual U_I18N_API ERoundingMode getRoundingMode() const override
Get the rounding mode.
virtual U_I18N_API void setDecimalFormatSymbols(const DecimalFormatSymbols &symbols)
Sets the decimal format symbols, which is generally not changed by the programmer or user.
U_I18N_API RuleBasedNumberFormat(URBNFRuleSetTag tag, const Locale &locale, UErrorCode &status)
Creates a RuleBasedNumberFormat from a predefined ruleset.
virtual U_I18N_API UnicodeString getRuleSetDisplayName(const UnicodeString &ruleSetName, const Locale &locale=Locale::getDefault())
Return the rule set display name for the provided rule set and locale.
virtual U_I18N_API Locale getRuleSetDisplayNameLocale(int32_t index, UErrorCode &status) const
Return the index'th display name locale.
virtual U_I18N_API 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 U_I18N_API UnicodeString & format(double number, const UnicodeString &ruleSetName, UnicodeString &toAppendTo, FieldPosition &pos, UErrorCode &status) const
Formats the specified number using the named ruleset.
U_I18N_API RuleBasedNumberFormat(const UnicodeString &rules, UParseError &perror, UErrorCode &status)
Creates a RuleBasedNumberFormat that behaves according to the description passed in.
virtual U_I18N_API UnicodeString getRules() const
return the rules that were provided to the RuleBasedNumberFormat.
virtual U_I18N_API void setLenient(UBool enabled) override
Turns lenient parse mode on and off.
U_I18N_API RuleBasedNumberFormat & operator=(const RuleBasedNumberFormat &rhs)
Assignment operator.
U_I18N_API RuleBasedNumberFormat(const UnicodeString &rules, const Locale &locale, UParseError &perror, UErrorCode &status)
Creates a RuleBasedNumberFormat that behaves according to the rules passed in.
virtual U_I18N_API void adoptDecimalFormatSymbols(DecimalFormatSymbols *symbolsToAdopt)
Sets the decimal format symbols, which is generally not changed by the programmer or user.
virtual UnicodeString & format(const number::impl::DecimalQuantity &number, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const override
Format a decimal number.
U_I18N_API RuleBasedNumberFormat(const RuleBasedNumberFormat &rhs)
Copy constructor.
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:303
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_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:269
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.
Definition: upluralrules.h:59
Basic definitions for ICU, for both C and C++ APIs.
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Definition: utypes.h:509
#define U_I18N_API_CLASS
Set to export library symbols from inside the i18n library, and to import them from outside,...
Definition: utypes.h:457
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside.
Definition: utypes.h:316