/* Function: EnumCalendarInfo Retrieves a collection of calendar string data specified by the locale, calendar, and data type. Allows for a collection of calendar string data to be retrieved by invoking the callback for each value in the collection. The context parameter is passed through to the callback along with each string. */ int32_t GlobalizationNative_EnumCalendarInfo(EnumCalendarInfoCallback callback, const UChar* localeName, CalendarId calendarId, CalendarDataType dataType, const void* context) { UErrorCode err = U_ZERO_ERROR; char locale[ULOC_FULLNAME_CAPACITY]; GetLocale(localeName, locale, ULOC_FULLNAME_CAPACITY, FALSE, &err); if (U_FAILURE(err)) return FALSE; switch (dataType) { case CalendarData_ShortDates: // ShortDates to map kShort and kMedium in ICU, but also adding the "yMd" // skeleton as well, as this closely matches what is used on Windows return InvokeCallbackForDatePattern(locale, UDAT_SHORT, callback, context) && InvokeCallbackForDatePattern(locale, UDAT_MEDIUM, callback, context) && InvokeCallbackForDateTimePattern(locale, UDAT_YEAR_NUM_MONTH_DAY_UCHAR, callback, context); case CalendarData_LongDates: // LongDates map to kFull and kLong in ICU. return InvokeCallbackForDatePattern(locale, UDAT_FULL, callback, context) && InvokeCallbackForDatePattern(locale, UDAT_LONG, callback, context); case CalendarData_YearMonths: return InvokeCallbackForDateTimePattern(locale, UDAT_YEAR_MONTH_UCHAR, callback, context); case CalendarData_DayNames: return EnumSymbols(locale, calendarId, UDAT_STANDALONE_WEEKDAYS, 1, callback, context); case CalendarData_AbbrevDayNames: return EnumSymbols(locale, calendarId, UDAT_STANDALONE_SHORT_WEEKDAYS, 1, callback, context); case CalendarData_MonthNames: return EnumSymbols(locale, calendarId, UDAT_STANDALONE_MONTHS, 0, callback, context); case CalendarData_AbbrevMonthNames: return EnumSymbols(locale, calendarId, UDAT_STANDALONE_SHORT_MONTHS, 0, callback, context); case CalendarData_SuperShortDayNames: // UDAT_STANDALONE_SHORTER_WEEKDAYS was added in ICU 51, and CentOS 7 currently uses ICU 50. // fallback to UDAT_STANDALONE_NARROW_WEEKDAYS in that case. #if HAVE_UDAT_STANDALONE_SHORTER_WEEKDAYS return EnumSymbols(locale, calendarId, UDAT_STANDALONE_SHORTER_WEEKDAYS, 1, callback, context); #else return EnumSymbols(locale, calendarId, UDAT_STANDALONE_NARROW_WEEKDAYS, 1, callback, context); #endif case CalendarData_MonthGenitiveNames: return EnumSymbols(locale, calendarId, UDAT_MONTHS, 0, callback, context); case CalendarData_AbbrevMonthGenitiveNames: return EnumSymbols(locale, calendarId, UDAT_SHORT_MONTHS, 0, callback, context); case CalendarData_EraNames: return EnumSymbols(locale, calendarId, UDAT_ERAS, 0, callback, context); case CalendarData_AbbrevEraNames: return EnumAbbrevEraNames(locale, calendarId, callback, context); default: assert(FALSE); return FALSE; } }
/* Function: EnumCalendarInfo Retrieves a collection of calendar string data specified by the locale, calendar, and data type. Allows for a collection of calendar string data to be retrieved by invoking the callback for each value in the collection. The context parameter is passed through to the callback along with each string. */ extern "C" int32_t EnumCalendarInfo( EnumCalendarInfoCallback callback, const UChar* localeName, CalendarId calendarId, CalendarDataType dataType, const void* context) { Locale locale = GetLocale(localeName); if (locale.isBogus()) return false; switch (dataType) { case ShortDates: // ShortDates to map kShort and kMedium in ICU, but also adding the "yMd" skeleton as well, as this // closely matches what is used on Windows return InvokeCallbackForDateTimePattern(locale, UDAT_YEAR_NUM_MONTH_DAY, callback, context) && InvokeCallbackForDatePattern(locale, DateFormat::kShort, callback, context) && InvokeCallbackForDatePattern(locale, DateFormat::kMedium, callback, context); case LongDates: // LongDates map to kFull and kLong in ICU. return InvokeCallbackForDatePattern(locale, DateFormat::kFull, callback, context) && InvokeCallbackForDatePattern(locale, DateFormat::kLong, callback, context); case YearMonths: return InvokeCallbackForDateTimePattern(locale, UDAT_YEAR_MONTH, callback, context); case DayNames: return EnumWeekdays(locale, calendarId, DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE, callback, context); case AbbrevDayNames: return EnumWeekdays(locale, calendarId, DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED, callback, context); case MonthNames: return EnumMonths(locale, calendarId, DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE, callback, context); case AbbrevMonthNames: return EnumMonths(locale, calendarId, DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED, callback, context); case SuperShortDayNames: #ifdef HAVE_DTWIDTHTYPE_SHORT return EnumWeekdays(locale, calendarId, DateFormatSymbols::STANDALONE, DateFormatSymbols::SHORT, callback, context); #else // Currently CentOS-7 uses ICU-50 and ::SHORT was added in ICU-51, so use ::NARROW instead return EnumWeekdays(locale, calendarId, DateFormatSymbols::STANDALONE, DateFormatSymbols::NARROW, callback, context); #endif case MonthGenitiveNames: return EnumMonths(locale, calendarId, DateFormatSymbols::FORMAT, DateFormatSymbols::WIDE, callback, context); case AbbrevMonthGenitiveNames: return EnumMonths(locale, calendarId, DateFormatSymbols::FORMAT, DateFormatSymbols::ABBREVIATED, callback, context); case EraNames: case AbbrevEraNames: return EnumEraNames(locale, calendarId, dataType, callback, context); default: assert(false); return false; } }