1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 07:17:35 +00:00

LibWeb: Make CSS::QualifiedStyleRule's prelude StyleComponentValueRule

This commit is contained in:
Sam Atkins 2021-06-29 17:03:25 +01:00 committed by Andreas Kling
parent 54e1180f61
commit d6b4022b58
4 changed files with 18 additions and 21 deletions

View file

@ -1,5 +1,6 @@
/* /*
* Copyright (c) 2020-2021, the SerenityOS developers. * Copyright (c) 2020-2021, the SerenityOS developers.
* Copyright (c) 2021, Sam Atkins <atkinssj@gmail.com>
* *
* SPDX-License-Identifier: BSD-2-Clause * SPDX-License-Identifier: BSD-2-Clause
*/ */
@ -70,7 +71,7 @@ Vector<QualifiedStyleRule> Parser::parse_as_stylesheet()
for (auto& rule : rules) { for (auto& rule : rules) {
dbgln("PRE:"); dbgln("PRE:");
for (auto& pre : rule.m_prelude) { for (auto& pre : rule.m_prelude) {
dbgln("{}", pre); dbgln("{}", pre.to_string());
} }
dbgln("BLOCK:"); dbgln("BLOCK:");
dbgln("{}", rule.m_block.to_string()); dbgln("{}", rule.m_block.to_string());
@ -84,13 +85,8 @@ Vector<QualifiedStyleRule> Parser::parse_as_stylesheet()
return rules; return rules;
} }
Vector<CSS::Selector::ComplexSelector> Parser::parse_selectors(Vector<String> parts) Vector<CSS::Selector::ComplexSelector> Parser::parse_selectors(Vector<StyleComponentValueRule> parts)
{ {
// TODO:
// This is a mess because the prelude is parsed as a string.
// It should really be parsed as its class, but the cpp gods have forsaken me
// and I can't make it work due to cyclic includes.
Vector<CSS::Selector::ComplexSelector> selectors; Vector<CSS::Selector::ComplexSelector> selectors;
size_t index = 0; size_t index = 0;
@ -99,7 +95,7 @@ Vector<CSS::Selector::ComplexSelector> Parser::parse_selectors(Vector<String> pa
return {}; return {};
} }
auto currentToken = parts.at(index); auto currentToken = parts.at(index).to_string();
CSS::Selector::SimpleSelector::Type type; CSS::Selector::SimpleSelector::Type type;
if (currentToken == "*") { if (currentToken == "*") {
type = CSS::Selector::SimpleSelector::Type::Universal; type = CSS::Selector::SimpleSelector::Type::Universal;
@ -134,7 +130,7 @@ Vector<CSS::Selector::ComplexSelector> Parser::parse_selectors(Vector<String> pa
return simple_selector; return simple_selector;
} }
currentToken = parts.at(index); currentToken = parts.at(index).to_string();
if (currentToken.starts_with('[')) { if (currentToken.starts_with('[')) {
auto adjusted = currentToken.substring(1, currentToken.length() - 2); auto adjusted = currentToken.substring(1, currentToken.length() - 2);
@ -176,7 +172,7 @@ Vector<CSS::Selector::ComplexSelector> Parser::parse_selectors(Vector<String> pa
return {}; return {};
} }
currentToken = parts.at(index); currentToken = parts.at(index).to_string();
if (currentToken == ":") { if (currentToken == ":") {
is_pseudo = true; is_pseudo = true;
index++; index++;
@ -186,7 +182,7 @@ Vector<CSS::Selector::ComplexSelector> Parser::parse_selectors(Vector<String> pa
return {}; return {};
} }
currentToken = parts.at(index); currentToken = parts.at(index).to_string();
auto pseudo_name = currentToken; auto pseudo_name = currentToken;
index++; index++;
@ -236,7 +232,7 @@ Vector<CSS::Selector::ComplexSelector> Parser::parse_selectors(Vector<String> pa
auto parse_complex_selector = [&]() -> Optional<CSS::Selector::ComplexSelector> { auto parse_complex_selector = [&]() -> Optional<CSS::Selector::ComplexSelector> {
auto relation = CSS::Selector::ComplexSelector::Relation::Descendant; auto relation = CSS::Selector::ComplexSelector::Relation::Descendant;
auto currentToken = parts.at(index); auto currentToken = parts.at(index).to_string();
if (is_combinator(currentToken)) { if (is_combinator(currentToken)) {
if (currentToken == ">") { if (currentToken == ">") {
relation = CSS::Selector::ComplexSelector::Relation::ImmediateChild; relation = CSS::Selector::ComplexSelector::Relation::ImmediateChild;
@ -279,7 +275,7 @@ Vector<CSS::Selector::ComplexSelector> Parser::parse_selectors(Vector<String> pa
break; break;
} }
auto currentToken = parts.at(index); auto currentToken = parts.at(index).to_string();
if (currentToken != ",") { if (currentToken != ",") {
break; break;
} }
@ -390,7 +386,7 @@ AtStyleRule Parser::consume_an_at_rule()
continue; continue;
} }
} }
rule.m_prelude.append(value.to_string()); rule.m_prelude.append(value);
} }
} }
@ -420,7 +416,7 @@ Optional<QualifiedStyleRule> Parser::consume_a_qualified_rule()
continue; continue;
} }
} }
rule.m_prelude.append(value.to_string()); rule.m_prelude.append(value);
} }
return rule; return rule;

