diff --git a/Userland/Libraries/LibWeb/SVG/AttributeParser.cpp b/Userland/Libraries/LibWeb/SVG/AttributeParser.cpp index 1a4da9a857..7dc030cb18 100644 --- a/Userland/Libraries/LibWeb/SVG/AttributeParser.cpp +++ b/Userland/Libraries/LibWeb/SVG/AttributeParser.cpp @@ -230,7 +230,8 @@ void AttributeParser::parse_elliptical_arc() float AttributeParser::parse_length() { - return parse_sign() * parse_number(); + // https://www.w3.org/TR/SVG11/types.html#DataTypeLength + return parse_number(); } float AttributeParser::parse_coordinate() @@ -302,10 +303,10 @@ Vector AttributeParser::parse_coordinate_pair_triplet() Vector AttributeParser::parse_elliptical_arg_argument() { Vector numbers; - numbers.append(parse_number()); + numbers.append(parse_nonnegative_number()); if (match_comma_whitespace()) parse_comma_whitespace(); - numbers.append(parse_number()); + numbers.append(parse_nonnegative_number()); if (match_comma_whitespace()) parse_comma_whitespace(); numbers.append(parse_number()); @@ -368,7 +369,15 @@ float AttributeParser::parse_fractional_constant() return builder.to_string().to_int().value(); } +// https://www.w3.org/TR/SVG11/types.html#DataTypeNumber float AttributeParser::parse_number() +{ + auto sign = parse_sign(); + return sign * parse_nonnegative_number(); +} + +// https://www.w3.org/TR/SVG11/paths.html#PathDataBNF +float AttributeParser::parse_nonnegative_number() { auto number = parse_fractional_constant(); diff --git a/Userland/Libraries/LibWeb/SVG/AttributeParser.h b/Userland/Libraries/LibWeb/SVG/AttributeParser.h index d276a2c9bc..b589a14f0e 100644 --- a/Userland/Libraries/LibWeb/SVG/AttributeParser.h +++ b/Userland/Libraries/LibWeb/SVG/AttributeParser.h @@ -70,6 +70,7 @@ private: void parse_comma_whitespace(); float parse_fractional_constant(); float parse_number(); + float parse_nonnegative_number(); float parse_flag(); // -1 if negative, +1 otherwise int parse_sign();