| Index: source/i18n/digitformatter.h
|
| diff --git a/source/i18n/digitformatter.h b/source/i18n/digitformatter.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..cf339f598d627e945fa22e739174a19c874ca5e1
|
| --- /dev/null
|
| +++ b/source/i18n/digitformatter.h
|
| @@ -0,0 +1,286 @@
|
| +/*
|
| +*******************************************************************************
|
| +* 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__
|
|
|