View file

@ -1,5 +1,6 @@
/* /*
* Copyright (c) 2020-2021, the SerenityOS developers. * Copyright (c) 2020-2021, the SerenityOS developers.
* Copyright (c) 2021, Sam Atkins <atkinssj@gmail.com>
* *
* SPDX-License-Identifier: BSD-2-Clause * SPDX-License-Identifier: BSD-2-Clause
*/ */
@ -42,7 +43,7 @@ public:
Vector<StyleComponentValueRule> parse_as_list_of_comma_separated_component_values(); Vector<StyleComponentValueRule> parse_as_list_of_comma_separated_component_values();
Vector<CSS::Selector::ComplexSelector> parse_selectors(Vector<String> parts); Vector<CSS::Selector::ComplexSelector> parse_selectors(Vector<StyleComponentValueRule> parts);
// FIXME: https://www.w3.org/TR/selectors-4/ // FIXME: https://www.w3.org/TR/selectors-4/
Optional<String> parse_a_selector() { return {}; } Optional<String> parse_a_selector() { return {}; }

View file

@ -1,5 +1,6 @@
/* /*
* Copyright (c) 2020-2021, the SerenityOS developers. * Copyright (c) 2020-2021, the SerenityOS developers.
* Copyright (c) 2021, Sam Atkins <atkinssj@gmail.com>
* *
* SPDX-License-Identifier: BSD-2-Clause * SPDX-License-Identifier: BSD-2-Clause
*/ */
@ -7,12 +8,10 @@
#pragma once #pragma once
#include <AK/Vector.h> #include <AK/Vector.h>
#include <LibWeb/CSS/Parser/StyleBlockRule.h> #include <LibWeb/CSS/Parser/StyleComponentValueRule.h>
namespace Web::CSS { namespace Web::CSS {
class StyleComponentValueRule;
class QualifiedStyleRule { class QualifiedStyleRule {
friend class Parser; friend class Parser;
@ -22,7 +21,7 @@ public:
String to_string() const; String to_string() const;
private: private:
Vector<String> m_prelude; Vector<StyleComponentValueRule> m_prelude;
StyleBlockRule m_block; StyleBlockRule m_block;
}; };

View file

@ -1,5 +1,6 @@
/* /*
* Copyright (c) 2020-2021, the SerenityOS developers. * Copyright (c) 2020-2021, the SerenityOS developers.
* Copyright (c) 2021, Sam Atkins <atkinssj@gmail.com>
* *
* SPDX-License-Identifier: BSD-2-Clause * SPDX-License-Identifier: BSD-2-Clause
*/ */
@ -104,7 +105,7 @@ String QualifiedStyleRule::to_string() const
{ {
StringBuilder builder; StringBuilder builder;
append_raw(builder, " ", m_prelude); append_with_to_string(builder, " ", m_prelude);
builder.append(m_block.to_string()); builder.append(m_block.to_string());
return builder.to_string(); return builder.to_string();