mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2026-06-28 20:20:26 +00:00
DevTools needs rule-level source positions to link applied style rules back to their source sheets. The parser already tracks token line and column information, so carry that through qualified rules and nested declarations when creating CSSRule objects.
71 lines
2.3 KiB
C++
71 lines
2.3 KiB
C++
/*
|
|
* Copyright (c) 2020-2021, the SerenityOS developers.
|
|
* Copyright (c) 2021-2026, Sam Atkins <sam@ladybird.org>
|
|
* Copyright (c) 2023, Andreas Kling <andreas@ladybird.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/NonnullRefPtr.h>
|
|
#include <AK/RefPtr.h>
|
|
#include <LibWeb/CSS/Parser/Token.h>
|
|
#include <LibWeb/CSS/Parser/Types.h>
|
|
#include <LibWeb/Export.h>
|
|
|
|
namespace Web::CSS::Parser {
|
|
|
|
// https://drafts.csswg.org/css-syntax/#component-value
|
|
class WEB_API ComponentValue {
|
|
AK_MAKE_DEFAULT_COPYABLE(ComponentValue);
|
|
AK_MAKE_DEFAULT_MOVABLE(ComponentValue);
|
|
|
|
public:
|
|
ComponentValue(Token);
|
|
explicit ComponentValue(Function&&);
|
|
explicit ComponentValue(SimpleBlock&&);
|
|
explicit ComponentValue(GuaranteedInvalidValue&&);
|
|
~ComponentValue();
|
|
|
|
bool is_block() const { return m_value.has<SimpleBlock>(); }
|
|
SimpleBlock const& block() const { return m_value.get<SimpleBlock>(); }
|
|
|
|
bool is_function() const { return m_value.has<Function>(); }
|
|
bool is_function(StringView name) const;
|
|
Function const& function() const { return m_value.get<Function>(); }
|
|
|
|
bool is_token() const { return m_value.has<Token>(); }
|
|
bool is(Token::Type type) const { return is_token() && token().is(type); }
|
|
bool is_delim(u32 delim) const;
|
|
bool is_ident(StringView ident) const;
|
|
Token const& token() const { return m_value.get<Token>(); }
|
|
operator Token() const { return m_value.get<Token>(); }
|
|
|
|
bool is_guaranteed_invalid() const { return m_value.has<GuaranteedInvalidValue>(); }
|
|
bool contains_guaranteed_invalid_value() const;
|
|
bool contains_attr_tainted_value() const;
|
|
void set_attr_tainted() { m_attr_tainted = true; }
|
|
|
|
String to_string() const;
|
|
String to_debug_string() const;
|
|
String original_source_text() const;
|
|
|
|
Optional<SourcePosition> start_position() const;
|
|
|
|
bool operator==(ComponentValue const&) const = default;
|
|
|
|
private:
|
|
Variant<Token, Function, SimpleBlock, GuaranteedInvalidValue> m_value;
|
|
bool m_attr_tainted { false };
|
|
};
|
|
|
|
}
|
|
|
|
template<>
|
|
struct AK::Formatter<Web::CSS::Parser::ComponentValue> : Formatter<StringView> {
|
|
ErrorOr<void> format(FormatBuilder& builder, Web::CSS::Parser::ComponentValue const& component_value)
|
|
{
|
|
return Formatter<StringView>::format(builder, component_value.to_string());
|
|
}
|
|
};
|