/* * Copyright (c) 2026, Callum Law * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include namespace Web::CSS { class TupleStyleValue final : public StyleValueWithDefaultOperators { public: static ValueComparingNonnullRefPtr create(StyleValueTuple values) { return adopt_ref(*new (nothrow) TupleStyleValue(move(values))); } virtual ~TupleStyleValue() override = default; StyleValueTuple const& tuple() const { return m_tuple; } virtual void serialize(StringBuilder&, SerializationMode) const override; virtual ValueComparingNonnullRefPtr absolutized(ComputationContext const&) const override; // FIXME: Support tokenization and reification bool properties_equal(TupleStyleValue const& other) const { return m_tuple == other.m_tuple; } virtual bool is_computationally_independent() const override { return all_of(m_tuple, [](auto& value) { return value->is_computationally_independent(); }); } struct Indices { struct FontVariantEastAsian { static constexpr size_t Variant = 0; static constexpr size_t Width = 1; static constexpr size_t Ruby = 2; }; struct FontVariantLigatures { static constexpr size_t Common = 0; static constexpr size_t Discretionary = 1; static constexpr size_t Historical = 2; static constexpr size_t Contextual = 3; }; struct FontVariantNumeric { static constexpr size_t Figure = 0; static constexpr size_t Spacing = 1; static constexpr size_t Fraction = 2; static constexpr size_t Ordinal = 3; static constexpr size_t SlashedZero = 4; }; }; private: explicit TupleStyleValue(StyleValueTuple values) : StyleValueWithDefaultOperators(Type::Tuple) , m_tuple(move(values)) { } StyleValueTuple m_tuple; }; }