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.
Files changed (236) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +10 -7
  3. data/lib/2.2/pango.so +0 -0
  4. data/lib/2.3/pango.so +0 -0
  5. data/lib/2.4/pango.so +0 -0
  6. data/lib/2.5/pango.so +0 -0
  7. data/pango.gemspec +2 -0
  8. data/vendor/local/bin/derb.exe +0 -0
  9. data/vendor/local/bin/escapesrc.exe +0 -0
  10. data/vendor/local/bin/fribidi.exe +0 -0
  11. data/vendor/local/bin/genbrk.exe +0 -0
  12. data/vendor/local/bin/genccode.exe +0 -0
  13. data/vendor/local/bin/gencfu.exe +0 -0
  14. data/vendor/local/bin/gencmn.exe +0 -0
  15. data/vendor/local/bin/gencnval.exe +0 -0
  16. data/vendor/local/bin/gendict.exe +0 -0
  17. data/vendor/local/bin/gennorm2.exe +0 -0
  18. data/vendor/local/bin/genrb.exe +0 -0
  19. data/vendor/local/bin/gensprep.exe +0 -0
  20. data/vendor/local/bin/hb-ot-shape-closure.exe +0 -0
  21. data/vendor/local/bin/hb-shape.exe +0 -0
  22. data/vendor/local/bin/hb-subset.exe +0 -0
  23. data/vendor/local/bin/hb-view.exe +0 -0
  24. data/vendor/local/bin/icu-config +6 -6
  25. data/vendor/local/bin/icuinfo.exe +0 -0
  26. data/vendor/local/bin/icupkg.exe +0 -0
  27. data/vendor/local/bin/libfribidi-0.dll +0 -0
  28. data/vendor/local/bin/libgraphene-1.0-0.dll +0 -0
  29. data/vendor/local/bin/libharfbuzz-0.dll +0 -0
  30. data/vendor/local/bin/libharfbuzz-subset-0.dll +0 -0
  31. data/vendor/local/bin/libpango-1.0-0.dll +0 -0
  32. data/vendor/local/bin/libpangocairo-1.0-0.dll +0 -0
  33. data/vendor/local/bin/libpangoft2-1.0-0.dll +0 -0
  34. data/vendor/local/bin/libpangowin32-1.0-0.dll +0 -0
  35. data/vendor/local/bin/makeconv.exe +0 -0
  36. data/vendor/local/{libexec/installed-tests/graphene-1.0/quad.exe → bin/pango-list.exe} +0 -0
  37. data/vendor/local/bin/pango-view.exe +0 -0
  38. data/vendor/local/bin/pkgdata.exe +0 -0
  39. data/vendor/local/bin/uconv.exe +0 -0
  40. data/vendor/local/include/fribidi/fribidi-config.h +2 -2
  41. data/vendor/local/include/graphene-1.0/graphene-macros.h +1 -1
  42. data/vendor/local/include/graphene-1.0/graphene-matrix.h +1 -1
  43. data/vendor/local/include/graphene-1.0/graphene-vec2.h +1 -1
  44. data/vendor/local/include/graphene-1.0/graphene-vec3.h +1 -1
  45. data/vendor/local/include/graphene-1.0/graphene-vec4.h +1 -1
  46. data/vendor/local/include/graphene-1.0/graphene-version.h +2 -2
  47. data/vendor/local/include/harfbuzz/hb-ot-layout.h +13 -0
  48. data/vendor/local/include/harfbuzz/hb-set.h +4 -0
  49. data/vendor/local/include/harfbuzz/hb-subset-plan.hh +1 -1
  50. data/vendor/local/include/harfbuzz/hb-subset-private.hh +1 -0
  51. data/vendor/local/include/harfbuzz/hb-subset.h +3 -0
  52. data/vendor/local/include/harfbuzz/hb-version.h +2 -2
  53. data/vendor/local/include/pango-1.0/pango/pango-features.h +2 -2
  54. data/vendor/local/include/unicode/brkiter.h +1 -1
  55. data/vendor/local/include/unicode/bytestriebuilder.h +1 -1
  56. data/vendor/local/include/unicode/caniter.h +2 -2
  57. data/vendor/local/include/unicode/compactdecimalformat.h +17 -250
  58. data/vendor/local/include/unicode/currunit.h +3 -2
  59. data/vendor/local/include/unicode/dcfmtsym.h +8 -1
  60. data/vendor/local/include/unicode/decimfmt.h +301 -439
  61. data/vendor/local/include/unicode/docmain.h +1 -1
  62. data/vendor/local/include/unicode/edits.h +129 -21
  63. data/vendor/local/include/unicode/fmtable.h +14 -21
  64. data/vendor/local/include/unicode/fpositer.h +0 -8
  65. data/vendor/local/include/unicode/measunit.h +0 -8
  66. data/vendor/local/include/unicode/nounit.h +6 -6
  67. data/vendor/local/include/unicode/numberformatter.h +1005 -553
  68. data/vendor/local/include/unicode/numfmt.h +10 -10
  69. data/vendor/local/include/unicode/platform.h +0 -14
  70. data/vendor/local/include/unicode/plurrule.h +0 -21
  71. data/vendor/local/include/unicode/rbbi.h +9 -15
  72. data/vendor/local/include/unicode/rbnf.h +2 -2
  73. data/vendor/local/include/unicode/scientificnumberformatter.h +0 -5
  74. data/vendor/local/include/unicode/smpdtfmt.h +33 -6
  75. data/vendor/local/include/unicode/timezone.h +2 -0
  76. data/vendor/local/include/unicode/uchar.h +42 -3
  77. data/vendor/local/include/unicode/unistr.h +3 -3
  78. data/vendor/local/include/unicode/unum.h +26 -5
  79. data/vendor/local/include/unicode/unumberformatter.h +717 -0
  80. data/vendor/local/include/unicode/urename.h +13 -0
  81. data/vendor/local/include/unicode/uscript.h +16 -1
  82. data/vendor/local/include/unicode/uspoof.h +24 -1
  83. data/vendor/local/include/unicode/utypes.h +4 -1
  84. data/vendor/local/include/unicode/uvernum.h +5 -5
  85. data/vendor/local/lib/cmake/harfbuzz/harfbuzz-config.cmake +1 -1
  86. data/vendor/local/lib/graphene-1.0/include/graphene-config.h +3 -1
  87. data/vendor/local/lib/icu/{61.1 → 62.1}/Makefile.inc +6 -6
  88. data/vendor/local/lib/icu/{61.1 → 62.1}/pkgdata.inc +3 -3
  89. data/vendor/local/lib/icu/Makefile.inc +6 -6
  90. data/vendor/local/lib/icu/pkgdata.inc +3 -3
  91. data/vendor/local/lib/icudt.dll +0 -0
  92. data/vendor/local/lib/{icudt61.dll → icudt62.dll} +0 -0
  93. data/vendor/local/lib/icuin.dll +0 -0
  94. data/vendor/local/lib/icuin62.dll +0 -0
  95. data/vendor/local/lib/icuio.dll +0 -0
  96. data/vendor/local/lib/{icuio61.dll → icuio62.dll} +0 -0
  97. data/vendor/local/lib/icutest.dll +0 -0
  98. data/vendor/local/lib/{icutest61.dll → icutest62.dll} +0 -0
  99. data/vendor/local/lib/icutu.dll +0 -0
  100. data/vendor/local/lib/{icutu61.dll → icutu62.dll} +0 -0
  101. data/vendor/local/lib/icuuc.dll +0 -0
  102. data/vendor/local/lib/{icuuc61.dll → icuuc62.dll} +0 -0
  103. data/vendor/local/lib/libfribidi.dll.a +0 -0
  104. data/vendor/local/lib/libgraphene-1.0.dll.a +0 -0
  105. data/vendor/local/lib/libharfbuzz-icu.a +0 -0
  106. data/vendor/local/lib/libharfbuzz-icu.la +2 -2
  107. data/vendor/local/lib/libharfbuzz-subset.dll.a +0 -0
  108. data/vendor/local/lib/libharfbuzz-subset.la +2 -2
  109. data/vendor/local/lib/libharfbuzz.dll.a +0 -0
  110. data/vendor/local/lib/libharfbuzz.la +2 -2
  111. data/vendor/local/lib/libicudt.dll.a +0 -0
  112. data/vendor/local/lib/libicuin.dll.a +0 -0
  113. data/vendor/local/lib/libicuio.dll.a +0 -0
  114. data/vendor/local/lib/libicutest.dll.a +0 -0
  115. data/vendor/local/lib/libicutu.dll.a +0 -0
  116. data/vendor/local/lib/libicuuc.dll.a +0 -0
  117. data/vendor/local/lib/libpango-1.0.dll.a +0 -0
  118. data/vendor/local/lib/libpango-1.0.la +2 -2
  119. data/vendor/local/lib/libpangocairo-1.0.dll.a +0 -0
  120. data/vendor/local/lib/libpangocairo-1.0.la +2 -2
  121. data/vendor/local/lib/libpangoft2-1.0.dll.a +0 -0
  122. data/vendor/local/lib/libpangoft2-1.0.la +2 -2
  123. data/vendor/local/lib/libpangowin32-1.0.dll.a +0 -0
  124. data/vendor/local/lib/libpangowin32-1.0.la +2 -2
  125. data/vendor/local/lib/pkgconfig/fribidi.pc +1 -1
  126. data/vendor/local/lib/pkgconfig/graphene-1.0.pc +7 -11
  127. data/vendor/local/lib/pkgconfig/graphene-gobject-1.0.pc +6 -12
  128. data/vendor/local/lib/pkgconfig/harfbuzz-icu.pc +1 -1
  129. data/vendor/local/lib/pkgconfig/harfbuzz-subset.pc +1 -1
  130. data/vendor/local/lib/pkgconfig/harfbuzz.pc +1 -1
  131. data/vendor/local/lib/pkgconfig/icu-i18n.pc +6 -6
  132. data/vendor/local/lib/pkgconfig/icu-io.pc +6 -6
  133. data/vendor/local/lib/pkgconfig/icu-uc.pc +6 -6
  134. data/vendor/local/lib/pkgconfig/pango.pc +3 -2
  135. data/vendor/local/lib/pkgconfig/pangocairo.pc +1 -1
  136. data/vendor/local/lib/pkgconfig/pangoft2.pc +1 -1
  137. data/vendor/local/lib/pkgconfig/pangowin32.pc +2 -2
  138. data/vendor/local/share/gir-1.0/Graphene-1.0.gir +1 -1
  139. data/vendor/local/share/gtk-doc/html/harfbuzz/api-index-full.html +80 -0
  140. data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-blob.html +34 -0
  141. data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-face.html +13 -0
  142. data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-ot-layout.html +20 -0
  143. data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-set.html +83 -28
  144. data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz.devhelp2 +5 -1
  145. data/vendor/local/share/gtk-doc/html/harfbuzz/object-tree.html +1 -0
  146. data/vendor/local/share/gtk-doc/html/harfbuzz/pt02.html +1 -1
  147. data/vendor/local/share/gtk-doc/html/pango/PangoEngineLang.html +2 -2
  148. data/vendor/local/share/gtk-doc/html/pango/PangoEngineShape.html +2 -2
  149. data/vendor/local/share/gtk-doc/html/pango/PangoFcDecoder.html +2 -2
  150. data/vendor/local/share/gtk-doc/html/pango/PangoFcFont.html +2 -2
  151. data/vendor/local/share/gtk-doc/html/pango/PangoFcFontMap.html +2 -2
  152. data/vendor/local/share/gtk-doc/html/pango/PangoMarkupFormat.html +2 -2
  153. data/vendor/local/share/gtk-doc/html/pango/PangoRenderer.html +2 -2
  154. data/vendor/local/share/gtk-doc/html/pango/annotation-glossary.html +2 -2
  155. data/vendor/local/share/gtk-doc/html/pango/api-index-full.html +2 -2
  156. data/vendor/local/share/gtk-doc/html/pango/index.html +3 -3
  157. data/vendor/local/share/gtk-doc/html/pango/lowlevel.html +2 -2
  158. data/vendor/local/share/gtk-doc/html/pango/pango-Bidirectional-Text.html +2 -2
  159. data/vendor/local/share/gtk-doc/html/pango/pango-Cairo-Rendering.html +2 -2
  160. data/vendor/local/share/gtk-doc/html/pango/pango-CoreText-Fonts.html +2 -2
  161. data/vendor/local/share/gtk-doc/html/pango/pango-Coverage-Maps.html +2 -2
  162. data/vendor/local/share/gtk-doc/html/pango/pango-Engines.html +2 -2
  163. data/vendor/local/share/gtk-doc/html/pango/pango-Fonts.html +2 -2
  164. data/vendor/local/share/gtk-doc/html/pango/pango-FreeType-Fonts-and-Rendering.html +2 -2
  165. data/vendor/local/share/gtk-doc/html/pango/pango-Glyph-Storage.html +2 -2
  166. data/vendor/local/share/gtk-doc/html/pango/pango-Layout-Objects.html +2 -2
  167. data/vendor/local/share/gtk-doc/html/pango/pango-Miscellaneous-Utilities.html +2 -2
  168. data/vendor/local/share/gtk-doc/html/pango/pango-Modules.html +2 -2
  169. data/vendor/local/share/gtk-doc/html/pango/pango-OpenType-Font-Handling.html +2 -2
  170. data/vendor/local/share/gtk-doc/html/pango/pango-Scripts-and-Languages.html +2 -2
  171. data/vendor/local/share/gtk-doc/html/pango/pango-Tab-Stops.html +2 -2
  172. data/vendor/local/share/gtk-doc/html/pango/pango-Text-Attributes.html +2 -2
  173. data/vendor/local/share/gtk-doc/html/pango/pango-Text-Processing.html +2 -2
  174. data/vendor/local/share/gtk-doc/html/pango/pango-Version-Checking.html +4 -4
  175. data/vendor/local/share/gtk-doc/html/pango/pango-Vertical-Text.html +2 -2
  176. data/vendor/local/share/gtk-doc/html/pango/pango-Win32-Fonts-and-Rendering.html +2 -2
  177. data/vendor/local/share/gtk-doc/html/pango/pango-Xft-Fonts-and-Rendering.html +2 -2
  178. data/vendor/local/share/gtk-doc/html/pango/pango-hierarchy.html +2 -2
  179. data/vendor/local/share/gtk-doc/html/pango/pango.html +2 -2
  180. data/vendor/local/share/gtk-doc/html/pango/rendering.html +2 -2
  181. data/vendor/local/share/gtk-doc/html/pango/style.css +4 -0
  182. data/vendor/local/share/icu/{61.1 → 62.1}/LICENSE +0 -0
  183. data/vendor/local/share/icu/{61.1 → 62.1}/config/mh-mingw64 +0 -0
  184. data/vendor/local/share/icu/{61.1 → 62.1}/install-sh +0 -0
  185. data/vendor/local/share/icu/{61.1 → 62.1}/mkinstalldirs +0 -0
  186. data/vendor/local/share/man/man1/derb.1 +2 -2
  187. data/vendor/local/share/man/man1/genbrk.1 +2 -2
  188. data/vendor/local/share/man/man1/gencfu.1 +1 -1
  189. data/vendor/local/share/man/man1/gencnval.1 +3 -3
  190. data/vendor/local/share/man/man1/gendict.1 +2 -2
  191. data/vendor/local/share/man/man1/genrb.1 +3 -3
  192. data/vendor/local/share/man/man1/icu-config.1 +2 -2
  193. data/vendor/local/share/man/man1/makeconv.1 +3 -3
  194. data/vendor/local/share/man/man1/pkgdata.1 +2 -2
  195. data/vendor/local/share/man/man1/uconv.1 +2 -2
  196. data/vendor/local/share/man/man8/genccode.8 +2 -2
  197. data/vendor/local/share/man/man8/gencmn.8 +3 -3
  198. data/vendor/local/share/man/man8/gensprep.8 +3 -3
  199. data/vendor/local/share/man/man8/icupkg.8 +1 -1
  200. metadata +20 -54
  201. data/vendor/local/lib/icuin61.dll +0 -0
  202. data/vendor/local/libexec/installed-tests/graphene-1.0/box.exe +0 -0
  203. data/vendor/local/libexec/installed-tests/graphene-1.0/euler.exe +0 -0
  204. data/vendor/local/libexec/installed-tests/graphene-1.0/frustum.exe +0 -0
  205. data/vendor/local/libexec/installed-tests/graphene-1.0/matrix.exe +0 -0
  206. data/vendor/local/libexec/installed-tests/graphene-1.0/plane.exe +0 -0
  207. data/vendor/local/libexec/installed-tests/graphene-1.0/point.exe +0 -0
  208. data/vendor/local/libexec/installed-tests/graphene-1.0/point3d.exe +0 -0
  209. data/vendor/local/libexec/installed-tests/graphene-1.0/quaternion.exe +0 -0
  210. data/vendor/local/libexec/installed-tests/graphene-1.0/ray.exe +0 -0
  211. data/vendor/local/libexec/installed-tests/graphene-1.0/rect.exe +0 -0
  212. data/vendor/local/libexec/installed-tests/graphene-1.0/simd.exe +0 -0
  213. data/vendor/local/libexec/installed-tests/graphene-1.0/size.exe +0 -0
  214. data/vendor/local/libexec/installed-tests/graphene-1.0/sphere.exe +0 -0
  215. data/vendor/local/libexec/installed-tests/graphene-1.0/triangle.exe +0 -0
  216. data/vendor/local/libexec/installed-tests/graphene-1.0/vec2.exe +0 -0
  217. data/vendor/local/libexec/installed-tests/graphene-1.0/vec3.exe +0 -0
  218. data/vendor/local/libexec/installed-tests/graphene-1.0/vec4.exe +0 -0
  219. data/vendor/local/share/installed-tests/graphene-1.0/box.test +0 -3
  220. data/vendor/local/share/installed-tests/graphene-1.0/euler.test +0 -3
  221. data/vendor/local/share/installed-tests/graphene-1.0/frustum.test +0 -3
  222. data/vendor/local/share/installed-tests/graphene-1.0/matrix.test +0 -3
  223. data/vendor/local/share/installed-tests/graphene-1.0/plane.test +0 -3
  224. data/vendor/local/share/installed-tests/graphene-1.0/point.test +0 -3
  225. data/vendor/local/share/installed-tests/graphene-1.0/point3d.test +0 -3
  226. data/vendor/local/share/installed-tests/graphene-1.0/quad.test +0 -3
  227. data/vendor/local/share/installed-tests/graphene-1.0/quaternion.test +0 -3
  228. data/vendor/local/share/installed-tests/graphene-1.0/ray.test +0 -3
  229. data/vendor/local/share/installed-tests/graphene-1.0/rect.test +0 -3
  230. data/vendor/local/share/installed-tests/graphene-1.0/simd.test +0 -3
  231. data/vendor/local/share/installed-tests/graphene-1.0/size.test +0 -3
  232. data/vendor/local/share/installed-tests/graphene-1.0/sphere.test +0 -3
  233. data/vendor/local/share/installed-tests/graphene-1.0/triangle.test +0 -3
  234. data/vendor/local/share/installed-tests/graphene-1.0/vec2.test +0 -3
  235. data/vendor/local/share/installed-tests/graphene-1.0/vec3.test +0 -3
  236. data/vendor/local/share/installed-tests/graphene-1.0/vec4.test +0 -3
