mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-20 11:36:10 +00:00
CodeGenerators: Move some utilities out of GenerateCSSStyleProperties
These will be used by a similar generator for CSS at-rule descriptors. For `get_snake_case_function_name_for_css_property_name()`, I've rolled its behaviour into `snake_casify()` with an optional ability to trim leading underscores.
This commit is contained in:
parent
2b67cb5f98
commit
fbdabace8e
Notes:
github-actions[bot]
2025-03-27 11:54:06 +00:00
Author: https://github.com/AtkinsSJ Commit: https://github.com/LadybirdBrowser/ladybird/commit/fbdabace8eb Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/4106
2 changed files with 29 additions and 27 deletions
|
@ -43,27 +43,6 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static String get_snake_case_function_name_for_css_property_name(StringView name)
|
||||
{
|
||||
auto snake_case_name = snake_casify(name);
|
||||
if (snake_case_name.starts_with('_'))
|
||||
return MUST(snake_case_name.substring_from_byte_offset(1));
|
||||
|
||||
return snake_case_name;
|
||||
}
|
||||
|
||||
static String make_name_acceptable_cpp(String const& name)
|
||||
{
|
||||
if (name.is_one_of("float")) {
|
||||
StringBuilder builder;
|
||||
builder.append(name);
|
||||
builder.append('_');
|
||||
return MUST(builder.to_string());
|
||||
}
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
ErrorOr<void> generate_header_file(JsonObject& properties, Core::File& file)
|
||||
{
|
||||
StringBuilder builder;
|
||||
|
@ -83,7 +62,7 @@ public:
|
|||
|
||||
properties.for_each_member([&](auto& name, auto&) {
|
||||
auto declaration_generator = generator.fork();
|
||||
auto snake_case_name = get_snake_case_function_name_for_css_property_name(name);
|
||||
auto snake_case_name = snake_casify(name, TrimLeadingUnderscores::Yes);
|
||||
declaration_generator.set("name:acceptable_cpp", make_name_acceptable_cpp(snake_case_name));
|
||||
|
||||
declaration_generator.append(R"~~~(
|
||||
|
@ -125,7 +104,7 @@ namespace Web::Bindings {
|
|||
auto definition_generator = generator.fork();
|
||||
definition_generator.set("name", name);
|
||||
|
||||
auto snake_case_name = get_snake_case_function_name_for_css_property_name(name);
|
||||
auto snake_case_name = snake_casify(name, TrimLeadingUnderscores::Yes);
|
||||
definition_generator.set("name:acceptable_cpp", make_name_acceptable_cpp(snake_case_name));
|
||||
|
||||
definition_generator.append(R"~~~(
|
||||
|
@ -163,7 +142,7 @@ interface mixin GeneratedCSSStyleProperties {
|
|||
|
||||
member_generator.set("name", name);
|
||||
|
||||
auto snake_case_name = get_snake_case_function_name_for_css_property_name(name);
|
||||
auto snake_case_name = snake_casify(name, TrimLeadingUnderscores::Yes);
|
||||
member_generator.set("name:snakecase", snake_case_name);
|
||||
member_generator.set("name:acceptable_cpp", make_name_acceptable_cpp(snake_case_name));
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/*
|
||||
* Copyright (c) 2019-2021, Andreas Kling <andreas@ladybird.org>
|
||||
* Copyright (c) 2022-2023, Sam Atkins <atkinssj@serenityos.org>
|
||||
* Copyright (c) 2022-2025, Sam Atkins <sam@ladybird.org>
|
||||
* Copyright (c) 2024, Luke Wilde <luke@ladybird.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -49,11 +50,33 @@ inline String camel_casify(StringView dashy_name)
|
|||
return MUST(builder.to_string());
|
||||
}
|
||||
|
||||
inline String snake_casify(StringView dashy_name)
|
||||
enum class TrimLeadingUnderscores : u8 {
|
||||
No,
|
||||
Yes,
|
||||
};
|
||||
inline String snake_casify(StringView dashy_name, TrimLeadingUnderscores trim_leading_underscores = TrimLeadingUnderscores::No)
|
||||
{
|
||||
// FIXME: We don't really need to convert dashy_name to a String first, but currently
|
||||
// all the `replace` functions that take a StringView return ByteString.
|
||||
return MUST(MUST(String::from_utf8(dashy_name)).replace("-"sv, "_"sv, ReplaceMode::All));
|
||||
auto snake_case = MUST(MUST(String::from_utf8(dashy_name)).replace("-"sv, "_"sv, ReplaceMode::All));
|
||||
|
||||
if (trim_leading_underscores == TrimLeadingUnderscores::Yes && snake_case.starts_with('_')) {
|
||||
return MUST(snake_case.trim("_"sv, TrimMode::Left));
|
||||
}
|
||||
|
||||
return snake_case;
|
||||
}
|
||||
|
||||
inline String make_name_acceptable_cpp(String const& name)
|
||||
{
|
||||
if (name.is_one_of("float")) {
|
||||
StringBuilder builder;
|
||||
builder.append(name);
|
||||
builder.append('_');
|
||||
return MUST(builder.to_string());
|
||||
}
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
inline ErrorOr<JsonValue> read_entire_file_as_json(StringView filename)
|
||||
|
|
Loading…
Add table
Reference in a new issue