diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSPropertyID.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSPropertyID.cpp index fae37000c1..c542b6540d 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSPropertyID.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSPropertyID.cpp @@ -12,6 +12,7 @@ #include #include +ErrorOr replace_logical_aliases(JsonObject& properties); ErrorOr generate_header_file(JsonObject& properties, Core::File& file); ErrorOr generate_implementation_file(JsonObject& properties, Core::File& file); @@ -36,6 +37,8 @@ ErrorOr serenity_main(Main::Arguments arguments) VERIFY(json.is_object()); auto properties = json.as_object(); + TRY(replace_logical_aliases(properties)); + auto generated_header_file = TRY(Core::File::open(generated_header_path, Core::File::OpenMode::Write)); auto generated_implementation_file = TRY(Core::File::open(generated_implementation_path, Core::File::OpenMode::Write)); @@ -45,6 +48,37 @@ ErrorOr serenity_main(Main::Arguments arguments) return 0; } +ErrorOr replace_logical_aliases(JsonObject& properties) +{ + AK::HashMap logical_aliases; + properties.for_each_member([&](auto& name, auto& value) { + VERIFY(value.is_object()); + const auto& value_as_object = value.as_object(); + const auto logical_alias_for = value_as_object.get_deprecated_string("logical-alias-for"sv); + if (logical_alias_for.has_value()) { + logical_aliases.set(name, logical_alias_for.value()); + } + }); + + for (auto& [name, alias] : logical_aliases) { + auto const maybe_alias_object = properties.get_object(alias); + if (!maybe_alias_object.has_value()) { + dbgln("No property '{}' found for logical alias '{}'", alias, name); + VERIFY_NOT_REACHED(); + } + JsonObject alias_object = maybe_alias_object.value(); + + // Copy over anything the logical property overrides + properties.get_object(name).value().for_each_member([&](auto& key, auto& value) { + alias_object.set(key, value); + }); + + properties.set(name, alias_object); + } + + return {}; +} + ErrorOr generate_header_file(JsonObject& properties, Core::File& file) { StringBuilder builder;