summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Atkins <atkinssj@gmail.com>2021-08-16 16:07:13 +0100
committerAndreas Kling <kling@serenityos.org>2021-08-16 23:26:16 +0200
commit0fba71a6550753e13d9561ab80f6885981b4aa70 (patch)
tree52154bcdbd1529c9236ae7bf670f36c652ae1ce3
parentea2b02186c11fc3d077673064efb9ad003d9a2fb (diff)
downloadserenity-0fba71a6550753e13d9561ab80f6885981b4aa70.zip
LibWeb: Replace is_inherited_property() with generated code
We already include the inheritance for each property in Properties.json, so made sense to use that instead of a list in StyleResolver. Added `inherited: true` to a couple of properties to match the previous code's behavior. One of those had a FIXME which I've moved to the JSON file, which is hacky, but it works.
-rw-r--r--Userland/Libraries/LibWeb/CSS/Properties.json4
-rw-r--r--Userland/Libraries/LibWeb/CSS/StyleResolver.cpp32
-rw-r--r--Userland/Libraries/LibWeb/CSS/StyleResolver.h2
-rw-r--r--Userland/Libraries/LibWeb/CodeGenerators/Generate_CSS_PropertyID_cpp.cpp33
-rw-r--r--Userland/Libraries/LibWeb/CodeGenerators/Generate_CSS_PropertyID_h.cpp1
5 files changed, 36 insertions, 36 deletions
diff --git a/Userland/Libraries/LibWeb/CSS/Properties.json b/Userland/Libraries/LibWeb/CSS/Properties.json
index 2fbc714e01..92f47cc5c5 100644
--- a/Userland/Libraries/LibWeb/CSS/Properties.json
+++ b/Userland/Libraries/LibWeb/CSS/Properties.json
@@ -293,6 +293,7 @@
"initial": "normal"
},
"list-style": {
+ "inherited": true,
"longhands": [
"list-style-type",
"list-style-position",
@@ -422,7 +423,8 @@
"initial": "none"
},
"text-decoration-line": {
- "inherited": false,
+ "__comment": "FIXME: This property is not supposed to be inherited, but we currently rely on inheritance to propagate decorations into line boxes.",
+ "inherited": true,
"initial": "none"
},
"text-decoration-style": {
diff --git a/Userland/Libraries/LibWeb/CSS/StyleResolver.cpp b/Userland/Libraries/LibWeb/CSS/StyleResolver.cpp
index 7a5f9124f9..245dfa5aef 100644
--- a/Userland/Libraries/LibWeb/CSS/StyleResolver.cpp
+++ b/Userland/Libraries/LibWeb/CSS/StyleResolver.cpp
@@ -102,38 +102,6 @@ void StyleResolver::sort_matching_rules(Vector<MatchingRule>& matching_rules) co
});
}
-bool StyleResolver::is_inherited_property(CSS::PropertyID property_id)
-{
- static HashTable<CSS::PropertyID> inherited_properties;
- if (inherited_properties.is_empty()) {
- inherited_properties.set(CSS::PropertyID::BorderCollapse);
- inherited_properties.set(CSS::PropertyID::BorderSpacing);
- inherited_properties.set(CSS::PropertyID::Color);
- inherited_properties.set(CSS::PropertyID::FontFamily);
- inherited_properties.set(CSS::PropertyID::FontSize);
- inherited_properties.set(CSS::PropertyID::FontStyle);
- inherited_properties.set(CSS::PropertyID::FontVariant);
- inherited_properties.set(CSS::PropertyID::FontWeight);
- inherited_properties.set(CSS::PropertyID::LetterSpacing);
- inherited_properties.set(CSS::PropertyID::LineHeight);
- inherited_properties.set(CSS::PropertyID::ListStyle);
- inherited_properties.set(CSS::PropertyID::ListStyleImage);
- inherited_properties.set(CSS::PropertyID::ListStylePosition);
- inherited_properties.set(CSS::PropertyID::ListStyleType);
- inherited_properties.set(CSS::PropertyID::TextAlign);
- inherited_properties.set(CSS::PropertyID::TextIndent);
- inherited_properties.set(CSS::PropertyID::TextTransform);
- inherited_properties.set(CSS::PropertyID::Visibility);
- inherited_properties.set(CSS::PropertyID::WhiteSpace);
- inherited_properties.set(CSS::PropertyID::WordSpacing);
-
- // FIXME: This property is not supposed to be inherited, but we currently
- // rely on inheritance to propagate decorations into line boxes.
- inherited_properties.set(CSS::PropertyID::TextDecorationLine);
- }
- return inherited_properties.contains(property_id);
-}
-
enum class Edge {
Top,
Right,
diff --git a/Userland/Libraries/LibWeb/CSS/StyleResolver.h b/Userland/Libraries/LibWeb/CSS/StyleResolver.h
index 7fa000c016..f21415706f 100644
--- a/Userland/Libraries/LibWeb/CSS/StyleResolver.h
+++ b/Userland/Libraries/LibWeb/CSS/StyleResolver.h
@@ -41,8 +41,6 @@ public:
CustomPropertyResolutionTuple resolve_custom_property_with_specificity(DOM::Element&, String const&) const;
Optional<StyleProperty> resolve_custom_property(DOM::Element&, String const&) const;
- static bool is_inherited_property(CSS::PropertyID);
-
private:
template<typename Callback>
void for_each_stylesheet(Callback) const;
diff --git a/Userland/Libraries/LibWeb/CodeGenerators/Generate_CSS_PropertyID_cpp.cpp b/Userland/Libraries/LibWeb/CodeGenerators/Generate_CSS_PropertyID_cpp.cpp
index ae65e8bea6..22937da989 100644
--- a/Userland/Libraries/LibWeb/CodeGenerators/Generate_CSS_PropertyID_cpp.cpp
+++ b/Userland/Libraries/LibWeb/CodeGenerators/Generate_CSS_PropertyID_cpp.cpp
@@ -82,7 +82,7 @@ const char* string_from_property_id(PropertyID property_id) {
member_generator.append(R"~~~(
case PropertyID::@name:titlecase@:
return "@name@";
- )~~~");
+)~~~");
});
generator.append(R"~~~(
@@ -91,6 +91,37 @@ const char* string_from_property_id(PropertyID property_id) {
}
}
+bool is_inherited_property(PropertyID property_id)
+{
+ switch (property_id) {
+)~~~");
+
+ json.value().as_object().for_each_member([&](auto& name, auto& value) {
+ VERIFY(value.is_object());
+
+ bool inherited = false;
+ if (value.as_object().has("inherited")) {
+ auto& inherited_value = value.as_object().get("inherited");
+ VERIFY(inherited_value.is_bool());
+ inherited = inherited_value.as_bool();
+ }
+
+ if (inherited) {
+ auto member_generator = generator.fork();
+ member_generator.set("name:titlecase", title_casify(name));
+ member_generator.append(R"~~~(
+ case PropertyID::@name:titlecase@:
+ return true;
+)~~~");
+ }
+ });
+
+ generator.append(R"~~~(
+ default:
+ return false;
+ }
+}
+
bool is_pseudo_property(PropertyID property_id)
{
switch (property_id) {
diff --git a/Userland/Libraries/LibWeb/CodeGenerators/Generate_CSS_PropertyID_h.cpp b/Userland/Libraries/LibWeb/CodeGenerators/Generate_CSS_PropertyID_h.cpp
index aa54e166fd..89ad93c4d1 100644
--- a/Userland/Libraries/LibWeb/CodeGenerators/Generate_CSS_PropertyID_h.cpp
+++ b/Userland/Libraries/LibWeb/CodeGenerators/Generate_CSS_PropertyID_h.cpp
@@ -71,6 +71,7 @@ enum class PropertyID {
PropertyID property_id_from_string(const StringView&);
const char* string_from_property_id(PropertyID);
+bool is_inherited_property(PropertyID);
bool is_pseudo_property(PropertyID);
} // namespace Web::CSS