/src/serenity/Userland/Libraries/LibWeb/CSS/Parser/Helpers.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Copyright (c) 2018-2022, Andreas Kling <kling@serenityos.org> |
3 | | * Copyright (c) 2020-2023, the SerenityOS developers. |
4 | | * Copyright (c) 2021-2024, Sam Atkins <atkinssj@serenityos.org> |
5 | | * Copyright (c) 2021, Tobias Christiansen <tobyase@serenityos.org> |
6 | | * Copyright (c) 2022, MacDue <macdue@dueutil.tech> |
7 | | * |
8 | | * SPDX-License-Identifier: BSD-2-Clause |
9 | | */ |
10 | | |
11 | | #include <LibWeb/CSS/CSSMediaRule.h> |
12 | | #include <LibWeb/CSS/CSSRuleList.h> |
13 | | #include <LibWeb/CSS/CSSStyleSheet.h> |
14 | | #include <LibWeb/CSS/Parser/Parser.h> |
15 | | |
16 | | namespace Web { |
17 | | |
18 | | CSS::CSSStyleSheet* parse_css_stylesheet(CSS::Parser::ParsingContext const& context, StringView css, Optional<URL::URL> location) |
19 | 0 | { |
20 | 0 | if (css.is_empty()) { |
21 | 0 | auto rule_list = CSS::CSSRuleList::create_empty(context.realm()); |
22 | 0 | auto media_list = CSS::MediaList::create(context.realm(), {}); |
23 | 0 | auto style_sheet = CSS::CSSStyleSheet::create(context.realm(), rule_list, media_list, location); |
24 | 0 | style_sheet->set_source_text({}); |
25 | 0 | return style_sheet; |
26 | 0 | } |
27 | 0 | auto* style_sheet = CSS::Parser::Parser::create(context, css).parse_as_css_stylesheet(location); |
28 | | // FIXME: Avoid this copy |
29 | 0 | style_sheet->set_source_text(MUST(String::from_utf8(css))); |
30 | 0 | return style_sheet; |
31 | 0 | } |
32 | | |
33 | | CSS::ElementInlineCSSStyleDeclaration* parse_css_style_attribute(CSS::Parser::ParsingContext const& context, StringView css, DOM::Element& element) |
34 | 0 | { |
35 | 0 | if (css.is_empty()) |
36 | 0 | return CSS::ElementInlineCSSStyleDeclaration::create(element, {}, {}); |
37 | 0 | return CSS::Parser::Parser::create(context, css).parse_as_style_attribute(element); |
38 | 0 | } |
39 | | |
40 | | RefPtr<CSS::CSSStyleValue> parse_css_value(CSS::Parser::ParsingContext const& context, StringView string, CSS::PropertyID property_id) |
41 | 0 | { |
42 | 0 | if (string.is_empty()) |
43 | 0 | return nullptr; |
44 | 0 | return CSS::Parser::Parser::create(context, string).parse_as_css_value(property_id); |
45 | 0 | } |
46 | | |
47 | | CSS::CSSRule* parse_css_rule(CSS::Parser::ParsingContext const& context, StringView css_text) |
48 | 0 | { |
49 | 0 | return CSS::Parser::Parser::create(context, css_text).parse_as_css_rule(); |
50 | 0 | } |
51 | | |
52 | | Optional<CSS::SelectorList> parse_selector(CSS::Parser::ParsingContext const& context, StringView selector_text) |
53 | 0 | { |
54 | 0 | return CSS::Parser::Parser::create(context, selector_text).parse_as_selector(); |
55 | 0 | } |
56 | | |
57 | | Optional<CSS::Selector::PseudoElement> parse_pseudo_element_selector(CSS::Parser::ParsingContext const& context, StringView selector_text) |
58 | 0 | { |
59 | 0 | return CSS::Parser::Parser::create(context, selector_text).parse_as_pseudo_element_selector(); |
60 | 0 | } |
61 | | |
62 | | RefPtr<CSS::MediaQuery> parse_media_query(CSS::Parser::ParsingContext const& context, StringView string) |
63 | 0 | { |
64 | 0 | return CSS::Parser::Parser::create(context, string).parse_as_media_query(); |
65 | 0 | } |
66 | | |
67 | | Vector<NonnullRefPtr<CSS::MediaQuery>> parse_media_query_list(CSS::Parser::ParsingContext const& context, StringView string) |
68 | 0 | { |
69 | 0 | return CSS::Parser::Parser::create(context, string).parse_as_media_query_list(); |
70 | 0 | } |
71 | | |
72 | | RefPtr<CSS::Supports> parse_css_supports(CSS::Parser::ParsingContext const& context, StringView string) |
73 | 0 | { |
74 | 0 | if (string.is_empty()) |
75 | 0 | return {}; |
76 | 0 | return CSS::Parser::Parser::create(context, string).parse_as_supports(); |
77 | 0 | } |
78 | | |
79 | | Optional<CSS::StyleProperty> parse_css_supports_condition(CSS::Parser::ParsingContext const& context, StringView string) |
80 | 0 | { |
81 | 0 | if (string.is_empty()) |
82 | 0 | return {}; |
83 | 0 | return CSS::Parser::Parser::create(context, string).parse_as_supports_condition(); |
84 | 0 | } |
85 | | |
86 | | } |