From 65fe3895e6ea354523ca88df5ea8a6321e7f6445 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Tue, 6 Jul 2021 16:05:12 +0100 Subject: [PATCH] LibWeb: Enabling @import in new CSS parser --- .../Libraries/LibWeb/CSS/Parser/Parser.cpp | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index 367ff360fe..71a7532faf 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -1020,21 +1020,39 @@ Vector> Parser::parse_as_comma_separated_list_of RefPtr Parser::convert_to_rule(NonnullRefPtr rule) { - dbgln("Converting a rule: {}", rule->to_string()); - if (rule->m_type == StyleRule::Type::At) { - dbgln("... It's an at rule"); - } else { - dbgln("... It's a style rule"); + if (rule->m_name.equals_ignoring_case("import"sv) && !rule->prelude().is_empty()) { + Optional url; + auto url_token = rule->prelude().first(); + if (url_token.is_function()) { + auto& function = url_token.function(); + if (function.name().equals_ignoring_case("url"sv) && !function.values().is_empty()) + url = url_token.function().values().first(); + } + + if (url_token.is(Token::Type::String)) + url = url_token.token().string(); + + // FIXME: Handle list of media queries. https://www.w3.org/TR/css-cascade-3/#conditional-import + if (url.has_value()) + return CSSImportRule::create(m_context.complete_url(url.value())); + } else { + dbgln("Unrecognized CSS at-rule: {}", rule->m_name); + } + + // FIXME: More at rules! + + } else { auto prelude_stream = TokenStream(rule->m_prelude); Vector selectors = parse_a_selector(prelude_stream); auto declaration = convert_to_declaration(*rule->m_block); if (declaration && !selectors.is_empty()) return CSSStyleRule::create(move(selectors), move(*declaration)); + else + dbgln("Discarding invalid/unsupported style rule: '{}'", rule->to_string()); } - dbgln("... discarding because it's invalid or unsupported."); return {}; }