1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-14 19:24:57 +00:00

LibUnicode: Add public methods to compare and lookup General Categories

Adds methods to retrieve a General Category from a string and to check
if a code point matches a General Category.
This commit is contained in:
Timothy Flynn 2021-07-31 16:38:24 -04:00 committed by Ali Mohammad Pur
parent f63287cd63
commit 5de6d3dd90
3 changed files with 58 additions and 1 deletions

View file

@ -478,7 +478,7 @@ namespace Unicode {
generate_enum("Locale"sv, "None"sv, move(unicode_data.locales));
generate_enum("Condition"sv, "None"sv, move(unicode_data.conditions));
generate_enum("GeneralCategory"sv, "None"sv, move(unicode_data.general_categories), move(unicode_data.general_category_unions), move(unicode_data.general_category_aliases), true);
generate_enum("GeneralCategory"sv, "None"sv, unicode_data.general_categories, unicode_data.general_category_unions, unicode_data.general_category_aliases, true);
generate_enum("Property"sv, "Assigned"sv, unicode_data.prop_list.keys(), {}, unicode_data.prop_aliases, true);
generate_enum("WordBreakProperty"sv, "Other"sv, unicode_data.word_break_prop_list.keys());
@ -541,6 +541,7 @@ namespace Detail {
Optional<UnicodeData> unicode_data_for_code_point(u32 code_point);
Optional<Property> property_from_string(StringView const& property);
Optional<GeneralCategory> general_category_from_string(StringView const& general_category);
}
@ -716,6 +717,32 @@ Optional<Property> property_from_string(StringView const& property)
return {};
}
Optional<GeneralCategory> general_category_from_string(StringView const& general_category)
{)~~~");
for (auto const& general_category : unicode_data.general_categories) {
generator.set("general_category", general_category);
generator.append(R"~~~(
if (general_category == "@general_category@"sv)
return GeneralCategory::@general_category@;)~~~");
}
for (auto const& union_ : unicode_data.general_category_unions) {
generator.set("general_category", union_.alias);
generator.append(R"~~~(
if (general_category == "@general_category@"sv)
return GeneralCategory::@general_category@;)~~~");
}
for (auto const& alias : unicode_data.general_category_aliases) {
generator.set("general_category", alias.alias);
generator.append(R"~~~(
if (general_category == "@general_category@"sv)
return GeneralCategory::@general_category@;)~~~");
}
generator.append(R"~~~(
return {};
}
}
})~~~");