pango 3.2.7-x64-mingw32 → 3.2.8-x64-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Rakefile +10 -7
- data/lib/2.2/pango.so +0 -0
- data/lib/2.3/pango.so +0 -0
- data/lib/2.4/pango.so +0 -0
- data/lib/2.5/pango.so +0 -0
- data/pango.gemspec +2 -0
- data/vendor/local/bin/derb.exe +0 -0
- data/vendor/local/bin/escapesrc.exe +0 -0
- data/vendor/local/bin/fribidi.exe +0 -0
- data/vendor/local/bin/genbrk.exe +0 -0
- data/vendor/local/bin/genccode.exe +0 -0
- data/vendor/local/bin/gencfu.exe +0 -0
- data/vendor/local/bin/gencmn.exe +0 -0
- data/vendor/local/bin/gencnval.exe +0 -0
- data/vendor/local/bin/gendict.exe +0 -0
- data/vendor/local/bin/gennorm2.exe +0 -0
- data/vendor/local/bin/genrb.exe +0 -0
- data/vendor/local/bin/gensprep.exe +0 -0
- data/vendor/local/bin/hb-ot-shape-closure.exe +0 -0
- data/vendor/local/bin/hb-shape.exe +0 -0
- data/vendor/local/bin/hb-subset.exe +0 -0
- data/vendor/local/bin/hb-view.exe +0 -0
- data/vendor/local/bin/icu-config +6 -6
- data/vendor/local/bin/icuinfo.exe +0 -0
- data/vendor/local/bin/icupkg.exe +0 -0
- data/vendor/local/bin/libfribidi-0.dll +0 -0
- data/vendor/local/bin/libgraphene-1.0-0.dll +0 -0
- data/vendor/local/bin/libharfbuzz-0.dll +0 -0
- data/vendor/local/bin/libharfbuzz-subset-0.dll +0 -0
- data/vendor/local/bin/libpango-1.0-0.dll +0 -0
- data/vendor/local/bin/libpangocairo-1.0-0.dll +0 -0
- data/vendor/local/bin/libpangoft2-1.0-0.dll +0 -0
- data/vendor/local/bin/libpangowin32-1.0-0.dll +0 -0
- data/vendor/local/bin/makeconv.exe +0 -0
- data/vendor/local/{libexec/installed-tests/graphene-1.0/quad.exe → bin/pango-list.exe} +0 -0
- data/vendor/local/bin/pango-view.exe +0 -0
- data/vendor/local/bin/pkgdata.exe +0 -0
- data/vendor/local/bin/uconv.exe +0 -0
- data/vendor/local/include/fribidi/fribidi-config.h +2 -2
- data/vendor/local/include/graphene-1.0/graphene-macros.h +1 -1
- data/vendor/local/include/graphene-1.0/graphene-matrix.h +1 -1
- data/vendor/local/include/graphene-1.0/graphene-vec2.h +1 -1
- data/vendor/local/include/graphene-1.0/graphene-vec3.h +1 -1
- data/vendor/local/include/graphene-1.0/graphene-vec4.h +1 -1
- data/vendor/local/include/graphene-1.0/graphene-version.h +2 -2
- data/vendor/local/include/harfbuzz/hb-ot-layout.h +13 -0
- data/vendor/local/include/harfbuzz/hb-set.h +4 -0
- data/vendor/local/include/harfbuzz/hb-subset-plan.hh +1 -1
- data/vendor/local/include/harfbuzz/hb-subset-private.hh +1 -0
- data/vendor/local/include/harfbuzz/hb-subset.h +3 -0
- data/vendor/local/include/harfbuzz/hb-version.h +2 -2
- data/vendor/local/include/pango-1.0/pango/pango-features.h +2 -2
- data/vendor/local/include/unicode/brkiter.h +1 -1
- data/vendor/local/include/unicode/bytestriebuilder.h +1 -1
- data/vendor/local/include/unicode/caniter.h +2 -2
- data/vendor/local/include/unicode/compactdecimalformat.h +17 -250
- data/vendor/local/include/unicode/currunit.h +3 -2
- data/vendor/local/include/unicode/dcfmtsym.h +8 -1
- data/vendor/local/include/unicode/decimfmt.h +301 -439
- data/vendor/local/include/unicode/docmain.h +1 -1
- data/vendor/local/include/unicode/edits.h +129 -21
- data/vendor/local/include/unicode/fmtable.h +14 -21
- data/vendor/local/include/unicode/fpositer.h +0 -8
- data/vendor/local/include/unicode/measunit.h +0 -8
- data/vendor/local/include/unicode/nounit.h +6 -6
- data/vendor/local/include/unicode/numberformatter.h +1005 -553
- data/vendor/local/include/unicode/numfmt.h +10 -10
- data/vendor/local/include/unicode/platform.h +0 -14
- data/vendor/local/include/unicode/plurrule.h +0 -21
- data/vendor/local/include/unicode/rbbi.h +9 -15
- data/vendor/local/include/unicode/rbnf.h +2 -2
- data/vendor/local/include/unicode/scientificnumberformatter.h +0 -5
- data/vendor/local/include/unicode/smpdtfmt.h +33 -6
- data/vendor/local/include/unicode/timezone.h +2 -0
- data/vendor/local/include/unicode/uchar.h +42 -3
- data/vendor/local/include/unicode/unistr.h +3 -3
- data/vendor/local/include/unicode/unum.h +26 -5
- data/vendor/local/include/unicode/unumberformatter.h +717 -0
- data/vendor/local/include/unicode/urename.h +13 -0
- data/vendor/local/include/unicode/uscript.h +16 -1
- data/vendor/local/include/unicode/uspoof.h +24 -1
- data/vendor/local/include/unicode/utypes.h +4 -1
- data/vendor/local/include/unicode/uvernum.h +5 -5
- data/vendor/local/lib/cmake/harfbuzz/harfbuzz-config.cmake +1 -1
- data/vendor/local/lib/graphene-1.0/include/graphene-config.h +3 -1
- data/vendor/local/lib/icu/{61.1 → 62.1}/Makefile.inc +6 -6
- data/vendor/local/lib/icu/{61.1 → 62.1}/pkgdata.inc +3 -3
- data/vendor/local/lib/icu/Makefile.inc +6 -6
- data/vendor/local/lib/icu/pkgdata.inc +3 -3
- data/vendor/local/lib/icudt.dll +0 -0
- data/vendor/local/lib/{icudt61.dll → icudt62.dll} +0 -0
- data/vendor/local/lib/icuin.dll +0 -0
- data/vendor/local/lib/icuin62.dll +0 -0
- data/vendor/local/lib/icuio.dll +0 -0
- data/vendor/local/lib/{icuio61.dll → icuio62.dll} +0 -0
- data/vendor/local/lib/icutest.dll +0 -0
- data/vendor/local/lib/{icutest61.dll → icutest62.dll} +0 -0
- data/vendor/local/lib/icutu.dll +0 -0
- data/vendor/local/lib/{icutu61.dll → icutu62.dll} +0 -0
- data/vendor/local/lib/icuuc.dll +0 -0
- data/vendor/local/lib/{icuuc61.dll → icuuc62.dll} +0 -0
- data/vendor/local/lib/libfribidi.dll.a +0 -0
- data/vendor/local/lib/libgraphene-1.0.dll.a +0 -0
- data/vendor/local/lib/libharfbuzz-icu.a +0 -0
- data/vendor/local/lib/libharfbuzz-icu.la +2 -2
- data/vendor/local/lib/libharfbuzz-subset.dll.a +0 -0
- data/vendor/local/lib/libharfbuzz-subset.la +2 -2
- data/vendor/local/lib/libharfbuzz.dll.a +0 -0
- data/vendor/local/lib/libharfbuzz.la +2 -2
- data/vendor/local/lib/libicudt.dll.a +0 -0
- data/vendor/local/lib/libicuin.dll.a +0 -0
- data/vendor/local/lib/libicuio.dll.a +0 -0
- data/vendor/local/lib/libicutest.dll.a +0 -0
- data/vendor/local/lib/libicutu.dll.a +0 -0
- data/vendor/local/lib/libicuuc.dll.a +0 -0
- data/vendor/local/lib/libpango-1.0.dll.a +0 -0
- data/vendor/local/lib/libpango-1.0.la +2 -2
- data/vendor/local/lib/libpangocairo-1.0.dll.a +0 -0
- data/vendor/local/lib/libpangocairo-1.0.la +2 -2
- data/vendor/local/lib/libpangoft2-1.0.dll.a +0 -0
- data/vendor/local/lib/libpangoft2-1.0.la +2 -2
- data/vendor/local/lib/libpangowin32-1.0.dll.a +0 -0
- data/vendor/local/lib/libpangowin32-1.0.la +2 -2
- data/vendor/local/lib/pkgconfig/fribidi.pc +1 -1
- data/vendor/local/lib/pkgconfig/graphene-1.0.pc +7 -11
- data/vendor/local/lib/pkgconfig/graphene-gobject-1.0.pc +6 -12
- data/vendor/local/lib/pkgconfig/harfbuzz-icu.pc +1 -1
- data/vendor/local/lib/pkgconfig/harfbuzz-subset.pc +1 -1
- data/vendor/local/lib/pkgconfig/harfbuzz.pc +1 -1
- data/vendor/local/lib/pkgconfig/icu-i18n.pc +6 -6
- data/vendor/local/lib/pkgconfig/icu-io.pc +6 -6
- data/vendor/local/lib/pkgconfig/icu-uc.pc +6 -6
- data/vendor/local/lib/pkgconfig/pango.pc +3 -2
- data/vendor/local/lib/pkgconfig/pangocairo.pc +1 -1
- data/vendor/local/lib/pkgconfig/pangoft2.pc +1 -1
- data/vendor/local/lib/pkgconfig/pangowin32.pc +2 -2
- data/vendor/local/share/gir-1.0/Graphene-1.0.gir +1 -1
- data/vendor/local/share/gtk-doc/html/harfbuzz/api-index-full.html +80 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-blob.html +34 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-face.html +13 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-ot-layout.html +20 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-set.html +83 -28
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz.devhelp2 +5 -1
- data/vendor/local/share/gtk-doc/html/harfbuzz/object-tree.html +1 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/pt02.html +1 -1
- data/vendor/local/share/gtk-doc/html/pango/PangoEngineLang.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/PangoEngineShape.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/PangoFcDecoder.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/PangoFcFont.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/PangoFcFontMap.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/PangoMarkupFormat.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/PangoRenderer.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/annotation-glossary.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/api-index-full.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/index.html +3 -3
- data/vendor/local/share/gtk-doc/html/pango/lowlevel.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/pango-Bidirectional-Text.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/pango-Cairo-Rendering.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/pango-CoreText-Fonts.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/pango-Coverage-Maps.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/pango-Engines.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/pango-Fonts.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/pango-FreeType-Fonts-and-Rendering.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/pango-Glyph-Storage.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/pango-Layout-Objects.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/pango-Miscellaneous-Utilities.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/pango-Modules.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/pango-OpenType-Font-Handling.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/pango-Scripts-and-Languages.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/pango-Tab-Stops.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/pango-Text-Attributes.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/pango-Text-Processing.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/pango-Version-Checking.html +4 -4
- data/vendor/local/share/gtk-doc/html/pango/pango-Vertical-Text.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/pango-Win32-Fonts-and-Rendering.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/pango-Xft-Fonts-and-Rendering.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/pango-hierarchy.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/pango.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/rendering.html +2 -2
- data/vendor/local/share/gtk-doc/html/pango/style.css +4 -0
- data/vendor/local/share/icu/{61.1 → 62.1}/LICENSE +0 -0
- data/vendor/local/share/icu/{61.1 → 62.1}/config/mh-mingw64 +0 -0
- data/vendor/local/share/icu/{61.1 → 62.1}/install-sh +0 -0
- data/vendor/local/share/icu/{61.1 → 62.1}/mkinstalldirs +0 -0
- data/vendor/local/share/man/man1/derb.1 +2 -2
- data/vendor/local/share/man/man1/genbrk.1 +2 -2
- data/vendor/local/share/man/man1/gencfu.1 +1 -1
- data/vendor/local/share/man/man1/gencnval.1 +3 -3
- data/vendor/local/share/man/man1/gendict.1 +2 -2
- data/vendor/local/share/man/man1/genrb.1 +3 -3
- data/vendor/local/share/man/man1/icu-config.1 +2 -2
- data/vendor/local/share/man/man1/makeconv.1 +3 -3
- data/vendor/local/share/man/man1/pkgdata.1 +2 -2
- data/vendor/local/share/man/man1/uconv.1 +2 -2
- data/vendor/local/share/man/man8/genccode.8 +2 -2
- data/vendor/local/share/man/man8/gencmn.8 +3 -3
- data/vendor/local/share/man/man8/gensprep.8 +3 -3
- data/vendor/local/share/man/man8/icupkg.8 +1 -1
- metadata +20 -54
- data/vendor/local/lib/icuin61.dll +0 -0
- data/vendor/local/libexec/installed-tests/graphene-1.0/box.exe +0 -0
- data/vendor/local/libexec/installed-tests/graphene-1.0/euler.exe +0 -0
- data/vendor/local/libexec/installed-tests/graphene-1.0/frustum.exe +0 -0
- data/vendor/local/libexec/installed-tests/graphene-1.0/matrix.exe +0 -0
- data/vendor/local/libexec/installed-tests/graphene-1.0/plane.exe +0 -0
- data/vendor/local/libexec/installed-tests/graphene-1.0/point.exe +0 -0
- data/vendor/local/libexec/installed-tests/graphene-1.0/point3d.exe +0 -0
- data/vendor/local/libexec/installed-tests/graphene-1.0/quaternion.exe +0 -0
- data/vendor/local/libexec/installed-tests/graphene-1.0/ray.exe +0 -0
- data/vendor/local/libexec/installed-tests/graphene-1.0/rect.exe +0 -0
- data/vendor/local/libexec/installed-tests/graphene-1.0/simd.exe +0 -0
- data/vendor/local/libexec/installed-tests/graphene-1.0/size.exe +0 -0
- data/vendor/local/libexec/installed-tests/graphene-1.0/sphere.exe +0 -0
- data/vendor/local/libexec/installed-tests/graphene-1.0/triangle.exe +0 -0
- data/vendor/local/libexec/installed-tests/graphene-1.0/vec2.exe +0 -0
- data/vendor/local/libexec/installed-tests/graphene-1.0/vec3.exe +0 -0
- data/vendor/local/libexec/installed-tests/graphene-1.0/vec4.exe +0 -0
- data/vendor/local/share/installed-tests/graphene-1.0/box.test +0 -3
- data/vendor/local/share/installed-tests/graphene-1.0/euler.test +0 -3
- data/vendor/local/share/installed-tests/graphene-1.0/frustum.test +0 -3
- data/vendor/local/share/installed-tests/graphene-1.0/matrix.test +0 -3
- data/vendor/local/share/installed-tests/graphene-1.0/plane.test +0 -3
- data/vendor/local/share/installed-tests/graphene-1.0/point.test +0 -3
- data/vendor/local/share/installed-tests/graphene-1.0/point3d.test +0 -3
- data/vendor/local/share/installed-tests/graphene-1.0/quad.test +0 -3
- data/vendor/local/share/installed-tests/graphene-1.0/quaternion.test +0 -3
- data/vendor/local/share/installed-tests/graphene-1.0/ray.test +0 -3
- data/vendor/local/share/installed-tests/graphene-1.0/rect.test +0 -3
- data/vendor/local/share/installed-tests/graphene-1.0/simd.test +0 -3
- data/vendor/local/share/installed-tests/graphene-1.0/size.test +0 -3
- data/vendor/local/share/installed-tests/graphene-1.0/sphere.test +0 -3
- data/vendor/local/share/installed-tests/graphene-1.0/triangle.test +0 -3
- data/vendor/local/share/installed-tests/graphene-1.0/vec2.test +0 -3
- data/vendor/local/share/installed-tests/graphene-1.0/vec3.test +0 -3
- data/vendor/local/share/installed-tests/graphene-1.0/vec4.test +0 -3
@@ -17,10 +17,57 @@
|
|
17
17
|
|
18
18
|
U_NAMESPACE_BEGIN
|
19
19
|
|
20
|
+
class UnicodeString;
|
21
|
+
|
20
22
|
/**
|
21
|
-
* Records lengths of string edits but not replacement text.
|
22
|
-
*
|
23
|
-
*
|
23
|
+
* Records lengths of string edits but not replacement text. Supports replacements, insertions, deletions
|
24
|
+
* in linear progression. Does not support moving/reordering of text.
|
25
|
+
*
|
26
|
+
* There are two types of edits: <em>change edits</em> and <em>no-change edits</em>. Add edits to
|
27
|
+
* instances of this class using {@link #addReplace(int, int)} (for change edits) and
|
28
|
+
* {@link #addUnchanged(int)} (for no-change edits). Change edits are retained with full granularity,
|
29
|
+
* whereas adjacent no-change edits are always merged together. In no-change edits, there is a one-to-one
|
30
|
+
* mapping between code points in the source and destination strings.
|
31
|
+
*
|
32
|
+
* After all edits have been added, instances of this class should be considered immutable, and an
|
33
|
+
* {@link Edits::Iterator} can be used for queries.
|
34
|
+
*
|
35
|
+
* There are four flavors of Edits::Iterator:
|
36
|
+
*
|
37
|
+
* <ul>
|
38
|
+
* <li>{@link #getFineIterator()} retains full granularity of change edits.
|
39
|
+
* <li>{@link #getFineChangesIterator()} retains full granularity of change edits, and when calling
|
40
|
+
* next() on the iterator, skips over no-change edits (unchanged regions).
|
41
|
+
* <li>{@link #getCoarseIterator()} treats adjacent change edits as a single edit. (Adjacent no-change
|
42
|
+
* edits are automatically merged during the construction phase.)
|
43
|
+
* <li>{@link #getCoarseChangesIterator()} treats adjacent change edits as a single edit, and when
|
44
|
+
* calling next() on the iterator, skips over no-change edits (unchanged regions).
|
45
|
+
* </ul>
|
46
|
+
*
|
47
|
+
* For example, consider the string "abcßDeF", which case-folds to "abcssdef". This string has the
|
48
|
+
* following fine edits:
|
49
|
+
* <ul>
|
50
|
+
* <li>abc ⇨ abc (no-change)
|
51
|
+
* <li>ß ⇨ ss (change)
|
52
|
+
* <li>D ⇨ d (change)
|
53
|
+
* <li>e ⇨ e (no-change)
|
54
|
+
* <li>F ⇨ f (change)
|
55
|
+
* </ul>
|
56
|
+
* and the following coarse edits (note how adjacent change edits get merged together):
|
57
|
+
* <ul>
|
58
|
+
* <li>abc ⇨ abc (no-change)
|
59
|
+
* <li>ßD ⇨ ssd (change)
|
60
|
+
* <li>e ⇨ e (no-change)
|
61
|
+
* <li>F ⇨ f (change)
|
62
|
+
* </ul>
|
63
|
+
*
|
64
|
+
* The "fine changes" and "coarse changes" iterators will step through only the change edits when their
|
65
|
+
* {@link Edits::Iterator#next()} methods are called. They are identical to the non-change iterators when
|
66
|
+
* their {@link Edits::Iterator#findSourceIndex(int)} or {@link Edits::Iterator#findDestinationIndex(int)}
|
67
|
+
* methods are used to walk through the string.
|
68
|
+
*
|
69
|
+
* For examples of how to use this class, see the test <code>TestCaseMapEditsIteratorDocs</code> in
|
70
|
+
* UCharacterCaseTest.java.
|
24
71
|
*
|
25
72
|
* An Edits object tracks a separate UErrorCode, but ICU string transformation functions
|
26
73
|
* (e.g., case mapping functions) merge any such errors into their API's UErrorCode.
|
@@ -91,13 +138,13 @@ public:
|
|
91
138
|
void reset() U_NOEXCEPT;
|
92
139
|
|
93
140
|
/**
|
94
|
-
* Adds a record for an unchanged segment of text.
|
141
|
+
* Adds a no-change edit: a record for an unchanged segment of text.
|
95
142
|
* Normally called from inside ICU string transformation functions, not user code.
|
96
143
|
* @stable ICU 59
|
97
144
|
*/
|
98
145
|
void addUnchanged(int32_t unchangedLength);
|
99
146
|
/**
|
100
|
-
* Adds a record for a text replacement/insertion/deletion.
|
147
|
+
* Adds a change edit: a record for a text replacement/insertion/deletion.
|
101
148
|
* Normally called from inside ICU string transformation functions, not user code.
|
102
149
|
* @stable ICU 59
|
103
150
|
*/
|
@@ -136,6 +183,18 @@ public:
|
|
136
183
|
|
137
184
|
/**
|
138
185
|
* Access to the list of edits.
|
186
|
+
*
|
187
|
+
* At any moment in time, an instance of this class points to a single edit: a "window" into a span
|
188
|
+
* of the source string and the corresponding span of the destination string. The source string span
|
189
|
+
* starts at {@link #sourceIndex()} and runs for {@link #oldLength()} chars; the destination string
|
190
|
+
* span starts at {@link #destinationIndex()} and runs for {@link #newLength()} chars.
|
191
|
+
*
|
192
|
+
* The iterator can be moved between edits using the {@link #next()}, {@link #findSourceIndex(int)},
|
193
|
+
* and {@link #findDestinationIndex(int)} methods. Calling any of these methods mutates the iterator
|
194
|
+
* to make it point to the corresponding edit.
|
195
|
+
*
|
196
|
+
* For more information, see the documentation for {@link Edits}.
|
197
|
+
*
|
139
198
|
* @see getCoarseIterator
|
140
199
|
* @see getFineIterator
|
141
200
|
* @stable ICU 59
|
@@ -162,7 +221,7 @@ public:
|
|
162
221
|
Iterator &operator=(const Iterator &other) = default;
|
163
222
|
|
164
223
|
/**
|
165
|
-
* Advances to the next edit.
|
224
|
+
* Advances the iterator to the next edit.
|
166
225
|
* @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test,
|
167
226
|
* or else the function returns immediately. Check for U_FAILURE()
|
168
227
|
* on output or use with function chaining. (See User Guide for details.)
|
@@ -172,9 +231,9 @@ public:
|
|
172
231
|
UBool next(UErrorCode &errorCode) { return next(onlyChanges_, errorCode); }
|
173
232
|
|
174
233
|
/**
|
175
|
-
*
|
176
|
-
* The source index may be found in a
|
177
|
-
* even if normal iteration would skip
|
234
|
+
* Moves the iterator to the edit that contains the source index.
|
235
|
+
* The source index may be found in a no-change edit
|
236
|
+
* even if normal iteration would skip no-change edits.
|
178
237
|
* Normal iteration can continue from a found edit.
|
179
238
|
*
|
180
239
|
* The iterator state before this search logically does not matter.
|
@@ -196,9 +255,9 @@ public:
|
|
196
255
|
|
197
256
|
#ifndef U_HIDE_DRAFT_API
|
198
257
|
/**
|
199
|
-
*
|
200
|
-
* The destination index may be found in a
|
201
|
-
* even if normal iteration would skip
|
258
|
+
* Moves the iterator to the edit that contains the destination index.
|
259
|
+
* The destination index may be found in a no-change edit
|
260
|
+
* even if normal iteration would skip no-change edits.
|
202
261
|
* Normal iteration can continue from a found edit.
|
203
262
|
*
|
204
263
|
* The iterator state before this search logically does not matter.
|
@@ -219,7 +278,7 @@ public:
|
|
219
278
|
}
|
220
279
|
|
221
280
|
/**
|
222
|
-
*
|
281
|
+
* Computes the destination index corresponding to the given source index.
|
223
282
|
* If the source index is inside a change edit (not at its start),
|
224
283
|
* then the destination index at the end of that edit is returned,
|
225
284
|
* since there is no information about index mapping inside a change edit.
|
@@ -243,7 +302,7 @@ public:
|
|
243
302
|
int32_t destinationIndexFromSourceIndex(int32_t i, UErrorCode &errorCode);
|
244
303
|
|
245
304
|
/**
|
246
|
-
*
|
305
|
+
* Computes the source index corresponding to the given destination index.
|
247
306
|
* If the destination index is inside a change edit (not at its start),
|
248
307
|
* then the source index at the end of that edit is returned,
|
249
308
|
* since there is no information about index mapping inside a change edit.
|
@@ -268,17 +327,27 @@ public:
|
|
268
327
|
#endif // U_HIDE_DRAFT_API
|
269
328
|
|
270
329
|
/**
|
330
|
+
* Returns whether the edit currently represented by the iterator is a change edit.
|
331
|
+
*
|
271
332
|
* @return TRUE if this edit replaces oldLength() units with newLength() different ones.
|
272
333
|
* FALSE if oldLength units remain unchanged.
|
273
334
|
* @stable ICU 59
|
274
335
|
*/
|
275
336
|
UBool hasChange() const { return changed; }
|
337
|
+
|
276
338
|
/**
|
339
|
+
* The length of the current span in the source string, which starts at {@link #sourceIndex}.
|
340
|
+
*
|
277
341
|
* @return the number of units in the original string which are replaced or remain unchanged.
|
278
342
|
* @stable ICU 59
|
279
343
|
*/
|
280
344
|
int32_t oldLength() const { return oldLength_; }
|
345
|
+
|
281
346
|
/**
|
347
|
+
* The length of the current span in the destination string, which starts at
|
348
|
+
* {@link #destinationIndex}, or in the replacement string, which starts at
|
349
|
+
* {@link #replacementIndex}.
|
350
|
+
*
|
282
351
|
* @return the number of units in the modified string, if hasChange() is TRUE.
|
283
352
|
* Same as oldLength if hasChange() is FALSE.
|
284
353
|
* @stable ICU 59
|
@@ -286,22 +355,52 @@ public:
|
|
286
355
|
int32_t newLength() const { return newLength_; }
|
287
356
|
|
288
357
|
/**
|
358
|
+
* The start index of the current span in the source string; the span has length
|
359
|
+
* {@link #oldLength}.
|
360
|
+
*
|
289
361
|
* @return the current index into the source string
|
290
362
|
* @stable ICU 59
|
291
363
|
*/
|
292
364
|
int32_t sourceIndex() const { return srcIndex; }
|
365
|
+
|
293
366
|
/**
|
367
|
+
* The start index of the current span in the replacement string; the span has length
|
368
|
+
* {@link #newLength}. Well-defined only if the current edit is a change edit.
|
369
|
+
* <p>
|
370
|
+
* The <em>replacement string</em> is the concatenation of all substrings of the destination
|
371
|
+
* string corresponding to change edits.
|
372
|
+
* <p>
|
373
|
+
* This method is intended to be used together with operations that write only replacement
|
374
|
+
* characters (e.g., {@link CaseMap#omitUnchangedText()}). The source string can then be modified
|
375
|
+
* in-place.
|
376
|
+
*
|
294
377
|
* @return the current index into the replacement-characters-only string,
|
295
378
|
* not counting unchanged spans
|
296
379
|
* @stable ICU 59
|
297
380
|
*/
|
298
|
-
int32_t replacementIndex() const {
|
381
|
+
int32_t replacementIndex() const {
|
382
|
+
// TODO: Throw an exception if we aren't in a change edit?
|
383
|
+
return replIndex;
|
384
|
+
}
|
385
|
+
|
299
386
|
/**
|
387
|
+
* The start index of the current span in the destination string; the span has length
|
388
|
+
* {@link #newLength}.
|
389
|
+
*
|
300
390
|
* @return the current index into the full destination string
|
301
391
|
* @stable ICU 59
|
302
392
|
*/
|
303
393
|
int32_t destinationIndex() const { return destIndex; }
|
304
394
|
|
395
|
+
#ifndef U_HIDE_INTERNAL_API
|
396
|
+
/**
|
397
|
+
* A string representation of the current edit represented by the iterator for debugging. You
|
398
|
+
* should not depend on the contents of the return string.
|
399
|
+
* @internal
|
400
|
+
*/
|
401
|
+
UnicodeString& toString(UnicodeString& appendTo) const;
|
402
|
+
#endif // U_HIDE_INTERNAL_API
|
403
|
+
|
305
404
|
private:
|
306
405
|
friend class Edits;
|
307
406
|
|
@@ -330,8 +429,10 @@ public:
|
|
330
429
|
};
|
331
430
|
|
332
431
|
/**
|
333
|
-
* Returns an Iterator for coarse-grained
|
334
|
-
*
|
432
|
+
* Returns an Iterator for coarse-grained change edits
|
433
|
+
* (adjacent change edits are treated as one).
|
434
|
+
* Can be used to perform simple string updates.
|
435
|
+
* Skips no-change edits.
|
335
436
|
* @return an Iterator that merges adjacent changes.
|
336
437
|
* @stable ICU 59
|
337
438
|
*/
|
@@ -340,7 +441,10 @@ public:
|
|
340
441
|
}
|
341
442
|
|
342
443
|
/**
|
343
|
-
* Returns an Iterator for coarse-grained
|
444
|
+
* Returns an Iterator for coarse-grained change and no-change edits
|
445
|
+
* (adjacent change edits are treated as one).
|
446
|
+
* Can be used to perform simple string updates.
|
447
|
+
* Adjacent change edits are treated as one edit.
|
344
448
|
* @return an Iterator that merges adjacent changes.
|
345
449
|
* @stable ICU 59
|
346
450
|
*/
|
@@ -349,8 +453,10 @@ public:
|
|
349
453
|
}
|
350
454
|
|
351
455
|
/**
|
352
|
-
* Returns an Iterator for fine-grained
|
353
|
-
*
|
456
|
+
* Returns an Iterator for fine-grained change edits
|
457
|
+
* (full granularity of change edits is retained).
|
458
|
+
* Can be used for modifying styled text.
|
459
|
+
* Skips no-change edits.
|
354
460
|
* @return an Iterator that separates adjacent changes.
|
355
461
|
* @stable ICU 59
|
356
462
|
*/
|
@@ -359,7 +465,9 @@ public:
|
|
359
465
|
}
|
360
466
|
|
361
467
|
/**
|
362
|
-
* Returns an Iterator for fine-grained
|
468
|
+
* Returns an Iterator for fine-grained change and no-change edits
|
469
|
+
* (full granularity of change edits is retained).
|
470
|
+
* Can be used for modifying styled text.
|
363
471
|
* @return an Iterator that separates adjacent changes.
|
364
472
|
* @stable ICU 59
|
365
473
|
*/
|
@@ -33,17 +33,11 @@
|
|
33
33
|
U_NAMESPACE_BEGIN
|
34
34
|
|
35
35
|
class CharString;
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
*/
|
42
|
-
#if U_PLATFORM == U_PF_OS400
|
43
|
-
#define UNUM_INTERNAL_STACKARRAY_SIZE 144
|
44
|
-
#else
|
45
|
-
#define UNUM_INTERNAL_STACKARRAY_SIZE 128
|
46
|
-
#endif
|
36
|
+
namespace number {
|
37
|
+
namespace impl {
|
38
|
+
class DecimalQuantity;
|
39
|
+
}
|
40
|
+
}
|
47
41
|
|
48
42
|
/**
|
49
43
|
* Formattable objects can be passed to the Format class or
|
@@ -649,24 +643,25 @@ public:
|
|
649
643
|
* Internal function, do not use.
|
650
644
|
* TODO: figure out how to make this be non-public.
|
651
645
|
* NumberFormat::format(Formattable, ...
|
652
|
-
* needs to get at the
|
646
|
+
* needs to get at the DecimalQuantity, if it exists, for
|
653
647
|
* big decimal formatting.
|
654
648
|
* @internal
|
655
649
|
*/
|
656
|
-
|
650
|
+
number::impl::DecimalQuantity *getDecimalQuantity() const { return fDecimalQuantity;}
|
657
651
|
|
658
652
|
/**
|
659
|
-
*
|
653
|
+
* Export the value of this Formattable to a DecimalQuantity.
|
654
|
+
* @internal
|
660
655
|
*/
|
661
|
-
|
656
|
+
void populateDecimalQuantity(number::impl::DecimalQuantity& output, UErrorCode& status) const;
|
662
657
|
|
663
658
|
/**
|
664
|
-
* Adopt, and set value from, a
|
659
|
+
* Adopt, and set value from, a DecimalQuantity
|
665
660
|
* Internal Function, do not use.
|
666
|
-
* @param dl the
|
661
|
+
* @param dl the DecimalQuantity to be adopted
|
667
662
|
* @internal
|
668
663
|
*/
|
669
|
-
void
|
664
|
+
void adoptDecimalQuantity(number::impl::DecimalQuantity *dq);
|
670
665
|
|
671
666
|
/**
|
672
667
|
* Internal function to return the CharString pointer.
|
@@ -706,9 +701,7 @@ private:
|
|
706
701
|
|
707
702
|
CharString *fDecimalStr;
|
708
703
|
|
709
|
-
|
710
|
-
|
711
|
-
char fStackData[UNUM_INTERNAL_STACKARRAY_SIZE]; // must be big enough for DigitList
|
704
|
+
number::impl::DecimalQuantity *fDecimalQuantity;
|
712
705
|
|
713
706
|
Type fType;
|
714
707
|
UnicodeString fBogus; // Bogus string when it's needed.
|
@@ -47,13 +47,6 @@ U_NAMESPACE_BEGIN
|
|
47
47
|
|
48
48
|
class UVector32;
|
49
49
|
|
50
|
-
// Forward declaration for number formatting:
|
51
|
-
namespace number {
|
52
|
-
namespace impl {
|
53
|
-
class NumberStringBuilder;
|
54
|
-
}
|
55
|
-
}
|
56
|
-
|
57
50
|
/**
|
58
51
|
* FieldPositionIterator returns the field ids and their start/limit positions generated
|
59
52
|
* by a call to Format::format. See Format, NumberFormat, DecimalFormat.
|
@@ -114,7 +107,6 @@ private:
|
|
114
107
|
void setData(UVector32 *adopt, UErrorCode& status);
|
115
108
|
|
116
109
|
friend class FieldPositionIteratorHandler;
|
117
|
-
friend class number::impl::NumberStringBuilder;
|
118
110
|
|
119
111
|
UVector32 *data;
|
120
112
|
int32_t pos;
|
@@ -400,14 +400,6 @@ class U_I18N_API MeasureUnit: public UObject {
|
|
400
400
|
*/
|
401
401
|
static MeasureUnit *createMilePerGallonImperial(UErrorCode &status);
|
402
402
|
|
403
|
-
/*
|
404
|
-
* The following were draft ICU 58, but have been withdrawn:
|
405
|
-
* static MeasureUnit *createEast(UErrorCode &status);
|
406
|
-
* static MeasureUnit *createNorth(UErrorCode &status);
|
407
|
-
* static MeasureUnit *createSouth(UErrorCode &status);
|
408
|
-
* static MeasureUnit *createWest(UErrorCode &status);
|
409
|
-
*/
|
410
|
-
|
411
403
|
/**
|
412
404
|
* Returns unit of digital: bit.
|
413
405
|
* Caller owns returned value and must free it.
|
@@ -61,6 +61,12 @@ public:
|
|
61
61
|
*/
|
62
62
|
NoUnit(const NoUnit& other);
|
63
63
|
|
64
|
+
/**
|
65
|
+
* Destructor.
|
66
|
+
* @draft ICU 60
|
67
|
+
*/
|
68
|
+
virtual ~NoUnit();
|
69
|
+
|
64
70
|
/**
|
65
71
|
* Return a polymorphic clone of this object. The result will
|
66
72
|
* have the same class as returned by getDynamicClassID().
|
@@ -86,12 +92,6 @@ public:
|
|
86
92
|
*/
|
87
93
|
static UClassID U_EXPORT2 getStaticClassID();
|
88
94
|
|
89
|
-
/**
|
90
|
-
* Destructor.
|
91
|
-
* @draft ICU 60
|
92
|
-
*/
|
93
|
-
virtual ~NoUnit();
|
94
|
-
|
95
95
|
private:
|
96
96
|
/**
|
97
97
|
* Constructor
|
@@ -17,6 +17,8 @@
|
|
17
17
|
#include "unicode/plurrule.h"
|
18
18
|
#include "unicode/ucurr.h"
|
19
19
|
#include "unicode/unum.h"
|
20
|
+
#include "unicode/unumberformatter.h"
|
21
|
+
#include "unicode/uobject.h"
|
20
22
|
|
21
23
|
#ifndef U_HIDE_DRAFT_API
|
22
24
|
|
@@ -31,11 +33,11 @@
|
|
31
33
|
* // Most basic usage:
|
32
34
|
* NumberFormatter::withLocale(...).format(123).toString(); // 1,234 in en-US
|
33
35
|
*
|
34
|
-
* // Custom notation, unit, and rounding
|
36
|
+
* // Custom notation, unit, and rounding precision:
|
35
37
|
* NumberFormatter::with()
|
36
38
|
* .notation(Notation::compactShort())
|
37
39
|
* .unit(CurrencyUnit("EUR", status))
|
38
|
-
* .
|
40
|
+
* .precision(Precision::maxDigits(2))
|
39
41
|
* .locale(...)
|
40
42
|
* .format(1234)
|
41
43
|
* .toString(); // €1.2K in en-US
|
@@ -43,7 +45,7 @@
|
|
43
45
|
* // Create a formatter in a singleton for use later:
|
44
46
|
* static const LocalizedNumberFormatter formatter = NumberFormatter::withLocale(...)
|
45
47
|
* .unit(NoUnit::percent())
|
46
|
-
* .
|
48
|
+
* .precision(Precision::fixedFraction(3));
|
47
49
|
* formatter.format(5.9831).toString(); // 5.983% in en-US
|
48
50
|
*
|
49
51
|
* // Create a "template" in a singleton but without setting a locale until the call site:
|
@@ -63,7 +65,7 @@
|
|
63
65
|
*
|
64
66
|
* <pre>
|
65
67
|
* UnlocalizedNumberFormatter formatter = UnlocalizedNumberFormatter::with().notation(Notation::scientific());
|
66
|
-
* formatter.
|
68
|
+
* formatter.precision(Precision.maxFraction(2)); // does nothing!
|
67
69
|
* formatter.locale(Locale.getEnglish()).format(9.8765).toString(); // prints "9.8765E0", not "9.88E0"
|
68
70
|
* </pre>
|
69
71
|
*
|
@@ -74,321 +76,23 @@
|
|
74
76
|
* @author Shane Carr
|
75
77
|
*/
|
76
78
|
|
77
|
-
|
78
|
-
* An enum declaring how to render units, including currencies. Example outputs when formatting 123 USD and 123
|
79
|
-
* meters in <em>en-CA</em>:
|
80
|
-
*
|
81
|
-
* <p>
|
82
|
-
* <ul>
|
83
|
-
* <li>NARROW*: "$123.00" and "123 m"
|
84
|
-
* <li>SHORT: "US$ 123.00" and "123 m"
|
85
|
-
* <li>FULL_NAME: "123.00 US dollars" and "123 meters"
|
86
|
-
* <li>ISO_CODE: "USD 123.00" and undefined behavior
|
87
|
-
* <li>HIDDEN: "123.00" and "123"
|
88
|
-
* </ul>
|
89
|
-
*
|
90
|
-
* <p>
|
91
|
-
* This enum is similar to {@link com.ibm.icu.text.MeasureFormat.FormatWidth}.
|
92
|
-
*
|
93
|
-
* @draft ICU 60
|
94
|
-
*/
|
95
|
-
typedef enum UNumberUnitWidth {
|
96
|
-
/**
|
97
|
-
* Print an abbreviated version of the unit name. Similar to SHORT, but always use the shortest available
|
98
|
-
* abbreviation or symbol. This option can be used when the context hints at the identity of the unit. For more
|
99
|
-
* information on the difference between NARROW and SHORT, see SHORT.
|
100
|
-
*
|
101
|
-
* <p>
|
102
|
-
* In CLDR, this option corresponds to the "Narrow" format for measure units and the "¤¤¤¤¤" placeholder for
|
103
|
-
* currencies.
|
104
|
-
*
|
105
|
-
* @draft ICU 60
|
106
|
-
*/
|
107
|
-
UNUM_UNIT_WIDTH_NARROW,
|
108
|
-
|
109
|
-
/**
|
110
|
-
* Print an abbreviated version of the unit name. Similar to NARROW, but use a slightly wider abbreviation or
|
111
|
-
* symbol when there may be ambiguity. This is the default behavior.
|
112
|
-
*
|
113
|
-
* <p>
|
114
|
-
* For example, in <em>es-US</em>, the SHORT form for Fahrenheit is "{0} °F", but the NARROW form is "{0}°",
|
115
|
-
* since Fahrenheit is the customary unit for temperature in that locale.
|
116
|
-
*
|
117
|
-
* <p>
|
118
|
-
* In CLDR, this option corresponds to the "Short" format for measure units and the "¤" placeholder for
|
119
|
-
* currencies.
|
120
|
-
*
|
121
|
-
* @draft ICU 60
|
122
|
-
*/
|
123
|
-
UNUM_UNIT_WIDTH_SHORT,
|
124
|
-
|
125
|
-
/**
|
126
|
-
* Print the full name of the unit, without any abbreviations.
|
127
|
-
*
|
128
|
-
* <p>
|
129
|
-
* In CLDR, this option corresponds to the default format for measure units and the "¤¤¤" placeholder for
|
130
|
-
* currencies.
|
131
|
-
*
|
132
|
-
* @draft ICU 60
|
133
|
-
*/
|
134
|
-
UNUM_UNIT_WIDTH_FULL_NAME,
|
135
|
-
|
136
|
-
/**
|
137
|
-
* Use the three-digit ISO XXX code in place of the symbol for displaying currencies. The behavior of this
|
138
|
-
* option is currently undefined for use with measure units.
|
139
|
-
*
|
140
|
-
* <p>
|
141
|
-
* In CLDR, this option corresponds to the "¤¤" placeholder for currencies.
|
142
|
-
*
|
143
|
-
* @draft ICU 60
|
144
|
-
*/
|
145
|
-
UNUM_UNIT_WIDTH_ISO_CODE,
|
146
|
-
|
147
|
-
/**
|
148
|
-
* Format the number according to the specified unit, but do not display the unit. For currencies, apply
|
149
|
-
* monetary symbols and formats as with SHORT, but omit the currency symbol. For measure units, the behavior is
|
150
|
-
* equivalent to not specifying the unit at all.
|
151
|
-
*
|
152
|
-
* @draft ICU 60
|
153
|
-
*/
|
154
|
-
UNUM_UNIT_WIDTH_HIDDEN
|
155
|
-
|
156
|
-
#ifndef U_HIDE_INTERNAL_API
|
157
|
-
,
|
158
|
-
/**
|
159
|
-
* One more than the highest UNumberUnitWidth value.
|
160
|
-
*
|
161
|
-
* @internal ICU 60: The numeric value may change over time; see ICU ticket #12420.
|
162
|
-
*/
|
163
|
-
UNUM_UNIT_WIDTH_COUNT
|
164
|
-
#endif // U_HIDE_INTERNAL_API
|
165
|
-
} UNumberUnitWidth;
|
166
|
-
|
167
|
-
/**
|
168
|
-
* An enum declaring the strategy for when and how to display grouping separators (i.e., the
|
169
|
-
* separator, often a comma or period, after every 2-3 powers of ten). The choices are several
|
170
|
-
* pre-built strategies for different use cases that employ locale data whenever possible. Example
|
171
|
-
* outputs for 1234 and 1234567 in <em>en-IN</em>:
|
172
|
-
*
|
173
|
-
* <ul>
|
174
|
-
* <li>OFF: 1234 and 12345
|
175
|
-
* <li>MIN2: 1234 and 12,34,567
|
176
|
-
* <li>AUTO: 1,234 and 12,34,567
|
177
|
-
* <li>ON_ALIGNED: 1,234 and 12,34,567
|
178
|
-
* <li>THOUSANDS: 1,234 and 1,234,567
|
179
|
-
* </ul>
|
180
|
-
*
|
181
|
-
* <p>
|
182
|
-
* The default is AUTO, which displays grouping separators unless the locale data says that grouping
|
183
|
-
* is not customary. To force grouping for all numbers greater than 1000 consistently across locales,
|
184
|
-
* use ON_ALIGNED. On the other hand, to display grouping less frequently than the default, use MIN2
|
185
|
-
* or OFF. See the docs of each option for details.
|
186
|
-
*
|
187
|
-
* <p>
|
188
|
-
* Note: This enum specifies the strategy for grouping sizes. To set which character to use as the
|
189
|
-
* grouping separator, use the "symbols" setter.
|
190
|
-
*
|
191
|
-
* @draft ICU 61
|
192
|
-
*/
|
193
|
-
typedef enum UGroupingStrategy {
|
194
|
-
/**
|
195
|
-
* Do not display grouping separators in any locale.
|
196
|
-
*
|
197
|
-
* @draft ICU 61
|
198
|
-
*/
|
199
|
-
UNUM_GROUPING_OFF,
|
200
|
-
|
201
|
-
/**
|
202
|
-
* Display grouping using locale defaults, except do not show grouping on values smaller than
|
203
|
-
* 10000 (such that there is a <em>minimum of two digits</em> before the first separator).
|
204
|
-
*
|
205
|
-
* <p>
|
206
|
-
* Note that locales may restrict grouping separators to be displayed only on 1 million or
|
207
|
-
* greater (for example, ee and hu) or disable grouping altogether (for example, bg currency).
|
208
|
-
*
|
209
|
-
* <p>
|
210
|
-
* Locale data is used to determine whether to separate larger numbers into groups of 2
|
211
|
-
* (customary in South Asia) or groups of 3 (customary in Europe and the Americas).
|
212
|
-
*
|
213
|
-
* @draft ICU 61
|
214
|
-
*/
|
215
|
-
UNUM_GROUPING_MIN2,
|
216
|
-
|
217
|
-
/**
|
218
|
-
* Display grouping using the default strategy for all locales. This is the default behavior.
|
219
|
-
*
|
220
|
-
* <p>
|
221
|
-
* Note that locales may restrict grouping separators to be displayed only on 1 million or
|
222
|
-
* greater (for example, ee and hu) or disable grouping altogether (for example, bg currency).
|
223
|
-
*
|
224
|
-
* <p>
|
225
|
-
* Locale data is used to determine whether to separate larger numbers into groups of 2
|
226
|
-
* (customary in South Asia) or groups of 3 (customary in Europe and the Americas).
|
227
|
-
*
|
228
|
-
* @draft ICU 61
|
229
|
-
*/
|
230
|
-
UNUM_GROUPING_AUTO,
|
231
|
-
|
232
|
-
/**
|
233
|
-
* Always display the grouping separator on values of at least 1000.
|
234
|
-
*
|
235
|
-
* <p>
|
236
|
-
* This option ignores the locale data that restricts or disables grouping, described in MIN2 and
|
237
|
-
* AUTO. This option may be useful to normalize the alignment of numbers, such as in a
|
238
|
-
* spreadsheet.
|
239
|
-
*
|
240
|
-
* <p>
|
241
|
-
* Locale data is used to determine whether to separate larger numbers into groups of 2
|
242
|
-
* (customary in South Asia) or groups of 3 (customary in Europe and the Americas).
|
243
|
-
*
|
244
|
-
* @draft ICU 61
|
245
|
-
*/
|
246
|
-
UNUM_GROUPING_ON_ALIGNED,
|
247
|
-
|
248
|
-
/**
|
249
|
-
* Use the Western defaults: groups of 3 and enabled for all numbers 1000 or greater. Do not use
|
250
|
-
* locale data for determining the grouping strategy.
|
251
|
-
*
|
252
|
-
* @draft ICU 61
|
253
|
-
*/
|
254
|
-
UNUM_GROUPING_THOUSANDS
|
255
|
-
|
256
|
-
} UGroupingStrategy;
|
257
|
-
|
258
|
-
/**
|
259
|
-
* An enum declaring how to denote positive and negative numbers. Example outputs when formatting
|
260
|
-
* 123, 0, and -123 in <em>en-US</em>:
|
261
|
-
*
|
262
|
-
* <ul>
|
263
|
-
* <li>AUTO: "123", "0", and "-123"
|
264
|
-
* <li>ALWAYS: "+123", "+0", and "-123"
|
265
|
-
* <li>NEVER: "123", "0", and "123"
|
266
|
-
* <li>ACCOUNTING: "$123", "$0", and "($123)"
|
267
|
-
* <li>ACCOUNTING_ALWAYS: "+$123", "+$0", and "($123)"
|
268
|
-
* <li>EXCEPT_ZERO: "+123", "0", and "-123"
|
269
|
-
* <li>ACCOUNTING_EXCEPT_ZERO: "+$123", "$0", and "($123)"
|
270
|
-
* </ul>
|
271
|
-
*
|
272
|
-
* <p>
|
273
|
-
* The exact format, including the position and the code point of the sign, differ by locale.
|
274
|
-
*
|
275
|
-
* @draft ICU 60
|
276
|
-
*/
|
277
|
-
typedef enum UNumberSignDisplay {
|
278
|
-
/**
|
279
|
-
* Show the minus sign on negative numbers, and do not show the sign on positive numbers. This is the default
|
280
|
-
* behavior.
|
281
|
-
*
|
282
|
-
* @draft ICU 60
|
283
|
-
*/
|
284
|
-
UNUM_SIGN_AUTO,
|
285
|
-
|
286
|
-
/**
|
287
|
-
* Show the minus sign on negative numbers and the plus sign on positive numbers, including zero.
|
288
|
-
* To hide the sign on zero, see {@link UNUM_SIGN_EXCEPT_ZERO}.
|
289
|
-
*
|
290
|
-
* @draft ICU 60
|
291
|
-
*/
|
292
|
-
UNUM_SIGN_ALWAYS,
|
293
|
-
|
294
|
-
/**
|
295
|
-
* Do not show the sign on positive or negative numbers.
|
296
|
-
*
|
297
|
-
* @draft ICU 60
|
298
|
-
*/
|
299
|
-
UNUM_SIGN_NEVER,
|
300
|
-
|
301
|
-
/**
|
302
|
-
* Use the locale-dependent accounting format on negative numbers, and do not show the sign on positive numbers.
|
303
|
-
*
|
304
|
-
* <p>
|
305
|
-
* The accounting format is defined in CLDR and varies by locale; in many Western locales, the format is a pair
|
306
|
-
* of parentheses around the number.
|
307
|
-
*
|
308
|
-
* <p>
|
309
|
-
* Note: Since CLDR defines the accounting format in the monetary context only, this option falls back to the
|
310
|
-
* AUTO sign display strategy when formatting without a currency unit. This limitation may be lifted in the
|
311
|
-
* future.
|
312
|
-
*
|
313
|
-
* @draft ICU 60
|
314
|
-
*/
|
315
|
-
UNUM_SIGN_ACCOUNTING,
|
316
|
-
|
317
|
-
/**
|
318
|
-
* Use the locale-dependent accounting format on negative numbers, and show the plus sign on
|
319
|
-
* positive numbers, including zero. For more information on the accounting format, see the
|
320
|
-
* ACCOUNTING sign display strategy. To hide the sign on zero, see
|
321
|
-
* {@link UNUM_SIGN_ACCOUNTING_EXCEPT_ZERO}.
|
322
|
-
*
|
323
|
-
* @draft ICU 60
|
324
|
-
*/
|
325
|
-
UNUM_SIGN_ACCOUNTING_ALWAYS,
|
326
|
-
|
327
|
-
/**
|
328
|
-
* Show the minus sign on negative numbers and the plus sign on positive numbers. Do not show a
|
329
|
-
* sign on zero.
|
330
|
-
*
|
331
|
-
* @draft ICU 61
|
332
|
-
*/
|
333
|
-
UNUM_SIGN_EXCEPT_ZERO,
|
334
|
-
|
335
|
-
/**
|
336
|
-
* Use the locale-dependent accounting format on negative numbers, and show the plus sign on
|
337
|
-
* positive numbers. Do not show a sign on zero. For more information on the accounting format,
|
338
|
-
* see the ACCOUNTING sign display strategy.
|
339
|
-
*
|
340
|
-
* @draft ICU 61
|
341
|
-
*/
|
342
|
-
UNUM_SIGN_ACCOUNTING_EXCEPT_ZERO
|
79
|
+
U_NAMESPACE_BEGIN
|
343
80
|
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
* One more than the highest UNumberSignDisplay value.
|
348
|
-
*
|
349
|
-
* @internal ICU 60: The numeric value may change over time; see ICU ticket #12420.
|
350
|
-
*/
|
351
|
-
UNUM_SIGN_COUNT
|
352
|
-
#endif // U_HIDE_INTERNAL_API
|
353
|
-
} UNumberSignDisplay;
|
81
|
+
// Forward declarations:
|
82
|
+
class IFixedDecimal;
|
83
|
+
class FieldPositionIteratorHandler;
|
354
84
|
|
355
|
-
|
356
|
-
|
357
|
-
*
|
358
|
-
* <p>
|
359
|
-
* <ul>
|
360
|
-
* <li>UNUM_DECIMAL_SEPARATOR_AUTO: "1", "1.1"
|
361
|
-
* <li>UNUM_DECIMAL_SEPARATOR_ALWAYS: "1.", "1.1"
|
362
|
-
* </ul>
|
363
|
-
*/
|
364
|
-
typedef enum UNumberDecimalSeparatorDisplay {
|
365
|
-
/**
|
366
|
-
* Show the decimal separator when there are one or more digits to display after the separator, and do not show
|
367
|
-
* it otherwise. This is the default behavior.
|
368
|
-
*
|
369
|
-
* @draft ICU 60
|
370
|
-
*/
|
371
|
-
UNUM_DECIMAL_SEPARATOR_AUTO,
|
85
|
+
namespace numparse {
|
86
|
+
namespace impl {
|
372
87
|
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
* @draft ICU 60
|
377
|
-
*/
|
378
|
-
UNUM_DECIMAL_SEPARATOR_ALWAYS
|
88
|
+
// Forward declarations:
|
89
|
+
class NumberParserImpl;
|
90
|
+
class MultiplierParseHandler;
|
379
91
|
|
380
|
-
|
381
|
-
|
382
|
-
/**
|
383
|
-
* One more than the highest UNumberDecimalSeparatorDisplay value.
|
384
|
-
*
|
385
|
-
* @internal ICU 60: The numeric value may change over time; see ICU ticket #12420.
|
386
|
-
*/
|
387
|
-
UNUM_DECIMAL_SEPARATOR_COUNT
|
388
|
-
#endif // U_HIDE_INTERNAL_API
|
389
|
-
} UNumberDecimalMarkDisplay;
|
92
|
+
}
|
93
|
+
}
|
390
94
|
|
391
|
-
|
95
|
+
namespace number { // icu::number
|
392
96
|
|
393
97
|
// Forward declarations:
|
394
98
|
class UnlocalizedNumberFormatter;
|
@@ -396,15 +100,14 @@ class LocalizedNumberFormatter;
|
|
396
100
|
class FormattedNumber;
|
397
101
|
class Notation;
|
398
102
|
class ScientificNotation;
|
399
|
-
class
|
400
|
-
class
|
401
|
-
class
|
402
|
-
class
|
103
|
+
class Precision;
|
104
|
+
class FractionPrecision;
|
105
|
+
class CurrencyPrecision;
|
106
|
+
class IncrementPrecision;
|
403
107
|
class IntegerWidth;
|
404
108
|
|
405
109
|
namespace impl {
|
406
110
|
|
407
|
-
#ifndef U_HIDE_INTERNAL_API
|
408
111
|
/**
|
409
112
|
* Datatype for minimum/maximum fraction digits. Must be able to hold kMaxIntFracSig.
|
410
113
|
*
|
@@ -419,24 +122,28 @@ typedef int16_t digits_t;
|
|
419
122
|
* @internal
|
420
123
|
*/
|
421
124
|
static constexpr int32_t DEFAULT_THRESHOLD = 3;
|
422
|
-
#endif // U_HIDE_INTERNAL_API
|
423
125
|
|
424
126
|
// Forward declarations:
|
425
127
|
class Padder;
|
426
128
|
struct MacroProps;
|
427
129
|
struct MicroProps;
|
428
130
|
class DecimalQuantity;
|
429
|
-
struct
|
131
|
+
struct UFormattedNumberData;
|
430
132
|
class NumberFormatterImpl;
|
431
133
|
struct ParsedPatternInfo;
|
432
134
|
class ScientificModifier;
|
433
135
|
class MultiplierProducer;
|
434
|
-
class
|
435
|
-
class LongNameHandler;
|
136
|
+
class RoundingImpl;
|
436
137
|
class ScientificHandler;
|
437
|
-
class CompactHandler;
|
438
138
|
class Modifier;
|
439
139
|
class NumberStringBuilder;
|
140
|
+
class AffixPatternProvider;
|
141
|
+
class NumberPropertyMapper;
|
142
|
+
struct DecimalFormatProperties;
|
143
|
+
class MultiplierFormatHandler;
|
144
|
+
class CurrencySymbols;
|
145
|
+
class GeneratorHelpers;
|
146
|
+
class DecNum;
|
440
147
|
|
441
148
|
} // namespace impl
|
442
149
|
|
@@ -530,13 +237,13 @@ class U_I18N_API Notation : public UMemory {
|
|
530
237
|
* </pre>
|
531
238
|
*
|
532
239
|
* <p>
|
533
|
-
* When compact notation is specified without an explicit rounding
|
240
|
+
* When compact notation is specified without an explicit rounding precision, numbers are rounded off to the closest
|
534
241
|
* integer after scaling the number by the corresponding power of 10, but with a digit shown after the decimal
|
535
|
-
* separator if there is only one digit before the decimal separator. The default compact notation rounding
|
242
|
+
* separator if there is only one digit before the decimal separator. The default compact notation rounding precision
|
536
243
|
* is equivalent to:
|
537
244
|
*
|
538
245
|
* <pre>
|
539
|
-
*
|
246
|
+
* Precision::integer().withMinDigits(2)
|
540
247
|
* </pre>
|
541
248
|
*
|
542
249
|
* @return A CompactNotation for passing to the NumberFormatter notation() setter.
|
@@ -641,6 +348,9 @@ class U_I18N_API Notation : public UMemory {
|
|
641
348
|
friend class impl::NumberFormatterImpl;
|
642
349
|
friend class impl::ScientificModifier;
|
643
350
|
friend class impl::ScientificHandler;
|
351
|
+
|
352
|
+
// To allow access to the skeleton generation code:
|
353
|
+
friend class impl::GeneratorHelpers;
|
644
354
|
};
|
645
355
|
|
646
356
|
/**
|
@@ -687,21 +397,36 @@ class U_I18N_API ScientificNotation : public Notation {
|
|
687
397
|
// Inherit constructor
|
688
398
|
using Notation::Notation;
|
689
399
|
|
400
|
+
// Raw constructor for NumberPropertyMapper
|
401
|
+
ScientificNotation(int8_t fEngineeringInterval, bool fRequireMinInt, impl::digits_t fMinExponentDigits,
|
402
|
+
UNumberSignDisplay fExponentSignDisplay);
|
403
|
+
|
690
404
|
friend class Notation;
|
405
|
+
|
406
|
+
// So that NumberPropertyMapper can create instances
|
407
|
+
friend class impl::NumberPropertyMapper;
|
691
408
|
};
|
692
409
|
|
693
410
|
// Reserve extra names in case they are added as classes in the future:
|
694
|
-
typedef
|
411
|
+
typedef Precision SignificantDigitsPrecision;
|
412
|
+
|
413
|
+
// Typedefs for ICU 60/61 compatibility.
|
414
|
+
// These will be removed in ICU 64.
|
415
|
+
// See http://bugs.icu-project.org/trac/ticket/13746
|
416
|
+
typedef Precision Rounder;
|
417
|
+
typedef FractionPrecision FractionRounder;
|
418
|
+
typedef IncrementPrecision IncrementRounder;
|
419
|
+
typedef CurrencyPrecision CurrencyRounder;
|
695
420
|
|
696
421
|
/**
|
697
|
-
* A class that defines the rounding
|
422
|
+
* A class that defines the rounding precision to be used when formatting numbers in NumberFormatter.
|
698
423
|
*
|
699
424
|
* <p>
|
700
|
-
* To create a
|
425
|
+
* To create a Precision, use one of the factory methods.
|
701
426
|
*
|
702
427
|
* @draft ICU 60
|
703
428
|
*/
|
704
|
-
class U_I18N_API
|
429
|
+
class U_I18N_API Precision : public UMemory {
|
705
430
|
|
706
431
|
public:
|
707
432
|
/**
|
@@ -717,18 +442,18 @@ class U_I18N_API Rounder : public UMemory {
|
|
717
442
|
* <p>
|
718
443
|
* http://www.serpentine.com/blog/2011/06/29/here-be-dragons-advances-in-problems-you-didnt-even-know-you-had/
|
719
444
|
*
|
720
|
-
* @return A
|
445
|
+
* @return A Precision for chaining or passing to the NumberFormatter precision() setter.
|
721
446
|
* @draft ICU 60
|
722
447
|
*/
|
723
|
-
static
|
448
|
+
static Precision unlimited();
|
724
449
|
|
725
450
|
/**
|
726
451
|
* Show numbers rounded if necessary to the nearest integer.
|
727
452
|
*
|
728
|
-
* @return A
|
453
|
+
* @return A FractionPrecision for chaining or passing to the NumberFormatter precision() setter.
|
729
454
|
* @draft ICU 60
|
730
455
|
*/
|
731
|
-
static
|
456
|
+
static FractionPrecision integer();
|
732
457
|
|
733
458
|
/**
|
734
459
|
* Show numbers rounded if necessary to a certain number of fraction places (numerals after the decimal separator).
|
@@ -754,10 +479,10 @@ class U_I18N_API Rounder : public UMemory {
|
|
754
479
|
* @param minMaxFractionPlaces
|
755
480
|
* The minimum and maximum number of numerals to display after the decimal separator (rounding if too
|
756
481
|
* long or padding with zeros if too short).
|
757
|
-
* @return A
|
482
|
+
* @return A FractionPrecision for chaining or passing to the NumberFormatter precision() setter.
|
758
483
|
* @draft ICU 60
|
759
484
|
*/
|
760
|
-
static
|
485
|
+
static FractionPrecision fixedFraction(int32_t minMaxFractionPlaces);
|
761
486
|
|
762
487
|
/**
|
763
488
|
* Always show at least a certain number of fraction places after the decimal separator, padding with zeros if
|
@@ -769,10 +494,10 @@ class U_I18N_API Rounder : public UMemory {
|
|
769
494
|
* @param minFractionPlaces
|
770
495
|
* The minimum number of numerals to display after the decimal separator (padding with zeros if
|
771
496
|
* necessary).
|
772
|
-
* @return A
|
497
|
+
* @return A FractionPrecision for chaining or passing to the NumberFormatter precision() setter.
|
773
498
|
* @draft ICU 60
|
774
499
|
*/
|
775
|
-
static
|
500
|
+
static FractionPrecision minFraction(int32_t minFractionPlaces);
|
776
501
|
|
777
502
|
/**
|
778
503
|
* Show numbers rounded if necessary to a certain number of fraction places (numerals after the decimal separator).
|
@@ -781,10 +506,10 @@ class U_I18N_API Rounder : public UMemory {
|
|
781
506
|
*
|
782
507
|
* @param maxFractionPlaces
|
783
508
|
* The maximum number of numerals to display after the decimal mark (rounding if necessary).
|
784
|
-
* @return A
|
509
|
+
* @return A FractionPrecision for chaining or passing to the NumberFormatter precision() setter.
|
785
510
|
* @draft ICU 60
|
786
511
|
*/
|
787
|
-
static
|
512
|
+
static FractionPrecision maxFraction(int32_t maxFractionPlaces);
|
788
513
|
|
789
514
|
/**
|
790
515
|
* Show numbers rounded if necessary to a certain number of fraction places (numerals after the decimal separator);
|
@@ -796,10 +521,10 @@ class U_I18N_API Rounder : public UMemory {
|
|
796
521
|
* necessary).
|
797
522
|
* @param maxFractionPlaces
|
798
523
|
* The maximum number of numerals to display after the decimal separator (rounding if necessary).
|
799
|
-
* @return A
|
524
|
+
* @return A FractionPrecision for chaining or passing to the NumberFormatter precision() setter.
|
800
525
|
* @draft ICU 60
|
801
526
|
*/
|
802
|
-
static
|
527
|
+
static FractionPrecision minMaxFraction(int32_t minFractionPlaces, int32_t maxFractionPlaces);
|
803
528
|
|
804
529
|
/**
|
805
530
|
* Show numbers rounded if necessary to a certain number of significant digits or significant figures. Additionally,
|
@@ -811,10 +536,10 @@ class U_I18N_API Rounder : public UMemory {
|
|
811
536
|
* @param minMaxSignificantDigits
|
812
537
|
* The minimum and maximum number of significant digits to display (rounding if too long or padding with
|
813
538
|
* zeros if too short).
|
814
|
-
* @return A
|
815
|
-
* @draft ICU
|
539
|
+
* @return A precision for chaining or passing to the NumberFormatter precision() setter.
|
540
|
+
* @draft ICU 62
|
816
541
|
*/
|
817
|
-
static
|
542
|
+
static SignificantDigitsPrecision fixedSignificantDigits(int32_t minMaxSignificantDigits);
|
818
543
|
|
819
544
|
/**
|
820
545
|
* Always show at least a certain number of significant digits/figures, padding with zeros if necessary. Do not
|
@@ -825,20 +550,20 @@ class U_I18N_API Rounder : public UMemory {
|
|
825
550
|
*
|
826
551
|
* @param minSignificantDigits
|
827
552
|
* The minimum number of significant digits to display (padding with zeros if too short).
|
828
|
-
* @return A
|
829
|
-
* @draft ICU
|
553
|
+
* @return A precision for chaining or passing to the NumberFormatter precision() setter.
|
554
|
+
* @draft ICU 62
|
830
555
|
*/
|
831
|
-
static
|
556
|
+
static SignificantDigitsPrecision minSignificantDigits(int32_t minSignificantDigits);
|
832
557
|
|
833
558
|
/**
|
834
559
|
* Show numbers rounded if necessary to a certain number of significant digits/figures.
|
835
560
|
*
|
836
561
|
* @param maxSignificantDigits
|
837
562
|
* The maximum number of significant digits to display (rounding if too long).
|
838
|
-
* @return A
|
839
|
-
* @draft ICU
|
563
|
+
* @return A precision for chaining or passing to the NumberFormatter precision() setter.
|
564
|
+
* @draft ICU 62
|
840
565
|
*/
|
841
|
-
static
|
566
|
+
static SignificantDigitsPrecision maxSignificantDigits(int32_t maxSignificantDigits);
|
842
567
|
|
843
568
|
/**
|
844
569
|
* Show numbers rounded if necessary to a certain number of significant digits/figures; in addition, always show at
|
@@ -848,10 +573,36 @@ class U_I18N_API Rounder : public UMemory {
|
|
848
573
|
* The minimum number of significant digits to display (padding with zeros if necessary).
|
849
574
|
* @param maxSignificantDigits
|
850
575
|
* The maximum number of significant digits to display (rounding if necessary).
|
851
|
-
* @return A
|
852
|
-
* @draft ICU
|
576
|
+
* @return A precision for chaining or passing to the NumberFormatter precision() setter.
|
577
|
+
* @draft ICU 62
|
853
578
|
*/
|
854
|
-
static
|
579
|
+
static SignificantDigitsPrecision minMaxSignificantDigits(int32_t minSignificantDigits,
|
580
|
+
int32_t maxSignificantDigits);
|
581
|
+
|
582
|
+
#ifndef U_HIDE_DEPRECATED_API
|
583
|
+
// Compatiblity methods that will be removed in ICU 64.
|
584
|
+
// See http://bugs.icu-project.org/trac/ticket/13746
|
585
|
+
|
586
|
+
/** @deprecated ICU 62 */
|
587
|
+
static inline SignificantDigitsPrecision fixedDigits(int32_t a) {
|
588
|
+
return fixedSignificantDigits(a);
|
589
|
+
}
|
590
|
+
|
591
|
+
/** @deprecated ICU 62 */
|
592
|
+
static inline SignificantDigitsPrecision minDigits(int32_t a) {
|
593
|
+
return minSignificantDigits(a);
|
594
|
+
}
|
595
|
+
|
596
|
+
/** @deprecated ICU 62 */
|
597
|
+
static inline SignificantDigitsPrecision maxDigits(int32_t a) {
|
598
|
+
return maxSignificantDigits(a);
|
599
|
+
}
|
600
|
+
|
601
|
+
/** @deprecated ICU 62 */
|
602
|
+
static inline SignificantDigitsPrecision minMaxDigits(int32_t a, int32_t b) {
|
603
|
+
return minMaxSignificantDigits(a, b);
|
604
|
+
}
|
605
|
+
#endif /* U_HIDE_DEPRECATED_API */
|
855
606
|
|
856
607
|
/**
|
857
608
|
* Show numbers rounded if necessary to the closest multiple of a certain rounding increment. For example, if the
|
@@ -864,20 +615,21 @@ class U_I18N_API Rounder : public UMemory {
|
|
864
615
|
* decimal separator (to display 1.2 as "1.00" and 1.3 as "1.50"), you can run:
|
865
616
|
*
|
866
617
|
* <pre>
|
867
|
-
*
|
618
|
+
* Precision::increment(0.5).withMinFraction(2)
|
868
619
|
* </pre>
|
869
620
|
*
|
870
621
|
* @param roundingIncrement
|
871
622
|
* The increment to which to round numbers.
|
872
|
-
* @return A
|
623
|
+
* @return A precision for chaining or passing to the NumberFormatter precision() setter.
|
873
624
|
* @draft ICU 60
|
874
625
|
*/
|
875
|
-
static
|
626
|
+
static IncrementPrecision increment(double roundingIncrement);
|
876
627
|
|
877
628
|
/**
|
878
|
-
* Show numbers rounded and padded according to the rules for the currency unit. The most common
|
879
|
-
* for currencies include <code>
|
880
|
-
* <code>
|
629
|
+
* Show numbers rounded and padded according to the rules for the currency unit. The most common
|
630
|
+
* rounding precision settings for currencies include <code>Precision::fixedFraction(2)</code>,
|
631
|
+
* <code>Precision::integer()</code>, and <code>Precision::increment(0.05)</code> for cash transactions
|
632
|
+
* ("nickel rounding").
|
881
633
|
*
|
882
634
|
* <p>
|
883
635
|
* The exact rounding details will be resolved at runtime based on the currency unit specified in the
|
@@ -887,24 +639,28 @@ class U_I18N_API Rounder : public UMemory {
|
|
887
639
|
* @param currencyUsage
|
888
640
|
* Either STANDARD (for digital transactions) or CASH (for transactions where the rounding increment may
|
889
641
|
* be limited by the available denominations of cash or coins).
|
890
|
-
* @return A
|
642
|
+
* @return A CurrencyPrecision for chaining or passing to the NumberFormatter precision() setter.
|
891
643
|
* @draft ICU 60
|
892
644
|
*/
|
893
|
-
static
|
645
|
+
static CurrencyPrecision currency(UCurrencyUsage currencyUsage);
|
894
646
|
|
647
|
+
#ifndef U_HIDE_DEPRECATED_API
|
895
648
|
/**
|
896
649
|
* Sets the rounding mode to use when picking the direction to round (up or down). Common values
|
897
650
|
* include HALF_EVEN, HALF_UP, and FLOOR. The default is HALF_EVEN.
|
898
651
|
*
|
899
652
|
* @param roundingMode
|
900
653
|
* The RoundingMode to use.
|
901
|
-
* @return A
|
902
|
-
* @
|
654
|
+
* @return A Precision for passing to the NumberFormatter precision() setter.
|
655
|
+
* @deprecated ICU 62 Use the top-level roundingMode() setting instead.
|
656
|
+
* This method will be removed in ICU 64.
|
657
|
+
* See http://bugs.icu-project.org/trac/ticket/13746
|
903
658
|
*/
|
904
|
-
|
659
|
+
Precision withMode(UNumberFormatRoundingMode roundingMode) const;
|
660
|
+
#endif /* U_HIDE_DEPRECATED_API */
|
905
661
|
|
906
662
|
private:
|
907
|
-
enum
|
663
|
+
enum PrecisionType {
|
908
664
|
RND_BOGUS,
|
909
665
|
RND_NONE,
|
910
666
|
RND_FRACTION,
|
@@ -912,11 +668,10 @@ class U_I18N_API Rounder : public UMemory {
|
|
912
668
|
RND_FRACTION_SIGNIFICANT,
|
913
669
|
RND_INCREMENT,
|
914
670
|
RND_CURRENCY,
|
915
|
-
RND_PASS_THROUGH,
|
916
671
|
RND_ERROR
|
917
672
|
} fType;
|
918
673
|
|
919
|
-
union
|
674
|
+
union PrecisionUnion {
|
920
675
|
struct FractionSignificantSettings {
|
921
676
|
// For RND_FRACTION, RND_SIGNIFICANT, and RND_FRACTION_SIGNIFICANT
|
922
677
|
impl::digits_t fMinFrac;
|
@@ -927,24 +682,27 @@ class U_I18N_API Rounder : public UMemory {
|
|
927
682
|
struct IncrementSettings {
|
928
683
|
double fIncrement;
|
929
684
|
impl::digits_t fMinFrac;
|
685
|
+
impl::digits_t fMaxFrac;
|
930
686
|
} increment; // For RND_INCREMENT
|
931
687
|
UCurrencyUsage currencyUsage; // For RND_CURRENCY
|
932
688
|
UErrorCode errorCode; // For RND_ERROR
|
933
689
|
} fUnion;
|
934
690
|
|
935
|
-
typedef
|
936
|
-
typedef
|
691
|
+
typedef PrecisionUnion::FractionSignificantSettings FractionSignificantSettings;
|
692
|
+
typedef PrecisionUnion::IncrementSettings IncrementSettings;
|
937
693
|
|
694
|
+
/** The Precision encapsulates the RoundingMode when used within the implementation. */
|
938
695
|
UNumberFormatRoundingMode fRoundingMode;
|
939
696
|
|
940
|
-
|
697
|
+
Precision(const PrecisionType& type, const PrecisionUnion& union_,
|
698
|
+
UNumberFormatRoundingMode roundingMode)
|
941
699
|
: fType(type), fUnion(union_), fRoundingMode(roundingMode) {}
|
942
700
|
|
943
|
-
|
701
|
+
Precision(UErrorCode errorCode) : fType(RND_ERROR) {
|
944
702
|
fUnion.errorCode = errorCode;
|
945
703
|
}
|
946
704
|
|
947
|
-
|
705
|
+
Precision() : fType(RND_BOGUS) {}
|
948
706
|
|
949
707
|
bool isBogus() const {
|
950
708
|
return fType == RND_BOGUS;
|
@@ -958,47 +716,21 @@ class U_I18N_API Rounder : public UMemory {
|
|
958
716
|
return FALSE;
|
959
717
|
}
|
960
718
|
|
961
|
-
// On the parent type so that this method can be called internally on
|
962
|
-
|
963
|
-
|
964
|
-
/** NON-CONST: mutates the current instance. */
|
965
|
-
void setLocaleData(const CurrencyUnit ¤cy, UErrorCode &status);
|
966
|
-
|
967
|
-
void apply(impl::DecimalQuantity &value, UErrorCode &status) const;
|
968
|
-
|
969
|
-
/** Version of {@link #apply} that obeys minInt constraints. Used for scientific notation compatibility mode. */
|
970
|
-
void apply(impl::DecimalQuantity &value, int32_t minInt, UErrorCode status);
|
971
|
-
|
972
|
-
/**
|
973
|
-
* Rounding endpoint used by Engineering and Compact notation. Chooses the most appropriate multiplier (magnitude
|
974
|
-
* adjustment), applies the adjustment, rounds, and returns the chosen multiplier.
|
975
|
-
*
|
976
|
-
* <p>
|
977
|
-
* In most cases, this is simple. However, when rounding the number causes it to cross a multiplier boundary, we
|
978
|
-
* need to re-do the rounding. For example, to display 999,999 in Engineering notation with 2 sigfigs, first you
|
979
|
-
* guess the multiplier to be -3. However, then you end up getting 1000E3, which is not the correct output. You then
|
980
|
-
* change your multiplier to be -6, and you get 1.0E6, which is correct.
|
981
|
-
*
|
982
|
-
* @param input The quantity to process.
|
983
|
-
* @param producer Function to call to return a multiplier based on a magnitude.
|
984
|
-
* @return The number of orders of magnitude the input was adjusted by this method.
|
985
|
-
*/
|
986
|
-
int32_t
|
987
|
-
chooseMultiplierAndApply(impl::DecimalQuantity &input, const impl::MultiplierProducer &producer,
|
988
|
-
UErrorCode &status);
|
719
|
+
// On the parent type so that this method can be called internally on Precision instances.
|
720
|
+
Precision withCurrency(const CurrencyUnit ¤cy, UErrorCode &status) const;
|
989
721
|
|
990
|
-
static
|
722
|
+
static FractionPrecision constructFraction(int32_t minFrac, int32_t maxFrac);
|
991
723
|
|
992
|
-
static
|
724
|
+
static Precision constructSignificant(int32_t minSig, int32_t maxSig);
|
993
725
|
|
994
|
-
static
|
995
|
-
constructFractionSignificant(const
|
726
|
+
static Precision
|
727
|
+
constructFractionSignificant(const FractionPrecision &base, int32_t minSig, int32_t maxSig);
|
996
728
|
|
997
|
-
static
|
729
|
+
static IncrementPrecision constructIncrement(double increment, int32_t minFrac);
|
998
730
|
|
999
|
-
static
|
731
|
+
static CurrencyPrecision constructCurrency(UCurrencyUsage usage);
|
1000
732
|
|
1001
|
-
static
|
733
|
+
static Precision constructPassThrough();
|
1002
734
|
|
1003
735
|
// To allow MacroProps/MicroProps to initialize bogus instances:
|
1004
736
|
friend struct impl::MacroProps;
|
@@ -1007,28 +739,31 @@ class U_I18N_API Rounder : public UMemory {
|
|
1007
739
|
// To allow NumberFormatterImpl to access isBogus() and other internal methods:
|
1008
740
|
friend class impl::NumberFormatterImpl;
|
1009
741
|
|
1010
|
-
// To
|
1011
|
-
friend class impl::
|
1012
|
-
|
1013
|
-
|
1014
|
-
friend class impl::
|
742
|
+
// To allow NumberPropertyMapper to create instances from DecimalFormatProperties:
|
743
|
+
friend class impl::NumberPropertyMapper;
|
744
|
+
|
745
|
+
// To allow access to the main implementation class:
|
746
|
+
friend class impl::RoundingImpl;
|
1015
747
|
|
1016
748
|
// To allow child classes to call private methods:
|
1017
|
-
friend class
|
1018
|
-
friend class
|
1019
|
-
friend class
|
749
|
+
friend class FractionPrecision;
|
750
|
+
friend class CurrencyPrecision;
|
751
|
+
friend class IncrementPrecision;
|
752
|
+
|
753
|
+
// To allow access to the skeleton generation code:
|
754
|
+
friend class impl::GeneratorHelpers;
|
1020
755
|
};
|
1021
756
|
|
1022
757
|
/**
|
1023
|
-
* A class that defines a rounding
|
758
|
+
* A class that defines a rounding precision based on a number of fraction places and optionally significant digits to be
|
1024
759
|
* used when formatting numbers in NumberFormatter.
|
1025
760
|
*
|
1026
761
|
* <p>
|
1027
|
-
* To create a
|
762
|
+
* To create a FractionPrecision, use one of the factory methods on Precision.
|
1028
763
|
*
|
1029
764
|
* @draft ICU 60
|
1030
765
|
*/
|
1031
|
-
class U_I18N_API
|
766
|
+
class U_I18N_API FractionPrecision : public Precision {
|
1032
767
|
public:
|
1033
768
|
/**
|
1034
769
|
* Ensure that no less than this number of significant digits are retained when rounding according to fraction
|
@@ -1043,10 +778,10 @@ class U_I18N_API FractionRounder : public Rounder {
|
|
1043
778
|
*
|
1044
779
|
* @param minSignificantDigits
|
1045
780
|
* The number of significant figures to guarantee.
|
1046
|
-
* @return A
|
781
|
+
* @return A precision for chaining or passing to the NumberFormatter precision() setter.
|
1047
782
|
* @draft ICU 60
|
1048
783
|
*/
|
1049
|
-
|
784
|
+
Precision withMinDigits(int32_t minSignificantDigits) const;
|
1050
785
|
|
1051
786
|
/**
|
1052
787
|
* Ensure that no more than this number of significant digits are retained when rounding according to fraction
|
@@ -1062,36 +797,36 @@ class U_I18N_API FractionRounder : public Rounder {
|
|
1062
797
|
*
|
1063
798
|
* @param maxSignificantDigits
|
1064
799
|
* Round the number to no more than this number of significant figures.
|
1065
|
-
* @return A
|
800
|
+
* @return A precision for chaining or passing to the NumberFormatter precision() setter.
|
1066
801
|
* @draft ICU 60
|
1067
802
|
*/
|
1068
|
-
|
803
|
+
Precision withMaxDigits(int32_t maxSignificantDigits) const;
|
1069
804
|
|
1070
805
|
private:
|
1071
806
|
// Inherit constructor
|
1072
|
-
using
|
807
|
+
using Precision::Precision;
|
1073
808
|
|
1074
809
|
// To allow parent class to call this class's constructor:
|
1075
|
-
friend class
|
810
|
+
friend class Precision;
|
1076
811
|
};
|
1077
812
|
|
1078
813
|
/**
|
1079
|
-
* A class that defines a rounding
|
814
|
+
* A class that defines a rounding precision parameterized by a currency to be used when formatting numbers in
|
1080
815
|
* NumberFormatter.
|
1081
816
|
*
|
1082
817
|
* <p>
|
1083
|
-
* To create a
|
818
|
+
* To create a CurrencyPrecision, use one of the factory methods on Precision.
|
1084
819
|
*
|
1085
820
|
* @draft ICU 60
|
1086
821
|
*/
|
1087
|
-
class U_I18N_API
|
822
|
+
class U_I18N_API CurrencyPrecision : public Precision {
|
1088
823
|
public:
|
1089
824
|
/**
|
1090
|
-
* Associates a currency with this rounding
|
825
|
+
* Associates a currency with this rounding precision.
|
1091
826
|
*
|
1092
827
|
* <p>
|
1093
828
|
* <strong>Calling this method is <em>not required</em></strong>, because the currency specified in unit()
|
1094
|
-
* is automatically applied to currency rounding
|
829
|
+
* is automatically applied to currency rounding precisions. However,
|
1095
830
|
* this method enables you to override that automatic association.
|
1096
831
|
*
|
1097
832
|
* <p>
|
@@ -1099,30 +834,30 @@ class U_I18N_API CurrencyRounder : public Rounder {
|
|
1099
834
|
* currency format.
|
1100
835
|
*
|
1101
836
|
* @param currency
|
1102
|
-
* The currency to associate with this rounding
|
1103
|
-
* @return A
|
837
|
+
* The currency to associate with this rounding precision.
|
838
|
+
* @return A precision for chaining or passing to the NumberFormatter precision() setter.
|
1104
839
|
* @draft ICU 60
|
1105
840
|
*/
|
1106
|
-
|
841
|
+
Precision withCurrency(const CurrencyUnit ¤cy) const;
|
1107
842
|
|
1108
843
|
private:
|
1109
844
|
// Inherit constructor
|
1110
|
-
using
|
845
|
+
using Precision::Precision;
|
1111
846
|
|
1112
847
|
// To allow parent class to call this class's constructor:
|
1113
|
-
friend class
|
848
|
+
friend class Precision;
|
1114
849
|
};
|
1115
850
|
|
1116
851
|
/**
|
1117
|
-
* A class that defines a rounding
|
852
|
+
* A class that defines a rounding precision parameterized by a rounding increment to be used when formatting numbers in
|
1118
853
|
* NumberFormatter.
|
1119
854
|
*
|
1120
855
|
* <p>
|
1121
|
-
* To create an
|
856
|
+
* To create an IncrementPrecision, use one of the factory methods on Precision.
|
1122
857
|
*
|
1123
858
|
* @draft ICU 60
|
1124
859
|
*/
|
1125
|
-
class U_I18N_API
|
860
|
+
class U_I18N_API IncrementPrecision : public Precision {
|
1126
861
|
public:
|
1127
862
|
/**
|
1128
863
|
* Specifies the minimum number of fraction digits to render after the decimal separator, padding with zeros if
|
@@ -1136,17 +871,17 @@ class U_I18N_API IncrementRounder : public Rounder {
|
|
1136
871
|
* Note: In ICU4J, this functionality is accomplished via the scale of the BigDecimal rounding increment.
|
1137
872
|
*
|
1138
873
|
* @param minFrac The minimum number of digits after the decimal separator.
|
1139
|
-
* @return A
|
874
|
+
* @return A precision for chaining or passing to the NumberFormatter precision() setter.
|
1140
875
|
* @draft ICU 60
|
1141
876
|
*/
|
1142
|
-
|
877
|
+
Precision withMinFraction(int32_t minFrac) const;
|
1143
878
|
|
1144
879
|
private:
|
1145
880
|
// Inherit constructor
|
1146
|
-
using
|
881
|
+
using Precision::Precision;
|
1147
882
|
|
1148
883
|
// To allow parent class to call this class's constructor:
|
1149
|
-
friend class
|
884
|
+
friend class Precision;
|
1150
885
|
};
|
1151
886
|
|
1152
887
|
/**
|
@@ -1170,7 +905,6 @@ class U_I18N_API IntegerWidth : public UMemory {
|
|
1170
905
|
* The minimum number of places before the decimal separator.
|
1171
906
|
* @return An IntegerWidth for chaining or passing to the NumberFormatter integerWidth() setter.
|
1172
907
|
* @draft ICU 60
|
1173
|
-
* @see NumberFormatter
|
1174
908
|
*/
|
1175
909
|
static IntegerWidth zeroFillTo(int32_t minInt);
|
1176
910
|
|
@@ -1184,7 +918,6 @@ class U_I18N_API IntegerWidth : public UMemory {
|
|
1184
918
|
* truncation.
|
1185
919
|
* @return An IntegerWidth for passing to the NumberFormatter integerWidth() setter.
|
1186
920
|
* @draft ICU 60
|
1187
|
-
* @see NumberFormatter
|
1188
921
|
*/
|
1189
922
|
IntegerWidth truncateAt(int32_t maxInt);
|
1190
923
|
|
@@ -1193,12 +926,13 @@ class U_I18N_API IntegerWidth : public UMemory {
|
|
1193
926
|
struct {
|
1194
927
|
impl::digits_t fMinInt;
|
1195
928
|
impl::digits_t fMaxInt;
|
929
|
+
bool fFormatFailIfMoreThanMaxDigits;
|
1196
930
|
} minMaxInt;
|
1197
931
|
UErrorCode errorCode;
|
1198
932
|
} fUnion;
|
1199
933
|
bool fHasError = false;
|
1200
934
|
|
1201
|
-
IntegerWidth(impl::digits_t minInt, impl::digits_t maxInt);
|
935
|
+
IntegerWidth(impl::digits_t minInt, impl::digits_t maxInt, bool formatFailIfMoreThanMaxDigits);
|
1202
936
|
|
1203
937
|
IntegerWidth(UErrorCode errorCode) { // NOLINT
|
1204
938
|
fUnion.errorCode = errorCode;
|
@@ -1209,6 +943,11 @@ class U_I18N_API IntegerWidth : public UMemory {
|
|
1209
943
|
fUnion.minMaxInt.fMinInt = -1;
|
1210
944
|
}
|
1211
945
|
|
946
|
+
/** Returns the default instance. */
|
947
|
+
static IntegerWidth standard() {
|
948
|
+
return IntegerWidth::zeroFillTo(1);
|
949
|
+
}
|
950
|
+
|
1212
951
|
bool isBogus() const {
|
1213
952
|
return !fHasError && fUnion.minMaxInt.fMinInt == -1;
|
1214
953
|
}
|
@@ -1223,69 +962,214 @@ class U_I18N_API IntegerWidth : public UMemory {
|
|
1223
962
|
|
1224
963
|
void apply(impl::DecimalQuantity &quantity, UErrorCode &status) const;
|
1225
964
|
|
965
|
+
bool operator==(const IntegerWidth& other) const;
|
966
|
+
|
1226
967
|
// To allow MacroProps/MicroProps to initialize empty instances:
|
1227
968
|
friend struct impl::MacroProps;
|
1228
969
|
friend struct impl::MicroProps;
|
1229
970
|
|
1230
971
|
// To allow NumberFormatterImpl to access isBogus() and perform other operations:
|
1231
972
|
friend class impl::NumberFormatterImpl;
|
1232
|
-
};
|
1233
|
-
|
1234
|
-
namespace impl {
|
1235
|
-
|
1236
|
-
// Do not enclose entire SymbolsWrapper with #ifndef U_HIDE_INTERNAL_API, needed for a protected field
|
1237
|
-
/** @internal */
|
1238
|
-
class U_I18N_API SymbolsWrapper : public UMemory {
|
1239
|
-
public:
|
1240
|
-
/** @internal */
|
1241
|
-
SymbolsWrapper() : fType(SYMPTR_NONE), fPtr{nullptr} {}
|
1242
973
|
|
1243
|
-
|
1244
|
-
|
1245
|
-
|
1246
|
-
/** @internal */
|
1247
|
-
~SymbolsWrapper();
|
974
|
+
// So that NumberPropertyMapper can create instances
|
975
|
+
friend class impl::NumberPropertyMapper;
|
1248
976
|
|
1249
|
-
|
1250
|
-
|
977
|
+
// To allow access to the skeleton generation code:
|
978
|
+
friend class impl::GeneratorHelpers;
|
979
|
+
};
|
1251
980
|
|
1252
|
-
|
981
|
+
/**
|
982
|
+
* A class that defines a quantity by which a number should be multiplied when formatting.
|
983
|
+
*
|
984
|
+
* <p>
|
985
|
+
* To create a Scale, use one of the factory methods.
|
986
|
+
*
|
987
|
+
* @draft ICU 62
|
988
|
+
*/
|
989
|
+
class U_I18N_API Scale : public UMemory {
|
990
|
+
public:
|
1253
991
|
/**
|
1254
|
-
*
|
1255
|
-
*
|
992
|
+
* Do not change the value of numbers when formatting or parsing.
|
993
|
+
*
|
994
|
+
* @return A Scale to prevent any multiplication.
|
995
|
+
* @draft ICU 62
|
1256
996
|
*/
|
1257
|
-
|
997
|
+
static Scale none();
|
1258
998
|
|
1259
999
|
/**
|
1260
|
-
*
|
1261
|
-
*
|
1000
|
+
* Multiply numbers by a power of ten before formatting. Useful for combining with a percent unit:
|
1001
|
+
*
|
1002
|
+
* <pre>
|
1003
|
+
* NumberFormatter::with().unit(NoUnit::percent()).multiplier(Scale::powerOfTen(2))
|
1004
|
+
* </pre>
|
1005
|
+
*
|
1006
|
+
* @return A Scale for passing to the setter in NumberFormatter.
|
1007
|
+
* @draft ICU 62
|
1262
1008
|
*/
|
1263
|
-
|
1009
|
+
static Scale powerOfTen(int32_t power);
|
1264
1010
|
|
1265
1011
|
/**
|
1266
|
-
*
|
1267
|
-
*
|
1012
|
+
* Multiply numbers by an arbitrary value before formatting. Useful for unit conversions.
|
1013
|
+
*
|
1014
|
+
* This method takes a string in a decimal number format with syntax
|
1015
|
+
* as defined in the Decimal Arithmetic Specification, available at
|
1016
|
+
* http://speleotrove.com/decimal
|
1017
|
+
*
|
1018
|
+
* Also see the version of this method that takes a double.
|
1019
|
+
*
|
1020
|
+
* @return A Scale for passing to the setter in NumberFormatter.
|
1021
|
+
* @draft ICU 62
|
1268
1022
|
*/
|
1269
|
-
|
1023
|
+
static Scale byDecimal(StringPiece multiplicand);
|
1270
1024
|
|
1271
1025
|
/**
|
1272
|
-
*
|
1273
|
-
*
|
1026
|
+
* Multiply numbers by an arbitrary value before formatting. Useful for unit conversions.
|
1027
|
+
*
|
1028
|
+
* This method takes a double; also see the version of this method that takes an exact decimal.
|
1029
|
+
*
|
1030
|
+
* @return A Scale for passing to the setter in NumberFormatter.
|
1031
|
+
* @draft ICU 62
|
1274
1032
|
*/
|
1275
|
-
|
1033
|
+
static Scale byDouble(double multiplicand);
|
1276
1034
|
|
1277
1035
|
/**
|
1278
|
-
*
|
1279
|
-
*
|
1036
|
+
* Multiply a number by both a power of ten and by an arbitrary double value.
|
1037
|
+
*
|
1038
|
+
* @return A Scale for passing to the setter in NumberFormatter.
|
1039
|
+
* @draft ICU 62
|
1280
1040
|
*/
|
1281
|
-
|
1041
|
+
static Scale byDoubleAndPowerOfTen(double multiplicand, int32_t power);
|
1282
1042
|
|
1283
|
-
|
1043
|
+
// We need a custom destructor for the DecNum, which means we need to declare
|
1044
|
+
// the copy/move constructor/assignment quartet.
|
1045
|
+
|
1046
|
+
/** @draft ICU 62 */
|
1047
|
+
Scale(const Scale& other);
|
1048
|
+
|
1049
|
+
/** @draft ICU 62 */
|
1050
|
+
Scale& operator=(const Scale& other);
|
1051
|
+
|
1052
|
+
/** @draft ICU 62 */
|
1053
|
+
Scale(Scale&& src) U_NOEXCEPT;
|
1054
|
+
|
1055
|
+
/** @draft ICU 62 */
|
1056
|
+
Scale& operator=(Scale&& src) U_NOEXCEPT;
|
1057
|
+
|
1058
|
+
/** @draft ICU 62 */
|
1059
|
+
~Scale();
|
1060
|
+
|
1061
|
+
#ifndef U_HIDE_INTERNAL_API
|
1062
|
+
/** @internal */
|
1063
|
+
Scale(int32_t magnitude, impl::DecNum* arbitraryToAdopt);
|
1064
|
+
#endif /* U_HIDE_INTERNAL_API */
|
1065
|
+
|
1066
|
+
private:
|
1067
|
+
int32_t fMagnitude;
|
1068
|
+
impl::DecNum* fArbitrary;
|
1069
|
+
UErrorCode fError;
|
1070
|
+
|
1071
|
+
Scale(UErrorCode error) : fMagnitude(0), fArbitrary(nullptr), fError(error) {}
|
1072
|
+
|
1073
|
+
Scale() : fMagnitude(0), fArbitrary(nullptr), fError(U_ZERO_ERROR) {}
|
1074
|
+
|
1075
|
+
bool isValid() const {
|
1076
|
+
return fMagnitude != 0 || fArbitrary != nullptr;
|
1077
|
+
}
|
1078
|
+
|
1079
|
+
UBool copyErrorTo(UErrorCode &status) const {
|
1080
|
+
if (fError != U_ZERO_ERROR) {
|
1081
|
+
status = fError;
|
1082
|
+
return TRUE;
|
1083
|
+
}
|
1084
|
+
return FALSE;
|
1085
|
+
}
|
1086
|
+
|
1087
|
+
void applyTo(impl::DecimalQuantity& quantity) const;
|
1088
|
+
|
1089
|
+
void applyReciprocalTo(impl::DecimalQuantity& quantity) const;
|
1090
|
+
|
1091
|
+
// To allow MacroProps/MicroProps to initialize empty instances:
|
1092
|
+
friend struct impl::MacroProps;
|
1093
|
+
friend struct impl::MicroProps;
|
1094
|
+
|
1095
|
+
// To allow NumberFormatterImpl to access isBogus() and perform other operations:
|
1096
|
+
friend class impl::NumberFormatterImpl;
|
1097
|
+
|
1098
|
+
// To allow the helper class MultiplierFormatHandler access to private fields:
|
1099
|
+
friend class impl::MultiplierFormatHandler;
|
1100
|
+
|
1101
|
+
// To allow access to the skeleton generation code:
|
1102
|
+
friend class impl::GeneratorHelpers;
|
1103
|
+
|
1104
|
+
// To allow access to parsing code:
|
1105
|
+
friend class ::icu::numparse::impl::NumberParserImpl;
|
1106
|
+
friend class ::icu::numparse::impl::MultiplierParseHandler;
|
1107
|
+
};
|
1108
|
+
|
1109
|
+
namespace impl {
|
1110
|
+
|
1111
|
+
// Do not enclose entire SymbolsWrapper with #ifndef U_HIDE_INTERNAL_API, needed for a protected field
|
1112
|
+
/** @internal */
|
1113
|
+
class U_I18N_API SymbolsWrapper : public UMemory {
|
1114
|
+
public:
|
1115
|
+
/** @internal */
|
1116
|
+
SymbolsWrapper() : fType(SYMPTR_NONE), fPtr{nullptr} {}
|
1117
|
+
|
1118
|
+
/** @internal */
|
1119
|
+
SymbolsWrapper(const SymbolsWrapper &other);
|
1120
|
+
|
1121
|
+
/** @internal */
|
1122
|
+
SymbolsWrapper &operator=(const SymbolsWrapper &other);
|
1123
|
+
|
1124
|
+
/** @internal */
|
1125
|
+
SymbolsWrapper(SymbolsWrapper&& src) U_NOEXCEPT;
|
1126
|
+
|
1127
|
+
/** @internal */
|
1128
|
+
SymbolsWrapper &operator=(SymbolsWrapper&& src) U_NOEXCEPT;
|
1129
|
+
|
1130
|
+
/** @internal */
|
1131
|
+
~SymbolsWrapper();
|
1132
|
+
|
1133
|
+
#ifndef U_HIDE_INTERNAL_API
|
1134
|
+
|
1135
|
+
/**
|
1136
|
+
* The provided object is copied, but we do not adopt it.
|
1137
|
+
* @internal
|
1138
|
+
*/
|
1139
|
+
void setTo(const DecimalFormatSymbols &dfs);
|
1140
|
+
|
1141
|
+
/**
|
1142
|
+
* Adopt the provided object.
|
1143
|
+
* @internal
|
1144
|
+
*/
|
1145
|
+
void setTo(const NumberingSystem *ns);
|
1146
|
+
|
1147
|
+
/**
|
1148
|
+
* Whether the object is currently holding a DecimalFormatSymbols.
|
1149
|
+
* @internal
|
1150
|
+
*/
|
1151
|
+
bool isDecimalFormatSymbols() const;
|
1152
|
+
|
1153
|
+
/**
|
1154
|
+
* Whether the object is currently holding a NumberingSystem.
|
1155
|
+
* @internal
|
1156
|
+
*/
|
1157
|
+
bool isNumberingSystem() const;
|
1158
|
+
|
1159
|
+
/**
|
1160
|
+
* Get the DecimalFormatSymbols pointer. No ownership change.
|
1161
|
+
* @internal
|
1162
|
+
*/
|
1163
|
+
const DecimalFormatSymbols *getDecimalFormatSymbols() const;
|
1164
|
+
|
1165
|
+
/**
|
1284
1166
|
* Get the NumberingSystem pointer. No ownership change.
|
1285
1167
|
* @internal
|
1286
1168
|
*/
|
1287
1169
|
const NumberingSystem *getNumberingSystem() const;
|
1288
1170
|
|
1171
|
+
#endif // U_HIDE_INTERNAL_API
|
1172
|
+
|
1289
1173
|
/** @internal */
|
1290
1174
|
UBool copyErrorTo(UErrorCode &status) const {
|
1291
1175
|
if (fType == SYMPTR_DFS && fPtr.dfs == nullptr) {
|
@@ -1297,7 +1181,6 @@ class U_I18N_API SymbolsWrapper : public UMemory {
|
|
1297
1181
|
}
|
1298
1182
|
return FALSE;
|
1299
1183
|
}
|
1300
|
-
#endif // U_HIDE_INTERNAL_API
|
1301
1184
|
|
1302
1185
|
private:
|
1303
1186
|
enum SymbolsPointerType {
|
@@ -1311,6 +1194,8 @@ class U_I18N_API SymbolsWrapper : public UMemory {
|
|
1311
1194
|
|
1312
1195
|
void doCopyFrom(const SymbolsWrapper &other);
|
1313
1196
|
|
1197
|
+
void doMoveFrom(SymbolsWrapper&& src);
|
1198
|
+
|
1314
1199
|
void doCleanup();
|
1315
1200
|
};
|
1316
1201
|
|
@@ -1322,13 +1207,28 @@ class U_I18N_API Grouper : public UMemory {
|
|
1322
1207
|
/** @internal */
|
1323
1208
|
static Grouper forStrategy(UGroupingStrategy grouping);
|
1324
1209
|
|
1210
|
+
/**
|
1211
|
+
* Resolve the values in Properties to a Grouper object.
|
1212
|
+
* @internal
|
1213
|
+
*/
|
1214
|
+
static Grouper forProperties(const DecimalFormatProperties& properties);
|
1215
|
+
|
1325
1216
|
// Future: static Grouper forProperties(DecimalFormatProperties& properties);
|
1326
1217
|
|
1327
1218
|
/** @internal */
|
1328
|
-
Grouper(int16_t grouping1, int16_t grouping2, int16_t minGrouping)
|
1329
|
-
: fGrouping1(grouping1),
|
1219
|
+
Grouper(int16_t grouping1, int16_t grouping2, int16_t minGrouping, UGroupingStrategy strategy)
|
1220
|
+
: fGrouping1(grouping1),
|
1221
|
+
fGrouping2(grouping2),
|
1222
|
+
fMinGrouping(minGrouping),
|
1223
|
+
fStrategy(strategy) {}
|
1330
1224
|
#endif // U_HIDE_INTERNAL_API
|
1331
1225
|
|
1226
|
+
/** @internal */
|
1227
|
+
int16_t getPrimary() const;
|
1228
|
+
|
1229
|
+
/** @internal */
|
1230
|
+
int16_t getSecondary() const;
|
1231
|
+
|
1332
1232
|
private:
|
1333
1233
|
/**
|
1334
1234
|
* The grouping sizes, with the following special values:
|
@@ -1342,7 +1242,7 @@ class U_I18N_API Grouper : public UMemory {
|
|
1342
1242
|
int16_t fGrouping2;
|
1343
1243
|
|
1344
1244
|
/**
|
1345
|
-
* The minimum
|
1245
|
+
* The minimum grouping size, with the following special values:
|
1346
1246
|
* <ul>
|
1347
1247
|
* <li>-2 = needs locale data
|
1348
1248
|
* <li>-3 = no less than 2
|
@@ -1350,6 +1250,12 @@ class U_I18N_API Grouper : public UMemory {
|
|
1350
1250
|
*/
|
1351
1251
|
int16_t fMinGrouping;
|
1352
1252
|
|
1253
|
+
/**
|
1254
|
+
* The UGroupingStrategy that was used to create this Grouper, or UNUM_GROUPING_COUNT if this
|
1255
|
+
* was not created from a UGroupingStrategy.
|
1256
|
+
*/
|
1257
|
+
UGroupingStrategy fStrategy;
|
1258
|
+
|
1353
1259
|
Grouper() : fGrouping1(-3) {};
|
1354
1260
|
|
1355
1261
|
bool isBogus() const {
|
@@ -1367,6 +1273,12 @@ class U_I18N_API Grouper : public UMemory {
|
|
1367
1273
|
|
1368
1274
|
// To allow NumberFormatterImpl to access isBogus() and perform other operations:
|
1369
1275
|
friend class NumberFormatterImpl;
|
1276
|
+
|
1277
|
+
// To allow NumberParserImpl to perform setLocaleData():
|
1278
|
+
friend class ::icu::numparse::impl::NumberParserImpl;
|
1279
|
+
|
1280
|
+
// To allow access to the skeleton generation code:
|
1281
|
+
friend class impl::GeneratorHelpers;
|
1370
1282
|
};
|
1371
1283
|
|
1372
1284
|
// Do not enclose entire Padder with #ifndef U_HIDE_INTERNAL_API, needed for a protected field
|
@@ -1381,6 +1293,9 @@ class U_I18N_API Padder : public UMemory {
|
|
1381
1293
|
static Padder codePoints(UChar32 cp, int32_t targetWidth, UNumberFormatPadPosition position);
|
1382
1294
|
#endif // U_HIDE_INTERNAL_API
|
1383
1295
|
|
1296
|
+
/** @internal */
|
1297
|
+
static Padder forProperties(const DecimalFormatProperties& properties);
|
1298
|
+
|
1384
1299
|
private:
|
1385
1300
|
UChar32 fWidth; // -3 = error; -2 = bogus; -1 = no padding
|
1386
1301
|
union {
|
@@ -1427,6 +1342,9 @@ class U_I18N_API Padder : public UMemory {
|
|
1427
1342
|
|
1428
1343
|
// To allow NumberFormatterImpl to access isBogus() and perform other operations:
|
1429
1344
|
friend class impl::NumberFormatterImpl;
|
1345
|
+
|
1346
|
+
// To allow access to the skeleton generation code:
|
1347
|
+
friend class impl::GeneratorHelpers;
|
1430
1348
|
};
|
1431
1349
|
|
1432
1350
|
// Do not enclose entire MacroProps with #ifndef U_HIDE_INTERNAL_API, needed for a protected field
|
@@ -1442,7 +1360,10 @@ struct U_I18N_API MacroProps : public UMemory {
|
|
1442
1360
|
MeasureUnit perUnit; // = NoUnit::base();
|
1443
1361
|
|
1444
1362
|
/** @internal */
|
1445
|
-
|
1363
|
+
Precision precision; // = Precision(); (bogus)
|
1364
|
+
|
1365
|
+
/** @internal */
|
1366
|
+
UNumberFormatRoundingMode roundingMode = UNUM_ROUND_HALFEVEN;
|
1446
1367
|
|
1447
1368
|
/** @internal */
|
1448
1369
|
Grouper grouper; // = Grouper(); (bogus)
|
@@ -1468,20 +1389,33 @@ struct U_I18N_API MacroProps : public UMemory {
|
|
1468
1389
|
UNumberDecimalSeparatorDisplay decimal = UNUM_DECIMAL_SEPARATOR_COUNT;
|
1469
1390
|
|
1470
1391
|
/** @internal */
|
1471
|
-
|
1392
|
+
Scale scale; // = Scale(); (benign value)
|
1393
|
+
|
1394
|
+
/** @internal */
|
1395
|
+
const AffixPatternProvider* affixProvider = nullptr; // no ownership
|
1396
|
+
|
1397
|
+
/** @internal */
|
1398
|
+
const PluralRules* rules = nullptr; // no ownership
|
1399
|
+
|
1400
|
+
/** @internal */
|
1401
|
+
const CurrencySymbols* currencySymbols = nullptr; // no ownership
|
1472
1402
|
|
1473
1403
|
/** @internal */
|
1474
1404
|
int32_t threshold = DEFAULT_THRESHOLD;
|
1405
|
+
|
1406
|
+
/** @internal */
|
1475
1407
|
Locale locale;
|
1476
1408
|
|
1409
|
+
// NOTE: Uses default copy and move constructors.
|
1410
|
+
|
1477
1411
|
/**
|
1478
1412
|
* Check all members for errors.
|
1479
1413
|
* @internal
|
1480
1414
|
*/
|
1481
1415
|
bool copyErrorTo(UErrorCode &status) const {
|
1482
|
-
return notation.copyErrorTo(status) ||
|
1416
|
+
return notation.copyErrorTo(status) || precision.copyErrorTo(status) ||
|
1483
1417
|
padder.copyErrorTo(status) || integerWidth.copyErrorTo(status) ||
|
1484
|
-
symbols.copyErrorTo(status);
|
1418
|
+
symbols.copyErrorTo(status) || scale.copyErrorTo(status);
|
1485
1419
|
}
|
1486
1420
|
};
|
1487
1421
|
|
@@ -1505,7 +1439,7 @@ class U_I18N_API NumberFormatterSettings {
|
|
1505
1439
|
*
|
1506
1440
|
* <p>
|
1507
1441
|
* All notation styles will be properly localized with locale data, and all notation styles are compatible with
|
1508
|
-
* units, rounding
|
1442
|
+
* units, rounding precisions, and other number formatter settings.
|
1509
1443
|
*
|
1510
1444
|
* <p>
|
1511
1445
|
* Pass this method the return value of a {@link Notation} factory method. For example:
|
@@ -1522,7 +1456,18 @@ class U_I18N_API NumberFormatterSettings {
|
|
1522
1456
|
* @see Notation
|
1523
1457
|
* @draft ICU 60
|
1524
1458
|
*/
|
1525
|
-
Derived notation(const Notation ¬ation) const
|
1459
|
+
Derived notation(const Notation ¬ation) const &;
|
1460
|
+
|
1461
|
+
/**
|
1462
|
+
* Overload of notation() for use on an rvalue reference.
|
1463
|
+
*
|
1464
|
+
* @param notation
|
1465
|
+
* The notation strategy to use.
|
1466
|
+
* @return The fluent chain.
|
1467
|
+
* @see #notation
|
1468
|
+
* @draft ICU 62
|
1469
|
+
*/
|
1470
|
+
Derived notation(const Notation ¬ation) &&;
|
1526
1471
|
|
1527
1472
|
/**
|
1528
1473
|
* Specifies the unit (unit of measure, currency, or percent) to associate with rendered numbers.
|
@@ -1534,7 +1479,7 @@ class U_I18N_API NumberFormatterSettings {
|
|
1534
1479
|
* </ul>
|
1535
1480
|
*
|
1536
1481
|
* All units will be properly localized with locale data, and all units are compatible with notation styles,
|
1537
|
-
* rounding
|
1482
|
+
* rounding precisions, and other number formatter settings.
|
1538
1483
|
*
|
1539
1484
|
* Pass this method any instance of {@link MeasureUnit}. For units of measure (which often involve the
|
1540
1485
|
* factory methods that return a pointer):
|
@@ -1568,7 +1513,18 @@ class U_I18N_API NumberFormatterSettings {
|
|
1568
1513
|
* @see #perUnit
|
1569
1514
|
* @draft ICU 60
|
1570
1515
|
*/
|
1571
|
-
Derived unit(const icu::MeasureUnit &unit) const
|
1516
|
+
Derived unit(const icu::MeasureUnit &unit) const &;
|
1517
|
+
|
1518
|
+
/**
|
1519
|
+
* Overload of unit() for use on an rvalue reference.
|
1520
|
+
*
|
1521
|
+
* @param unit
|
1522
|
+
* The unit to render.
|
1523
|
+
* @return The fluent chain.
|
1524
|
+
* @see #unit
|
1525
|
+
* @draft ICU 62
|
1526
|
+
*/
|
1527
|
+
Derived unit(const icu::MeasureUnit &unit) &&;
|
1572
1528
|
|
1573
1529
|
/**
|
1574
1530
|
* Like unit(), but takes ownership of a pointer. Convenient for use with the MeasureFormat factory
|
@@ -1585,7 +1541,18 @@ class U_I18N_API NumberFormatterSettings {
|
|
1585
1541
|
* @see MeasureUnit
|
1586
1542
|
* @draft ICU 60
|
1587
1543
|
*/
|
1588
|
-
Derived adoptUnit(icu::MeasureUnit *unit) const
|
1544
|
+
Derived adoptUnit(icu::MeasureUnit *unit) const &;
|
1545
|
+
|
1546
|
+
/**
|
1547
|
+
* Overload of adoptUnit() for use on an rvalue reference.
|
1548
|
+
*
|
1549
|
+
* @param unit
|
1550
|
+
* The unit to render.
|
1551
|
+
* @return The fluent chain.
|
1552
|
+
* @see #adoptUnit
|
1553
|
+
* @draft ICU 62
|
1554
|
+
*/
|
1555
|
+
Derived adoptUnit(icu::MeasureUnit *unit) &&;
|
1589
1556
|
|
1590
1557
|
/**
|
1591
1558
|
* Sets a unit to be used in the denominator. For example, to format "3 m/s", pass METER to the unit and SECOND to
|
@@ -1604,7 +1571,18 @@ class U_I18N_API NumberFormatterSettings {
|
|
1604
1571
|
* @see #unit
|
1605
1572
|
* @draft ICU 61
|
1606
1573
|
*/
|
1607
|
-
Derived perUnit(const icu::MeasureUnit &perUnit) const
|
1574
|
+
Derived perUnit(const icu::MeasureUnit &perUnit) const &;
|
1575
|
+
|
1576
|
+
/**
|
1577
|
+
* Overload of perUnit() for use on an rvalue reference.
|
1578
|
+
*
|
1579
|
+
* @param perUnit
|
1580
|
+
* The unit to render in the denominator.
|
1581
|
+
* @return The fluent chain.
|
1582
|
+
* @see #perUnit
|
1583
|
+
* @draft ICU 62
|
1584
|
+
*/
|
1585
|
+
Derived perUnit(const icu::MeasureUnit &perUnit) &&;
|
1608
1586
|
|
1609
1587
|
/**
|
1610
1588
|
* Like perUnit(), but takes ownership of a pointer. Convenient for use with the MeasureFormat factory
|
@@ -1623,10 +1601,21 @@ class U_I18N_API NumberFormatterSettings {
|
|
1623
1601
|
* @see MeasureUnit
|
1624
1602
|
* @draft ICU 61
|
1625
1603
|
*/
|
1626
|
-
Derived adoptPerUnit(icu::MeasureUnit *perUnit) const
|
1604
|
+
Derived adoptPerUnit(icu::MeasureUnit *perUnit) const &;
|
1627
1605
|
|
1628
1606
|
/**
|
1629
|
-
*
|
1607
|
+
* Overload of adoptPerUnit() for use on an rvalue reference.
|
1608
|
+
*
|
1609
|
+
* @param perUnit
|
1610
|
+
* The unit to render in the denominator.
|
1611
|
+
* @return The fluent chain.
|
1612
|
+
* @see #adoptPerUnit
|
1613
|
+
* @draft ICU 62
|
1614
|
+
*/
|
1615
|
+
Derived adoptPerUnit(icu::MeasureUnit *perUnit) &&;
|
1616
|
+
|
1617
|
+
/**
|
1618
|
+
* Specifies the rounding precision to use when formatting numbers.
|
1630
1619
|
*
|
1631
1620
|
* <ul>
|
1632
1621
|
* <li>Round to 3 decimal places: "3.142"
|
@@ -1636,27 +1625,77 @@ class U_I18N_API NumberFormatterSettings {
|
|
1636
1625
|
* </ul>
|
1637
1626
|
*
|
1638
1627
|
* <p>
|
1639
|
-
* Pass this method the return value of one of the factory methods on {@link
|
1628
|
+
* Pass this method the return value of one of the factory methods on {@link Precision}. For example:
|
1640
1629
|
*
|
1641
1630
|
* <pre>
|
1642
|
-
* NumberFormatter::with().
|
1631
|
+
* NumberFormatter::with().precision(Precision::fixedFraction(2))
|
1643
1632
|
* </pre>
|
1644
1633
|
*
|
1645
1634
|
* <p>
|
1646
1635
|
* In most cases, the default rounding strategy is to round to 6 fraction places; i.e.,
|
1647
|
-
* <code>
|
1636
|
+
* <code>Precision.maxFraction(6)</code>. The exceptions are if compact notation is being used, then the compact
|
1648
1637
|
* notation rounding strategy is used (see {@link Notation#compactShort} for details), or if the unit is a currency,
|
1649
|
-
* then standard currency rounding is used, which varies from currency to currency (see {@link
|
1638
|
+
* then standard currency rounding is used, which varies from currency to currency (see {@link Precision#currency} for
|
1650
1639
|
* details).
|
1651
1640
|
*
|
1652
|
-
* @param
|
1653
|
-
* The rounding
|
1641
|
+
* @param precision
|
1642
|
+
* The rounding precision to use.
|
1654
1643
|
* @return The fluent chain.
|
1655
|
-
* @see
|
1656
|
-
* @
|
1657
|
-
|
1644
|
+
* @see Precision
|
1645
|
+
* @draft ICU 62
|
1646
|
+
*/
|
1647
|
+
Derived precision(const Precision& precision) const &;
|
1648
|
+
|
1649
|
+
/**
|
1650
|
+
* Overload of precision() for use on an rvalue reference.
|
1651
|
+
*
|
1652
|
+
* @param precision
|
1653
|
+
* The rounding precision to use.
|
1654
|
+
* @return The fluent chain.
|
1655
|
+
* @see #precision
|
1656
|
+
* @draft ICU 62
|
1657
|
+
*/
|
1658
|
+
Derived precision(const Precision& precision) &&;
|
1659
|
+
|
1660
|
+
#ifndef U_HIDE_DEPRECATED_API
|
1661
|
+
// Compatibility method that will be removed in ICU 64.
|
1662
|
+
// Use precision() instead.
|
1663
|
+
// See http://bugs.icu-project.org/trac/ticket/13746
|
1664
|
+
/** @deprecated ICU 62 */
|
1665
|
+
Derived rounding(const Rounder& rounder) const & {
|
1666
|
+
return precision(rounder);
|
1667
|
+
}
|
1668
|
+
#endif /* U_HIDE_DEPRECATED_API */
|
1669
|
+
|
1670
|
+
/**
|
1671
|
+
* Specifies how to determine the direction to round a number when it has more digits than fit in the
|
1672
|
+
* desired precision. When formatting 1.235:
|
1673
|
+
*
|
1674
|
+
* <ul>
|
1675
|
+
* <li>Ceiling rounding mode with integer precision: "2"
|
1676
|
+
* <li>Half-down rounding mode with 2 fixed fraction digits: "1.23"
|
1677
|
+
* <li>Half-up rounding mode with 2 fixed fraction digits: "1.24"
|
1678
|
+
* </ul>
|
1679
|
+
*
|
1680
|
+
* The default is HALF_EVEN. For more information on rounding mode, see the ICU userguide here:
|
1681
|
+
*
|
1682
|
+
* http://userguide.icu-project.org/formatparse/numbers/rounding-modes
|
1683
|
+
*
|
1684
|
+
* @param roundingMode The rounding mode to use.
|
1685
|
+
* @return The fluent chain.
|
1686
|
+
* @draft ICU 62
|
1687
|
+
*/
|
1688
|
+
Derived roundingMode(UNumberFormatRoundingMode roundingMode) const &;
|
1689
|
+
|
1690
|
+
/**
|
1691
|
+
* Overload of roundingMode() for use on an rvalue reference.
|
1692
|
+
*
|
1693
|
+
* @param roundingMode The rounding mode to use.
|
1694
|
+
* @return The fluent chain.
|
1695
|
+
* @see #roundingMode
|
1696
|
+
* @draft ICU 62
|
1658
1697
|
*/
|
1659
|
-
Derived
|
1698
|
+
Derived roundingMode(UNumberFormatRoundingMode roundingMode) &&;
|
1660
1699
|
|
1661
1700
|
/**
|
1662
1701
|
* Specifies the grouping strategy to use when formatting numbers.
|
@@ -1685,7 +1724,19 @@ class U_I18N_API NumberFormatterSettings {
|
|
1685
1724
|
* @return The fluent chain.
|
1686
1725
|
* @draft ICU 61
|
1687
1726
|
*/
|
1688
|
-
Derived grouping(
|
1727
|
+
Derived grouping(UGroupingStrategy strategy) const &;
|
1728
|
+
|
1729
|
+
/**
|
1730
|
+
* Overload of grouping() for use on an rvalue reference.
|
1731
|
+
*
|
1732
|
+
* @param strategy
|
1733
|
+
* The grouping strategy to use.
|
1734
|
+
* @return The fluent chain.
|
1735
|
+
* @see #grouping
|
1736
|
+
* @provisional This API might change or be removed in a future release.
|
1737
|
+
* @draft ICU 62
|
1738
|
+
*/
|
1739
|
+
Derived grouping(UGroupingStrategy strategy) &&;
|
1689
1740
|
|
1690
1741
|
/**
|
1691
1742
|
* Specifies the minimum and maximum number of digits to render before the decimal mark.
|
@@ -1711,7 +1762,18 @@ class U_I18N_API NumberFormatterSettings {
|
|
1711
1762
|
* @see IntegerWidth
|
1712
1763
|
* @draft ICU 60
|
1713
1764
|
*/
|
1714
|
-
Derived integerWidth(const IntegerWidth &style) const
|
1765
|
+
Derived integerWidth(const IntegerWidth &style) const &;
|
1766
|
+
|
1767
|
+
/**
|
1768
|
+
* Overload of integerWidth() for use on an rvalue reference.
|
1769
|
+
*
|
1770
|
+
* @param style
|
1771
|
+
* The integer width to use.
|
1772
|
+
* @return The fluent chain.
|
1773
|
+
* @see #integerWidth
|
1774
|
+
* @draft ICU 62
|
1775
|
+
*/
|
1776
|
+
Derived integerWidth(const IntegerWidth &style) &&;
|
1715
1777
|
|
1716
1778
|
/**
|
1717
1779
|
* Specifies the symbols (decimal separator, grouping separator, percent sign, numerals, etc.) to use when rendering
|
@@ -1741,8 +1803,8 @@ class U_I18N_API NumberFormatterSettings {
|
|
1741
1803
|
* after passing it into the fluent chain will not be seen.
|
1742
1804
|
*
|
1743
1805
|
* <p>
|
1744
|
-
* <strong>Note:</strong> Calling this method will override
|
1745
|
-
*
|
1806
|
+
* <strong>Note:</strong> Calling this method will override any previously specified DecimalFormatSymbols
|
1807
|
+
* or NumberingSystem.
|
1746
1808
|
*
|
1747
1809
|
* <p>
|
1748
1810
|
* The default is to choose the symbols based on the locale specified in the fluent chain.
|
@@ -1753,7 +1815,18 @@ class U_I18N_API NumberFormatterSettings {
|
|
1753
1815
|
* @see DecimalFormatSymbols
|
1754
1816
|
* @draft ICU 60
|
1755
1817
|
*/
|
1756
|
-
Derived symbols(const DecimalFormatSymbols &symbols) const
|
1818
|
+
Derived symbols(const DecimalFormatSymbols &symbols) const &;
|
1819
|
+
|
1820
|
+
/**
|
1821
|
+
* Overload of symbols() for use on an rvalue reference.
|
1822
|
+
*
|
1823
|
+
* @param symbols
|
1824
|
+
* The DecimalFormatSymbols to use.
|
1825
|
+
* @return The fluent chain.
|
1826
|
+
* @see #symbols
|
1827
|
+
* @draft ICU 62
|
1828
|
+
*/
|
1829
|
+
Derived symbols(const DecimalFormatSymbols &symbols) &&;
|
1757
1830
|
|
1758
1831
|
/**
|
1759
1832
|
* Specifies that the given numbering system should be used when fetching symbols.
|
@@ -1773,8 +1846,8 @@ class U_I18N_API NumberFormatterSettings {
|
|
1773
1846
|
* </pre>
|
1774
1847
|
*
|
1775
1848
|
* <p>
|
1776
|
-
* <strong>Note:</strong> Calling this method will override
|
1777
|
-
*
|
1849
|
+
* <strong>Note:</strong> Calling this method will override any previously specified DecimalFormatSymbols
|
1850
|
+
* or NumberingSystem.
|
1778
1851
|
*
|
1779
1852
|
* <p>
|
1780
1853
|
* The default is to choose the best numbering system for the locale.
|
@@ -1788,7 +1861,18 @@ class U_I18N_API NumberFormatterSettings {
|
|
1788
1861
|
* @see NumberingSystem
|
1789
1862
|
* @draft ICU 60
|
1790
1863
|
*/
|
1791
|
-
Derived adoptSymbols(NumberingSystem *symbols) const
|
1864
|
+
Derived adoptSymbols(NumberingSystem *symbols) const &;
|
1865
|
+
|
1866
|
+
/**
|
1867
|
+
* Overload of adoptSymbols() for use on an rvalue reference.
|
1868
|
+
*
|
1869
|
+
* @param symbols
|
1870
|
+
* The NumberingSystem to use.
|
1871
|
+
* @return The fluent chain.
|
1872
|
+
* @see #adoptSymbols
|
1873
|
+
* @draft ICU 62
|
1874
|
+
*/
|
1875
|
+
Derived adoptSymbols(NumberingSystem *symbols) &&;
|
1792
1876
|
|
1793
1877
|
/**
|
1794
1878
|
* Sets the width of the unit (measure unit or currency). Most common values:
|
@@ -1815,7 +1899,18 @@ class U_I18N_API NumberFormatterSettings {
|
|
1815
1899
|
* @see UNumberUnitWidth
|
1816
1900
|
* @draft ICU 60
|
1817
1901
|
*/
|
1818
|
-
Derived unitWidth(
|
1902
|
+
Derived unitWidth(UNumberUnitWidth width) const &;
|
1903
|
+
|
1904
|
+
/**
|
1905
|
+
* Overload of unitWidth() for use on an rvalue reference.
|
1906
|
+
*
|
1907
|
+
* @param width
|
1908
|
+
* The width to use when rendering numbers.
|
1909
|
+
* @return The fluent chain.
|
1910
|
+
* @see #unitWidth
|
1911
|
+
* @draft ICU 62
|
1912
|
+
*/
|
1913
|
+
Derived unitWidth(UNumberUnitWidth width) &&;
|
1819
1914
|
|
1820
1915
|
/**
|
1821
1916
|
* Sets the plus/minus sign display strategy. Most common values:
|
@@ -1836,14 +1931,24 @@ class U_I18N_API NumberFormatterSettings {
|
|
1836
1931
|
* <p>
|
1837
1932
|
* The default is AUTO sign display.
|
1838
1933
|
*
|
1839
|
-
* @param
|
1934
|
+
* @param style
|
1840
1935
|
* The sign display strategy to use when rendering numbers.
|
1841
1936
|
* @return The fluent chain
|
1842
1937
|
* @see UNumberSignDisplay
|
1843
|
-
* @provisional This API might change or be removed in a future release.
|
1844
1938
|
* @draft ICU 60
|
1845
1939
|
*/
|
1846
|
-
Derived sign(
|
1940
|
+
Derived sign(UNumberSignDisplay style) const &;
|
1941
|
+
|
1942
|
+
/**
|
1943
|
+
* Overload of sign() for use on an rvalue reference.
|
1944
|
+
*
|
1945
|
+
* @param style
|
1946
|
+
* The sign display strategy to use when rendering numbers.
|
1947
|
+
* @return The fluent chain.
|
1948
|
+
* @see #sign
|
1949
|
+
* @draft ICU 62
|
1950
|
+
*/
|
1951
|
+
Derived sign(UNumberSignDisplay style) &&;
|
1847
1952
|
|
1848
1953
|
/**
|
1849
1954
|
* Sets the decimal separator display strategy. This affects integer numbers with no fraction part. Most common
|
@@ -1864,23 +1969,73 @@ class U_I18N_API NumberFormatterSettings {
|
|
1864
1969
|
* <p>
|
1865
1970
|
* The default is AUTO decimal separator display.
|
1866
1971
|
*
|
1867
|
-
* @param
|
1972
|
+
* @param style
|
1868
1973
|
* The decimal separator display strategy to use when rendering numbers.
|
1869
1974
|
* @return The fluent chain
|
1870
1975
|
* @see UNumberDecimalSeparatorDisplay
|
1871
|
-
* @provisional This API might change or be removed in a future release.
|
1872
1976
|
* @draft ICU 60
|
1873
1977
|
*/
|
1874
|
-
Derived decimal(
|
1978
|
+
Derived decimal(UNumberDecimalSeparatorDisplay style) const &;
|
1979
|
+
|
1980
|
+
/**
|
1981
|
+
* Overload of decimal() for use on an rvalue reference.
|
1982
|
+
*
|
1983
|
+
* @param style
|
1984
|
+
* The decimal separator display strategy to use when rendering numbers.
|
1985
|
+
* @return The fluent chain.
|
1986
|
+
* @see #decimal
|
1987
|
+
* @draft ICU 62
|
1988
|
+
*/
|
1989
|
+
Derived decimal(UNumberDecimalSeparatorDisplay style) &&;
|
1990
|
+
|
1991
|
+
/**
|
1992
|
+
* Sets a scale (multiplier) to be used to scale the number by an arbitrary amount before formatting.
|
1993
|
+
* Most common values:
|
1994
|
+
*
|
1995
|
+
* <ul>
|
1996
|
+
* <li>Multiply by 100: useful for percentages.
|
1997
|
+
* <li>Multiply by an arbitrary value: useful for unit conversions.
|
1998
|
+
* </ul>
|
1999
|
+
*
|
2000
|
+
* <p>
|
2001
|
+
* Pass an element from a {@link Scale} factory method to this setter. For example:
|
2002
|
+
*
|
2003
|
+
* <pre>
|
2004
|
+
* NumberFormatter::with().scale(Scale::powerOfTen(2))
|
2005
|
+
* </pre>
|
2006
|
+
*
|
2007
|
+
* <p>
|
2008
|
+
* The default is to not apply any multiplier.
|
2009
|
+
*
|
2010
|
+
* @param scale
|
2011
|
+
* The scale to apply when rendering numbers.
|
2012
|
+
* @return The fluent chain
|
2013
|
+
* @draft ICU 62
|
2014
|
+
*/
|
2015
|
+
Derived scale(const Scale &scale) const &;
|
2016
|
+
|
2017
|
+
/**
|
2018
|
+
* Overload of scale() for use on an rvalue reference.
|
2019
|
+
*
|
2020
|
+
* @param scale
|
2021
|
+
* The scale to apply when rendering numbers.
|
2022
|
+
* @return The fluent chain.
|
2023
|
+
* @see #scale
|
2024
|
+
* @draft ICU 62
|
2025
|
+
*/
|
2026
|
+
Derived scale(const Scale &scale) &&;
|
1875
2027
|
|
1876
2028
|
#ifndef U_HIDE_INTERNAL_API
|
1877
2029
|
|
1878
2030
|
/**
|
1879
|
-
* Set the padding strategy. May be added
|
2031
|
+
* Set the padding strategy. May be added in the future; see #13338.
|
1880
2032
|
*
|
1881
2033
|
* @internal ICU 60: This API is ICU internal only.
|
1882
2034
|
*/
|
1883
|
-
Derived padding(const impl::Padder &padder) const
|
2035
|
+
Derived padding(const impl::Padder &padder) const &;
|
2036
|
+
|
2037
|
+
/** @internal */
|
2038
|
+
Derived padding(const impl::Padder &padder) &&;
|
1884
2039
|
|
1885
2040
|
/**
|
1886
2041
|
* Internal fluent setter to support a custom regulation threshold. A threshold of 1 causes the data structures to
|
@@ -1888,10 +2043,45 @@ class U_I18N_API NumberFormatterSettings {
|
|
1888
2043
|
*
|
1889
2044
|
* @internal ICU 60: This API is ICU internal only.
|
1890
2045
|
*/
|
1891
|
-
Derived threshold(int32_t threshold) const
|
2046
|
+
Derived threshold(int32_t threshold) const &;
|
2047
|
+
|
2048
|
+
/** @internal */
|
2049
|
+
Derived threshold(int32_t threshold) &&;
|
2050
|
+
|
2051
|
+
/**
|
2052
|
+
* Internal fluent setter to overwrite the entire macros object.
|
2053
|
+
*
|
2054
|
+
* @internal ICU 60: This API is ICU internal only.
|
2055
|
+
*/
|
2056
|
+
Derived macros(const impl::MacroProps& macros) const &;
|
2057
|
+
|
2058
|
+
/** @internal */
|
2059
|
+
Derived macros(const impl::MacroProps& macros) &&;
|
2060
|
+
|
2061
|
+
/** @internal */
|
2062
|
+
Derived macros(impl::MacroProps&& macros) const &;
|
2063
|
+
|
2064
|
+
/** @internal */
|
2065
|
+
Derived macros(impl::MacroProps&& macros) &&;
|
1892
2066
|
|
1893
2067
|
#endif /* U_HIDE_INTERNAL_API */
|
1894
2068
|
|
2069
|
+
/**
|
2070
|
+
* Creates a skeleton string representation of this number formatter. A skeleton string is a
|
2071
|
+
* locale-agnostic serialized form of a number formatter.
|
2072
|
+
*
|
2073
|
+
* Not all options are capable of being represented in the skeleton string; for example, a
|
2074
|
+
* DecimalFormatSymbols object. If any such option is encountered, the error code is set to
|
2075
|
+
* U_UNSUPPORTED_ERROR.
|
2076
|
+
*
|
2077
|
+
* The returned skeleton is in normalized form, such that two number formatters with equivalent
|
2078
|
+
* behavior should produce the same skeleton.
|
2079
|
+
*
|
2080
|
+
* @return A number skeleton string with behavior corresponding to this number formatter.
|
2081
|
+
* @draft ICU 62
|
2082
|
+
*/
|
2083
|
+
UnicodeString toSkeleton(UErrorCode& status) const;
|
2084
|
+
|
1895
2085
|
/**
|
1896
2086
|
* Sets the UErrorCode if an error occurred in the fluent chain.
|
1897
2087
|
* Preserves older error codes in the outErrorCode.
|
@@ -1905,7 +2095,9 @@ class U_I18N_API NumberFormatterSettings {
|
|
1905
2095
|
}
|
1906
2096
|
fMacros.copyErrorTo(outErrorCode);
|
1907
2097
|
return U_FAILURE(outErrorCode);
|
1908
|
-
}
|
2098
|
+
};
|
2099
|
+
|
2100
|
+
// NOTE: Uses default copy and move constructors.
|
1909
2101
|
|
1910
2102
|
protected:
|
1911
2103
|
impl::MacroProps fMacros;
|
@@ -1944,21 +2136,58 @@ class U_I18N_API UnlocalizedNumberFormatter
|
|
1944
2136
|
* @return The fluent chain.
|
1945
2137
|
* @draft ICU 60
|
1946
2138
|
*/
|
1947
|
-
LocalizedNumberFormatter locale(const icu::Locale &locale) const
|
2139
|
+
LocalizedNumberFormatter locale(const icu::Locale &locale) const &;
|
2140
|
+
|
2141
|
+
/**
|
2142
|
+
* Overload of locale() for use on an rvalue reference.
|
2143
|
+
*
|
2144
|
+
* @param locale
|
2145
|
+
* The locale to use when loading data for number formatting.
|
2146
|
+
* @return The fluent chain.
|
2147
|
+
* @see #locale
|
2148
|
+
* @draft ICU 62
|
2149
|
+
*/
|
2150
|
+
LocalizedNumberFormatter locale(const icu::Locale &locale) &&;
|
2151
|
+
|
2152
|
+
/**
|
2153
|
+
* Default constructor: puts the formatter into a valid but undefined state.
|
2154
|
+
*
|
2155
|
+
* @draft ICU 62
|
2156
|
+
*/
|
2157
|
+
UnlocalizedNumberFormatter() = default;
|
1948
2158
|
|
1949
2159
|
// Make default copy constructor call the NumberFormatterSettings copy constructor.
|
1950
2160
|
/**
|
1951
2161
|
* Returns a copy of this UnlocalizedNumberFormatter.
|
1952
2162
|
* @draft ICU 60
|
1953
2163
|
*/
|
1954
|
-
UnlocalizedNumberFormatter(const UnlocalizedNumberFormatter &other)
|
1955
|
-
|
2164
|
+
UnlocalizedNumberFormatter(const UnlocalizedNumberFormatter &other);
|
2165
|
+
|
2166
|
+
/**
|
2167
|
+
* Move constructor:
|
2168
|
+
* The source UnlocalizedNumberFormatter will be left in a valid but undefined state.
|
2169
|
+
* @draft ICU 62
|
2170
|
+
*/
|
2171
|
+
UnlocalizedNumberFormatter(UnlocalizedNumberFormatter&& src) U_NOEXCEPT;
|
2172
|
+
|
2173
|
+
/**
|
2174
|
+
* Copy assignment operator.
|
2175
|
+
* @draft ICU 62
|
2176
|
+
*/
|
2177
|
+
UnlocalizedNumberFormatter& operator=(const UnlocalizedNumberFormatter& other);
|
2178
|
+
|
2179
|
+
/**
|
2180
|
+
* Move assignment operator:
|
2181
|
+
* The source UnlocalizedNumberFormatter will be left in a valid but undefined state.
|
2182
|
+
* @draft ICU 62
|
2183
|
+
*/
|
2184
|
+
UnlocalizedNumberFormatter& operator=(UnlocalizedNumberFormatter&& src) U_NOEXCEPT;
|
1956
2185
|
|
1957
2186
|
private:
|
1958
|
-
UnlocalizedNumberFormatter(
|
2187
|
+
explicit UnlocalizedNumberFormatter(const NumberFormatterSettings<UnlocalizedNumberFormatter>& other);
|
1959
2188
|
|
1960
2189
|
explicit UnlocalizedNumberFormatter(
|
1961
|
-
|
2190
|
+
NumberFormatterSettings<UnlocalizedNumberFormatter>&& src) U_NOEXCEPT;
|
1962
2191
|
|
1963
2192
|
// To give the fluent setters access to this class's constructor:
|
1964
2193
|
friend class NumberFormatterSettings<UnlocalizedNumberFormatter>;
|
@@ -2016,15 +2245,99 @@ class U_I18N_API LocalizedNumberFormatter
|
|
2016
2245
|
* @return A FormattedNumber object; call .toString() to get the string.
|
2017
2246
|
* @draft ICU 60
|
2018
2247
|
*/
|
2019
|
-
FormattedNumber formatDecimal(StringPiece value, UErrorCode
|
2248
|
+
FormattedNumber formatDecimal(StringPiece value, UErrorCode& status) const;
|
2249
|
+
|
2250
|
+
#ifndef U_HIDE_INTERNAL_API
|
2251
|
+
|
2252
|
+
/** Internal method.
|
2253
|
+
* @internal
|
2254
|
+
*/
|
2255
|
+
FormattedNumber formatDecimalQuantity(const impl::DecimalQuantity& dq, UErrorCode& status) const;
|
2256
|
+
|
2257
|
+
/** Internal method for DecimalFormat compatibility.
|
2258
|
+
* @internal
|
2259
|
+
*/
|
2260
|
+
void getAffixImpl(bool isPrefix, bool isNegative, UnicodeString& result, UErrorCode& status) const;
|
2261
|
+
|
2262
|
+
/**
|
2263
|
+
* Internal method for testing.
|
2264
|
+
* @internal
|
2265
|
+
*/
|
2266
|
+
const impl::NumberFormatterImpl* getCompiled() const;
|
2267
|
+
|
2268
|
+
/**
|
2269
|
+
* Internal method for testing.
|
2270
|
+
* @internal
|
2271
|
+
*/
|
2272
|
+
int32_t getCallCount() const;
|
2273
|
+
|
2274
|
+
#endif
|
2275
|
+
|
2276
|
+
/**
|
2277
|
+
* Creates a representation of this LocalizedNumberFormat as an icu::Format, enabling the use
|
2278
|
+
* of this number formatter with APIs that need an object of that type, such as MessageFormat.
|
2279
|
+
*
|
2280
|
+
* This API is not intended to be used other than for enabling API compatibility. The formatDouble,
|
2281
|
+
* formatInt, and formatDecimal methods should normally be used when formatting numbers, not the Format
|
2282
|
+
* object returned by this method.
|
2283
|
+
*
|
2284
|
+
* The caller owns the returned object and must delete it when finished.
|
2285
|
+
*
|
2286
|
+
* @return A Format wrapping this LocalizedNumberFormatter.
|
2287
|
+
* @draft ICU 62
|
2288
|
+
*/
|
2289
|
+
Format* toFormat(UErrorCode& status) const;
|
2290
|
+
|
2291
|
+
/**
|
2292
|
+
* Default constructor: puts the formatter into a valid but undefined state.
|
2293
|
+
*
|
2294
|
+
* @draft ICU 62
|
2295
|
+
*/
|
2296
|
+
LocalizedNumberFormatter() = default;
|
2020
2297
|
|
2021
2298
|
// Make default copy constructor call the NumberFormatterSettings copy constructor.
|
2022
2299
|
/**
|
2023
2300
|
* Returns a copy of this LocalizedNumberFormatter.
|
2024
2301
|
* @draft ICU 60
|
2025
2302
|
*/
|
2026
|
-
LocalizedNumberFormatter(const LocalizedNumberFormatter &other)
|
2027
|
-
|
2303
|
+
LocalizedNumberFormatter(const LocalizedNumberFormatter &other);
|
2304
|
+
|
2305
|
+
/**
|
2306
|
+
* Move constructor:
|
2307
|
+
* The source LocalizedNumberFormatter will be left in a valid but undefined state.
|
2308
|
+
* @draft ICU 62
|
2309
|
+
*/
|
2310
|
+
LocalizedNumberFormatter(LocalizedNumberFormatter&& src) U_NOEXCEPT;
|
2311
|
+
|
2312
|
+
/**
|
2313
|
+
* Copy assignment operator.
|
2314
|
+
* @draft ICU 62
|
2315
|
+
*/
|
2316
|
+
LocalizedNumberFormatter& operator=(const LocalizedNumberFormatter& other);
|
2317
|
+
|
2318
|
+
/**
|
2319
|
+
* Move assignment operator:
|
2320
|
+
* The source LocalizedNumberFormatter will be left in a valid but undefined state.
|
2321
|
+
* @draft ICU 62
|
2322
|
+
*/
|
2323
|
+
LocalizedNumberFormatter& operator=(LocalizedNumberFormatter&& src) U_NOEXCEPT;
|
2324
|
+
|
2325
|
+
#ifndef U_HIDE_INTERNAL_API
|
2326
|
+
|
2327
|
+
/**
|
2328
|
+
* This is the core entrypoint to the number formatting pipeline. It performs self-regulation: a static code path
|
2329
|
+
* for the first few calls, and compiling a more efficient data structure if called repeatedly.
|
2330
|
+
*
|
2331
|
+
* <p>
|
2332
|
+
* This function is very hot, being called in every call to the number formatting pipeline.
|
2333
|
+
*
|
2334
|
+
* @param results
|
2335
|
+
* The results object. This method will mutate it to save the results.
|
2336
|
+
* @internal
|
2337
|
+
*/
|
2338
|
+
void formatImpl(impl::UFormattedNumberData *results, UErrorCode &status) const;
|
2339
|
+
|
2340
|
+
#endif
|
2028
2341
|
|
2029
2342
|
/**
|
2030
2343
|
* Destruct this LocalizedNumberFormatter, cleaning up any memory it might own.
|
@@ -2033,27 +2346,25 @@ class U_I18N_API LocalizedNumberFormatter
|
|
2033
2346
|
~LocalizedNumberFormatter();
|
2034
2347
|
|
2035
2348
|
private:
|
2349
|
+
// Note: fCompiled can't be a LocalPointer because impl::NumberFormatterImpl is defined in an internal
|
2350
|
+
// header, and LocalPointer needs the full class definition in order to delete the instance.
|
2036
2351
|
const impl::NumberFormatterImpl* fCompiled {nullptr};
|
2037
2352
|
char fUnsafeCallCount[8] {}; // internally cast to u_atomic_int32_t
|
2038
2353
|
|
2039
|
-
LocalizedNumberFormatter(
|
2354
|
+
explicit LocalizedNumberFormatter(const NumberFormatterSettings<LocalizedNumberFormatter>& other);
|
2040
2355
|
|
2041
|
-
explicit LocalizedNumberFormatter(
|
2356
|
+
explicit LocalizedNumberFormatter(NumberFormatterSettings<LocalizedNumberFormatter>&& src) U_NOEXCEPT;
|
2042
2357
|
|
2043
2358
|
LocalizedNumberFormatter(const impl::MacroProps ¯os, const Locale &locale);
|
2044
2359
|
|
2360
|
+
LocalizedNumberFormatter(impl::MacroProps &¯os, const Locale &locale);
|
2361
|
+
|
2362
|
+
void lnfMoveHelper(LocalizedNumberFormatter&& src);
|
2363
|
+
|
2045
2364
|
/**
|
2046
|
-
*
|
2047
|
-
* for the first few calls, and compiling a more efficient data structure if called repeatedly.
|
2048
|
-
*
|
2049
|
-
* <p>
|
2050
|
-
* This function is very hot, being called in every call to the number formatting pipeline.
|
2051
|
-
*
|
2052
|
-
* @param results
|
2053
|
-
* The results object. This method takes ownership.
|
2054
|
-
* @return The formatted number result.
|
2365
|
+
* @return true if the compiled formatter is available.
|
2055
2366
|
*/
|
2056
|
-
|
2367
|
+
bool computeCompiled(UErrorCode& status) const;
|
2057
2368
|
|
2058
2369
|
// To give the fluent setters access to this class's constructor:
|
2059
2370
|
friend class NumberFormatterSettings<UnlocalizedNumberFormatter>;
|
@@ -2071,25 +2382,57 @@ class U_I18N_API LocalizedNumberFormatter
|
|
2071
2382
|
*/
|
2072
2383
|
class U_I18N_API FormattedNumber : public UMemory {
|
2073
2384
|
public:
|
2385
|
+
#ifndef U_HIDE_DEPRECATED_API
|
2074
2386
|
/**
|
2075
2387
|
* Returns a UnicodeString representation of the formatted number.
|
2076
2388
|
*
|
2077
2389
|
* @return a UnicodeString containing the localized number.
|
2078
|
-
* @
|
2390
|
+
* @deprecated ICU 62 Use the version of this method with an error code instead.
|
2391
|
+
* This method was never @stable and will be removed in a future release.
|
2392
|
+
* See http://bugs.icu-project.org/trac/ticket/13746
|
2079
2393
|
*/
|
2080
2394
|
UnicodeString toString() const;
|
2395
|
+
#endif /* U_HIDE_DEPRECATED_API */
|
2396
|
+
|
2397
|
+
/**
|
2398
|
+
* Returns a UnicodeString representation of the formatted number.
|
2399
|
+
*
|
2400
|
+
* @param status
|
2401
|
+
* Set if an error occurs while formatting the number to the UnicodeString.
|
2402
|
+
* @return a UnicodeString containing the localized number.
|
2403
|
+
* @draft ICU 62
|
2404
|
+
*/
|
2405
|
+
UnicodeString toString(UErrorCode& status) const;
|
2081
2406
|
|
2407
|
+
#ifndef U_HIDE_DEPRECATED_API
|
2082
2408
|
/**
|
2083
2409
|
* Appends the formatted number to an Appendable.
|
2084
2410
|
*
|
2085
2411
|
* @param appendable
|
2086
2412
|
* The Appendable to which to append the formatted number string.
|
2087
2413
|
* @return The same Appendable, for chaining.
|
2088
|
-
* @
|
2414
|
+
* @deprecated ICU 62 Use the version of this method with an error code instead.
|
2415
|
+
* This method was never @stable and will be removed in a future release.
|
2416
|
+
* See http://bugs.icu-project.org/trac/ticket/13746
|
2089
2417
|
* @see Appendable
|
2090
2418
|
*/
|
2091
2419
|
Appendable &appendTo(Appendable &appendable);
|
2420
|
+
#endif /* U_HIDE_DEPRECATED_API */
|
2092
2421
|
|
2422
|
+
/**
|
2423
|
+
* Appends the formatted number to an Appendable.
|
2424
|
+
*
|
2425
|
+
* @param appendable
|
2426
|
+
* The Appendable to which to append the formatted number string.
|
2427
|
+
* @param status
|
2428
|
+
* Set if an error occurs while formatting the number to the Appendable.
|
2429
|
+
* @return The same Appendable, for chaining.
|
2430
|
+
* @draft ICU 62
|
2431
|
+
* @see Appendable
|
2432
|
+
*/
|
2433
|
+
Appendable &appendTo(Appendable &appendable, UErrorCode& status);
|
2434
|
+
|
2435
|
+
#ifndef U_HIDE_DEPRECATED_API
|
2093
2436
|
/**
|
2094
2437
|
* Determine the start and end indices of the first occurrence of the given <em>field</em> in the output string.
|
2095
2438
|
* This allows you to determine the locations of the integer part, fraction part, and sign.
|
@@ -2106,11 +2449,47 @@ class U_I18N_API FormattedNumber : public UMemory {
|
|
2106
2449
|
* The FieldPosition to populate with the start and end indices of the desired field.
|
2107
2450
|
* @param status
|
2108
2451
|
* Set if an error occurs while populating the FieldPosition.
|
2109
|
-
* @
|
2452
|
+
* @deprecated ICU 62 Use {@link #nextFieldPosition} instead. This method will be removed in a future
|
2453
|
+
* release. See http://bugs.icu-project.org/trac/ticket/13746
|
2110
2454
|
* @see UNumberFormatFields
|
2111
2455
|
*/
|
2112
2456
|
void populateFieldPosition(FieldPosition &fieldPosition, UErrorCode &status);
|
2457
|
+
#endif /* U_HIDE_DEPRECATED_API */
|
2458
|
+
|
2459
|
+
/**
|
2460
|
+
* Determines the start and end indices of the next occurrence of the given <em>field</em> in the
|
2461
|
+
* output string. This allows you to determine the locations of, for example, the integer part,
|
2462
|
+
* fraction part, or symbols.
|
2463
|
+
*
|
2464
|
+
* If a field occurs just once, calling this method will find that occurrence and return it. If a
|
2465
|
+
* field occurs multiple times, this method may be called repeatedly with the following pattern:
|
2466
|
+
*
|
2467
|
+
* <pre>
|
2468
|
+
* FieldPosition fpos(UNUM_GROUPING_SEPARATOR_FIELD);
|
2469
|
+
* while (formattedNumber.nextFieldPosition(fpos, status)) {
|
2470
|
+
* // do something with fpos.
|
2471
|
+
* }
|
2472
|
+
* </pre>
|
2473
|
+
*
|
2474
|
+
* This method is useful if you know which field to query. If you want all available field position
|
2475
|
+
* information, use #getAllFieldPositions().
|
2476
|
+
*
|
2477
|
+
* @param fieldPosition
|
2478
|
+
* Input+output variable. On input, the "field" property determines which field to look
|
2479
|
+
* up, and the "beginIndex" and "endIndex" properties determine where to begin the search.
|
2480
|
+
* On output, the "beginIndex" is set to the beginning of the first occurrence of the
|
2481
|
+
* field with either begin or end indices after the input indices, "endIndex" is set to
|
2482
|
+
* the end of that occurrence of the field (exclusive index). If a field position is not
|
2483
|
+
* found, the method returns FALSE and the FieldPosition may or may not be changed.
|
2484
|
+
* @param status
|
2485
|
+
* Set if an error occurs while populating the FieldPosition.
|
2486
|
+
* @return TRUE if a new occurrence of the field was found; FALSE otherwise.
|
2487
|
+
* @draft ICU 62
|
2488
|
+
* @see UNumberFormatFields
|
2489
|
+
*/
|
2490
|
+
UBool nextFieldPosition(FieldPosition& fieldPosition, UErrorCode& status) const;
|
2113
2491
|
|
2492
|
+
#ifndef U_HIDE_DEPRECATED_API
|
2114
2493
|
/**
|
2115
2494
|
* Export the formatted number to a FieldPositionIterator. This allows you to determine which characters in
|
2116
2495
|
* the output string correspond to which <em>fields</em>, such as the integer part, fraction part, and sign.
|
@@ -2122,10 +2501,67 @@ class U_I18N_API FormattedNumber : public UMemory {
|
|
2122
2501
|
* The FieldPositionIterator to populate with all of the fields present in the formatted number.
|
2123
2502
|
* @param status
|
2124
2503
|
* Set if an error occurs while populating the FieldPositionIterator.
|
2125
|
-
* @
|
2504
|
+
* @deprecated ICU 62 Use {@link #getAllFieldPositions} instead. This method will be removed in a
|
2505
|
+
* future release. See http://bugs.icu-project.org/trac/ticket/13746
|
2126
2506
|
* @see UNumberFormatFields
|
2127
2507
|
*/
|
2128
2508
|
void populateFieldPositionIterator(FieldPositionIterator &iterator, UErrorCode &status);
|
2509
|
+
#endif /* U_HIDE_DEPRECATED_API */
|
2510
|
+
|
2511
|
+
/**
|
2512
|
+
* Export the formatted number to a FieldPositionIterator. This allows you to determine which characters in
|
2513
|
+
* the output string correspond to which <em>fields</em>, such as the integer part, fraction part, and sign.
|
2514
|
+
*
|
2515
|
+
* If information on only one field is needed, use #nextFieldPosition() instead.
|
2516
|
+
*
|
2517
|
+
* @param iterator
|
2518
|
+
* The FieldPositionIterator to populate with all of the fields present in the formatted number.
|
2519
|
+
* @param status
|
2520
|
+
* Set if an error occurs while populating the FieldPositionIterator.
|
2521
|
+
* @draft ICU 62
|
2522
|
+
* @see UNumberFormatFields
|
2523
|
+
*/
|
2524
|
+
void getAllFieldPositions(FieldPositionIterator &iterator, UErrorCode &status) const;
|
2525
|
+
|
2526
|
+
#ifndef U_HIDE_INTERNAL_API
|
2527
|
+
|
2528
|
+
/**
|
2529
|
+
* Gets the raw DecimalQuantity for plural rule selection.
|
2530
|
+
* @internal
|
2531
|
+
*/
|
2532
|
+
void getDecimalQuantity(impl::DecimalQuantity& output, UErrorCode& status) const;
|
2533
|
+
|
2534
|
+
/**
|
2535
|
+
* Populates the mutable builder type FieldPositionIteratorHandler.
|
2536
|
+
* @internal
|
2537
|
+
*/
|
2538
|
+
void getAllFieldPositionsImpl(FieldPositionIteratorHandler& fpih, UErrorCode& status) const;
|
2539
|
+
|
2540
|
+
#endif
|
2541
|
+
|
2542
|
+
/**
|
2543
|
+
* Copying not supported; use move constructor instead.
|
2544
|
+
*/
|
2545
|
+
FormattedNumber(const FormattedNumber&) = delete;
|
2546
|
+
|
2547
|
+
/**
|
2548
|
+
* Copying not supported; use move assignment instead.
|
2549
|
+
*/
|
2550
|
+
FormattedNumber& operator=(const FormattedNumber&) = delete;
|
2551
|
+
|
2552
|
+
/**
|
2553
|
+
* Move constructor:
|
2554
|
+
* Leaves the source FormattedNumber in an undefined state.
|
2555
|
+
* @draft ICU 62
|
2556
|
+
*/
|
2557
|
+
FormattedNumber(FormattedNumber&& src) U_NOEXCEPT;
|
2558
|
+
|
2559
|
+
/**
|
2560
|
+
* Move assignment:
|
2561
|
+
* Leaves the source FormattedNumber in an undefined state.
|
2562
|
+
* @draft ICU 62
|
2563
|
+
*/
|
2564
|
+
FormattedNumber& operator=(FormattedNumber&& src) U_NOEXCEPT;
|
2129
2565
|
|
2130
2566
|
/**
|
2131
2567
|
* Destruct an instance of FormattedNumber, cleaning up any memory it might own.
|
@@ -2134,13 +2570,17 @@ class U_I18N_API FormattedNumber : public UMemory {
|
|
2134
2570
|
~FormattedNumber();
|
2135
2571
|
|
2136
2572
|
private:
|
2137
|
-
// Can't use LocalPointer because
|
2138
|
-
const impl::
|
2573
|
+
// Can't use LocalPointer because UFormattedNumberData is forward-declared
|
2574
|
+
const impl::UFormattedNumberData *fResults;
|
2139
2575
|
|
2140
2576
|
// Error code for the terminal methods
|
2141
2577
|
UErrorCode fErrorCode;
|
2142
2578
|
|
2143
|
-
|
2579
|
+
/**
|
2580
|
+
* Internal constructor from data type. Adopts the data pointer.
|
2581
|
+
* @internal
|
2582
|
+
*/
|
2583
|
+
explicit FormattedNumber(impl::UFormattedNumberData *results)
|
2144
2584
|
: fResults(results), fErrorCode(U_ZERO_ERROR) {};
|
2145
2585
|
|
2146
2586
|
explicit FormattedNumber(UErrorCode errorCode)
|
@@ -2177,9 +2617,21 @@ class U_I18N_API NumberFormatter final {
|
|
2177
2617
|
*/
|
2178
2618
|
static LocalizedNumberFormatter withLocale(const Locale &locale);
|
2179
2619
|
|
2620
|
+
/**
|
2621
|
+
* Call this method at the beginning of a NumberFormatter fluent chain to create an instance based
|
2622
|
+
* on a given number skeleton string.
|
2623
|
+
*
|
2624
|
+
* @param skeleton
|
2625
|
+
* The skeleton string off of which to base this NumberFormatter.
|
2626
|
+
* @param status
|
2627
|
+
* Set to U_NUMBER_SKELETON_SYNTAX_ERROR if the skeleton was invalid.
|
2628
|
+
* @return An UnlocalizedNumberFormatter, to be used for chaining.
|
2629
|
+
* @draft ICU 62
|
2630
|
+
*/
|
2631
|
+
static UnlocalizedNumberFormatter forSkeleton(const UnicodeString& skeleton, UErrorCode& status);
|
2632
|
+
|
2180
2633
|
/**
|
2181
2634
|
* Use factory methods instead of the constructor to create a NumberFormatter.
|
2182
|
-
* @draft ICU 60
|
2183
2635
|
*/
|
2184
2636
|
NumberFormatter() = delete;
|
2185
2637
|
};
|