mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-22 04:25:13 +00:00
LibWeb: Allow specifying a custom attribute name for [Reflect]
Sometimes the IDL attribute and the DOM attribute don't have the same exact name. In those cases, we can now do this: [Reflect=foobar] attribute DOMString fooBar;
This commit is contained in:
parent
cb35a8ea83
commit
8f31331e68
Notes:
sideshowbarker
2024-07-19 04:38:41 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/8f31331e685
1 changed files with 21 additions and 2 deletions
|
@ -50,6 +50,17 @@ static String snake_name(const StringView& title_name)
|
|||
return builder.to_string();
|
||||
}
|
||||
|
||||
static String add_underscore_to_cpp_keywords(const String& input)
|
||||
{
|
||||
if (input == "class" || input == "template") {
|
||||
StringBuilder builder;
|
||||
builder.append(input);
|
||||
builder.append('_');
|
||||
return builder.to_string();
|
||||
}
|
||||
return input;
|
||||
}
|
||||
|
||||
namespace IDL {
|
||||
|
||||
struct Type {
|
||||
|
@ -598,7 +609,11 @@ void generate_implementation(const IDL::Interface& interface)
|
|||
out() << " return {};";
|
||||
|
||||
if (attribute.extended_attributes.contains("Reflect")) {
|
||||
out() << " auto retval = impl->attribute(HTML::AttributeNames::" << attribute.name << ");";
|
||||
auto attribute_name = attribute.extended_attributes.get("Reflect").value();
|
||||
if (attribute_name.is_null())
|
||||
attribute_name = attribute.name;
|
||||
attribute_name = add_underscore_to_cpp_keywords(attribute_name);
|
||||
out() << " auto retval = impl->attribute(HTML::AttributeNames::" << attribute_name << ");";
|
||||
} else {
|
||||
out() << " auto retval = impl->" << snake_name(attribute.name) << "();";
|
||||
}
|
||||
|
@ -616,7 +631,11 @@ void generate_implementation(const IDL::Interface& interface)
|
|||
generate_to_cpp(attribute, "value", "", "cpp_value", true);
|
||||
|
||||
if (attribute.extended_attributes.contains("Reflect")) {
|
||||
out() << " impl->set_attribute(HTML::AttributeNames::" << attribute.name << ", cpp_value);";
|
||||
auto attribute_name = attribute.extended_attributes.get("Reflect").value();
|
||||
if (attribute_name.is_null())
|
||||
attribute_name = attribute.name;
|
||||
attribute_name = add_underscore_to_cpp_keywords(attribute_name);
|
||||
out() << " impl->set_attribute(HTML::AttributeNames::" << attribute_name << ", cpp_value);";
|
||||
} else {
|
||||
out() << " impl->set_" << snake_name(attribute.name) << "(cpp_value);";
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue