@@ -0,0 +1,9 @@
+#include <LibHTML/CSS/Selector.h>
+
+Selector::Selector()
+{
+}
+Selector::~Selector()
@@ -0,0 +1,21 @@
+#pragma once
+#include <AK/AKString.h>
+#include <AK/Vector.h>
+class Selector {
+public:
+ Selector();
+ ~Selector();
+ struct Component {
+ enum class Type { Invalid, TagName, Id, Class };
+ Type type { Type::Invalid };
+ String value;
+ };
+ const Vector<Component>& components() const { return m_components; }
+private:
+ Vector<Component> m_components;
+};
+#include <LibHTML/CSS/StyleDeclaration.h>
+StyleDeclaration::StyleDeclaration()
+StyleDeclaration::~StyleDeclaration()
@@ -0,0 +1,17 @@
+#include <LibHTML/CSS/StyleValue.h>
+class StyleDeclaration {
+ StyleDeclaration();
+ ~StyleDeclaration();
+ const String& property_name() const { return m_property_name; }
+ const StyleValue& value() const { return *m_value; }
+ String m_property_name;
+ RetainPtr<StyleValue> m_value;
@@ -0,0 +1,15 @@
+class StyleRule {
+ StyleRule();
+ ~StyleRule();
+ Vector<Selector> m_selectors;
+ Vector<StyleDeclaration> m_declarations;
+#include <LibHTML/CSS/StyleSheet.h>
+StyleSheet::StyleSheet()
+StyleSheet::~StyleSheet()
+#include <LibHTML/CSS/StyleRule.h>
+class StyleSheet {
+ StyleSheet();
+ ~StyleSheet();
+ const Vector<StyleRule>& rules() const { return m_rules; }
+ Vector<StyleRule> m_rules;
@@ -0,0 +1,23 @@
+#include <AK/Retainable.h>
+class StyleValue : public Retainable<StyleValue> {
+ virtual ~StyleValue();
+ enum Type {
+ Invalid,
+ Inherit,
+ Initial,
+ Primitive,
+ Type type() const { return m_type; }
+protected:
+ explicit StyleValue(Type);
+ Type m_type { Type::Invalid };
@@ -6,6 +6,11 @@ LIBHTML_OBJS = \
DOM/Element.o \
DOM/Document.o \
DOM/Text.o \
+ CSS/Selector.o \
+ CSS/StyleSheet.o \
+ CSS/StyleRule.o \
+ CSS/StyleDeclaration.o \
+ CSS/StyleValue.o \
Parser/Parser.o \
Layout/LayoutNode.o \
Layout/LayoutText.o \