1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 06:48:12 +00:00

LibWeb: Generate TransformFunction to/from string functions

This commit is contained in:
Sam Atkins 2022-04-17 15:48:49 +01:00 committed by Andreas Kling
parent 5f3498d50f
commit 872ad98eba

View file

@ -53,6 +53,11 @@ ErrorOr<void> generate_header_file(JsonObject& transforms_data, Core::Stream::Fi
SourceGenerator generator { builder };
generator.append(R"~~~(
#pragma once
#include <AK/Optional.h>
#include <AK/StringView.h>
namespace Web::CSS {
)~~~");
@ -65,6 +70,9 @@ namespace Web::CSS {
});
generator.appendln("};");
generator.appendln("Optional<TransformFunction> transform_function_from_string(StringView);");
generator.appendln("StringView to_string(TransformFunction);");
generator.appendln("\n}");
TRY(file.write(generator.as_string_view().bytes()));
@ -77,15 +85,52 @@ ErrorOr<void> generate_implementation_file(JsonObject& transforms_data, Core::St
SourceGenerator generator { builder };
generator.append(R"~~~(
#include <LibWeb/CSS/TransformFunctions.h>
#include <AK/Assertions.h>
namespace Web::CSS {
)~~~");
transforms_data.for_each_member([&](auto& name, auto& value) {
(void)name;
(void)value;
generator.append(R"~~~(
Optional<TransformFunction> transform_function_from_string(StringView name)
{
)~~~");
transforms_data.for_each_member([&](auto& name, auto&) {
auto member_generator = generator.fork();
member_generator.set("name", name);
member_generator.set("name:titlecase", title_casify_transform_function(name));
member_generator.append(R"~~~(
if (name.equals_ignoring_case("@name@"sv))
return TransformFunction::@name:titlecase@;
)~~~");
});
generator.append(R"~~~(
return {};
}
)~~~");
generator.appendln("}");
generator.append(R"~~~(
StringView to_string(TransformFunction transform_function)
{
switch (transform_function) {
)~~~");
transforms_data.for_each_member([&](auto& name, auto&) {
auto member_generator = generator.fork();
member_generator.set("name", name);
member_generator.set("name:titlecase", title_casify_transform_function(name));
member_generator.append(R"~~~(
case TransformFunction::@name:titlecase@:
return "@name@"sv;
)~~~");
});
generator.append(R"~~~(
default:
VERIFY_NOT_REACHED();
}
}
)~~~");
generator.appendln("\n}");
TRY(file.write(generator.as_string_view().bytes()));
return {};