From 654e3ea1a6f812bd6a39b877f9af76084cfb15c0 Mon Sep 17 00:00:00 2001 From: Eduard Braun Date: Sat, 10 Mar 2018 19:08:33 +0100 Subject: [PATCH] Properly parse boolean flags in elliptical arc commands 'large-arc-flag' and 'sweep-flag' do not need to be separated from the following path data with comma or whitespace. It results in ambiguous numbers but it's actually valid SVG... --- scour/svg_regex.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/scour/svg_regex.py b/scour/svg_regex.py index d4dfe3a..c62ba2a 100644 --- a/scour/svg_regex.py +++ b/scour/svg_regex.py @@ -247,16 +247,24 @@ class SVGPathParser(object): axis_rotation = Decimal(token[1]) * 1 token = next_val_fn() - if token[1] not in ('0', '1'): + if token[1][0] not in ('0', '1'): raise SyntaxError("expecting a boolean flag; got %r" % (token,)) - large_arc_flag = Decimal(token[1]) * 1 + large_arc_flag = Decimal(token[1][0]) * 1 - token = next_val_fn() - if token[1] not in ('0', '1'): + if len(token[1]) > 1: + token = list(token) + token[1] = token[1][1:] + else: + token = next_val_fn() + if token[1][0] not in ('0', '1'): raise SyntaxError("expecting a boolean flag; got %r" % (token,)) - sweep_flag = Decimal(token[1]) * 1 + sweep_flag = Decimal(token[1][0]) * 1 - token = next_val_fn() + if len(token[1]) > 1: + token = list(token) + token[1] = token[1][1:] + else: + token = next_val_fn() if token[0] not in self.number_tokens: raise SyntaxError("expecting a number; got %r" % (token,)) x = Decimal(token[1]) * 1