61607c2773
X-SVN-Rev: 38848
180 lines
4.9 KiB
C++
180 lines
4.9 KiB
C++
// 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__
|