summaryrefslogtreecommitdiffstats
path: root/intl/icu/source/i18n/digitaffixesandpadding.h
diff options
context:
space:
mode:
Diffstat (limited to 'intl/icu/source/i18n/digitaffixesandpadding.h')
-rw-r--r--intl/icu/source/i18n/digitaffixesandpadding.h179
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__