2021-03-22 17:41:47 +01:00
/*
2021-04-28 22:46:44 +02:00
* Copyright ( c ) 2020 - 2021 , the SerenityOS developers .
2025-02-06 14:08:26 +00:00
* Copyright ( c ) 2021 - 2025 , Sam Atkins < sam @ ladybird . org >
2021-03-22 17:41:47 +01:00
*
2021-04-22 01:24:48 -07:00
* SPDX - License - Identifier : BSD - 2 - Clause
2021-03-22 17:41:47 +01:00
*/
# pragma once
2022-04-27 11:04:16 +01:00
# include <AK/Error.h>
2024-12-17 14:00:41 +00:00
# include <AK/NonnullRawPtr.h>
2021-07-12 17:30:40 +01:00
# include <AK/RefPtr.h>
2021-03-22 17:41:47 +01:00
# include <AK/Vector.h>
2025-02-06 14:08:26 +00:00
# include <LibGC/Ptr.h>
2023-12-09 23:30:01 +01:00
# include <LibGfx/Font/UnicodeRange.h>
2025-03-14 10:31:27 +00:00
# include <LibWeb/CSS/BooleanExpression.h>
2021-10-08 15:54:16 +01:00
# include <LibWeb/CSS/CSSStyleDeclaration.h>
2024-08-14 11:10:54 +01:00
# include <LibWeb/CSS/CSSStyleValue.h>
2025-04-02 17:05:48 +01:00
# include <LibWeb/CSS/Descriptor.h>
# include <LibWeb/CSS/DescriptorID.h>
2021-09-29 12:56:37 +01:00
# include <LibWeb/CSS/MediaQuery.h>
2025-05-16 11:37:53 +01:00
# include <LibWeb/CSS/PageSelector.h>
2024-05-07 09:18:37 -06:00
# include <LibWeb/CSS/ParsedFontFace.h>
2022-03-31 11:43:07 +01:00
# include <LibWeb/CSS/Parser/ComponentValue.h>
2023-08-17 15:43:30 +01:00
# include <LibWeb/CSS/Parser/Dimension.h>
2025-04-14 17:10:20 +01:00
# include <LibWeb/CSS/Parser/RuleContext.h>
2022-09-27 16:05:57 +01:00
# include <LibWeb/CSS/Parser/TokenStream.h>
2021-03-22 17:41:47 +01:00
# include <LibWeb/CSS/Parser/Tokenizer.h>
2024-10-11 11:17:10 +01:00
# include <LibWeb/CSS/Parser/Types.h>
2023-03-25 14:11:11 +00:00
# include <LibWeb/CSS/PropertyID.h>
2022-03-06 13:48:32 +00:00
# include <LibWeb/CSS/Ratio.h>
2021-03-22 17:41:47 +01:00
# include <LibWeb/CSS/Selector.h>
2023-03-24 16:42:50 +00:00
# include <LibWeb/CSS/StyleValues/AbstractImageStyleValue.h>
2025-02-06 14:08:26 +00:00
# include <LibWeb/CSS/StyleValues/BasicShapeStyleValue.h>
2024-12-11 15:05:56 +00:00
# include <LibWeb/CSS/StyleValues/CalculatedStyleValue.h>
2021-10-08 15:54:16 +01:00
# include <LibWeb/CSS/Supports.h>
2025-04-08 14:33:01 +01:00
# include <LibWeb/CSS/URL.h>
2022-04-12 11:32:18 +01:00
# include <LibWeb/Forward.h>
2021-03-22 17:41:47 +01:00
2022-04-12 12:00:07 +01:00
namespace Web : : CSS : : Parser {
2021-03-22 17:41:47 +01:00
2023-09-04 11:16:49 +01:00
class PropertyDependencyNode ;
2024-12-17 14:00:41 +00:00
namespace CalcParsing {
2025-05-13 07:06:33 -04:00
2024-12-17 14:00:41 +00:00
struct Operator {
char delim ;
} ;
struct ProductNode ;
struct SumNode ;
struct InvertNode ;
struct NegateNode ;
2025-01-07 12:10:40 +00:00
using Node = Variant < Operator , NonnullOwnPtr < ProductNode > , NonnullOwnPtr < SumNode > , NonnullOwnPtr < InvertNode > , NonnullOwnPtr < NegateNode > , NonnullRawPtr < ComponentValue const > > ;
2024-12-17 14:00:41 +00:00
struct ProductNode {
Vector < Node > children ;
} ;
struct SumNode {
Vector < Node > children ;
} ;
struct InvertNode {
Node child ;
} ;
struct NegateNode {
Node child ;
} ;
2025-05-13 07:06:33 -04:00
2024-12-17 14:00:41 +00:00
}
2025-02-06 14:08:26 +00:00
enum class ParsingMode {
Normal ,
SVGPresentationAttribute , // See https://svgwg.org/svg2-draft/types.html#presentation-attribute-css-value
} ;
struct ParsingParams {
explicit ParsingParams ( ParsingMode = ParsingMode : : Normal ) ;
explicit ParsingParams ( JS : : Realm & , ParsingMode = ParsingMode : : Normal ) ;
explicit ParsingParams ( DOM : : Document const & , ParsingMode = ParsingMode : : Normal ) ;
GC : : Ptr < JS : : Realm > realm ;
GC : : Ptr < DOM : : Document const > document ;
ParsingMode mode { ParsingMode : : Normal } ;
2025-04-14 17:10:20 +01:00
Vector < RuleContext > rule_context ;
2025-02-06 14:08:26 +00:00
} ;
// The very large CSS Parser implementation code is broken up among several .cpp files:
// Parser.cpp contains the core parser algorithms, defined in https://drafts.csswg.org/css-syntax
// Everything else is in different *Parsing.cpp files
2021-03-22 17:41:47 +01:00
class Parser {
2025-02-06 14:08:26 +00:00
AK_MAKE_NONCOPYABLE ( Parser ) ;
AK_MAKE_NONMOVABLE ( Parser ) ;
2023-03-06 17:17:08 +00:00
2025-02-06 14:08:26 +00:00
public :
static Parser create ( ParsingParams const & , StringView input , StringView encoding = " utf-8 " sv ) ;
2021-03-22 17:41:47 +01:00
2025-04-14 14:04:36 +01:00
GC : : Ref < CSS : : CSSStyleSheet > parse_as_css_stylesheet ( Optional < : : URL : : URL > location , Vector < NonnullRefPtr < MediaQuery > > media_query_list = { } ) ;
2025-03-17 12:55:21 +00:00
struct PropertiesAndCustomProperties {
Vector < StyleProperty > properties ;
HashMap < FlyString , StyleProperty > custom_properties ;
} ;
2025-04-14 15:26:43 +01:00
PropertiesAndCustomProperties parse_as_property_declaration_block ( ) ;
Vector < Descriptor > parse_as_descriptor_declaration_block ( AtRuleID ) ;
2022-08-07 15:46:44 +02:00
CSSRule * parse_as_css_rule ( ) ;
2022-03-30 12:05:16 +01:00
Optional < StyleProperty > parse_as_supports_condition ( ) ;
2025-04-15 18:01:54 +01:00
GC : : RootVector < GC : : Ref < CSSRule > > parse_as_stylesheet_contents ( ) ;
2022-03-28 16:37:54 +01:00
2022-03-17 15:14:01 +00:00
enum class SelectorParsingMode {
Standard ,
// `<forgiving-selector-list>` and `<forgiving-relative-selector-list>`
// are handled with this parameter, not as separate functions.
// https://drafts.csswg.org/selectors/#forgiving-selector
Forgiving
} ;
2021-07-03 12:34:25 +01:00
// Contrary to the name, these parse a comma-separated list of selectors, according to the spec.
2022-03-17 15:14:01 +00:00
Optional < SelectorList > parse_as_selector ( SelectorParsingMode = SelectorParsingMode : : Standard ) ;
Optional < SelectorList > parse_as_relative_selector ( SelectorParsingMode = SelectorParsingMode : : Standard ) ;
2021-07-30 17:06:48 +01:00
2025-03-20 16:56:46 +00:00
Optional < Selector : : PseudoElementSelector > parse_as_pseudo_element_selector ( ) ;
2024-08-06 12:44:43 +01:00
2025-05-16 11:37:53 +01:00
Optional < PageSelectorList > parse_as_page_selector_list ( ) ;
2023-03-06 14:17:01 +01:00
Vector < NonnullRefPtr < MediaQuery > > parse_as_media_query_list ( ) ;
2021-09-29 12:56:37 +01:00
RefPtr < MediaQuery > parse_as_media_query ( ) ;
2021-10-08 15:54:16 +01:00
RefPtr < Supports > parse_as_supports ( ) ;
2025-04-15 15:18:27 -06:00
RefPtr < CSSStyleValue const > parse_as_css_value ( PropertyID ) ;
RefPtr < CSSStyleValue const > parse_as_descriptor_value ( AtRuleID , DescriptorID ) ;
2021-07-30 17:48:23 +01:00
2023-09-04 12:57:12 +01:00
Optional < ComponentValue > parse_as_component_value ( ) ;
2024-11-22 12:01:42 +01:00
Vector < ComponentValue > parse_as_list_of_component_values ( ) ;
2025-04-15 15:18:27 -06:00
static NonnullRefPtr < CSSStyleValue const > resolve_unresolved_style_value ( ParsingParams const & , DOM : : Element & , Optional < PseudoElement > , PropertyID , UnresolvedStyleValue const & ) ;
2021-12-03 12:32:12 +00:00
2024-09-11 16:41:18 +01:00
[ [ nodiscard ] ] LengthOrCalculated parse_as_sizes_attribute ( DOM : : Element const & element , HTML : : HTMLImageElement const * img = nullptr ) ;
2023-05-11 16:56:01 +02:00
2021-07-30 17:06:48 +01:00
private :
2025-02-06 14:08:26 +00:00
Parser ( ParsingParams const & , Vector < Token > ) ;
2023-03-06 17:17:08 +00:00
2022-04-27 11:04:16 +01:00
enum class ParseError {
2021-09-12 17:47:58 +01:00
IncludesIgnoredVendorPrefix ,
2023-05-02 13:03:51 +01:00
InternalError ,
2021-09-12 17:42:11 +01:00
SyntaxError ,
} ;
2022-04-27 11:04:16 +01:00
template < typename T >
using ParseErrorOr = ErrorOr < T , ParseError > ;
2021-09-12 17:42:11 +01:00
2022-03-29 14:13:39 +01:00
// "Parse a stylesheet" is intended to be the normal parser entry point, for parsing stylesheets.
struct ParsedStyleSheet {
2025-04-08 13:35:26 +01:00
Optional < : : URL : : URL > location ;
2024-10-11 11:17:10 +01:00
Vector < Rule > rules ;
2022-03-29 14:13:39 +01:00
} ;
2021-07-30 17:06:48 +01:00
template < typename T >
2025-04-08 13:35:26 +01:00
ParsedStyleSheet parse_a_stylesheet ( TokenStream < T > & , Optional < : : URL : : URL > location ) ;
2022-03-29 14:13:39 +01:00
2024-10-11 11:17:10 +01:00
// "Parse a stylesheet’ s contents" is intended for use by the CSSStyleSheet replace() method, and similar, which parse text into the contents of an existing stylesheet.
2021-07-30 17:06:48 +01:00
template < typename T >
2024-10-11 11:17:10 +01:00
Vector < Rule > parse_a_stylesheets_contents ( TokenStream < T > & ) ;
// "Parse a block’ s contents" is intended for parsing the contents of any block in CSS (including things like the style attribute),
// and APIs such as the CSSStyleDeclaration cssText attribute.
template < typename T >
Vector < RuleOrListOfDeclarations > parse_a_blocks_contents ( TokenStream < T > & ) ;
2022-03-30 11:48:54 +01:00
// "Parse a rule" is intended for use by the CSSStyleSheet#insertRule method, and similar functions which might exist, which parse text into a single rule.
2021-07-30 17:06:48 +01:00
template < typename T >
2024-10-11 11:17:10 +01:00
Optional < Rule > parse_a_rule ( TokenStream < T > & ) ;
2022-03-30 11:48:54 +01:00
2022-03-30 12:05:16 +01:00
// "Parse a declaration" is used in @supports conditions. [CSS3-CONDITIONAL]
2021-07-30 17:06:48 +01:00
template < typename T >
2022-03-31 14:36:12 +01:00
Optional < Declaration > parse_a_declaration ( TokenStream < T > & ) ;
2022-03-30 12:23:07 +01:00
2022-03-30 12:32:42 +01:00
// "Parse a component value" is for things that need to consume a single value, like the parsing rules for attr().
2021-07-30 17:06:48 +01:00
template < typename T >
2022-03-31 11:43:07 +01:00
Optional < ComponentValue > parse_a_component_value ( TokenStream < T > & ) ;
2022-03-30 12:39:36 +01:00
2024-10-11 11:17:10 +01:00
// "Parse a list of component values" is for the contents of presentational attributes, which parse text into a single declaration’ s value,
// or for parsing a stand-alone selector [SELECT] or list of Media Queries [MEDIAQ], as in Selectors API or the media HTML attribute.
2021-07-30 17:06:48 +01:00
template < typename T >
2022-03-31 11:43:07 +01:00
Vector < ComponentValue > parse_a_list_of_component_values ( TokenStream < T > & ) ;
2022-03-30 12:39:36 +01:00
2021-07-30 17:06:48 +01:00
template < typename T >
2022-03-31 11:43:07 +01:00
Vector < Vector < ComponentValue > > parse_a_comma_separated_list_of_component_values ( TokenStream < T > & ) ;
2022-03-17 19:29:40 +00:00
enum class SelectorType {
Standalone ,
Relative
} ;
2021-07-03 15:40:06 +01:00
template < typename T >
2022-04-27 11:04:16 +01:00
ParseErrorOr < SelectorList > parse_a_selector_list ( TokenStream < T > & , SelectorType , SelectorParsingMode = SelectorParsingMode : : Standard ) ;
2022-03-17 19:29:40 +00:00
2025-05-16 11:37:53 +01:00
template < typename T >
ParseErrorOr < PageSelectorList > parse_a_page_selector_list ( TokenStream < T > & ) ;
2021-09-29 12:56:37 +01:00
template < typename T >
2023-03-06 14:17:01 +01:00
Vector < NonnullRefPtr < MediaQuery > > parse_a_media_query_list ( TokenStream < T > & ) ;
2021-10-08 15:54:16 +01:00
template < typename T >
RefPtr < Supports > parse_a_supports ( TokenStream < T > & ) ;
2021-03-22 17:41:47 +01:00
2022-04-27 12:03:42 +01:00
Optional < Selector : : SimpleSelector : : ANPlusBPattern > parse_a_n_plus_b_pattern ( TokenStream < ComponentValue > & ) ;
2021-03-22 17:41:47 +01:00
2024-10-11 11:17:10 +01:00
template < typename T >
[ [ nodiscard ] ] Vector < Rule > consume_a_stylesheets_contents ( TokenStream < T > & ) ;
enum class Nested {
2022-03-29 13:46:16 +01:00
No ,
2024-10-11 11:17:10 +01:00
Yes ,
2022-03-29 13:46:16 +01:00
} ;
2021-07-03 15:40:06 +01:00
template < typename T >
2024-10-11 11:17:10 +01:00
Optional < AtRule > consume_an_at_rule ( TokenStream < T > & , Nested nested = Nested : : No ) ;
struct InvalidRuleError { } ;
template < typename T >
Variant < Empty , QualifiedRule , InvalidRuleError > consume_a_qualified_rule ( TokenStream < T > & , Optional < Token : : Type > stop_token = { } , Nested = Nested : : No ) ;
2021-07-03 15:40:06 +01:00
template < typename T >
2024-10-11 11:17:10 +01:00
Vector < RuleOrListOfDeclarations > consume_a_block ( TokenStream < T > & ) ;
2021-07-03 15:40:06 +01:00
template < typename T >
2024-10-11 11:17:10 +01:00
Vector < RuleOrListOfDeclarations > consume_a_blocks_contents ( TokenStream < T > & ) ;
2021-07-03 15:40:06 +01:00
template < typename T >
2024-10-11 11:17:10 +01:00
Optional < Declaration > consume_a_declaration ( TokenStream < T > & , Nested = Nested : : No ) ;
2022-03-30 16:44:13 +01:00
template < typename T >
2024-10-11 11:17:10 +01:00
void consume_the_remnants_of_a_bad_declaration ( TokenStream < T > & , Nested ) ;
2021-07-03 15:40:06 +01:00
template < typename T >
2024-10-11 11:17:10 +01:00
[ [ nodiscard ] ] Vector < ComponentValue > consume_a_list_of_component_values ( TokenStream < T > & , Optional < Token : : Type > stop_token = { } , Nested = Nested : : No ) ;
2021-07-03 15:40:06 +01:00
template < typename T >
2022-03-31 11:43:07 +01:00
[ [ nodiscard ] ] ComponentValue consume_a_component_value ( TokenStream < T > & ) ;
2021-07-03 15:40:06 +01:00
template < typename T >
2024-11-30 18:31:04 +01:00
void consume_a_component_value_and_do_nothing ( TokenStream < T > & ) ;
2025-02-06 14:08:26 +00:00
SimpleBlock consume_a_simple_block ( TokenStream < Token > & ) ;
void consume_a_simple_block_and_do_nothing ( TokenStream < Token > & ) ;
Function consume_a_function ( TokenStream < Token > & ) ;
void consume_a_function_and_do_nothing ( TokenStream < Token > & ) ;
2024-10-11 11:17:10 +01:00
// TODO: consume_a_unicode_range_value()
2021-03-22 17:41:47 +01:00
2025-03-14 10:31:27 +00:00
OwnPtr < GeneralEnclosed > parse_general_enclosed ( TokenStream < ComponentValue > & , MatchResult ) ;
2021-10-08 15:54:16 +01:00
2024-09-03 13:18:18 +01:00
enum class AllowBlankLayerName {
No ,
Yes ,
} ;
Optional < FlyString > parse_layer_name ( TokenStream < ComponentValue > & , AllowBlankLayerName ) ;
2024-11-01 14:46:35 +00:00
bool is_valid_in_the_current_context ( Declaration const & ) const ;
bool is_valid_in_the_current_context ( AtRule const & ) const ;
bool is_valid_in_the_current_context ( QualifiedRule const & ) const ;
2024-11-15 04:01:23 +13:00
GC : : Ptr < CSSRule > convert_to_rule ( Rule const & , Nested ) ;
GC : : Ptr < CSSStyleRule > convert_to_style_rule ( QualifiedRule const & , Nested ) ;
GC : : Ptr < CSSFontFaceRule > convert_to_font_face_rule ( AtRule const & ) ;
GC : : Ptr < CSSKeyframesRule > convert_to_keyframes_rule ( AtRule const & ) ;
GC : : Ptr < CSSImportRule > convert_to_import_rule ( AtRule const & ) ;
GC : : Ptr < CSSRule > convert_to_layer_rule ( AtRule const & , Nested ) ;
2025-05-15 11:48:56 +01:00
GC : : Ptr < CSSMarginRule > convert_to_margin_rule ( AtRule const & ) ;
2024-11-15 04:01:23 +13:00
GC : : Ptr < CSSMediaRule > convert_to_media_rule ( AtRule const & , Nested ) ;
GC : : Ptr < CSSNamespaceRule > convert_to_namespace_rule ( AtRule const & ) ;
2025-05-13 12:17:41 +01:00
GC : : Ptr < CSSPageRule > convert_to_page_rule ( AtRule const & rule ) ;
2024-11-15 04:01:23 +13:00
GC : : Ptr < CSSPropertyRule > convert_to_property_rule ( AtRule const & rule ) ;
2025-05-13 12:17:41 +01:00
GC : : Ptr < CSSSupportsRule > convert_to_supports_rule ( AtRule const & , Nested ) ;
2024-10-11 11:17:10 +01:00
2025-03-18 13:41:46 +00:00
GC : : Ref < CSSStyleProperties > convert_to_style_declaration ( Vector < Declaration > const & ) ;
2022-03-31 14:36:12 +01:00
Optional < StyleProperty > convert_to_style_property ( Declaration const & ) ;
2021-07-09 16:34:29 +01:00
2025-04-02 17:05:48 +01:00
Optional < Descriptor > convert_to_descriptor ( AtRuleID , Declaration const & ) ;
2022-03-31 11:43:07 +01:00
Optional < Dimension > parse_dimension ( ComponentValue const & ) ;
2023-12-28 12:43:38 +00:00
Optional < AngleOrCalculated > parse_angle ( TokenStream < ComponentValue > & ) ;
Optional < AnglePercentage > parse_angle_percentage ( TokenStream < ComponentValue > & ) ;
Optional < FlexOrCalculated > parse_flex ( TokenStream < ComponentValue > & ) ;
Optional < FrequencyOrCalculated > parse_frequency ( TokenStream < ComponentValue > & ) ;
Optional < FrequencyPercentage > parse_frequency_percentage ( TokenStream < ComponentValue > & ) ;
Optional < IntegerOrCalculated > parse_integer ( TokenStream < ComponentValue > & ) ;
Optional < LengthOrCalculated > parse_length ( TokenStream < ComponentValue > & ) ;
Optional < LengthPercentage > parse_length_percentage ( TokenStream < ComponentValue > & ) ;
Optional < NumberOrCalculated > parse_number ( TokenStream < ComponentValue > & ) ;
2024-10-31 12:29:03 +11:00
Optional < NumberPercentage > parse_number_percentage ( TokenStream < ComponentValue > & ) ;
2023-12-28 12:43:38 +00:00
Optional < ResolutionOrCalculated > parse_resolution ( TokenStream < ComponentValue > & ) ;
Optional < TimeOrCalculated > parse_time ( TokenStream < ComponentValue > & ) ;
Optional < TimePercentage > parse_time_percentage ( TokenStream < ComponentValue > & ) ;
2023-12-30 17:06:14 +00:00
Optional < LengthOrCalculated > parse_source_size_value ( TokenStream < ComponentValue > & ) ;
2022-03-31 11:43:07 +01:00
Optional < Ratio > parse_ratio ( TokenStream < ComponentValue > & ) ;
2023-12-09 23:30:01 +01:00
Optional < Gfx : : UnicodeRange > parse_unicode_range ( TokenStream < ComponentValue > & ) ;
Optional < Gfx : : UnicodeRange > parse_unicode_range ( StringView ) ;
2024-05-09 14:02:52 -06:00
Vector < Gfx : : UnicodeRange > parse_unicode_ranges ( TokenStream < ComponentValue > & ) ;
2025-04-15 15:18:27 -06:00
RefPtr < UnicodeRangeStyleValue const > parse_unicode_range_value ( TokenStream < ComponentValue > & ) ;
2022-10-30 13:27:57 +01:00
Optional < GridSize > parse_grid_size ( ComponentValue const & ) ;
2025-02-26 18:16:36 +01:00
Optional < GridFitContent > parse_grid_fit_content ( Vector < ComponentValue > const & ) ;
2022-10-30 13:27:57 +01:00
Optional < GridMinMax > parse_min_max ( Vector < ComponentValue > const & ) ;
Optional < GridRepeat > parse_repeat ( Vector < ComponentValue > const & ) ;
Optional < ExplicitGridTrack > parse_track_sizing_function ( ComponentValue const & ) ;
2021-10-29 08:38:50 -04:00
2025-04-08 14:33:01 +01:00
Optional < URL > parse_url_function ( TokenStream < ComponentValue > & ) ;
2025-04-29 15:32:46 +01:00
RefPtr < URLStyleValue const > parse_url_value ( TokenStream < ComponentValue > & ) ;
2022-03-31 11:43:07 +01:00
2024-10-27 11:58:52 +11:00
Optional < ShapeRadius > parse_shape_radius ( TokenStream < ComponentValue > & ) ;
2025-04-15 15:18:27 -06:00
RefPtr < CSSStyleValue const > parse_basic_shape_value ( TokenStream < ComponentValue > & ) ;
2024-05-26 00:20:09 +01:00
2025-04-15 15:18:27 -06:00
RefPtr < FitContentStyleValue const > parse_fit_content_value ( TokenStream < ComponentValue > & ) ;
2025-02-26 18:16:36 +01:00
2023-12-27 11:48:36 +00:00
template < typename TElement >
2025-01-06 16:30:33 +00:00
Optional < Vector < TElement > > parse_color_stop_list ( TokenStream < ComponentValue > & tokens , auto parse_position ) ;
2022-11-08 21:33:00 +01:00
Optional < Vector < LinearColorStopListElement > > parse_linear_color_stop_list ( TokenStream < ComponentValue > & ) ;
Optional < Vector < AngularColorStopListElement > > parse_angular_color_stop_list ( TokenStream < ComponentValue > & ) ;
2025-02-19 21:02:12 +11:00
Optional < InterpolationMethod > parse_interpolation_method ( TokenStream < ComponentValue > & ) ;
2022-11-08 21:33:00 +01:00
2025-04-15 15:18:27 -06:00
RefPtr < LinearGradientStyleValue const > parse_linear_gradient_function ( TokenStream < ComponentValue > & ) ;
RefPtr < ConicGradientStyleValue const > parse_conic_gradient_function ( TokenStream < ComponentValue > & ) ;
RefPtr < RadialGradientStyleValue const > parse_radial_gradient_function ( TokenStream < ComponentValue > & ) ;
2022-07-12 00:15:05 +01:00
2025-04-15 15:18:27 -06:00
ParseErrorOr < NonnullRefPtr < CSSStyleValue const > > parse_css_value ( PropertyID , TokenStream < ComponentValue > & , Optional < String > original_source_text = { } ) ;
ParseErrorOr < NonnullRefPtr < CSSStyleValue const > > parse_descriptor_value ( AtRuleID , DescriptorID , TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_css_value_for_property ( PropertyID , TokenStream < ComponentValue > & ) ;
2023-05-17 17:23:42 +01:00
struct PropertyAndValue {
PropertyID property ;
2025-04-15 15:18:27 -06:00
RefPtr < CSSStyleValue const > style_value ;
2023-05-17 17:23:42 +01:00
} ;
2023-08-19 15:26:57 +01:00
Optional < PropertyAndValue > parse_css_value_for_properties ( ReadonlySpan < PropertyID > , TokenStream < ComponentValue > & ) ;
2025-04-15 15:18:27 -06:00
RefPtr < CSSStyleValue const > parse_builtin_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_calculated_value ( ComponentValue const & ) ;
2025-03-24 13:44:05 +00:00
Optional < FlyString > parse_custom_ident ( TokenStream < ComponentValue > & , ReadonlySpan < StringView > blacklist ) ;
2025-04-15 15:18:27 -06:00
RefPtr < CustomIdentStyleValue const > parse_custom_ident_value ( TokenStream < ComponentValue > & , ReadonlySpan < StringView > blacklist ) ;
2023-07-13 14:59:31 +01:00
// NOTE: Implemented in generated code. (GenerateCSSMathFunctions.cpp)
2025-04-15 15:21:37 -06:00
RefPtr < CalculationNode const > parse_math_function ( Function const & , CalculationContext const & ) ;
RefPtr < CalculationNode const > parse_a_calc_function_node ( Function const & , CalculationContext const & ) ;
2025-04-15 15:18:27 -06:00
RefPtr < CSSStyleValue const > parse_keyword_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_hue_none_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_solidus_and_alpha_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_rgb_color_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_hsl_color_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_hwb_color_value ( TokenStream < ComponentValue > & ) ;
Optional < Array < RefPtr < CSSStyleValue const > , 4 > > parse_lab_like_color_value ( TokenStream < ComponentValue > & , StringView ) ;
RefPtr < CSSStyleValue const > parse_lab_color_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_oklab_color_value ( TokenStream < ComponentValue > & ) ;
Optional < Array < RefPtr < CSSStyleValue const > , 4 > > parse_lch_like_color_value ( TokenStream < ComponentValue > & , StringView ) ;
RefPtr < CSSStyleValue const > parse_lch_color_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_oklch_color_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_color_function ( TokenStream < ComponentValue > & ) ;
2025-04-21 19:03:46 +01:00
RefPtr < CSSStyleValue const > parse_color_mix_function ( TokenStream < ComponentValue > & ) ;
2025-04-15 15:18:27 -06:00
RefPtr < CSSStyleValue const > parse_light_dark_color_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_color_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_color_scheme_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_counter_value ( TokenStream < ComponentValue > & ) ;
2024-07-24 15:47:11 +01:00
enum class AllowReversed {
No ,
Yes ,
} ;
2025-04-15 15:18:27 -06:00
RefPtr < CSSStyleValue const > parse_counter_definitions_value ( TokenStream < ComponentValue > & , AllowReversed , i32 default_value_if_not_reversed ) ;
RefPtr < CSSStyleValue const > parse_rect_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_ratio_value ( TokenStream < ComponentValue > & ) ;
RefPtr < StringStyleValue const > parse_string_value ( TokenStream < ComponentValue > & ) ;
RefPtr < AbstractImageStyleValue const > parse_image_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_paint_value ( TokenStream < ComponentValue > & ) ;
2023-11-20 15:33:21 +00:00
enum class PositionParsingMode {
Normal ,
BackgroundPosition ,
} ;
2025-04-15 15:18:27 -06:00
RefPtr < PositionStyleValue const > parse_position_value ( TokenStream < ComponentValue > & , PositionParsingMode = PositionParsingMode : : Normal ) ;
RefPtr < CSSStyleValue const > parse_filter_value_list_value ( TokenStream < ComponentValue > & ) ;
2025-05-03 21:05:11 +02:00
RefPtr < CSSStyleValue const > parse_contain_value ( TokenStream < ComponentValue > & ) ;
2025-04-15 15:18:27 -06:00
RefPtr < StringStyleValue const > parse_opentype_tag_value ( TokenStream < ComponentValue > & ) ;
RefPtr < FontSourceStyleValue const > parse_font_source_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_angle_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_angle_percentage_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_flex_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_frequency_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_frequency_percentage_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_integer_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_length_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_length_percentage_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_number_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_number_percentage_value ( TokenStream < ComponentValue > & tokens ) ;
RefPtr < CSSStyleValue const > parse_number_percentage_none_value ( TokenStream < ComponentValue > & tokens ) ;
RefPtr < CSSStyleValue const > parse_percentage_value ( TokenStream < ComponentValue > & tokens ) ;
RefPtr < CSSStyleValue const > parse_resolution_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_time_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_time_percentage_value ( TokenStream < ComponentValue > & ) ;
using ParseFunction = AK : : Function < RefPtr < CSSStyleValue const > ( TokenStream < ComponentValue > & ) > ;
RefPtr < CSSStyleValue const > parse_comma_separated_value_list ( TokenStream < ComponentValue > & , ParseFunction ) ;
RefPtr < CSSStyleValue const > parse_simple_comma_separated_value_list ( PropertyID , TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_all_as_single_keyword_value ( TokenStream < ComponentValue > & , Keyword ) ;
RefPtr < CSSStyleValue const > parse_aspect_ratio_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_background_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_single_background_position_x_or_y_value ( TokenStream < ComponentValue > & , PropertyID ) ;
RefPtr < CSSStyleValue const > parse_single_background_repeat_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_single_background_size_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_border_value ( PropertyID , TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_border_radius_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_border_radius_shorthand_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_columns_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_content_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_counter_increment_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_counter_reset_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_counter_set_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_cursor_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_display_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_flex_shorthand_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_flex_flow_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_font_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_family_name_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_font_family_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_font_language_override_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_font_feature_settings_value ( TokenStream < ComponentValue > & ) ;
2025-05-02 13:55:58 +01:00
RefPtr < CSSStyleValue const > parse_font_style_value ( TokenStream < ComponentValue > & ) ;
2025-04-15 15:18:27 -06:00
RefPtr < CSSStyleValue const > parse_font_variation_settings_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_font_variant ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_font_variant_alternates_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_font_variant_east_asian_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_font_variant_emoji ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_font_variant_ligatures_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_font_variant_numeric_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_list_style_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_math_depth_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_overflow_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_place_content_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_place_items_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_place_self_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_quotes_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_scrollbar_gutter_value ( TokenStream < ComponentValue > & ) ;
2022-03-23 16:59:44 +00:00
enum class AllowInsetKeyword {
No ,
Yes ,
} ;
2025-04-15 15:18:27 -06:00
RefPtr < CSSStyleValue const > parse_shadow_value ( TokenStream < ComponentValue > & , AllowInsetKeyword ) ;
RefPtr < CSSStyleValue const > parse_single_shadow_value ( TokenStream < ComponentValue > & , AllowInsetKeyword ) ;
RefPtr < CSSStyleValue const > parse_text_decoration_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_text_decoration_line_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_rotate_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_stroke_dasharray_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_easing_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_transform_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_transform_origin_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_transition_value ( TokenStream < ComponentValue > & ) ;
2025-04-09 07:55:06 +01:00
RefPtr < CSSStyleValue const > parse_transition_property_value ( TokenStream < ComponentValue > & ) ;
2025-04-15 15:18:27 -06:00
RefPtr < CSSStyleValue const > parse_translate_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_scale_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_grid_track_size_list ( TokenStream < ComponentValue > & , bool allow_separate_line_name_blocks = false ) ;
RefPtr < CSSStyleValue const > parse_grid_auto_track_sizes ( TokenStream < ComponentValue > & ) ;
RefPtr < GridAutoFlowStyleValue const > parse_grid_auto_flow_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_grid_track_size_list_shorthand_value ( PropertyID , TokenStream < ComponentValue > & ) ;
RefPtr < GridTrackPlacementStyleValue const > parse_grid_track_placement ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_grid_track_placement_shorthand_value ( PropertyID , TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_grid_template_areas_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_grid_area_shorthand_value ( TokenStream < ComponentValue > & ) ;
RefPtr < CSSStyleValue const > parse_grid_shorthand_value ( TokenStream < ComponentValue > & ) ;
2025-03-16 18:44:49 -07:00
RefPtr < CSSStyleValue const > parse_touch_action_value ( TokenStream < ComponentValue > & ) ;
2025-05-22 00:31:24 +12:00
RefPtr < CSSStyleValue const > parse_white_space_shorthand ( TokenStream < ComponentValue > & ) ;
2025-05-18 02:21:42 +12:00
RefPtr < CSSStyleValue const > parse_white_space_trim_value ( TokenStream < ComponentValue > & ) ;
2021-07-14 16:20:06 +01:00
2025-04-17 12:25:08 +01:00
RefPtr < CSSStyleValue const > parse_list_of_time_values ( PropertyID , TokenStream < ComponentValue > & ) ;
2025-04-15 15:21:37 -06:00
RefPtr < CalculationNode const > convert_to_calculation_node ( CalcParsing : : Node const & , CalculationContext const & ) ;
RefPtr < CalculationNode const > parse_a_calculation ( Vector < ComponentValue > const & , CalculationContext const & ) ;
2022-03-31 11:43:07 +01:00
2022-04-27 11:04:16 +01:00
ParseErrorOr < NonnullRefPtr < Selector > > parse_complex_selector ( TokenStream < ComponentValue > & , SelectorType ) ;
ParseErrorOr < Optional < Selector : : CompoundSelector > > parse_compound_selector ( TokenStream < ComponentValue > & ) ;
2022-03-31 11:43:07 +01:00
Optional < Selector : : Combinator > parse_selector_combinator ( TokenStream < ComponentValue > & ) ;
2023-08-07 16:48:44 +01:00
enum class AllowWildcardName {
No ,
Yes ,
} ;
Optional < Selector : : SimpleSelector : : QualifiedName > parse_selector_qualified_name ( TokenStream < ComponentValue > & , AllowWildcardName ) ;
2022-04-27 11:04:16 +01:00
ParseErrorOr < Selector : : SimpleSelector > parse_attribute_simple_selector ( ComponentValue const & ) ;
ParseErrorOr < Selector : : SimpleSelector > parse_pseudo_simple_selector ( TokenStream < ComponentValue > & ) ;
ParseErrorOr < Optional < Selector : : SimpleSelector > > parse_simple_selector ( TokenStream < ComponentValue > & ) ;
2022-03-31 11:43:07 +01:00
NonnullRefPtr < MediaQuery > parse_media_query ( TokenStream < ComponentValue > & ) ;
2025-03-14 10:31:27 +00:00
OwnPtr < BooleanExpression > parse_media_condition ( TokenStream < ComponentValue > & ) ;
OwnPtr < MediaFeature > parse_media_feature ( TokenStream < ComponentValue > & ) ;
2022-03-31 11:43:07 +01:00
Optional < MediaQuery : : MediaType > parse_media_type ( TokenStream < ComponentValue > & ) ;
Optional < MediaFeatureValue > parse_media_feature_value ( MediaFeatureID , TokenStream < ComponentValue > & ) ;
2025-03-14 10:31:27 +00:00
using ParseTest = AK : : Function < OwnPtr < BooleanExpression > ( TokenStream < ComponentValue > & ) > const & ;
OwnPtr < BooleanExpression > parse_boolean_expression ( TokenStream < ComponentValue > & , MatchResult result_for_general_enclosed , ParseTest parse_test ) ;
OwnPtr < BooleanExpression > parse_boolean_expression_group ( TokenStream < ComponentValue > & , MatchResult result_for_general_enclosed , ParseTest parse_test ) ;
OwnPtr < BooleanExpression > parse_supports_feature ( TokenStream < ComponentValue > & ) ;
2021-10-08 15:54:16 +01:00
2025-04-15 15:18:27 -06:00
NonnullRefPtr < CSSStyleValue const > resolve_unresolved_style_value ( DOM : : Element & , Optional < PseudoElement > , PropertyID , UnresolvedStyleValue const & ) ;
2025-03-20 16:56:46 +00:00
bool expand_variables ( DOM : : Element & , Optional < PseudoElement > , FlyString const & property_name , HashMap < FlyString , NonnullRefPtr < PropertyDependencyNode > > & dependencies , TokenStream < ComponentValue > & source , Vector < ComponentValue > & dest ) ;
2024-03-15 20:32:45 +01:00
bool expand_unresolved_values ( DOM : : Element & , FlyString const & property_name , TokenStream < ComponentValue > & source , Vector < ComponentValue > & dest ) ;
bool substitute_attr_function ( DOM : : Element & element , FlyString const & property_name , Function const & attr_function , Vector < ComponentValue > & dest ) ;
2023-09-04 11:16:49 +01:00
2021-11-11 00:55:02 +01:00
static bool has_ignored_vendor_prefix ( StringView ) ;
2021-09-12 16:49:09 +01:00
2024-10-11 11:17:10 +01:00
void extract_property ( Declaration const & , Parser : : PropertiesAndCustomProperties & ) ;
2022-03-29 16:01:38 +02:00
2025-02-06 14:08:26 +00:00
DOM : : Document const * document ( ) const ;
HTML : : Window const * window ( ) const ;
JS : : Realm & realm ( ) const ;
bool in_quirks_mode ( ) const ;
bool is_parsing_svg_presentation_attribute ( ) const ;
GC : : Ptr < DOM : : Document const > m_document ;
GC : : Ptr < JS : : Realm > m_realm ;
ParsingMode m_parsing_mode { ParsingMode : : Normal } ;
2021-07-02 20:25:13 +01:00
2021-03-22 17:41:47 +01:00
Vector < Token > m_tokens ;
2021-07-03 14:00:41 +01:00
TokenStream < Token > m_token_stream ;
2024-11-01 14:46:35 +00:00
2025-01-06 12:48:17 +00:00
struct FunctionContext {
StringView name ;
} ;
2025-04-02 17:05:48 +01:00
struct DescriptorContext {
AtRuleID at_rule ;
DescriptorID descriptor ;
} ;
using ValueParsingContext = Variant < PropertyID , FunctionContext , DescriptorContext > ;
2025-01-06 12:48:17 +00:00
Vector < ValueParsingContext > m_value_context ;
auto push_temporary_value_parsing_context ( ValueParsingContext & & context )
{
m_value_context . append ( context ) ;
return ScopeGuard { [ & ] { m_value_context . take_last ( ) ; } } ;
}
bool context_allows_quirky_length ( ) const ;
2025-04-14 17:10:20 +01:00
Vector < RuleContext > m_rule_context ;
2024-11-14 12:18:10 +00:00
Vector < PseudoClass > m_pseudo_class_context ; // Stack of pseudo-class functions we're currently inside
2021-03-22 17:41:47 +01:00
} ;
}
2021-07-30 17:48:23 +01:00
namespace Web {
2025-04-14 14:04:36 +01:00
GC : : Ref < CSS : : CSSStyleSheet > parse_css_stylesheet ( CSS : : Parser : : ParsingParams const & , StringView , Optional < : : URL : : URL > location = { } , Vector < NonnullRefPtr < CSS : : MediaQuery > > = { } ) ;
2025-04-14 15:26:43 +01:00
CSS : : Parser : : Parser : : PropertiesAndCustomProperties parse_css_property_declaration_block ( CSS : : Parser : : ParsingParams const & , StringView ) ;
Vector < CSS : : Descriptor > parse_css_descriptor_declaration_block ( CSS : : Parser : : ParsingParams const & , CSS : : AtRuleID , StringView ) ;
2025-04-15 15:18:27 -06:00
RefPtr < CSS : : CSSStyleValue const > parse_css_value ( CSS : : Parser : : ParsingParams const & , StringView , CSS : : PropertyID property_id = CSS : : PropertyID : : Invalid ) ;
RefPtr < CSS : : CSSStyleValue const > parse_css_descriptor ( CSS : : Parser : : ParsingParams const & , CSS : : AtRuleID , CSS : : DescriptorID , StringView ) ;
2025-02-06 14:08:26 +00:00
Optional < CSS : : SelectorList > parse_selector ( CSS : : Parser : : ParsingParams const & , StringView ) ;
Optional < CSS : : SelectorList > parse_selector_for_nested_style_rule ( CSS : : Parser : : ParsingParams const & , StringView ) ;
2025-05-16 11:37:53 +01:00
Optional < CSS : : PageSelectorList > parse_page_selector_list ( CSS : : Parser : : ParsingParams const & , StringView ) ;
2025-03-20 16:56:46 +00:00
Optional < CSS : : Selector : : PseudoElementSelector > parse_pseudo_element_selector ( CSS : : Parser : : ParsingParams const & , StringView ) ;
2025-02-06 14:08:26 +00:00
CSS : : CSSRule * parse_css_rule ( CSS : : Parser : : ParsingParams const & , StringView ) ;
RefPtr < CSS : : MediaQuery > parse_media_query ( CSS : : Parser : : ParsingParams const & , StringView ) ;
Vector < NonnullRefPtr < CSS : : MediaQuery > > parse_media_query_list ( CSS : : Parser : : ParsingParams const & , StringView ) ;
RefPtr < CSS : : Supports > parse_css_supports ( CSS : : Parser : : ParsingParams const & , StringView ) ;
2025-03-25 10:04:42 +00:00
GC : : Ref < JS : : Realm > internal_css_realm ( ) ;
2021-07-30 17:48:23 +01:00
}