diff options
Diffstat (limited to 'Build/source/libs/icu/icu-xetex/i18n/nfrule.h')
-rw-r--r-- | Build/source/libs/icu/icu-xetex/i18n/nfrule.h | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/Build/source/libs/icu/icu-xetex/i18n/nfrule.h b/Build/source/libs/icu/icu-xetex/i18n/nfrule.h new file mode 100644 index 00000000000..73e4fe16ef8 --- /dev/null +++ b/Build/source/libs/icu/icu-xetex/i18n/nfrule.h @@ -0,0 +1,114 @@ +/* +******************************************************************************* +* Copyright (C) 1997-2005, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************* +*/ + +#ifndef NFRULE_H +#define NFRULE_H + +#include "unicode/rbnf.h" + +#if U_HAVE_RBNF + +#include "unicode/utypes.h" +#include "unicode/uobject.h" +#include "unicode/unistr.h" +#include "putilimp.h" + +U_NAMESPACE_BEGIN + +class FieldPosition; +class Formattable; +class NFRuleList; +class NFRuleSet; +class NFSubstitution; +class ParsePosition; +class RuleBasedNumberFormat; +class UnicodeString; + +class NFRule : public UMemory { +public: + + enum ERuleType { + kNoBase = 0, + kNegativeNumberRule = -1, + kImproperFractionRule = -2, + kProperFractionRule = -3, + kMasterRule = -4, + kOtherRule = -5 + }; + + static void makeRules(UnicodeString& definition, + const NFRuleSet* ruleSet, + const NFRule* predecessor, + const RuleBasedNumberFormat* rbnf, + NFRuleList& ruleList, + UErrorCode& status); + + NFRule(const RuleBasedNumberFormat* rbnf); + ~NFRule(); + + UBool operator==(const NFRule& rhs) const; + UBool operator!=(const NFRule& rhs) const { return !operator==(rhs); } + + ERuleType getType() const { return (ERuleType)(baseValue <= kNoBase ? (ERuleType)baseValue : kOtherRule); } + void setType(ERuleType ruleType) { baseValue = (int32_t)ruleType; } + + int64_t getBaseValue() const { return baseValue; } + void setBaseValue(int64_t value, UErrorCode& status); + + double getDivisor() const { return uprv_pow(radix, exponent); } + + void doFormat(int64_t number, UnicodeString& toAppendTo, int32_t pos) const; + void doFormat(double number, UnicodeString& toAppendTo, int32_t pos) const; + + UBool doParse(const UnicodeString& text, + ParsePosition& pos, + UBool isFractional, + double upperBound, + Formattable& result) const; + + UBool shouldRollBack(double number) const; + + void _appendRuleText(UnicodeString& result) const; + +private: + void parseRuleDescriptor(UnicodeString& descriptor, UErrorCode& status); + void extractSubstitutions(const NFRuleSet* ruleSet, const NFRule* predecessor, const RuleBasedNumberFormat* rbnf, UErrorCode& status); + NFSubstitution* extractSubstitution(const NFRuleSet* ruleSet, const NFRule* predecessor, const RuleBasedNumberFormat* rbnf, UErrorCode& status); + + int16_t expectedExponent() const; + int32_t indexOfAny(const UChar* const strings[]) const; + double matchToDelimiter(const UnicodeString& text, int32_t startPos, double baseValue, + const UnicodeString& delimiter, ParsePosition& pp, const NFSubstitution* sub, + double upperBound) const; + void stripPrefix(UnicodeString& text, const UnicodeString& prefix, ParsePosition& pp) const; + + int32_t prefixLength(const UnicodeString& str, const UnicodeString& prefix) const; + UBool allIgnorable(const UnicodeString& str) const; + int32_t findText(const UnicodeString& str, const UnicodeString& key, + int32_t startingAt, int32_t* resultCount) const; + +private: + int64_t baseValue; + int32_t radix; + int16_t exponent; + UnicodeString ruleText; + NFSubstitution* sub1; + NFSubstitution* sub2; + const RuleBasedNumberFormat* formatter; + + NFRule(const NFRule &other); // forbid copying of this class + NFRule &operator=(const NFRule &other); // forbid copying of this class +}; + +U_NAMESPACE_END + +/* U_HAVE_RBNF */ +#endif + +// NFRULE_H +#endif + |