LibWeb/CSS: Add ValueTypes for <foo-percentage>

This commit is contained in:
Sam Atkins 2025-10-14 14:22:15 +01:00
commit 7ba496b798
Notes: github-actions[bot] 2025-10-20 12:56:27 +00:00
4 changed files with 32 additions and 4 deletions

View file

@ -4847,6 +4847,8 @@ RefPtr<StyleValue const> Parser::parse_value(ValueType value_type, TokenStream<C
return parse_anchor_size(tokens); return parse_anchor_size(tokens);
case ValueType::Angle: case ValueType::Angle:
return parse_angle_value(tokens); return parse_angle_value(tokens);
case ValueType::AnglePercentage:
return parse_angle_percentage_value(tokens);
case ValueType::BackgroundPosition: case ValueType::BackgroundPosition:
return parse_position_value(tokens, PositionParsingMode::BackgroundPosition); return parse_position_value(tokens, PositionParsingMode::BackgroundPosition);
case ValueType::BasicShape: case ValueType::BasicShape:
@ -4870,12 +4872,16 @@ RefPtr<StyleValue const> Parser::parse_value(ValueType value_type, TokenStream<C
return parse_flex_value(tokens); return parse_flex_value(tokens);
case ValueType::Frequency: case ValueType::Frequency:
return parse_frequency_value(tokens); return parse_frequency_value(tokens);
case ValueType::FrequencyPercentage:
return parse_frequency_percentage_value(tokens);
case ValueType::Image: case ValueType::Image:
return parse_image_value(tokens); return parse_image_value(tokens);
case ValueType::Integer: case ValueType::Integer:
return parse_integer_value(tokens); return parse_integer_value(tokens);
case ValueType::Length: case ValueType::Length:
return parse_length_value(tokens); return parse_length_value(tokens);
case ValueType::LengthPercentage:
return parse_length_percentage_value(tokens);
case ValueType::Number: case ValueType::Number:
return parse_number_value(tokens); return parse_number_value(tokens);
case ValueType::Opacity: case ValueType::Opacity:
@ -4898,6 +4904,8 @@ RefPtr<StyleValue const> Parser::parse_value(ValueType value_type, TokenStream<C
return parse_string_value(tokens); return parse_string_value(tokens);
case ValueType::Time: case ValueType::Time:
return parse_time_value(tokens); return parse_time_value(tokens);
case ValueType::TimePercentage:
return parse_time_percentage_value(tokens);
case ValueType::TransformFunction: case ValueType::TransformFunction:
return parse_transform_function_value(tokens); return parse_transform_function_value(tokens);
case ValueType::TransformList: case ValueType::TransformList:

View file

@ -15,6 +15,8 @@ Optional<ValueType> value_type_from_string(StringView string)
return ValueType::AnchorSize; return ValueType::AnchorSize;
if (string.equals_ignoring_ascii_case("angle"sv)) if (string.equals_ignoring_ascii_case("angle"sv))
return ValueType::Angle; return ValueType::Angle;
if (string.equals_ignoring_ascii_case("angle-percentage"sv))
return ValueType::AnglePercentage;
if (string.equals_ignoring_ascii_case("background-position"sv)) if (string.equals_ignoring_ascii_case("background-position"sv))
return ValueType::BackgroundPosition; return ValueType::BackgroundPosition;
if (string.equals_ignoring_ascii_case("basic-shape"sv)) if (string.equals_ignoring_ascii_case("basic-shape"sv))
@ -35,12 +37,16 @@ Optional<ValueType> value_type_from_string(StringView string)
return ValueType::Flex; return ValueType::Flex;
if (string.equals_ignoring_ascii_case("frequency"sv)) if (string.equals_ignoring_ascii_case("frequency"sv))
return ValueType::Frequency; return ValueType::Frequency;
if (string.equals_ignoring_ascii_case("frequency-percentage"sv))
return ValueType::FrequencyPercentage;
if (string.equals_ignoring_ascii_case("image"sv)) if (string.equals_ignoring_ascii_case("image"sv))
return ValueType::Image; return ValueType::Image;
if (string.equals_ignoring_ascii_case("integer"sv)) if (string.equals_ignoring_ascii_case("integer"sv))
return ValueType::Integer; return ValueType::Integer;
if (string.equals_ignoring_ascii_case("length"sv)) if (string.equals_ignoring_ascii_case("length"sv))
return ValueType::Length; return ValueType::Length;
if (string.equals_ignoring_ascii_case("length-percentage"sv))
return ValueType::LengthPercentage;
if (string.equals_ignoring_ascii_case("number"sv)) if (string.equals_ignoring_ascii_case("number"sv))
return ValueType::Number; return ValueType::Number;
if (string.equals_ignoring_ascii_case("opacity"sv)) if (string.equals_ignoring_ascii_case("opacity"sv))
@ -63,6 +69,8 @@ Optional<ValueType> value_type_from_string(StringView string)
return ValueType::String; return ValueType::String;
if (string.equals_ignoring_ascii_case("time"sv)) if (string.equals_ignoring_ascii_case("time"sv))
return ValueType::Time; return ValueType::Time;
if (string.equals_ignoring_ascii_case("time-percentage"sv))
return ValueType::TimePercentage;
if (string.equals_ignoring_ascii_case("transform-function"sv)) if (string.equals_ignoring_ascii_case("transform-function"sv))
return ValueType::TransformFunction; return ValueType::TransformFunction;
if (string.equals_ignoring_ascii_case("transform-list"sv)) if (string.equals_ignoring_ascii_case("transform-list"sv))
@ -81,6 +89,8 @@ StringView value_type_to_string(ValueType value_type)
return "AnchorSize"sv; return "AnchorSize"sv;
case Web::CSS::ValueType::Angle: case Web::CSS::ValueType::Angle:
return "Angle"sv; return "Angle"sv;
case Web::CSS::ValueType::AnglePercentage:
return "AnglePercentage"sv;
case Web::CSS::ValueType::BackgroundPosition: case Web::CSS::ValueType::BackgroundPosition:
return "BackgroundPosition"sv; return "BackgroundPosition"sv;
case Web::CSS::ValueType::BasicShape: case Web::CSS::ValueType::BasicShape:
@ -103,12 +113,16 @@ StringView value_type_to_string(ValueType value_type)
return "Flex"sv; return "Flex"sv;
case Web::CSS::ValueType::Frequency: case Web::CSS::ValueType::Frequency:
return "Frequency"sv; return "Frequency"sv;
case Web::CSS::ValueType::FrequencyPercentage:
return "FrequencyPercentage"sv;
case Web::CSS::ValueType::Image: case Web::CSS::ValueType::Image:
return "Image"sv; return "Image"sv;
case Web::CSS::ValueType::Integer: case Web::CSS::ValueType::Integer:
return "Integer"sv; return "Integer"sv;
case Web::CSS::ValueType::Length: case Web::CSS::ValueType::Length:
return "Length"sv; return "Length"sv;
case Web::CSS::ValueType::LengthPercentage:
return "LengthPercentage"sv;
case Web::CSS::ValueType::Number: case Web::CSS::ValueType::Number:
return "Number"sv; return "Number"sv;
case Web::CSS::ValueType::Opacity: case Web::CSS::ValueType::Opacity:
@ -131,6 +145,8 @@ StringView value_type_to_string(ValueType value_type)
return "String"sv; return "String"sv;
case Web::CSS::ValueType::Time: case Web::CSS::ValueType::Time:
return "Time"sv; return "Time"sv;
case Web::CSS::ValueType::TimePercentage:
return "TimePercentage"sv;
case Web::CSS::ValueType::TransformFunction: case Web::CSS::ValueType::TransformFunction:
return "TransformFunction"sv; return "TransformFunction"sv;
case Web::CSS::ValueType::TransformList: case Web::CSS::ValueType::TransformList:

View file

@ -16,6 +16,7 @@ enum class ValueType : u8 {
Anchor, Anchor,
AnchorSize, AnchorSize,
Angle, Angle,
AnglePercentage,
BackgroundPosition, BackgroundPosition,
BasicShape, BasicShape,
Color, Color,
@ -27,9 +28,11 @@ enum class ValueType : u8 {
FitContent, FitContent,
Flex, Flex,
Frequency, Frequency,
FrequencyPercentage,
Image, Image,
Integer, Integer,
Length, Length,
LengthPercentage,
Number, Number,
Opacity, Opacity,
OpentypeTag, OpentypeTag,
@ -41,6 +44,7 @@ enum class ValueType : u8 {
Resolution, Resolution,
String, String,
Time, Time,
TimePercentage,
TransformFunction, TransformFunction,
TransformList, TransformList,
Url, Url,

View file

@ -2,8 +2,8 @@ Harness status: OK
Found 239 tests Found 239 tests
189 Pass 191 Pass
50 Fail 48 Fail
Pass syntax:'*', initialValue:'a' is valid Pass syntax:'*', initialValue:'a' is valid
Pass syntax:' * ', initialValue:'b' is valid Pass syntax:' * ', initialValue:'b' is valid
Pass syntax:'<length>', initialValue:'2px' is valid Pass syntax:'<length>', initialValue:'2px' is valid
@ -32,8 +32,8 @@ Pass syntax:'<length>', initialValue:'calc(7in - 12px)' is valid
Pass syntax:'<length>+', initialValue:'2px 7px calc(8px)' is valid Pass syntax:'<length>+', initialValue:'2px 7px calc(8px)' is valid
Fail syntax:'<length>#', initialValue:'2px, 7px, calc(8px)' is valid Fail syntax:'<length>#', initialValue:'2px, 7px, calc(8px)' is valid
Pass syntax:'<percentage>', initialValue:'-9.3e3%' is valid Pass syntax:'<percentage>', initialValue:'-9.3e3%' is valid
Fail syntax:'<length-percentage>', initialValue:'-54%' is valid Pass syntax:'<length-percentage>', initialValue:'-54%' is valid
Fail syntax:'<length-percentage>', initialValue:'0' is valid Pass syntax:'<length-percentage>', initialValue:'0' is valid
Fail syntax:'<length-percentage>', initialValue:'calc(-11px + 10.4%)' is valid Fail syntax:'<length-percentage>', initialValue:'calc(-11px + 10.4%)' is valid
Pass syntax:'<length>', initialValue:'10vmin' is valid Pass syntax:'<length>', initialValue:'10vmin' is valid
Pass syntax:'<percentage> | <length>+', initialValue:'calc(100vh - 10px) 30px' is valid Pass syntax:'<percentage> | <length>+', initialValue:'calc(100vh - 10px) 30px' is valid