summaryrefslogtreecommitdiff
path: root/deps/icu-small/source/i18n/digitformatter.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/icu-small/source/i18n/digitformatter.h')
-rw-r--r--deps/icu-small/source/i18n/digitformatter.h286
1 files changed, 286 insertions, 0 deletions
diff --git a/deps/icu-small/source/i18n/digitformatter.h b/deps/icu-small/source/i18n/digitformatter.h
new file mode 100644
index 0000000000..cf339f598d
--- /dev/null
+++ b/deps/icu-small/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__