mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-21 20:15:17 +00:00
LibUnicode: Generate a list of available plural categories per locale
Separate lists are generated for cardinal and ordinal form.
This commit is contained in:
parent
ea78bac36d
commit
8aeacccd82
Notes:
sideshowbarker
2024-07-17 09:37:35 +09:00
Author: https://github.com/trflynn89 Commit: https://github.com/SerenityOS/serenity/commit/8aeacccd82 Pull-request: https://github.com/SerenityOS/serenity/pull/14512 Reviewed-by: https://github.com/IdanHo Reviewed-by: https://github.com/alimpfard Reviewed-by: https://github.com/linusg
3 changed files with 52 additions and 0 deletions
|
@ -503,6 +503,21 @@ static constexpr Array<PluralCategoryFunction, @size@> s_@form@_functions { {)~~
|
|||
)~~~");
|
||||
};
|
||||
|
||||
auto append_categories = [&](auto const& name, auto const& rules) {
|
||||
generator.set("name", name);
|
||||
generator.set("size", String::number(rules.size() + 1));
|
||||
|
||||
generator.append(R"~~~(
|
||||
static constexpr Array<PluralCategory, @size@> @name@ { { PluralCategory::Other)~~~");
|
||||
|
||||
for (auto [category, condition] : rules) {
|
||||
generator.set("category"sv, format_identifier({}, category));
|
||||
generator.append(", PluralCategory::@category@"sv);
|
||||
}
|
||||
|
||||
generator.append("} };");
|
||||
};
|
||||
|
||||
append_string_conversions("PluralCategory"sv, "plural_category"sv, locale_data.categories);
|
||||
|
||||
for (auto [locale, rules] : locale_data.locales) {
|
||||
|
@ -513,6 +528,18 @@ static constexpr Array<PluralCategoryFunction, @size@> s_@form@_functions { {)~~
|
|||
append_lookup_table("cardinal"sv);
|
||||
append_lookup_table("ordinal"sv);
|
||||
|
||||
generate_mapping(generator, locales, "PluralCategory"sv, "s_cardinal_categories"sv, "s_cardinal_categories_{}", format_identifier,
|
||||
[&](auto const& name, auto const& locale) {
|
||||
auto& rules = locale_data.locales.find(locale)->value;
|
||||
append_categories(name, rules.rules_for_form("cardinal"sv));
|
||||
});
|
||||
|
||||
generate_mapping(generator, locales, "PluralCategory"sv, "s_ordinal_categories"sv, "s_ordinal_categories_{}", format_identifier,
|
||||
[&](auto const& name, auto const& locale) {
|
||||
auto& rules = locale_data.locales.find(locale)->value;
|
||||
append_categories(name, rules.rules_for_form("ordinal"sv));
|
||||
});
|
||||
|
||||
generator.append(R"~~~(
|
||||
PluralCategory determine_plural_category(StringView locale, PluralForm form, PluralOperands operands)
|
||||
{
|
||||
|
@ -535,6 +562,24 @@ PluralCategory determine_plural_category(StringView locale, PluralForm form, Plu
|
|||
return decider(move(operands));
|
||||
}
|
||||
|
||||
Span<PluralCategory const> available_plural_categories(StringView locale, PluralForm form)
|
||||
{
|
||||
auto locale_value = locale_from_string(locale);
|
||||
if (!locale_value.has_value())
|
||||
return {};
|
||||
|
||||
auto locale_index = to_underlying(*locale_value) - 1; // Subtract 1 because 0 == Locale::None.
|
||||
|
||||
switch (form) {
|
||||
case PluralForm::Cardinal:
|
||||
return s_cardinal_categories[locale_index];
|
||||
case PluralForm::Ordinal:
|
||||
return s_ordinal_categories[locale_index];
|
||||
}
|
||||
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
}
|
||||
)~~~");
|
||||
|
||||
|
|
|
@ -56,4 +56,10 @@ PluralCategory __attribute__((weak)) determine_plural_category(StringView, Plura
|
|||
return PluralCategory::Other;
|
||||
}
|
||||
|
||||
Span<PluralCategory const> __attribute__((weak)) available_plural_categories(StringView, PluralForm)
|
||||
{
|
||||
static constexpr Array<PluralCategory, 1> categories { { PluralCategory::Other } };
|
||||
return categories.span();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -61,5 +61,6 @@ Optional<PluralCategory> plural_category_from_string(StringView category);
|
|||
StringView plural_category_to_string(PluralCategory category);
|
||||
|
||||
PluralCategory determine_plural_category(StringView locale, PluralForm form, PluralOperands operands);
|
||||
Span<PluralCategory const> available_plural_categories(StringView locale, PluralForm form);
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue