diff options
Diffstat (limited to 'intl/icu/source/i18n/digitaffixesandpadding.h')
-rw-r--r-- | intl/icu/source/i18n/digitaffixesandpadding.h | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/intl/icu/source/i18n/digitaffixesandpadding.h b/intl/icu/source/i18n/digitaffixesandpadding.h new file mode 100644 index 000000000..65a23133d --- /dev/null +++ b/intl/icu/source/i18n/digitaffixesandpadding.h @@ -0,0 +1,179 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* +******************************************************************************* +* Copyright (C) 2015, International Business Machines +* Corporation and others. All Rights Reserved. +******************************************************************************* +* digitaffixesandpadding.h +* +* created on: 2015jan06 +* created by: Travis Keep +*/ + +#ifndef __DIGITAFFIXESANDPADDING_H__ +#define __DIGITAFFIXESANDPADDING_H__ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_FORMATTING + +#include "unicode/uobject.h" +#include "pluralaffix.h" + +U_NAMESPACE_BEGIN + +class DigitList; +class ValueFormatter; +class UnicodeString; +class FieldPositionHandler; +class PluralRules; +class VisibleDigitsWithExponent; + +/** + * A formatter of numbers. This class can format any numerical value + * except for not a number (NaN), positive infinity, and negative infinity. + * This class manages prefixes, suffixes, and padding but delegates the + * formatting of actual positive values to a ValueFormatter. + */ +class U_I18N_API DigitAffixesAndPadding : public UMemory { +public: + +/** + * Equivalent to DecimalFormat EPadPosition, but redeclared here to prevent + * depending on DecimalFormat which would cause a circular dependency. + */ +enum EPadPosition { + kPadBeforePrefix, + kPadAfterPrefix, + kPadBeforeSuffix, + kPadAfterSuffix +}; + +/** + * The positive prefix + */ +PluralAffix fPositivePrefix; + +/** + * The positive suffix + */ +PluralAffix fPositiveSuffix; + +/** + * The negative suffix + */ +PluralAffix fNegativePrefix; + +/** + * The negative suffix + */ +PluralAffix fNegativeSuffix; + +/** + * The padding position + */ +EPadPosition fPadPosition; + +/** + * The padding character. + */ +UChar32 fPadChar; + +/** + * The field width in code points. The format method inserts instances of + * the padding character as needed in the desired padding position so that + * the entire formatted string contains this many code points. If the + * formatted string already exceeds this many code points, the format method + * inserts no padding. + */ +int32_t fWidth; + +/** + * Pad position is before prefix; padding character is '*' field width is 0. + * The affixes are all the empty string with no annotated fields with just + * the 'other' plural variation. + */ +DigitAffixesAndPadding() + : fPadPosition(kPadBeforePrefix), fPadChar(0x2a), fWidth(0) { } + +/** + * Returns TRUE if this object is equal to rhs. + */ +UBool equals(const DigitAffixesAndPadding &rhs) const { + return (fPositivePrefix.equals(rhs.fPositivePrefix) && + fPositiveSuffix.equals(rhs.fPositiveSuffix) && + fNegativePrefix.equals(rhs.fNegativePrefix) && + fNegativeSuffix.equals(rhs.fNegativeSuffix) && + fPadPosition == rhs.fPadPosition && + fWidth == rhs.fWidth && + fPadChar == rhs.fPadChar); +} + +/** + * Returns TRUE if a plural rules instance is needed to complete the + * formatting by detecting if any of the affixes have multiple plural + * variations. + */ +UBool needsPluralRules() const; + +/** + * Formats value and appends to appendTo. + * + * @param value the value to format. May be NaN or ininite. + * @param formatter handles the details of formatting the actual value. + * @param handler records field positions + * @param optPluralRules the plural rules, but may be NULL if + * needsPluralRules returns FALSE. + * @appendTo formatted string appended here. + * @status any error returned here. + */ +UnicodeString &format( + const VisibleDigitsWithExponent &value, + const ValueFormatter &formatter, + FieldPositionHandler &handler, + const PluralRules *optPluralRules, + UnicodeString &appendTo, + UErrorCode &status) const; + +/** + * For testing only. + */ +UnicodeString &format( + DigitList &value, + const ValueFormatter &formatter, + FieldPositionHandler &handler, + const PluralRules *optPluralRules, + UnicodeString &appendTo, + UErrorCode &status) const; + +/** + * Formats a 32-bit integer and appends to appendTo. When formatting an + * integer, this method is preferred to plain format as it can run + * several times faster under certain conditions. + * + * @param value the value to format. + * @param formatter handles the details of formatting the actual value. + * @param handler records field positions + * @param optPluralRules the plural rules, but may be NULL if + * needsPluralRules returns FALSE. + * @appendTo formatted string appended here. + * @status any error returned here. + */ +UnicodeString &formatInt32( + int32_t value, + const ValueFormatter &formatter, + FieldPositionHandler &handler, + const PluralRules *optPluralRules, + UnicodeString &appendTo, + UErrorCode &status) const; + +private: +UnicodeString &appendPadding(int32_t paddingCount, UnicodeString &appendTo) const; + +}; + + +U_NAMESPACE_END +#endif /* #if !UCONFIG_NO_FORMATTING */ +#endif // __DIGITAFFIXANDPADDING_H__ |