]> git.saurik.com Git - apple/icu.git/blame - icuSources/i18n/digitaffixesandpadding.h
ICU-57131.0.1.tar.gz
[apple/icu.git] / icuSources / i18n / digitaffixesandpadding.h
CommitLineData
2ca993e8
A
1/*
2*******************************************************************************
3* Copyright (C) 2015, International Business Machines
4* Corporation and others. All Rights Reserved.
5*******************************************************************************
6* digitaffixesandpadding.h
7*
8* created on: 2015jan06
9* created by: Travis Keep
10*/
11
12#ifndef __DIGITAFFIXESANDPADDING_H__
13#define __DIGITAFFIXESANDPADDING_H__
14
15#include "unicode/utypes.h"
16
17#if !UCONFIG_NO_FORMATTING
18
19#include "unicode/uobject.h"
20#include "pluralaffix.h"
21
22U_NAMESPACE_BEGIN
23
24class DigitList;
25class ValueFormatter;
26class UnicodeString;
27class FieldPositionHandler;
28class PluralRules;
29class VisibleDigitsWithExponent;
30
31/**
32 * A formatter of numbers. This class can format any numerical value
33 * except for not a number (NaN), positive infinity, and negative infinity.
34 * This class manages prefixes, suffixes, and padding but delegates the
35 * formatting of actual positive values to a ValueFormatter.
36 */
37class U_I18N_API DigitAffixesAndPadding : public UMemory {
38public:
39
40/**
41 * Equivalent to DecimalFormat EPadPosition, but redeclared here to prevent
42 * depending on DecimalFormat which would cause a circular dependency.
43 */
44enum EPadPosition {
45 kPadBeforePrefix,
46 kPadAfterPrefix,
47 kPadBeforeSuffix,
48 kPadAfterSuffix
49};
50
51/**
52 * The positive prefix
53 */
54PluralAffix fPositivePrefix;
55
56/**
57 * The positive suffix
58 */
59PluralAffix fPositiveSuffix;
60
61/**
62 * The negative suffix
63 */
64PluralAffix fNegativePrefix;
65
66/**
67 * The negative suffix
68 */
69PluralAffix fNegativeSuffix;
70
71/**
72 * The padding position
73 */
74EPadPosition fPadPosition;
75
76/**
77 * The padding character.
78 */
79UChar32 fPadChar;
80
81/**
82 * The field width in code points. The format method inserts instances of
83 * the padding character as needed in the desired padding position so that
84 * the entire formatted string contains this many code points. If the
85 * formatted string already exceeds this many code points, the format method
86 * inserts no padding.
87 */
88int32_t fWidth;
89
90/**
91 * Pad position is before prefix; padding character is '*' field width is 0.
92 * The affixes are all the empty string with no annotated fields with just
93 * the 'other' plural variation.
94 */
95DigitAffixesAndPadding()
96 : fPadPosition(kPadBeforePrefix), fPadChar(0x2a), fWidth(0) { }
97
98/**
99 * Returns TRUE if this object is equal to rhs.
100 */
101UBool equals(const DigitAffixesAndPadding &rhs) const {
102 return (fPositivePrefix.equals(rhs.fPositivePrefix) &&
103 fPositiveSuffix.equals(rhs.fPositiveSuffix) &&
104 fNegativePrefix.equals(rhs.fNegativePrefix) &&
105 fNegativeSuffix.equals(rhs.fNegativeSuffix) &&
106 fPadPosition == rhs.fPadPosition &&
107 fWidth == rhs.fWidth &&
108 fPadChar == rhs.fPadChar);
109}
110
111/**
112 * Returns TRUE if a plural rules instance is needed to complete the
113 * formatting by detecting if any of the affixes have multiple plural
114 * variations.
115 */
116UBool needsPluralRules() const;
117
118/**
119 * Formats value and appends to appendTo.
120 *
121 * @param value the value to format. May be NaN or ininite.
122 * @param formatter handles the details of formatting the actual value.
123 * @param handler records field positions
124 * @param optPluralRules the plural rules, but may be NULL if
125 * needsPluralRules returns FALSE.
126 * @appendTo formatted string appended here.
127 * @status any error returned here.
128 */
129UnicodeString &format(
130 const VisibleDigitsWithExponent &value,
131 const ValueFormatter &formatter,
132 FieldPositionHandler &handler,
133 const PluralRules *optPluralRules,
134 UnicodeString &appendTo,
135 UErrorCode &status) const;
136
137/**
138 * For testing only.
139 */
140UnicodeString &format(
141 DigitList &value,
142 const ValueFormatter &formatter,
143 FieldPositionHandler &handler,
144 const PluralRules *optPluralRules,
145 UnicodeString &appendTo,
146 UErrorCode &status) const;
147
148/**
149 * Formats a 32-bit integer and appends to appendTo. When formatting an
150 * integer, this method is preferred to plain format as it can run
151 * several times faster under certain conditions.
152 *
153 * @param value the value to format.
154 * @param formatter handles the details of formatting the actual value.
155 * @param handler records field positions
156 * @param optPluralRules the plural rules, but may be NULL if
157 * needsPluralRules returns FALSE.
158 * @appendTo formatted string appended here.
159 * @status any error returned here.
160 */
161UnicodeString &formatInt32(
162 int32_t value,
163 const ValueFormatter &formatter,
164 FieldPositionHandler &handler,
165 const PluralRules *optPluralRules,
166 UnicodeString &appendTo,
167 UErrorCode &status) const;
168
169private:
170UnicodeString &appendPadding(int32_t paddingCount, UnicodeString &appendTo) const;
171
172};
173
174
175U_NAMESPACE_END
176#endif /* #if !UCONFIG_NO_FORMATTING */
177#endif // __DIGITAFFIXANDPADDING_H__