diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index 6e9f947e1e..4411a6ee32 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -74,7 +74,7 @@ Vector Parser::parse_as_stylesheet() dbgln("{}", pre.to_string()); } dbgln("BLOCK:"); - dbgln("{}", rule.m_block.to_string()); + dbgln("{}", rule.block().to_string()); dbgln(""); auto selectors = parse_selectors(rule.m_prelude); @@ -95,7 +95,7 @@ Vector Parser::parse_selectors(Vector= parts.size()) return {}; - auto current_value = parts.at(index); + auto& current_value = parts.at(index); index++; CSS::Selector::SimpleSelector::Type type; @@ -246,7 +246,7 @@ Vector Parser::parse_selectors(Vector Parser::consume_a_simple_block() { auto ending_token = current_token().mirror_variant(); - StyleBlockRule block; - block.m_token = current_token(); + NonnullRefPtr block = create(); + block->m_token = current_token(); for (;;) { auto token = next_token(); @@ -495,14 +495,13 @@ StyleBlockRule Parser::consume_a_simple_block() continue; } } - block.m_values.append(value.to_string()); + block->m_values.append(value.to_string()); } } -StyleFunctionRule Parser::consume_a_function() +NonnullRefPtr Parser::consume_a_function() { - StyleFunctionRule function; - function.m_name = current_token().m_value.to_string(); + NonnullRefPtr function = create(current_token().m_value.to_string()); for (;;) { auto token = next_token(); @@ -522,7 +521,7 @@ StyleFunctionRule Parser::consume_a_function() continue; } } - function.m_values.append(value.to_string()); + function->m_values.append(value.to_string()); } return function; diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h index 1aadf31211..10e7d433ae 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h @@ -78,8 +78,8 @@ private: Optional consume_a_declaration(Vector); Optional consume_a_declaration(); StyleComponentValueRule consume_a_component_value(); - StyleBlockRule consume_a_simple_block(); - StyleFunctionRule consume_a_function(); + NonnullRefPtr consume_a_simple_block(); + NonnullRefPtr consume_a_function(); Tokenizer m_tokenizer; Vector m_tokens; diff --git a/Userland/Libraries/LibWeb/CSS/Parser/QualifiedStyleRule.h b/Userland/Libraries/LibWeb/CSS/Parser/QualifiedStyleRule.h index da2f3c2e98..81e6b61533 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/QualifiedStyleRule.h +++ b/Userland/Libraries/LibWeb/CSS/Parser/QualifiedStyleRule.h @@ -8,6 +8,7 @@ #pragma once #include +#include #include namespace Web::CSS { @@ -18,11 +19,15 @@ class QualifiedStyleRule { public: QualifiedStyleRule(); ~QualifiedStyleRule(); + + Vector const& prelude() const { return m_prelude; } + StyleBlockRule const& block() const { return *m_block; } + String to_string() const; private: Vector m_prelude; - StyleBlockRule m_block; + RefPtr m_block; }; } diff --git a/Userland/Libraries/LibWeb/CSS/Parser/StyleBlockRule.h b/Userland/Libraries/LibWeb/CSS/Parser/StyleBlockRule.h index 84ba7d3ee6..a270351671 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/StyleBlockRule.h +++ b/Userland/Libraries/LibWeb/CSS/Parser/StyleBlockRule.h @@ -7,12 +7,13 @@ #pragma once +#include #include #include namespace Web::CSS { -class StyleBlockRule { +class StyleBlockRule : public RefCounted { friend class Parser; public: @@ -31,5 +32,4 @@ private: Token m_token; Vector m_values; }; - } diff --git a/Userland/Libraries/LibWeb/CSS/Parser/StyleComponentValueRule.h b/Userland/Libraries/LibWeb/CSS/Parser/StyleComponentValueRule.h index f03265dbef..1510bbcdb3 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/StyleComponentValueRule.h +++ b/Userland/Libraries/LibWeb/CSS/Parser/StyleComponentValueRule.h @@ -7,12 +7,15 @@ #pragma once -#include -#include +#include +#include #include namespace Web::CSS { +class StyleBlockRule; +class StyleFunctionRule; + class StyleComponentValueRule { friend class Parser; @@ -27,10 +30,18 @@ public: ~StyleComponentValueRule(); bool is_block() const { return m_type == ComponentType::Block; } - StyleBlockRule const& block() const { return m_block; } + StyleBlockRule const& block() const + { + VERIFY(is_block()); + return *m_block; + } bool is_function() const { return m_type == ComponentType::Function; } - StyleFunctionRule const& function() const { return m_function; } + StyleFunctionRule const& function() const + { + VERIFY(is_function()); + return *m_function; + } bool is(Token::TokenType type) const { @@ -44,7 +55,7 @@ public: private: ComponentType m_type; Token m_token; - StyleFunctionRule m_function; - StyleBlockRule m_block; + RefPtr m_function; + RefPtr m_block; }; } diff --git a/Userland/Libraries/LibWeb/CSS/Parser/StyleFunctionRule.h b/Userland/Libraries/LibWeb/CSS/Parser/StyleFunctionRule.h index 82de57c3e8..25c4bd2aa5 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/StyleFunctionRule.h +++ b/Userland/Libraries/LibWeb/CSS/Parser/StyleFunctionRule.h @@ -7,6 +7,7 @@ #pragma once +#include #include #include @@ -14,11 +15,11 @@ namespace Web::CSS { class StyleComponentValueRule; -class StyleFunctionRule { +class StyleFunctionRule : public RefCounted { friend class Parser; public: - StyleFunctionRule(); + StyleFunctionRule(String name); ~StyleFunctionRule(); String const& name() const { return m_name; } @@ -38,5 +39,4 @@ private: String m_name; Vector m_values; }; - } diff --git a/Userland/Libraries/LibWeb/CSS/Parser/StyleRules.cpp b/Userland/Libraries/LibWeb/CSS/Parser/StyleRules.cpp index e9457f9d63..3c21c712d0 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/StyleRules.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/StyleRules.cpp @@ -45,7 +45,10 @@ StyleComponentValueRule::~StyleComponentValueRule() { } StyleDeclarationRule::StyleDeclarationRule() { } StyleDeclarationRule::~StyleDeclarationRule() { } -StyleFunctionRule::StyleFunctionRule() { } +StyleFunctionRule::StyleFunctionRule(String name) + : m_name(name) +{ +} StyleFunctionRule::~StyleFunctionRule() { } template @@ -106,7 +109,7 @@ String QualifiedStyleRule::to_string() const StringBuilder builder; append_with_to_string(builder, " ", m_prelude); - builder.append(m_block.to_string()); + builder.append(m_block->to_string()); return builder.to_string(); } @@ -131,10 +134,10 @@ String StyleComponentValueRule::to_string() const builder.append(m_token.to_string()); break; case ComponentType::Function: - builder.append(m_function.to_string()); + builder.append(m_function->to_string()); break; case ComponentType::Block: - builder.append(m_block.to_string()); + builder.append(m_block->to_string()); break; }