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