From cb406e79f4138b07ae7be64979704ac7a4191049 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Fri, 1 Apr 2022 17:19:09 +0100 Subject: [PATCH] Meta+LibWeb: Port MediaFeatureID.h/cpp generators to invoke_generator() --- .../CodeGenerators/LibWeb/CMakeLists.txt | 3 +- ..._cpp.cpp => GenerateCSSMediaFeatureID.cpp} | 92 ++++++++++++++++--- .../LibWeb/Generate_CSS_MediaFeatureID_h.cpp | 65 ------------- Userland/Libraries/LibWeb/CMakeLists.txt | 32 ++----- 4 files changed, 88 insertions(+), 104 deletions(-) rename Meta/Lagom/Tools/CodeGenerators/LibWeb/{Generate_CSS_MediaFeatureID_cpp.cpp => GenerateCSSMediaFeatureID.cpp} (69%) delete mode 100644 Meta/Lagom/Tools/CodeGenerators/LibWeb/Generate_CSS_MediaFeatureID_h.cpp diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/CMakeLists.txt b/Meta/Lagom/Tools/CodeGenerators/LibWeb/CMakeLists.txt index 9887bc4d98..330e31afd0 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/CMakeLists.txt +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/CMakeLists.txt @@ -1,7 +1,6 @@ set(SOURCES "") # avoid pulling SOURCES from parent scope -lagom_tool(Generate_CSS_MediaFeatureID_h SOURCES Generate_CSS_MediaFeatureID_h.cpp LIBS LagomMain) -lagom_tool(Generate_CSS_MediaFeatureID_cpp SOURCES Generate_CSS_MediaFeatureID_cpp.cpp LIBS LagomMain) +lagom_tool(GenerateCSSMediaFeatureID SOURCES GenerateCSSMediaFeatureID.cpp LIBS LagomMain) lagom_tool(Generate_CSS_PropertyID_h SOURCES Generate_CSS_PropertyID_h.cpp LIBS LagomMain) lagom_tool(Generate_CSS_PropertyID_cpp SOURCES Generate_CSS_PropertyID_cpp.cpp LIBS LagomMain) lagom_tool(Generate_CSS_ValueID_h SOURCES Generate_CSS_ValueID_h.cpp LIBS LagomMain) diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/Generate_CSS_MediaFeatureID_cpp.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSMediaFeatureID.cpp similarity index 69% rename from Meta/Lagom/Tools/CodeGenerators/LibWeb/Generate_CSS_MediaFeatureID_cpp.cpp rename to Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSMediaFeatureID.cpp index 41ef4756df..63fdbdc5d0 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/Generate_CSS_MediaFeatureID_cpp.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSMediaFeatureID.cpp @@ -7,18 +7,85 @@ #include "GeneratorUtil.h" #include #include +#include #include +ErrorOr generate_header_file(JsonObject& media_feature_data, Core::Stream::File& file); +ErrorOr generate_implementation_file(JsonObject& media_feature_data, Core::Stream::File& file); + ErrorOr serenity_main(Main::Arguments arguments) { - if (arguments.argc != 2) { - warnln("usage: {} generate_header_file(JsonObject& media_feature_data, Core::Stream::File& file) +{ + StringBuilder builder; + SourceGenerator generator { builder }; + generator.append(R"~~~(#pragma once + +#include +#include +#include + +namespace Web::CSS { + +enum class MediaFeatureValueType { + Boolean, + Integer, + Length, + Ratio, + Resolution, +}; + +enum class MediaFeatureID {)~~~"); + + media_feature_data.for_each_member([&](auto& name, auto&) { + auto member_generator = generator.fork(); + member_generator.set("name:titlecase", title_casify(name)); + member_generator.append(R"~~~( + @name:titlecase@,)~~~"); + }); + + generator.append(R"~~~( +}; + +Optional media_feature_id_from_string(StringView); +char const* string_from_media_feature_id(MediaFeatureID); + +bool media_feature_type_is_range(MediaFeatureID); +bool media_feature_accepts_type(MediaFeatureID, MediaFeatureValueType); +bool media_feature_accepts_identifier(MediaFeatureID, ValueID); + +} +)~~~"); + + TRY(file.write(generator.as_string_view().bytes())); + return {}; +} + +ErrorOr generate_implementation_file(JsonObject& media_feature_data, Core::Stream::File& file) +{ StringBuilder builder; SourceGenerator generator { builder }; generator.append(R"~~~(#include @@ -28,7 +95,7 @@ namespace Web::CSS { Optional media_feature_id_from_string(StringView string) {)~~~"); - json.as_object().for_each_member([&](auto& name, auto&) { + media_feature_data.for_each_member([&](auto& name, auto&) { auto member_generator = generator.fork(); member_generator.set("name", name); member_generator.set("name:titlecase", title_casify(name)); @@ -46,7 +113,7 @@ char const* string_from_media_feature_id(MediaFeatureID media_feature_id) { switch (media_feature_id) {)~~~"); - json.as_object().for_each_member([&](auto& name, auto&) { + media_feature_data.for_each_member([&](auto& name, auto&) { auto member_generator = generator.fork(); member_generator.set("name", name); member_generator.set("name:titlecase", title_casify(name)); @@ -64,7 +131,7 @@ bool media_feature_type_is_range(MediaFeatureID media_feature_id) { switch (media_feature_id) {)~~~"); - json.as_object().for_each_member([&](auto& name, auto& value) { + media_feature_data.for_each_member([&](auto& name, auto& value) { VERIFY(value.is_object()); auto& feature = value.as_object(); @@ -88,7 +155,7 @@ bool media_feature_accepts_type(MediaFeatureID media_feature_id, MediaFeatureVal { switch (media_feature_id) {)~~~"); - json.as_object().for_each_member([&](auto& name, auto& member) { + media_feature_data.for_each_member([&](auto& name, auto& member) { VERIFY(member.is_object()); auto& feature = member.as_object(); @@ -166,7 +233,7 @@ bool media_feature_accepts_identifier(MediaFeatureID media_feature_id, ValueID i { switch (media_feature_id) {)~~~"); - json.as_object().for_each_member([&](auto& name, auto& member) { + media_feature_data.for_each_member([&](auto& name, auto& member) { VERIFY(member.is_object()); auto& feature = member.as_object(); @@ -221,7 +288,6 @@ bool media_feature_accepts_identifier(MediaFeatureID media_feature_id, ValueID i } )~~~"); - outln("{}", generator.as_string_view()); - - return 0; + TRY(file.write(generator.as_string_view().bytes())); + return {}; } diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/Generate_CSS_MediaFeatureID_h.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/Generate_CSS_MediaFeatureID_h.cpp deleted file mode 100644 index 9f804cabb8..0000000000 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/Generate_CSS_MediaFeatureID_h.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2022, Sam Atkins - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#include "GeneratorUtil.h" -#include -#include -#include - -ErrorOr serenity_main(Main::Arguments arguments) -{ - if (arguments.argc != 2) { - warnln("usage: {} -#include -#include - -namespace Web::CSS { - -enum class MediaFeatureValueType { - Boolean, - Integer, - Length, - Ratio, - Resolution, -}; - -enum class MediaFeatureID {)~~~"); - - json.as_object().for_each_member([&](auto& name, auto&) { - auto member_generator = generator.fork(); - member_generator.set("name:titlecase", title_casify(name)); - member_generator.append(R"~~~( - @name:titlecase@,)~~~"); - }); - - generator.append(R"~~~( -}; - -Optional media_feature_id_from_string(StringView); -char const* string_from_media_feature_id(MediaFeatureID); - -bool media_feature_type_is_range(MediaFeatureID); -bool media_feature_accepts_type(MediaFeatureID, MediaFeatureValueType); -bool media_feature_accepts_identifier(MediaFeatureID, ValueID); - -} -)~~~"); - - outln("{}", generator.as_string_view()); - - return 0; -} diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index 53453a6d0a..0d6b393b2b 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -602,31 +602,15 @@ libweb_js_wrapper(XHR/ProgressEvent) libweb_js_wrapper(XHR/XMLHttpRequest) libweb_js_wrapper(XHR/XMLHttpRequestEventTarget) -add_custom_command( - OUTPUT CSS/MediaFeatureID.h - COMMAND ${CMAKE_COMMAND} -E make_directory CSS - COMMAND "$" "${CMAKE_CURRENT_SOURCE_DIR}/CSS/MediaFeatures.json" > CSS/MediaFeatureID.h.tmp - COMMAND "${CMAKE_COMMAND}" -E copy_if_different CSS/MediaFeatureID.h.tmp CSS/MediaFeatureID.h - COMMAND "${CMAKE_COMMAND}" -E remove CSS/MediaFeatureID.h.tmp - VERBATIM - DEPENDS Lagom::Generate_CSS_MediaFeatureID_h - MAIN_DEPENDENCY CSS/MediaFeatures.json +invoke_generator( + "MediaFeatureID" + Lagom::GenerateCSSMediaFeatureID + "${CMAKE_CURRENT_SOURCE_DIR}/CSS/MediaFeatures.json" + "" + "CSS/MediaFeatureID.h" + "CSS/MediaFeatureID.cpp" + arguments -j "${CMAKE_CURRENT_SOURCE_DIR}/CSS/MediaFeatures.json" ) -add_custom_target(generate_MediaFeatureID.h DEPENDS CSS/MediaFeatureID.h) -add_dependencies(all_generated generate_MediaFeatureID.h) - -add_custom_command( - OUTPUT CSS/MediaFeatureID.cpp - COMMAND ${CMAKE_COMMAND} -E make_directory CSS - COMMAND "$" "${CMAKE_CURRENT_SOURCE_DIR}/CSS/MediaFeatures.json" > CSS/MediaFeatureID.cpp.tmp - COMMAND "${CMAKE_COMMAND}" -E copy_if_different CSS/MediaFeatureID.cpp.tmp CSS/MediaFeatureID.cpp - COMMAND "${CMAKE_COMMAND}" -E remove CSS/MediaFeatureID.cpp.tmp - VERBATIM - DEPENDS Lagom::Generate_CSS_MediaFeatureID_cpp - MAIN_DEPENDENCY CSS/MediaFeatures.json -) -add_custom_target(generate_MediaFeatureID.cpp DEPENDS CSS/MediaFeatureID.cpp) -add_dependencies(all_generated generate_MediaFeatureID.cpp) add_custom_command( OUTPUT CSS/PropertyID.h