| Index: source/i18n/decimfmt.cpp
|
| diff --git a/source/i18n/decimfmt.cpp b/source/i18n/decimfmt.cpp
|
| index 9518ef581c7cff907edf9a833a333f80c30adbdf..f03143ade4235493abb01a649984cda032895c3a 100644
|
| --- a/source/i18n/decimfmt.cpp
|
| +++ b/source/i18n/decimfmt.cpp
|
| @@ -1,3 +1,5 @@
|
| +// Copyright (C) 2016 and later: Unicode, Inc. and others.
|
| +// License & terms of use: http://www.unicode.org/copyright.html
|
| /*
|
| *******************************************************************************
|
| * Copyright (C) 1997-2015, International Business Machines Corporation and *
|
| @@ -445,13 +447,25 @@ DecimalFormat::construct(UErrorCode& status,
|
| if (patternUsed->indexOf(kCurrencySign) != -1) {
|
| // initialize for currency, not only for plural format,
|
| // but also for mix parsing
|
| - if (fCurrencyPluralInfo == NULL) {
|
| - fCurrencyPluralInfo = new CurrencyPluralInfo(fImpl->fSymbols->getLocale(), status);
|
| - if (U_FAILURE(status)) {
|
| - return;
|
| - }
|
| - }
|
| - // need it for mix parsing
|
| + handleCurrencySignInPattern(status);
|
| + }
|
| +}
|
| +
|
| +void
|
| +DecimalFormat::handleCurrencySignInPattern(UErrorCode& status) {
|
| + // initialize for currency, not only for plural format,
|
| + // but also for mix parsing
|
| + if (U_FAILURE(status)) {
|
| + return;
|
| + }
|
| + if (fCurrencyPluralInfo == NULL) {
|
| + fCurrencyPluralInfo = new CurrencyPluralInfo(fImpl->fSymbols->getLocale(), status);
|
| + if (U_FAILURE(status)) {
|
| + return;
|
| + }
|
| + }
|
| + // need it for mix parsing
|
| + if (fAffixPatternsForCurrency == NULL) {
|
| setupCurrencyAffixPatterns(status);
|
| }
|
| }
|
| @@ -828,7 +842,7 @@ DecimalFormat::format( double number,
|
|
|
|
|
| UnicodeString&
|
| -DecimalFormat::format(const StringPiece &number,
|
| +DecimalFormat::format(StringPiece number,
|
| UnicodeString &toAppendTo,
|
| FieldPositionIterator *posIter,
|
| UErrorCode &status) const
|
| @@ -1643,7 +1657,7 @@ UBool DecimalFormat::subparse(const UnicodeString& text,
|
| // if we didn't see a decimal and it is required, check to see if the pattern had one
|
| if(!sawDecimal && isDecimalPatternMatchRequired())
|
| {
|
| - if(formatPattern.indexOf(DecimalFormatSymbols::kDecimalSeparatorSymbol) != 0)
|
| + if(formatPattern.indexOf(kPatternDecimalSeparator) != -1)
|
| {
|
| parsePosition.setIndex(oldStart);
|
| parsePosition.setErrorIndex(position);
|
| @@ -1769,7 +1783,7 @@ printf("PP -> %d, SLOW = [%s]! pp=%d, os=%d, err=%s\n", position, parsedNum.d
|
| // check if we missed a required decimal point
|
| if(fastParseOk && isDecimalPatternMatchRequired())
|
| {
|
| - if(formatPattern.indexOf(DecimalFormatSymbols::kDecimalSeparatorSymbol) != 0)
|
| + if(formatPattern.indexOf(kPatternDecimalSeparator) != -1)
|
| {
|
| parsePosition.setIndex(oldStart);
|
| parsePosition.setErrorIndex(position);
|
| @@ -2815,6 +2829,9 @@ DecimalFormat::toLocalizedPattern(UnicodeString& result) const
|
| void
|
| DecimalFormat::applyPattern(const UnicodeString& pattern, UErrorCode& status)
|
| {
|
| + if (pattern.indexOf(kCurrencySign) != -1) {
|
| + handleCurrencySignInPattern(status);
|
| + }
|
| fImpl->applyPattern(pattern, status);
|
| }
|
|
|
| @@ -2825,6 +2842,9 @@ DecimalFormat::applyPattern(const UnicodeString& pattern,
|
| UParseError& parseError,
|
| UErrorCode& status)
|
| {
|
| + if (pattern.indexOf(kCurrencySign) != -1) {
|
| + handleCurrencySignInPattern(status);
|
| + }
|
| fImpl->applyPattern(pattern, parseError, status);
|
| }
|
| //------------------------------------------------------------------------------
|
| @@ -2832,6 +2852,9 @@ DecimalFormat::applyPattern(const UnicodeString& pattern,
|
| void
|
| DecimalFormat::applyLocalizedPattern(const UnicodeString& pattern, UErrorCode& status)
|
| {
|
| + if (pattern.indexOf(kCurrencySign) != -1) {
|
| + handleCurrencySignInPattern(status);
|
| + }
|
| fImpl->applyLocalizedPattern(pattern, status);
|
| }
|
|
|
| @@ -2842,6 +2865,9 @@ DecimalFormat::applyLocalizedPattern(const UnicodeString& pattern,
|
| UParseError& parseError,
|
| UErrorCode& status)
|
| {
|
| + if (pattern.indexOf(kCurrencySign) != -1) {
|
| + handleCurrencySignInPattern(status);
|
| + }
|
| fImpl->applyLocalizedPattern(pattern, parseError, status);
|
| }
|
|
|
|
|