+// 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 *
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);
}
}
UnicodeString&
-DecimalFormat::format(const StringPiece &number,
+DecimalFormat::format(StringPiece number,
UnicodeString &toAppendTo,
FieldPositionIterator *posIter,
UErrorCode &status) const
// 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);
// 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);
void
DecimalFormat::applyPattern(const UnicodeString& pattern, UErrorCode& status)
{
+ if (pattern.indexOf(kCurrencySign) != -1) {
+ handleCurrencySignInPattern(status);
+ }
fImpl->applyPattern(pattern, status);
}
UParseError& parseError,
UErrorCode& status)
{
+ if (pattern.indexOf(kCurrencySign) != -1) {
+ handleCurrencySignInPattern(status);
+ }
fImpl->applyPattern(pattern, parseError, status);
}
//------------------------------------------------------------------------------
void
DecimalFormat::applyLocalizedPattern(const UnicodeString& pattern, UErrorCode& status)
{
+ if (pattern.indexOf(kCurrencySign) != -1) {
+ handleCurrencySignInPattern(status);
+ }
fImpl->applyLocalizedPattern(pattern, status);
}
UParseError& parseError,
UErrorCode& status)
{
+ if (pattern.indexOf(kCurrencySign) != -1) {
+ handleCurrencySignInPattern(status);
+ }
fImpl->applyLocalizedPattern(pattern, parseError, status);
}