void LocaleICU::initializeDateTimeFormat() { if (m_didCreateTimeFormat) return; // We assume ICU medium time pattern and short time pattern are compatible // with LDML, because ICU specific pattern character "V" doesn't appear // in both medium and short time pattern. m_mediumTimeFormat = openDateFormat(UDAT_MEDIUM, UDAT_NONE); m_timeFormatWithSeconds = getDateFormatPattern(m_mediumTimeFormat); m_shortTimeFormat = openDateFormat(UDAT_SHORT, UDAT_NONE); m_timeFormatWithoutSeconds = getDateFormatPattern(m_shortTimeFormat); UDateFormat* dateTimeFormatWithSeconds = openDateFormat(UDAT_MEDIUM, UDAT_SHORT); m_dateTimeFormatWithSeconds = getDateFormatPattern(dateTimeFormatWithSeconds); udat_close(dateTimeFormatWithSeconds); UDateFormat* dateTimeFormatWithoutSeconds = openDateFormat(UDAT_SHORT, UDAT_SHORT); m_dateTimeFormatWithoutSeconds = getDateFormatPattern(dateTimeFormatWithoutSeconds); udat_close(dateTimeFormatWithoutSeconds); OwnPtr<Vector<String>> timeAMPMLabels = createLabelVector(m_mediumTimeFormat, UDAT_AM_PMS, UCAL_AM, 2); if (!timeAMPMLabels) timeAMPMLabels = createFallbackAMPMLabels(); m_timeAMPMLabels = *timeAMPMLabels; m_didCreateTimeFormat = true; }
void ICULocale::initializeCalendar() { if (m_monthLabels && m_weekDayShortLabels) return; if (!initializeShortDateFormat()) { m_firstDayOfWeek = 0; m_monthLabels = createFallbackMonthLabels(); m_weekDayShortLabels = createFallbackWeekDayShortLabels(); return; } m_firstDayOfWeek = ucal_getAttribute(udat_getCalendar(m_shortDateFormat), UCAL_FIRST_DAY_OF_WEEK) - UCAL_SUNDAY; m_monthLabels = createLabelVector(UDAT_MONTHS, UCAL_JANUARY, 12); if (!m_monthLabels) m_monthLabels = createFallbackMonthLabels(); m_weekDayShortLabels = createLabelVector(UDAT_SHORT_WEEKDAYS, UCAL_SUNDAY, 7); if (!m_weekDayShortLabels) m_weekDayShortLabels = createFallbackWeekDayShortLabels(); }
const Vector<String>& LocaleICU::monthLabels() { if (m_monthLabels) return *m_monthLabels; if (initializeShortDateFormat()) { m_monthLabels = createLabelVector(m_shortDateFormat, UDAT_MONTHS, UCAL_JANUARY, 12); if (m_monthLabels) return *m_monthLabels; } m_monthLabels = createFallbackMonthLabels(); return *m_monthLabels; }
const Vector<String>& LocaleICU::shortStandAloneMonthLabels() { if (!m_shortStandAloneMonthLabels.isEmpty()) return m_shortStandAloneMonthLabels; if (initializeShortDateFormat()) { if (OwnPtr<Vector<String> > labels = createLabelVector(m_shortDateFormat, UDAT_STANDALONE_SHORT_MONTHS, UCAL_JANUARY, 12)) { m_shortStandAloneMonthLabels = *labels; return m_shortStandAloneMonthLabels; } } m_shortStandAloneMonthLabels = shortMonthLabels(); return m_shortStandAloneMonthLabels; }
const Vector<String>& LocaleICU::shortMonthLabels() { if (!m_shortMonthLabels.isEmpty()) return m_shortMonthLabels; if (initializeShortDateFormat()) { if (OwnPtr<Vector<String>> labels = createLabelVector(m_shortDateFormat, UDAT_SHORT_MONTHS, UCAL_JANUARY, 12)) { m_shortMonthLabels = *labels; return m_shortMonthLabels; } } m_shortMonthLabels.reserveCapacity(WTF_ARRAY_LENGTH(WTF::monthName)); for (unsigned i = 0; i < WTF_ARRAY_LENGTH(WTF::monthName); ++i) m_shortMonthLabels.append(WTF::monthName[i]); return m_shortMonthLabels; }
const Vector<String>& LocaleICU::shortStandAloneMonthLabels() { if (!m_shortStandAloneMonthLabels.isEmpty()) return m_shortStandAloneMonthLabels; UDateFormat* monthFormatter = openDateFormatForStandAloneMonthLabels(true); if (monthFormatter) { if (OwnPtr<Vector<String>> labels = createLabelVector(monthFormatter, UDAT_STANDALONE_SHORT_MONTHS, UCAL_JANUARY, 12)) { m_shortStandAloneMonthLabels = *labels; udat_close(monthFormatter); return m_shortStandAloneMonthLabels; } udat_close(monthFormatter); } m_shortStandAloneMonthLabels = shortMonthLabels(); return m_shortStandAloneMonthLabels; }
static PassOwnPtr<Vector<String> > createWeekDayShortLabels() { OwnPtr<Vector<String> > labels = createLabelVector(UDAT_SHORT_WEEKDAYS, 7); return labels ? labels.release() : createFallbackWeekDayShortLabels(); }
static PassOwnPtr<Vector<String> > createMonthLabels() { OwnPtr<Vector<String> > labels = createLabelVector(UDAT_MONTHS, 12); return labels ? labels.release() : createFallbackMonthLabels(); }