LibWeb/CSS: Use NumericCalculationNode for constants

Having multiple kinds of node that hold numeric values made things more
complicated than they needed to be, and we were already converting
ConstantCalculationNodes to NumericCalculationNodes in the first
simplification pass that happens at parse-time, so they didn't exist
after that.

As noted, the spec allows for other contexts to introduce their own
numeric keywords, which might be resolved later than parse-time. We'll
need a different mechanism to support those, but
ConstantCalculationNode could not have done so anyway.
This commit is contained in:
Sam Atkins 2025-02-25 16:37:10 +00:00 committed by Andreas Kling
commit f97ac33cb3
Notes: github-actions[bot] 2025-02-27 20:43:53 +00:00
6 changed files with 45 additions and 140 deletions

View file

@ -39,6 +39,13 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
return 0;
}
static String keyword_name(String const& dashy_name)
{
if (dashy_name == "-infinity"sv)
return "NegativeInfinity"_string;
return title_casify(dashy_name);
}
ErrorOr<void> generate_header_file(JsonArray& keyword_data, Core::File& file)
{
StringBuilder builder;
@ -57,7 +64,7 @@ enum class Keyword {
keyword_data.for_each([&](auto& name) {
auto member_generator = generator.fork();
member_generator.set("name:titlecase", title_casify(name.as_string()));
member_generator.set("name:titlecase", keyword_name(name.as_string()));
member_generator.append(R"~~~(
@name:titlecase@,
@ -107,7 +114,7 @@ HashMap<StringView, Keyword, AK::CaseInsensitiveASCIIStringViewTraits> g_stringv
keyword_data.for_each([&](auto& name) {
auto member_generator = generator.fork();
member_generator.set("name", name.as_string());
member_generator.set("name:titlecase", title_casify(name.as_string()));
member_generator.set("name:titlecase", keyword_name(name.as_string()));
member_generator.append(R"~~~(
{"@name@"sv, Keyword::@name:titlecase@},
)~~~");
@ -128,7 +135,7 @@ StringView string_from_keyword(Keyword keyword) {
keyword_data.for_each([&](auto& name) {
auto member_generator = generator.fork();
member_generator.set("name", name.as_string());
member_generator.set("name:titlecase", title_casify(name.as_string()));
member_generator.set("name:titlecase", keyword_name(name.as_string()));
member_generator.append(R"~~~(
case Keyword::@name:titlecase@:
return "@name@"sv;