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