diff --git a/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateDateTimeFormatData.cpp b/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateDateTimeFormatData.cpp index 56f7ed98ccf..9eb5fb687ac 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateDateTimeFormatData.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateDateTimeFormatData.cpp @@ -1793,13 +1793,13 @@ static void convert_calendar_fields(SourceType const& source, TargetType& target } struct CalendarPatternImpl { - ErrorOr to_unicode_calendar_pattern() const { + CalendarPattern to_unicode_calendar_pattern() const { CalendarPattern calendar_pattern {}; - calendar_pattern.skeleton = TRY(String::from_utf8(decode_string(skeleton))); - calendar_pattern.pattern = TRY(String::from_utf8(decode_string(pattern))); + calendar_pattern.skeleton = MUST(String::from_utf8(decode_string(skeleton))); + calendar_pattern.pattern = MUST(String::from_utf8(decode_string(pattern))); if (pattern12 != 0) - calendar_pattern.pattern12 = TRY(String::from_utf8(decode_string(pattern12))); + calendar_pattern.pattern12 = MUST(String::from_utf8(decode_string(pattern12))); convert_calendar_fields(*this, calendar_pattern); return calendar_pattern; @@ -1823,14 +1823,14 @@ struct CalendarPatternImpl { }; struct CalendarRangePatternImpl { - ErrorOr to_unicode_calendar_range_pattern() const { + CalendarRangePattern to_unicode_calendar_range_pattern() const { CalendarRangePattern calendar_range_pattern {}; if (field != -1) calendar_range_pattern.field = static_cast(field); - calendar_range_pattern.start_range = TRY(String::from_utf8(decode_string(start_range))); + calendar_range_pattern.start_range = MUST(String::from_utf8(decode_string(start_range))); calendar_range_pattern.separator = decode_string(separator); - calendar_range_pattern.end_range = TRY(String::from_utf8(decode_string(end_range))); + calendar_range_pattern.end_range = MUST(String::from_utf8(decode_string(end_range))); convert_calendar_fields(*this, calendar_range_pattern); return calendar_range_pattern; @@ -1863,13 +1863,13 @@ struct CalendarRangePatternImpl { generator.append(R"~~~( struct CalendarFormatImpl { - ErrorOr to_unicode_calendar_format() const { + CalendarFormat to_unicode_calendar_format() const { CalendarFormat calendar_format {}; - calendar_format.full_format = TRY(s_calendar_patterns[full_format].to_unicode_calendar_pattern()); - calendar_format.long_format = TRY(s_calendar_patterns[long_format].to_unicode_calendar_pattern()); - calendar_format.medium_format = TRY(s_calendar_patterns[medium_format].to_unicode_calendar_pattern()); - calendar_format.short_format = TRY(s_calendar_patterns[short_format].to_unicode_calendar_pattern()); + calendar_format.full_format = s_calendar_patterns[full_format].to_unicode_calendar_pattern(); + calendar_format.long_format = s_calendar_patterns[long_format].to_unicode_calendar_pattern(); + calendar_format.medium_format = s_calendar_patterns[medium_format].to_unicode_calendar_pattern(); + calendar_format.short_format = s_calendar_patterns[short_format].to_unicode_calendar_pattern(); return calendar_format; } @@ -2045,11 +2045,11 @@ static Optional keyword_to_calendar(KeywordCalendar keyword) } } -ErrorOr> get_regional_hour_cycles(StringView region) +Vector get_regional_hour_cycles(StringView region) { auto region_value = hour_cycle_region_from_string(region); if (!region_value.has_value()) - return Vector {}; + return {}; auto region_index = to_underlying(*region_value); @@ -2057,7 +2057,7 @@ ErrorOr> get_regional_hour_cycles(StringView region) auto const& regional_hour_cycles = s_hour_cycle_lists.at(regional_hour_cycles_index); Vector hour_cycles; - TRY(hour_cycles.try_ensure_capacity(regional_hour_cycles.size())); + hour_cycles.ensure_capacity(regional_hour_cycles.size()); for (auto hour_cycle : regional_hour_cycles) hour_cycles.unchecked_append(static_cast(hour_cycle)); @@ -2125,59 +2125,59 @@ static CalendarData const* find_calendar_data(StringView locale, StringView cale return lookup_calendar(*default_calendar); } -ErrorOr> get_calendar_date_format(StringView locale, StringView calendar) +Optional get_calendar_date_format(StringView locale, StringView calendar) { if (auto const* data = find_calendar_data(locale, calendar); data != nullptr) { auto const& formats = s_calendar_formats.at(data->date_formats); - return TRY(formats.to_unicode_calendar_format()); + return formats.to_unicode_calendar_format(); } - return OptionalNone {}; + return {}; } -ErrorOr> get_calendar_time_format(StringView locale, StringView calendar) +Optional get_calendar_time_format(StringView locale, StringView calendar) { if (auto const* data = find_calendar_data(locale, calendar); data != nullptr) { auto const& formats = s_calendar_formats.at(data->time_formats); - return TRY(formats.to_unicode_calendar_format()); + return formats.to_unicode_calendar_format(); } - return OptionalNone {}; + return {}; } -ErrorOr> get_calendar_date_time_format(StringView locale, StringView calendar) +Optional get_calendar_date_time_format(StringView locale, StringView calendar) { if (auto const* data = find_calendar_data(locale, calendar); data != nullptr) { auto const& formats = s_calendar_formats.at(data->date_time_formats); - return TRY(formats.to_unicode_calendar_format()); + return formats.to_unicode_calendar_format(); } - return OptionalNone {}; + return {}; } -ErrorOr> get_calendar_available_formats(StringView locale, StringView calendar) +Vector get_calendar_available_formats(StringView locale, StringView calendar) { Vector result {}; if (auto const* data = find_calendar_data(locale, calendar); data != nullptr) { auto const& available_formats = s_calendar_pattern_lists.at(data->available_formats); - TRY(result.try_ensure_capacity(available_formats.size())); + result.ensure_capacity(available_formats.size()); for (auto const& format : available_formats) - result.unchecked_append(TRY(s_calendar_patterns[format].to_unicode_calendar_pattern())); + result.unchecked_append(s_calendar_patterns[format].to_unicode_calendar_pattern()); } return result; } -ErrorOr> get_calendar_default_range_format(StringView locale, StringView calendar) +Optional get_calendar_default_range_format(StringView locale, StringView calendar) { if (auto const* data = find_calendar_data(locale, calendar); data != nullptr) { auto const& pattern = s_calendar_range_patterns[data->default_range_format]; - return TRY(pattern.to_unicode_calendar_range_pattern()); + return pattern.to_unicode_calendar_range_pattern(); } - return OptionalNone {}; + return {}; } -ErrorOr> get_calendar_range_formats(StringView locale, StringView calendar, StringView skeleton) +Vector get_calendar_range_formats(StringView locale, StringView calendar, StringView skeleton) { Vector result {}; @@ -2188,14 +2188,14 @@ ErrorOr> get_calendar_range_formats(StringView loca auto const& pattern = s_calendar_range_patterns[format]; if (skeleton == decode_string(pattern.skeleton)) - TRY(result.try_append(TRY(pattern.to_unicode_calendar_range_pattern()))); + result.append(pattern.to_unicode_calendar_range_pattern()); } } return result; } -ErrorOr> get_calendar_range12_formats(StringView locale, StringView calendar, StringView skeleton) +Vector get_calendar_range12_formats(StringView locale, StringView calendar, StringView skeleton) { Vector result {}; @@ -2206,14 +2206,14 @@ ErrorOr> get_calendar_range12_formats(StringView lo auto const& pattern = s_calendar_range_patterns[format]; if (skeleton == decode_string(pattern.skeleton)) - TRY(result.try_append(TRY(pattern.to_unicode_calendar_range_pattern()))); + result.append(pattern.to_unicode_calendar_range_pattern()); } } return result; } -static ErrorOr> find_calendar_symbols(StringView locale, StringView calendar, CalendarSymbol symbol, CalendarPatternStyle style) +static ReadonlySpan<@string_index_type@> find_calendar_symbols(StringView locale, StringView calendar, CalendarSymbol symbol, CalendarPatternStyle style) { if (auto const* data = find_calendar_data(locale, calendar); data != nullptr) { auto const& symbols_list = s_calendar_symbol_lists[data->symbols]; @@ -2241,62 +2241,62 @@ static ErrorOr> find_calendar_symbols(StringVi return s_symbol_lists.at(symbol_list_index); } - return ReadonlySpan<@string_index_type@> {}; + return {}; } -ErrorOr> get_calendar_era_symbol(StringView locale, StringView calendar, CalendarPatternStyle style, Era value) +Optional get_calendar_era_symbol(StringView locale, StringView calendar, CalendarPatternStyle style, Era value) { - auto symbols = TRY(find_calendar_symbols(locale, calendar, CalendarSymbol::Era, style)); + auto symbols = find_calendar_symbols(locale, calendar, CalendarSymbol::Era, style); if (auto value_index = to_underlying(value); value_index < symbols.size()) { if (auto symbol_index = symbols.at(value_index); symbol_index != 0) - return Optional { decode_string(symbol_index) }; + return decode_string(symbol_index); } - return OptionalNone {}; + return {}; } -ErrorOr> get_calendar_month_symbol(StringView locale, StringView calendar, CalendarPatternStyle style, Month value) +Optional get_calendar_month_symbol(StringView locale, StringView calendar, CalendarPatternStyle style, Month value) { - auto symbols = TRY(find_calendar_symbols(locale, calendar, CalendarSymbol::Month, style)); + auto symbols = find_calendar_symbols(locale, calendar, CalendarSymbol::Month, style); if (auto value_index = to_underlying(value); value_index < symbols.size()) { if (auto symbol_index = symbols.at(value_index); symbol_index != 0) - return Optional { decode_string(symbol_index) }; + return decode_string(symbol_index); } - return OptionalNone {}; + return {}; } -ErrorOr> get_calendar_weekday_symbol(StringView locale, StringView calendar, CalendarPatternStyle style, Weekday value) +Optional get_calendar_weekday_symbol(StringView locale, StringView calendar, CalendarPatternStyle style, Weekday value) { - auto symbols = TRY(find_calendar_symbols(locale, calendar, CalendarSymbol::Weekday, style)); + auto symbols = find_calendar_symbols(locale, calendar, CalendarSymbol::Weekday, style); if (auto value_index = to_underlying(value); value_index < symbols.size()) { if (auto symbol_index = symbols.at(value_index); symbol_index != 0) - return Optional { decode_string(symbol_index) }; + return decode_string(symbol_index); } - return OptionalNone {}; + return {}; } -ErrorOr> get_calendar_day_period_symbol(StringView locale, StringView calendar, CalendarPatternStyle style, DayPeriod value) +Optional get_calendar_day_period_symbol(StringView locale, StringView calendar, CalendarPatternStyle style, DayPeriod value) { - auto symbols = TRY(find_calendar_symbols(locale, calendar, CalendarSymbol::DayPeriod, style)); + auto symbols = find_calendar_symbols(locale, calendar, CalendarSymbol::DayPeriod, style); if (auto value_index = to_underlying(value); value_index < symbols.size()) { if (auto symbol_index = symbols.at(value_index); symbol_index != 0) - return Optional { decode_string(symbol_index) }; + return decode_string(symbol_index); } - return OptionalNone {}; + return {}; } -ErrorOr> get_calendar_day_period_symbol_for_hour(StringView locale, StringView calendar, CalendarPatternStyle style, u8 hour) +Optional get_calendar_day_period_symbol_for_hour(StringView locale, StringView calendar, CalendarPatternStyle style, u8 hour) { auto locale_value = locale_from_string(locale); if (!locale_value.has_value()) - return OptionalNone {}; + return {}; auto locale_index = to_underlying(*locale_value) - 1; // Subtract 1 because 0 == Locale::None. diff --git a/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateLocaleData.cpp b/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateLocaleData.cpp index 23495e31e60..4937170dc28 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateLocaleData.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateLocaleData.cpp @@ -1680,7 +1680,7 @@ Optional get_preferred_keyword_value_for_locale(StringView locale, S // FIXME: Calendar keywords are also region-based, and will need to be handled here when we support non-Gregorian calendars: // https://github.com/unicode-org/cldr-json/blob/main/cldr-json/cldr-core/supplemental/calendarPreferenceData.json if (key == "hc"sv) { - auto hour_cycles = MUST(get_locale_hour_cycles(locale)); + auto hour_cycles = get_locale_hour_cycles(locale); if (hour_cycles.is_empty()) return OptionalNone {}; @@ -1709,7 +1709,7 @@ Vector get_keywords_for_locale(StringView locale, StringView key) // FIXME: Calendar keywords are also region-based, and will need to be handled here when we support non-Gregorian calendars: // https://github.com/unicode-org/cldr-json/blob/main/cldr-json/cldr-core/supplemental/calendarPreferenceData.json if (key == "hc"sv) { - auto hour_cycles = MUST(get_locale_hour_cycles(locale)); + auto hour_cycles = get_locale_hour_cycles(locale); Vector values; values.ensure_capacity(hour_cycles.size()); diff --git a/Tests/LibLocale/TestDateTimeFormat.cpp b/Tests/LibLocale/TestDateTimeFormat.cpp index 62a8b7f5578..0941fdb4925 100644 --- a/Tests/LibLocale/TestDateTimeFormat.cpp +++ b/Tests/LibLocale/TestDateTimeFormat.cpp @@ -75,7 +75,7 @@ TEST_CASE(time_zone_name) constexpr auto jan_1_2022 = AK::UnixDateTime::from_seconds_since_epoch(1640995200); // Saturday, January 1, 2022 12:00:00 AM for (auto const& test : test_data) { - auto time_zone = MUST(Locale::format_time_zone(test.locale, test.time_zone, test.style, jan_1_2022)); + auto time_zone = Locale::format_time_zone(test.locale, test.time_zone, test.style, jan_1_2022); EXPECT_EQ(time_zone, test.expected_result); } } @@ -125,7 +125,7 @@ TEST_CASE(time_zone_name_dst) constexpr auto sep_19_2022 = AK::UnixDateTime::from_seconds_since_epoch(1663553728); // Monday, September 19, 2022 2:15:28 AM for (auto const& test : test_data) { - auto time_zone = MUST(Locale::format_time_zone(test.locale, test.time_zone, test.style, sep_19_2022)); + auto time_zone = Locale::format_time_zone(test.locale, test.time_zone, test.style, sep_19_2022); EXPECT_EQ(time_zone, test.expected_result); } } @@ -182,7 +182,7 @@ TEST_CASE(format_time_zone_offset) }; for (auto const& test : test_data) { - auto time_zone = MUST(Locale::format_time_zone(test.locale, test.time_zone, test.style, test.time)); + auto time_zone = Locale::format_time_zone(test.locale, test.time_zone, test.style, test.time); EXPECT_EQ(time_zone, test.expected_result); } } diff --git a/Userland/Applications/ClockSettings/TimeZoneSettingsWidget.cpp b/Userland/Applications/ClockSettings/TimeZoneSettingsWidget.cpp index 6e18da766ff..4cffade8c34 100644 --- a/Userland/Applications/ClockSettings/TimeZoneSettingsWidget.cpp +++ b/Userland/Applications/ClockSettings/TimeZoneSettingsWidget.cpp @@ -135,8 +135,8 @@ void TimeZoneSettingsWidget::set_time_zone_location() auto locale = Locale::default_locale(); auto now = AK::UnixDateTime::now(); - auto name = Locale::format_time_zone(locale, m_time_zone, Locale::CalendarPatternStyle::Long, now).release_value_but_fixme_should_propagate_errors(); - auto offset = Locale::format_time_zone(locale, m_time_zone, Locale::CalendarPatternStyle::LongOffset, now).release_value_but_fixme_should_propagate_errors(); + auto name = Locale::format_time_zone(locale, m_time_zone, Locale::CalendarPatternStyle::Long, now); + auto offset = Locale::format_time_zone(locale, m_time_zone, Locale::CalendarPatternStyle::LongOffset, now); m_time_zone_text = DeprecatedString::formatted("{}\n({})", name, offset); } diff --git a/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.cpp b/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.cpp index 99a1cd91fe4..4a2e8aaddb5 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.cpp @@ -73,8 +73,8 @@ ThrowCompletionOr> date_time_style_format(VM ::Locale::CalendarPattern time_format {}; ::Locale::CalendarPattern date_format {}; - auto get_pattern = [&](auto type, auto style) -> ThrowCompletionOr> { - auto formats = TRY_OR_THROW_OOM(vm, ::Locale::get_calendar_format(data_locale, date_time_format.calendar(), type)); + auto get_pattern = [&](auto type, auto style) -> Optional<::Locale::CalendarPattern> { + auto formats = ::Locale::get_calendar_format(data_locale, date_time_format.calendar(), type); if (formats.has_value()) { switch (style) { @@ -89,14 +89,14 @@ ThrowCompletionOr> date_time_style_format(VM } } - return OptionalNone {}; + return {}; }; // 1. If timeStyle is not undefined, then if (date_time_format.has_time_style()) { // a. Assert: timeStyle is one of "full", "long", "medium", or "short". // b. Let timeFormat be styles.[[TimeFormat]].[[]]. - auto pattern = MUST_OR_THROW_OOM(get_pattern(::Locale::CalendarFormatType::Time, date_time_format.time_style())); + auto pattern = get_pattern(::Locale::CalendarFormatType::Time, date_time_format.time_style()); if (!pattern.has_value()) return OptionalNone {}; @@ -107,7 +107,7 @@ ThrowCompletionOr> date_time_style_format(VM if (date_time_format.has_date_style()) { // a. Assert: dateStyle is one of "full", "long", "medium", or "short". // b. Let dateFormat be styles.[[DateFormat]].[[]]. - auto pattern = MUST_OR_THROW_OOM(get_pattern(::Locale::CalendarFormatType::Date, date_time_format.date_style())); + auto pattern = get_pattern(::Locale::CalendarFormatType::Date, date_time_format.date_style()); if (!pattern.has_value()) return OptionalNone {}; @@ -131,7 +131,7 @@ ThrowCompletionOr> date_time_style_format(VM }); // d. Let connector be styles.[[DateTimeFormat]].[[]]. - auto connector = MUST_OR_THROW_OOM(get_pattern(::Locale::CalendarFormatType::DateTime, date_time_format.date_style())); + auto connector = get_pattern(::Locale::CalendarFormatType::DateTime, date_time_format.date_style()); if (!connector.has_value()) return OptionalNone {}; @@ -155,7 +155,7 @@ ThrowCompletionOr> date_time_style_format(VM // NOTE: Our implementation of steps h-j differ from the spec. LibUnicode does not attach range patterns to the // format pattern; rather, lookups for range patterns are performed separately based on the format pattern's // skeleton. So we form a new skeleton here and defer the range pattern lookups. - format.skeleton = TRY_OR_THROW_OOM(vm, ::Locale::combine_skeletons(date_format.skeleton, time_format.skeleton)); + format.skeleton = ::Locale::combine_skeletons(date_format.skeleton, time_format.skeleton); // k. Return format. return format; @@ -424,7 +424,7 @@ static Optional find_calendar_field(StringView name, ::Locale::Ca return {}; } -static ThrowCompletionOr> resolve_day_period(VM& vm, StringView locale, StringView calendar, ::Locale::CalendarPatternStyle style, ReadonlySpan pattern_parts, LocalTime local_time) +static Optional resolve_day_period(StringView locale, StringView calendar, ::Locale::CalendarPatternStyle style, ReadonlySpan pattern_parts, LocalTime local_time) { // Use the "noon" day period if the locale has it, but only if the time is either exactly 12:00.00 or would be displayed as such. if (local_time.hour == 12) { @@ -439,13 +439,13 @@ static ThrowCompletionOr> resolve_day_period(VM& vm, String }); if (it == pattern_parts.end()) { - auto noon_symbol = TRY_OR_THROW_OOM(vm, ::Locale::get_calendar_day_period_symbol(locale, calendar, style, ::Locale::DayPeriod::Noon)); + auto noon_symbol = ::Locale::get_calendar_day_period_symbol(locale, calendar, style, ::Locale::DayPeriod::Noon); if (noon_symbol.has_value()) return *noon_symbol; } } - return TRY_OR_THROW_OOM(vm, ::Locale::get_calendar_day_period_symbol_for_hour(locale, calendar, style, local_time.hour)); + return ::Locale::get_calendar_day_period_symbol_for_hour(locale, calendar, style, local_time.hour); } // 11.5.5 FormatDateTimePattern ( dateTimeFormat, patternParts, x, rangeFormatOptions ), https://tc39.es/ecma402/#sec-formatdatetimepattern @@ -552,7 +552,7 @@ ThrowCompletionOr> format_date_time_pattern(VM& vm, Dat auto style = date_time_format.day_period(); // ii. Let fv be a String value representing the day period of tm in the form given by f; the String value depends upon the implementation and the effective locale of dateTimeFormat. - auto symbol = MUST_OR_THROW_OOM(resolve_day_period(vm, data_locale, date_time_format.calendar(), style, pattern_parts, local_time)); + auto symbol = resolve_day_period(data_locale, date_time_format.calendar(), style, pattern_parts, local_time); if (symbol.has_value()) formatted_value = TRY_OR_THROW_OOM(vm, String::from_utf8(*symbol)); @@ -571,7 +571,7 @@ ThrowCompletionOr> format_date_time_pattern(VM& vm, Dat // iii. Let fv be a String value representing v in the form given by f; the String value depends upon the implementation and the effective locale of dateTimeFormat. // The String value may also depend on the value of the [[InDST]] field of tm if f is "short", "long", "shortOffset", or "longOffset". // If the implementation does not have a localized representation of f, then use the String value of v itself. - auto formatted_value = TRY_OR_THROW_OOM(vm, ::Locale::format_time_zone(data_locale, value, style, local_time.time_since_epoch())); + auto formatted_value = ::Locale::format_time_zone(data_locale, value, style, local_time.time_since_epoch()); // iv. Append a new Record { [[Type]]: p, [[Value]]: fv } as the last element of the list result. TRY_OR_THROW_OOM(vm, result.try_append({ "timeZoneName"sv, move(formatted_value) })); @@ -652,11 +652,11 @@ ThrowCompletionOr> format_date_time_pattern(VM& vm, Dat Optional symbol; if (part == "era"sv) - symbol = TRY_OR_THROW_OOM(vm, ::Locale::get_calendar_era_symbol(data_locale, date_time_format.calendar(), style, static_cast<::Locale::Era>(value))); + symbol = ::Locale::get_calendar_era_symbol(data_locale, date_time_format.calendar(), style, static_cast<::Locale::Era>(value)); else if (part == "month"sv) - symbol = TRY_OR_THROW_OOM(vm, ::Locale::get_calendar_month_symbol(data_locale, date_time_format.calendar(), style, static_cast<::Locale::Month>(value - 1))); + symbol = ::Locale::get_calendar_month_symbol(data_locale, date_time_format.calendar(), style, static_cast<::Locale::Month>(value - 1)); else if (part == "weekday"sv) - symbol = TRY_OR_THROW_OOM(vm, ::Locale::get_calendar_weekday_symbol(data_locale, date_time_format.calendar(), style, static_cast<::Locale::Weekday>(value))); + symbol = ::Locale::get_calendar_weekday_symbol(data_locale, date_time_format.calendar(), style, static_cast<::Locale::Weekday>(value)); if (symbol.has_value()) formatted_value = TRY_OR_THROW_OOM(vm, String::from_utf8(*symbol)); @@ -684,13 +684,13 @@ ThrowCompletionOr> format_date_time_pattern(VM& vm, Dat // ii. If v is greater than 11, then if (value > 11) { // 1. Let fv be an implementation and locale dependent String value representing "post meridiem". - auto symbol = TRY_OR_THROW_OOM(vm, ::Locale::get_calendar_day_period_symbol(data_locale, date_time_format.calendar(), ::Locale::CalendarPatternStyle::Short, ::Locale::DayPeriod::PM)); + auto symbol = ::Locale::get_calendar_day_period_symbol(data_locale, date_time_format.calendar(), ::Locale::CalendarPatternStyle::Short, ::Locale::DayPeriod::PM); formatted_value = TRY_OR_THROW_OOM(vm, String::from_utf8(symbol.value_or("PM"sv))); } // iii. Else, else { // 1. Let fv be an implementation and locale dependent String value representing "ante meridiem". - auto symbol = TRY_OR_THROW_OOM(vm, ::Locale::get_calendar_day_period_symbol(data_locale, date_time_format.calendar(), ::Locale::CalendarPatternStyle::Short, ::Locale::DayPeriod::AM)); + auto symbol = ::Locale::get_calendar_day_period_symbol(data_locale, date_time_format.calendar(), ::Locale::CalendarPatternStyle::Short, ::Locale::DayPeriod::AM); formatted_value = TRY_OR_THROW_OOM(vm, String::from_utf8(symbol.value_or("AM"sv))); } @@ -806,30 +806,29 @@ ThrowCompletionOr format_date_time_to_parts(VM& vm, DateTimeFormat& date } template -ThrowCompletionOr for_each_range_pattern_field(LocalTime const& time1, LocalTime const& time2, Callback&& callback) +void for_each_range_pattern_field(LocalTime const& time1, LocalTime const& time2, Callback&& callback) { // Table 4: Range pattern fields, https://tc39.es/ecma402/#table-datetimeformat-rangepatternfields - if (TRY(callback(static_cast(time1.era), static_cast(time2.era), ::Locale::CalendarRangePattern::Field::Era)) == IterationDecision::Break) - return {}; - if (TRY(callback(time1.year, time2.year, ::Locale::CalendarRangePattern::Field::Year)) == IterationDecision::Break) - return {}; - if (TRY(callback(time1.month, time2.month, ::Locale::CalendarRangePattern::Field::Month)) == IterationDecision::Break) - return {}; - if (TRY(callback(time1.day, time2.day, ::Locale::CalendarRangePattern::Field::Day)) == IterationDecision::Break) - return {}; - if (TRY(callback(time1.hour, time2.hour, ::Locale::CalendarRangePattern::Field::AmPm)) == IterationDecision::Break) - return {}; - if (TRY(callback(time1.hour, time2.hour, ::Locale::CalendarRangePattern::Field::DayPeriod)) == IterationDecision::Break) - return {}; - if (TRY(callback(time1.hour, time2.hour, ::Locale::CalendarRangePattern::Field::Hour)) == IterationDecision::Break) - return {}; - if (TRY(callback(time1.minute, time2.minute, ::Locale::CalendarRangePattern::Field::Minute)) == IterationDecision::Break) - return {}; - if (TRY(callback(time1.second, time2.second, ::Locale::CalendarRangePattern::Field::Second)) == IterationDecision::Break) - return {}; - if (TRY(callback(time1.millisecond, time2.millisecond, ::Locale::CalendarRangePattern::Field::FractionalSecondDigits)) == IterationDecision::Break) - return {}; - return {}; + if (callback(static_cast(time1.era), static_cast(time2.era), ::Locale::CalendarRangePattern::Field::Era) == IterationDecision::Break) + return; + if (callback(time1.year, time2.year, ::Locale::CalendarRangePattern::Field::Year) == IterationDecision::Break) + return; + if (callback(time1.month, time2.month, ::Locale::CalendarRangePattern::Field::Month) == IterationDecision::Break) + return; + if (callback(time1.day, time2.day, ::Locale::CalendarRangePattern::Field::Day) == IterationDecision::Break) + return; + if (callback(time1.hour, time2.hour, ::Locale::CalendarRangePattern::Field::AmPm) == IterationDecision::Break) + return; + if (callback(time1.hour, time2.hour, ::Locale::CalendarRangePattern::Field::DayPeriod) == IterationDecision::Break) + return; + if (callback(time1.hour, time2.hour, ::Locale::CalendarRangePattern::Field::Hour) == IterationDecision::Break) + return; + if (callback(time1.minute, time2.minute, ::Locale::CalendarRangePattern::Field::Minute) == IterationDecision::Break) + return; + if (callback(time1.second, time2.second, ::Locale::CalendarRangePattern::Field::Second) == IterationDecision::Break) + return; + if (callback(time1.millisecond, time2.millisecond, ::Locale::CalendarRangePattern::Field::FractionalSecondDigits) == IterationDecision::Break) + return; } template @@ -879,7 +878,7 @@ ThrowCompletionOr> partition_date_time_range_ bool pattern_contains_larger_date_field = false; // 11. While dateFieldsPracticallyEqual is true and patternContainsLargerDateField is false, repeat for each row of Table 4 in order, except the header row: - TRY(for_each_range_pattern_field(start_local_time, end_local_time, [&](auto start_value, auto end_value, auto field_name) -> ThrowCompletionOr { + for_each_range_pattern_field(start_local_time, end_local_time, [&](auto start_value, auto end_value, auto field_name) { // a. Let fieldName be the name given in the Range Pattern Field column of the row. // b. If rangePatterns has a field [[]], let rp be rangePatterns.[[]]; else let rp be undefined. @@ -918,10 +917,10 @@ ThrowCompletionOr> partition_date_time_range_ // iii. Else if fieldName is equal to [[DayPeriod]], then case ::Locale::CalendarRangePattern::Field::DayPeriod: { // 1. Let v1 be a String value representing the day period of tm1; the String value depends upon the implementation and the effective locale of dateTimeFormat. - auto start_period = TRY_OR_THROW_OOM(vm, ::Locale::get_calendar_day_period_symbol_for_hour(date_time_format.data_locale(), date_time_format.calendar(), ::Locale::CalendarPatternStyle::Short, start_value)); + auto start_period = ::Locale::get_calendar_day_period_symbol_for_hour(date_time_format.data_locale(), date_time_format.calendar(), ::Locale::CalendarPatternStyle::Short, start_value); // 2. Let v2 be a String value representing the day period of tm2; the String value depends upon the implementation and the effective locale of dateTimeFormat. - auto end_period = TRY_OR_THROW_OOM(vm, ::Locale::get_calendar_day_period_symbol_for_hour(date_time_format.data_locale(), date_time_format.calendar(), ::Locale::CalendarPatternStyle::Short, end_value)); + auto end_period = ::Locale::get_calendar_day_period_symbol_for_hour(date_time_format.data_locale(), date_time_format.calendar(), ::Locale::CalendarPatternStyle::Short, end_value); // 3. If v1 is not equal to v2, then if (start_period != end_period) { @@ -981,7 +980,7 @@ ThrowCompletionOr> partition_date_time_range_ if (date_fields_practically_equal && !pattern_contains_larger_date_field) return IterationDecision::Continue; return IterationDecision::Break; - })); + }); // 12. If dateFieldsPracticallyEqual is true, then if (date_fields_practically_equal) { @@ -1011,7 +1010,7 @@ ThrowCompletionOr> partition_date_time_range_ // 14. If rangePattern is undefined, then if (!range_pattern.has_value()) { // a. Let rangePattern be rangePatterns.[[Default]]. - range_pattern = TRY_OR_THROW_OOM(vm, ::Locale::get_calendar_default_range_format(date_time_format.data_locale(), date_time_format.calendar())); + range_pattern = ::Locale::get_calendar_default_range_format(date_time_format.data_locale(), date_time_format.calendar()); // Non-standard, range_pattern will be empty if Unicode data generation is disabled. if (!range_pattern.has_value()) diff --git a/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormatConstructor.cpp b/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormatConstructor.cpp index bcc6b0d7dc8..ce2f3ad2c8a 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormatConstructor.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormatConstructor.cpp @@ -166,7 +166,7 @@ ThrowCompletionOr> create_date_time_format(VM& vm, // 24. Let dataLocaleData be localeData.[[]]. // 25. Let hcDefault be dataLocaleData.[[hourCycle]]. - auto default_hour_cycle = TRY_OR_THROW_OOM(vm, ::Locale::get_default_regional_hour_cycle(data_locale)); + auto default_hour_cycle = ::Locale::get_default_regional_hour_cycle(data_locale); // Non-standard, default_hour_cycle will be empty if Unicode data generation is disabled. if (!default_hour_cycle.has_value()) { @@ -394,7 +394,7 @@ ThrowCompletionOr> create_date_time_format(VM& vm, } // f. Let formats be dataLocaleData.[[formats]].[[]]. - auto formats = TRY_OR_THROW_OOM(vm, ::Locale::get_calendar_available_formats(data_locale, date_time_format->calendar())); + auto formats = ::Locale::get_calendar_available_formats(data_locale, date_time_format->calendar()); // g. If matcher is "basic", then if (matcher.as_string().utf8_string_view() == "basic"sv) { @@ -440,7 +440,7 @@ ThrowCompletionOr> create_date_time_format(VM& vm, } // b. Let rangePatterns be bestFormat.[[rangePatterns12]]. - range_patterns = TRY_OR_THROW_OOM(vm, ::Locale::get_calendar_range12_formats(data_locale, date_time_format->calendar(), best_format->skeleton)); + range_patterns = ::Locale::get_calendar_range12_formats(data_locale, date_time_format->calendar(), best_format->skeleton); } // 48. Else, else { @@ -448,7 +448,7 @@ ThrowCompletionOr> create_date_time_format(VM& vm, pattern = move(best_format->pattern); // b. Let rangePatterns be bestFormat.[[rangePatterns]]. - range_patterns = TRY_OR_THROW_OOM(vm, ::Locale::get_calendar_range_formats(data_locale, date_time_format->calendar(), best_format->skeleton)); + range_patterns = ::Locale::get_calendar_range_formats(data_locale, date_time_format->calendar(), best_format->skeleton); } // 49. Set dateTimeFormat.[[Pattern]] to pattern. diff --git a/Userland/Libraries/LibJS/Runtime/Intl/Locale.cpp b/Userland/Libraries/LibJS/Runtime/Intl/Locale.cpp index 682bc53633a..cd74aabc0ca 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/Locale.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/Locale.cpp @@ -208,8 +208,8 @@ static u8 weekday_to_integer(Optional<::Locale::Weekday> weekday, ::Locale::Week static ThrowCompletionOr> weekend_of_locale(VM& vm, StringView locale) { - auto weekend_start = weekday_to_integer(TRY_OR_THROW_OOM(vm, ::Locale::get_locale_weekend_start(locale)), ::Locale::Weekday::Saturday); - auto weekend_end = weekday_to_integer(TRY_OR_THROW_OOM(vm, ::Locale::get_locale_weekend_end(locale)), ::Locale::Weekday::Sunday); + auto weekend_start = weekday_to_integer(::Locale::get_locale_weekend_start(locale), ::Locale::Weekday::Saturday); + auto weekend_end = weekday_to_integer(::Locale::get_locale_weekend_end(locale), ::Locale::Weekday::Sunday); // There currently aren't any regions in the CLDR which wrap around from Sunday (7) to Monday (1). // If this changes, this logic will need to be updated to handle that. @@ -235,8 +235,8 @@ ThrowCompletionOr week_info_of_locale(VM& vm, Locale const& locale_obj // 3. Return a record whose fields are defined by Table 1, with values based on locale. WeekInfo week_info {}; - week_info.minimal_days = TRY_OR_THROW_OOM(vm, ::Locale::get_locale_minimum_days(locale)).value_or(1); - week_info.first_day = weekday_to_integer(TRY_OR_THROW_OOM(vm, ::Locale::get_locale_first_day(locale)), ::Locale::Weekday::Monday); + week_info.minimal_days = ::Locale::get_locale_minimum_days(locale).value_or(1); + week_info.first_day = weekday_to_integer(::Locale::get_locale_first_day(locale), ::Locale::Weekday::Monday); week_info.weekend = MUST_OR_THROW_OOM(weekend_of_locale(vm, locale)); return week_info; diff --git a/Userland/Libraries/LibLocale/DateTimeFormat.cpp b/Userland/Libraries/LibLocale/DateTimeFormat.cpp index fa128b321e2..4a8d78fe801 100644 --- a/Userland/Libraries/LibLocale/DateTimeFormat.cpp +++ b/Userland/Libraries/LibLocale/DateTimeFormat.cpp @@ -92,10 +92,10 @@ StringView calendar_pattern_style_to_string(CalendarPatternStyle style) } Optional __attribute__((weak)) hour_cycle_region_from_string(StringView) { return {}; } -ErrorOr> __attribute__((weak)) get_regional_hour_cycles(StringView) { return Vector {}; } +Vector __attribute__((weak)) get_regional_hour_cycles(StringView) { return {}; } -template GetRegionalValues> -static ErrorOr find_regional_values_for_locale(StringView locale, GetRegionalValues&& get_regional_values) +template +static T find_regional_values_for_locale(StringView locale, GetRegionalValues&& get_regional_values) { auto has_value = [](auto const& container) { if constexpr (requires { container.has_value(); }) @@ -104,7 +104,7 @@ static ErrorOr find_regional_values_for_locale(StringView locale, GetRegional return !container.is_empty(); }; - if (auto regional_values = TRY(get_regional_values(locale)); has_value(regional_values)) + if (auto regional_values = get_regional_values(locale); has_value(regional_values)) return regional_values; auto return_default_values = [&]() { return get_regional_values("001"sv); }; @@ -118,35 +118,29 @@ static ErrorOr find_regional_values_for_locale(StringView locale, GetRegional if (!language.has_value() || !language->region.has_value()) return return_default_values(); - if (auto regional_values = TRY(get_regional_values(*language->region)); has_value(regional_values)) + if (auto regional_values = get_regional_values(*language->region); has_value(regional_values)) return regional_values; return return_default_values(); } -template -static ErrorOr find_regional_values_for_locale(StringView locale, GetRegionalValues&& get_regional_values) -{ - return find_regional_values_for_locale(locale, [&](auto region) -> ErrorOr { return get_regional_values(region); }); -} - // https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table -ErrorOr> get_locale_hour_cycles(StringView locale) +Vector get_locale_hour_cycles(StringView locale) { return find_regional_values_for_locale>(locale, get_regional_hour_cycles); } -ErrorOr> get_default_regional_hour_cycle(StringView locale) +Optional get_default_regional_hour_cycle(StringView locale) { - if (auto hour_cycles = TRY(get_locale_hour_cycles(locale)); !hour_cycles.is_empty()) + if (auto hour_cycles = get_locale_hour_cycles(locale); !hour_cycles.is_empty()) return hour_cycles.first(); - return OptionalNone {}; + return {}; } Optional __attribute__((weak)) minimum_days_region_from_string(StringView) { return {}; } Optional __attribute__((weak)) get_regional_minimum_days(StringView) { return {}; } -ErrorOr> get_locale_minimum_days(StringView locale) +Optional get_locale_minimum_days(StringView locale) { return find_regional_values_for_locale>(locale, get_regional_minimum_days); } @@ -154,7 +148,7 @@ ErrorOr> get_locale_minimum_days(StringView locale) Optional __attribute__((weak)) first_day_region_from_string(StringView) { return {}; } Optional __attribute__((weak)) get_regional_first_day(StringView) { return {}; } -ErrorOr> get_locale_first_day(StringView locale) +Optional get_locale_first_day(StringView locale) { return find_regional_values_for_locale>(locale, get_regional_first_day); } @@ -162,7 +156,7 @@ ErrorOr> get_locale_first_day(StringView locale) Optional __attribute__((weak)) weekend_start_region_from_string(StringView) { return {}; } Optional __attribute__((weak)) get_regional_weekend_start(StringView) { return {}; } -ErrorOr> get_locale_weekend_start(StringView locale) +Optional get_locale_weekend_start(StringView locale) { return find_regional_values_for_locale>(locale, get_regional_weekend_start); } @@ -170,12 +164,12 @@ ErrorOr> get_locale_weekend_start(StringView locale) Optional __attribute__((weak)) weekend_end_region_from_string(StringView) { return {}; } Optional __attribute__((weak)) get_regional_weekend_end(StringView) { return {}; } -ErrorOr> get_locale_weekend_end(StringView locale) +Optional get_locale_weekend_end(StringView locale) { return find_regional_values_for_locale>(locale, get_regional_weekend_end); } -ErrorOr combine_skeletons(StringView first, StringView second) +String combine_skeletons(StringView first, StringView second) { // https://unicode.org/reports/tr35/tr35-dates.html#availableFormats_appendItems constexpr auto field_order = Array { @@ -193,34 +187,34 @@ ErrorOr combine_skeletons(StringView first, StringView second) StringBuilder builder; - auto append_from_skeleton = [&](auto skeleton, auto ch) -> ErrorOr { + auto append_from_skeleton = [&](auto skeleton, auto ch) { auto first_index = skeleton.find(ch); if (!first_index.has_value()) return false; auto last_index = skeleton.find_last(ch); - TRY(builder.try_append(skeleton.substring_view(*first_index, *last_index - *first_index + 1))); + builder.append(skeleton.substring_view(*first_index, *last_index - *first_index + 1)); return true; }; for (auto fields : field_order) { for (auto ch : fields) { - if (TRY(append_from_skeleton(first, ch))) + if (append_from_skeleton(first, ch)) break; - if (TRY(append_from_skeleton(second, ch))) + if (append_from_skeleton(second, ch)) break; } } - return builder.to_string(); + return MUST(builder.to_string()); } -ErrorOr> __attribute__((weak)) get_calendar_date_format(StringView, StringView) { return OptionalNone {}; } -ErrorOr> __attribute__((weak)) get_calendar_time_format(StringView, StringView) { return OptionalNone {}; } -ErrorOr> __attribute__((weak)) get_calendar_date_time_format(StringView, StringView) { return OptionalNone {}; } +Optional __attribute__((weak)) get_calendar_date_format(StringView, StringView) { return {}; } +Optional __attribute__((weak)) get_calendar_time_format(StringView, StringView) { return {}; } +Optional __attribute__((weak)) get_calendar_date_time_format(StringView, StringView) { return {}; } -ErrorOr> get_calendar_format(StringView locale, StringView calendar, CalendarFormatType type) +Optional get_calendar_format(StringView locale, StringView calendar, CalendarFormatType type) { switch (type) { case CalendarFormatType::Date: @@ -234,31 +228,31 @@ ErrorOr> get_calendar_format(StringView locale, StringV } } -ErrorOr> __attribute__((weak)) get_calendar_available_formats(StringView, StringView) { return Vector {}; } -ErrorOr> __attribute__((weak)) get_calendar_default_range_format(StringView, StringView) { return OptionalNone {}; } -ErrorOr> __attribute__((weak)) get_calendar_range_formats(StringView, StringView, StringView) { return Vector {}; } -ErrorOr> __attribute__((weak)) get_calendar_range12_formats(StringView, StringView, StringView) { return Vector {}; } -ErrorOr> __attribute__((weak)) get_calendar_era_symbol(StringView, StringView, CalendarPatternStyle, Era) { return OptionalNone {}; } -ErrorOr> __attribute__((weak)) get_calendar_month_symbol(StringView, StringView, CalendarPatternStyle, Month) { return OptionalNone {}; } -ErrorOr> __attribute__((weak)) get_calendar_weekday_symbol(StringView, StringView, CalendarPatternStyle, Weekday) { return OptionalNone {}; } -ErrorOr> __attribute__((weak)) get_calendar_day_period_symbol(StringView, StringView, CalendarPatternStyle, DayPeriod) { return OptionalNone {}; } -ErrorOr> __attribute__((weak)) get_calendar_day_period_symbol_for_hour(StringView, StringView, CalendarPatternStyle, u8) { return OptionalNone {}; } +Vector __attribute__((weak)) get_calendar_available_formats(StringView, StringView) { return {}; } +Optional __attribute__((weak)) get_calendar_default_range_format(StringView, StringView) { return {}; } +Vector __attribute__((weak)) get_calendar_range_formats(StringView, StringView, StringView) { return {}; } +Vector __attribute__((weak)) get_calendar_range12_formats(StringView, StringView, StringView) { return {}; } +Optional __attribute__((weak)) get_calendar_era_symbol(StringView, StringView, CalendarPatternStyle, Era) { return {}; } +Optional __attribute__((weak)) get_calendar_month_symbol(StringView, StringView, CalendarPatternStyle, Month) { return {}; } +Optional __attribute__((weak)) get_calendar_weekday_symbol(StringView, StringView, CalendarPatternStyle, Weekday) { return {}; } +Optional __attribute__((weak)) get_calendar_day_period_symbol(StringView, StringView, CalendarPatternStyle, DayPeriod) { return {}; } +Optional __attribute__((weak)) get_calendar_day_period_symbol_for_hour(StringView, StringView, CalendarPatternStyle, u8) { return {}; } Optional __attribute__((weak)) get_time_zone_name(StringView, StringView, CalendarPatternStyle, TimeZone::InDST) { return {}; } Optional __attribute__((weak)) get_time_zone_format(StringView) { return {}; } -static ErrorOr> format_time_zone_offset(StringView locale, CalendarPatternStyle style, i64 offset_seconds) +static Optional format_time_zone_offset(StringView locale, CalendarPatternStyle style, i64 offset_seconds) { auto formats = get_time_zone_format(locale); if (!formats.has_value()) - return OptionalNone {}; + return {}; auto number_system = get_preferred_keyword_value_for_locale(locale, "nu"sv); if (!number_system.has_value()) - return OptionalNone {}; + return {}; if (offset_seconds == 0) - return String::from_utf8(formats->gmt_zero_format); + return MUST(String::from_utf8(formats->gmt_zero_format)); auto sign = offset_seconds > 0 ? formats->symbol_ahead_sign : formats->symbol_behind_sign; auto separator = offset_seconds > 0 ? formats->symbol_ahead_separator : formats->symbol_behind_separator; @@ -271,23 +265,23 @@ static ErrorOr> format_time_zone_offset(StringView locale, Cale offset_seconds %= 60; StringBuilder builder; - TRY(builder.try_append(sign)); + builder.append(sign); switch (style) { // The long format always uses 2-digit hours field and minutes field, with optional 2-digit seconds field. case CalendarPatternStyle::LongOffset: - TRY(builder.try_appendff("{:02}{}{:02}", offset_hours, separator, offset_minutes)); + builder.appendff("{:02}{}{:02}", offset_hours, separator, offset_minutes); if (offset_seconds > 0) - TRY(builder.try_appendff("{}{:02}", separator, offset_seconds)); + builder.appendff("{}{:02}", separator, offset_seconds); break; // The short format is intended for the shortest representation and uses hour fields without leading zero, with optional 2-digit minutes and seconds fields. case CalendarPatternStyle::ShortOffset: - TRY(builder.try_appendff("{}", offset_hours)); + builder.appendff("{}", offset_hours); if (offset_minutes > 0) { - TRY(builder.try_appendff("{}{:02}", separator, offset_minutes)); + builder.appendff("{}{:02}", separator, offset_minutes); if (offset_seconds > 0) - TRY(builder.try_appendff("{}{:02}", separator, offset_seconds)); + builder.appendff("{}{:02}", separator, offset_seconds); } break; @@ -296,16 +290,16 @@ static ErrorOr> format_time_zone_offset(StringView locale, Cale } // The digits used for hours, minutes and seconds fields in this format are the locale's default decimal digits. - auto result = replace_digits_for_number_system(*number_system, TRY(builder.to_string())); - return TRY(String::from_utf8(formats->gmt_format)).replace("{0}"sv, result, ReplaceMode::FirstOnly); + auto result = replace_digits_for_number_system(*number_system, builder.string_view()); + return MUST(MUST(String::from_utf8(formats->gmt_format)).replace("{0}"sv, result, ReplaceMode::FirstOnly)); } // https://unicode.org/reports/tr35/tr35-dates.html#Time_Zone_Format_Terminology -ErrorOr format_time_zone(StringView locale, StringView time_zone, CalendarPatternStyle style, AK::UnixDateTime time) +String format_time_zone(StringView locale, StringView time_zone, CalendarPatternStyle style, AK::UnixDateTime time) { auto offset = TimeZone::get_time_zone_offset(time_zone, time); if (!offset.has_value()) - return String::from_utf8(time_zone); + return MUST(String::from_utf8(time_zone)); switch (style) { case CalendarPatternStyle::Short: @@ -313,14 +307,14 @@ ErrorOr format_time_zone(StringView locale, StringView time_zone, Calend case CalendarPatternStyle::ShortGeneric: case CalendarPatternStyle::LongGeneric: if (auto name = get_time_zone_name(locale, time_zone, style, offset->in_dst); name.has_value()) - return String::from_utf8(*name); + return MUST(String::from_utf8(*name)); break; case CalendarPatternStyle::ShortOffset: case CalendarPatternStyle::LongOffset: - if (auto formatted_offset = TRY(format_time_zone_offset(locale, style, offset->seconds)); formatted_offset.has_value()) + if (auto formatted_offset = format_time_zone_offset(locale, style, offset->seconds); formatted_offset.has_value()) return formatted_offset.release_value(); - return String::from_utf8(time_zone); + return MUST(String::from_utf8(time_zone)); default: VERIFY_NOT_REACHED(); diff --git a/Userland/Libraries/LibLocale/DateTimeFormat.h b/Userland/Libraries/LibLocale/DateTimeFormat.h index 7fe86a84321..91b84b18154 100644 --- a/Userland/Libraries/LibLocale/DateTimeFormat.h +++ b/Userland/Libraries/LibLocale/DateTimeFormat.h @@ -6,7 +6,6 @@ #pragma once -#include #include #include #include @@ -189,44 +188,44 @@ CalendarPatternStyle calendar_pattern_style_from_string(StringView style); StringView calendar_pattern_style_to_string(CalendarPatternStyle style); Optional hour_cycle_region_from_string(StringView hour_cycle_region); -ErrorOr> get_regional_hour_cycles(StringView region); -ErrorOr> get_locale_hour_cycles(StringView locale); -ErrorOr> get_default_regional_hour_cycle(StringView locale); +Vector get_regional_hour_cycles(StringView region); +Vector get_locale_hour_cycles(StringView locale); +Optional get_default_regional_hour_cycle(StringView locale); Optional minimum_days_region_from_string(StringView minimum_days_region); Optional get_regional_minimum_days(StringView region); -ErrorOr> get_locale_minimum_days(StringView locale); +Optional get_locale_minimum_days(StringView locale); Optional first_day_region_from_string(StringView first_day_region); Optional get_regional_first_day(StringView region); -ErrorOr> get_locale_first_day(StringView locale); +Optional get_locale_first_day(StringView locale); Optional weekend_start_region_from_string(StringView weekend_start_region); Optional get_regional_weekend_start(StringView region); -ErrorOr> get_locale_weekend_start(StringView locale); +Optional get_locale_weekend_start(StringView locale); Optional weekend_end_region_from_string(StringView weekend_end_region); Optional get_regional_weekend_end(StringView region); -ErrorOr> get_locale_weekend_end(StringView locale); +Optional get_locale_weekend_end(StringView locale); -ErrorOr combine_skeletons(StringView first, StringView second); +String combine_skeletons(StringView first, StringView second); -ErrorOr> get_calendar_date_format(StringView locale, StringView calendar); -ErrorOr> get_calendar_time_format(StringView locale, StringView calendar); -ErrorOr> get_calendar_date_time_format(StringView locale, StringView calendar); -ErrorOr> get_calendar_format(StringView locale, StringView calendar, CalendarFormatType type); -ErrorOr> get_calendar_available_formats(StringView locale, StringView calendar); -ErrorOr> get_calendar_default_range_format(StringView locale, StringView calendar); -ErrorOr> get_calendar_range_formats(StringView locale, StringView calendar, StringView skeleton); -ErrorOr> get_calendar_range12_formats(StringView locale, StringView calendar, StringView skeleton); +Optional get_calendar_date_format(StringView locale, StringView calendar); +Optional get_calendar_time_format(StringView locale, StringView calendar); +Optional get_calendar_date_time_format(StringView locale, StringView calendar); +Optional get_calendar_format(StringView locale, StringView calendar, CalendarFormatType type); +Vector get_calendar_available_formats(StringView locale, StringView calendar); +Optional get_calendar_default_range_format(StringView locale, StringView calendar); +Vector get_calendar_range_formats(StringView locale, StringView calendar, StringView skeleton); +Vector get_calendar_range12_formats(StringView locale, StringView calendar, StringView skeleton); -ErrorOr> get_calendar_era_symbol(StringView locale, StringView calendar, CalendarPatternStyle style, Era value); -ErrorOr> get_calendar_month_symbol(StringView locale, StringView calendar, CalendarPatternStyle style, Month value); -ErrorOr> get_calendar_weekday_symbol(StringView locale, StringView calendar, CalendarPatternStyle style, Weekday value); -ErrorOr> get_calendar_day_period_symbol(StringView locale, StringView calendar, CalendarPatternStyle style, DayPeriod value); -ErrorOr> get_calendar_day_period_symbol_for_hour(StringView locale, StringView calendar, CalendarPatternStyle style, u8 hour); +Optional get_calendar_era_symbol(StringView locale, StringView calendar, CalendarPatternStyle style, Era value); +Optional get_calendar_month_symbol(StringView locale, StringView calendar, CalendarPatternStyle style, Month value); +Optional get_calendar_weekday_symbol(StringView locale, StringView calendar, CalendarPatternStyle style, Weekday value); +Optional get_calendar_day_period_symbol(StringView locale, StringView calendar, CalendarPatternStyle style, DayPeriod value); +Optional get_calendar_day_period_symbol_for_hour(StringView locale, StringView calendar, CalendarPatternStyle style, u8 hour); -ErrorOr format_time_zone(StringView locale, StringView time_zone, CalendarPatternStyle style, AK::UnixDateTime time); +String format_time_zone(StringView locale, StringView time_zone, CalendarPatternStyle style, AK::UnixDateTime time); Optional get_time_zone_name(StringView locale, StringView time_zone, CalendarPatternStyle style, TimeZone::InDST in_dst); Optional get_time_zone_format(StringView locale);