2025-06-19 17:03:26 +01:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2025, Sam Atkins <sam@ladybird.org>
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <LibWeb/CSS/Parser/Parser.h>
|
|
|
|
|
|
|
|
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<String> 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<SubstitutionContext&> m_contexts;
|
|
|
|
};
|
|
|
|
|
|
|
|
enum class ArbitrarySubstitutionFunction : u8 {
|
|
|
|
Attr,
|
2025-08-05 12:32:54 +01:00
|
|
|
Env,
|
2025-06-19 17:03:26 +01:00
|
|
|
Var,
|
|
|
|
};
|
|
|
|
[[nodiscard]] Optional<ArbitrarySubstitutionFunction> to_arbitrary_substitution_function(FlyString const& name);
|
|
|
|
|
|
|
|
bool contains_guaranteed_invalid_value(Vector<ComponentValue> const&);
|
|
|
|
|
|
|
|
[[nodiscard]] Vector<ComponentValue> substitute_arbitrary_substitution_functions(DOM::AbstractElement&, GuardedSubstitutionContexts&, Vector<ComponentValue> const&, Optional<SubstitutionContext> = {});
|
|
|
|
|
|
|
|
using ArbitrarySubstitutionFunctionArguments = Vector<Vector<ComponentValue>>;
|
|
|
|
[[nodiscard]] Optional<ArbitrarySubstitutionFunctionArguments> parse_according_to_argument_grammar(ArbitrarySubstitutionFunction, Vector<ComponentValue> const&);
|
|
|
|
|
|
|
|
[[nodiscard]] Vector<ComponentValue> replace_an_arbitrary_substitution_function(DOM::AbstractElement&, GuardedSubstitutionContexts&, ArbitrarySubstitutionFunction, ArbitrarySubstitutionFunctionArguments const&);
|
|
|
|
|
|
|
|
}
|