LibWeb: SVG parse signed numbers in eliptical arc
This commit is contained in:
parent
cb041d7496
commit
f7dbcb652a
Notes:
sideshowbarker
2024-07-17 18:26:53 +09:00
Author: https://github.com/danners Commit: https://github.com/SerenityOS/serenity/commit/f7dbcb652a Pull-request: https://github.com/SerenityOS/serenity/pull/12632 Reviewed-by: https://github.com/AtkinsSJ ✅ Reviewed-by: https://github.com/IdanHo
2 changed files with 13 additions and 3 deletions
|
@ -230,7 +230,8 @@ void AttributeParser::parse_elliptical_arc()
|
||||||
|
|
||||||
float AttributeParser::parse_length()
|
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()
|
float AttributeParser::parse_coordinate()
|
||||||
|
@ -302,10 +303,10 @@ Vector<float> AttributeParser::parse_coordinate_pair_triplet()
|
||||||
Vector<float> AttributeParser::parse_elliptical_arg_argument()
|
Vector<float> AttributeParser::parse_elliptical_arg_argument()
|
||||||
{
|
{
|
||||||
Vector<float> numbers;
|
Vector<float> numbers;
|
||||||
numbers.append(parse_number());
|
numbers.append(parse_nonnegative_number());
|
||||||
if (match_comma_whitespace())
|
if (match_comma_whitespace())
|
||||||
parse_comma_whitespace();
|
parse_comma_whitespace();
|
||||||
numbers.append(parse_number());
|
numbers.append(parse_nonnegative_number());
|
||||||
if (match_comma_whitespace())
|
if (match_comma_whitespace())
|
||||||
parse_comma_whitespace();
|
parse_comma_whitespace();
|
||||||
numbers.append(parse_number());
|
numbers.append(parse_number());
|
||||||
|
@ -368,7 +369,15 @@ float AttributeParser::parse_fractional_constant()
|
||||||
return builder.to_string().to_int().value();
|
return builder.to_string().to_int().value();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://www.w3.org/TR/SVG11/types.html#DataTypeNumber
|
||||||
float AttributeParser::parse_number()
|
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();
|
auto number = parse_fractional_constant();
|
||||||
|
|
||||||
|
|
|
@ -70,6 +70,7 @@ private:
|
||||||
void parse_comma_whitespace();
|
void parse_comma_whitespace();
|
||||||
float parse_fractional_constant();
|
float parse_fractional_constant();
|
||||||
float parse_number();
|
float parse_number();
|
||||||
|
float parse_nonnegative_number();
|
||||||
float parse_flag();
|
float parse_flag();
|
||||||
// -1 if negative, +1 otherwise
|
// -1 if negative, +1 otherwise
|
||||||
int parse_sign();
|
int parse_sign();
|
||||||
|
|
Loading…
Add table
Reference in a new issue