mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-28 03:39:17 +00:00
LibWeb: Add method to get logical property group for PropertyID
This commit is contained in:
parent
511e282002
commit
05e2e398bd
Notes:
github-actions[bot]
2025-07-16 10:18:18 +00:00
Author: https://github.com/Calme1709
Commit: 05e2e398bd
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5424
Reviewed-by: https://github.com/AtkinsSJ ✅
1 changed files with 58 additions and 1 deletions
|
@ -171,11 +171,12 @@ void populate_all_property_longhands(JsonObject& properties)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<void> generate_header_file(JsonObject& properties, JsonObject&, Core::File& file)
|
ErrorOr<void> generate_header_file(JsonObject& properties, JsonObject& logical_property_groups, Core::File& file)
|
||||||
{
|
{
|
||||||
StringBuilder builder;
|
StringBuilder builder;
|
||||||
SourceGenerator generator { builder };
|
SourceGenerator generator { builder };
|
||||||
generator.set("property_id_underlying_type", underlying_type_for_enum(properties.size()));
|
generator.set("property_id_underlying_type", underlying_type_for_enum(properties.size()));
|
||||||
|
generator.set("logical_property_group_underlying_type", underlying_type_for_enum(logical_property_groups.size()));
|
||||||
generator.append(R"~~~(
|
generator.append(R"~~~(
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
@ -355,6 +356,21 @@ struct LogicalAliasMappingContext {
|
||||||
bool property_is_logical_alias(PropertyID);
|
bool property_is_logical_alias(PropertyID);
|
||||||
PropertyID map_logical_alias_to_physical_property(PropertyID logical_property_id, LogicalAliasMappingContext const&);
|
PropertyID map_logical_alias_to_physical_property(PropertyID logical_property_id, LogicalAliasMappingContext const&);
|
||||||
|
|
||||||
|
enum class LogicalPropertyGroup : @logical_property_group_underlying_type@ {
|
||||||
|
)~~~");
|
||||||
|
|
||||||
|
logical_property_groups.for_each_member([&](auto& name, auto&) {
|
||||||
|
generator.set("logical_property_group_name:titlecase", title_casify(name));
|
||||||
|
generator.append(R"~~~(
|
||||||
|
@logical_property_group_name:titlecase@,
|
||||||
|
)~~~");
|
||||||
|
});
|
||||||
|
|
||||||
|
generator.append(R"~~~(
|
||||||
|
};
|
||||||
|
|
||||||
|
Optional<LogicalPropertyGroup> logical_property_group_for_property(PropertyID);
|
||||||
|
|
||||||
} // namespace Web::CSS
|
} // namespace Web::CSS
|
||||||
|
|
||||||
namespace AK {
|
namespace AK {
|
||||||
|
@ -1642,6 +1658,47 @@ PropertyID map_logical_alias_to_physical_property(PropertyID property_id, Logica
|
||||||
)~~~");
|
)~~~");
|
||||||
|
|
||||||
generator.append(R"~~~(
|
generator.append(R"~~~(
|
||||||
|
Optional<LogicalPropertyGroup> logical_property_group_for_property(PropertyID property_id)
|
||||||
|
{
|
||||||
|
switch(property_id) {
|
||||||
|
)~~~");
|
||||||
|
|
||||||
|
HashMap<String, Vector<String>> logical_property_group_members;
|
||||||
|
|
||||||
|
logical_property_groups.for_each_member([&](auto& logical_property_group_name, auto& mapping) {
|
||||||
|
auto& group_members = logical_property_group_members.ensure(logical_property_group_name);
|
||||||
|
|
||||||
|
mapping.as_object().for_each_member([&](auto&, auto& physical_property) {
|
||||||
|
group_members.append(physical_property.as_string());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
properties.for_each_member([&](auto& property_name, auto& value) {
|
||||||
|
if (auto maybe_logical_property_group = value.as_object().get_object("logical-alias-for"sv); maybe_logical_property_group.has_value()) {
|
||||||
|
auto group = maybe_logical_property_group.value().get_string("group"sv).value();
|
||||||
|
|
||||||
|
logical_property_group_members.get(group).value().append(property_name);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
for (auto const& logical_property_group : logical_property_group_members.keys()) {
|
||||||
|
generator.set("logical_property_group_name:titlecase", title_casify(logical_property_group));
|
||||||
|
for (auto const& property : logical_property_group_members.get(logical_property_group).value()) {
|
||||||
|
generator.set("property_name:titlecase", title_casify(property));
|
||||||
|
generator.append(R"~~~(
|
||||||
|
case PropertyID::@property_name:titlecase@:
|
||||||
|
)~~~");
|
||||||
|
}
|
||||||
|
generator.append(R"~~~(
|
||||||
|
return LogicalPropertyGroup::@logical_property_group_name:titlecase@;
|
||||||
|
)~~~");
|
||||||
|
}
|
||||||
|
|
||||||
|
generator.append(R"~~~(
|
||||||
|
default:
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Web::CSS
|
} // namespace Web::CSS
|
||||||
)~~~");
|
)~~~");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue