diff --git a/Libraries/LibWeb/CMakeLists.txt b/Libraries/LibWeb/CMakeLists.txt index df8a9eb0b35..7173b7e7af6 100644 --- a/Libraries/LibWeb/CMakeLists.txt +++ b/Libraries/LibWeb/CMakeLists.txt @@ -227,6 +227,7 @@ set(SOURCES CSS/Transformation.cpp CSS/TransitionEvent.cpp CSS/URL.cpp + CSS/ValueType.cpp CSS/VisualViewport.cpp DOM/AbortController.cpp DOM/AbortSignal.cpp diff --git a/Libraries/LibWeb/CSS/Parser/Parser.h b/Libraries/LibWeb/CSS/Parser/Parser.h index 44e6eeeaa7b..871c153c6e5 100644 --- a/Libraries/LibWeb/CSS/Parser/Parser.h +++ b/Libraries/LibWeb/CSS/Parser/Parser.h @@ -291,6 +291,8 @@ private: Vector parse_unicode_ranges(TokenStream&); RefPtr parse_unicode_range_value(TokenStream&); + RefPtr parse_value(ValueType, TokenStream&); + Optional parse_grid_track_breadth(TokenStream&); Optional parse_grid_inflexible_breadth(TokenStream&); Optional parse_grid_fixed_breadth(TokenStream&); diff --git a/Libraries/LibWeb/CSS/Parser/ValueParsing.cpp b/Libraries/LibWeb/CSS/Parser/ValueParsing.cpp index 2ddb82eef62..2d074e06b6c 100644 --- a/Libraries/LibWeb/CSS/Parser/ValueParsing.cpp +++ b/Libraries/LibWeb/CSS/Parser/ValueParsing.cpp @@ -4325,4 +4325,62 @@ NonnullRefPtr Parser::resolve_unresolved_style_value(DOM::A return parsed_value.release_value(); } +RefPtr Parser::parse_value(ValueType value_type, TokenStream& tokens) +{ + switch (value_type) { + case ValueType::Angle: + return parse_angle_value(tokens); + case ValueType::BackgroundPosition: + return parse_position_value(tokens, PositionParsingMode::BackgroundPosition); + case ValueType::BasicShape: + return parse_basic_shape_value(tokens); + case ValueType::Color: + return parse_color_value(tokens); + case ValueType::Counter: + return parse_counter_value(tokens); + case ValueType::CustomIdent: + // FIXME: Figure out how to pass the blacklist here + return parse_custom_ident_value(tokens, {}); + case ValueType::EasingFunction: + return parse_easing_value(tokens); + case ValueType::FilterValueList: + return parse_filter_value_list_value(tokens); + case ValueType::FitContent: + return parse_fit_content_value(tokens); + case ValueType::Flex: + return parse_flex_value(tokens); + case ValueType::Frequency: + return parse_frequency_value(tokens); + case ValueType::Image: + return parse_image_value(tokens); + case ValueType::Integer: + return parse_integer_value(tokens); + case ValueType::Length: + return parse_length_value(tokens); + case ValueType::Number: + return parse_number_value(tokens); + case ValueType::OpenTypeTag: + return parse_opentype_tag_value(tokens); + case ValueType::Paint: + return parse_paint_value(tokens); + case ValueType::Percentage: + return parse_percentage_value(tokens); + case ValueType::Position: + return parse_position_value(tokens); + case ValueType::Ratio: + return parse_ratio_value(tokens); + case ValueType::Rect: + return parse_rect_value(tokens); + case ValueType::Resolution: + return parse_resolution_value(tokens); + case ValueType::String: + return parse_string_value(tokens); + case ValueType::Time: + return parse_time_value(tokens); + case ValueType::Url: + return parse_url_value(tokens); + } + VERIFY_NOT_REACHED(); +} + } diff --git a/Libraries/LibWeb/CSS/ValueType.cpp b/Libraries/LibWeb/CSS/ValueType.cpp index e4765a7ec5c..a2d44dce4b7 100644 --- a/Libraries/LibWeb/CSS/ValueType.cpp +++ b/Libraries/LibWeb/CSS/ValueType.cpp @@ -4,11 +4,12 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include namespace Web::CSS { -Optional value_type_from_string(StringView name) +Optional value_type_from_string(StringView string) { if (string.equals_ignoring_ascii_case("angle"sv)) return ValueType::Angle; diff --git a/Libraries/LibWeb/CSS/ValueType.h b/Libraries/LibWeb/CSS/ValueType.h index df3ffc194c1..a841e9cd78a 100644 --- a/Libraries/LibWeb/CSS/ValueType.h +++ b/Libraries/LibWeb/CSS/ValueType.h @@ -6,6 +6,7 @@ #pragma once +#include #include namespace Web::CSS {