mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-05 15:49:11 +00:00
LibWeb/CSS: Implement pending-substitution value
This is a special value temporarily assigned to longhands when their shorthand is unresolved, and then later replaced once that is resolved.
This commit is contained in:
parent
59e8a669de
commit
398d2f9981
Notes:
github-actions[bot]
2025-05-14 10:48:04 +00:00
Author: https://github.com/AtkinsSJ
Commit: 398d2f9981
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/4209
Reviewed-by: https://github.com/awesomekling
4 changed files with 48 additions and 0 deletions
|
@ -48,6 +48,7 @@
|
||||||
#include <LibWeb/CSS/StyleValues/MathDepthStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/MathDepthStyleValue.h>
|
||||||
#include <LibWeb/CSS/StyleValues/NumberStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/NumberStyleValue.h>
|
||||||
#include <LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/OpenTypeTaggedStyleValue.h>
|
||||||
|
#include <LibWeb/CSS/StyleValues/PendingSubstitutionStyleValue.h>
|
||||||
#include <LibWeb/CSS/StyleValues/PercentageStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/PercentageStyleValue.h>
|
||||||
#include <LibWeb/CSS/StyleValues/PositionStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/PositionStyleValue.h>
|
||||||
#include <LibWeb/CSS/StyleValues/RadialGradientStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/RadialGradientStyleValue.h>
|
||||||
|
@ -295,6 +296,12 @@ OpenTypeTaggedStyleValue const& CSSStyleValue::as_open_type_tagged() const
|
||||||
return static_cast<OpenTypeTaggedStyleValue const&>(*this);
|
return static_cast<OpenTypeTaggedStyleValue const&>(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PendingSubstitutionStyleValue const& CSSStyleValue::as_pending_substitution() const
|
||||||
|
{
|
||||||
|
VERIFY(is_pending_substitution());
|
||||||
|
return static_cast<PendingSubstitutionStyleValue const&>(*this);
|
||||||
|
}
|
||||||
|
|
||||||
PercentageStyleValue const& CSSStyleValue::as_percentage() const
|
PercentageStyleValue const& CSSStyleValue::as_percentage() const
|
||||||
{
|
{
|
||||||
VERIFY(is_percentage());
|
VERIFY(is_percentage());
|
||||||
|
|
|
@ -122,6 +122,7 @@ public:
|
||||||
MathDepth,
|
MathDepth,
|
||||||
Number,
|
Number,
|
||||||
OpenTypeTagged,
|
OpenTypeTagged,
|
||||||
|
PendingSubstitution,
|
||||||
Percentage,
|
Percentage,
|
||||||
Position,
|
Position,
|
||||||
RadialGradient,
|
RadialGradient,
|
||||||
|
@ -295,6 +296,10 @@ public:
|
||||||
OpenTypeTaggedStyleValue const& as_open_type_tagged() const;
|
OpenTypeTaggedStyleValue const& as_open_type_tagged() const;
|
||||||
OpenTypeTaggedStyleValue& as_open_type_tagged() { return const_cast<OpenTypeTaggedStyleValue&>(const_cast<CSSStyleValue const&>(*this).as_open_type_tagged()); }
|
OpenTypeTaggedStyleValue& as_open_type_tagged() { return const_cast<OpenTypeTaggedStyleValue&>(const_cast<CSSStyleValue const&>(*this).as_open_type_tagged()); }
|
||||||
|
|
||||||
|
bool is_pending_substitution() const { return type() == Type::PendingSubstitution; }
|
||||||
|
PendingSubstitutionStyleValue const& as_pending_substitution() const;
|
||||||
|
PendingSubstitutionStyleValue& as_pending_substitution() { return const_cast<PendingSubstitutionStyleValue&>(const_cast<CSSStyleValue const&>(*this).as_pending_substitution()); }
|
||||||
|
|
||||||
bool is_percentage() const { return type() == Type::Percentage; }
|
bool is_percentage() const { return type() == Type::Percentage; }
|
||||||
PercentageStyleValue const& as_percentage() const;
|
PercentageStyleValue const& as_percentage() const;
|
||||||
PercentageStyleValue& as_percentage() { return const_cast<PercentageStyleValue&>(const_cast<CSSStyleValue const&>(*this).as_percentage()); }
|
PercentageStyleValue& as_percentage() { return const_cast<PercentageStyleValue&>(const_cast<CSSStyleValue const&>(*this).as_percentage()); }
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2025, Sam Atkins <sam@ladybird.org>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <LibWeb/CSS/CSSStyleValue.h>
|
||||||
|
|
||||||
|
namespace Web::CSS {
|
||||||
|
|
||||||
|
// https://drafts.csswg.org/css-values-5/#pending-substitution-value
|
||||||
|
class PendingSubstitutionStyleValue final : public StyleValueWithDefaultOperators<PendingSubstitutionStyleValue> {
|
||||||
|
public:
|
||||||
|
static ValueComparingNonnullRefPtr<PendingSubstitutionStyleValue> create()
|
||||||
|
{
|
||||||
|
static ValueComparingNonnullRefPtr<PendingSubstitutionStyleValue> instance = adopt_ref(*new (nothrow) PendingSubstitutionStyleValue());
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
virtual ~PendingSubstitutionStyleValue() override = default;
|
||||||
|
virtual String to_string(SerializationMode) const override { return {}; }
|
||||||
|
|
||||||
|
// We shouldn't need to compare these, but in case we do: The nature of them is that their value is unknown, so
|
||||||
|
// consider them all to be unique.
|
||||||
|
bool properties_equal(PendingSubstitutionStyleValue const&) const { return false; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
PendingSubstitutionStyleValue()
|
||||||
|
: StyleValueWithDefaultOperators(Type::PendingSubstitution)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -266,6 +266,7 @@ class NumberOrCalculated;
|
||||||
class NumberStyleValue;
|
class NumberStyleValue;
|
||||||
class OpenTypeTaggedStyleValue;
|
class OpenTypeTaggedStyleValue;
|
||||||
class ParsedFontFace;
|
class ParsedFontFace;
|
||||||
|
class PendingSubstitutionStyleValue;
|
||||||
class Percentage;
|
class Percentage;
|
||||||
class PercentageOrCalculated;
|
class PercentageOrCalculated;
|
||||||
class PercentageStyleValue;
|
class PercentageStyleValue;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue