Generate_CSS_MediaFeatureID_h.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /*
  2. * Copyright (c) 2022, Sam Atkins <atkinssj@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include "GeneratorUtil.h"
  7. #include <AK/SourceGenerator.h>
  8. #include <AK/StringBuilder.h>
  9. #include <LibMain/Main.h>
  10. ErrorOr<int> serenity_main(Main::Arguments arguments)
  11. {
  12. if (arguments.argc != 2) {
  13. warnln("usage: {} <path/to/CSS/MediaFeatures.json", arguments.strings[0]);
  14. return 1;
  15. }
  16. auto json = TRY(read_entire_file_as_json(arguments.strings[1]));
  17. VERIFY(json.is_object());
  18. StringBuilder builder;
  19. SourceGenerator generator { builder };
  20. generator.append(R"~~~(#pragma once
  21. #include <AK/StringView.h>
  22. #include <AK/Traits.h>
  23. #include <LibWeb/CSS/ValueID.h>
  24. namespace Web::CSS {
  25. enum class MediaFeatureValueType {
  26. Boolean,
  27. Integer,
  28. Length,
  29. Ratio,
  30. Resolution,
  31. };
  32. enum class MediaFeatureID {)~~~");
  33. json.as_object().for_each_member([&](auto& name, auto&) {
  34. auto member_generator = generator.fork();
  35. member_generator.set("name:titlecase", title_casify(name));
  36. member_generator.append(R"~~~(
  37. @name:titlecase@,)~~~");
  38. });
  39. generator.append(R"~~~(
  40. };
  41. Optional<MediaFeatureID> media_feature_id_from_string(StringView);
  42. char const* string_from_media_feature_id(MediaFeatureID);
  43. bool media_feature_type_is_range(MediaFeatureID);
  44. bool media_feature_accepts_type(MediaFeatureID, MediaFeatureValueType);
  45. bool media_feature_accepts_identifier(MediaFeatureID, ValueID);
  46. }
  47. )~~~");
  48. outln("{}", generator.as_string_view());
  49. return 0;
  50. }