diff --git a/Userland/Libraries/LibWeb/CSS/Parser/AtStyleRule.h b/Userland/Libraries/LibWeb/CSS/Parser/AtStyleRule.h deleted file mode 100644 index 7473fb0f4d..0000000000 --- a/Userland/Libraries/LibWeb/CSS/Parser/AtStyleRule.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (c) 2020-2021, the SerenityOS developers. - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#pragma once - -#include -#include - -namespace Web::CSS { - -class AtStyleRule : public QualifiedStyleRule { - friend class Parser; - -public: - AtStyleRule(); - ~AtStyleRule(); - String to_string() const; - -private: - String m_name; -}; - -} diff --git a/Userland/Libraries/LibWeb/CSS/Parser/DeclarationOrAtRule.h b/Userland/Libraries/LibWeb/CSS/Parser/DeclarationOrAtRule.h index 30a64bc081..31df3cd068 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/DeclarationOrAtRule.h +++ b/Userland/Libraries/LibWeb/CSS/Parser/DeclarationOrAtRule.h @@ -6,8 +6,8 @@ #pragma once -#include #include +#include namespace Web::CSS { @@ -15,7 +15,7 @@ class DeclarationOrAtRule { friend class Parser; public: - explicit DeclarationOrAtRule(RefPtr at); + explicit DeclarationOrAtRule(RefPtr at); explicit DeclarationOrAtRule(StyleDeclarationRule declaration); ~DeclarationOrAtRule(); @@ -28,7 +28,7 @@ public: private: DeclarationType m_type; - RefPtr m_at; + RefPtr m_at; StyleDeclarationRule m_declaration; }; diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index b538eb1729..c28ec8c668 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -10,13 +10,12 @@ #include #include #include -#include #include #include -#include #include #include #include +#include #include #include #include @@ -453,9 +452,9 @@ void Parser::reconsume_current_input_token() --m_iterator_offset; } -NonnullRefPtrVector Parser::consume_a_list_of_rules(bool top_level) +NonnullRefPtrVector Parser::consume_a_list_of_rules(bool top_level) { - NonnullRefPtrVector rules; + NonnullRefPtrVector rules; for (;;) { auto token = next_token(); @@ -498,12 +497,12 @@ NonnullRefPtrVector Parser::consume_a_list_of_rules(bool top return rules; } -NonnullRefPtr Parser::consume_an_at_rule() +NonnullRefPtr Parser::consume_an_at_rule() { auto initial = next_token(); - AtStyleRule rule; - rule.m_name = initial.m_value.to_string(); + NonnullRefPtr rule = create(StyleRule::Type::At); + rule->m_name = initial.m_value.to_string(); for (;;) { auto token = next_token(); @@ -517,7 +516,7 @@ NonnullRefPtr Parser::consume_an_at_rule() } if (token.is_open_curly()) { - rule.m_block = consume_a_simple_block(); + rule->m_block = consume_a_simple_block(); return rule; } @@ -525,13 +524,13 @@ NonnullRefPtr Parser::consume_an_at_rule() reconsume_current_input_token(); auto value = consume_a_component_value(); - rule.m_prelude.append(value); + rule->m_prelude.append(value); } } -RefPtr Parser::consume_a_qualified_rule() +RefPtr Parser::consume_a_qualified_rule() { - NonnullRefPtr rule = create(); + NonnullRefPtr rule = create(StyleRule::Type::Qualified); for (;;) { auto token = next_token(); @@ -917,7 +916,7 @@ Vector> Parser::parse_as_comma_separated_list_of return lists; } -RefPtr Parser::convert_rule(NonnullRefPtr) +RefPtr Parser::convert_rule(NonnullRefPtr) { return {}; } diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h index 3c48524382..d4257b479d 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.h +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.h @@ -9,13 +9,12 @@ #include #include -#include #include -#include #include #include #include #include +#include #include #include @@ -91,9 +90,9 @@ private: Token current_token(); void reconsume_current_input_token(); - NonnullRefPtrVector consume_a_list_of_rules(bool top_level); - NonnullRefPtr consume_an_at_rule(); - RefPtr consume_a_qualified_rule(); + NonnullRefPtrVector consume_a_list_of_rules(bool top_level); + NonnullRefPtr consume_an_at_rule(); + RefPtr consume_a_qualified_rule(); Vector consume_a_list_of_declarations(); Optional consume_a_declaration(Vector); Optional consume_a_declaration(); @@ -101,7 +100,7 @@ private: NonnullRefPtr consume_a_simple_block(); NonnullRefPtr consume_a_function(); - RefPtr convert_rule(NonnullRefPtr); + RefPtr convert_rule(NonnullRefPtr); ParsingContext m_context; diff --git a/Userland/Libraries/LibWeb/CSS/Parser/QualifiedStyleRule.h b/Userland/Libraries/LibWeb/CSS/Parser/StyleRule.h similarity index 75% rename from Userland/Libraries/LibWeb/CSS/Parser/QualifiedStyleRule.h rename to Userland/Libraries/LibWeb/CSS/Parser/StyleRule.h index 87ccc2840d..f1bb1c43b4 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/QualifiedStyleRule.h +++ b/Userland/Libraries/LibWeb/CSS/Parser/StyleRule.h @@ -14,12 +14,17 @@ namespace Web::CSS { -class QualifiedStyleRule : public RefCounted { +class StyleRule : public RefCounted { friend class Parser; public: - QualifiedStyleRule(); - ~QualifiedStyleRule(); + enum class Type { + At, + Qualified, + }; + + StyleRule(Type); + ~StyleRule(); Vector const& prelude() const { return m_prelude; } StyleBlockRule const& block() const { return *m_block; } @@ -27,6 +32,8 @@ public: String to_string() const; private: + Type const m_type; + String m_name; // At-rules only Vector m_prelude; RefPtr m_block; }; diff --git a/Userland/Libraries/LibWeb/CSS/Parser/StyleRules.cpp b/Userland/Libraries/LibWeb/CSS/Parser/StyleRules.cpp index 790d75e0cc..18c1a8328d 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/StyleRules.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/StyleRules.cpp @@ -5,20 +5,16 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include #include -#include #include #include #include #include +#include namespace Web::CSS { -AtStyleRule::AtStyleRule() { } -AtStyleRule::~AtStyleRule() { } - -DeclarationOrAtRule::DeclarationOrAtRule(RefPtr at) +DeclarationOrAtRule::DeclarationOrAtRule(RefPtr at) : m_type(DeclarationType::At) , m_at(move(at)) { @@ -30,8 +26,11 @@ DeclarationOrAtRule::DeclarationOrAtRule(StyleDeclarationRule declaration) } DeclarationOrAtRule::~DeclarationOrAtRule() { } -QualifiedStyleRule::QualifiedStyleRule() { } -QualifiedStyleRule::~QualifiedStyleRule() { } +StyleRule::StyleRule(StyleRule::Type type) + : m_type(type) +{ +} +StyleRule::~StyleRule() { } StyleBlockRule::StyleBlockRule() { } StyleBlockRule::~StyleBlockRule() { } @@ -77,17 +76,6 @@ void append_raw(StringBuilder& builder, SeparatorType& separator, CollectionType } } -String AtStyleRule::to_string() const -{ - StringBuilder builder; - builder.append("@"); - builder.append(m_name); - - builder.append(QualifiedStyleRule::to_string()); - - return builder.to_string(); -} - String DeclarationOrAtRule::to_string() const { StringBuilder builder; @@ -104,12 +92,21 @@ String DeclarationOrAtRule::to_string() const return builder.to_string(); } -String QualifiedStyleRule::to_string() const +String StyleRule::to_string() const { StringBuilder builder; + if (m_type == Type::At) { + builder.append("@"); + builder.append(m_name); + } + append_with_to_string(builder, " ", m_prelude); - builder.append(m_block->to_string()); + + if (m_block) + builder.append(m_block->to_string()); + else + builder.append(';'); return builder.to_string(); }