| /* |
| ******************************************************************************* |
| * 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__ |