Coverage Report

Created: 2025-08-28 06:26

/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
}