/* * Copyright (c) 2020-2021, the SerenityOS developers. * Copyright (c) 2021-2023, Sam Atkins * Copyright (c) 2023, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include namespace Web::CSS::Parser { // https://drafts.csswg.org/css-syntax/#component-value class ComponentValue { AK_MAKE_DEFAULT_COPYABLE(ComponentValue); AK_MAKE_DEFAULT_MOVABLE(ComponentValue); public: ComponentValue(Token); explicit ComponentValue(Function&&); explicit ComponentValue(SimpleBlock&&); ~ComponentValue(); bool is_block() const { return m_value.has(); } SimpleBlock const& block() const { return m_value.get(); } bool is_function() const { return m_value.has(); } bool is_function(StringView name) const; Function const& function() const { return m_value.get(); } bool is_token() const { return m_value.has(); } bool is(Token::Type type) const { return is_token() && token().is(type); } bool is_delim(u32 delim) const { return is(Token::Type::Delim) && token().delim() == delim; } bool is_ident(StringView ident) const; Token const& token() const { return m_value.get(); } operator Token() const { return m_value.get(); } String to_string() const; String to_debug_string() const; String original_source_text() const; private: Variant m_value; }; } template<> struct AK::Formatter : Formatter { ErrorOr format(FormatBuilder& builder, Web::CSS::Parser::ComponentValue const& component_value) { return Formatter::format(builder, component_value.to_string()); } };