Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Unified Diff: source/i18n/dtitvfmt.cpp

Issue 1621843002: ICU 56 update step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@561
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « source/i18n/dtfmtsym.cpp ('k') | source/i18n/dtitvinf.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/i18n/dtitvfmt.cpp
diff --git a/source/i18n/dtitvfmt.cpp b/source/i18n/dtitvfmt.cpp
index e3a2c4ea6bb6870ac9ab979a64dfea8a3534376f..21377e111a0806cd7d1d9c21acae89bc10b2a4f1 100644
--- a/source/i18n/dtitvfmt.cpp
+++ b/source/i18n/dtitvfmt.cpp
@@ -1,5 +1,5 @@
/*******************************************************************************
-* Copyright (C) 2008-2014, International Business Machines Corporation and
+* Copyright (C) 2008-2015, International Business Machines Corporation and
* others. All Rights Reserved.
*******************************************************************************
*
@@ -117,7 +117,10 @@ DateIntervalFormat::DateIntervalFormat()
fDateFormat(NULL),
fFromCalendar(NULL),
fToCalendar(NULL),
- fDtpng(NULL)
+ fLocale(Locale::getRoot()),
+ fDatePattern(NULL),
+ fTimePattern(NULL),
+ fDateTimeFormat(NULL)
{}
@@ -127,7 +130,10 @@ DateIntervalFormat::DateIntervalFormat(const DateIntervalFormat& itvfmt)
fDateFormat(NULL),
fFromCalendar(NULL),
fToCalendar(NULL),
- fDtpng(NULL) {
+ fLocale(itvfmt.fLocale),
+ fDatePattern(NULL),
+ fTimePattern(NULL),
+ fDateTimeFormat(NULL) {
*this = itvfmt;
}
@@ -139,7 +145,9 @@ DateIntervalFormat::operator=(const DateIntervalFormat& itvfmt) {
delete fInfo;
delete fFromCalendar;
delete fToCalendar;
- delete fDtpng;
+ delete fDatePattern;
+ delete fTimePattern;
+ delete fDateTimeFormat;
if ( itvfmt.fDateFormat ) {
fDateFormat = (SimpleDateFormat*)itvfmt.fDateFormat->clone();
} else {
@@ -165,9 +173,10 @@ DateIntervalFormat::operator=(const DateIntervalFormat& itvfmt) {
for ( i = 0; i< DateIntervalInfo::kIPI_MAX_INDEX; ++i ) {
fIntervalPatterns[i] = itvfmt.fIntervalPatterns[i];
}
- if (itvfmt.fDtpng) {
- fDtpng = itvfmt.fDtpng->clone();
- }
+ fLocale = itvfmt.fLocale;
+ fDatePattern = (itvfmt.fDatePattern)? (UnicodeString*)itvfmt.fDatePattern->clone(): NULL;
+ fTimePattern = (itvfmt.fTimePattern)? (UnicodeString*)itvfmt.fTimePattern->clone(): NULL;
+ fDateTimeFormat = (itvfmt.fDateTimeFormat)? (UnicodeString*)itvfmt.fDateTimeFormat->clone(): NULL;
}
return *this;
}
@@ -178,7 +187,9 @@ DateIntervalFormat::~DateIntervalFormat() {
delete fDateFormat;
delete fFromCalendar;
delete fToCalendar;
- delete fDtpng;
+ delete fDatePattern;
+ delete fTimePattern;
+ delete fDateTimeFormat;
}
@@ -201,6 +212,9 @@ DateIntervalFormat::operator==(const Format& other) const {
equal = fFromCalendar->isEquivalentTo(*fmt->fFromCalendar) ;
equal = fToCalendar->isEquivalentTo(*fmt->fToCalendar) ;
equal = (fSkeleton == fmt->fSkeleton);
+ equal = ((fDatePattern == NULL && fmt->fDatePattern == NULL) || (fDatePattern && fmt->fDatePattern && *fDatePattern == *fmt->fDatePattern));
+ equal = ((fTimePattern == NULL && fmt->fTimePattern == NULL) || (fTimePattern && fmt->fTimePattern && *fTimePattern == *fmt->fTimePattern));
+ equal = ((fDateTimeFormat == NULL && fmt->fDateTimeFormat == NULL) || (fDateTimeFormat && fmt->fDateTimeFormat && *fDateTimeFormat == *fmt->fDateTimeFormat));
#endif
UBool res;
res = ( this == fmt ) ||
@@ -214,8 +228,9 @@ DateIntervalFormat::operator==(const Format& other) const {
fToCalendar &&
fToCalendar->isEquivalentTo(*fmt->fToCalendar) &&
fSkeleton == fmt->fSkeleton &&
- fDtpng &&
- (*fDtpng == *fmt->fDtpng) );
+ ((fDatePattern == NULL && fmt->fDatePattern == NULL) || (fDatePattern && fmt->fDatePattern && *fDatePattern == *fmt->fDatePattern)) &&
+ ((fTimePattern == NULL && fmt->fTimePattern == NULL) || (fTimePattern && fmt->fTimePattern && *fTimePattern == *fmt->fTimePattern)) &&
+ ((fDateTimeFormat == NULL && fmt->fDateTimeFormat == NULL) || (fDateTimeFormat && fmt->fDateTimeFormat && *fDateTimeFormat == *fmt->fDateTimeFormat)) && fLocale == fmt->fLocale);
int8_t i;
for (i = 0; i< DateIntervalInfo::kIPI_MAX_INDEX && res == TRUE; ++i ) {
res = ( fIntervalPatterns[i].firstPart ==
@@ -314,17 +329,21 @@ DateIntervalFormat::format(Calendar& fromCalendar,
} else if ( fromCalendar.get(UCAL_MINUTE, status) !=
toCalendar.get(UCAL_MINUTE, status) ) {
field = UCAL_MINUTE;
+ } else if ( fromCalendar.get(UCAL_SECOND, status) !=
+ toCalendar.get(UCAL_SECOND, status) ) {
+ field = UCAL_SECOND;
}
if ( U_FAILURE(status) ) {
return appendTo;
}
if ( field == UCAL_FIELD_COUNT ) {
- /* ignore the second/millisecond etc. small fields' difference.
+ /* ignore the millisecond etc. small fields' difference.
* use single date when all the above are the same.
*/
return fDateFormat->format(fromCalendar, appendTo, pos);
}
+ UBool fromToOnSameDay = (field==UCAL_AM_PM || field==UCAL_HOUR || field==UCAL_MINUTE || field==UCAL_SECOND);
// following call should not set wrong status,
// all the pass-in fields are valid till here
@@ -341,7 +360,7 @@ DateIntervalFormat::format(Calendar& fromCalendar,
*/
return fDateFormat->format(fromCalendar, appendTo, pos);
}
- return fallbackFormat(fromCalendar, toCalendar, appendTo, pos, status);
+ return fallbackFormat(fromCalendar, toCalendar, fromToOnSameDay, appendTo, pos, status);
}
// If the first part in interval pattern is empty,
// the 2nd part of it saves the full-pattern used in fall-back.
@@ -351,7 +370,7 @@ DateIntervalFormat::format(Calendar& fromCalendar,
UnicodeString originalPattern;
fDateFormat->toPattern(originalPattern);
fDateFormat->applyPattern(intervalPattern.secondPart);
- appendTo = fallbackFormat(fromCalendar, toCalendar, appendTo, pos, status);
+ appendTo = fallbackFormat(fromCalendar, toCalendar, fromToOnSameDay, appendTo, pos, status);
fDateFormat->applyPattern(originalPattern);
return appendTo;
}
@@ -372,7 +391,12 @@ DateIntervalFormat::format(Calendar& fromCalendar,
fDateFormat->format(*firstCal, appendTo, pos);
if ( !intervalPattern.secondPart.isEmpty() ) {
fDateFormat->applyPattern(intervalPattern.secondPart);
- fDateFormat->format(*secondCal, appendTo, pos);
+ FieldPosition otherPos;
+ otherPos.setField(pos.getField());
+ fDateFormat->format(*secondCal, appendTo, otherPos);
+ if (pos.getEndIndex() == 0 && otherPos.getEndIndex() > 0) {
+ pos = otherPos;
+ }
}
fDateFormat->applyPattern(originalPattern);
return appendTo;
@@ -403,6 +427,15 @@ DateIntervalFormat::setDateIntervalInfo(const DateIntervalInfo& newItvPattern,
UErrorCode& status) {
delete fInfo;
fInfo = new DateIntervalInfo(newItvPattern);
+
+ // Delete patterns that get reset by initializePattern
+ delete fDatePattern;
+ fDatePattern = NULL;
+ delete fTimePattern;
+ fTimePattern = NULL;
+ delete fDateTimeFormat;
+ fDateTimeFormat = NULL;
+
if ( fDateFormat ) {
initializePattern(status);
}
@@ -427,10 +460,10 @@ DateIntervalFormat::adoptTimeZone(TimeZone* zone)
// work clones of that calendar (and should not also be given ownership of the
// adopted TimeZone).
if (fFromCalendar) {
- fFromCalendar->setTimeZone(*zone);
+ fFromCalendar->setTimeZone(*zone);
}
if (fToCalendar) {
- fToCalendar->setTimeZone(*zone);
+ fToCalendar->setTimeZone(*zone);
}
}
@@ -443,10 +476,10 @@ DateIntervalFormat::setTimeZone(const TimeZone& zone)
// The fDateFormat has the master calendar for the DateIntervalFormat;
// fFromCalendar and fToCalendar are internal work clones of that calendar.
if (fFromCalendar) {
- fFromCalendar->setTimeZone(zone);
+ fFromCalendar->setTimeZone(zone);
}
if (fToCalendar) {
- fToCalendar->setTimeZone(zone);
+ fToCalendar->setTimeZone(zone);
}
}
@@ -468,27 +501,29 @@ DateIntervalFormat::DateIntervalFormat(const Locale& locale,
fDateFormat(NULL),
fFromCalendar(NULL),
fToCalendar(NULL),
- fDtpng(NULL)
+ fLocale(locale),
+ fDatePattern(NULL),
+ fTimePattern(NULL),
+ fDateTimeFormat(NULL)
{
if ( U_FAILURE(status) ) {
delete dtItvInfo;
return;
}
- fDtpng = DateTimePatternGenerator::createInstance(locale, status);
- SimpleDateFormat* dtfmt = createSDFPatternInstance(*skeleton, locale,
- fDtpng, status);
+ SimpleDateFormat* dtfmt =
+ static_cast<SimpleDateFormat *>(
+ DateFormat::createInstanceForSkeleton(
+ *skeleton, locale, status));
if ( U_FAILURE(status) ) {
delete dtItvInfo;
- delete fDtpng;
delete dtfmt;
return;
}
- if ( dtfmt == NULL || dtItvInfo == NULL || fDtpng == NULL ) {
+ if ( dtfmt == NULL || dtItvInfo == NULL) {
status = U_MEMORY_ALLOCATION_ERROR;
// safe to delete NULL
delete dtfmt;
delete dtItvInfo;
- delete fDtpng;
return;
}
if ( skeleton ) {
@@ -506,30 +541,6 @@ DateIntervalFormat::DateIntervalFormat(const Locale& locale,
initializePattern(status);
}
-
-SimpleDateFormat* U_EXPORT2
-DateIntervalFormat::createSDFPatternInstance(const UnicodeString& skeleton,
- const Locale& locale,
- DateTimePatternGenerator* dtpng,
- UErrorCode& status)
-{
- if ( U_FAILURE(status) ) {
- return NULL;
- }
-
- const UnicodeString pattern = dtpng->getBestPattern(skeleton, status);
- if ( U_FAILURE(status) ) {
- return NULL;
- }
- SimpleDateFormat* dtfmt = new SimpleDateFormat(pattern, locale, status);
- if ( U_FAILURE(status) ) {
- delete dtfmt;
- return NULL;
- }
- return dtfmt;
-}
-
-
DateIntervalFormat* U_EXPORT2
DateIntervalFormat::create(const Locale& locale,
DateIntervalInfo* dtitvinf,
@@ -603,7 +614,8 @@ DateIntervalFormat::initializePattern(UErrorCode& status) {
#endif
// fSkeleton is already set by createDateIntervalInstance()
// or by createInstance(UnicodeString skeleton, .... )
- fSkeleton = fDtpng->getSkeleton(fullPattern, status);
+ fSkeleton = DateTimePatternGenerator::staticGetSkeleton(
+ fullPattern, status);
if ( U_FAILURE(status) ) {
return;
}
@@ -647,10 +659,39 @@ DateIntervalFormat::initializePattern(UErrorCode& status) {
PRINTMESG(mesg)
#endif
+ // move this up here since we need it for fallbacks
+ if ( timeSkeleton.length() > 0 && dateSkeleton.length() > 0 ) {
+ // Need the Date/Time pattern for concatenation of the date
+ // with the time interval.
+ // The date/time pattern ( such as {0} {1} ) is saved in
+ // calendar, that is why need to get the CalendarData here.
+ CalendarData* calData = new CalendarData(locale, NULL, status);
+ if ( U_FAILURE(status) ) {
+ delete calData;
+ return;
+ }
+ if ( calData == NULL ) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+
+ const UResourceBundle* dateTimePatternsRes = calData->getByKey(
+ gDateTimePatternsTag, status);
+ int32_t dateTimeFormatLength;
+ const UChar* dateTimeFormat = ures_getStringByIndex(
+ dateTimePatternsRes,
+ (int32_t)DateFormat::kDateTime,
+ &dateTimeFormatLength, &status);
+ if ( U_SUCCESS(status) && dateTimeFormatLength >= 3 ) {
+ fDateTimeFormat = new UnicodeString(dateTimeFormat, dateTimeFormatLength);
+ }
+ delete calData;
+ }
UBool found = setSeparateDateTimePtn(normalizedDateSkeleton,
normalizedTimeSkeleton);
+ // for skeletons with seconds, found is false and we enter this block
if ( found == false ) {
// use fallback
// TODO: if user asks "m"(minute), but "d"(day) differ
@@ -658,7 +699,8 @@ DateIntervalFormat::initializePattern(UErrorCode& status) {
if ( dateSkeleton.length() == 0 ) {
// prefix with yMd
timeSkeleton.insert(0, gDateFormatSkeleton[DateFormat::kShort], -1);
- UnicodeString pattern = fDtpng->getBestPattern(timeSkeleton, status);
+ UnicodeString pattern = DateFormat::getBestPattern(
+ locale, timeSkeleton, status);
if ( U_FAILURE(status) ) {
return;
}
@@ -683,7 +725,8 @@ DateIntervalFormat::initializePattern(UErrorCode& status) {
} else if ( dateSkeleton.length() == 0 ) {
// prefix with yMd
timeSkeleton.insert(0, gDateFormatSkeleton[DateFormat::kShort], -1);
- UnicodeString pattern = fDtpng->getBestPattern(timeSkeleton, status);
+ UnicodeString pattern = DateFormat::getBestPattern(
+ locale, timeSkeleton, status);
if ( U_FAILURE(status) ) {
return;
}
@@ -727,42 +770,18 @@ DateIntervalFormat::initializePattern(UErrorCode& status) {
* 2) otherwise, present the date followed by the
* range expression for the time.
*/
- // Need the Date/Time pattern for concatnation the date with
- // the time interval.
- // The date/time pattern ( such as {0} {1} ) is saved in
- // calendar, that is why need to get the CalendarData here.
- CalendarData* calData = new CalendarData(locale, NULL, status);
-
- if ( U_FAILURE(status) ) {
- delete calData;
- return;
- }
- if ( calData == NULL ) {
- status = U_MEMORY_ALLOCATION_ERROR;
- return;
- }
-
- const UResourceBundle* dateTimePatternsRes = calData->getByKey(
- gDateTimePatternsTag, status);
- int32_t dateTimeFormatLength;
- const UChar* dateTimeFormat = ures_getStringByIndex(
- dateTimePatternsRes,
- (int32_t)DateFormat::kDateTime,
- &dateTimeFormatLength, &status);
- if ( U_FAILURE(status) ) {
+ if ( fDateTimeFormat == 0 ) {
+ // earlier failure getting dateTimeFormat
return;
}
- UnicodeString datePattern = fDtpng->getBestPattern(dateSkeleton, status);
+ UnicodeString datePattern = DateFormat::getBestPattern(
+ locale, dateSkeleton, status);
- concatSingleDate2TimeInterval(dateTimeFormat, dateTimeFormatLength,
- datePattern, UCAL_AM_PM, status);
- concatSingleDate2TimeInterval(dateTimeFormat, dateTimeFormatLength,
- datePattern, UCAL_HOUR, status);
- concatSingleDate2TimeInterval(dateTimeFormat, dateTimeFormatLength,
- datePattern, UCAL_MINUTE, status);
- delete calData;
+ concatSingleDate2TimeInterval(*fDateTimeFormat, datePattern, UCAL_AM_PM, status);
+ concatSingleDate2TimeInterval(*fDateTimeFormat, datePattern, UCAL_HOUR, status);
+ concatSingleDate2TimeInterval(*fDateTimeFormat, datePattern, UCAL_MINUTE, status);
}
}
@@ -977,11 +996,27 @@ DateIntervalFormat::setSeparateDateTimePtn(
return false;
}
+ // Set patterns for fallback use, need to do this
+ // before returning if differenceInfo == -1
+ UErrorCode status;
+ if ( dateSkeleton.length() != 0) {
+ status = U_ZERO_ERROR;
+ fDatePattern = new UnicodeString(DateFormat::getBestPattern(
+ fLocale, dateSkeleton, status));
+ }
+ if ( timeSkeleton.length() != 0) {
+ status = U_ZERO_ERROR;
+ fTimePattern = new UnicodeString(DateFormat::getBestPattern(
+ fLocale, timeSkeleton, status));
+ }
+
// difference:
// 0 means the best matched skeleton is the same as input skeleton
// 1 means the fields are the same, but field width are different
// 2 means the only difference between fields are v/z,
// -1 means there are other fields difference
+ // (this will happen, for instance, if the supplied skeleton has seconds,
+ // but no skeletons in the intervalFormats data do)
if ( differenceInfo == -1 ) {
// skeleton has different fields, not only v/z difference
return false;
@@ -1021,7 +1056,8 @@ DateIntervalFormat::setFallbackPattern(UCalendarDateFields field,
if ( U_FAILURE(status) ) {
return;
}
- UnicodeString pattern = fDtpng->getBestPattern(skeleton, status);
+ UnicodeString pattern = DateFormat::getBestPattern(
+ fLocale, skeleton, status);
if ( U_FAILURE(status) ) {
return;
}
@@ -1275,33 +1311,95 @@ DateIntervalFormat::splitPatternInto2Part(const UnicodeString& intervalPattern)
return (i - count);
}
+static const UChar bracketedZero[] = {0x7B,0x30,0x7D};
+static const UChar bracketedOne[] = {0x7B,0x31,0x7D};
+void
+DateIntervalFormat::adjustPosition(UnicodeString& combiningPattern, // has {0} and {1} in it
+ UnicodeString& pat0, FieldPosition& pos0, // pattern and pos corresponding to {0}
+ UnicodeString& pat1, FieldPosition& pos1, // pattern and pos corresponding to {1}
+ FieldPosition& posResult) {
+ int32_t index0 = combiningPattern.indexOf(bracketedZero, 3, 0);
+ int32_t index1 = combiningPattern.indexOf(bracketedOne, 3, 0);
+ if (index0 < 0 || index1 < 0) {
+ return;
+ }
+ int32_t placeholderLen = 3; // length of "{0}" or "{1}"
+ if (index0 < index1) {
+ if (pos0.getEndIndex() > 0) {
+ posResult.setBeginIndex(pos0.getBeginIndex() + index0);
+ posResult.setEndIndex(pos0.getEndIndex() + index0);
+ } else if (pos1.getEndIndex() > 0) {
+ // here index1 >= 3
+ index1 += pat0.length() - placeholderLen; // adjust for pat0 replacing {0}
+ posResult.setBeginIndex(pos1.getBeginIndex() + index1);
+ posResult.setEndIndex(pos1.getEndIndex() + index1);
+ }
+ } else {
+ if (pos1.getEndIndex() > 0) {
+ posResult.setBeginIndex(pos1.getBeginIndex() + index1);
+ posResult.setEndIndex(pos1.getEndIndex() + index1);
+ } else if (pos0.getEndIndex() > 0) {
+ // here index0 >= 3
+ index0 += pat1.length() - placeholderLen; // adjust for pat1 replacing {1}
+ posResult.setBeginIndex(pos0.getBeginIndex() + index0);
+ posResult.setEndIndex(pos0.getEndIndex() + index0);
+ }
+ }
+}
UnicodeString&
DateIntervalFormat::fallbackFormat(Calendar& fromCalendar,
Calendar& toCalendar,
+ UBool fromToOnSameDay, // new
UnicodeString& appendTo,
FieldPosition& pos,
UErrorCode& status) const {
if ( U_FAILURE(status) ) {
return appendTo;
}
+ UnicodeString fullPattern; // for saving the pattern in fDateFormat
+ UBool formatDatePlusTimeRange = (fromToOnSameDay && fDatePattern && fTimePattern);
// the fall back
// no need delete earlierDate and laterDate since they are adopted
+ if (formatDatePlusTimeRange) {
+ fDateFormat->toPattern(fullPattern); // save current pattern, restore later
+ fDateFormat->applyPattern(*fTimePattern);
+ }
+ FieldPosition otherPos;
+ otherPos.setField(pos.getField());
UnicodeString* earlierDate = new UnicodeString();
- *earlierDate = fDateFormat->format(fromCalendar, *earlierDate, pos);
+ fDateFormat->format(fromCalendar, *earlierDate, pos);
UnicodeString* laterDate = new UnicodeString();
- *laterDate = fDateFormat->format(toCalendar, *laterDate, pos);
+ fDateFormat->format(toCalendar, *laterDate, otherPos);
UnicodeString fallbackPattern;
fInfo->getFallbackIntervalPattern(fallbackPattern);
+ adjustPosition(fallbackPattern, *earlierDate, pos, *laterDate, otherPos, pos);
Formattable fmtArray[2];
fmtArray[0].adoptString(earlierDate);
fmtArray[1].adoptString(laterDate);
- UnicodeString fallback;
- MessageFormat::format(fallbackPattern, fmtArray, 2, fallback, status);
+ UnicodeString fallbackRange;
+ MessageFormat::format(fallbackPattern, fmtArray, 2, fallbackRange, status);
+ if ( U_SUCCESS(status) && formatDatePlusTimeRange ) {
+ // fallbackRange has just the time range, need to format the date part and combine that
+ fDateFormat->applyPattern(*fDatePattern);
+ UnicodeString* datePortion = new UnicodeString();
+ otherPos.setBeginIndex(0);
+ otherPos.setEndIndex(0);
+ fDateFormat->format(fromCalendar, *datePortion, otherPos);
+ adjustPosition(*fDateTimeFormat, fallbackRange, pos, *datePortion, otherPos, pos);
+ fmtArray[0].setString(fallbackRange); // {0} is time range
+ fmtArray[1].adoptString(datePortion); // {1} is single date portion
+ fallbackRange.remove();
+ MessageFormat::format(*fDateTimeFormat, fmtArray, 2, fallbackRange, status);
+ }
if ( U_SUCCESS(status) ) {
- appendTo.append(fallback);
+ appendTo.append(fallbackRange);
+ }
+ if (formatDatePlusTimeRange) {
+ // restore full pattern
+ fDateFormat->applyPattern(fullPattern);
}
return appendTo;
}
@@ -1431,8 +1529,7 @@ DateIntervalFormat::adjustFieldWidth(const UnicodeString& inputSkeleton,
void
-DateIntervalFormat::concatSingleDate2TimeInterval(const UChar* format,
- int32_t formatLen,
+DateIntervalFormat::concatSingleDate2TimeInterval(UnicodeString& format,
const UnicodeString& datePattern,
UCalendarDateFields field,
UErrorCode& status) {
@@ -1452,8 +1549,7 @@ DateIntervalFormat::concatSingleDate2TimeInterval(const UChar* format,
fmtArray[0].adoptString(timeIntervalPattern);
fmtArray[1].adoptString(dateStr);
UnicodeString combinedPattern;
- MessageFormat::format(UnicodeString(TRUE, format, formatLen),
- fmtArray, 2, combinedPattern, status);
+ MessageFormat::format(format, fmtArray, 2, combinedPattern, status);
if ( U_FAILURE(status) ) {
return;
}
« no previous file with comments | « source/i18n/dtfmtsym.cpp ('k') | source/i18n/dtitvinf.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698