16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 1996-2013, International Business Machines 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Corporation and others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/udat.h" 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uloc.h" 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/datefmt.h" 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/timezone.h" 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/smpdtfmt.h" 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/fieldpos.h" 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/parsepos.h" 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/calendar.h" 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/numfmt.h" 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/dtfmtsym.h" 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ustring.h" 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/udisplaycontext.h" 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cpputils.h" 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "reldtfmt.h" 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "umutex.h" 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_USE 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Verify that fmt is a SimpleDateFormat. Invalid error if not. 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param fmt the UDateFormat, definitely a DateFormat, maybe something else 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status error code, will be set to failure if there is a familure or the fmt is NULL. 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void verifyIsSimpleDateFormat(const UDateFormat* fmt, UErrorCode *status) { 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(*status) && 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dynamic_cast<const SimpleDateFormat*>(reinterpret_cast<const DateFormat*>(fmt))==NULL) { 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *status = U_ILLEGAL_ARGUMENT_ERROR; 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// This mirrors the correspondence between the 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// SimpleDateFormat::fgPatternIndexToDateFormatField and 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// SimpleDateFormat::fgPatternIndexToCalendarField arrays. 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UCalendarDateFields gDateFieldMapping[] = { 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_ERA, // UDAT_ERA_FIELD = 0 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_YEAR, // UDAT_YEAR_FIELD = 1 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_MONTH, // UDAT_MONTH_FIELD = 2 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_DATE, // UDAT_DATE_FIELD = 3 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_HOUR_OF_DAY, // UDAT_HOUR_OF_DAY1_FIELD = 4 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_HOUR_OF_DAY, // UDAT_HOUR_OF_DAY0_FIELD = 5 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_MINUTE, // UDAT_MINUTE_FIELD = 6 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_SECOND, // UDAT_SECOND_FIELD = 7 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_MILLISECOND, // UDAT_FRACTIONAL_SECOND_FIELD = 8 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_DAY_OF_WEEK, // UDAT_DAY_OF_WEEK_FIELD = 9 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_DAY_OF_YEAR, // UDAT_DAY_OF_YEAR_FIELD = 10 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_DAY_OF_WEEK_IN_MONTH, // UDAT_DAY_OF_WEEK_IN_MONTH_FIELD = 11 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_WEEK_OF_YEAR, // UDAT_WEEK_OF_YEAR_FIELD = 12 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_WEEK_OF_MONTH, // UDAT_WEEK_OF_MONTH_FIELD = 13 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_AM_PM, // UDAT_AM_PM_FIELD = 14 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_HOUR, // UDAT_HOUR1_FIELD = 15 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_HOUR, // UDAT_HOUR0_FIELD = 16 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_ZONE_OFFSET, // UDAT_TIMEZONE_FIELD = 17 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_YEAR_WOY, // UDAT_YEAR_WOY_FIELD = 18 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_DOW_LOCAL, // UDAT_DOW_LOCAL_FIELD = 19 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_EXTENDED_YEAR, // UDAT_EXTENDED_YEAR_FIELD = 20 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_JULIAN_DAY, // UDAT_JULIAN_DAY_FIELD = 21 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_MILLISECONDS_IN_DAY, // UDAT_MILLISECONDS_IN_DAY_FIELD = 22 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_ZONE_OFFSET, // UDAT_TIMEZONE_RFC_FIELD = 23 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // UCAL_DST_OFFSET also 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_ZONE_OFFSET, // UDAT_TIMEZONE_GENERIC_FIELD = 24 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_DOW_LOCAL, // UDAT_STANDALONE_DAY_FIELD = 25 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_MONTH, // UDAT_STANDALONE_MONTH_FIELD = 26 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_MONTH, // UDAT_QUARTER_FIELD = 27 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_MONTH, // UDAT_STANDALONE_QUARTER_FIELD = 28 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_ZONE_OFFSET, // UDAT_TIMEZONE_SPECIAL_FIELD = 29 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_YEAR, // UDAT_YEAR_NAME_FIELD = 30 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCAL_FIELD_COUNT, // UDAT_FIELD_COUNT = 31 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // UCAL_IS_LEAP_MONTH is not the target of a mapping 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI UCalendarDateFields U_EXPORT2 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_toCalendarDateField(UDateFormatField field) { 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return gDateFieldMapping[field]; 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* For now- one opener. */ 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UDateFormatOpener gOpener = NULL; 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_INTERNAL void U_EXPORT2 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_registerOpener(UDateFormatOpener opener, UErrorCode *status) 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*status)) return; 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org umtx_lock(NULL); 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(gOpener==NULL) { 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gOpener = opener; 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *status = U_ILLEGAL_ARGUMENT_ERROR; 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org umtx_unlock(NULL); 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_INTERNAL UDateFormatOpener U_EXPORT2 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_unregisterOpener(UDateFormatOpener opener, UErrorCode *status) 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*status)) return NULL; 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDateFormatOpener oldOpener = NULL; 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org umtx_lock(NULL); 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(gOpener==NULL || gOpener!=opener) { 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *status = U_ILLEGAL_ARGUMENT_ERROR; 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org oldOpener=gOpener; 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org gOpener=NULL; 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org umtx_unlock(NULL); 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return oldOpener; 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI UDateFormat* U_EXPORT2 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_open(UDateFormatStyle timeStyle, 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDateFormatStyle dateStyle, 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *locale, 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *tzID, 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t tzIDLength, 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *pattern, 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t patternLength, 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode *status) 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormat *fmt; 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*status)) { 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 0; 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(gOpener!=NULL) { // if it's registered 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt = (DateFormat*) (*gOpener)(timeStyle,dateStyle,locale,tzID,tzIDLength,pattern,patternLength,status); 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(fmt!=NULL) { 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return (UDateFormat*)fmt; 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } // else fall through. 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(timeStyle != UDAT_PATTERN) { 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(locale == 0) { 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt = DateFormat::createDateTimeInstance((DateFormat::EStyle)dateStyle, 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (DateFormat::EStyle)timeStyle); 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt = DateFormat::createDateTimeInstance((DateFormat::EStyle)dateStyle, 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (DateFormat::EStyle)timeStyle, 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Locale(locale)); 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString pat((UBool)(patternLength == -1), pattern, patternLength); 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(locale == 0) { 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt = new SimpleDateFormat(pat, *status); 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt = new SimpleDateFormat(pat, Locale(locale), *status); 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(fmt == 0) { 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *status = U_MEMORY_ALLOCATION_ERROR; 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 0; 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(tzID != 0) { 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TimeZone *zone = TimeZone::createTimeZone(UnicodeString((UBool)(tzIDLength == -1), tzID, tzIDLength)); 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(zone == 0) { 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *status = U_MEMORY_ALLOCATION_ERROR; 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete fmt; 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 0; 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt->adoptTimeZone(zone); 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return (UDateFormat*)fmt; 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI void U_EXPORT2 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_close(UDateFormat* format) 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete (DateFormat*)format; 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI UDateFormat* U_EXPORT2 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_clone(const UDateFormat *fmt, 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode *status) 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*status)) return 0; 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Format *res = ((DateFormat*)fmt)->clone(); 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(res == 0) { 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *status = U_MEMORY_ALLOCATION_ERROR; 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 0; 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return (UDateFormat*) res; 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int32_t U_EXPORT2 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_format( const UDateFormat* format, 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate dateToFormat, 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar* result, 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t resultLength, 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UFieldPosition* position, 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode* status) 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*status)) return -1; 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString res; 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!(result==NULL && resultLength==0)) { 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // NULL destination for pure preflighting: empty dummy string 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // otherwise, alias the destination buffer 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res.setTo(result, 0, resultLength); 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FieldPosition fp; 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(position != 0) 2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fp.setField(position->field); 2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ((DateFormat*)format)->format(dateToFormat, res, fp); 2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(position != 0) { 2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org position->beginIndex = fp.getBeginIndex(); 2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org position->endIndex = fp.getEndIndex(); 2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return res.extract(result, resultLength, *status); 2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI UDate U_EXPORT2 2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_parse( const UDateFormat* format, 2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar* text, 2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t textLength, 2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t *parsePos, 2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode *status) 2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*status)) return (UDate)0; 2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString src((UBool)(textLength == -1), text, textLength); 2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ParsePosition pp; 2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t stackParsePos = 0; 2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate res; 2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(parsePos == NULL) { 2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org parsePos = &stackParsePos; 2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pp.setIndex(*parsePos); 2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res = ((DateFormat*)format)->parse(src, pp); 2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(pp.getErrorIndex() == -1) 2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *parsePos = pp.getIndex(); 2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *parsePos = pp.getErrorIndex(); 2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *status = U_PARSE_ERROR; 2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return res; 2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI void U_EXPORT2 2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_parseCalendar(const UDateFormat* format, 2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCalendar* calendar, 2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar* text, 2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t textLength, 2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t *parsePos, 2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode *status) 2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*status)) return; 2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString src((UBool)(textLength == -1), text, textLength); 2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ParsePosition pp; 2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(parsePos != 0) 2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pp.setIndex(*parsePos); 2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ((DateFormat*)format)->parse(src, *(Calendar*)calendar, pp); 2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(parsePos != 0) { 2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(pp.getErrorIndex() == -1) 2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *parsePos = pp.getIndex(); 2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *parsePos = pp.getErrorIndex(); 2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *status = U_PARSE_ERROR; 2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI UBool U_EXPORT2 2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_isLenient(const UDateFormat* fmt) 2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return ((DateFormat*)fmt)->isLenient(); 3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI void U_EXPORT2 3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_setLenient( UDateFormat* fmt, 3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool isLenient) 3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ((DateFormat*)fmt)->setLenient(isLenient); 3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI const UCalendar* U_EXPORT2 3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_getCalendar(const UDateFormat* fmt) 3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return (const UCalendar*) ((DateFormat*)fmt)->getCalendar(); 3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI void U_EXPORT2 3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_setCalendar(UDateFormat* fmt, 3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UCalendar* calendarToSet) 3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ((DateFormat*)fmt)->setCalendar(*((Calendar*)calendarToSet)); 3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI const UNumberFormat* U_EXPORT2 3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_getNumberFormat(const UDateFormat* fmt) 3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return (const UNumberFormat*) ((DateFormat*)fmt)->getNumberFormat(); 3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI void U_EXPORT2 3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_setNumberFormat(UDateFormat* fmt, 3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UNumberFormat* numberFormatToSet) 3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ((DateFormat*)fmt)->setNumberFormat(*((NumberFormat*)numberFormatToSet)); 3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI const char* U_EXPORT2 3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_getAvailable(int32_t index) 3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return uloc_getAvailable(index); 3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int32_t U_EXPORT2 3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_countAvailable() 3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return uloc_countAvailable(); 3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI UDate U_EXPORT2 3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_get2DigitYearStart( const UDateFormat *fmt, 3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode *status) 3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org verifyIsSimpleDateFormat(fmt, status); 3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*status)) return (UDate)0; 3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return ((SimpleDateFormat*)fmt)->get2DigitYearStart(*status); 3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI void U_EXPORT2 3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_set2DigitYearStart( UDateFormat *fmt, 3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate d, 3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode *status) 3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org verifyIsSimpleDateFormat(fmt, status); 3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*status)) return; 3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ((SimpleDateFormat*)fmt)->set2DigitYearStart(d, *status); 3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int32_t U_EXPORT2 3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_toPattern( const UDateFormat *fmt, 3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool localized, 3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *result, 3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t resultLength, 3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode *status) 3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*status)) return -1; 3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString res; 3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!(result==NULL && resultLength==0)) { 3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // NULL destination for pure preflighting: empty dummy string 3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // otherwise, alias the destination buffer 3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res.setTo(result, 0, resultLength); 3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const DateFormat *df=reinterpret_cast<const DateFormat *>(fmt); 3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const SimpleDateFormat *sdtfmt=dynamic_cast<const SimpleDateFormat *>(df); 3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const RelativeDateFormat *reldtfmt; 3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (sdtfmt!=NULL) { 3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(localized) 3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sdtfmt->toLocalizedPattern(res, *status); 3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sdtfmt->toPattern(res); 3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if (!localized && (reldtfmt=dynamic_cast<const RelativeDateFormat *>(df))!=NULL) { 3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org reldtfmt->toPattern(res, *status); 3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *status = U_ILLEGAL_ARGUMENT_ERROR; 3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return -1; 3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return res.extract(result, resultLength, *status); 3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// TODO: should this take an UErrorCode? 4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// A: Yes. Of course. 4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI void U_EXPORT2 4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_applyPattern( UDateFormat *format, 4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool localized, 4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *pattern, 4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t patternLength) 4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString pat((UBool)(patternLength == -1), pattern, patternLength); 4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org verifyIsSimpleDateFormat(format, &status); 4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(localized) 4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ((SimpleDateFormat*)format)->applyLocalizedPattern(pat, status); 4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ((SimpleDateFormat*)format)->applyPattern(pat); 4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int32_t U_EXPORT2 4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_getSymbols(const UDateFormat *fmt, 4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDateFormatSymbolType type, 4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t index, 4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *result, 4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t resultLength, 4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode *status) 4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const DateFormatSymbols *syms; 4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const SimpleDateFormat* sdtfmt; 4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const RelativeDateFormat* rdtfmt; 4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ((sdtfmt = dynamic_cast<const SimpleDateFormat*>(reinterpret_cast<const DateFormat*>(fmt))) != NULL) { 4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms = sdtfmt->getDateFormatSymbols(); 4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if ((rdtfmt = dynamic_cast<const RelativeDateFormat*>(reinterpret_cast<const DateFormat*>(fmt))) != NULL) { 4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms = rdtfmt->getDateFormatSymbols(); 4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return -1; 4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t count; 4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString *res = NULL; 4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch(type) { 4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_ERAS: 4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res = syms->getEras(count); 4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_ERA_NAMES: 4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res = syms->getEraNames(count); 4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_MONTHS: 4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res = syms->getMonths(count); 4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_SHORT_MONTHS: 4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res = syms->getShortMonths(count); 4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_WEEKDAYS: 4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res = syms->getWeekdays(count); 4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_SHORT_WEEKDAYS: 4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res = syms->getShortWeekdays(count); 4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_AM_PMS: 4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res = syms->getAmPmStrings(count); 4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_LOCALIZED_CHARS: 4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString res1; 4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!(result==NULL && resultLength==0)) { 4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // NULL destination for pure preflighting: empty dummy string 4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // otherwise, alias the destination buffer 4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res1.setTo(result, 0, resultLength); 4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms->getLocalPatternChars(res1); 4826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return res1.extract(result, resultLength, *status); 4836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_NARROW_MONTHS: 4866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res = syms->getMonths(count, DateFormatSymbols::FORMAT, DateFormatSymbols::NARROW); 4876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 4886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_SHORTER_WEEKDAYS: 4906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res = syms->getWeekdays(count, DateFormatSymbols::FORMAT, DateFormatSymbols::SHORT); 4916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 4926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_NARROW_WEEKDAYS: 4946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res = syms->getWeekdays(count, DateFormatSymbols::FORMAT, DateFormatSymbols::NARROW); 4956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 4966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_MONTHS: 4986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res = syms->getMonths(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE); 4996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 5006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_SHORT_MONTHS: 5026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res = syms->getMonths(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED); 5036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 5046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_NARROW_MONTHS: 5066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res = syms->getMonths(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::NARROW); 5076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 5086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_WEEKDAYS: 5106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res = syms->getWeekdays(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE); 5116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 5126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_SHORT_WEEKDAYS: 5146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res = syms->getWeekdays(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED); 5156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 5166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_SHORTER_WEEKDAYS: 5186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res = syms->getWeekdays(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::SHORT); 5196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 5206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_NARROW_WEEKDAYS: 5226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res = syms->getWeekdays(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::NARROW); 5236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 5246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_QUARTERS: 5266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res = syms->getQuarters(count, DateFormatSymbols::FORMAT, DateFormatSymbols::WIDE); 5276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 5286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_SHORT_QUARTERS: 5306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res = syms->getQuarters(count, DateFormatSymbols::FORMAT, DateFormatSymbols::ABBREVIATED); 5316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 5326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_QUARTERS: 5346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res = syms->getQuarters(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE); 5356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 5366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_SHORT_QUARTERS: 5386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res = syms->getQuarters(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED); 5396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 5406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(index < count) { 5446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return res[index].extract(result, resultLength, *status); 5456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 0; 5476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 5486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// TODO: also needs an errorCode. 5506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int32_t U_EXPORT2 5516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_countSymbols( const UDateFormat *fmt, 5526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDateFormatSymbolType type) 5536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 5546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const DateFormatSymbols *syms; 5556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const SimpleDateFormat* sdtfmt; 5566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const RelativeDateFormat* rdtfmt; 5576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ((sdtfmt = dynamic_cast<const SimpleDateFormat*>(reinterpret_cast<const DateFormat*>(fmt))) != NULL) { 5586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms = sdtfmt->getDateFormatSymbols(); 5596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if ((rdtfmt = dynamic_cast<const RelativeDateFormat*>(reinterpret_cast<const DateFormat*>(fmt))) != NULL) { 5606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms = rdtfmt->getDateFormatSymbols(); 5616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 5626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 0; 5636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t count = 0; 5656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch(type) { 5676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_ERAS: 5686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms->getEras(count); 5696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 5706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_MONTHS: 5726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms->getMonths(count); 5736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 5746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_SHORT_MONTHS: 5766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms->getShortMonths(count); 5776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 5786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_WEEKDAYS: 5806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms->getWeekdays(count); 5816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 5826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_SHORT_WEEKDAYS: 5846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms->getShortWeekdays(count); 5856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 5866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_AM_PMS: 5886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms->getAmPmStrings(count); 5896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 5906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_LOCALIZED_CHARS: 5926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count = 1; 5936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 5946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_ERA_NAMES: 5966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms->getEraNames(count); 5976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 5986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_NARROW_MONTHS: 6006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms->getMonths(count, DateFormatSymbols::FORMAT, DateFormatSymbols::NARROW); 6016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 6026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_SHORTER_WEEKDAYS: 6046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms->getWeekdays(count, DateFormatSymbols::FORMAT, DateFormatSymbols::SHORT); 6056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 6066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_NARROW_WEEKDAYS: 6086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms->getWeekdays(count, DateFormatSymbols::FORMAT, DateFormatSymbols::NARROW); 6096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 6106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_MONTHS: 6126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms->getMonths(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE); 6136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 6146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_SHORT_MONTHS: 6166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms->getMonths(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED); 6176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 6186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_NARROW_MONTHS: 6206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms->getMonths(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::NARROW); 6216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 6226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_WEEKDAYS: 6246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms->getWeekdays(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE); 6256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 6266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_SHORT_WEEKDAYS: 6286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms->getWeekdays(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED); 6296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 6306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_SHORTER_WEEKDAYS: 6326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms->getWeekdays(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::SHORT); 6336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 6346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_NARROW_WEEKDAYS: 6366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms->getWeekdays(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::NARROW); 6376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 6386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_QUARTERS: 6406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms->getQuarters(count, DateFormatSymbols::FORMAT, DateFormatSymbols::WIDE); 6416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 6426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_SHORT_QUARTERS: 6446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms->getQuarters(count, DateFormatSymbols::FORMAT, DateFormatSymbols::ABBREVIATED); 6456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 6466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_QUARTERS: 6486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms->getQuarters(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE); 6496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 6506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_SHORT_QUARTERS: 6526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org syms->getQuarters(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED); 6536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 6546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return count; 6586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 6596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN 6616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 6636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This DateFormatSymbolsSingleSetter class is a friend of DateFormatSymbols 6646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * solely for the purpose of avoiding to clone the array of strings 6656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * just to modify one of them and then setting all of them back. 6666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For example, the old code looked like this: 6676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * case UDAT_MONTHS: 6686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * res = syms->getMonths(count); 6696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * array = new UnicodeString[count]; 6706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if(array == 0) { 6716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * *status = U_MEMORY_ALLOCATION_ERROR; 6726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * return; 6736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * } 6746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * uprv_arrayCopy(res, array, count); 6756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if(index < count) 6766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * array[index] = val; 6776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * syms->setMonths(array, count); 6786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * break; 6796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 6806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Even worse, the old code actually cloned the entire DateFormatSymbols object, 6816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * cloned one value array, changed one value, and then made the SimpleDateFormat 6826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * replace its DateFormatSymbols object with the new one. 6836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 6846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * markus 2002-oct-14 6856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass DateFormatSymbolsSingleSetter /* not : public UObject because all methods are static */ { 6876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic: 6886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 6896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(UnicodeString *array, int32_t count, int32_t index, 6906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 6916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 6926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(array!=NULL) { 6936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(index>=count) { 6946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_INDEX_OUTOFBOUNDS_ERROR; 6956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(value==NULL) { 6966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ILLEGAL_ARGUMENT_ERROR; 6976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 6986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org array[index].setTo(value, valueLength); 6996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 7046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setEra(DateFormatSymbols *syms, int32_t index, 7056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 7066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 7076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(syms->fEras, syms->fErasCount, index, value, valueLength, errorCode); 7086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 7116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setEraName(DateFormatSymbols *syms, int32_t index, 7126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 7136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 7146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(syms->fEraNames, syms->fEraNamesCount, index, value, valueLength, errorCode); 7156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 7186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setMonth(DateFormatSymbols *syms, int32_t index, 7196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 7206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 7216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(syms->fMonths, syms->fMonthsCount, index, value, valueLength, errorCode); 7226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 7256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setShortMonth(DateFormatSymbols *syms, int32_t index, 7266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 7276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 7286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(syms->fShortMonths, syms->fShortMonthsCount, index, value, valueLength, errorCode); 7296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 7326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setNarrowMonth(DateFormatSymbols *syms, int32_t index, 7336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 7346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 7356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(syms->fNarrowMonths, syms->fNarrowMonthsCount, index, value, valueLength, errorCode); 7366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 7396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setStandaloneMonth(DateFormatSymbols *syms, int32_t index, 7406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 7416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 7426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(syms->fStandaloneMonths, syms->fStandaloneMonthsCount, index, value, valueLength, errorCode); 7436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 7466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setStandaloneShortMonth(DateFormatSymbols *syms, int32_t index, 7476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 7486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 7496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(syms->fStandaloneShortMonths, syms->fStandaloneShortMonthsCount, index, value, valueLength, errorCode); 7506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 7536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setStandaloneNarrowMonth(DateFormatSymbols *syms, int32_t index, 7546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 7556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 7566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(syms->fStandaloneNarrowMonths, syms->fStandaloneNarrowMonthsCount, index, value, valueLength, errorCode); 7576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 7606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setWeekday(DateFormatSymbols *syms, int32_t index, 7616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 7626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 7636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(syms->fWeekdays, syms->fWeekdaysCount, index, value, valueLength, errorCode); 7646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 7676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setShortWeekday(DateFormatSymbols *syms, int32_t index, 7686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 7696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 7706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(syms->fShortWeekdays, syms->fShortWeekdaysCount, index, value, valueLength, errorCode); 7716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 7746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setShorterWeekday(DateFormatSymbols *syms, int32_t index, 7756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 7766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 7776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(syms->fShorterWeekdays, syms->fShorterWeekdaysCount, index, value, valueLength, errorCode); 7786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 7816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setNarrowWeekday(DateFormatSymbols *syms, int32_t index, 7826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 7836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 7846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(syms->fNarrowWeekdays, syms->fNarrowWeekdaysCount, index, value, valueLength, errorCode); 7856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 7886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setStandaloneWeekday(DateFormatSymbols *syms, int32_t index, 7896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 7906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 7916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(syms->fStandaloneWeekdays, syms->fStandaloneWeekdaysCount, index, value, valueLength, errorCode); 7926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 7956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setStandaloneShortWeekday(DateFormatSymbols *syms, int32_t index, 7966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 7976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 7986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(syms->fStandaloneShortWeekdays, syms->fStandaloneShortWeekdaysCount, index, value, valueLength, errorCode); 7996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 8026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setStandaloneShorterWeekday(DateFormatSymbols *syms, int32_t index, 8036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 8046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 8056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(syms->fStandaloneShorterWeekdays, syms->fStandaloneShorterWeekdaysCount, index, value, valueLength, errorCode); 8066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 8096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setStandaloneNarrowWeekday(DateFormatSymbols *syms, int32_t index, 8106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 8116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 8126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(syms->fStandaloneNarrowWeekdays, syms->fStandaloneNarrowWeekdaysCount, index, value, valueLength, errorCode); 8136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 8166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setQuarter(DateFormatSymbols *syms, int32_t index, 8176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 8186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 8196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(syms->fQuarters, syms->fQuartersCount, index, value, valueLength, errorCode); 8206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 8236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setShortQuarter(DateFormatSymbols *syms, int32_t index, 8246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 8256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 8266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(syms->fShortQuarters, syms->fShortQuartersCount, index, value, valueLength, errorCode); 8276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 8306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setStandaloneQuarter(DateFormatSymbols *syms, int32_t index, 8316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 8326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 8336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(syms->fStandaloneQuarters, syms->fStandaloneQuartersCount, index, value, valueLength, errorCode); 8346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 8376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setStandaloneShortQuarter(DateFormatSymbols *syms, int32_t index, 8386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 8396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 8406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(syms->fStandaloneShortQuarters, syms->fStandaloneShortQuartersCount, index, value, valueLength, errorCode); 8416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 8446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setAmPm(DateFormatSymbols *syms, int32_t index, 8456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 8466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 8476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(syms->fAmPms, syms->fAmPmsCount, index, value, valueLength, errorCode); 8486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static void 8516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setLocalPatternChars(DateFormatSymbols *syms, 8526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *value, int32_t valueLength, UErrorCode &errorCode) 8536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 8546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setSymbol(&syms->fLocalPatternChars, 1, 0, value, valueLength, errorCode); 8556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 8576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END 8596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI void U_EXPORT2 8616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_setSymbols( UDateFormat *format, 8626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDateFormatSymbolType type, 8636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t index, 8646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *value, 8656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t valueLength, 8666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode *status) 8676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 8686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org verifyIsSimpleDateFormat(format, status); 8696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*status)) return; 8706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbols *syms = (DateFormatSymbols *)((SimpleDateFormat *)format)->getDateFormatSymbols(); 8726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch(type) { 8746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_ERAS: 8756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbolsSingleSetter::setEra(syms, index, value, valueLength, *status); 8766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 8776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_ERA_NAMES: 8796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbolsSingleSetter::setEraName(syms, index, value, valueLength, *status); 8806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 8816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_MONTHS: 8836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbolsSingleSetter::setMonth(syms, index, value, valueLength, *status); 8846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 8856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_SHORT_MONTHS: 8876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbolsSingleSetter::setShortMonth(syms, index, value, valueLength, *status); 8886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 8896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_NARROW_MONTHS: 8916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbolsSingleSetter::setNarrowMonth(syms, index, value, valueLength, *status); 8926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 8936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_MONTHS: 8956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbolsSingleSetter::setStandaloneMonth(syms, index, value, valueLength, *status); 8966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 8976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_SHORT_MONTHS: 8996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbolsSingleSetter::setStandaloneShortMonth(syms, index, value, valueLength, *status); 9006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_NARROW_MONTHS: 9036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbolsSingleSetter::setStandaloneNarrowMonth(syms, index, value, valueLength, *status); 9046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_WEEKDAYS: 9076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbolsSingleSetter::setWeekday(syms, index, value, valueLength, *status); 9086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_SHORT_WEEKDAYS: 9116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbolsSingleSetter::setShortWeekday(syms, index, value, valueLength, *status); 9126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_SHORTER_WEEKDAYS: 9156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbolsSingleSetter::setShorterWeekday(syms, index, value, valueLength, *status); 9166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_NARROW_WEEKDAYS: 9196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbolsSingleSetter::setNarrowWeekday(syms, index, value, valueLength, *status); 9206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_WEEKDAYS: 9236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbolsSingleSetter::setStandaloneWeekday(syms, index, value, valueLength, *status); 9246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_SHORT_WEEKDAYS: 9276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbolsSingleSetter::setStandaloneShortWeekday(syms, index, value, valueLength, *status); 9286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_SHORTER_WEEKDAYS: 9316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbolsSingleSetter::setStandaloneShorterWeekday(syms, index, value, valueLength, *status); 9326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_NARROW_WEEKDAYS: 9356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbolsSingleSetter::setStandaloneNarrowWeekday(syms, index, value, valueLength, *status); 9366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_QUARTERS: 9396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbolsSingleSetter::setQuarter(syms, index, value, valueLength, *status); 9406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_SHORT_QUARTERS: 9436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbolsSingleSetter::setShortQuarter(syms, index, value, valueLength, *status); 9446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_QUARTERS: 9476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbolsSingleSetter::setStandaloneQuarter(syms, index, value, valueLength, *status); 9486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_STANDALONE_SHORT_QUARTERS: 9516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbolsSingleSetter::setStandaloneShortQuarter(syms, index, value, valueLength, *status); 9526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_AM_PMS: 9556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbolsSingleSetter::setAmPm(syms, index, value, valueLength, *status); 9566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UDAT_LOCALIZED_CHARS: 9596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormatSymbolsSingleSetter::setLocalPatternChars(syms, value, valueLength, *status); 9606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org default: 9636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *status = U_UNSUPPORTED_ERROR; 9646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 9686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI const char* U_EXPORT2 9706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_getLocaleByType(const UDateFormat *fmt, 9716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ULocDataLocaleType type, 9726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode* status) 9736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 9746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (fmt == NULL) { 9756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(*status)) { 9766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *status = U_ILLEGAL_ARGUMENT_ERROR; 9776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return NULL; 9796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return ((Format*)fmt)->getLocaleID(type, *status); 9816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 9826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI void U_EXPORT2 9856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_setContext(UDateFormat* fmt, UDisplayContext value, UErrorCode* status) 9866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 9876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org verifyIsSimpleDateFormat(fmt, status); 9886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(*status)) { 9896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 9906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ((SimpleDateFormat*)fmt)->setContext(value, *status); 9926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 9936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI UDisplayContext U_EXPORT2 9956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_getContext(UDateFormat* fmt, UDisplayContextType type, UErrorCode* status) 9966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 9976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org verifyIsSimpleDateFormat(fmt, status); 9986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(*status)) { 9996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return (UDisplayContext)0; 10006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return ((SimpleDateFormat*)fmt)->getContext(type, *status); 10026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 10036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 10066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Verify that fmt is a RelativeDateFormat. Invalid error if not. 10076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param fmt the UDateFormat, definitely a DateFormat, maybe something else 10086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status error code, will be set to failure if there is a familure or the fmt is NULL. 10096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 10106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void verifyIsRelativeDateFormat(const UDateFormat* fmt, UErrorCode *status) { 10116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(*status) && 10126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dynamic_cast<const RelativeDateFormat*>(reinterpret_cast<const DateFormat*>(fmt))==NULL) { 10136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *status = U_ILLEGAL_ARGUMENT_ERROR; 10146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 10166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int32_t U_EXPORT2 10196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_toPatternRelativeDate(const UDateFormat *fmt, 10206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *result, 10216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t resultLength, 10226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode *status) 10236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 10246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org verifyIsRelativeDateFormat(fmt, status); 10256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*status)) return -1; 10266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString datePattern; 10286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!(result==NULL && resultLength==0)) { 10296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // NULL destination for pure preflighting: empty dummy string 10306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // otherwise, alias the destination buffer 10316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org datePattern.setTo(result, 0, resultLength); 10326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ((RelativeDateFormat*)fmt)->toPatternDate(datePattern, *status); 10346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return datePattern.extract(result, resultLength, *status); 10356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 10366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI int32_t U_EXPORT2 10386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_toPatternRelativeTime(const UDateFormat *fmt, 10396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *result, 10406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t resultLength, 10416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode *status) 10426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 10436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org verifyIsRelativeDateFormat(fmt, status); 10446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*status)) return -1; 10456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString timePattern; 10476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!(result==NULL && resultLength==0)) { 10486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // NULL destination for pure preflighting: empty dummy string 10496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // otherwise, alias the destination buffer 10506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org timePattern.setTo(result, 0, resultLength); 10516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ((RelativeDateFormat*)fmt)->toPatternTime(timePattern, *status); 10536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return timePattern.extract(result, resultLength, *status); 10546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 10556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CAPI void U_EXPORT2 10576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgudat_applyPatternRelative(UDateFormat *format, 10586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *datePattern, 10596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t datePatternLength, 10606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *timePattern, 10616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t timePatternLength, 10626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode *status) 10636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 10646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org verifyIsRelativeDateFormat(format, status); 10656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*status)) return; 10666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString datePat((UBool)(datePatternLength == -1), datePattern, datePatternLength); 10676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString timePat((UBool)(timePatternLength == -1), timePattern, timePatternLength); 10686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ((RelativeDateFormat*)format)->applyPatterns(datePat, timePat, *status); 10696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 10706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_FORMATTING */ 1072