diff --git a/Libraries/LibHTML/CSS/StyleDeclaration.cpp b/Libraries/LibHTML/CSS/StyleDeclaration.cpp
index cc550e2622..cf7e1a4af6 100644
--- a/Libraries/LibHTML/CSS/StyleDeclaration.cpp
+++ b/Libraries/LibHTML/CSS/StyleDeclaration.cpp
@@ -1,8 +1,7 @@
#include
-StyleDeclaration::StyleDeclaration(const String& property_name, NonnullRefPtr&& value)
- : m_property_name(property_name)
- , m_value(move(value))
+StyleDeclaration::StyleDeclaration(Vector&& properties)
+ : m_properties(move(properties))
{
}
diff --git a/Libraries/LibHTML/CSS/StyleDeclaration.h b/Libraries/LibHTML/CSS/StyleDeclaration.h
index ce041108bc..b5ec084c86 100644
--- a/Libraries/LibHTML/CSS/StyleDeclaration.h
+++ b/Libraries/LibHTML/CSS/StyleDeclaration.h
@@ -3,21 +3,24 @@
#include
#include
+struct StyleProperty {
+ String name;
+ NonnullRefPtr value;
+};
+
class StyleDeclaration : public RefCounted {
public:
- static NonnullRefPtr create(const String& property_name, NonnullRefPtr&& value)
+ static NonnullRefPtr create(Vector&& properties)
{
- return adopt(*new StyleDeclaration(property_name, move(value)));
+ return adopt(*new StyleDeclaration(move(properties)));
}
~StyleDeclaration();
- const String& property_name() const { return m_property_name; }
- const StyleValue& value() const { return *m_value; }
+ const Vector& properties() const { return m_properties; }
public:
- StyleDeclaration(const String& property_name, NonnullRefPtr&&);
+ explicit StyleDeclaration(Vector&&);
- String m_property_name;
- NonnullRefPtr m_value;
+ Vector m_properties;
};
diff --git a/Libraries/LibHTML/CSS/StyleResolver.cpp b/Libraries/LibHTML/CSS/StyleResolver.cpp
index 4c733ce530..da39bcd9b2 100644
--- a/Libraries/LibHTML/CSS/StyleResolver.cpp
+++ b/Libraries/LibHTML/CSS/StyleResolver.cpp
@@ -70,8 +70,8 @@ StyleProperties StyleResolver::resolve_style(const Element& element, const Style
auto matching_rules = collect_matching_rules(element);
for (auto& rule : matching_rules) {
- for (auto& declaration : rule.declarations()) {
- style_properties.set_property(declaration.property_name(), declaration.value());
+ for (auto& property : rule.declaration().properties()) {
+ style_properties.set_property(property.name, property.value);
}
}
return style_properties;
diff --git a/Libraries/LibHTML/CSS/StyleRule.cpp b/Libraries/LibHTML/CSS/StyleRule.cpp
index 1fcdf38c40..6e7cf68559 100644
--- a/Libraries/LibHTML/CSS/StyleRule.cpp
+++ b/Libraries/LibHTML/CSS/StyleRule.cpp
@@ -1,8 +1,8 @@
#include
-StyleRule::StyleRule(Vector&& selectors, NonnullRefPtrVector&& declarations)
+StyleRule::StyleRule(Vector&& selectors, NonnullRefPtr&& declaration)
: m_selectors(move(selectors))
- , m_declarations(move(declarations))
+ , m_declaration(move(declaration))
{
}
diff --git a/Libraries/LibHTML/CSS/StyleRule.h b/Libraries/LibHTML/CSS/StyleRule.h
index 3ccdb57caa..a2f4c3a32b 100644
--- a/Libraries/LibHTML/CSS/StyleRule.h
+++ b/Libraries/LibHTML/CSS/StyleRule.h
@@ -6,26 +6,19 @@
class StyleRule : public RefCounted {
public:
- static NonnullRefPtr create(Vector&& selectors, NonnullRefPtrVector&& declarations)
+ static NonnullRefPtr create(Vector&& selectors, NonnullRefPtr&& declaration)
{
- return adopt(*new StyleRule(move(selectors), move(declarations)));
+ return adopt(*new StyleRule(move(selectors), move(declaration)));
}
~StyleRule();
const Vector& selectors() const { return m_selectors; }
- const NonnullRefPtrVector& declarations() const { return m_declarations; }
-
- template
- void for_each_declaration(C callback) const
- {
- for (auto& declaration : m_declarations)
- callback(declaration);
- }
+ const StyleDeclaration& declaration() const { return m_declaration; }
private:
- StyleRule(Vector&&, NonnullRefPtrVector&&);
+ StyleRule(Vector&&, NonnullRefPtr&&);
Vector m_selectors;
- NonnullRefPtrVector m_declarations;
+ NonnullRefPtr m_declaration;
};
diff --git a/Libraries/LibHTML/Dump.cpp b/Libraries/LibHTML/Dump.cpp
index aae5a57692..ee7a3a55a5 100644
--- a/Libraries/LibHTML/Dump.cpp
+++ b/Libraries/LibHTML/Dump.cpp
@@ -123,8 +123,8 @@ void dump_rule(const StyleRule& rule)
}
}
printf(" Declarations:\n");
- for (auto& declaration : rule.declarations()) {
- printf(" '%s': '%s'\n", declaration.property_name().characters(), declaration.value().to_string().characters());
+ for (auto& property : rule.declaration().properties()) {
+ printf(" '%s': '%s'\n", property.name.characters(), property.value->to_string().characters());
}
}
diff --git a/Libraries/LibHTML/Parser/CSSParser.cpp b/Libraries/LibHTML/Parser/CSSParser.cpp
index 4e821322c8..fa10068c98 100644
--- a/Libraries/LibHTML/Parser/CSSParser.cpp
+++ b/Libraries/LibHTML/Parser/CSSParser.cpp
@@ -50,7 +50,7 @@ NonnullRefPtr parse_css(const String& css)
struct CurrentRule {
Vector selectors;
- NonnullRefPtrVector declarations;
+ Vector properties;
};
CurrentRule current_rule;
@@ -146,7 +146,7 @@ NonnullRefPtr parse_css(const String& css)
auto property_value = String::copy(buffer);
buffer.clear();
consume_specific(';');
- current_rule.declarations.append(StyleDeclaration::create(property_name, parse_css_value(property_value)));
+ current_rule.properties.append({ property_name, parse_css_value(property_value) });
};
auto parse_declarations = [&] {
@@ -163,7 +163,7 @@ NonnullRefPtr parse_css(const String& css)
consume_specific('{');
parse_declarations();
consume_specific('}');
- rules.append(StyleRule::create(move(current_rule.selectors), move(current_rule.declarations)));
+ rules.append(StyleRule::create(move(current_rule.selectors), StyleDeclaration::create(move(current_rule.properties))));
consume_whitespace();
};