diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /intl/icu/source/i18n/digitformatter.h | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'intl/icu/source/i18n/digitformatter.h')
-rw-r--r-- | intl/icu/source/i18n/digitformatter.h | 288 |
1 files changed, 288 insertions, 0 deletions
diff --git a/intl/icu/source/i18n/digitformatter.h b/intl/icu/source/i18n/digitformatter.h new file mode 100644 index 000000000..d92d42515 --- /dev/null +++ b/intl/icu/source/i18n/digitformatter.h @@ -0,0 +1,288 @@ +// 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. +******************************************************************************* +* digitformatter.h +* +* created on: 2015jan06 +* created by: Travis Keep +*/ + +#ifndef __DIGITFORMATTER_H__ +#define __DIGITFORMATTER_H__ + +#include "unicode/uobject.h" + +#if !UCONFIG_NO_FORMATTING + +#include "unicode/utypes.h" +#include "unicode/unistr.h" +#include "digitaffix.h" + +U_NAMESPACE_BEGIN + +class DecimalFormatSymbols; +class DigitList; +class DigitGrouping; +class DigitInterval; +class UnicodeString; +class FieldPositionHandler; +class IntDigitCountRange; +class VisibleDigits; +class VisibleDigitsWithExponent; + +/** + * Various options for formatting in fixed point. + */ +class U_I18N_API DigitFormatterOptions : public UMemory { + public: + DigitFormatterOptions() : fAlwaysShowDecimal(FALSE) { } + + /** + * Returns TRUE if this object equals rhs. + */ + UBool equals(const DigitFormatterOptions &rhs) const { + return ( + fAlwaysShowDecimal == rhs.fAlwaysShowDecimal); + } + + /** + * Returns TRUE if these options allow for fast formatting of + * integers. + */ + UBool isFastFormattable() const { + return (fAlwaysShowDecimal == FALSE); + } + + /** + * If TRUE, show the decimal separator even when there are no fraction + * digits. default is FALSE. + */ + UBool fAlwaysShowDecimal; +}; + +/** + * Various options for formatting an integer. + */ +class U_I18N_API DigitFormatterIntOptions : public UMemory { + public: + DigitFormatterIntOptions() : fAlwaysShowSign(FALSE) { } + + /** + * Returns TRUE if this object equals rhs. + */ + UBool equals(const DigitFormatterIntOptions &rhs) const { + return (fAlwaysShowSign == rhs.fAlwaysShowSign); + } + + /** + * If TRUE, always prefix the integer with its sign even if the number is + * positive. Default is FALSE. + */ + UBool fAlwaysShowSign; +}; + +/** + * Options for formatting in scientific notation. + */ +class U_I18N_API SciFormatterOptions : public UMemory { + public: + + /** + * Returns TRUE if this object equals rhs. + */ + UBool equals(const SciFormatterOptions &rhs) const { + return (fMantissa.equals(rhs.fMantissa) && + fExponent.equals(rhs.fExponent)); + } + + /** + * Options for formatting the mantissa. + */ + DigitFormatterOptions fMantissa; + + /** + * Options for formatting the exponent. + */ + DigitFormatterIntOptions fExponent; +}; + + +/** + * Does fixed point formatting. + * + * This class only does fixed point formatting. It does no rounding before + * formatting. + */ +class U_I18N_API DigitFormatter : public UMemory { +public: + +/** + * Decimal separator is period (.), Plus sign is plus (+), + * minus sign is minus (-), grouping separator is comma (,), digits are 0-9. + */ +DigitFormatter(); + +/** + * Let symbols determine the digits, decimal separator, + * plus and mius sign, grouping separator, and possibly other settings. + */ +DigitFormatter(const DecimalFormatSymbols &symbols); + +/** + * Change what this instance uses for digits, decimal separator, + * plus and mius sign, grouping separator, and possibly other settings + * according to symbols. + */ +void setDecimalFormatSymbols(const DecimalFormatSymbols &symbols); + +/** + * Change what this instance uses for digits, decimal separator, + * plus and mius sign, grouping separator, and possibly other settings + * according to symbols in the context of monetary amounts. + */ +void setDecimalFormatSymbolsForMonetary(const DecimalFormatSymbols &symbols); + +/** + * Fixed point formatting. + * + * @param positiveDigits the value to format + * Negative sign can be present, but it won't show. + * @param grouping controls how digit grouping is done + * @param options formatting options + * @param handler records field positions + * @param appendTo formatted value appended here. + * @return appendTo + */ +UnicodeString &format( + const VisibleDigits &positiveDigits, + const DigitGrouping &grouping, + const DigitFormatterOptions &options, + FieldPositionHandler &handler, + UnicodeString &appendTo) const; + +/** + * formats in scientifc notation. + * @param positiveDigits the value to format. + * Negative sign can be present, but it won't show. + * @param options formatting options + * @param handler records field positions. + * @param appendTo formatted value appended here. + */ +UnicodeString &format( + const VisibleDigitsWithExponent &positiveDigits, + const SciFormatterOptions &options, + FieldPositionHandler &handler, + UnicodeString &appendTo) const; + +/** + * Fixed point formatting of integers. + * Always performed with no grouping and no decimal point. + * + * @param positiveValue the value to format must be positive. + * @param range specifies minimum and maximum number of digits. + * @param handler records field positions + * @param appendTo formatted value appended here. + * @return appendTo + */ +UnicodeString &formatPositiveInt32( + int32_t positiveValue, + const IntDigitCountRange &range, + FieldPositionHandler &handler, + UnicodeString &appendTo) const; + +/** + * Counts how many code points are needed for fixed formatting. + * If digits is negative, the negative sign is not included in the count. + */ +int32_t countChar32( + const VisibleDigits &digits, + const DigitGrouping &grouping, + const DigitFormatterOptions &options) const; + +/** + * Counts how many code points are needed for scientific formatting. + * If digits is negative, the negative sign is not included in the count. + */ +int32_t countChar32( + const VisibleDigitsWithExponent &digits, + const SciFormatterOptions &options) const; + +/** + * Returns TRUE if this object equals rhs. + */ +UBool equals(const DigitFormatter &rhs) const; + +private: +UChar32 fLocalizedDigits[10]; +UnicodeString fGroupingSeparator; +UnicodeString fDecimal; +UnicodeString fNegativeSign; +UnicodeString fPositiveSign; +DigitAffix fInfinity; +DigitAffix fNan; +UBool fIsStandardDigits; +UnicodeString fExponent; +UBool isStandardDigits() const; + +UnicodeString &formatDigits( + const uint8_t *digits, + int32_t count, + const IntDigitCountRange &range, + int32_t intField, + FieldPositionHandler &handler, + UnicodeString &appendTo) const; + +void setOtherDecimalFormatSymbols(const DecimalFormatSymbols &symbols); + +int32_t countChar32( + const VisibleDigits &exponent, + const DigitInterval &mantissaInterval, + const SciFormatterOptions &options) const; + +UnicodeString &formatNaN( + FieldPositionHandler &handler, + UnicodeString &appendTo) const { + return fNan.format(handler, appendTo); +} + +int32_t countChar32ForNaN() const { + return fNan.toString().countChar32(); +} + +UnicodeString &formatInfinity( + FieldPositionHandler &handler, + UnicodeString &appendTo) const { + return fInfinity.format(handler, appendTo); +} + +int32_t countChar32ForInfinity() const { + return fInfinity.toString().countChar32(); +} + +UnicodeString &formatExponent( + const VisibleDigits &digits, + const DigitFormatterIntOptions &options, + int32_t signField, + int32_t intField, + FieldPositionHandler &handler, + UnicodeString &appendTo) const; + +int32_t countChar32( + const DigitGrouping &grouping, + const DigitInterval &interval, + const DigitFormatterOptions &options) const; + +int32_t countChar32ForExponent( + const VisibleDigits &exponent, + const DigitFormatterIntOptions &options) const; + +}; + + +U_NAMESPACE_END +#endif /* #if !UCONFIG_NO_FORMATTING */ +#endif // __DIGITFORMATTER_H__ |