diff --git a/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateDateTimeFormatData.cpp b/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateDateTimeFormatData.cpp index 47eed1bd961..860eef598ef 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateDateTimeFormatData.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateDateTimeFormatData.cpp @@ -75,7 +75,7 @@ constexpr auto s_day_period_list_index_type = "u8"sv; using HourCycleListIndexType = u8; constexpr auto s_hour_cycle_list_index_type = "u8"sv; -struct CalendarPattern : public Unicode::CalendarPattern { +struct CalendarPattern : public Locale::CalendarPattern { bool contains_only_date_fields() const { return !day_period.has_value() && !hour.has_value() && !minute.has_value() && !second.has_value() && !fractional_second_digits.has_value() && !time_zone_name.has_value(); @@ -195,7 +195,7 @@ struct CalendarRangePattern : public CalendarPattern { && (end_range == other.end_range); } - Optional field {}; + Optional field {}; StringIndexType start_range { 0 }; StringIndexType separator { 0 }; StringIndexType end_range { 0 }; @@ -500,7 +500,7 @@ struct DayPeriod { && (end == other.end); } - Unicode::DayPeriod day_period {}; + Locale::DayPeriod day_period {}; u8 begin { 0 }; u8 end { 0 }; }; @@ -524,11 +524,11 @@ struct AK::Traits : public GenericTraits { using TimeZoneNamesList = Vector; using DayPeriodList = Vector; -using HourCycleList = Vector; +using HourCycleList = Vector; template<> -struct AK::Formatter : Formatter { - ErrorOr format(FormatBuilder& builder, Unicode::HourCycle hour_cycle) +struct AK::Formatter : Formatter { + ErrorOr format(FormatBuilder& builder, Locale::HourCycle hour_cycle) { return builder.put_u64(to_underlying(hour_cycle)); } @@ -569,13 +569,13 @@ struct CLDR { HashMap minimum_days; Vector minimum_days_regions; - HashMap first_day; + HashMap first_day; Vector first_day_regions; - HashMap weekend_start; + HashMap weekend_start; Vector weekend_start_regions; - HashMap weekend_end; + HashMap weekend_end; Vector weekend_end_regions; HashMap> meta_zones; @@ -584,30 +584,30 @@ struct CLDR { Vector calendars; }; -static Optional day_period_from_string(StringView day_period) +static Optional day_period_from_string(StringView day_period) { if (day_period == "am"sv) - return Unicode::DayPeriod::AM; + return Locale::DayPeriod::AM; if (day_period == "pm"sv) - return Unicode::DayPeriod::PM; + return Locale::DayPeriod::PM; if (day_period == "noon"sv) - return Unicode::DayPeriod::Noon; + return Locale::DayPeriod::Noon; if (day_period == "morning1"sv) - return Unicode::DayPeriod::Morning1; + return Locale::DayPeriod::Morning1; if (day_period == "morning2"sv) - return Unicode::DayPeriod::Morning2; + return Locale::DayPeriod::Morning2; if (day_period == "afternoon1"sv) - return Unicode::DayPeriod::Afternoon1; + return Locale::DayPeriod::Afternoon1; if (day_period == "afternoon2"sv) - return Unicode::DayPeriod::Afternoon2; + return Locale::DayPeriod::Afternoon2; if (day_period == "evening1"sv) - return Unicode::DayPeriod::Evening1; + return Locale::DayPeriod::Evening1; if (day_period == "evening2"sv) - return Unicode::DayPeriod::Evening2; + return Locale::DayPeriod::Evening2; if (day_period == "night1"sv) - return Unicode::DayPeriod::Night1; + return Locale::DayPeriod::Night1; if (day_period == "night2"sv) - return Unicode::DayPeriod::Night2; + return Locale::DayPeriod::Night2; return {}; } @@ -622,15 +622,15 @@ static ErrorOr parse_hour_cycles(String core_path, CLDR& cldr) auto const& supplemental_object = time_data.as_object().get("supplemental"sv); auto const& time_data_object = supplemental_object.as_object().get("timeData"sv); - auto parse_hour_cycle = [](StringView hour_cycle) -> Optional { + auto parse_hour_cycle = [](StringView hour_cycle) -> Optional { if (hour_cycle == "h"sv) - return Unicode::HourCycle::H12; + return Locale::HourCycle::H12; if (hour_cycle == "H"sv) - return Unicode::HourCycle::H23; + return Locale::HourCycle::H23; if (hour_cycle == "K"sv) - return Unicode::HourCycle::H11; + return Locale::HourCycle::H11; if (hour_cycle == "k"sv) - return Unicode::HourCycle::H24; + return Locale::HourCycle::H24; return {}; }; @@ -638,7 +638,7 @@ static ErrorOr parse_hour_cycles(String core_path, CLDR& cldr) auto allowed_hour_cycles_string = value.as_object().get("_allowed"sv).as_string(); auto allowed_hour_cycles = allowed_hour_cycles_string.split_view(' '); - Vector hour_cycles; + Vector hour_cycles; for (auto allowed_hour_cycle : allowed_hour_cycles) { if (auto hour_cycle = parse_hour_cycle(allowed_hour_cycle); hour_cycle.has_value()) @@ -666,21 +666,21 @@ static ErrorOr parse_week_data(String core_path, CLDR& cldr) auto const& supplemental_object = week_data.as_object().get("supplemental"sv); auto const& week_data_object = supplemental_object.as_object().get("weekData"sv); - auto parse_weekday = [](StringView day) -> Unicode::Weekday { + auto parse_weekday = [](StringView day) -> Locale::Weekday { if (day == "sun"sv) - return Unicode::Weekday::Sunday; + return Locale::Weekday::Sunday; if (day == "mon"sv) - return Unicode::Weekday::Monday; + return Locale::Weekday::Monday; if (day == "tue"sv) - return Unicode::Weekday::Tuesday; + return Locale::Weekday::Tuesday; if (day == "wed"sv) - return Unicode::Weekday::Wednesday; + return Locale::Weekday::Wednesday; if (day == "thu"sv) - return Unicode::Weekday::Thursday; + return Locale::Weekday::Thursday; if (day == "fri"sv) - return Unicode::Weekday::Friday; + return Locale::Weekday::Friday; if (day == "sat"sv) - return Unicode::Weekday::Saturday; + return Locale::Weekday::Saturday; VERIFY_NOT_REACHED(); }; @@ -803,7 +803,7 @@ static String remove_period_from_pattern(String pattern) static Optional parse_date_time_pattern_raw(String pattern, String skeleton, CLDR& cldr) { // https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table - using Unicode::CalendarPatternStyle; + using Locale::CalendarPatternStyle; CalendarPattern format {}; @@ -1047,25 +1047,25 @@ static void parse_interval_patterns(Calendar& calendar, JsonObject const& interv auto name_of_field = [&](char field) { if (char_is_one_of(field, 'G')) - return Unicode::CalendarRangePattern::Field::Era; + return Locale::CalendarRangePattern::Field::Era; if (char_is_one_of(field, 'y', 'Y', 'u', 'U', 'r')) - return Unicode::CalendarRangePattern::Field::Year; + return Locale::CalendarRangePattern::Field::Year; if (char_is_one_of(field, 'M', 'L')) - return Unicode::CalendarRangePattern::Field::Month; + return Locale::CalendarRangePattern::Field::Month; if (char_is_one_of(field, 'd', 'D', 'F', 'g')) - return Unicode::CalendarRangePattern::Field::Day; + return Locale::CalendarRangePattern::Field::Day; if (char_is_one_of(field, 'a', 'b')) - return Unicode::CalendarRangePattern::Field::AmPm; + return Locale::CalendarRangePattern::Field::AmPm; if (char_is_one_of(field, 'B')) - return Unicode::CalendarRangePattern::Field::DayPeriod; + return Locale::CalendarRangePattern::Field::DayPeriod; if (char_is_one_of(field, 'h', 'H', 'K', 'k')) - return Unicode::CalendarRangePattern::Field::Hour; + return Locale::CalendarRangePattern::Field::Hour; if (char_is_one_of(field, 'm')) - return Unicode::CalendarRangePattern::Field::Minute; + return Locale::CalendarRangePattern::Field::Minute; if (char_is_one_of(field, 's')) - return Unicode::CalendarRangePattern::Field::Second; + return Locale::CalendarRangePattern::Field::Second; if (char_is_one_of(field, 'S')) - return Unicode::CalendarRangePattern::Field::FractionalSecondDigits; + return Locale::CalendarRangePattern::Field::FractionalSecondDigits; VERIFY_NOT_REACHED(); }; @@ -1227,12 +1227,12 @@ static void generate_missing_patterns(Calendar& calendar, CalendarPatternList& f auto const& date_time_formats = cldr.unique_formats.get(calendar.date_time_formats); CalendarPatternIndexType date_time_format_index = 0; - if (date_format.month == Unicode::CalendarPatternStyle::Long) { + if (date_format.month == Locale::CalendarPatternStyle::Long) { if (date_format.weekday.has_value()) date_time_format_index = date_time_formats.full_format; else date_time_format_index = date_time_formats.long_format; - } else if (date_format.month == Unicode::CalendarPatternStyle::Short) { + } else if (date_format.month == Locale::CalendarPatternStyle::Short) { date_time_format_index = date_time_formats.medium_format; } else { date_time_format_index = date_time_formats.short_format; @@ -1314,7 +1314,7 @@ static void parse_calendar_symbols(Calendar& calendar, JsonObject const& calenda append_symbol(symbol_lists[2], key, value.as_string()); }); - store_symbol_lists(Unicode::CalendarSymbol::Era, move(symbol_lists)); + store_symbol_lists(Locale::CalendarSymbol::Era, move(symbol_lists)); }; auto parse_month_symbols = [&](auto const& symbols_object) { @@ -1338,7 +1338,7 @@ static void parse_calendar_symbols(Calendar& calendar, JsonObject const& calenda append_symbol(symbol_lists[2], key, value.as_string()); }); - store_symbol_lists(Unicode::CalendarSymbol::Month, move(symbol_lists)); + store_symbol_lists(Locale::CalendarSymbol::Month, move(symbol_lists)); }; auto parse_weekday_symbols = [&](auto const& symbols_object) { @@ -1349,19 +1349,19 @@ static void parse_calendar_symbols(Calendar& calendar, JsonObject const& calenda auto append_symbol = [&](auto& symbols, auto const& key, auto symbol) { if (key == "sun"sv) - symbols[to_underlying(Unicode::Weekday::Sunday)] = cldr.unique_strings.ensure(move(symbol)); + symbols[to_underlying(Locale::Weekday::Sunday)] = cldr.unique_strings.ensure(move(symbol)); else if (key == "mon"sv) - symbols[to_underlying(Unicode::Weekday::Monday)] = cldr.unique_strings.ensure(move(symbol)); + symbols[to_underlying(Locale::Weekday::Monday)] = cldr.unique_strings.ensure(move(symbol)); else if (key == "tue"sv) - symbols[to_underlying(Unicode::Weekday::Tuesday)] = cldr.unique_strings.ensure(move(symbol)); + symbols[to_underlying(Locale::Weekday::Tuesday)] = cldr.unique_strings.ensure(move(symbol)); else if (key == "wed"sv) - symbols[to_underlying(Unicode::Weekday::Wednesday)] = cldr.unique_strings.ensure(move(symbol)); + symbols[to_underlying(Locale::Weekday::Wednesday)] = cldr.unique_strings.ensure(move(symbol)); else if (key == "thu"sv) - symbols[to_underlying(Unicode::Weekday::Thursday)] = cldr.unique_strings.ensure(move(symbol)); + symbols[to_underlying(Locale::Weekday::Thursday)] = cldr.unique_strings.ensure(move(symbol)); else if (key == "fri"sv) - symbols[to_underlying(Unicode::Weekday::Friday)] = cldr.unique_strings.ensure(move(symbol)); + symbols[to_underlying(Locale::Weekday::Friday)] = cldr.unique_strings.ensure(move(symbol)); else if (key == "sat"sv) - symbols[to_underlying(Unicode::Weekday::Saturday)] = cldr.unique_strings.ensure(move(symbol)); + symbols[to_underlying(Locale::Weekday::Saturday)] = cldr.unique_strings.ensure(move(symbol)); }; narrow_symbols.for_each_member([&](auto const& key, JsonValue const& value) { @@ -1374,7 +1374,7 @@ static void parse_calendar_symbols(Calendar& calendar, JsonObject const& calenda append_symbol(symbol_lists[2], key, value.as_string()); }); - store_symbol_lists(Unicode::CalendarSymbol::Weekday, move(symbol_lists)); + store_symbol_lists(Locale::CalendarSymbol::Weekday, move(symbol_lists)); }; auto parse_day_period_symbols = [&](auto const& symbols_object) { @@ -1398,7 +1398,7 @@ static void parse_calendar_symbols(Calendar& calendar, JsonObject const& calenda append_symbol(symbol_lists[2], key, value.as_string()); }); - store_symbol_lists(Unicode::CalendarSymbol::DayPeriod, move(symbol_lists)); + store_symbol_lists(Locale::CalendarSymbol::DayPeriod, move(symbol_lists)); }; parse_era_symbols(calendar_object.get("eras"sv).as_object()); @@ -1726,7 +1726,7 @@ static ErrorOr generate_unicode_locale_header(Core::Stream::BufferedFile& #include -namespace Unicode { +namespace Locale { )~~~"); generate_enum(generator, format_identifier, "Calendar"sv, {}, cldr.calendars); @@ -1774,7 +1774,7 @@ static ErrorOr generate_unicode_locale_implementation(Core::Stream::Buffer #include #include -namespace Unicode { +namespace Locale { )~~~"); cldr.unique_strings.generate(generator); @@ -2099,9 +2099,9 @@ Optional<@return_type@> get_regional_@lookup_type@(StringView region) }; append_regional_lookup("u8"sv, "minimum_days"sv); - append_regional_lookup("Unicode::Weekday"sv, "first_day"sv); - append_regional_lookup("Unicode::Weekday"sv, "weekend_start"sv); - append_regional_lookup("Unicode::Weekday"sv, "weekend_end"sv); + append_regional_lookup("Weekday"sv, "first_day"sv); + append_regional_lookup("Weekday"sv, "weekend_start"sv); + append_regional_lookup("Weekday"sv, "weekend_end"sv); generator.append(R"~~~( static CalendarData const* find_calendar_data(StringView locale, StringView calendar) diff --git a/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateLocaleData.cpp b/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateLocaleData.cpp index 87024611ab8..933ff85893d 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateLocaleData.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateLocaleData.cpp @@ -1051,7 +1051,7 @@ static ErrorOr generate_unicode_locale_header(Core::Stream::BufferedFile& #include -namespace Unicode { +namespace Locale { )~~~"); auto locales = cldr.locales.keys(); @@ -1107,7 +1107,7 @@ static ErrorOr generate_unicode_locale_implementation(Core::Stream::Buffer #include #include -namespace Unicode { +namespace Locale { )~~~"); cldr.unique_strings.generate(generator); diff --git a/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateNumberFormatData.cpp b/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateNumberFormatData.cpp index 650daf075c5..dc935b63429 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateNumberFormatData.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateNumberFormatData.cpp @@ -55,8 +55,8 @@ enum class NumberFormatType { Compact, }; -struct NumberFormat : public Unicode::NumberFormat { - using Base = Unicode::NumberFormat; +struct NumberFormat : public Locale::NumberFormat { + using Base = Locale::NumberFormat; unsigned hash() const { @@ -478,7 +478,7 @@ static ErrorOr parse_number_systems(String locale_numbers_path, CLDR& cldr VERIFY(split_key[0] == "unitPattern"sv); } - format.plurality = Unicode::plural_category_from_string(split_key[2]); + format.plurality = Locale::plural_category_from_string(split_key[2]); parse_number_pattern(move(patterns), cldr, NumberFormatType::Compact, format); auto format_index = cldr.unique_formats.ensure(move(format)); @@ -488,27 +488,27 @@ static ErrorOr parse_number_systems(String locale_numbers_path, CLDR& cldr return cldr.unique_format_lists.ensure(move(result)); }; - auto numeric_symbol_from_string = [&](StringView numeric_symbol) -> Optional { + auto numeric_symbol_from_string = [&](StringView numeric_symbol) -> Optional { if (numeric_symbol == "approximatelySign"sv) - return Unicode::NumericSymbol::ApproximatelySign; + return Locale::NumericSymbol::ApproximatelySign; if (numeric_symbol == "decimal"sv) - return Unicode::NumericSymbol::Decimal; + return Locale::NumericSymbol::Decimal; if (numeric_symbol == "exponential"sv) - return Unicode::NumericSymbol::Exponential; + return Locale::NumericSymbol::Exponential; if (numeric_symbol == "group"sv) - return Unicode::NumericSymbol::Group; + return Locale::NumericSymbol::Group; if (numeric_symbol == "infinity"sv) - return Unicode::NumericSymbol::Infinity; + return Locale::NumericSymbol::Infinity; if (numeric_symbol == "minusSign"sv) - return Unicode::NumericSymbol::MinusSign; + return Locale::NumericSymbol::MinusSign; if (numeric_symbol == "nan"sv) - return Unicode::NumericSymbol::NaN; + return Locale::NumericSymbol::NaN; if (numeric_symbol == "percentSign"sv) - return Unicode::NumericSymbol::PercentSign; + return Locale::NumericSymbol::PercentSign; if (numeric_symbol == "plusSign"sv) - return Unicode::NumericSymbol::PlusSign; + return Locale::NumericSymbol::PlusSign; if (numeric_symbol == "timeSeparator"sv) - return Unicode::NumericSymbol::TimeSeparator; + return Locale::NumericSymbol::TimeSeparator; return {}; }; @@ -548,11 +548,11 @@ static ErrorOr parse_number_systems(String locale_numbers_path, CLDR& cldr auto end_index = range_separator.find("{1}"sv).value(); range_separator = range_separator.substring(begin_index, end_index - begin_index); - if (to_underlying(Unicode::NumericSymbol::RangeSeparator) >= symbols.size()) - symbols.resize(to_underlying(Unicode::NumericSymbol::RangeSeparator) + 1); + if (to_underlying(Locale::NumericSymbol::RangeSeparator) >= symbols.size()) + symbols.resize(to_underlying(Locale::NumericSymbol::RangeSeparator) + 1); auto symbol_index = cldr.unique_strings.ensure(move(range_separator)); - symbols[to_underlying(Unicode::NumericSymbol::RangeSeparator)] = symbol_index; + symbols[to_underlying(Locale::NumericSymbol::RangeSeparator)] = symbol_index; number_system.symbols = cldr.unique_symbols.ensure(move(symbols)); } else if (key.starts_with(decimal_formats_prefix)) { @@ -644,7 +644,7 @@ static ErrorOr parse_units(String locale_units_path, CLDR& cldr, LocaleDat return find(extra_sanctioned_units.begin(), extra_sanctioned_units.end(), unit_name) != extra_sanctioned_units.end(); }; - auto parse_units_object = [&](auto const& units_object, Unicode::Style style) { + auto parse_units_object = [&](auto const& units_object, Locale::Style style) { constexpr auto unit_pattern_prefix = "unitPattern-count-"sv; constexpr auto combined_unit_separator = "-per-"sv; @@ -676,7 +676,7 @@ static ErrorOr parse_units(String locale_units_path, CLDR& cldr, LocaleDat NumberFormat format {}; auto plurality = unit_key.substring_view(unit_pattern_prefix.length()); - format.plurality = Unicode::plural_category_from_string(plurality); + format.plurality = Locale::plural_category_from_string(plurality); auto zero_format = pattern_value.as_string().replace("{0}"sv, "{number}"sv, ReplaceMode::FirstOnly); zero_format = parse_identifiers(zero_format, "unitIdentifier"sv, cldr, format); @@ -691,13 +691,13 @@ static ErrorOr parse_units(String locale_units_path, CLDR& cldr, LocaleDat auto number_format_list_index = cldr.unique_format_lists.ensure(move(formats)); switch (style) { - case Unicode::Style::Long: + case Locale::Style::Long: unit.long_formats = number_format_list_index; break; - case Unicode::Style::Short: + case Locale::Style::Short: unit.short_formats = number_format_list_index; break; - case Unicode::Style::Narrow: + case Locale::Style::Narrow: unit.narrow_formats = number_format_list_index; break; default: @@ -706,9 +706,9 @@ static ErrorOr parse_units(String locale_units_path, CLDR& cldr, LocaleDat }); }; - parse_units_object(long_object.as_object(), Unicode::Style::Long); - parse_units_object(short_object.as_object(), Unicode::Style::Short); - parse_units_object(narrow_object.as_object(), Unicode::Style::Narrow); + parse_units_object(long_object.as_object(), Locale::Style::Long); + parse_units_object(short_object.as_object(), Locale::Style::Short); + parse_units_object(narrow_object.as_object(), Locale::Style::Narrow); for (auto& unit : units) { auto unit_index = cldr.unique_units.ensure(move(unit.value)); @@ -776,7 +776,7 @@ static ErrorOr generate_unicode_locale_header(Core::Stream::BufferedFile& #pragma once -namespace Unicode { +namespace Locale { )~~~"); generate_enum(generator, format_identifier, "NumberSystem"sv, {}, cldr.number_systems); @@ -812,7 +812,7 @@ static ErrorOr generate_unicode_locale_implementation(Core::Stream::Buffer #include #include -namespace Unicode { +namespace Locale { )~~~"); cldr.unique_strings.generate(generator); diff --git a/Meta/Lagom/Tools/CodeGenerators/LibLocale/GeneratePluralRulesData.cpp b/Meta/Lagom/Tools/CodeGenerators/LibLocale/GeneratePluralRulesData.cpp index 5d823b2a7d0..55213981235 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibLocale/GeneratePluralRulesData.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibLocale/GeneratePluralRulesData.cpp @@ -67,7 +67,7 @@ struct Relation { else if (symbol == 'e' || symbol == 'c') generator.append(exponential_variable_name()); else - generator.append(String::formatted("ops.{}", Unicode::PluralOperands::symbol_to_variable_name(symbol))); + generator.append(String::formatted("ops.{}", Locale::PluralOperands::symbol_to_variable_name(symbol))); }; auto append_value = [&](u32 value) { @@ -78,7 +78,7 @@ struct Relation { auto append_range = [&](auto const& range) { // This check avoids generating "0 <= unsigned_value", which is always true. - if (range[0] != 0 || Unicode::PluralOperands::symbol_requires_floating_point_modulus(symbol)) { + if (range[0] != 0 || Locale::PluralOperands::symbol_requires_floating_point_modulus(symbol)) { generator.append(String::formatted("{} <= ", range[0])); append_variable_name(); generator.append(" && "sv); @@ -129,10 +129,10 @@ struct Relation { generated_variables.set(variable); generator.set("variable"sv, move(variable)); - generator.set("operand"sv, Unicode::PluralOperands::symbol_to_variable_name(symbol)); + generator.set("operand"sv, Locale::PluralOperands::symbol_to_variable_name(symbol)); generator.set("modulus"sv, String::number(*modulus)); - if (Unicode::PluralOperands::symbol_requires_floating_point_modulus(symbol)) { + if (Locale::PluralOperands::symbol_requires_floating_point_modulus(symbol)) { generator.append(R"~~~( auto @variable@ = fmod(ops.@operand@, @modulus@);)~~~"); } else { @@ -439,7 +439,7 @@ static ErrorOr generate_unicode_locale_header(Core::Stream::BufferedFile& #pragma once -namespace Unicode { +namespace Locale { )~~~"); generator.append(R"~~~( @@ -466,7 +466,7 @@ static ErrorOr generate_unicode_locale_implementation(Core::Stream::Buffer #include #include -namespace Unicode { +namespace Locale { using PluralCategoryFunction = PluralCategory(*)(PluralOperands); using PluralRangeFunction = PluralCategory(*)(PluralCategory, PluralCategory); diff --git a/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateRelativeTimeFormatData.cpp b/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateRelativeTimeFormatData.cpp index 80fda310ce5..736c3952f46 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateRelativeTimeFormatData.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibLocale/GenerateRelativeTimeFormatData.cpp @@ -180,7 +180,7 @@ static ErrorOr generate_unicode_locale_header(Core::Stream::BufferedFile& #include -namespace Unicode { +namespace Locale { )~~~"); generator.append(R"~~~( @@ -207,7 +207,7 @@ static ErrorOr generate_unicode_locale_implementation(Core::Stream::Buffer #include #include -namespace Unicode { +namespace Locale { )~~~"); cldr.unique_strings.generate(generator); diff --git a/Meta/Lagom/Tools/CodeGenerators/LibUnicode/GenerateUnicodeData.cpp b/Meta/Lagom/Tools/CodeGenerators/LibUnicode/GenerateUnicodeData.cpp index 0813b2e2051..c69e9054444 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibUnicode/GenerateUnicodeData.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibUnicode/GenerateUnicodeData.cpp @@ -714,7 +714,7 @@ struct SpecialCasing { u32 titlecase_mapping[@casing_transform_size@]; u32 titlecase_mapping_size { 0 }; - Locale locale { Locale::None }; + Locale::Locale locale { Locale::Locale::None }; Condition condition { Condition::None }; }; @@ -780,7 +780,7 @@ static constexpr Array s_special_casing { append_list_and_size(casing.titlecase_mapping, format); generator.set("locale", casing.locale.is_empty() ? "None" : casing.locale); - generator.append(", Locale::@locale@"); + generator.append(", Locale::Locale::@locale@"); generator.set("condition", casing.condition.is_empty() ? "None" : casing.condition); generator.append(", Condition::@condition@"); diff --git a/Meta/Lagom/Tools/CodeGenerators/LibUnicode/GeneratorUtil.h b/Meta/Lagom/Tools/CodeGenerators/LibUnicode/GeneratorUtil.h index b4d38dfb6c4..75aafd5fa02 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibUnicode/GeneratorUtil.h +++ b/Meta/Lagom/Tools/CodeGenerators/LibUnicode/GeneratorUtil.h @@ -285,7 +285,7 @@ struct CanonicalLanguageID { VERIFY(!segments.is_empty()); size_t index = 0; - if (Unicode::is_unicode_language_subtag(segments[index])) { + if (Locale::is_unicode_language_subtag(segments[index])) { language_id.language = unique_strings.ensure(segments[index]); if (segments.size() == ++index) return language_id; @@ -293,20 +293,20 @@ struct CanonicalLanguageID { return Error::from_string_literal("Expected language subtag"); } - if (Unicode::is_unicode_script_subtag(segments[index])) { + if (Locale::is_unicode_script_subtag(segments[index])) { language_id.script = unique_strings.ensure(segments[index]); if (segments.size() == ++index) return language_id; } - if (Unicode::is_unicode_region_subtag(segments[index])) { + if (Locale::is_unicode_region_subtag(segments[index])) { language_id.region = unique_strings.ensure(segments[index]); if (segments.size() == ++index) return language_id; } while (index < segments.size()) { - if (!Unicode::is_unicode_variant_subtag(segments[index])) + if (!Locale::is_unicode_variant_subtag(segments[index])) return Error::from_string_literal("Expected variant subtag"); language_id.variants.append(unique_strings.ensure(segments[index++])); } diff --git a/Tests/LibUnicode/TestUnicodeDateTimeFormat.cpp b/Tests/LibUnicode/TestUnicodeDateTimeFormat.cpp index 7ddfcebaa6c..de6c8cd4a78 100644 --- a/Tests/LibUnicode/TestUnicodeDateTimeFormat.cpp +++ b/Tests/LibUnicode/TestUnicodeDateTimeFormat.cpp @@ -15,67 +15,67 @@ TEST_CASE(time_zone_name) { struct TestData { StringView locale; - Unicode::CalendarPatternStyle style; + Locale::CalendarPatternStyle style; StringView time_zone; StringView expected_result; }; constexpr auto test_data = Array { - TestData { "en"sv, Unicode::CalendarPatternStyle::Long, "UTC"sv, "Coordinated Universal Time"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::Short, "UTC"sv, "UTC"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::LongGeneric, "UTC"sv, "GMT"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::ShortGeneric, "UTC"sv, "GMT"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::Long, "UTC"sv, "Coordinated Universal Time"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::Short, "UTC"sv, "UTC"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::LongGeneric, "UTC"sv, "GMT"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::ShortGeneric, "UTC"sv, "GMT"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::Long, "UTC"sv, "التوقيت العالمي المنسق"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::Short, "UTC"sv, "UTC"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::LongGeneric, "UTC"sv, "غرينتش"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::ShortGeneric, "UTC"sv, "غرينتش"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::Long, "UTC"sv, "التوقيت العالمي المنسق"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::Short, "UTC"sv, "UTC"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::LongGeneric, "UTC"sv, "غرينتش"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::ShortGeneric, "UTC"sv, "غرينتش"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::Long, "America/Los_Angeles"sv, "Pacific Standard Time"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::Short, "America/Los_Angeles"sv, "PST"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::LongGeneric, "America/Los_Angeles"sv, "Pacific Time"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::ShortGeneric, "America/Los_Angeles"sv, "PT"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::Long, "America/Los_Angeles"sv, "Pacific Standard Time"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::Short, "America/Los_Angeles"sv, "PST"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::LongGeneric, "America/Los_Angeles"sv, "Pacific Time"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::ShortGeneric, "America/Los_Angeles"sv, "PT"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::Long, "America/Los_Angeles"sv, "توقيت المحيط الهادي الرسمي"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::Short, "America/Los_Angeles"sv, "غرينتش-٨"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::LongGeneric, "America/Los_Angeles"sv, "توقيت المحيط الهادي"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::ShortGeneric, "America/Los_Angeles"sv, "غرينتش-٨"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::Long, "America/Los_Angeles"sv, "توقيت المحيط الهادي الرسمي"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::Short, "America/Los_Angeles"sv, "غرينتش-٨"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::LongGeneric, "America/Los_Angeles"sv, "توقيت المحيط الهادي"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::ShortGeneric, "America/Los_Angeles"sv, "غرينتش-٨"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::Long, "America/Vancouver"sv, "Pacific Standard Time"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::Short, "America/Vancouver"sv, "PST"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::LongGeneric, "America/Vancouver"sv, "Pacific Time"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::ShortGeneric, "America/Vancouver"sv, "PT"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::Long, "America/Vancouver"sv, "Pacific Standard Time"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::Short, "America/Vancouver"sv, "PST"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::LongGeneric, "America/Vancouver"sv, "Pacific Time"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::ShortGeneric, "America/Vancouver"sv, "PT"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::Long, "America/Vancouver"sv, "توقيت المحيط الهادي الرسمي"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::Short, "America/Vancouver"sv, "غرينتش-٨"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::LongGeneric, "America/Vancouver"sv, "توقيت المحيط الهادي"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::ShortGeneric, "America/Vancouver"sv, "غرينتش-٨"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::Long, "America/Vancouver"sv, "توقيت المحيط الهادي الرسمي"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::Short, "America/Vancouver"sv, "غرينتش-٨"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::LongGeneric, "America/Vancouver"sv, "توقيت المحيط الهادي"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::ShortGeneric, "America/Vancouver"sv, "غرينتش-٨"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::Long, "Europe/London"sv, "Greenwich Mean Time"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::Short, "Europe/London"sv, "GMT"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::LongGeneric, "Europe/London"sv, "GMT"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::ShortGeneric, "Europe/London"sv, "GMT"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::Long, "Europe/London"sv, "Greenwich Mean Time"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::Short, "Europe/London"sv, "GMT"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::LongGeneric, "Europe/London"sv, "GMT"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::ShortGeneric, "Europe/London"sv, "GMT"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::Long, "Europe/London"sv, "توقيت غرينتش"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::Short, "Europe/London"sv, "غرينتش"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::LongGeneric, "Europe/London"sv, "غرينتش"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::ShortGeneric, "Europe/London"sv, "غرينتش"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::Long, "Europe/London"sv, "توقيت غرينتش"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::Short, "Europe/London"sv, "غرينتش"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::LongGeneric, "Europe/London"sv, "غرينتش"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::ShortGeneric, "Europe/London"sv, "غرينتش"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::Long, "Africa/Accra"sv, "Greenwich Mean Time"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::Short, "Africa/Accra"sv, "GMT"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::LongGeneric, "Africa/Accra"sv, "GMT"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::ShortGeneric, "Africa/Accra"sv, "GMT"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::Long, "Africa/Accra"sv, "Greenwich Mean Time"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::Short, "Africa/Accra"sv, "GMT"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::LongGeneric, "Africa/Accra"sv, "GMT"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::ShortGeneric, "Africa/Accra"sv, "GMT"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::Long, "Africa/Accra"sv, "توقيت غرينتش"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::Short, "Africa/Accra"sv, "غرينتش"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::LongGeneric, "Africa/Accra"sv, "غرينتش"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::ShortGeneric, "Africa/Accra"sv, "غرينتش"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::Long, "Africa/Accra"sv, "توقيت غرينتش"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::Short, "Africa/Accra"sv, "غرينتش"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::LongGeneric, "Africa/Accra"sv, "غرينتش"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::ShortGeneric, "Africa/Accra"sv, "غرينتش"sv }, }; constexpr auto jan_1_2022 = AK::Time::from_seconds(1640995200); // Saturday, January 1, 2022 12:00:00 AM for (auto const& test : test_data) { - auto time_zone = Unicode::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); } } @@ -84,48 +84,48 @@ TEST_CASE(time_zone_name_dst) { struct TestData { StringView locale; - Unicode::CalendarPatternStyle style; + Locale::CalendarPatternStyle style; StringView time_zone; StringView expected_result; }; constexpr auto test_data = Array { - TestData { "en"sv, Unicode::CalendarPatternStyle::Long, "UTC"sv, "Coordinated Universal Time"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::Short, "UTC"sv, "UTC"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::Long, "UTC"sv, "Coordinated Universal Time"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::Short, "UTC"sv, "UTC"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::Long, "UTC"sv, "التوقيت العالمي المنسق"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::Short, "UTC"sv, "UTC"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::Long, "UTC"sv, "التوقيت العالمي المنسق"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::Short, "UTC"sv, "UTC"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::Long, "America/Los_Angeles"sv, "Pacific Daylight Time"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::Short, "America/Los_Angeles"sv, "PDT"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::Long, "America/Los_Angeles"sv, "Pacific Daylight Time"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::Short, "America/Los_Angeles"sv, "PDT"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::Long, "America/Los_Angeles"sv, "توقيت المحيط الهادي الصيفي"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::Short, "America/Los_Angeles"sv, "غرينتش-٧"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::Long, "America/Los_Angeles"sv, "توقيت المحيط الهادي الصيفي"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::Short, "America/Los_Angeles"sv, "غرينتش-٧"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::Long, "America/Vancouver"sv, "Pacific Daylight Time"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::Short, "America/Vancouver"sv, "PDT"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::Long, "America/Vancouver"sv, "Pacific Daylight Time"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::Short, "America/Vancouver"sv, "PDT"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::Long, "America/Vancouver"sv, "توقيت المحيط الهادي الصيفي"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::Short, "America/Vancouver"sv, "غرينتش-٧"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::Long, "America/Vancouver"sv, "توقيت المحيط الهادي الصيفي"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::Short, "America/Vancouver"sv, "غرينتش-٧"sv }, // FIXME: This should be "British Summer Time", but the CLDR puts that one name in a section we aren't parsing. - TestData { "en"sv, Unicode::CalendarPatternStyle::Long, "Europe/London"sv, "GMT+01:00"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::Short, "Europe/London"sv, "GMT+1"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::Long, "Europe/London"sv, "GMT+01:00"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::Short, "Europe/London"sv, "GMT+1"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::Long, "Europe/London"sv, "غرينتش+٠١:٠٠"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::Short, "Europe/London"sv, "غرينتش+١"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::Long, "Europe/London"sv, "غرينتش+٠١:٠٠"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::Short, "Europe/London"sv, "غرينتش+١"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::Long, "Africa/Accra"sv, "Greenwich Mean Time"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::Short, "Africa/Accra"sv, "GMT"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::Long, "Africa/Accra"sv, "Greenwich Mean Time"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::Short, "Africa/Accra"sv, "GMT"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::Long, "Africa/Accra"sv, "توقيت غرينتش"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::Short, "Africa/Accra"sv, "غرينتش"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::Long, "Africa/Accra"sv, "توقيت غرينتش"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::Short, "Africa/Accra"sv, "غرينتش"sv }, }; constexpr auto sep_19_2022 = AK::Time::from_seconds(1663553728); // Monday, September 19, 2022 2:15:28 AM for (auto const& test : test_data) { - auto time_zone = Unicode::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); } } @@ -137,52 +137,52 @@ TEST_CASE(format_time_zone_offset) struct TestData { StringView locale; - Unicode::CalendarPatternStyle style; + Locale::CalendarPatternStyle style; AK::Time time; StringView time_zone; StringView expected_result; }; constexpr auto test_data = Array { - TestData { "en"sv, Unicode::CalendarPatternStyle::ShortOffset, {}, "UTC"sv, "GMT"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::LongOffset, {}, "UTC"sv, "GMT"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::ShortOffset, {}, "UTC"sv, "GMT"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::LongOffset, {}, "UTC"sv, "GMT"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::ShortOffset, {}, "UTC"sv, "غرينتش"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::LongOffset, {}, "UTC"sv, "غرينتش"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::ShortOffset, {}, "UTC"sv, "غرينتش"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::LongOffset, {}, "UTC"sv, "غرينتش"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::ShortOffset, jan_1_1833, "America/Los_Angeles"sv, "GMT-7:52:58"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::ShortOffset, jan_1_2022, "America/Los_Angeles"sv, "GMT-8"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::LongOffset, jan_1_1833, "America/Los_Angeles"sv, "GMT-07:52:58"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::LongOffset, jan_1_2022, "America/Los_Angeles"sv, "GMT-08:00"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::ShortOffset, jan_1_1833, "America/Los_Angeles"sv, "GMT-7:52:58"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::ShortOffset, jan_1_2022, "America/Los_Angeles"sv, "GMT-8"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::LongOffset, jan_1_1833, "America/Los_Angeles"sv, "GMT-07:52:58"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::LongOffset, jan_1_2022, "America/Los_Angeles"sv, "GMT-08:00"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::ShortOffset, jan_1_1833, "America/Los_Angeles"sv, "غرينتش-٧:٥٢:٥٨"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::ShortOffset, jan_1_2022, "America/Los_Angeles"sv, "غرينتش-٨"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::LongOffset, jan_1_1833, "America/Los_Angeles"sv, "غرينتش-٠٧:٥٢:٥٨"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::LongOffset, jan_1_2022, "America/Los_Angeles"sv, "غرينتش-٠٨:٠٠"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::ShortOffset, jan_1_1833, "America/Los_Angeles"sv, "غرينتش-٧:٥٢:٥٨"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::ShortOffset, jan_1_2022, "America/Los_Angeles"sv, "غرينتش-٨"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::LongOffset, jan_1_1833, "America/Los_Angeles"sv, "غرينتش-٠٧:٥٢:٥٨"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::LongOffset, jan_1_2022, "America/Los_Angeles"sv, "غرينتش-٠٨:٠٠"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::ShortOffset, jan_1_1833, "Europe/London"sv, "GMT-0:01:15"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::ShortOffset, jan_1_2022, "Europe/London"sv, "GMT"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::LongOffset, jan_1_1833, "Europe/London"sv, "GMT-00:01:15"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::LongOffset, jan_1_2022, "Europe/London"sv, "GMT"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::ShortOffset, jan_1_1833, "Europe/London"sv, "GMT-0:01:15"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::ShortOffset, jan_1_2022, "Europe/London"sv, "GMT"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::LongOffset, jan_1_1833, "Europe/London"sv, "GMT-00:01:15"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::LongOffset, jan_1_2022, "Europe/London"sv, "GMT"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::ShortOffset, jan_1_1833, "Europe/London"sv, "غرينتش-٠:٠١:١٥"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::ShortOffset, jan_1_2022, "Europe/London"sv, "غرينتش"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::LongOffset, jan_1_1833, "Europe/London"sv, "غرينتش-٠٠:٠١:١٥"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::LongOffset, jan_1_2022, "Europe/London"sv, "غرينتش"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::ShortOffset, jan_1_1833, "Europe/London"sv, "غرينتش-٠:٠١:١٥"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::ShortOffset, jan_1_2022, "Europe/London"sv, "غرينتش"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::LongOffset, jan_1_1833, "Europe/London"sv, "غرينتش-٠٠:٠١:١٥"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::LongOffset, jan_1_2022, "Europe/London"sv, "غرينتش"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::ShortOffset, jan_1_1833, "Asia/Kathmandu"sv, "GMT+5:41:16"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::ShortOffset, jan_1_2022, "Asia/Kathmandu"sv, "GMT+5:45"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::LongOffset, jan_1_1833, "Asia/Kathmandu"sv, "GMT+05:41:16"sv }, - TestData { "en"sv, Unicode::CalendarPatternStyle::LongOffset, jan_1_2022, "Asia/Kathmandu"sv, "GMT+05:45"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::ShortOffset, jan_1_1833, "Asia/Kathmandu"sv, "GMT+5:41:16"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::ShortOffset, jan_1_2022, "Asia/Kathmandu"sv, "GMT+5:45"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::LongOffset, jan_1_1833, "Asia/Kathmandu"sv, "GMT+05:41:16"sv }, + TestData { "en"sv, Locale::CalendarPatternStyle::LongOffset, jan_1_2022, "Asia/Kathmandu"sv, "GMT+05:45"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::ShortOffset, jan_1_1833, "Asia/Kathmandu"sv, "غرينتش+٥:٤١:١٦"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::ShortOffset, jan_1_2022, "Asia/Kathmandu"sv, "غرينتش+٥:٤٥"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::LongOffset, jan_1_1833, "Asia/Kathmandu"sv, "غرينتش+٠٥:٤١:١٦"sv }, - TestData { "ar"sv, Unicode::CalendarPatternStyle::LongOffset, jan_1_2022, "Asia/Kathmandu"sv, "غرينتش+٠٥:٤٥"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::ShortOffset, jan_1_1833, "Asia/Kathmandu"sv, "غرينتش+٥:٤١:١٦"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::ShortOffset, jan_1_2022, "Asia/Kathmandu"sv, "غرينتش+٥:٤٥"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::LongOffset, jan_1_1833, "Asia/Kathmandu"sv, "غرينتش+٠٥:٤١:١٦"sv }, + TestData { "ar"sv, Locale::CalendarPatternStyle::LongOffset, jan_1_2022, "Asia/Kathmandu"sv, "غرينتش+٠٥:٤٥"sv }, }; for (auto const& test : test_data) { - auto time_zone = Unicode::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/Tests/LibUnicode/TestUnicodeLocale.cpp b/Tests/LibUnicode/TestUnicodeLocale.cpp index b3fe6d73b4f..954c2501e0e 100644 --- a/Tests/LibUnicode/TestUnicodeLocale.cpp +++ b/Tests/LibUnicode/TestUnicodeLocale.cpp @@ -10,91 +10,91 @@ TEST_CASE(is_unicode_language_subtag) { - EXPECT(Unicode::is_unicode_language_subtag("aa"sv)); - EXPECT(Unicode::is_unicode_language_subtag("aaa"sv)); - EXPECT(Unicode::is_unicode_language_subtag("aaaaa"sv)); - EXPECT(Unicode::is_unicode_language_subtag("aaaaaa"sv)); - EXPECT(Unicode::is_unicode_language_subtag("aaaaaaa"sv)); - EXPECT(Unicode::is_unicode_language_subtag("aaaaaaaa"sv)); + EXPECT(Locale::is_unicode_language_subtag("aa"sv)); + EXPECT(Locale::is_unicode_language_subtag("aaa"sv)); + EXPECT(Locale::is_unicode_language_subtag("aaaaa"sv)); + EXPECT(Locale::is_unicode_language_subtag("aaaaaa"sv)); + EXPECT(Locale::is_unicode_language_subtag("aaaaaaa"sv)); + EXPECT(Locale::is_unicode_language_subtag("aaaaaaaa"sv)); - EXPECT(!Unicode::is_unicode_language_subtag(""sv)); - EXPECT(!Unicode::is_unicode_language_subtag("a"sv)); - EXPECT(!Unicode::is_unicode_language_subtag("aaaa"sv)); - EXPECT(!Unicode::is_unicode_language_subtag("aaaaaaaaa"sv)); - EXPECT(!Unicode::is_unicode_language_subtag("123"sv)); + EXPECT(!Locale::is_unicode_language_subtag(""sv)); + EXPECT(!Locale::is_unicode_language_subtag("a"sv)); + EXPECT(!Locale::is_unicode_language_subtag("aaaa"sv)); + EXPECT(!Locale::is_unicode_language_subtag("aaaaaaaaa"sv)); + EXPECT(!Locale::is_unicode_language_subtag("123"sv)); } TEST_CASE(is_unicode_script_subtag) { - EXPECT(Unicode::is_unicode_script_subtag("aaaa"sv)); + EXPECT(Locale::is_unicode_script_subtag("aaaa"sv)); - EXPECT(!Unicode::is_unicode_script_subtag(""sv)); - EXPECT(!Unicode::is_unicode_script_subtag("a"sv)); - EXPECT(!Unicode::is_unicode_script_subtag("aa"sv)); - EXPECT(!Unicode::is_unicode_script_subtag("aaa"sv)); - EXPECT(!Unicode::is_unicode_script_subtag("aaaaa"sv)); - EXPECT(!Unicode::is_unicode_script_subtag("1234"sv)); + EXPECT(!Locale::is_unicode_script_subtag(""sv)); + EXPECT(!Locale::is_unicode_script_subtag("a"sv)); + EXPECT(!Locale::is_unicode_script_subtag("aa"sv)); + EXPECT(!Locale::is_unicode_script_subtag("aaa"sv)); + EXPECT(!Locale::is_unicode_script_subtag("aaaaa"sv)); + EXPECT(!Locale::is_unicode_script_subtag("1234"sv)); } TEST_CASE(is_unicode_region_subtag) { - EXPECT(Unicode::is_unicode_region_subtag("aa"sv)); - EXPECT(Unicode::is_unicode_region_subtag("123"sv)); + EXPECT(Locale::is_unicode_region_subtag("aa"sv)); + EXPECT(Locale::is_unicode_region_subtag("123"sv)); - EXPECT(!Unicode::is_unicode_region_subtag(""sv)); - EXPECT(!Unicode::is_unicode_region_subtag("a"sv)); - EXPECT(!Unicode::is_unicode_region_subtag("aaa"sv)); - EXPECT(!Unicode::is_unicode_region_subtag("12"sv)); - EXPECT(!Unicode::is_unicode_region_subtag("12a"sv)); + EXPECT(!Locale::is_unicode_region_subtag(""sv)); + EXPECT(!Locale::is_unicode_region_subtag("a"sv)); + EXPECT(!Locale::is_unicode_region_subtag("aaa"sv)); + EXPECT(!Locale::is_unicode_region_subtag("12"sv)); + EXPECT(!Locale::is_unicode_region_subtag("12a"sv)); } TEST_CASE(is_unicode_variant_subtag) { - EXPECT(Unicode::is_unicode_variant_subtag("aaaaa"sv)); - EXPECT(Unicode::is_unicode_variant_subtag("aaaaaa"sv)); - EXPECT(Unicode::is_unicode_variant_subtag("aaaaaaa"sv)); - EXPECT(Unicode::is_unicode_variant_subtag("aaaaaaaa"sv)); + EXPECT(Locale::is_unicode_variant_subtag("aaaaa"sv)); + EXPECT(Locale::is_unicode_variant_subtag("aaaaaa"sv)); + EXPECT(Locale::is_unicode_variant_subtag("aaaaaaa"sv)); + EXPECT(Locale::is_unicode_variant_subtag("aaaaaaaa"sv)); - EXPECT(Unicode::is_unicode_variant_subtag("1aaa"sv)); - EXPECT(Unicode::is_unicode_variant_subtag("12aa"sv)); - EXPECT(Unicode::is_unicode_variant_subtag("123a"sv)); - EXPECT(Unicode::is_unicode_variant_subtag("1234"sv)); + EXPECT(Locale::is_unicode_variant_subtag("1aaa"sv)); + EXPECT(Locale::is_unicode_variant_subtag("12aa"sv)); + EXPECT(Locale::is_unicode_variant_subtag("123a"sv)); + EXPECT(Locale::is_unicode_variant_subtag("1234"sv)); - EXPECT(!Unicode::is_unicode_variant_subtag(""sv)); - EXPECT(!Unicode::is_unicode_variant_subtag("a"sv)); - EXPECT(!Unicode::is_unicode_variant_subtag("aa"sv)); - EXPECT(!Unicode::is_unicode_variant_subtag("aaa"sv)); - EXPECT(!Unicode::is_unicode_variant_subtag("aaaa"sv)); - EXPECT(!Unicode::is_unicode_variant_subtag("aaaaaaaaa"sv)); - EXPECT(!Unicode::is_unicode_variant_subtag("a234"sv)); + EXPECT(!Locale::is_unicode_variant_subtag(""sv)); + EXPECT(!Locale::is_unicode_variant_subtag("a"sv)); + EXPECT(!Locale::is_unicode_variant_subtag("aa"sv)); + EXPECT(!Locale::is_unicode_variant_subtag("aaa"sv)); + EXPECT(!Locale::is_unicode_variant_subtag("aaaa"sv)); + EXPECT(!Locale::is_unicode_variant_subtag("aaaaaaaaa"sv)); + EXPECT(!Locale::is_unicode_variant_subtag("a234"sv)); } TEST_CASE(is_type_identifier) { - EXPECT(Unicode::is_type_identifier("aaaa"sv)); - EXPECT(Unicode::is_type_identifier("aaaa-bbbb"sv)); - EXPECT(Unicode::is_type_identifier("aaaa-bbbb-cccc"sv)); + EXPECT(Locale::is_type_identifier("aaaa"sv)); + EXPECT(Locale::is_type_identifier("aaaa-bbbb"sv)); + EXPECT(Locale::is_type_identifier("aaaa-bbbb-cccc"sv)); - EXPECT(Unicode::is_type_identifier("1aaa"sv)); - EXPECT(Unicode::is_type_identifier("12aa"sv)); - EXPECT(Unicode::is_type_identifier("123a"sv)); - EXPECT(Unicode::is_type_identifier("1234"sv)); + EXPECT(Locale::is_type_identifier("1aaa"sv)); + EXPECT(Locale::is_type_identifier("12aa"sv)); + EXPECT(Locale::is_type_identifier("123a"sv)); + EXPECT(Locale::is_type_identifier("1234"sv)); - EXPECT(!Unicode::is_type_identifier(""sv)); - EXPECT(!Unicode::is_type_identifier("a"sv)); - EXPECT(!Unicode::is_type_identifier("aa"sv)); - EXPECT(!Unicode::is_type_identifier("aaaaaaaaa"sv)); - EXPECT(!Unicode::is_type_identifier("aaaa-"sv)); + EXPECT(!Locale::is_type_identifier(""sv)); + EXPECT(!Locale::is_type_identifier("a"sv)); + EXPECT(!Locale::is_type_identifier("aa"sv)); + EXPECT(!Locale::is_type_identifier("aaaaaaaaa"sv)); + EXPECT(!Locale::is_type_identifier("aaaa-"sv)); } TEST_CASE(parse_unicode_locale_id) { auto fail = [](StringView locale) { - auto locale_id = Unicode::parse_unicode_locale_id(locale); + auto locale_id = Locale::parse_unicode_locale_id(locale); EXPECT(!locale_id.has_value()); }; auto pass = [](StringView locale, Optional expected_language, Optional expected_script, Optional expected_region, Vector expected_variants) { - auto locale_id = Unicode::parse_unicode_locale_id(locale); + auto locale_id = Locale::parse_unicode_locale_id(locale); VERIFY(locale_id.has_value()); EXPECT_EQ(locale_id->language_id.language, expected_language); @@ -121,15 +121,15 @@ TEST_CASE(parse_unicode_locale_id) TEST_CASE(parse_unicode_locale_id_with_unicode_locale_extension) { auto fail = [](StringView locale) { - auto locale_id = Unicode::parse_unicode_locale_id(locale); + auto locale_id = Locale::parse_unicode_locale_id(locale); EXPECT(!locale_id.has_value()); }; - auto pass = [](StringView locale, Unicode::LocaleExtension const& expected_extension) { - auto locale_id = Unicode::parse_unicode_locale_id(locale); + auto pass = [](StringView locale, Locale::LocaleExtension const& expected_extension) { + auto locale_id = Locale::parse_unicode_locale_id(locale); VERIFY(locale_id.has_value()); EXPECT_EQ(locale_id->extensions.size(), 1u); - auto const& actual_extension = locale_id->extensions[0].get(); + auto const& actual_extension = locale_id->extensions[0].get(); VERIFY(actual_extension.attributes == expected_extension.attributes); EXPECT_EQ(actual_extension.keywords.size(), expected_extension.keywords.size()); @@ -167,15 +167,15 @@ TEST_CASE(parse_unicode_locale_id_with_unicode_locale_extension) TEST_CASE(parse_unicode_locale_id_with_transformed_extension) { auto fail = [](StringView locale) { - auto locale_id = Unicode::parse_unicode_locale_id(locale); + auto locale_id = Locale::parse_unicode_locale_id(locale); EXPECT(!locale_id.has_value()); }; - auto pass = [](StringView locale, Unicode::TransformedExtension const& expected_extension) { - auto locale_id = Unicode::parse_unicode_locale_id(locale); + auto pass = [](StringView locale, Locale::TransformedExtension const& expected_extension) { + auto locale_id = Locale::parse_unicode_locale_id(locale); VERIFY(locale_id.has_value()); EXPECT_EQ(locale_id->extensions.size(), 1u); - auto const& actual_extension = locale_id->extensions[0].get(); + auto const& actual_extension = locale_id->extensions[0].get(); VERIFY(actual_extension.language.has_value() == expected_extension.language.has_value()); if (actual_extension.language.has_value()) { @@ -216,32 +216,32 @@ TEST_CASE(parse_unicode_locale_id_with_transformed_extension) fail("en-t-k0-aa"sv); fail("en-t-k0-aaaaaaaaa"sv); - pass("en-t-en"sv, { Unicode::LanguageID { false, "en"sv }, {} }); - pass("en-t-en-latn"sv, { Unicode::LanguageID { false, "en"sv, "latn"sv }, {} }); - pass("en-t-en-us"sv, { Unicode::LanguageID { false, "en"sv, {}, "us"sv }, {} }); - pass("en-t-en-latn-us"sv, { Unicode::LanguageID { false, "en"sv, "latn"sv, "us"sv }, {} }); - pass("en-t-en-posix"sv, { Unicode::LanguageID { false, "en"sv, {}, {}, { "posix"sv } }, {} }); - pass("en-t-en-latn-posix"sv, { Unicode::LanguageID { false, "en"sv, "latn"sv, {}, { "posix"sv } }, {} }); - pass("en-t-en-us-posix"sv, { Unicode::LanguageID { false, "en"sv, {}, "us"sv, { "posix"sv } }, {} }); - pass("en-t-en-latn-us-posix"sv, { Unicode::LanguageID { false, "en"sv, "latn"sv, "us"sv, { "posix"sv } }, {} }); + pass("en-t-en"sv, { Locale::LanguageID { false, "en"sv }, {} }); + pass("en-t-en-latn"sv, { Locale::LanguageID { false, "en"sv, "latn"sv }, {} }); + pass("en-t-en-us"sv, { Locale::LanguageID { false, "en"sv, {}, "us"sv }, {} }); + pass("en-t-en-latn-us"sv, { Locale::LanguageID { false, "en"sv, "latn"sv, "us"sv }, {} }); + pass("en-t-en-posix"sv, { Locale::LanguageID { false, "en"sv, {}, {}, { "posix"sv } }, {} }); + pass("en-t-en-latn-posix"sv, { Locale::LanguageID { false, "en"sv, "latn"sv, {}, { "posix"sv } }, {} }); + pass("en-t-en-us-posix"sv, { Locale::LanguageID { false, "en"sv, {}, "us"sv, { "posix"sv } }, {} }); + pass("en-t-en-latn-us-posix"sv, { Locale::LanguageID { false, "en"sv, "latn"sv, "us"sv, { "posix"sv } }, {} }); pass("en-t-k0-aaa"sv, { {}, { { "k0"sv, { "aaa"sv } } } }); pass("en-t-k0-aaa-bbbb"sv, { {}, { { "k0"sv, "aaa-bbbb"sv } } }); pass("en-t-k0-aaa-k1-bbbb"sv, { {}, { { "k0"sv, { "aaa"sv } }, { "k1"sv, "bbbb"sv } } }); - pass("en-t-en-k0-aaa"sv, { Unicode::LanguageID { false, "en"sv }, { { "k0"sv, "aaa"sv } } }); + pass("en-t-en-k0-aaa"sv, { Locale::LanguageID { false, "en"sv }, { { "k0"sv, "aaa"sv } } }); } TEST_CASE(parse_unicode_locale_id_with_other_extension) { auto fail = [](StringView locale) { - auto locale_id = Unicode::parse_unicode_locale_id(locale); + auto locale_id = Locale::parse_unicode_locale_id(locale); EXPECT(!locale_id.has_value()); }; - auto pass = [](StringView locale, Unicode::OtherExtension const& expected_extension) { - auto locale_id = Unicode::parse_unicode_locale_id(locale); + auto pass = [](StringView locale, Locale::OtherExtension const& expected_extension) { + auto locale_id = Locale::parse_unicode_locale_id(locale); VERIFY(locale_id.has_value()); EXPECT_EQ(locale_id->extensions.size(), 1u); - auto const& actual_extension = locale_id->extensions[0].get(); + auto const& actual_extension = locale_id->extensions[0].get(); EXPECT_EQ(actual_extension.key, expected_extension.key); EXPECT_EQ(actual_extension.value, expected_extension.value); }; @@ -267,11 +267,11 @@ TEST_CASE(parse_unicode_locale_id_with_other_extension) TEST_CASE(parse_unicode_locale_id_with_private_use_extension) { auto fail = [](StringView locale) { - auto locale_id = Unicode::parse_unicode_locale_id(locale); + auto locale_id = Locale::parse_unicode_locale_id(locale); EXPECT(!locale_id.has_value()); }; auto pass = [](StringView locale, Vector const& expected_extension) { - auto locale_id = Unicode::parse_unicode_locale_id(locale); + auto locale_id = Locale::parse_unicode_locale_id(locale); VERIFY(locale_id.has_value()); EXPECT_EQ(locale_id->private_use_extensions, expected_extension); }; @@ -291,10 +291,10 @@ TEST_CASE(parse_unicode_locale_id_with_private_use_extension) TEST_CASE(canonicalize_unicode_locale_id) { auto test = [](StringView locale, StringView expected_canonical_locale) { - auto locale_id = Unicode::parse_unicode_locale_id(locale); + auto locale_id = Locale::parse_unicode_locale_id(locale); VERIFY(locale_id.has_value()); - auto canonical_locale = Unicode::canonicalize_unicode_locale_id(*locale_id); + auto canonical_locale = Locale::canonicalize_unicode_locale_id(*locale_id); EXPECT_EQ(*canonical_locale, expected_canonical_locale); }; @@ -466,8 +466,8 @@ TEST_CASE(canonicalize_unicode_locale_id) TEST_CASE(supports_locale_aliases) { - EXPECT(Unicode::is_locale_available("zh"sv)); - EXPECT(Unicode::is_locale_available("zh-Hant"sv)); - EXPECT(Unicode::is_locale_available("zh-TW"sv)); - EXPECT(Unicode::is_locale_available("zh-Hant-TW"sv)); + EXPECT(Locale::is_locale_available("zh"sv)); + EXPECT(Locale::is_locale_available("zh-Hant"sv)); + EXPECT(Locale::is_locale_available("zh-TW"sv)); + EXPECT(Locale::is_locale_available("zh-Hant-TW"sv)); } diff --git a/Userland/Applications/ClockSettings/TimeZoneSettingsWidget.cpp b/Userland/Applications/ClockSettings/TimeZoneSettingsWidget.cpp index 7aecbc858cc..20617396b72 100644 --- a/Userland/Applications/ClockSettings/TimeZoneSettingsWidget.cpp +++ b/Userland/Applications/ClockSettings/TimeZoneSettingsWidget.cpp @@ -125,11 +125,11 @@ void TimeZoneSettingsWidget::set_time_zone_location() { m_time_zone_location = compute_time_zone_location(); - auto locale = Unicode::default_locale(); + auto locale = Locale::default_locale(); auto now = AK::Time::now_realtime(); - auto name = Unicode::format_time_zone(locale, m_time_zone, Unicode::CalendarPatternStyle::Long, now); - auto offset = Unicode::format_time_zone(locale, m_time_zone, Unicode::CalendarPatternStyle::LongOffset, now); + 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 = String::formatted("{}\n({})", name, offset); } diff --git a/Userland/Libraries/LibJS/Runtime/DatePrototype.cpp b/Userland/Libraries/LibJS/Runtime/DatePrototype.cpp index bbc540fedc4..f1b9ac2bc59 100644 --- a/Userland/Libraries/LibJS/Runtime/DatePrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/DatePrototype.cpp @@ -1147,7 +1147,7 @@ String time_zone_string(double time) // Most implementations seem to prefer the long-form display name of the time zone. Not super important, but we may as well match that behavior. if (auto maybe_offset = TimeZone::get_time_zone_offset(tz_name, AK::Time::from_milliseconds(time)); maybe_offset.has_value()) { - if (auto long_name = Unicode::get_time_zone_name(Unicode::default_locale(), tz_name, Unicode::CalendarPatternStyle::Long, maybe_offset->in_dst); long_name.has_value()) + if (auto long_name = Locale::get_time_zone_name(Locale::default_locale(), tz_name, Locale::CalendarPatternStyle::Long, maybe_offset->in_dst); long_name.has_value()) tz_name = long_name.release_value(); } diff --git a/Userland/Libraries/LibJS/Runtime/Intl/AbstractOperations.cpp b/Userland/Libraries/LibJS/Runtime/Intl/AbstractOperations.cpp index 2453c8bf51d..e2a8be9e781 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/AbstractOperations.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/AbstractOperations.cpp @@ -20,7 +20,7 @@ namespace JS::Intl { // 6.2.2 IsStructurallyValidLanguageTag ( locale ), https://tc39.es/ecma402/#sec-isstructurallyvalidlanguagetag -Optional is_structurally_valid_language_tag(StringView locale) +Optional<::Locale::LocaleID> is_structurally_valid_language_tag(StringView locale) { auto contains_duplicate_variant = [](auto& variants) { if (variants.is_empty()) @@ -39,7 +39,7 @@ Optional is_structurally_valid_language_tag(StringView locale // IsStructurallyValidLanguageTag returns true if all of the following conditions hold, false otherwise: // locale can be generated from the EBNF grammar for unicode_locale_id in Unicode Technical Standard #35 LDML § 3.2 Unicode Locale Identifier; - auto locale_id = Unicode::parse_unicode_locale_id(locale); + auto locale_id = ::Locale::parse_unicode_locale_id(locale); if (!locale_id.has_value()) return {}; @@ -59,9 +59,9 @@ Optional is_structurally_valid_language_tag(StringView locale // contains at most one unicode_locale_extensions component, // contains at most one transformed_extensions component, and char key = extension.visit( - [](Unicode::LocaleExtension const&) { return 'u'; }, - [](Unicode::TransformedExtension const&) { return 't'; }, - [](Unicode::OtherExtension const& ext) { return static_cast(to_ascii_lowercase(ext.key)); }); + [](::Locale::LocaleExtension const&) { return 'u'; }, + [](::Locale::TransformedExtension const&) { return 't'; }, + [](::Locale::OtherExtension const& ext) { return static_cast(to_ascii_lowercase(ext.key)); }); if (unique_keys.contains_slow(key)) return {}; @@ -69,7 +69,7 @@ Optional is_structurally_valid_language_tag(StringView locale // if a transformed_extensions component that contains a tlang component is present, then // the tlang component contains no duplicate unicode_variant_subtag subtags. - if (auto* transformed = extension.get_pointer()) { + if (auto* transformed = extension.get_pointer<::Locale::TransformedExtension>()) { auto& language = transformed->language; if (language.has_value() && contains_duplicate_variant(language->variants)) return {}; @@ -80,7 +80,7 @@ Optional is_structurally_valid_language_tag(StringView locale } // 6.2.3 CanonicalizeUnicodeLocaleId ( locale ), https://tc39.es/ecma402/#sec-canonicalizeunicodelocaleid -String canonicalize_unicode_locale_id(Unicode::LocaleID& locale) +String canonicalize_unicode_locale_id(::Locale::LocaleID& locale) { // Note: This implementation differs from the spec in how Step 3 is implemented. The spec assumes // the input to this method is a string, and is written such that operations are performed on parts @@ -92,10 +92,10 @@ String canonicalize_unicode_locale_id(Unicode::LocaleID& locale) // * only the first instance of any attribute duplicated in the input, and // * only the first keyword for a given key in the input. for (auto& extension : locale.extensions) { - if (!extension.has()) + if (!extension.has<::Locale::LocaleExtension>()) continue; - auto& locale_extension = extension.get(); + auto& locale_extension = extension.get<::Locale::LocaleExtension>(); auto attributes = move(locale_extension.attributes); for (auto& attribute : attributes) { @@ -114,7 +114,7 @@ String canonicalize_unicode_locale_id(Unicode::LocaleID& locale) // 1. Let localeId be the string locale after performing the algorithm to transform it to canonical syntax per Unicode Technical Standard #35 LDML § 3.2.1 Canonical Unicode Locale Identifiers. // 2. Let localeId be the string localeId after performing the algorithm to transform it to canonical form. - auto locale_id = Unicode::canonicalize_unicode_locale_id(locale); + auto locale_id = ::Locale::canonicalize_unicode_locale_id(locale); VERIFY(locale_id.has_value()); // 4. Return localeId. @@ -271,7 +271,7 @@ Optional best_available_locale(StringView locale) // 2. Repeat, while (true) { // a. If availableLocales contains an element equal to candidate, return candidate. - if (Unicode::is_locale_available(candidate)) + if (::Locale::is_locale_available(candidate)) return candidate; // b. Let pos be the character index of the last occurrence of "-" (U+002D) within candidate. If that character does not occur, return undefined. @@ -290,7 +290,7 @@ Optional best_available_locale(StringView locale) struct MatcherResult { String locale; - Vector extensions {}; + Vector<::Locale::Extension> extensions {}; }; // 9.2.3 LookupMatcher ( availableLocales, requestedLocales ), https://tc39.es/ecma402/#sec-lookupmatcher @@ -301,11 +301,11 @@ static MatcherResult lookup_matcher(Vector const& requested_locales) // 2. For each element locale of requestedLocales, do for (auto const& locale : requested_locales) { - auto locale_id = Unicode::parse_unicode_locale_id(locale); + auto locale_id = ::Locale::parse_unicode_locale_id(locale); VERIFY(locale_id.has_value()); // a. Let noExtensionsLocale be the String value that is locale with any Unicode locale extension sequences removed. - auto extensions = locale_id->remove_extension_type(); + auto extensions = locale_id->remove_extension_type<::Locale::LocaleExtension>(); auto no_extensions_locale = locale_id->to_string(); // b. Let availableLocale be ! BestAvailableLocale(availableLocales, noExtensionsLocale). @@ -330,7 +330,7 @@ static MatcherResult lookup_matcher(Vector const& requested_locales) // 3. Let defLocale be ! DefaultLocale(). // 4. Set result.[[locale]] to defLocale. - result.locale = Unicode::default_locale(); + result.locale = ::Locale::default_locale(); // 5. Return result. return result; @@ -345,7 +345,7 @@ static MatcherResult best_fit_matcher(Vector const& requested_locales) } // 9.2.6 InsertUnicodeExtensionAndCanonicalize ( locale, extension ), https://tc39.es/ecma402/#sec-insert-unicode-extension-and-canonicalize -String insert_unicode_extension_and_canonicalize(Unicode::LocaleID locale, Unicode::LocaleExtension extension) +String insert_unicode_extension_and_canonicalize(::Locale::LocaleID locale, ::Locale::LocaleExtension extension) { // Note: This implementation differs from the spec in how the extension is inserted. The spec assumes // the input to this method is a string, and is written such that operations are performed on parts @@ -403,13 +403,13 @@ LocaleResult resolve_locale(Vector const& requested_locales, LocaleOptio result.data_locale = found_locale; // 7. If r has an [[extension]] field, then - Vector keywords; + Vector<::Locale::Keyword> keywords; for (auto& extension : matcher_result.extensions) { - if (!extension.has()) + if (!extension.has<::Locale::LocaleExtension>()) continue; // a. Let components be ! UnicodeExtensionComponents(r.[[extension]]). - auto& components = extension.get(); + auto& components = extension.get<::Locale::LocaleExtension>(); // b. Let keywords be components.[[Keywords]]. keywords = move(components.keywords); @@ -417,7 +417,7 @@ LocaleResult resolve_locale(Vector const& requested_locales, LocaleOptio } // 8. Let supportedExtension be "-u". - Unicode::LocaleExtension supported_extension {}; + ::Locale::LocaleExtension supported_extension {}; // 9. For each element key of relevantExtensionKeys, do for (auto const& key : relevant_extension_keys) { @@ -425,18 +425,18 @@ LocaleResult resolve_locale(Vector const& requested_locales, LocaleOptio // b. Assert: Type(foundLocaleData) is Record. // c. Let keyLocaleData be foundLocaleData.[[]]. // d. Assert: Type(keyLocaleData) is List. - auto key_locale_data = Unicode::get_available_keyword_values(key); + auto key_locale_data = ::Locale::get_available_keyword_values(key); // e. Let value be keyLocaleData[0]. // f. Assert: Type(value) is either String or Null. // NOTE: ECMA-402 assumes keyLocaleData is sorted by locale preference. Our list is sorted // alphabetically, so we get the locale's preferred value from LibUnicode. Optional value; - if (auto preference = Unicode::get_preferred_keyword_value_for_locale(found_locale, key); preference.has_value()) + if (auto preference = ::Locale::get_preferred_keyword_value_for_locale(found_locale, key); preference.has_value()) value = *preference; // g. Let supportedExtensionAddition be "". - Optional supported_extension_addition {}; + Optional<::Locale::Keyword> supported_extension_addition {}; // h. If r has an [[extension]] field, then for (auto& entry : keywords) { @@ -456,7 +456,7 @@ LocaleResult resolve_locale(Vector const& requested_locales, LocaleOptio value = move(requested_value); // ii. Let supportedExtensionAddition be the string-concatenation of "-", key, "-", and value. - supported_extension_addition = Unicode::Keyword { key, move(entry.value) }; + supported_extension_addition = ::Locale::Keyword { key, move(entry.value) }; } } // 4. Else if keyLocaleData contains "true", then @@ -465,7 +465,7 @@ LocaleResult resolve_locale(Vector const& requested_locales, LocaleOptio value = "true"sv; // b. Let supportedExtensionAddition be the string-concatenation of "-" and key. - supported_extension_addition = Unicode::Keyword { key, {} }; + supported_extension_addition = ::Locale::Keyword { key, {} }; } break; @@ -480,7 +480,7 @@ LocaleResult resolve_locale(Vector const& requested_locales, LocaleOptio if (options_value.has_value()) { // 1. Let optionsValue be the string optionsValue after performing the algorithm steps to transform Unicode extension values to canonical syntax per Unicode Technical Standard #35 LDML § 3.2.1 Canonical Unicode Locale Identifiers, treating key as ukey and optionsValue as uvalue productions. // 2. Let optionsValue be the string optionsValue after performing the algorithm steps to replace Unicode extension values with their canonical form per Unicode Technical Standard #35 LDML § 3.2.1 Canonical Unicode Locale Identifiers, treating key as ukey and optionsValue as uvalue productions. - Unicode::canonicalize_unicode_extension_values(key, *options_value, true); + ::Locale::canonicalize_unicode_extension_values(key, *options_value, true); // 3. If optionsValue is the empty String, then if (options_value->is_empty()) { @@ -511,7 +511,7 @@ LocaleResult resolve_locale(Vector const& requested_locales, LocaleOptio // 10. If the number of elements in supportedExtension is greater than 2, then if (!supported_extension.keywords.is_empty()) { - auto locale_id = Unicode::parse_unicode_locale_id(found_locale); + auto locale_id = ::Locale::parse_unicode_locale_id(found_locale); VERIFY(locale_id.has_value()); // a. Let foundLocale be InsertUnicodeExtensionAndCanonicalize(foundLocale, supportedExtension). @@ -533,11 +533,11 @@ Vector lookup_supported_locales(Vector const& requested_locales) // 2. For each element locale of requestedLocales, do for (auto const& locale : requested_locales) { - auto locale_id = Unicode::parse_unicode_locale_id(locale); + auto locale_id = ::Locale::parse_unicode_locale_id(locale); VERIFY(locale_id.has_value()); // a. Let noExtensionsLocale be the String value that is locale with any Unicode locale extension sequences removed. - locale_id->remove_extension_type(); + locale_id->remove_extension_type<::Locale::LocaleExtension>(); auto no_extensions_locale = locale_id->to_string(); // b. Let availableLocale be ! BestAvailableLocale(availableLocales, noExtensionsLocale). diff --git a/Userland/Libraries/LibJS/Runtime/Intl/AbstractOperations.h b/Userland/Libraries/LibJS/Runtime/Intl/AbstractOperations.h index 54eea467dca..a0647ea77f3 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/AbstractOperations.h +++ b/Userland/Libraries/LibJS/Runtime/Intl/AbstractOperations.h @@ -79,13 +79,13 @@ struct PatternPartitionWithSource : public PatternPartition { using StringOrBoolean = Variant; -Optional is_structurally_valid_language_tag(StringView locale); -String canonicalize_unicode_locale_id(Unicode::LocaleID& locale); +Optional<::Locale::LocaleID> is_structurally_valid_language_tag(StringView locale); +String canonicalize_unicode_locale_id(::Locale::LocaleID& locale); bool is_well_formed_currency_code(StringView currency); bool is_well_formed_unit_identifier(StringView unit_identifier); ThrowCompletionOr> canonicalize_locale_list(VM&, Value locales); Optional best_available_locale(StringView locale); -String insert_unicode_extension_and_canonicalize(Unicode::LocaleID locale_id, Unicode::LocaleExtension extension); +String insert_unicode_extension_and_canonicalize(::Locale::LocaleID locale_id, ::Locale::LocaleExtension extension); LocaleResult resolve_locale(Vector const& requested_locales, LocaleOptions const& options, Span relevant_extension_keys); Vector lookup_supported_locales(Vector const& requested_locales); Vector best_fit_supported_locales(Vector const& requested_locales); diff --git a/Userland/Libraries/LibJS/Runtime/Intl/CollatorConstructor.cpp b/Userland/Libraries/LibJS/Runtime/Intl/CollatorConstructor.cpp index d6574943e7a..5baf56d3546 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/CollatorConstructor.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/CollatorConstructor.cpp @@ -49,7 +49,7 @@ static ThrowCompletionOr initialize_collator(VM& vm, Collator& collat // 11. If collation is not undefined, then if (!collation.is_undefined()) { // a. If collation does not match the Unicode Locale Identifier type nonterminal, throw a RangeError exception. - if (!Unicode::is_type_identifier(collation.as_string().string())) + if (!::Locale::is_type_identifier(collation.as_string().string())) return vm.throw_completion(ErrorType::OptionIsNotValidValue, collation, "collation"sv); // 12. Set opt.[[co]] to collation. diff --git a/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.cpp b/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.cpp index 9737c4d4f35..168f96ff724 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.cpp @@ -150,13 +150,13 @@ ThrowCompletionOr to_date_time_options(VM& vm, Value options_value, Opt } // 11.5.2 DateTimeStyleFormat ( dateStyle, timeStyle, styles ), https://tc39.es/ecma402/#sec-date-time-style-format -Optional date_time_style_format(StringView data_locale, DateTimeFormat& date_time_format) +Optional<::Locale::CalendarPattern> date_time_style_format(StringView data_locale, DateTimeFormat& date_time_format) { - Unicode::CalendarPattern time_format {}; - Unicode::CalendarPattern date_format {}; + ::Locale::CalendarPattern time_format {}; + ::Locale::CalendarPattern date_format {}; - auto get_pattern = [&](auto type, auto style) -> Optional { - auto formats = Unicode::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) { @@ -178,7 +178,7 @@ Optional date_time_style_format(StringView data_locale 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 = get_pattern(Unicode::CalendarFormatType::Time, date_time_format.time_style()); + auto pattern = get_pattern(::Locale::CalendarFormatType::Time, date_time_format.time_style()); if (!pattern.has_value()) return {}; @@ -189,7 +189,7 @@ Optional date_time_style_format(StringView data_locale 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 = get_pattern(Unicode::CalendarFormatType::Date, date_time_format.date_style()); + auto pattern = get_pattern(::Locale::CalendarFormatType::Date, date_time_format.date_style()); if (!pattern.has_value()) return {}; @@ -199,7 +199,7 @@ Optional date_time_style_format(StringView data_locale // 3. If dateStyle is not undefined and timeStyle is not undefined, then if (date_time_format.has_date_style() && date_time_format.has_time_style()) { // a. Let format be a new Record. - Unicode::CalendarPattern format {}; + ::Locale::CalendarPattern format {}; // b. Add to format all fields from dateFormat except [[pattern]] and [[rangePatterns]]. format.for_each_calendar_field_zipped_with(date_format, [](auto& format_field, auto const& date_format_field, auto) { @@ -213,7 +213,7 @@ Optional date_time_style_format(StringView data_locale }); // d. Let connector be styles.[[DateTimeFormat]].[[]]. - auto connector = get_pattern(Unicode::CalendarFormatType::DateTime, date_time_format.date_style()); + auto connector = get_pattern(::Locale::CalendarFormatType::DateTime, date_time_format.date_style()); if (!connector.has_value()) return {}; @@ -235,7 +235,7 @@ Optional date_time_style_format(StringView data_locale // 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 = Unicode::combine_skeletons(date_format.skeleton, time_format.skeleton); + format.skeleton = ::Locale::combine_skeletons(date_format.skeleton, time_format.skeleton); // k. Return format. return format; @@ -255,7 +255,7 @@ Optional date_time_style_format(StringView data_locale } // 11.5.3 BasicFormatMatcher ( options, formats ), https://tc39.es/ecma402/#sec-basicformatmatcher -Optional basic_format_matcher(Unicode::CalendarPattern const& options, Vector formats) +Optional<::Locale::CalendarPattern> basic_format_matcher(::Locale::CalendarPattern const& options, Vector<::Locale::CalendarPattern> formats) { // 1. Let removalPenalty be 120. constexpr int removal_penalty = 120; @@ -282,7 +282,7 @@ Optional basic_format_matcher(Unicode::CalendarPattern int best_score = NumericLimits::min(); // 9. Let bestFormat be undefined. - Optional best_format; + Optional<::Locale::CalendarPattern> best_format; // 10. Assert: Type(formats) is List. // 11. For each element format of formats, do @@ -306,53 +306,53 @@ Optional basic_format_matcher(Unicode::CalendarPattern score -= removal_penalty; } // v. Else if property is "timeZoneName", then - else if (type == Unicode::CalendarPattern::Field::TimeZoneName) { + else if (type == ::Locale::CalendarPattern::Field::TimeZoneName) { // This is needed to avoid a compile error. Although we only enter this branch for TimeZoneName, // the lambda we are in will be generated with property types other than CalendarPatternStyle. auto compare_prop = [](auto prop, auto test) { return prop == static_cast(test); }; // 1. If optionsProp is "short" or "shortGeneric", then - if (compare_prop(options_prop, Unicode::CalendarPatternStyle::Short) || compare_prop(options_prop, Unicode::CalendarPatternStyle::ShortGeneric)) { + if (compare_prop(options_prop, ::Locale::CalendarPatternStyle::Short) || compare_prop(options_prop, ::Locale::CalendarPatternStyle::ShortGeneric)) { // a. If formatProp is "shortOffset", decrease score by offsetPenalty. - if (compare_prop(format_prop, Unicode::CalendarPatternStyle::ShortOffset)) + if (compare_prop(format_prop, ::Locale::CalendarPatternStyle::ShortOffset)) score -= offset_penalty; // b. Else if formatProp is "longOffset", decrease score by (offsetPenalty + shortMorePenalty). - else if (compare_prop(format_prop, Unicode::CalendarPatternStyle::LongOffset)) + else if (compare_prop(format_prop, ::Locale::CalendarPatternStyle::LongOffset)) score -= offset_penalty + short_more_penalty; // c. Else if optionsProp is "short" and formatProp is "long", decrease score by shortMorePenalty. - else if (compare_prop(options_prop, Unicode::CalendarPatternStyle::Short) || compare_prop(format_prop, Unicode::CalendarPatternStyle::Long)) + else if (compare_prop(options_prop, ::Locale::CalendarPatternStyle::Short) || compare_prop(format_prop, ::Locale::CalendarPatternStyle::Long)) score -= short_more_penalty; // d. Else if optionsProp is "shortGeneric" and formatProp is "longGeneric", decrease score by shortMorePenalty. - else if (compare_prop(options_prop, Unicode::CalendarPatternStyle::ShortGeneric) || compare_prop(format_prop, Unicode::CalendarPatternStyle::LongGeneric)) + else if (compare_prop(options_prop, ::Locale::CalendarPatternStyle::ShortGeneric) || compare_prop(format_prop, ::Locale::CalendarPatternStyle::LongGeneric)) score -= short_more_penalty; // e. Else if optionsProp ≠ formatProp, decrease score by removalPenalty. else if (options_prop != format_prop) score -= removal_penalty; } // 2. Else if optionsProp is "shortOffset" and formatProp is "longOffset", decrease score by shortMorePenalty. - else if (compare_prop(options_prop, Unicode::CalendarPatternStyle::ShortOffset) || compare_prop(format_prop, Unicode::CalendarPatternStyle::LongOffset)) { + else if (compare_prop(options_prop, ::Locale::CalendarPatternStyle::ShortOffset) || compare_prop(format_prop, ::Locale::CalendarPatternStyle::LongOffset)) { score -= short_more_penalty; } // 3. Else if optionsProp is "long" or "longGeneric", then - else if (compare_prop(options_prop, Unicode::CalendarPatternStyle::Long) || compare_prop(options_prop, Unicode::CalendarPatternStyle::LongGeneric)) { + else if (compare_prop(options_prop, ::Locale::CalendarPatternStyle::Long) || compare_prop(options_prop, ::Locale::CalendarPatternStyle::LongGeneric)) { // a. If formatProp is "longOffset", decrease score by offsetPenalty. - if (compare_prop(format_prop, Unicode::CalendarPatternStyle::LongOffset)) + if (compare_prop(format_prop, ::Locale::CalendarPatternStyle::LongOffset)) score -= offset_penalty; // b. Else if formatProp is "shortOffset", decrease score by (offsetPenalty + longLessPenalty). - else if (compare_prop(format_prop, Unicode::CalendarPatternStyle::ShortOffset)) + else if (compare_prop(format_prop, ::Locale::CalendarPatternStyle::ShortOffset)) score -= offset_penalty + long_less_penalty; // c. Else if optionsProp is "long" and formatProp is "short", decrease score by longLessPenalty. - else if (compare_prop(options_prop, Unicode::CalendarPatternStyle::Long) || compare_prop(format_prop, Unicode::CalendarPatternStyle::Short)) + else if (compare_prop(options_prop, ::Locale::CalendarPatternStyle::Long) || compare_prop(format_prop, ::Locale::CalendarPatternStyle::Short)) score -= long_less_penalty; // d. Else if optionsProp is "longGeneric" and formatProp is "shortGeneric", decrease score by longLessPenalty. - else if (compare_prop(options_prop, Unicode::CalendarPatternStyle::LongGeneric) || compare_prop(format_prop, Unicode::CalendarPatternStyle::ShortGeneric)) + else if (compare_prop(options_prop, ::Locale::CalendarPatternStyle::LongGeneric) || compare_prop(format_prop, ::Locale::CalendarPatternStyle::ShortGeneric)) score -= long_less_penalty; // e. Else if optionsProp ≠ formatProp, decrease score by removalPenalty. else if (options_prop != format_prop) score -= removal_penalty; } // 4. Else if optionsProp is "longOffset" and formatProp is "shortOffset", decrease score by longLessPenalty. - else if (compare_prop(options_prop, Unicode::CalendarPatternStyle::LongOffset) || compare_prop(format_prop, Unicode::CalendarPatternStyle::ShortOffset)) { + else if (compare_prop(options_prop, ::Locale::CalendarPatternStyle::LongOffset) || compare_prop(format_prop, ::Locale::CalendarPatternStyle::ShortOffset)) { score -= long_less_penalty; } // 5. Else if optionsProp ≠ formatProp, decrease score by removalPenalty. @@ -362,7 +362,7 @@ Optional basic_format_matcher(Unicode::CalendarPattern } // vi. Else if optionsProp ≠ formatProp, then else if (options_prop != format_prop) { - using ValuesType = Conditional, AK::Array, AK::Array>; + using ValuesType = Conditional, AK::Array, AK::Array<::Locale::CalendarPatternStyle, 5>>; ValuesType values {}; // 1. If property is "fractionalSecondDigits", then @@ -374,11 +374,11 @@ Optional basic_format_matcher(Unicode::CalendarPattern else { // a. Let values be « "2-digit", "numeric", "narrow", "short", "long" ». values = { - Unicode::CalendarPatternStyle::TwoDigit, - Unicode::CalendarPatternStyle::Numeric, - Unicode::CalendarPatternStyle::Narrow, - Unicode::CalendarPatternStyle::Short, - Unicode::CalendarPatternStyle::Long, + ::Locale::CalendarPatternStyle::TwoDigit, + ::Locale::CalendarPatternStyle::Numeric, + ::Locale::CalendarPatternStyle::Narrow, + ::Locale::CalendarPatternStyle::Short, + ::Locale::CalendarPatternStyle::Long, }; } @@ -430,14 +430,14 @@ Optional basic_format_matcher(Unicode::CalendarPattern // differ by field length, we expand the field lengths here. best_format->for_each_calendar_field_zipped_with(options, [&](auto& best_format_field, auto const& option_field, auto field_type) { switch (field_type) { - case Unicode::CalendarPattern::Field::FractionalSecondDigits: + case ::Locale::CalendarPattern::Field::FractionalSecondDigits: if ((best_format_field.has_value() || best_format->second.has_value()) && option_field.has_value()) best_format_field = option_field; break; - case Unicode::CalendarPattern::Field::Hour: - case Unicode::CalendarPattern::Field::Minute: - case Unicode::CalendarPattern::Field::Second: + case ::Locale::CalendarPattern::Field::Hour: + case ::Locale::CalendarPattern::Field::Minute: + case ::Locale::CalendarPattern::Field::Second: break; default: @@ -452,7 +452,7 @@ Optional basic_format_matcher(Unicode::CalendarPattern } // 11.5.4 BestFitFormatMatcher ( options, formats ), https://tc39.es/ecma402/#sec-bestfitformatmatcher -Optional best_fit_format_matcher(Unicode::CalendarPattern const& options, Vector formats) +Optional<::Locale::CalendarPattern> best_fit_format_matcher(::Locale::CalendarPattern const& options, Vector<::Locale::CalendarPattern> formats) { // When the BestFitFormatMatcher abstract operation is called with two arguments options and formats, it performs // implementation dependent steps, which should return a set of component representations that a typical user of @@ -462,11 +462,11 @@ Optional best_fit_format_matcher(Unicode::CalendarPatt struct StyleAndValue { StringView name {}; - Unicode::CalendarPatternStyle style {}; + ::Locale::CalendarPatternStyle style {}; i32 value { 0 }; }; -static Optional find_calendar_field(StringView name, Unicode::CalendarPattern const& options, Unicode::CalendarPattern const* range_options, LocalTime const& local_time) +static Optional find_calendar_field(StringView name, ::Locale::CalendarPattern const& options, ::Locale::CalendarPattern const* range_options, LocalTime const& local_time) { auto make_style_and_value = [](auto name, auto style, auto fallback_style, auto value) { if (style.has_value()) @@ -483,7 +483,7 @@ static Optional find_calendar_field(StringView name, Unicode::Cal constexpr auto minute = "minute"sv; constexpr auto second = "second"sv; - Optional empty; + Optional<::Locale::CalendarPatternStyle> empty; if (name == weekday) return make_style_and_value(weekday, range_options ? range_options->weekday : empty, *options.weekday, local_time.weekday); @@ -504,7 +504,7 @@ static Optional find_calendar_field(StringView name, Unicode::Cal return {}; } -static Optional resolve_day_period(StringView locale, StringView calendar, Unicode::CalendarPatternStyle style, Span pattern_parts, LocalTime local_time) +static Optional resolve_day_period(StringView locale, StringView calendar, ::Locale::CalendarPatternStyle style, Span 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) { @@ -519,17 +519,17 @@ static Optional resolve_day_period(StringView locale, StringView cal }); if (it == pattern_parts.end()) { - auto noon_symbol = Unicode::get_calendar_day_period_symbol(locale, calendar, style, Unicode::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 Unicode::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.6 FormatDateTimePattern ( dateTimeFormat, patternParts, x, rangeFormatOptions ), https://tc39.es/ecma402/#sec-formatdatetimepattern -ThrowCompletionOr> format_date_time_pattern(VM& vm, DateTimeFormat& date_time_format, Vector pattern_parts, double time, Unicode::CalendarPattern const* range_format_options) +ThrowCompletionOr> format_date_time_pattern(VM& vm, DateTimeFormat& date_time_format, Vector pattern_parts, double time, ::Locale::CalendarPattern const* range_format_options) { auto& realm = *vm.current_realm(); @@ -650,7 +650,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 = Unicode::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. result.append({ "timeZoneName"sv, move(formatted_value) }); @@ -680,17 +680,17 @@ ThrowCompletionOr> format_date_time_pattern(VM& vm, Dat auto hour_cycle = date_time_format.hour_cycle(); // vi. If p is "hour" and dateTimeFormat.[[HourCycle]] is "h11" or "h12", then - if ((hour_cycle == Unicode::HourCycle::H11) || (hour_cycle == Unicode::HourCycle::H12)) { + if ((hour_cycle == ::Locale::HourCycle::H11) || (hour_cycle == ::Locale::HourCycle::H12)) { // 1. Let v be v modulo 12. value = value % 12; // 2. If v is 0 and dateTimeFormat.[[HourCycle]] is "h12", let v be 12. - if ((value == 0) && (hour_cycle == Unicode::HourCycle::H12)) + if ((value == 0) && (hour_cycle == ::Locale::HourCycle::H12)) value = 12; } // vii. If p is "hour" and dateTimeFormat.[[HourCycle]] is "h24", then - if (hour_cycle == Unicode::HourCycle::H24) { + if (hour_cycle == ::Locale::HourCycle::H24) { // 1. If v is 0, let v be 24. if (value == 0) value = 24; @@ -699,13 +699,13 @@ ThrowCompletionOr> format_date_time_pattern(VM& vm, Dat switch (style) { // viii. If f is "numeric", then - case Unicode::CalendarPatternStyle::Numeric: + case ::Locale::CalendarPatternStyle::Numeric: // 1. Let fv be FormatNumeric(nf, v). formatted_value = format_numeric(vm, *number_format, Value(value)); break; // ix. Else if f is "2-digit", then - case Unicode::CalendarPatternStyle::TwoDigit: + case ::Locale::CalendarPatternStyle::TwoDigit: // 1. Let fv be FormatNumeric(nf2, v). formatted_value = format_numeric(vm, *number_format2, Value(value)); @@ -725,17 +725,17 @@ ThrowCompletionOr> format_date_time_pattern(VM& vm, Dat // If p is "era" and rangeFormatOptions is undefined, then the String value may also depend on whether dateTimeFormat.[[Era]] is undefined. // If p is "era" and rangeFormatOptions is not undefined, then the String value may also depend on whether rangeFormatOptions.[[era]] is undefined. // If the implementation does not have a localized representation of f, then use the String value of v itself. - case Unicode::CalendarPatternStyle::Narrow: - case Unicode::CalendarPatternStyle::Short: - case Unicode::CalendarPatternStyle::Long: { + case ::Locale::CalendarPatternStyle::Narrow: + case ::Locale::CalendarPatternStyle::Short: + case ::Locale::CalendarPatternStyle::Long: { Optional symbol; if (part == "era"sv) - symbol = Unicode::get_calendar_era_symbol(data_locale, date_time_format.calendar(), style, static_cast(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 = Unicode::get_calendar_month_symbol(data_locale, date_time_format.calendar(), style, static_cast(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 = Unicode::get_calendar_weekday_symbol(data_locale, date_time_format.calendar(), style, static_cast(value)); + symbol = ::Locale::get_calendar_weekday_symbol(data_locale, date_time_format.calendar(), style, static_cast<::Locale::Weekday>(value)); formatted_value = symbol.value_or(String::number(value)); break; @@ -759,13 +759,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 = Unicode::get_calendar_day_period_symbol(data_locale, date_time_format.calendar(), Unicode::CalendarPatternStyle::Short, Unicode::DayPeriod::PM); + auto symbol = ::Locale::get_calendar_day_period_symbol(data_locale, date_time_format.calendar(), ::Locale::CalendarPatternStyle::Short, ::Locale::DayPeriod::PM); formatted_value = symbol.value_or("PM"sv); } // iii. Else, else { // 1. Let fv be an implementation and locale dependent String value representing "ante meridiem". - auto symbol = Unicode::get_calendar_day_period_symbol(data_locale, date_time_format.calendar(), Unicode::CalendarPatternStyle::Short, Unicode::DayPeriod::AM); + auto symbol = ::Locale::get_calendar_day_period_symbol(data_locale, date_time_format.calendar(), ::Locale::CalendarPatternStyle::Short, ::Locale::DayPeriod::AM); formatted_value = symbol.value_or("AM"sv); } @@ -794,7 +794,7 @@ ThrowCompletionOr> format_date_time_pattern(VM& vm, Dat // Non-standard, TR-35 requires the decimal separator before injected {fractionalSecondDigits} partitions // to adhere to the selected locale. This depends on other generated data, so it is deferred to here. else if (part == "decimal"sv) { - auto decimal_symbol = Unicode::get_number_system_symbol(data_locale, date_time_format.numbering_system(), Unicode::NumericSymbol::Decimal).value_or("."sv); + auto decimal_symbol = ::Locale::get_number_system_symbol(data_locale, date_time_format.numbering_system(), ::Locale::NumericSymbol::Decimal).value_or("."sv); result.append({ "literal"sv, decimal_symbol }); } @@ -884,30 +884,30 @@ template 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 (callback(static_cast(time1.era), static_cast(time2.era), Unicode::CalendarRangePattern::Field::Era) == IterationDecision::Break) + if (callback(static_cast(time1.era), static_cast(time2.era), ::Locale::CalendarRangePattern::Field::Era) == IterationDecision::Break) return; - if (callback(time1.year, time2.year, Unicode::CalendarRangePattern::Field::Year) == IterationDecision::Break) + if (callback(time1.year, time2.year, ::Locale::CalendarRangePattern::Field::Year) == IterationDecision::Break) return; - if (callback(time1.month, time2.month, Unicode::CalendarRangePattern::Field::Month) == IterationDecision::Break) + if (callback(time1.month, time2.month, ::Locale::CalendarRangePattern::Field::Month) == IterationDecision::Break) return; - if (callback(time1.day, time2.day, Unicode::CalendarRangePattern::Field::Day) == IterationDecision::Break) + if (callback(time1.day, time2.day, ::Locale::CalendarRangePattern::Field::Day) == IterationDecision::Break) return; - if (callback(time1.hour, time2.hour, Unicode::CalendarRangePattern::Field::AmPm) == IterationDecision::Break) + if (callback(time1.hour, time2.hour, ::Locale::CalendarRangePattern::Field::AmPm) == IterationDecision::Break) return; - if (callback(time1.hour, time2.hour, Unicode::CalendarRangePattern::Field::DayPeriod) == IterationDecision::Break) + if (callback(time1.hour, time2.hour, ::Locale::CalendarRangePattern::Field::DayPeriod) == IterationDecision::Break) return; - if (callback(time1.hour, time2.hour, Unicode::CalendarRangePattern::Field::Hour) == IterationDecision::Break) + if (callback(time1.hour, time2.hour, ::Locale::CalendarRangePattern::Field::Hour) == IterationDecision::Break) return; - if (callback(time1.minute, time2.minute, Unicode::CalendarRangePattern::Field::Minute) == IterationDecision::Break) + if (callback(time1.minute, time2.minute, ::Locale::CalendarRangePattern::Field::Minute) == IterationDecision::Break) return; - if (callback(time1.second, time2.second, Unicode::CalendarRangePattern::Field::Second) == IterationDecision::Break) + if (callback(time1.second, time2.second, ::Locale::CalendarRangePattern::Field::Second) == IterationDecision::Break) return; - if (callback(time1.millisecond, time2.millisecond, Unicode::CalendarRangePattern::Field::FractionalSecondDigits) == IterationDecision::Break) + if (callback(time1.millisecond, time2.millisecond, ::Locale::CalendarRangePattern::Field::FractionalSecondDigits) == IterationDecision::Break) return; } template -ThrowCompletionOr for_each_range_pattern_with_source(Unicode::CalendarRangePattern& pattern, Callback&& callback) +ThrowCompletionOr for_each_range_pattern_with_source(::Locale::CalendarRangePattern& pattern, Callback&& callback) { TRY(callback(pattern.start_range, "startRange"sv)); TRY(callback(pattern.separator, "shared"sv)); @@ -942,7 +942,7 @@ ThrowCompletionOr> partition_date_time_range_ auto range_patterns = date_time_format.range_patterns(); // 8. Let rangePattern be undefined. - Optional range_pattern; + Optional<::Locale::CalendarRangePattern> range_pattern; // 9. Let dateFieldsPracticallyEqual be true. bool date_fields_practically_equal = true; @@ -955,7 +955,7 @@ ThrowCompletionOr> partition_date_time_range_ // 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. - Optional pattern; + Optional<::Locale::CalendarRangePattern> pattern; for (auto const& range : range_patterns) { if (range.field == field_name) { pattern = range; @@ -975,7 +975,7 @@ ThrowCompletionOr> partition_date_time_range_ switch (field_name) { // ii. If fieldName is equal to [[AmPm]], then - case Unicode::CalendarRangePattern::Field::AmPm: { + case ::Locale::CalendarRangePattern::Field::AmPm: { // 1. Let v1 be tm1.[[Hour]]. // 2. Let v2 be tm2.[[Hour]]. @@ -988,12 +988,12 @@ ThrowCompletionOr> partition_date_time_range_ break; } // iii. Else if fieldName is equal to [[DayPeriod]], then - case Unicode::CalendarRangePattern::Field::DayPeriod: { + 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 = Unicode::get_calendar_day_period_symbol_for_hour(date_time_format.data_locale(), date_time_format.calendar(), Unicode::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 = Unicode::get_calendar_day_period_symbol_for_hour(date_time_format.data_locale(), date_time_format.calendar(), Unicode::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) { @@ -1004,7 +1004,7 @@ ThrowCompletionOr> partition_date_time_range_ break; } // iv. Else if fieldName is equal to [[FractionalSecondDigits]], then - case Unicode::CalendarRangePattern::Field::FractionalSecondDigits: { + case ::Locale::CalendarRangePattern::Field::FractionalSecondDigits: { // 1. Let fractionalSecondDigits be dateTimeFormat.[[FractionalSecondDigits]]. Optional fractional_second_digits; if (date_time_format.has_fractional_second_digits()) @@ -1083,7 +1083,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 = Unicode::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()) @@ -1217,7 +1217,7 @@ ThrowCompletionOr to_local_time(VM& vm, double time, StringView calen // WeekDay(tz) specified in es2022's Week Day. .weekday = week_day(zoned_time), // Let year be YearFromTime(tz) specified in es2022's Year Number. If year is less than 0, return 'BC', else, return 'AD'. - .era = year < 0 ? Unicode::Era::BC : Unicode::Era::AD, + .era = year < 0 ? ::Locale::Era::BC : ::Locale::Era::AD, // YearFromTime(tz) specified in es2022's Year Number. .year = year, // undefined. diff --git a/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.h b/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.h index 8c628d185d0..1e82b48cd1b 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.h +++ b/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.h @@ -21,10 +21,10 @@ namespace JS::Intl { class DateTimeFormat final : public Object - , public Unicode::CalendarPattern { + , public ::Locale::CalendarPattern { JS_OBJECT(DateTimeFormat, Object); - using Patterns = Unicode::CalendarPattern; + using Patterns = ::Locale::CalendarPattern; public: enum class Style { @@ -56,9 +56,9 @@ public: void set_numbering_system(String numbering_system) { m_numbering_system = move(numbering_system); } bool has_hour_cycle() const { return m_hour_cycle.has_value(); } - Unicode::HourCycle hour_cycle() const { return *m_hour_cycle; } - StringView hour_cycle_string() const { return Unicode::hour_cycle_to_string(*m_hour_cycle); } - void set_hour_cycle(Unicode::HourCycle hour_cycle) { m_hour_cycle = hour_cycle; } + ::Locale::HourCycle hour_cycle() const { return *m_hour_cycle; } + StringView hour_cycle_string() const { return ::Locale::hour_cycle_to_string(*m_hour_cycle); } + void set_hour_cycle(::Locale::HourCycle hour_cycle) { m_hour_cycle = hour_cycle; } void clear_hour_cycle() { m_hour_cycle.clear(); } String const& time_zone() const { return m_time_zone; } @@ -77,51 +77,51 @@ public: String const& pattern() const { return Patterns::pattern; }; void set_pattern(String pattern) { Patterns::pattern = move(pattern); } - Span range_patterns() const { return m_range_patterns.span(); }; - void set_range_patterns(Vector range_patterns) { m_range_patterns = move(range_patterns); } + Span<::Locale::CalendarRangePattern const> range_patterns() const { return m_range_patterns.span(); }; + void set_range_patterns(Vector<::Locale::CalendarRangePattern> range_patterns) { m_range_patterns = move(range_patterns); } bool has_era() const { return Patterns::era.has_value(); } - Unicode::CalendarPatternStyle era() const { return *Patterns::era; }; - StringView era_string() const { return Unicode::calendar_pattern_style_to_string(*Patterns::era); } + ::Locale::CalendarPatternStyle era() const { return *Patterns::era; }; + StringView era_string() const { return ::Locale::calendar_pattern_style_to_string(*Patterns::era); } bool has_year() const { return Patterns::year.has_value(); } - Unicode::CalendarPatternStyle year() const { return *Patterns::year; }; - StringView year_string() const { return Unicode::calendar_pattern_style_to_string(*Patterns::year); } + ::Locale::CalendarPatternStyle year() const { return *Patterns::year; }; + StringView year_string() const { return ::Locale::calendar_pattern_style_to_string(*Patterns::year); } bool has_month() const { return Patterns::month.has_value(); } - Unicode::CalendarPatternStyle month() const { return *Patterns::month; }; - StringView month_string() const { return Unicode::calendar_pattern_style_to_string(*Patterns::month); } + ::Locale::CalendarPatternStyle month() const { return *Patterns::month; }; + StringView month_string() const { return ::Locale::calendar_pattern_style_to_string(*Patterns::month); } bool has_weekday() const { return Patterns::weekday.has_value(); } - Unicode::CalendarPatternStyle weekday() const { return *Patterns::weekday; }; - StringView weekday_string() const { return Unicode::calendar_pattern_style_to_string(*Patterns::weekday); } + ::Locale::CalendarPatternStyle weekday() const { return *Patterns::weekday; }; + StringView weekday_string() const { return ::Locale::calendar_pattern_style_to_string(*Patterns::weekday); } bool has_day() const { return Patterns::day.has_value(); } - Unicode::CalendarPatternStyle day() const { return *Patterns::day; }; - StringView day_string() const { return Unicode::calendar_pattern_style_to_string(*Patterns::day); } + ::Locale::CalendarPatternStyle day() const { return *Patterns::day; }; + StringView day_string() const { return ::Locale::calendar_pattern_style_to_string(*Patterns::day); } bool has_day_period() const { return Patterns::day_period.has_value(); } - Unicode::CalendarPatternStyle day_period() const { return *Patterns::day_period; }; - StringView day_period_string() const { return Unicode::calendar_pattern_style_to_string(*Patterns::day_period); } + ::Locale::CalendarPatternStyle day_period() const { return *Patterns::day_period; }; + StringView day_period_string() const { return ::Locale::calendar_pattern_style_to_string(*Patterns::day_period); } bool has_hour() const { return Patterns::hour.has_value(); } - Unicode::CalendarPatternStyle hour() const { return *Patterns::hour; }; - StringView hour_string() const { return Unicode::calendar_pattern_style_to_string(*Patterns::hour); } + ::Locale::CalendarPatternStyle hour() const { return *Patterns::hour; }; + StringView hour_string() const { return ::Locale::calendar_pattern_style_to_string(*Patterns::hour); } bool has_minute() const { return Patterns::minute.has_value(); } - Unicode::CalendarPatternStyle minute() const { return *Patterns::minute; }; - StringView minute_string() const { return Unicode::calendar_pattern_style_to_string(*Patterns::minute); } + ::Locale::CalendarPatternStyle minute() const { return *Patterns::minute; }; + StringView minute_string() const { return ::Locale::calendar_pattern_style_to_string(*Patterns::minute); } bool has_second() const { return Patterns::second.has_value(); } - Unicode::CalendarPatternStyle second() const { return *Patterns::second; }; - StringView second_string() const { return Unicode::calendar_pattern_style_to_string(*Patterns::second); } + ::Locale::CalendarPatternStyle second() const { return *Patterns::second; }; + StringView second_string() const { return ::Locale::calendar_pattern_style_to_string(*Patterns::second); } bool has_fractional_second_digits() const { return Patterns::fractional_second_digits.has_value(); } u8 fractional_second_digits() const { return *Patterns::fractional_second_digits; }; bool has_time_zone_name() const { return Patterns::time_zone_name.has_value(); } - Unicode::CalendarPatternStyle time_zone_name() const { return *Patterns::time_zone_name; }; - StringView time_zone_name_string() const { return Unicode::calendar_pattern_style_to_string(*Patterns::time_zone_name); } + ::Locale::CalendarPatternStyle time_zone_name() const { return *Patterns::time_zone_name; }; + StringView time_zone_name_string() const { return ::Locale::calendar_pattern_style_to_string(*Patterns::time_zone_name); } NativeFunction* bound_format() const { return m_bound_format; } void set_bound_format(NativeFunction* bound_format) { m_bound_format = bound_format; } @@ -134,15 +134,15 @@ private: virtual void visit_edges(Visitor&) override; - String m_locale; // [[Locale]] - String m_calendar; // [[Calendar]] - String m_numbering_system; // [[NumberingSystem]] - Optional m_hour_cycle; // [[HourCycle]] - String m_time_zone; // [[TimeZone]] - Optional