/* * Copyright (c) 2025, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include namespace Web::CSS::Parser { // https://drafts.csswg.org/css-values-5/#substitution-context struct SubstitutionContext { enum class DependencyType : u8 { Property, Attribute, Function, }; DependencyType dependency_type; String first; Optional second {}; bool is_cyclic { false }; bool operator==(SubstitutionContext const&) const; String to_string() const; }; class GuardedSubstitutionContexts { public: void guard(SubstitutionContext&); void unguard(SubstitutionContext const&); private: Vector m_contexts; }; enum class ArbitrarySubstitutionFunction : u8 { Attr, Var, }; [[nodiscard]] Optional to_arbitrary_substitution_function(FlyString const& name); bool contains_guaranteed_invalid_value(Vector const&); [[nodiscard]] Vector substitute_arbitrary_substitution_functions(DOM::AbstractElement&, GuardedSubstitutionContexts&, Vector const&, Optional = {}); using ArbitrarySubstitutionFunctionArguments = Vector>; [[nodiscard]] Optional parse_according_to_argument_grammar(ArbitrarySubstitutionFunction, Vector const&); [[nodiscard]] Vector replace_an_arbitrary_substitution_function(DOM::AbstractElement&, GuardedSubstitutionContexts&, ArbitrarySubstitutionFunction, ArbitrarySubstitutionFunctionArguments const&); }