@@ -44,8 +44,9 @@ class U_I18N_API CurrencyUnit: public MeasureUnit {
44
44
 
45
45
  /**
46
46
  * Construct an object with the given ISO currency code.
47
- * @param isoCode the 3-letter ISO 4217 currency code; must not be
48
- * NULL and must have length 3
47
+ * @param isoCode the 3-letter ISO 4217 currency code; must have
48
+ * length 3 and need not be NUL-terminated. If NULL, the currency
49
+ * is initialized to the unknown currency XXX.
49
50
  * @param ec input-output error code. If the isoCode is invalid,
50
51
  * then this will be set to a failing value.
51
52
  * @stable ICU 3.0
@@ -406,9 +406,12 @@ public:
406
406
  * returning a const reference to one of the symbol strings.
407
407
  * The returned reference becomes invalid when the symbol is changed
408
408
  * or when the DecimalFormatSymbols are destroyed.
409
- * ### TODO markus 2002oct11: Consider proposing getConstSymbol() to be really public.
410
409
  * Note: moved #ifndef U_HIDE_INTERNAL_API after this, since this is needed for inline in DecimalFormat
411
410
  *
411
+ * This is not currently stable API, but if you think it should be stable,
412
+ * post a comment on the following ticket and the ICU team will take a look:
413
+ * http://bugs.icu-project.org/trac/ticket/13580
414
+ *
412
415
  * @param symbol Constant to indicate a number format symbol.
413
416
  * @return the format symbol by the param 'symbol'
414
417
  * @internal
@@ -422,6 +425,10 @@ public:
422
425
  * to accessing the symbol from getConstSymbol with the corresponding
423
426
  * key, such as kZeroDigitSymbol or kOneDigitSymbol.
424
427
  *
428
+ * This is not currently stable API, but if you think it should be stable,
429
+ * post a comment on the following ticket and the ICU team will take a look:
430
+ * http://bugs.icu-project.org/trac/ticket/13580
431
+ *
425
432
  * @param digit The digit, an integer between 0 and 9 inclusive.
426
433
  * If outside the range 0 to 9, the zero digit is returned.
427
434
  * @return the format symbol for the given digit.
@@ -43,28 +43,25 @@
43
43
  #include "unicode/curramt.h"
44
44
  #include "unicode/enumset.h"
45
45
 
46
- #ifndef U_HIDE_INTERNAL_API
47
- /**
48
- * \def UNUM_DECIMALFORMAT_INTERNAL_SIZE
49
- * @internal
50
- */
51
- #if UCONFIG_FORMAT_FASTPATHS_49
52
- #define UNUM_DECIMALFORMAT_INTERNAL_SIZE 16
53
- #endif
54
- #endif /* U_HIDE_INTERNAL_API */
55
-
56
46
  U_NAMESPACE_BEGIN
57
47
 
58
- class DigitList;
59
48
  class CurrencyPluralInfo;
60
- class Hashtable;
61
- class UnicodeSet;
62
- class FieldPositionHandler;
63
- class DecimalFormatStaticSets;
64
- class FixedDecimal;
65
- class DecimalFormatImpl;
66
- class PluralRules;
67
- class VisibleDigitsWithExponent;
49
+ class CompactDecimalFormat;
50
+
51
+ namespace number {
52
+ class LocalizedNumberFormatter;
53
+ class FormattedNumber;
54
+ namespace impl {
55
+ class DecimalQuantity;
56
+ struct DecimalFormatFields;
57
+ }
58
+ }
59
+
60
+ namespace numparse {
61
+ namespace impl {
62
+ class NumberParserImpl;
63
+ }
64
+ }
68
65
 
69
66
  // explicit template instantiation. see digitlst.h
70
67
  // (When building DLLs for Windows this is required.)
@@ -672,17 +669,14 @@ template class U_I18N_API EnumSet<UNumberFormatAttribute,
672
669
  * subclasses, such code will not necessarily work and will not be
673
670
  * guaranteed to work stably from release to release.
674
671
  */
675
- class U_I18N_API DecimalFormat: public NumberFormat {
676
- public:
672
+ class U_I18N_API DecimalFormat : public NumberFormat {
673
+ public:
677
674
  /**
678
675
  * Pad position.
679
676
  * @stable ICU 2.4
680
677
  */
681
678
  enum EPadPosition {
682
- kPadBeforePrefix,
683
- kPadAfterPrefix,
684
- kPadBeforeSuffix,
685
- kPadAfterSuffix
679
+ kPadBeforePrefix, kPadAfterPrefix, kPadBeforeSuffix, kPadAfterSuffix
686
680
  };
687
681
 
688
682
  /**
@@ -720,8 +714,7 @@ public:
720
714
  * pattern is invalid this will be set to a failure code.
721
715
  * @stable ICU 2.0
722
716
  */
723
- DecimalFormat(const UnicodeString& pattern,
724
- UErrorCode& status);
717
+ DecimalFormat(const UnicodeString& pattern, UErrorCode& status);
725
718
 
726
719
  /**
727
720
  * Create a DecimalFormat from the given pattern and symbols.
@@ -744,11 +737,10 @@ public:
744
737
  * pattern is invalid this will be set to a failure code.
745
738
  * @stable ICU 2.0
746
739
  */
747
- DecimalFormat( const UnicodeString& pattern,
748
- DecimalFormatSymbols* symbolsToAdopt,
749
- UErrorCode& status);
740
+ DecimalFormat(const UnicodeString& pattern, DecimalFormatSymbols* symbolsToAdopt, UErrorCode& status);
750
741
 
751
742
  #ifndef U_HIDE_INTERNAL_API
743
+
752
744
  /**
753
745
  * This API is for ICU use only.
754
746
  * Create a DecimalFormat from the given pattern, symbols, and style.
@@ -761,20 +753,29 @@ public:
761
753
  * pattern is invalid this will be set to a failure code.
762
754
  * @internal
763
755
  */
764
- DecimalFormat( const UnicodeString& pattern,
765
- DecimalFormatSymbols* symbolsToAdopt,
766
- UNumberFormatStyle style,
767
- UErrorCode& status);
756
+ DecimalFormat(const UnicodeString& pattern, DecimalFormatSymbols* symbolsToAdopt,
757
+ UNumberFormatStyle style, UErrorCode& status);
768
758
 
769
759
  #if UCONFIG_HAVE_PARSEALLINPUT
760
+
770
761
  /**
771
762
  * @internal
772
763
  */
773
764
  void setParseAllInput(UNumberFormatAttributeValue value);
765
+
774
766
  #endif
775
767
 
776
768
  #endif /* U_HIDE_INTERNAL_API */
777
769
 
770
+ private:
771
+
772
+ /**
773
+ * Internal constructor for DecimalFormat; sets up internal fields. All public constructors should
774
+ * call this constructor.
775
+ */
776
+ DecimalFormat(const DecimalFormatSymbols* symbolsToAdopt, UErrorCode& status);
777
+
778
+ public:
778
779
 
779
780
  /**
780
781
  * Set an integer attribute on this DecimalFormat.
@@ -786,9 +787,7 @@ public:
786
787
  * @return *this - for chaining (example: format.setAttribute(...).setAttribute(...) )
787
788
  * @stable ICU 51
788
789
  */
789
- virtual DecimalFormat& setAttribute( UNumberFormatAttribute attr,
790
- int32_t newvalue,
791
- UErrorCode &status);
790
+ virtual DecimalFormat& setAttribute(UNumberFormatAttribute attr, int32_t newValue, UErrorCode& status);
792
791
 
793
792
  /**
794
793
  * Get an integer
@@ -799,8 +798,7 @@ public:
799
798
  * @return the attribute value. Undefined if there is an error.
800
799
  * @stable ICU 51
801
800
  */
802
- virtual int32_t getAttribute( UNumberFormatAttribute attr,
803
- UErrorCode &status) const;
801
+ virtual int32_t getAttribute(UNumberFormatAttribute attr, UErrorCode& status) const;
804
802
 
805
803
 
806
804
  /**
@@ -809,7 +807,7 @@ public:
809
807
  * @see getGroupingUsed
810
808
  * @stable ICU 53
811
809
  */
812
- virtual void setGroupingUsed(UBool newValue);
810
+ void setGroupingUsed(UBool newValue) U_OVERRIDE;
813
811
 
814
812
  /**
815
813
  * Sets whether or not numbers should be parsed as integers only.
@@ -818,18 +816,16 @@ public:
818
816
  * @see isParseIntegerOnly
819
817
  * @stable ICU 53
820
818
  */
821
- virtual void setParseIntegerOnly(UBool value);
819
+ void setParseIntegerOnly(UBool value) U_OVERRIDE;
822
820
 
823
821
  /**
824
- * Set a particular UDisplayContext value in the formatter, such as
825
- * UDISPCTX_CAPITALIZATION_FOR_STANDALONE.
826
- * @param value The UDisplayContext value to set.
827
- * @param status Input/output status. If at entry this indicates a failure
828
- * status, the function will do nothing; otherwise this will be
829
- * updated with any new status from the function.
830
- * @stable ICU 53
822
+ * Sets whether lenient parsing should be enabled (it is off by default).
823
+ *
824
+ * @param enable \c TRUE if lenient parsing should be used,
825
+ * \c FALSE otherwise.
826
+ * @stable ICU 4.8
831
827
  */
832
- virtual void setContext(UDisplayContext value, UErrorCode& status);
828
+ void setLenient(UBool enable) U_OVERRIDE;
833
829
 
834
830
  /**
835
831
  * Create a DecimalFormat from the given pattern and symbols.
@@ -853,10 +849,9 @@ public:
853
849
  * pattern is invalid this will be set to a failure code.
854
850
  * @stable ICU 2.0
855
851
  */
856
- DecimalFormat( const UnicodeString& pattern,
857
- DecimalFormatSymbols* symbolsToAdopt,
858
- UParseError& parseError,
859
- UErrorCode& status);
852
+ DecimalFormat(const UnicodeString& pattern, DecimalFormatSymbols* symbolsToAdopt,
853
+ UParseError& parseError, UErrorCode& status);
854
+
860
855
  /**
861
856
  * Create a DecimalFormat from the given pattern and symbols.
862
857
  * Use this constructor when you need to completely customize the
@@ -877,9 +872,7 @@ public:
877
872
  * pattern is invalid this will be set to a failure code.
878
873
  * @stable ICU 2.0
879
874
  */
880
- DecimalFormat( const UnicodeString& pattern,
881
- const DecimalFormatSymbols& symbols,
882
- UErrorCode& status);
875
+ DecimalFormat(const UnicodeString& pattern, const DecimalFormatSymbols& symbols, UErrorCode& status);
883
876
 
884
877
  /**
885
878
  * Copy constructor.
@@ -901,7 +894,7 @@ public:
901
894
  * Destructor.
902
895
  * @stable ICU 2.0
903
896
  */
904
- virtual ~DecimalFormat();
897
+ ~DecimalFormat() U_OVERRIDE;
905
898
 
906
899
  /**
907
900
  * Clone this Format object polymorphically. The caller owns the
@@ -910,7 +903,7 @@ public:
910
903
  * @return a polymorphic copy of this DecimalFormat.
911
904
  * @stable ICU 2.0
912
905
  */
913
- virtual Format* clone(void) const;
906
+ Format* clone(void) const U_OVERRIDE;
914
907
 
915
908
  /**
916
909
  * Return true if the given Format objects are semantically equal.
@@ -920,7 +913,7 @@ public:
920
913
  * @return true if the given Format objects are semantically equal.
921
914
  * @stable ICU 2.0
922
915
  */
923
- virtual UBool operator==(const Format& other) const;
916
+ UBool operator==(const Format& other) const U_OVERRIDE;
924
917
 
925
918
 
926
919
  using NumberFormat::format;
@@ -936,11 +929,9 @@ public:
936
929
  * @return Reference to 'appendTo' parameter.
937
930
  * @stable ICU 2.0
938
931
  */
939
- virtual UnicodeString& format(double number,
940
- UnicodeString& appendTo,
941
- FieldPosition& pos) const;
942
-
932
+ UnicodeString& format(double number, UnicodeString& appendTo, FieldPosition& pos) const U_OVERRIDE;
943
933
 
934
+ #ifndef U_HIDE_INTERNAL_API
944
935
  /**
945
936
  * Format a double or long number using base-10 representation.
946
937
  *
@@ -953,10 +944,9 @@ public:
953
944
  * @return Reference to 'appendTo' parameter.
954
945
  * @internal
955
946
  */
956
- virtual UnicodeString& format(double number,
957
- UnicodeString& appendTo,
958
- FieldPosition& pos,
959
- UErrorCode &status) const;
947
+ UnicodeString& format(double number, UnicodeString& appendTo, FieldPosition& pos,
948
+ UErrorCode& status) const U_OVERRIDE;
949
+ #endif /* U_HIDE_INTERNAL_API */
960
950
 
961
951
  /**
962
952
  * Format a double or long number using base-10 representation.
@@ -971,10 +961,8 @@ public:
971
961
  * @return Reference to 'appendTo' parameter.
972
962
  * @stable ICU 4.4
973
963
  */
974
- virtual UnicodeString& format(double number,
975
- UnicodeString& appendTo,
976
- FieldPositionIterator* posIter,
977
- UErrorCode& status) const;
964
+ UnicodeString& format(double number, UnicodeString& appendTo, FieldPositionIterator* posIter,
965
+ UErrorCode& status) const U_OVERRIDE;
978
966
 
979
967
  /**
980
968
  * Format a long number using base-10 representation.
@@ -987,10 +975,9 @@ public:
987
975
  * @return Reference to 'appendTo' parameter.
988
976
  * @stable ICU 2.0
989
977
  */
990
- virtual UnicodeString& format(int32_t number,
991
- UnicodeString& appendTo,
992
- FieldPosition& pos) const;
978
+ UnicodeString& format(int32_t number, UnicodeString& appendTo, FieldPosition& pos) const U_OVERRIDE;
993
979
 
980
+ #ifndef U_HIDE_INTERNAL_API
994
981
  /**
995
982
  * Format a long number using base-10 representation.
996
983
  *
@@ -1002,10 +989,9 @@ public:
1002
989
  * @return Reference to 'appendTo' parameter.
1003
990
  * @internal
1004
991
  */
1005
- virtual UnicodeString& format(int32_t number,
1006
- UnicodeString& appendTo,
1007
- FieldPosition& pos,
1008
- UErrorCode &status) const;
992
+ UnicodeString& format(int32_t number, UnicodeString& appendTo, FieldPosition& pos,
993
+ UErrorCode& status) const U_OVERRIDE;
994
+ #endif /* U_HIDE_INTERNAL_API */
1009
995
 
1010
996
  /**
1011
997
  * Format a long number using base-10 representation.
@@ -1020,10 +1006,8 @@ public:
1020
1006
  * @return Reference to 'appendTo' parameter.
1021
1007
  * @stable ICU 4.4
1022
1008
  */
1023
- virtual UnicodeString& format(int32_t number,
1024
- UnicodeString& appendTo,
1025
- FieldPositionIterator* posIter,
1026
- UErrorCode& status) const;
1009
+ UnicodeString& format(int32_t number, UnicodeString& appendTo, FieldPositionIterator* posIter,
1010
+ UErrorCode& status) const U_OVERRIDE;
1027
1011
 
1028
1012
  /**
1029
1013
  * Format an int64 number using base-10 representation.
@@ -1036,10 +1020,9 @@ public:
1036
1020
  * @return Reference to 'appendTo' parameter.
1037
1021
  * @stable ICU 2.8
1038
1022
  */
1039
- virtual UnicodeString& format(int64_t number,
1040
- UnicodeString& appendTo,
1041
- FieldPosition& pos) const;
1023
+ UnicodeString& format(int64_t number, UnicodeString& appendTo, FieldPosition& pos) const U_OVERRIDE;
1042
1024
 
1025
+ #ifndef U_HIDE_INTERNAL_API
1043
1026
  /**
1044
1027
  * Format an int64 number using base-10 representation.
1045
1028
  *
@@ -1051,10 +1034,9 @@ public:
1051
1034
  * @return Reference to 'appendTo' parameter.
1052
1035
  * @internal
1053
1036
  */
1054
- virtual UnicodeString& format(int64_t number,
1055
- UnicodeString& appendTo,
1056
- FieldPosition& pos,
1057
- UErrorCode &status) const;
1037
+ UnicodeString& format(int64_t number, UnicodeString& appendTo, FieldPosition& pos,
1038
+ UErrorCode& status) const U_OVERRIDE;
1039
+ #endif /* U_HIDE_INTERNAL_API */
1058
1040
 
1059
1041
  /**
1060
1042
  * Format an int64 number using base-10 representation.
@@ -1069,10 +1051,8 @@ public:
1069
1051
  * @return Reference to 'appendTo' parameter.
1070
1052
  * @stable ICU 4.4
1071
1053
  */
1072
- virtual UnicodeString& format(int64_t number,
1073
- UnicodeString& appendTo,
1074
- FieldPositionIterator* posIter,
1075
- UErrorCode& status) const;
1054
+ UnicodeString& format(int64_t number, UnicodeString& appendTo, FieldPositionIterator* posIter,
1055
+ UErrorCode& status) const U_OVERRIDE;
1076
1056
 
1077
1057
  /**
1078
1058
  * Format a decimal number.
@@ -1090,19 +1070,18 @@ public:
1090
1070
  * @return Reference to 'appendTo' parameter.
1091
1071
  * @stable ICU 4.4
1092
1072
  */
1093
- virtual UnicodeString& format(StringPiece number,
1094
- UnicodeString& appendTo,
1095
- FieldPositionIterator* posIter,
1096
- UErrorCode& status) const;
1073
+ UnicodeString& format(StringPiece number, UnicodeString& appendTo, FieldPositionIterator* posIter,
1074
+ UErrorCode& status) const U_OVERRIDE;
1097
1075
 
1076
+ #ifndef U_HIDE_INTERNAL_API
1098
1077
 
1099
1078
  /**
1100
1079
  * Format a decimal number.
1101
- * The number is a DigitList wrapper onto a floating point decimal number.
1080
+ * The number is a DecimalQuantity wrapper onto a floating point decimal number.
1102
1081
  * The default implementation in NumberFormat converts the decimal number
1103
1082
  * to a double and formats that.
1104
1083
  *
1105
- * @param number The number, a DigitList format Decimal Floating Point.
1084
+ * @param number The number, a DecimalQuantity format Decimal Floating Point.
1106
1085
  * @param appendTo Output parameter to receive result.
1107
1086
  * Result is appended to existing contents.
1108
1087
  * @param posIter On return, can be used to iterate over positions
@@ -1111,14 +1090,16 @@ public:
1111
1090
  * @return Reference to 'appendTo' parameter.
1112
1091
  * @internal
1113
1092
  */
1114
- virtual UnicodeString& format(const DigitList &number,
1115
- UnicodeString& appendTo,
1116
- FieldPositionIterator* posIter,
1117
- UErrorCode& status) const;
1093
+ UnicodeString& format(const number::impl::DecimalQuantity& number, UnicodeString& appendTo,
1094
+ FieldPositionIterator* posIter, UErrorCode& status) const U_OVERRIDE;
1118
1095
 
1119
1096
  /**
1120
1097
  * Format a decimal number.
1121
- * @param number The number
1098
+ * The number is a DecimalQuantity wrapper onto a floating point decimal number.
1099
+ * The default implementation in NumberFormat converts the decimal number
1100
+ * to a double and formats that.
1101
+ *
1102
+ * @param number The number, a DecimalQuantity format Decimal Floating Point.
1122
1103
  * @param appendTo Output parameter to receive result.
1123
1104
  * Result is appended to existing contents.
1124
1105
  * @param pos On input: an alignment field, if desired.
@@ -1127,73 +1108,34 @@ public:
1127
1108
  * @return Reference to 'appendTo' parameter.
1128
1109
  * @internal
1129
1110
  */
1130
- virtual UnicodeString& format(
1131
- const VisibleDigitsWithExponent &number,
1132
- UnicodeString& appendTo,
1133
- FieldPosition& pos,
1134
- UErrorCode& status) const;
1111
+ UnicodeString& format(const number::impl::DecimalQuantity& number, UnicodeString& appendTo,
1112
+ FieldPosition& pos, UErrorCode& status) const U_OVERRIDE;
1135
1113
 
1136
- /**
1137
- * Format a decimal number.
1138
- * @param number The number
1139
- * @param appendTo Output parameter to receive result.
1140
- * Result is appended to existing contents.
1141
- * @param posIter On return, can be used to iterate over positions
1142
- * of fields generated by this format call.
1143
- * @param status Output param filled with success/failure status.
1144
- * @return Reference to 'appendTo' parameter.
1145
- * @internal
1146
- */
1147
- virtual UnicodeString& format(
1148
- const VisibleDigitsWithExponent &number,
1149
- UnicodeString& appendTo,
1150
- FieldPositionIterator* posIter,
1151
- UErrorCode& status) const;
1114
+ #endif // U_HIDE_INTERNAL_API
1115
+
1116
+ using NumberFormat::parse;
1152
1117
 
1153
1118
  /**
1154
- * Format a decimal number.
1155
- * The number is a DigitList wrapper onto a floating point decimal number.
1156
- * The default implementation in NumberFormat converts the decimal number
1157
- * to a double and formats that.
1119
+ * Parse the given string using this object's choices. The method
1120
+ * does string comparisons to try to find an optimal match.
1121
+ * If no object can be parsed, index is unchanged, and NULL is
1122
+ * returned. The result is returned as the most parsimonious
1123
+ * type of Formattable that will accomodate all of the
1124
+ * necessary precision. For example, if the result is exactly 12,
1125
+ * it will be returned as a long. However, if it is 1.5, it will
1126
+ * be returned as a double.
1158
1127
  *
1159
- * @param number The number, a DigitList format Decimal Floating Point.
1160
- * @param appendTo Output parameter to receive result.
1161
- * Result is appended to existing contents.
1162
- * @param pos On input: an alignment field, if desired.
1163
- * On output: the offsets of the alignment field.
1164
- * @param status Output param filled with success/failure status.
1165
- * @return Reference to 'appendTo' parameter.
1166
- * @internal
1128
+ * @param text The text to be parsed.
1129
+ * @param result Formattable to be set to the parse result.
1130
+ * If parse fails, return contents are undefined.
1131
+ * @param parsePosition The position to start parsing at on input.
1132
+ * On output, moved to after the last successfully
1133
+ * parse character. On parse failure, does not change.
1134
+ * @see Formattable
1135
+ * @stable ICU 2.0
1167
1136
  */
1168
- virtual UnicodeString& format(const DigitList &number,
1169
- UnicodeString& appendTo,
1170
- FieldPosition& pos,
1171
- UErrorCode& status) const;
1172
-
1173
- using NumberFormat::parse;
1174
-
1175
- /**
1176
- * Parse the given string using this object's choices. The method
1177
- * does string comparisons to try to find an optimal match.
1178
- * If no object can be parsed, index is unchanged, and NULL is
1179
- * returned. The result is returned as the most parsimonious
1180
- * type of Formattable that will accomodate all of the
1181
- * necessary precision. For example, if the result is exactly 12,
1182
- * it will be returned as a long. However, if it is 1.5, it will
1183
- * be returned as a double.
1184
- *
1185
- * @param text The text to be parsed.
1186
- * @param result Formattable to be set to the parse result.
1187
- * If parse fails, return contents are undefined.
1188
- * @param parsePosition The position to start parsing at on input.
1189
- * On output, moved to after the last successfully
1190
- * parse character. On parse failure, does not change.
1191
- * @see Formattable
1192
- * @stable ICU 2.0
1193
- */
1194
- virtual void parse(const UnicodeString& text,
1195
- Formattable& result,
1196
- ParsePosition& parsePosition) const;
1137
+ void parse(const UnicodeString& text, Formattable& result,
1138
+ ParsePosition& parsePosition) const U_OVERRIDE;
1197
1139
 
1198
1140
  /**
1199
1141
  * Parses text from the given string as a currency amount. Unlike
@@ -1214,8 +1156,7 @@ public:
1214
1156
  * the parsed currency; if parse fails, this is NULL.
1215
1157
  * @stable ICU 49
1216
1158
  */
1217
- virtual CurrencyAmount* parseCurrency(const UnicodeString& text,
1218
- ParsePosition& pos) const;
1159
+ CurrencyAmount* parseCurrency(const UnicodeString& text, ParsePosition& pos) const U_OVERRIDE;
1219
1160
 
1220
1161
  /**
1221
1162
  * Returns the decimal format symbols, which is generally not changed
@@ -1344,12 +1285,29 @@ public:
1344
1285
  */
1345
1286
  virtual void setNegativeSuffix(const UnicodeString& newValue);
1346
1287
 
1288
+ #ifndef U_HIDE_INTERNAL_API
1289
+ /**
1290
+ * Whether to show the plus sign on positive (non-negative) numbers; for example, "+12"
1291
+ * @internal Technical Preview
1292
+ */
1293
+ UBool isSignAlwaysShown() const;
1294
+ #endif /* U_HIDE_INTERNAL_API */
1295
+
1296
+ /**
1297
+ * Set whether to show the plus sign on positive (non-negative) numbers; for example, "+12"
1298
+ * @param value The new setting for whether to show plus sign on positive numbers
1299
+ * @internal Technical Preview
1300
+ */
1301
+ virtual void setSignAlwaysShown(UBool value);
1302
+
1347
1303
  /**
1348
1304
  * Get the multiplier for use in percent, permill, etc.
1349
1305
  * For a percentage, set the suffixes to have "%" and the multiplier to be 100.
1350
1306
  * (For Arabic, use arabic percent symbol).
1351
1307
  * For a permill, set the suffixes to have "\\u2031" and the multiplier to be 1000.
1352
1308
  *
1309
+ * The number may also be multiplied by a power of ten; see getMultiplierScale().
1310
+ *
1353
1311
  * @return the multiplier for use in percent, permill, etc.
1354
1312
  * Examples: with 100, 1.23 -> "123", and "123" -> 1.23
1355
1313
  * @stable ICU 2.0
@@ -1362,12 +1320,52 @@ public:
1362
1320
  * (For Arabic, use arabic percent symbol).
1363
1321
  * For a permill, set the suffixes to have "\\u2031" and the multiplier to be 1000.
1364
1322
  *
1323
+ * This method only supports integer multipliers. To multiply by a non-integer, pair this
1324
+ * method with setMultiplierScale().
1325
+ *
1365
1326
  * @param newValue the new value of the multiplier for use in percent, permill, etc.
1366
1327
  * Examples: with 100, 1.23 -> "123", and "123" -> 1.23
1367
1328
  * @stable ICU 2.0
1368
1329
  */
1369
1330
  virtual void setMultiplier(int32_t newValue);
1370
1331
 
1332
+ #ifndef U_HIDE_DRAFT_API
1333
+ /**
1334
+ * Gets the power of ten by which number should be multiplied before formatting, which
1335
+ * can be combined with setMultiplier() to multiply by any arbitrary decimal value.
1336
+ *
1337
+ * A multiplier scale of 2 corresponds to multiplication by 100, and a multiplier scale
1338
+ * of -2 corresponds to multiplication by 0.01.
1339
+ *
1340
+ * This method is analogous to UNUM_SCALE in getAttribute.
1341
+ *
1342
+ * @return the current value of the power-of-ten multiplier.
1343
+ * @draft ICU 62
1344
+ */
1345
+ int32_t getMultiplierScale(void) const;
1346
+ #endif /* U_HIDE_DRAFT_API */
1347
+
1348
+ /**
1349
+ * Sets a power of ten by which number should be multiplied before formatting, which
1350
+ * can be combined with setMultiplier() to multiply by any arbitrary decimal value.
1351
+ *
1352
+ * A multiplier scale of 2 corresponds to multiplication by 100, and a multiplier scale
1353
+ * of -2 corresponds to multiplication by 0.01.
1354
+ *
1355
+ * For example, to multiply numbers by 0.5 before formatting, you can do:
1356
+ *
1357
+ * <pre>
1358
+ * df.setMultiplier(5);
1359
+ * df.setMultiplierScale(-1);
1360
+ * </pre>
1361
+ *
1362
+ * This method is analogous to UNUM_SCALE in setAttribute.
1363
+ *
1364
+ * @param newValue the new value of the power-of-ten multiplier.
1365
+ * @draft ICU 62
1366
+ */
1367
+ virtual void setMultiplierScale(int32_t newValue);
1368
+
1371
1369
  /**
1372
1370
  * Get the rounding increment.
1373
1371
  * @return A positive rounding increment, or 0.0 if a custom rounding
@@ -1400,7 +1398,7 @@ public:
1400
1398
  * @see #setRoundingMode
1401
1399
  * @stable ICU 2.0
1402
1400
  */
1403
- virtual ERoundingMode getRoundingMode(void) const;
1401
+ virtual ERoundingMode getRoundingMode(void) const U_OVERRIDE;
1404
1402
 
1405
1403
  /**
1406
1404
  * Set the rounding mode.
@@ -1410,7 +1408,7 @@ public:
1410
1408
  * @see #getRoundingMode
1411
1409
  * @stable ICU 2.0
1412
1410
  */
1413
- virtual void setRoundingMode(ERoundingMode roundingMode);
1411
+ virtual void setRoundingMode(ERoundingMode roundingMode) U_OVERRIDE;
1414
1412
 
1415
1413
  /**
1416
1414
  * Get the width to which the output of format() is padded.
@@ -1469,7 +1467,7 @@ public:
1469
1467
  * @see #setPadPosition
1470
1468
  * @stable ICU 2.0
1471
1469
  */
1472
- virtual void setPadCharacter(const UnicodeString &padChar);
1470
+ virtual void setPadCharacter(const UnicodeString& padChar);
1473
1471
 
1474
1472
  /**
1475
1473
  * Get the position at which padding will take place. This is the location
@@ -1676,7 +1674,7 @@ public:
1676
1674
 
1677
1675
  #endif /* U_HIDE_INTERNAL_API */
1678
1676
 
1679
- /* Cannot use #ifndef U_HIDE_INTERNAL_API for the following draft method since it is virtual. */
1677
+ /* Cannot use #ifndef U_HIDE_INTERNAL_API for the following draft method since it is virtual. */
1680
1678
  /**
1681
1679
  * Sets the minimum grouping digits. Setting to a value less than or
1682
1680
  * equal to 1 turns off minimum grouping digits.
@@ -1717,7 +1715,7 @@ public:
1717
1715
  UBool isDecimalPatternMatchRequired(void) const;
1718
1716
 
1719
1717
  /**
1720
- * Allows you to set the behavior of the pattern decimal mark.
1718
+ * Allows you to set the parse behavior of the pattern decimal mark.
1721
1719
  *
1722
1720
  * if TRUE, the input must have a decimal mark if one was specified in the pattern. When
1723
1721
  * FALSE the decimal mark may be omitted from the input.
@@ -1727,6 +1725,60 @@ public:
1727
1725
  */
1728
1726
  virtual void setDecimalPatternMatchRequired(UBool newValue);
1729
1727
 
1728
+ /**
1729
+ * {@icu} Returns whether to ignore exponents when parsing.
1730
+ *
1731
+ * @see #setParseNoExponent
1732
+ * @internal This API is a technical preview. It may change in an upcoming release.
1733
+ */
1734
+ virtual UBool isParseNoExponent() const;
1735
+
1736
+ /**
1737
+ * {@icu} Specifies whether to stop parsing when an exponent separator is encountered. For
1738
+ * example, parses "123E4" to 123 (with parse position 3) instead of 1230000 (with parse position
1739
+ * 5).
1740
+ *
1741
+ * @param value true to prevent exponents from being parsed; false to allow them to be parsed.
1742
+ * @internal This API is a technical preview. It may change in an upcoming release.
1743
+ */
1744
+ virtual void setParseNoExponent(UBool value);
1745
+
1746
+ /**
1747
+ * {@icu} Returns whether parsing is sensitive to case (lowercase/uppercase).
1748
+ *
1749
+ * @see #setParseCaseSensitive
1750
+ * @internal This API is a technical preview. It may change in an upcoming release.
1751
+ */
1752
+ virtual UBool isParseCaseSensitive() const;
1753
+
1754
+ /**
1755
+ * {@icu} Whether to pay attention to case when parsing; default is to ignore case (perform
1756
+ * case-folding). For example, "A" == "a" in case-insensitive but not case-sensitive mode.
1757
+ *
1758
+ * Currency symbols are never case-folded. For example, "us$1.00" will not parse in case-insensitive
1759
+ * mode, even though "US$1.00" parses.
1760
+ *
1761
+ * @internal This API is a technical preview. It may change in an upcoming release.
1762
+ */
1763
+ virtual void setParseCaseSensitive(UBool value);
1764
+
1765
+ /**
1766
+ * {@icu} Returns whether truncation of high-order integer digits should result in an error.
1767
+ * By default, setMaximumIntegerDigits truncates high-order digits silently.
1768
+ *
1769
+ * @see setFormatFailIfMoreThanMaxDigits
1770
+ * @internal This API is a technical preview. It may change in an upcoming release.
1771
+ */
1772
+ virtual UBool isFormatFailIfMoreThanMaxDigits() const;
1773
+
1774
+ /**
1775
+ * {@icu} Sets whether truncation of high-order integer digits should result in an error.
1776
+ * By default, setMaximumIntegerDigits truncates high-order digits silently.
1777
+ *
1778
+ * @internal This API is a technical preview. It may change in an upcoming release.
1779
+ */
1780
+ virtual void setFormatFailIfMoreThanMaxDigits(UBool value);
1781
+
1730
1782
 
1731
1783
  /**
1732
1784
  * Synthesizes a pattern string that represents the current state
@@ -1781,9 +1833,8 @@ public:
1781
1833
  * set to a failure result.
1782
1834
  * @stable ICU 2.0
1783
1835
  */
1784
- virtual void applyPattern(const UnicodeString& pattern,
1785
- UParseError& parseError,
1786
- UErrorCode& status);
1836
+ virtual void applyPattern(const UnicodeString& pattern, UParseError& parseError, UErrorCode& status);
1837
+
1787
1838
  /**
1788
1839
  * Sets the pattern.
1789
1840
  * @param pattern The pattern to be applied.
@@ -1792,8 +1843,7 @@ public:
1792
1843
  * set to a failure result.
1793
1844
  * @stable ICU 2.0
1794
1845
  */
1795
- virtual void applyPattern(const UnicodeString& pattern,
1796
- UErrorCode& status);
1846
+ virtual void applyPattern(const UnicodeString& pattern, UErrorCode& status);
1797
1847
 
1798
1848
  /**
1799
1849
  * Apply the given pattern to this Format object. The pattern
@@ -1825,8 +1875,7 @@ public:
1825
1875
  * set to a failure result.
1826
1876
  * @stable ICU 2.0
1827
1877
  */
1828
- virtual void applyLocalizedPattern(const UnicodeString& pattern,
1829
- UParseError& parseError,
1878
+ virtual void applyLocalizedPattern(const UnicodeString& pattern, UParseError& parseError,
1830
1879
  UErrorCode& status);
1831
1880
 
1832
1881
  /**
@@ -1838,8 +1887,7 @@ public:
1838
1887
  * set to a failure result.
1839
1888
  * @stable ICU 2.0
1840
1889
  */
1841
- virtual void applyLocalizedPattern(const UnicodeString& pattern,
1842
- UErrorCode& status);
1890
+ virtual void applyLocalizedPattern(const UnicodeString& pattern, UErrorCode& status);
1843
1891
 
1844
1892
 
1845
1893
  /**
@@ -1851,7 +1899,7 @@ public:
1851
1899
  * @see NumberFormat#setMaximumIntegerDigits
1852
1900
  * @stable ICU 2.0
1853
1901
  */
1854
- virtual void setMaximumIntegerDigits(int32_t newValue);
1902
+ void setMaximumIntegerDigits(int32_t newValue) U_OVERRIDE;
1855
1903
 
1856
1904
  /**
1857
1905
  * Sets the minimum number of digits allowed in the integer portion of a
@@ -1862,7 +1910,7 @@ public:
1862
1910
  * @see NumberFormat#setMinimumIntegerDigits
1863
1911
  * @stable ICU 2.0
1864
1912
  */
1865
- virtual void setMinimumIntegerDigits(int32_t newValue);
1913
+ void setMinimumIntegerDigits(int32_t newValue) U_OVERRIDE;
1866
1914
 
1867
1915
  /**
1868
1916
  * Sets the maximum number of digits allowed in the fraction portion of a
@@ -1873,7 +1921,7 @@ public:
1873
1921
  * @see NumberFormat#setMaximumFractionDigits
1874
1922
  * @stable ICU 2.0
1875
1923
  */
1876
- virtual void setMaximumFractionDigits(int32_t newValue);
1924
+ void setMaximumFractionDigits(int32_t newValue) U_OVERRIDE;
1877
1925
 
1878
1926
  /**
1879
1927
  * Sets the minimum number of digits allowed in the fraction portion of a
@@ -1884,7 +1932,7 @@ public:
1884
1932
  * @see NumberFormat#setMinimumFractionDigits
1885
1933
  * @stable ICU 2.0
1886
1934
  */
1887
- virtual void setMinimumFractionDigits(int32_t newValue);
1935
+ void setMinimumFractionDigits(int32_t newValue) U_OVERRIDE;
1888
1936
 
1889
1937
  /**
1890
1938
  * Returns the minimum number of significant digits that will be
@@ -1947,7 +1995,6 @@ public:
1947
1995
  */
1948
1996
  void setSignificantDigitsUsed(UBool useSignificantDigits);
1949
1997
 
1950
- public:
1951
1998
  /**
1952
1999
  * Sets the currency used to display currency
1953
2000
  * amounts. This takes effect immediately, if this format is a
@@ -1960,7 +2007,7 @@ public:
1960
2007
  * @param ec input-output error code
1961
2008
  * @stable ICU 3.0
1962
2009
  */
1963
- virtual void setCurrency(const char16_t* theCurrency, UErrorCode& ec);
2010
+ void setCurrency(const char16_t* theCurrency, UErrorCode& ec) U_OVERRIDE;
1964
2011
 
1965
2012
  /**
1966
2013
  * Sets the currency used to display currency amounts. See
@@ -1984,78 +2031,53 @@ public:
1984
2031
  */
1985
2032
  UCurrencyUsage getCurrencyUsage() const;
1986
2033
 
1987
-
1988
- #ifndef U_HIDE_DEPRECATED_API
1989
- /**
1990
- * The resource tags we use to retrieve decimal format data from
1991
- * locale resource bundles.
1992
- * @deprecated ICU 3.4. This string has no public purpose. Please don't use it.
1993
- */
1994
- static const char fgNumberPatterns[];
1995
- #endif // U_HIDE_DEPRECATED_API
1996
-
1997
2034
  #ifndef U_HIDE_INTERNAL_API
1998
- /**
1999
- * Get a FixedDecimal corresponding to a double as it would be
2000
- * formatted by this DecimalFormat.
2001
- * Internal, not intended for public use.
2002
- * @internal
2003
- */
2004
- FixedDecimal getFixedDecimal(double number, UErrorCode &status) const;
2005
-
2006
- /**
2007
- * Get a FixedDecimal corresponding to a formattable as it would be
2008
- * formatted by this DecimalFormat.
2009
- * Internal, not intended for public use.
2010
- * @internal
2011
- */
2012
- FixedDecimal getFixedDecimal(const Formattable &number, UErrorCode &status) const;
2013
2035
 
2014
2036
  /**
2015
- * Get a FixedDecimal corresponding to a DigitList as it would be
2016
- * formatted by this DecimalFormat. Note: the DigitList may be modified.
2037
+ * Format a number and save it into the given DecimalQuantity.
2017
2038
  * Internal, not intended for public use.
2018
2039
  * @internal
2019
2040
  */
2020
- FixedDecimal getFixedDecimal(DigitList &number, UErrorCode &status) const;
2041
+ void formatToDecimalQuantity(double number, number::impl::DecimalQuantity& output,
2042
+ UErrorCode& status) const;
2021
2043
 
2022
2044
  /**
2023
- * Get a VisibleDigitsWithExponent corresponding to a double
2024
- * as it would be formatted by this DecimalFormat.
2045
+ * Get a DecimalQuantity corresponding to a formattable as it would be
2046
+ * formatted by this DecimalFormat.
2025
2047
  * Internal, not intended for public use.
2026
2048
  * @internal
2027
2049
  */
2028
- VisibleDigitsWithExponent &initVisibleDigitsWithExponent(
2029
- double number,
2030
- VisibleDigitsWithExponent &digits,
2031
- UErrorCode &status) const;
2050
+ void formatToDecimalQuantity(const Formattable& number, number::impl::DecimalQuantity& output,
2051
+ UErrorCode& status) const;
2032
2052
 
2033
- /**
2034
- * Get a VisibleDigitsWithExponent corresponding to a formattable
2035
- * as it would be formatted by this DecimalFormat.
2036
- * Internal, not intended for public use.
2037
- * @internal
2038
- */
2039
- VisibleDigitsWithExponent &initVisibleDigitsWithExponent(
2040
- const Formattable &number,
2041
- VisibleDigitsWithExponent &digits,
2042
- UErrorCode &status) const;
2053
+ #endif
2043
2054
 
2055
+ #ifndef U_HIDE_DRAFT_API
2044
2056
  /**
2045
- * Get a VisibleDigitsWithExponent corresponding to a DigitList
2046
- * as it would be formatted by this DecimalFormat.
2047
- * Note: the DigitList may be modified.
2048
- * Internal, not intended for public use.
2049
- * @internal
2057
+ * Converts this DecimalFormat to a NumberFormatter. Starting in ICU 60,
2058
+ * NumberFormatter is the recommended way to format numbers.
2059
+ *
2060
+ * NOTE: The returned LocalizedNumberFormatter is owned by this DecimalFormat.
2061
+ * If a non-const method is called on the DecimalFormat, or if the DecimalFormat
2062
+ * is deleted, the object becomes invalid. If you plan to keep the return value
2063
+ * beyond the lifetime of the DecimalFormat, copy it to a local variable:
2064
+ *
2065
+ * <pre>
2066
+ * LocalizedNumberFormatter f = df->toNumberFormatter();
2067
+ * </pre>
2068
+ *
2069
+ * It is, however, safe to use the return value for chaining:
2070
+ *
2071
+ * <pre>
2072
+ * FormattedNumber result = df->toNumberFormatter().formatDouble(123, status);
2073
+ * </pre>
2074
+ *
2075
+ * @param output The variable into which to store the LocalizedNumberFormatter.
2076
+ * @return The output variable, for chaining.
2077
+ * @draft ICU 62
2050
2078
  */
2051
- VisibleDigitsWithExponent &initVisibleDigitsWithExponent(
2052
- DigitList &number,
2053
- VisibleDigitsWithExponent &digits,
2054
- UErrorCode &status) const;
2055
-
2056
- #endif /* U_HIDE_INTERNAL_API */
2057
-
2058
- public:
2079
+ const number::LocalizedNumberFormatter& toNumberFormatter() const;
2080
+ #endif /* U_HIDE_DRAFT_API */
2059
2081
 
2060
2082
  /**
2061
2083
  * Return the class ID for this class. This is useful only for
@@ -2081,217 +2103,57 @@ public:
2081
2103
  * other classes have different class IDs.
2082
2104
  * @stable ICU 2.0
2083
2105
  */
2084
- virtual UClassID getDynamicClassID(void) const;
2085
-
2086
- private:
2087
-
2088
- DecimalFormat(); // default constructor not implemented
2089
-
2090
- /**
2091
- * Initialize all fields of a new DecimalFormatter to a safe default value.
2092
- * Common code for use by constructors.
2093
- */
2094
- void init();
2095
-
2096
- /**
2097
- * Do real work of constructing a new DecimalFormat.
2098
- */
2099
- void construct(UErrorCode& status,
2100
- UParseError& parseErr,
2101
- const UnicodeString* pattern = 0,
2102
- DecimalFormatSymbols* symbolsToAdopt = 0
2103
- );
2104
-
2105
- void handleCurrencySignInPattern(UErrorCode& status);
2106
-
2107
- void parse(const UnicodeString& text,
2108
- Formattable& result,
2109
- ParsePosition& pos,
2110
- char16_t* currency) const;
2111
-
2112
- enum {
2113
- fgStatusInfinite,
2114
- fgStatusLength // Leave last in list.
2115
- } StatusFlags;
2116
-
2117
- UBool subparse(const UnicodeString& text,
2118
- const UnicodeString* negPrefix,
2119
- const UnicodeString* negSuffix,
2120
- const UnicodeString* posPrefix,
2121
- const UnicodeString* posSuffix,
2122
- UBool complexCurrencyParsing,
2123
- int8_t type,
2124
- ParsePosition& parsePosition,
2125
- DigitList& digits, UBool* status,
2126
- char16_t* currency) const;
2127
-
2128
- // Mixed style parsing for currency.
2129
- // It parses against the current currency pattern
2130
- // using complex affix comparison
2131
- // parses against the currency plural patterns using complex affix comparison,
2132
- // and parses against the current pattern using simple affix comparison.
2133
- UBool parseForCurrency(const UnicodeString& text,
2134
- ParsePosition& parsePosition,
2135
- DigitList& digits,
2136
- UBool* status,
2137
- char16_t* currency) const;
2138
-
2139
- int32_t skipPadding(const UnicodeString& text, int32_t position) const;
2140
-
2141
- int32_t compareAffix(const UnicodeString& input,
2142
- int32_t pos,
2143
- UBool isNegative,
2144
- UBool isPrefix,
2145
- const UnicodeString* affixPat,
2146
- UBool complexCurrencyParsing,
2147
- int8_t type,
2148
- char16_t* currency) const;
2149
-
2150
- static UnicodeString& trimMarksFromAffix(const UnicodeString& affix, UnicodeString& trimmedAffix);
2151
-
2152
- UBool equalWithSignCompatibility(UChar32 lhs, UChar32 rhs) const;
2153
-
2154
- int32_t compareSimpleAffix(const UnicodeString& affix,
2155
- const UnicodeString& input,
2156
- int32_t pos,
2157
- UBool lenient) const;
2158
-
2159
- static int32_t skipPatternWhiteSpace(const UnicodeString& text, int32_t pos);
2160
-
2161
- static int32_t skipUWhiteSpace(const UnicodeString& text, int32_t pos);
2162
-
2163
- static int32_t skipUWhiteSpaceAndMarks(const UnicodeString& text, int32_t pos);
2164
-
2165
- static int32_t skipBidiMarks(const UnicodeString& text, int32_t pos);
2166
-
2167
- int32_t compareComplexAffix(const UnicodeString& affixPat,
2168
- const UnicodeString& input,
2169
- int32_t pos,
2170
- int8_t type,
2171
- char16_t* currency) const;
2172
-
2173
- static int32_t match(const UnicodeString& text, int32_t pos, UChar32 ch);
2106
+ UClassID getDynamicClassID(void) const U_OVERRIDE;
2174
2107
 
2175
- static int32_t match(const UnicodeString& text, int32_t pos, const UnicodeString& str);
2108
+ private:
2176
2109
 
2177
- static UBool matchSymbol(const UnicodeString &text, int32_t position, int32_t length, const UnicodeString &symbol,
2178
- UnicodeSet *sset, UChar32 schar);
2110
+ /** Rebuilds the formatter object from the property bag. */
2111
+ void touch(UErrorCode& status);
2179
2112
 
2180
- static UBool matchDecimal(UChar32 symbolChar,
2181
- UBool sawDecimal, UChar32 sawDecimalChar,
2182
- const UnicodeSet *sset, UChar32 schar);
2183
-
2184
- static UBool matchGrouping(UChar32 groupingChar,
2185
- UBool sawGrouping, UChar32 sawGroupingChar,
2186
- const UnicodeSet *sset,
2187
- UChar32 decimalChar, const UnicodeSet *decimalSet,
2188
- UChar32 schar);
2189
-
2190
- // set up currency affix patterns for mix parsing.
2191
- // The patterns saved here are the affix patterns of default currency
2192
- // pattern and the unique affix patterns of the plural currency patterns.
2193
- // Those patterns are used by parseForCurrency().
2194
- void setupCurrencyAffixPatterns(UErrorCode& status);
2195
-
2196
- // get the currency rounding with respect to currency usage
2197
- double getCurrencyRounding(const char16_t* currency,
2198
- UErrorCode* ec) const;
2199
-
2200
- // get the currency fraction with respect to currency usage
2201
- int getCurrencyFractionDigits(const char16_t* currency,
2202
- UErrorCode* ec) const;
2203
-
2204
- // hashtable operations
2205
- Hashtable* initHashForAffixPattern(UErrorCode& status);
2206
-
2207
- void deleteHashForAffixPattern();
2208
-
2209
- void copyHashForAffixPattern(const Hashtable* source,
2210
- Hashtable* target, UErrorCode& status);
2211
-
2212
- DecimalFormatImpl *fImpl;
2113
+ /** Rebuilds the formatter object, hiding the error code. */
2114
+ void touchNoError();
2213
2115
 
2214
2116
  /**
2215
- * Constants.
2117
+ * Updates the property bag with settings from the given pattern.
2118
+ *
2119
+ * @param pattern The pattern string to parse.
2120
+ * @param ignoreRounding Whether to leave out rounding information (minFrac, maxFrac, and rounding
2121
+ * increment) when parsing the pattern. This may be desirable if a custom rounding mode, such
2122
+ * as CurrencyUsage, is to be used instead. One of {@link
2123
+ * PatternStringParser#IGNORE_ROUNDING_ALWAYS}, {@link PatternStringParser#IGNORE_ROUNDING_IF_CURRENCY},
2124
+ * or {@link PatternStringParser#IGNORE_ROUNDING_NEVER}.
2125
+ * @see PatternAndPropertyUtils#parseToExistingProperties
2216
2126
  */
2127
+ void setPropertiesFromPattern(const UnicodeString& pattern, int32_t ignoreRounding,
2128
+ UErrorCode& status);
2217
2129
 
2130
+ const numparse::impl::NumberParserImpl* getParser(UErrorCode& status) const;
2218
2131
 
2219
- EnumSet<UNumberFormatAttribute,
2220
- UNUM_MAX_NONBOOLEAN_ATTRIBUTE+1,
2221
- UNUM_LIMIT_BOOLEAN_ATTRIBUTE>
2222
- fBoolFlags;
2132
+ const numparse::impl::NumberParserImpl* getCurrencyParser(UErrorCode& status) const;
2223
2133
 
2134
+ static void fieldPositionHelper(const number::FormattedNumber& formatted, FieldPosition& fieldPosition,
2135
+ int32_t offset, UErrorCode& status);
2224
2136
 
2225
- // style is only valid when decimal formatter is constructed by
2226
- // DecimalFormat(pattern, decimalFormatSymbol, style)
2227
- int fStyle;
2137
+ static void fieldPositionIteratorHelper(const number::FormattedNumber& formatted,
2138
+ FieldPositionIterator* fpi, int32_t offset, UErrorCode& status);
2228
2139
 
2140
+ void setupFastFormat();
2229
2141
 
2230
- // Affix pattern set for currency.
2231
- // It is a set of AffixPatternsForCurrency,
2232
- // each element of the set saves the negative prefix pattern,
2233
- // negative suffix pattern, positive prefix pattern,
2234
- // and positive suffix pattern of a pattern.
2235
- // It is used for currency mixed style parsing.
2236
- // It is actually is a set.
2237
- // The set contains the default currency pattern from the locale,
2238
- // and the currency plural patterns.
2239
- // Since it is a set, it does not contain duplicated items.
2240
- // For example, if 2 currency plural patterns are the same, only one pattern
2241
- // is included in the set. When parsing, we do not check whether the plural
2242
- // count match or not.
2243
- Hashtable* fAffixPatternsForCurrency;
2142
+ bool fastFormatDouble(double input, UnicodeString& output) const;
2244
2143
 
2245
- // Information needed for DecimalFormat to format/parse currency plural.
2246
- CurrencyPluralInfo* fCurrencyPluralInfo;
2144
+ bool fastFormatInt64(int64_t input, UnicodeString& output) const;
2247
2145
 
2248
- #if UCONFIG_HAVE_PARSEALLINPUT
2249
- UNumberFormatAttributeValue fParseAllInput;
2250
- #endif
2146
+ void doFastFormatInt32(int32_t input, bool isNegative, UnicodeString& output) const;
2251
2147
 
2252
- // Decimal Format Static Sets singleton.
2253
- const DecimalFormatStaticSets *fStaticSets;
2148
+ //=====================================================================================//
2149
+ // INSTANCE FIELDS //
2150
+ //=====================================================================================//
2254
2151
 
2255
- protected:
2152
+ // Only one instance field: keep all fields inside of an implementation class defined in number_mapper.h
2153
+ number::impl::DecimalFormatFields* fields;
2256
2154
 
2257
- #ifndef U_HIDE_INTERNAL_API
2258
- /**
2259
- * Rounds a value according to the rules of this object.
2260
- * @internal
2261
- */
2262
- DigitList& _round(const DigitList& number, DigitList& adjustedNum, UBool& isNegative, UErrorCode& status) const;
2263
- #endif /* U_HIDE_INTERNAL_API */
2264
-
2265
- /**
2266
- * Returns the currency in effect for this formatter. Subclasses
2267
- * should override this method as needed. Unlike getCurrency(),
2268
- * this method should never return "".
2269
- * @result output parameter for null-terminated result, which must
2270
- * have a capacity of at least 4
2271
- * @internal
2272
- */
2273
- virtual void getEffectiveCurrency(char16_t* result, UErrorCode& ec) const;
2274
-
2275
- /** number of integer digits
2276
- * @stable ICU 2.4
2277
- */
2278
- static const int32_t kDoubleIntegerDigits;
2279
- /** number of fraction digits
2280
- * @stable ICU 2.4
2281
- */
2282
- static const int32_t kDoubleFractionDigits;
2283
-
2284
- /**
2285
- * When someone turns on scientific mode, we assume that more than this
2286
- * number of digits is due to flipping from some other mode that didn't
2287
- * restrict the maximum, and so we force 1 integer digit. We don't bother
2288
- * to track and see if someone is using exponential notation with more than
2289
- * this number, it wouldn't make sense anyway, and this is just to make sure
2290
- * that someone turning on scientific mode with default settings doesn't
2291
- * end up with lots of zeroes.
2292
- * @stable ICU 2.8
2293
- */
2294
- static const int32_t kMaxScientificIntegerDigits;
2155
+ // Allow child class CompactDecimalFormat to access fProperties:
2156
+ friend class CompactDecimalFormat;
2295
2157
 
2296
2158
  };
2297
2159