ICU 77.1  77.1
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
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 
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 
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 
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 
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
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
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
UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, UErrorCode &status) const
Formats an object to produce a string.
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 void setLenient(UBool enabled) override
Turns lenient parse mode on and off.
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 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 & format(int32_t number, UnicodeString &toAppendTo, FieldPosition &pos) const override
Formats the specified 32-bit number using the default ruleset.
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(int64_t number, UnicodeString &toAppendTo, FieldPosition &pos) const override
Formats the specified 64-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 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 ~RuleBasedNumberFormat()
Release memory allocated for a RuleBasedNumberFormat when you are finished with it.
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.
virtual RuleBasedNumberFormat * clone() const override
Clone this object polymorphically.
static UClassID getStaticClassID()
ICU "poor man's RTTI", returns a UClassID for this class.
virtual UnicodeString & format(double number, const UnicodeString &ruleSetName, UnicodeString &toAppendTo, FieldPosition &pos, UErrorCode &status) const
Formats the specified number using the named ruleset.
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 UnicodeString & format(const number::impl::DecimalQuantity &number, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const override
Format a decimal number.
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 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_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.
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: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