mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-21 20:15:17 +00:00
LibWeb/CSS: Implement UnicodeRangeStyleValue
This is preparation for storing at-rule descriptors as style values.
This commit is contained in:
parent
e0a03147c6
commit
09b8f73e11
Notes:
github-actions[bot]
2025-03-28 09:15:53 +00:00
Author: https://github.com/AtkinsSJ Commit: https://github.com/LadybirdBrowser/ladybird/commit/09b8f73e111 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/4125
8 changed files with 86 additions and 0 deletions
|
@ -183,6 +183,7 @@ set(SOURCES
|
|||
CSS/StyleValues/StyleValueList.cpp
|
||||
CSS/StyleValues/TransformationStyleValue.cpp
|
||||
CSS/StyleValues/TransitionStyleValue.cpp
|
||||
CSS/StyleValues/UnicodeRangeStyleValue.cpp
|
||||
CSS/StyleValues/UnresolvedStyleValue.cpp
|
||||
CSS/Supports.cpp
|
||||
CSS/SyntaxHighlighter/SyntaxHighlighter.cpp
|
||||
|
|
|
@ -60,6 +60,7 @@
|
|||
#include <LibWeb/CSS/StyleValues/TransformationStyleValue.h>
|
||||
#include <LibWeb/CSS/StyleValues/TransitionStyleValue.h>
|
||||
#include <LibWeb/CSS/StyleValues/URLStyleValue.h>
|
||||
#include <LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.h>
|
||||
#include <LibWeb/CSS/StyleValues/UnresolvedStyleValue.h>
|
||||
|
||||
namespace Web::CSS {
|
||||
|
@ -351,6 +352,12 @@ TransitionStyleValue const& CSSStyleValue::as_transition() const
|
|||
return static_cast<TransitionStyleValue const&>(*this);
|
||||
}
|
||||
|
||||
UnicodeRangeStyleValue const& CSSStyleValue::as_unicode_range() const
|
||||
{
|
||||
VERIFY(is_unicode_range());
|
||||
return static_cast<UnicodeRangeStyleValue const&>(*this);
|
||||
}
|
||||
|
||||
UnresolvedStyleValue const& CSSStyleValue::as_unresolved() const
|
||||
{
|
||||
VERIFY(is_unresolved());
|
||||
|
|
|
@ -133,6 +133,7 @@ public:
|
|||
Time,
|
||||
Transformation,
|
||||
Transition,
|
||||
UnicodeRange,
|
||||
Unresolved,
|
||||
URL,
|
||||
ValueList,
|
||||
|
@ -331,6 +332,10 @@ public:
|
|||
TransitionStyleValue const& as_transition() const;
|
||||
TransitionStyleValue& as_transition() { return const_cast<TransitionStyleValue&>(const_cast<CSSStyleValue const&>(*this).as_transition()); }
|
||||
|
||||
bool is_unicode_range() const { return type() == Type::UnicodeRange; }
|
||||
UnicodeRangeStyleValue const& as_unicode_range() const;
|
||||
UnicodeRangeStyleValue& as_unicode_range() { return const_cast<UnicodeRangeStyleValue&>(const_cast<CSSStyleValue const&>(*this).as_unicode_range()); }
|
||||
|
||||
bool is_unresolved() const { return type() == Type::Unresolved; }
|
||||
UnresolvedStyleValue const& as_unresolved() const;
|
||||
UnresolvedStyleValue& as_unresolved() { return const_cast<UnresolvedStyleValue&>(const_cast<CSSStyleValue const&>(*this).as_unresolved()); }
|
||||
|
|
|
@ -268,6 +268,7 @@ private:
|
|||
Optional<Gfx::UnicodeRange> parse_unicode_range(TokenStream<ComponentValue>&);
|
||||
Optional<Gfx::UnicodeRange> parse_unicode_range(StringView);
|
||||
Vector<Gfx::UnicodeRange> parse_unicode_ranges(TokenStream<ComponentValue>&);
|
||||
RefPtr<UnicodeRangeStyleValue> parse_unicode_range_value(TokenStream<ComponentValue>&);
|
||||
Optional<GridSize> parse_grid_size(ComponentValue const&);
|
||||
Optional<GridFitContent> parse_grid_fit_content(Vector<ComponentValue> const&);
|
||||
Optional<GridMinMax> parse_min_max(Vector<ComponentValue> const&);
|
||||
|
|
|
@ -56,6 +56,7 @@
|
|||
#include <LibWeb/CSS/StyleValues/StringStyleValue.h>
|
||||
#include <LibWeb/CSS/StyleValues/TimeStyleValue.h>
|
||||
#include <LibWeb/CSS/StyleValues/URLStyleValue.h>
|
||||
#include <LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.h>
|
||||
#include <LibWeb/CSS/StyleValues/UnresolvedStyleValue.h>
|
||||
#include <LibWeb/DOM/Element.h>
|
||||
#include <LibWeb/Dump.h>
|
||||
|
@ -621,6 +622,13 @@ Vector<Gfx::UnicodeRange> Parser::parse_unicode_ranges(TokenStream<ComponentValu
|
|||
return unicode_ranges;
|
||||
}
|
||||
|
||||
RefPtr<UnicodeRangeStyleValue> Parser::parse_unicode_range_value(TokenStream<ComponentValue>& tokens)
|
||||
{
|
||||
if (auto range = parse_unicode_range(tokens); range.has_value())
|
||||
return UnicodeRangeStyleValue::create(range.release_value());
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
RefPtr<CSSStyleValue> Parser::parse_integer_value(TokenStream<ComponentValue>& tokens)
|
||||
{
|
||||
auto const& peek_token = tokens.next_token();
|
||||
|
|
29
Libraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.cpp
Normal file
29
Libraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.cpp
Normal file
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* Copyright (c) 2025, Sam Atkins <sam@ladybird.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.h>
|
||||
|
||||
namespace Web::CSS {
|
||||
|
||||
UnicodeRangeStyleValue::UnicodeRangeStyleValue(Gfx::UnicodeRange unicode_range)
|
||||
: StyleValueWithDefaultOperators(Type::UnicodeRange)
|
||||
, m_unicode_range(unicode_range)
|
||||
{
|
||||
}
|
||||
|
||||
UnicodeRangeStyleValue::~UnicodeRangeStyleValue() = default;
|
||||
|
||||
String UnicodeRangeStyleValue::to_string(SerializationMode) const
|
||||
{
|
||||
return m_unicode_range.to_string();
|
||||
}
|
||||
|
||||
bool UnicodeRangeStyleValue::properties_equal(UnicodeRangeStyleValue const& other) const
|
||||
{
|
||||
return m_unicode_range == other.m_unicode_range;
|
||||
}
|
||||
|
||||
}
|
34
Libraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.h
Normal file
34
Libraries/LibWeb/CSS/StyleValues/UnicodeRangeStyleValue.h
Normal file
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* Copyright (c) 2025, Sam Atkins <sam@ladybird.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <LibGfx/Font/UnicodeRange.h>
|
||||
#include <LibWeb/CSS/CSSStyleValue.h>
|
||||
|
||||
namespace Web::CSS {
|
||||
|
||||
class UnicodeRangeStyleValue final : public StyleValueWithDefaultOperators<UnicodeRangeStyleValue> {
|
||||
public:
|
||||
static ValueComparingNonnullRefPtr<UnicodeRangeStyleValue> create(Gfx::UnicodeRange unicode_range)
|
||||
{
|
||||
return adopt_ref(*new (nothrow) UnicodeRangeStyleValue(unicode_range));
|
||||
}
|
||||
virtual ~UnicodeRangeStyleValue() override;
|
||||
|
||||
Gfx::UnicodeRange const& unicode_range() const { return m_unicode_range; }
|
||||
|
||||
virtual String to_string(SerializationMode) const override;
|
||||
|
||||
bool properties_equal(UnicodeRangeStyleValue const&) const;
|
||||
|
||||
private:
|
||||
UnicodeRangeStyleValue(Gfx::UnicodeRange);
|
||||
|
||||
Gfx::UnicodeRange m_unicode_range;
|
||||
};
|
||||
|
||||
}
|
|
@ -265,6 +265,7 @@ class TimeStyleValue;
|
|||
class Transformation;
|
||||
class TransformationStyleValue;
|
||||
class TransitionStyleValue;
|
||||
class UnicodeRangeStyleValue;
|
||||
class UnresolvedStyleValue;
|
||||
class URLStyleValue;
|
||||
class VisualViewport;
|
||||
|
|
Loading…
Add table
Reference in a new issue