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

Unified Diff: source/i18n/dtfmtsym.cpp

Issue 845603002: Update ICU to 54.1 step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@master
Patch Set: remove unusued directories Created 5 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/digitlst.cpp ('k') | source/i18n/dtitv_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/i18n/dtfmtsym.cpp
diff --git a/source/i18n/dtfmtsym.cpp b/source/i18n/dtfmtsym.cpp
index 270cfe1ea4bfcf2b2f3506ee1fa503543815a884..6dc1d4bcfa64ebd45f6531a15334155bac8d4dd8 100644
--- a/source/i18n/dtfmtsym.cpp
+++ b/source/i18n/dtfmtsym.cpp
@@ -1,6 +1,6 @@
/*
*******************************************************************************
-* Copyright (C) 1997-2013, International Business Machines Corporation and *
+* Copyright (C) 1997-2014, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*
@@ -28,7 +28,6 @@
#include "unicode/msgfmt.h"
#include "unicode/tznames.h"
#include "cpputils.h"
-#include "ucln_in.h"
#include "umutex.h"
#include "cmemory.h"
#include "cstring.h"
@@ -47,18 +46,18 @@
* resource data.
*/
-#define PATTERN_CHARS_LEN 34
+#define PATTERN_CHARS_LEN 35
/**
* Unlocalized date-time pattern characters. For example: 'y', 'd', etc. All
* locales use the same these unlocalized pattern characters.
*/
static const UChar gPatternChars[] = {
- // GyMdkHmsSEDFwWahKzYeugAZvcLQqVUOXx
+ // GyMdkHmsSEDFwWahKzYeugAZvcLQqVUOXxr
0x47, 0x79, 0x4D, 0x64, 0x6B, 0x48, 0x6D, 0x73, 0x53, 0x45,
0x44, 0x46, 0x77, 0x57, 0x61, 0x68, 0x4B, 0x7A, 0x59, 0x65,
0x75, 0x67, 0x41, 0x5A, 0x76, 0x63, 0x4c, 0x51, 0x71, 0x56,
- 0x55, 0x4F, 0x58, 0x78, 0
+ 0x55, 0x4F, 0x58, 0x78, 0x72, 0
};
/* length of an array */
@@ -158,6 +157,7 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(DateFormatSymbols)
static const char gErasTag[]="eras";
static const char gCyclicNameSetsTag[]="cyclicNameSets";
static const char gNameSetYearsTag[]="years";
+static const char gNameSetZodiacsTag[]="zodiacs";
static const char gMonthNamesTag[]="monthNames";
static const char gMonthPatternsTag[]="monthPatterns";
static const char gDayNamesTag[]="dayNames";
@@ -328,6 +328,12 @@ DateFormatSymbols::copyData(const DateFormatSymbols& other) {
fShortYearNames = NULL;
fShortYearNamesCount = 0;
}
+ if (other.fShortZodiacNames != NULL) {
+ assignArray(fShortZodiacNames, fShortZodiacNamesCount, other.fShortZodiacNames, other.fShortZodiacNamesCount);
+ } else {
+ fShortZodiacNames = NULL;
+ fShortZodiacNamesCount = 0;
+ }
if (other.fZoneStrings != NULL) {
fZoneStringsColCount = other.fZoneStringsColCount;
@@ -391,6 +397,7 @@ void DateFormatSymbols::dispose()
if (fStandaloneShortQuarters) delete[] fStandaloneShortQuarters;
if (fLeapMonthPatterns) delete[] fLeapMonthPatterns;
if (fShortYearNames) delete[] fShortYearNames;
+ if (fShortZodiacNames) delete[] fShortZodiacNames;
disposeZoneStrings();
}
@@ -461,6 +468,7 @@ DateFormatSymbols::operator==(const DateFormatSymbols& other) const
fStandaloneShortQuartersCount == other.fStandaloneShortQuartersCount &&
fLeapMonthPatternsCount == other.fLeapMonthPatternsCount &&
fShortYearNamesCount == other.fShortYearNamesCount &&
+ fShortZodiacNamesCount == other.fShortZodiacNamesCount &&
(uprv_memcmp(fCapitalization, other.fCapitalization, sizeof(fCapitalization))==0))
{
// Now compare the arrays themselves
@@ -487,7 +495,8 @@ DateFormatSymbols::operator==(const DateFormatSymbols& other) const
arrayCompare(fStandaloneQuarters, other.fStandaloneQuarters, fStandaloneQuartersCount) &&
arrayCompare(fStandaloneShortQuarters, other.fStandaloneShortQuarters, fStandaloneShortQuartersCount) &&
arrayCompare(fLeapMonthPatterns, other.fLeapMonthPatterns, fLeapMonthPatternsCount) &&
- arrayCompare(fShortYearNames, other.fShortYearNames, fShortYearNamesCount))
+ arrayCompare(fShortYearNames, other.fShortYearNames, fShortYearNamesCount) &&
+ arrayCompare(fShortZodiacNames, other.fShortZodiacNames, fShortZodiacNamesCount))
{
// Compare the contents of fZoneStrings
if (fZoneStrings == NULL && other.fZoneStrings == NULL) {
@@ -730,6 +739,50 @@ DateFormatSymbols::getLeapMonthPatterns(int32_t &count) const
return fLeapMonthPatterns;
}
+const UnicodeString*
+DateFormatSymbols::getYearNames(int32_t& count,
+ DtContextType /*ignored*/, DtWidthType /*ignored*/) const
+{
+ count = fShortYearNamesCount;
+ return fShortYearNames;
+}
+
+void
+DateFormatSymbols::setYearNames(const UnicodeString* yearNames, int32_t count,
+ DtContextType context, DtWidthType width)
+{
+ if (context == FORMAT && width == ABBREVIATED) {
+ if (fShortYearNames) {
+ delete[] fShortYearNames;
+ }
+ fShortYearNames = newUnicodeStringArray(count);
+ uprv_arrayCopy(yearNames, fShortYearNames, count);
+ fShortYearNamesCount = count;
+ }
+}
+
+const UnicodeString*
+DateFormatSymbols::getZodiacNames(int32_t& count,
+ DtContextType /*ignored*/, DtWidthType /*ignored*/) const
+{
+ count = fShortZodiacNamesCount;
+ return fShortZodiacNames;
+}
+
+void
+DateFormatSymbols::setZodiacNames(const UnicodeString* zodiacNames, int32_t count,
+ DtContextType context, DtWidthType width)
+{
+ if (context == FORMAT && width == ABBREVIATED) {
+ if (fShortZodiacNames) {
+ delete[] fShortZodiacNames;
+ }
+ fShortZodiacNames = newUnicodeStringArray(count);
+ uprv_arrayCopy(zodiacNames, fShortZodiacNames, count);
+ fShortZodiacNamesCount = count;
+ }
+}
+
//------------------------------------------------------
void
@@ -1198,31 +1251,41 @@ DateFormatSymbols::getPatternCharIndex(UChar c) {
}
}
-static const uint32_t kNumericFields =
- ((uint32_t)1 << UDAT_YEAR_FIELD) | // y
- ((uint32_t)1 << UDAT_MONTH_FIELD) | // M or MM
- ((uint32_t)1 << UDAT_DATE_FIELD) | // d
- ((uint32_t)1 << UDAT_HOUR_OF_DAY1_FIELD) | // k
- ((uint32_t)1 << UDAT_HOUR_OF_DAY0_FIELD) | // H
- ((uint32_t)1 << UDAT_MINUTE_FIELD) | // m
- ((uint32_t)1 << UDAT_SECOND_FIELD) | // s
- ((uint32_t)1 << UDAT_FRACTIONAL_SECOND_FIELD) | // S
- ((uint32_t)1 << UDAT_DAY_OF_YEAR_FIELD) | // D
- ((uint32_t)1 << UDAT_DAY_OF_WEEK_IN_MONTH_FIELD) | // F
- ((uint32_t)1 << UDAT_WEEK_OF_YEAR_FIELD) | // w
- ((uint32_t)1 << UDAT_WEEK_OF_MONTH_FIELD) | // W
- ((uint32_t)1 << UDAT_HOUR1_FIELD) | // h
- ((uint32_t)1 << UDAT_HOUR0_FIELD) | // K
- ((uint32_t)1 << UDAT_YEAR_WOY_FIELD) | // Y
- ((uint32_t)1 << UDAT_DOW_LOCAL_FIELD) | // e
- ((uint32_t)1 << UDAT_EXTENDED_YEAR_FIELD); // u
+static const uint64_t kNumericFieldsAlways =
+ ((uint64_t)1 << UDAT_YEAR_FIELD) | // y
+ ((uint64_t)1 << UDAT_DATE_FIELD) | // d
+ ((uint64_t)1 << UDAT_HOUR_OF_DAY1_FIELD) | // k
+ ((uint64_t)1 << UDAT_HOUR_OF_DAY0_FIELD) | // H
+ ((uint64_t)1 << UDAT_MINUTE_FIELD) | // m
+ ((uint64_t)1 << UDAT_SECOND_FIELD) | // s
+ ((uint64_t)1 << UDAT_FRACTIONAL_SECOND_FIELD) | // S
+ ((uint64_t)1 << UDAT_DAY_OF_YEAR_FIELD) | // D
+ ((uint64_t)1 << UDAT_DAY_OF_WEEK_IN_MONTH_FIELD) | // F
+ ((uint64_t)1 << UDAT_WEEK_OF_YEAR_FIELD) | // w
+ ((uint64_t)1 << UDAT_WEEK_OF_MONTH_FIELD) | // W
+ ((uint64_t)1 << UDAT_HOUR1_FIELD) | // h
+ ((uint64_t)1 << UDAT_HOUR0_FIELD) | // K
+ ((uint64_t)1 << UDAT_YEAR_WOY_FIELD) | // Y
+ ((uint64_t)1 << UDAT_EXTENDED_YEAR_FIELD) | // u
+ ((uint64_t)1 << UDAT_JULIAN_DAY_FIELD) | // g
+ ((uint64_t)1 << UDAT_MILLISECONDS_IN_DAY_FIELD) | // A
+ ((uint64_t)1 << UDAT_RELATED_YEAR_FIELD); // r
+
+static const uint64_t kNumericFieldsForCount12 =
+ ((uint64_t)1 << UDAT_MONTH_FIELD) | // M or MM
+ ((uint64_t)1 << UDAT_DOW_LOCAL_FIELD) | // e or ee
+ ((uint64_t)1 << UDAT_STANDALONE_DAY_FIELD) | // c or cc
+ ((uint64_t)1 << UDAT_STANDALONE_MONTH_FIELD) | // L or LL
+ ((uint64_t)1 << UDAT_QUARTER_FIELD) | // Q or QQ
+ ((uint64_t)1 << UDAT_STANDALONE_QUARTER_FIELD); // q or qq
UBool U_EXPORT2
DateFormatSymbols::isNumericField(UDateFormatField f, int32_t count) {
- return
- f != UDAT_FIELD_COUNT &&
- (kNumericFields & ((uint32_t)1 << f)) != 0 &&
- (f != UDAT_MONTH_FIELD || count < 3);
+ if (f == UDAT_FIELD_COUNT) {
+ return FALSE;
+ }
+ uint64_t flag = ((uint64_t)1 << f);
+ return ((kNumericFieldsAlways & flag) != 0 || ((kNumericFieldsForCount12 & flag) != 0 && count < 3));
}
UBool U_EXPORT2
@@ -1379,6 +1442,8 @@ DateFormatSymbols::initializeData(const Locale& locale, const char *type, UError
fLeapMonthPatternsCount = 0;
fShortYearNames = NULL;
fShortYearNamesCount = 0;
+ fShortZodiacNames = NULL;
+ fShortZodiacNamesCount = 0;
fZoneStringsRowCount = 0;
fZoneStringsColCount = 0;
fZoneStrings = NULL;
@@ -1430,6 +1495,21 @@ DateFormatSymbols::initializeData(const Locale& locale, const char *type, UError
initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternStandaloneNarrow, calData.getByKey3(gMonthPatternsTag, gNamesStandaloneTag, gNamesNarrowTag, tempStatus), tempStatus);
initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternNumeric, calData.getByKey3(gMonthPatternsTag, gNamesNumericTag, gNamesAllTag, tempStatus), tempStatus);
if (U_SUCCESS(tempStatus)) {
+ // Hack to fix bad C inheritance for dangi monthPatterns (OK in J); this should be handled by aliases in root, but isn't.
+ // The ordering of the following statements is important.
+ if (fLeapMonthPatterns[kLeapMonthPatternFormatAbbrev].isEmpty()) {
+ fLeapMonthPatterns[kLeapMonthPatternFormatAbbrev].setTo(fLeapMonthPatterns[kLeapMonthPatternFormatWide]);
+ };
+ if (fLeapMonthPatterns[kLeapMonthPatternFormatNarrow].isEmpty()) {
+ fLeapMonthPatterns[kLeapMonthPatternFormatNarrow].setTo(fLeapMonthPatterns[kLeapMonthPatternStandaloneNarrow]);
+ };
+ if (fLeapMonthPatterns[kLeapMonthPatternStandaloneWide].isEmpty()) {
+ fLeapMonthPatterns[kLeapMonthPatternStandaloneWide].setTo(fLeapMonthPatterns[kLeapMonthPatternFormatWide]);
+ };
+ if (fLeapMonthPatterns[kLeapMonthPatternStandaloneAbbrev].isEmpty()) {
+ fLeapMonthPatterns[kLeapMonthPatternStandaloneAbbrev].setTo(fLeapMonthPatterns[kLeapMonthPatternFormatAbbrev]);
+ };
+ // end of hack
fLeapMonthPatternsCount = kMonthPatternsCount;
} else {
delete[] fLeapMonthPatterns;
@@ -1454,6 +1534,19 @@ DateFormatSymbols::initializeData(const Locale& locale, const char *type, UError
}
ures_close(nameSetYears);
}
+ UResourceBundle *nameSetZodiacs = ures_getByKeyWithFallback(cyclicNameSets, gNameSetZodiacsTag, NULL, &tempStatus);
+ if (U_SUCCESS(tempStatus)) {
+ UResourceBundle *nameSetZodiacsFmt = ures_getByKeyWithFallback(nameSetZodiacs, gNamesFormatTag, NULL, &tempStatus);
+ if (U_SUCCESS(tempStatus)) {
+ UResourceBundle *nameSetZodiacsFmtAbbrev = ures_getByKeyWithFallback(nameSetZodiacsFmt, gNamesAbbrTag, NULL, &tempStatus);
+ if (U_SUCCESS(tempStatus)) {
+ initField(&fShortZodiacNames, fShortZodiacNamesCount, nameSetZodiacsFmtAbbrev, tempStatus);
+ ures_close(nameSetZodiacsFmtAbbrev);
+ }
+ ures_close(nameSetZodiacsFmt);
+ }
+ ures_close(nameSetZodiacs);
+ }
}
tempStatus = U_ZERO_ERROR;
« no previous file with comments | « source/i18n/digitlst.cpp ('k') | source/i18n/dtitv_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698