diff --git a/Meta/Lagom/Tools/CodeGenerators/LibUnicode/GenerateUnicodeLocale.cpp b/Meta/Lagom/Tools/CodeGenerators/LibUnicode/GenerateUnicodeLocale.cpp index f0fec2da64..4d07e7a1a6 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibUnicode/GenerateUnicodeLocale.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibUnicode/GenerateUnicodeLocale.cpp @@ -1157,6 +1157,32 @@ struct TextLayout { generate_available_values(generator, "get_available_number_systems"sv, locale_data.keywords.find("nu"sv)->value); generate_available_values(generator, "get_available_currencies"sv, locale_data.currencies); + generator.append(R"~~~( +Span get_available_keyword_values(StringView key) +{ + auto key_value = key_from_string(key); + if (!key_value.has_value()) + return {}; + + switch (*key_value) { + case Key::Ca: + return get_available_calendars(); + case Key::Co: + return get_available_collation_types(); + case Key::Hc: + return get_available_hour_cycles(); + case Key::Kf: + return get_available_collation_case_orderings(); + case Key::Kn: + return get_available_collation_numeric_orderings(); + case Key::Nu: + return get_available_number_systems(); + } + + VERIFY_NOT_REACHED(); +} +)~~~"); + locale_data.unique_display_patterns.generate(generator, "DisplayPatternImpl"sv, "s_display_patterns"sv, 30); locale_data.unique_language_lists.generate(generator, s_string_index_type, "s_language_lists"sv); locale_data.unique_territory_lists.generate(generator, s_string_index_type, "s_territory_lists"sv); diff --git a/Userland/Libraries/LibUnicode/Locale.cpp b/Userland/Libraries/LibUnicode/Locale.cpp index 7dc887f1d8..d5870d0329 100644 --- a/Userland/Libraries/LibUnicode/Locale.cpp +++ b/Userland/Libraries/LibUnicode/Locale.cpp @@ -766,6 +766,7 @@ StringView style_to_string(Style style) } } +Span __attribute__((weak)) get_available_keyword_values(StringView) { return {}; } Span __attribute__((weak)) get_available_calendars() { return {}; } Span __attribute__((weak)) get_available_collation_case_orderings() { return {}; } Span __attribute__((weak)) get_available_collation_numeric_orderings() { return {}; } diff --git a/Userland/Libraries/LibUnicode/Locale.h b/Userland/Libraries/LibUnicode/Locale.h index b42ad6e2f1..3fdf1bf445 100644 --- a/Userland/Libraries/LibUnicode/Locale.h +++ b/Userland/Libraries/LibUnicode/Locale.h @@ -145,6 +145,7 @@ Optional canonicalize_unicode_locale_id(LocaleID&); String const& default_locale(); bool is_locale_available(StringView locale); +Span get_available_keyword_values(StringView key); Span get_available_calendars(); Span get_available_collation_case_orderings(); Span get_available_collation_numeric_orderings();