2021-03-22 13:41:47 -03:00
/*
2021-04-28 17:46:44 -03:00
* Copyright ( c ) 2020 - 2021 , the SerenityOS developers .
2024-07-19 08:07:51 -03:00
* Copyright ( c ) 2021 - 2024 , Sam Atkins < atkinssj @ serenityos . org >
2021-03-22 13:41:47 -03:00
*
2021-04-22 05:24:48 -03:00
* SPDX - License - Identifier : BSD - 2 - Clause
2021-03-22 13:41:47 -03:00
*/
# pragma once
2022-04-27 07:04:16 -03:00
# include <AK/Error.h>
2021-07-12 13:30:40 -03:00
# include <AK/RefPtr.h>
2021-03-22 13:41:47 -03:00
# include <AK/Vector.h>
2023-12-09 19:30:01 -03:00
# include <LibGfx/Font/UnicodeRange.h>
2021-10-08 11:54:16 -03:00
# include <LibWeb/CSS/CSSStyleDeclaration.h>
2021-11-22 14:27:09 -03:00
# include <LibWeb/CSS/GeneralEnclosed.h>
2021-09-29 08:56:37 -03:00
# include <LibWeb/CSS/MediaQuery.h>
2024-05-07 12:18:37 -03:00
# include <LibWeb/CSS/ParsedFontFace.h>
2022-04-12 10:08:26 -03:00
# include <LibWeb/CSS/Parser/Block.h>
2022-03-31 07:43:07 -03:00
# include <LibWeb/CSS/Parser/ComponentValue.h>
2022-03-31 10:36:12 -03:00
# include <LibWeb/CSS/Parser/Declaration.h>
2021-03-22 13:41:47 -03:00
# include <LibWeb/CSS/Parser/DeclarationOrAtRule.h>
2023-08-17 11:43:30 -03:00
# include <LibWeb/CSS/Parser/Dimension.h>
2022-04-12 09:35:55 -03:00
# include <LibWeb/CSS/Parser/Function.h>
2023-08-17 11:47:00 -03:00
# include <LibWeb/CSS/Parser/ParsingContext.h>
2022-04-12 15:05:13 -03:00
# include <LibWeb/CSS/Parser/Rule.h>
2022-09-27 12:05:57 -03:00
# include <LibWeb/CSS/Parser/TokenStream.h>
2021-03-22 13:41:47 -03:00
# include <LibWeb/CSS/Parser/Tokenizer.h>
2023-03-25 11:11:11 -03:00
# include <LibWeb/CSS/PropertyID.h>
2022-03-06 10:48:32 -03:00
# include <LibWeb/CSS/Ratio.h>
2021-03-22 13:41:47 -03:00
# include <LibWeb/CSS/Selector.h>
2021-07-18 13:12:23 -03:00
# include <LibWeb/CSS/StyleValue.h>
2023-03-24 13:42:50 -03:00
# include <LibWeb/CSS/StyleValues/AbstractImageStyleValue.h>
2023-03-30 13:34:14 -03:00
# include <LibWeb/CSS/StyleValues/CalculatedStyleValue.h>
2021-10-08 11:54:16 -03:00
# include <LibWeb/CSS/Supports.h>
2022-04-12 07:32:18 -03:00
# include <LibWeb/Forward.h>
2021-03-22 13:41:47 -03:00
2022-04-12 08:00:07 -03:00
namespace Web : : CSS : : Parser {
2021-03-22 13:41:47 -03:00
2023-09-04 07:16:49 -03:00
class PropertyDependencyNode ;
2021-03-22 13:41:47 -03:00
class Parser {
public :
2023-03-06 14:17:08 -03:00
static ErrorOr < Parser > create ( ParsingContext const & , StringView input , StringView encoding = " utf-8 " sv ) ;
Parser ( Parser & & ) ;
2021-03-22 13:41:47 -03:00
2024-03-18 00:22:27 -03:00
CSSStyleSheet * parse_as_css_stylesheet ( Optional < URL : : URL > location ) ;
2022-08-07 11:21:26 -03:00
ElementInlineCSSStyleDeclaration * parse_as_style_attribute ( DOM : : Element & ) ;
2022-08-07 10:46:44 -03:00
CSSRule * parse_as_css_rule ( ) ;
2022-03-30 08:05:16 -03:00
Optional < StyleProperty > parse_as_supports_condition ( ) ;
2022-03-28 12:37:54 -03:00
2022-03-17 12:14:01 -03: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 08:34:25 -03:00
// Contrary to the name, these parse a comma-separated list of selectors, according to the spec.
2022-03-17 12:14:01 -03:00
Optional < SelectorList > parse_as_selector ( SelectorParsingMode = SelectorParsingMode : : Standard ) ;
Optional < SelectorList > parse_as_relative_selector ( SelectorParsingMode = SelectorParsingMode : : Standard ) ;
2021-07-30 13:06:48 -03:00
2023-03-06 10:17:01 -03:00
Vector < NonnullRefPtr < MediaQuery > > parse_as_media_query_list ( ) ;
2021-09-29 08:56:37 -03:00
RefPtr < MediaQuery > parse_as_media_query ( ) ;
2021-10-08 11:54:16 -03:00
RefPtr < Supports > parse_as_supports ( ) ;
2023-08-19 10:48:27 -03:00
RefPtr < StyleValue > parse_as_css_value ( PropertyID ) ;
2021-07-30 13:48:23 -03:00
2023-09-04 08:57:12 -03:00
Optional < ComponentValue > parse_as_component_value ( ) ;
2024-05-13 15:02:38 -03:00
Vector < ParsedFontFace : : Source > parse_as_font_face_src ( ) ;
2024-03-17 21:27:38 -03:00
static NonnullRefPtr < StyleValue > resolve_unresolved_style_value ( ParsingContext const & , DOM : : Element & , Optional < CSS : : Selector : : PseudoElement : : Type > , PropertyID , UnresolvedStyleValue const & ) ;
2021-12-03 09:32:12 -03:00
2023-07-28 10:52:06 -03:00
[ [ nodiscard ] ] LengthOrCalculated parse_as_sizes_attribute ( ) ;
2023-05-11 11:56:01 -03:00
2024-06-22 08:33:48 -03:00
// https://html.spec.whatwg.org/multipage/semantics-other.html#case-sensitivity-of-selectors
static constexpr Array case_insensitive_html_attributes = {
" accept " sv ,
" accept-charset " sv ,
" align " sv ,
" alink " sv ,
" axis " sv ,
" bgcolor " sv ,
" charset " sv ,
" checked " sv ,
" clear " sv ,
" codetype " sv ,
" color " sv ,
" compact " sv ,
" declare " sv ,
" defer " sv ,
" dir " sv ,
" direction " sv ,
" disabled " sv ,
" enctype " sv ,
" face " sv ,
" frame " sv ,
" hreflang " sv ,
" http-equiv " sv ,
" lang " sv ,
" language " sv ,
" link " sv ,
" media " sv ,
" method " sv ,
" multiple " sv ,
" nohref " sv ,
" noresize " sv ,
" noshade " sv ,
" nowrap " sv ,
" readonly " sv ,
" rel " sv ,
" rev " sv ,
" rules " sv ,
" scope " sv ,
" scrolling " sv ,
" selected " sv ,
" shape " sv ,
" target " sv ,
" text " sv ,
" type " sv ,
" valign " sv ,
" valuetype " sv ,
" vlink " sv ,
} ;
2021-07-30 13:06:48 -03:00
private :
2023-03-06 14:17:08 -03:00
Parser ( ParsingContext const & , Vector < Token > ) ;
2022-04-27 07:04:16 -03:00
enum class ParseError {
2021-09-12 13:47:58 -03:00
IncludesIgnoredVendorPrefix ,
2023-05-02 09:03:51 -03:00
InternalError ,
2021-09-12 13:42:11 -03:00
SyntaxError ,
} ;
2022-04-27 07:04:16 -03:00
template < typename T >
using ParseErrorOr = ErrorOr < T , ParseError > ;
2021-09-12 13:42:11 -03:00
2022-03-29 10:13:39 -03:00
// "Parse a stylesheet" is intended to be the normal parser entry point, for parsing stylesheets.
struct ParsedStyleSheet {
2024-03-18 00:22:27 -03:00
Optional < URL : : URL > location ;
2023-03-06 10:17:01 -03:00
Vector < NonnullRefPtr < Rule > > rules ;
2022-03-29 10:13:39 -03:00
} ;
2021-07-30 13:06:48 -03:00
template < typename T >
2024-03-18 00:22:27 -03:00
ParsedStyleSheet parse_a_stylesheet ( TokenStream < T > & , Optional < URL : : URL > location ) ;
2022-03-29 10:13:39 -03:00
2022-03-30 07:36:38 -03:00
// "Parse a list of rules" is intended for the content of at-rules such as @media. It differs from "Parse a stylesheet" in the handling of <CDO-token> and <CDC-token>.
2021-07-30 13:06:48 -03:00
template < typename T >
2023-03-06 10:17:01 -03:00
Vector < NonnullRefPtr < Rule > > parse_a_list_of_rules ( TokenStream < T > & ) ;
2022-03-30 07:48:54 -03: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 13:06:48 -03:00
template < typename T >
2022-04-12 15:05:13 -03:00
RefPtr < Rule > parse_a_rule ( TokenStream < T > & ) ;
2022-03-30 07:48:54 -03:00
2022-03-30 08:05:16 -03:00
// "Parse a declaration" is used in @supports conditions. [CSS3-CONDITIONAL]
2021-07-30 13:06:48 -03:00
template < typename T >
2022-03-31 10:36:12 -03:00
Optional < Declaration > parse_a_declaration ( TokenStream < T > & ) ;
2022-03-30 08:23:07 -03:00
2022-03-30 12:44:13 -03:00
template < typename T >
Vector < DeclarationOrAtRule > parse_a_style_blocks_contents ( TokenStream < T > & ) ;
2022-03-30 08:23:07 -03:00
// "Parse a list of declarations" is for the contents of a style attribute, which parses text into the contents of a single style rule.
2021-07-30 13:06:48 -03:00
template < typename T >
2022-03-28 12:37:54 -03:00
Vector < DeclarationOrAtRule > parse_a_list_of_declarations ( TokenStream < T > & ) ;
2022-03-30 08:32:42 -03:00
// "Parse a component value" is for things that need to consume a single value, like the parsing rules for attr().
2021-07-30 13:06:48 -03:00
template < typename T >
2022-03-31 07:43:07 -03:00
Optional < ComponentValue > parse_a_component_value ( TokenStream < T > & ) ;
2022-03-30 08:39:36 -03: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 13:06:48 -03:00
template < typename T >
2022-03-31 07:43:07 -03:00
Vector < ComponentValue > parse_a_list_of_component_values ( TokenStream < T > & ) ;
2022-03-30 08:39:36 -03:00
2021-07-30 13:06:48 -03:00
template < typename T >
2022-03-31 07:43:07 -03:00
Vector < Vector < ComponentValue > > parse_a_comma_separated_list_of_component_values ( TokenStream < T > & ) ;
2022-03-17 16:29:40 -03:00
enum class SelectorType {
Standalone ,
Relative
} ;
2021-07-03 11:40:06 -03:00
template < typename T >
2022-04-27 07:04:16 -03:00
ParseErrorOr < SelectorList > parse_a_selector_list ( TokenStream < T > & , SelectorType , SelectorParsingMode = SelectorParsingMode : : Standard ) ;
2022-03-17 16:29:40 -03:00
2021-09-29 08:56:37 -03:00
template < typename T >
2023-03-06 10:17:01 -03:00
Vector < NonnullRefPtr < MediaQuery > > parse_a_media_query_list ( TokenStream < T > & ) ;
2021-10-08 11:54:16 -03:00
template < typename T >
RefPtr < Supports > parse_a_supports ( TokenStream < T > & ) ;
2021-03-22 13:41:47 -03:00
2022-04-27 08:03:42 -03:00
Optional < Selector : : SimpleSelector : : ANPlusBPattern > parse_a_n_plus_b_pattern ( TokenStream < ComponentValue > & ) ;
2021-03-22 13:41:47 -03:00
2022-03-29 09:46:16 -03:00
enum class TopLevel {
No ,
Yes
} ;
2021-07-03 11:40:06 -03:00
template < typename T >
2023-03-06 10:17:01 -03:00
[ [ nodiscard ] ] Vector < NonnullRefPtr < Rule > > consume_a_list_of_rules ( TokenStream < T > & , TopLevel ) ;
2021-07-03 11:40:06 -03:00
template < typename T >
2022-04-12 15:05:13 -03:00
[ [ nodiscard ] ] NonnullRefPtr < Rule > consume_an_at_rule ( TokenStream < T > & ) ;
2021-07-03 11:40:06 -03:00
template < typename T >
2022-04-12 15:05:13 -03:00
RefPtr < Rule > consume_a_qualified_rule ( TokenStream < T > & ) ;
2021-07-03 11:40:06 -03:00
template < typename T >
2022-03-30 12:44:13 -03:00
[ [ nodiscard ] ] Vector < DeclarationOrAtRule > consume_a_style_blocks_contents ( TokenStream < T > & ) ;
template < typename T >
2021-07-03 11:40:06 -03:00
[ [ nodiscard ] ] Vector < DeclarationOrAtRule > consume_a_list_of_declarations ( TokenStream < T > & ) ;
template < typename T >
2022-03-31 10:36:12 -03:00
Optional < Declaration > consume_a_declaration ( TokenStream < T > & ) ;
2021-07-03 11:40:06 -03:00
template < typename T >
2022-03-31 07:43:07 -03:00
[ [ nodiscard ] ] ComponentValue consume_a_component_value ( TokenStream < T > & ) ;
2021-07-03 11:40:06 -03:00
template < typename T >
2022-04-12 10:08:26 -03:00
NonnullRefPtr < Block > consume_a_simple_block ( TokenStream < T > & ) ;
2021-07-03 11:40:06 -03:00
template < typename T >
2022-04-12 09:35:55 -03:00
NonnullRefPtr < Function > consume_a_function ( TokenStream < T > & ) ;
2021-03-22 13:41:47 -03:00
2022-03-31 07:43:07 -03:00
Optional < GeneralEnclosed > parse_general_enclosed ( TokenStream < ComponentValue > & ) ;
2021-10-08 11:54:16 -03:00
2022-08-07 10:46:44 -03:00
CSSRule * parse_font_face_rule ( TokenStream < ComponentValue > & ) ;
2024-05-13 15:02:38 -03:00
template < typename T >
Vector < ParsedFontFace : : Source > parse_font_face_src ( TokenStream < T > & ) ;
2022-03-28 16:32:28 -03:00
2022-08-07 10:46:44 -03:00
CSSRule * convert_to_rule ( NonnullRefPtr < Rule > ) ;
2023-08-17 10:56:00 -03:00
CSSMediaRule * convert_to_media_rule ( NonnullRefPtr < Rule > ) ;
2022-09-10 08:51:22 -03:00
PropertyOwningCSSStyleDeclaration * convert_to_style_declaration ( Vector < DeclarationOrAtRule > const & declarations ) ;
2022-03-31 10:36:12 -03:00
Optional < StyleProperty > convert_to_style_property ( Declaration const & ) ;
2021-07-09 12:34:29 -03:00
2022-03-31 07:43:07 -03:00
Optional < Dimension > parse_dimension ( ComponentValue const & ) ;
2023-12-28 09:43:38 -03: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 > & ) ;
Optional < ResolutionOrCalculated > parse_resolution ( TokenStream < ComponentValue > & ) ;
Optional < TimeOrCalculated > parse_time ( TokenStream < ComponentValue > & ) ;
Optional < TimePercentage > parse_time_percentage ( TokenStream < ComponentValue > & ) ;
2024-07-03 05:39:14 -03:00
Optional < Color > parse_rgb_color ( Vector < ComponentValue > const & ) ;
Optional < Color > parse_hsl_color ( Vector < ComponentValue > const & ) ;
2024-07-03 08:17:37 -03:00
Optional < Color > parse_hwb_color ( Vector < ComponentValue > const & ) ;
Optional < Color > parse_oklab_color ( Vector < ComponentValue > const & ) ;
Optional < Color > parse_oklch_color ( Vector < ComponentValue > const & ) ;
2022-03-31 07:43:07 -03:00
Optional < Color > parse_color ( ComponentValue const & ) ;
2023-12-30 14:06:14 -03:00
Optional < LengthOrCalculated > parse_source_size_value ( TokenStream < ComponentValue > & ) ;
2022-03-31 07:43:07 -03:00
Optional < Ratio > parse_ratio ( TokenStream < ComponentValue > & ) ;
2023-12-09 19:30:01 -03:00
Optional < Gfx : : UnicodeRange > parse_unicode_range ( TokenStream < ComponentValue > & ) ;
Optional < Gfx : : UnicodeRange > parse_unicode_range ( StringView ) ;
2024-05-09 17:02:52 -03:00
Vector < Gfx : : UnicodeRange > parse_unicode_ranges ( TokenStream < ComponentValue > & ) ;
2022-10-30 09:27:57 -03:00
Optional < GridSize > parse_grid_size ( ComponentValue const & ) ;
2024-07-22 17:49:52 -03:00
Optional < GridFitContent > parse_fit_content ( Vector < ComponentValue > const & ) ;
2022-10-30 09:27:57 -03: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 09:38:50 -03:00
2024-03-18 00:22:27 -03:00
Optional < URL : : URL > parse_url_function ( ComponentValue const & ) ;
2023-12-27 09:00:41 -03:00
RefPtr < StyleValue > parse_url_value ( TokenStream < ComponentValue > & ) ;
2022-03-31 07:43:07 -03:00
2024-05-25 20:20:09 -03:00
RefPtr < StyleValue > parse_basic_shape_function ( ComponentValue const & ) ;
RefPtr < StyleValue > parse_basic_shape_value ( TokenStream < ComponentValue > & ) ;
2023-12-27 08:48:36 -03:00
template < typename TElement >
Optional < Vector < TElement > > parse_color_stop_list ( TokenStream < ComponentValue > & tokens , auto is_position , auto get_position ) ;
2022-11-08 17:33:00 -03:00
Optional < Vector < LinearColorStopListElement > > parse_linear_color_stop_list ( TokenStream < ComponentValue > & ) ;
Optional < Vector < AngularColorStopListElement > > parse_angular_color_stop_list ( TokenStream < ComponentValue > & ) ;
2023-08-19 10:48:27 -03:00
RefPtr < StyleValue > parse_linear_gradient_function ( ComponentValue const & ) ;
RefPtr < StyleValue > parse_conic_gradient_function ( ComponentValue const & ) ;
RefPtr < StyleValue > parse_radial_gradient_function ( ComponentValue const & ) ;
2022-07-11 20:15:05 -03:00
2022-04-27 07:04:16 -03:00
ParseErrorOr < NonnullRefPtr < StyleValue > > parse_css_value ( PropertyID , TokenStream < ComponentValue > & ) ;
2023-08-19 10:48:27 -03:00
RefPtr < StyleValue > parse_css_value_for_property ( PropertyID , TokenStream < ComponentValue > & ) ;
2023-05-17 13:23:42 -03:00
struct PropertyAndValue {
PropertyID property ;
RefPtr < StyleValue > style_value ;
} ;
2023-08-19 11:26:57 -03:00
Optional < PropertyAndValue > parse_css_value_for_properties ( ReadonlySpan < PropertyID > , TokenStream < ComponentValue > & ) ;
2023-08-19 10:48:27 -03:00
RefPtr < StyleValue > parse_builtin_value ( ComponentValue const & ) ;
RefPtr < CalculatedStyleValue > parse_calculated_value ( ComponentValue const & ) ;
2023-07-13 10:59:31 -03:00
// NOTE: Implemented in generated code. (GenerateCSSMathFunctions.cpp)
2023-08-19 11:20:23 -03:00
OwnPtr < CalculationNode > parse_math_function ( PropertyID , Function const & ) ;
2023-08-19 10:48:27 -03:00
OwnPtr < CalculationNode > parse_a_calc_function_node ( Function const & ) ;
2024-04-21 15:08:47 -03:00
RefPtr < StyleValue > parse_dimension_value ( TokenStream < ComponentValue > & ) ;
2023-08-19 10:48:27 -03:00
RefPtr < StyleValue > parse_integer_value ( TokenStream < ComponentValue > & ) ;
RefPtr < StyleValue > parse_number_value ( TokenStream < ComponentValue > & ) ;
2024-01-08 14:51:19 -03:00
RefPtr < StyleValue > parse_number_or_percentage_value ( TokenStream < ComponentValue > & ) ;
2024-04-21 15:01:59 -03:00
RefPtr < StyleValue > parse_identifier_value ( TokenStream < ComponentValue > & ) ;
2024-04-21 14:35:50 -03:00
RefPtr < StyleValue > parse_color_value ( TokenStream < ComponentValue > & ) ;
2023-12-27 09:08:47 -03:00
RefPtr < StyleValue > parse_rect_value ( TokenStream < ComponentValue > & ) ;
2023-08-19 10:48:27 -03:00
RefPtr < StyleValue > parse_ratio_value ( TokenStream < ComponentValue > & ) ;
2024-04-21 13:41:04 -03:00
RefPtr < StyleValue > parse_string_value ( TokenStream < ComponentValue > & ) ;
2023-12-27 08:55:24 -03:00
RefPtr < StyleValue > parse_image_value ( TokenStream < ComponentValue > & ) ;
2023-08-19 10:48:27 -03:00
RefPtr < StyleValue > parse_paint_value ( TokenStream < ComponentValue > & ) ;
2023-11-20 12:33:21 -03:00
enum class PositionParsingMode {
Normal ,
BackgroundPosition ,
} ;
RefPtr < PositionStyleValue > parse_position_value ( TokenStream < ComponentValue > & , PositionParsingMode = PositionParsingMode : : Normal ) ;
2023-12-07 12:16:51 -03:00
RefPtr < StyleValue > parse_filter_value_list_value ( TokenStream < ComponentValue > & ) ;
2021-11-08 14:19:55 -03:00
template < typename ParseFunction >
2023-12-07 09:54:27 -03:00
RefPtr < StyleValue > parse_comma_separated_value_list ( TokenStream < ComponentValue > & , ParseFunction ) ;
RefPtr < StyleValue > parse_simple_comma_separated_value_list ( PropertyID , TokenStream < ComponentValue > & ) ;
2024-07-19 08:07:51 -03:00
RefPtr < StyleValue > parse_all_as_single_none_value ( TokenStream < ComponentValue > & ) ;
2023-08-19 10:48:27 -03:00
2023-12-07 12:12:30 -03:00
RefPtr < StyleValue > parse_aspect_ratio_value ( TokenStream < ComponentValue > & ) ;
2023-12-07 12:21:17 -03:00
RefPtr < StyleValue > parse_background_value ( TokenStream < ComponentValue > & ) ;
2023-08-19 10:48:27 -03:00
RefPtr < StyleValue > parse_single_background_position_x_or_y_value ( TokenStream < ComponentValue > & , PropertyID ) ;
RefPtr < StyleValue > parse_single_background_repeat_value ( TokenStream < ComponentValue > & ) ;
RefPtr < StyleValue > parse_single_background_size_value ( TokenStream < ComponentValue > & ) ;
2023-12-07 14:15:15 -03:00
RefPtr < StyleValue > parse_border_value ( PropertyID , TokenStream < ComponentValue > & ) ;
2023-12-07 09:23:51 -03:00
RefPtr < StyleValue > parse_border_radius_value ( TokenStream < ComponentValue > & ) ;
RefPtr < StyleValue > parse_border_radius_shorthand_value ( TokenStream < ComponentValue > & ) ;
2023-12-07 09:34:51 -03:00
RefPtr < StyleValue > parse_content_value ( TokenStream < ComponentValue > & ) ;
2023-12-07 09:35:03 -03:00
RefPtr < StyleValue > parse_display_value ( TokenStream < ComponentValue > & ) ;
2023-12-07 14:28:55 -03:00
RefPtr < StyleValue > parse_flex_value ( TokenStream < ComponentValue > & ) ;
2023-12-07 14:30:23 -03:00
RefPtr < StyleValue > parse_flex_flow_value ( TokenStream < ComponentValue > & ) ;
2023-12-07 14:32:33 -03:00
RefPtr < StyleValue > parse_font_value ( TokenStream < ComponentValue > & ) ;
2023-08-19 10:48:27 -03:00
RefPtr < StyleValue > parse_font_family_value ( TokenStream < ComponentValue > & ) ;
2023-12-08 14:00:58 -03:00
RefPtr < StyleValue > parse_list_style_value ( TokenStream < ComponentValue > & ) ;
2023-12-08 14:06:04 -03:00
RefPtr < StyleValue > parse_math_depth_value ( TokenStream < ComponentValue > & ) ;
2023-12-08 14:09:03 -03:00
RefPtr < StyleValue > parse_overflow_value ( TokenStream < ComponentValue > & ) ;
2023-12-08 14:21:49 -03:00
RefPtr < StyleValue > parse_place_content_value ( TokenStream < ComponentValue > & ) ;
2023-12-08 14:23:48 -03:00
RefPtr < StyleValue > parse_place_items_value ( TokenStream < ComponentValue > & ) ;
2023-12-08 14:26:19 -03:00
RefPtr < StyleValue > parse_place_self_value ( TokenStream < ComponentValue > & ) ;
2023-12-07 09:38:51 -03:00
RefPtr < StyleValue > parse_quotes_value ( TokenStream < ComponentValue > & ) ;
2024-06-26 19:19:38 -03:00
RefPtr < StyleValue > parse_scrollbar_gutter_value ( TokenStream < ComponentValue > & ) ;
2022-03-23 13:59:44 -03:00
enum class AllowInsetKeyword {
No ,
Yes ,
} ;
2023-12-07 14:26:25 -03:00
RefPtr < StyleValue > parse_shadow_value ( TokenStream < ComponentValue > & , AllowInsetKeyword ) ;
2023-08-19 10:48:27 -03:00
RefPtr < StyleValue > parse_single_shadow_value ( TokenStream < ComponentValue > & , AllowInsetKeyword ) ;
2023-12-08 14:28:41 -03:00
RefPtr < StyleValue > parse_text_decoration_value ( TokenStream < ComponentValue > & ) ;
2023-08-19 10:48:27 -03:00
RefPtr < StyleValue > parse_text_decoration_line_value ( TokenStream < ComponentValue > & ) ;
RefPtr < StyleValue > parse_easing_value ( TokenStream < ComponentValue > & ) ;
2023-12-08 14:44:57 -03:00
RefPtr < StyleValue > parse_transform_value ( TokenStream < ComponentValue > & ) ;
2023-12-26 11:40:36 -03:00
RefPtr < StyleValue > parse_transform_origin_value ( TokenStream < ComponentValue > & ) ;
2024-02-19 23:01:34 -03:00
RefPtr < StyleValue > parse_transition_value ( TokenStream < ComponentValue > & ) ;
2023-12-26 11:58:33 -03:00
RefPtr < StyleValue > parse_grid_track_size_list ( TokenStream < ComponentValue > & , bool allow_separate_line_name_blocks = false ) ;
2023-12-26 11:54:46 -03:00
RefPtr < StyleValue > parse_grid_auto_track_sizes ( TokenStream < ComponentValue > & ) ;
2023-12-07 14:42:43 -03:00
RefPtr < GridAutoFlowStyleValue > parse_grid_auto_flow_value ( TokenStream < ComponentValue > & ) ;
2023-12-26 12:14:15 -03:00
RefPtr < StyleValue > parse_grid_track_size_list_shorthand_value ( PropertyID , TokenStream < ComponentValue > & ) ;
2023-12-08 09:07:48 -03:00
RefPtr < StyleValue > parse_grid_track_placement ( TokenStream < ComponentValue > & ) ;
2023-12-07 14:36:46 -03:00
RefPtr < StyleValue > parse_grid_track_placement_shorthand_value ( PropertyID , TokenStream < ComponentValue > & ) ;
2023-12-07 18:08:06 -03:00
RefPtr < StyleValue > parse_grid_template_areas_value ( TokenStream < ComponentValue > & ) ;
2023-12-07 14:40:14 -03:00
RefPtr < StyleValue > parse_grid_area_shorthand_value ( TokenStream < ComponentValue > & ) ;
2023-12-26 12:16:36 -03:00
RefPtr < StyleValue > parse_grid_shorthand_value ( TokenStream < ComponentValue > & ) ;
2021-07-14 12:20:06 -03:00
2023-08-19 11:20:23 -03:00
OwnPtr < CalculationNode > parse_a_calculation ( Vector < ComponentValue > const & ) ;
2022-03-31 07:43:07 -03:00
2022-04-27 07:04:16 -03:00
ParseErrorOr < NonnullRefPtr < Selector > > parse_complex_selector ( TokenStream < ComponentValue > & , SelectorType ) ;
ParseErrorOr < Optional < Selector : : CompoundSelector > > parse_compound_selector ( TokenStream < ComponentValue > & ) ;
2022-03-31 07:43:07 -03:00
Optional < Selector : : Combinator > parse_selector_combinator ( TokenStream < ComponentValue > & ) ;
2023-08-07 12:48:44 -03:00
enum class AllowWildcardName {
No ,
Yes ,
} ;
Optional < Selector : : SimpleSelector : : QualifiedName > parse_selector_qualified_name ( TokenStream < ComponentValue > & , AllowWildcardName ) ;
2022-04-27 07:04:16 -03: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 07:43:07 -03:00
NonnullRefPtr < MediaQuery > parse_media_query ( TokenStream < ComponentValue > & ) ;
OwnPtr < MediaCondition > parse_media_condition ( TokenStream < ComponentValue > & , MediaCondition : : AllowOr allow_or ) ;
Optional < MediaFeature > parse_media_feature ( TokenStream < ComponentValue > & ) ;
Optional < MediaQuery : : MediaType > parse_media_type ( TokenStream < ComponentValue > & ) ;
OwnPtr < MediaCondition > parse_media_in_parens ( TokenStream < ComponentValue > & ) ;
Optional < MediaFeatureValue > parse_media_feature_value ( MediaFeatureID , TokenStream < ComponentValue > & ) ;
OwnPtr < Supports : : Condition > parse_supports_condition ( TokenStream < ComponentValue > & ) ;
Optional < Supports : : InParens > parse_supports_in_parens ( TokenStream < ComponentValue > & ) ;
Optional < Supports : : Feature > parse_supports_feature ( TokenStream < ComponentValue > & ) ;
2021-10-08 11:54:16 -03:00
2023-12-10 05:00:03 -03:00
NonnullRefPtr < StyleValue > resolve_unresolved_style_value ( DOM : : Element & , Optional < Selector : : PseudoElement : : Type > , PropertyID , UnresolvedStyleValue const & ) ;
2024-03-15 16:32:45 -03:00
bool expand_variables ( DOM : : Element & , Optional < Selector : : PseudoElement : : Type > , FlyString const & property_name , HashMap < FlyString , NonnullRefPtr < PropertyDependencyNode > > & dependencies , TokenStream < ComponentValue > & source , Vector < ComponentValue > & dest ) ;
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 07:16:49 -03:00
2021-11-10 20:55:02 -03:00
static bool has_ignored_vendor_prefix ( StringView ) ;
2021-09-12 12:49:09 -03:00
2022-03-29 11:01:38 -03:00
struct PropertiesAndCustomProperties {
Vector < StyleProperty > properties ;
2023-11-05 00:19:16 -03:00
HashMap < FlyString , StyleProperty > custom_properties ;
2022-03-29 11:01:38 -03:00
} ;
PropertiesAndCustomProperties extract_properties ( Vector < DeclarationOrAtRule > const & ) ;
2021-07-02 16:25:13 -03:00
ParsingContext m_context ;
2021-03-22 13:41:47 -03:00
Vector < Token > m_tokens ;
2021-07-03 10:00:41 -03:00
TokenStream < Token > m_token_stream ;
2021-03-22 13:41:47 -03:00
} ;
}
2021-07-30 13:48:23 -03:00
namespace Web {
2024-03-18 00:22:27 -03:00
CSS : : CSSStyleSheet * parse_css_stylesheet ( CSS : : Parser : : ParsingContext const & , StringView , Optional < URL : : URL > location = { } ) ;
2022-08-07 11:21:26 -03:00
CSS : : ElementInlineCSSStyleDeclaration * parse_css_style_attribute ( CSS : : Parser : : ParsingContext const & , StringView , DOM : : Element & ) ;
2023-08-19 11:01:21 -03:00
RefPtr < CSS : : StyleValue > parse_css_value ( CSS : : Parser : : ParsingContext const & , StringView , CSS : : PropertyID property_id = CSS : : PropertyID : : Invalid ) ;
2022-04-12 08:00:07 -03:00
Optional < CSS : : SelectorList > parse_selector ( CSS : : Parser : : ParsingContext const & , StringView ) ;
2022-08-07 10:46:44 -03:00
CSS : : CSSRule * parse_css_rule ( CSS : : Parser : : ParsingContext const & , StringView ) ;
2022-04-12 08:00:07 -03:00
RefPtr < CSS : : MediaQuery > parse_media_query ( CSS : : Parser : : ParsingContext const & , StringView ) ;
2023-03-06 10:17:01 -03:00
Vector < NonnullRefPtr < CSS : : MediaQuery > > parse_media_query_list ( CSS : : Parser : : ParsingContext const & , StringView ) ;
2022-04-12 08:00:07 -03:00
RefPtr < CSS : : Supports > parse_css_supports ( CSS : : Parser : : ParsingContext const & , StringView ) ;
2023-03-06 11:46:21 -03:00
Optional < CSS : : StyleProperty > parse_css_supports_condition ( CSS : : Parser : : ParsingContext const & , StringView ) ;
2021-07-30 13:48:23 -03:00
}