ICU 77.1  77.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups 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
68 
73 #endif // U_HIDE_DERECATED_API
74 
81 #ifndef U_HIDE_DEPRECATED_API
82 
87 #endif // U_HIDE_DEPRECATED_API
88 };
89 
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 
746 
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
C++ API: Break Iterator.
Base class for all formats.
Definition: format.h:99
This class represents the set of symbols needed by DecimalFormat to format numbers.
Definition: dcfmtsym.h:87
virtual NumberFormat * clone() const override=0
Clones this object polymorphically.
virtual void parse(const UnicodeString &text, Formattable &result, ParsePosition &parsePosition) const =0
Return a long if possible (e.g.
UDisplayContext
Display context settings.
C++ API: Unicode String.
virtual void setRoundingMode(ERoundingMode roundingMode)
Set the rounding mode.
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:96
virtual void setLenient(UBool enable)
Sets whether lenient parsing should be enabled (it is off by default).
static UClassID getStaticClassID()
Return the class ID for this class.
Requests predefined ruleset for various non-place-value numbering systems.
Definition: rbnf.h:80
virtual bool operator==(const Format &other) const override
Return true if the given Format objects are semantically equal.
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside...
Definition: utypes.h:316
URBNFRuleSetTag
Tags for the predefined rulesets.
Definition: rbnf.h:56
One more than the highest normal URBNFRuleSetTag value.
Definition: rbnf.h:86
virtual UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const override
Format an object to produce a string.
The RuleBasedCollator class provides the implementation of Collator, using data-driven tables...
Definition: tblcoll.h:115
virtual UClassID getDynamicClassID() const override=0
Returns a unique class ID POLYMORPHICALLY.
The BreakIterator class implements methods for finding the location of boundaries in text...
Definition: brkiter.h:108
C API: Plural rules, select plural keywords for numeric values.
virtual UBool isLenient() const
Returns whether lenient parsing is enabled (it is off by default).
Definition: numfmt.h:1274
The RuleBasedNumberFormat class formats numbers according to a set of rules.
Definition: rbnf.h:624
virtual void setContext(UDisplayContext value, UErrorCode &status)
Set a particular UDisplayContext value in the formatter, such as UDISPCTX_CAPITALIZATION_FOR_STANDALO...
virtual ERoundingMode getRoundingMode() const
Get the rounding mode.
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Definition: utypes.h:430
FieldPosition is a simple class used by Format and its subclasses to identify fields in formatted out...
Definition: fieldpos.h:110
UPluralType
Type of plurals and PluralRules.
Definition: upluralrules.h:59
C++ API: Symbols for formatting numbers.
C++ API: String Enumeration.
ParsePosition is a simple class used by Format and its subclasses to keep track of the current positi...
Definition: parsepos.h:52
C++ API: Locale ID object.
Requests predefined ruleset for spelling out numeric values in words.
Definition: rbnf.h:61
Requests predefined ruleset for formatting a value as a duration in hours, minutes, and seconds.
Definition: rbnf.h:72
A UParseError struct is used to returned detailed information about parsing errors.
Definition: parseerr.h:58
Basic definitions for ICU, for both C and C++ APIs.
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:295
Formattable objects can be passed to the Format class or its subclasses for formatting.
Definition: fmtable.h:63
C++ API: Compatibility APIs for number formatting.
Requests predefined ruleset for the ordinal form of a number.
Definition: rbnf.h:66
NumberFormat & operator=(const NumberFormat &)
Assignment operator.
int8_t UBool
The ICU boolean type, a signed-byte integer.
Definition: umachine.h:247
C++ API: Formattable is a thin wrapper for primitive types used for formatting and parsing...
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:195