diff --git a/scour/scour.py b/scour/scour.py index 754e5dd..fdae854 100644 --- a/scour/scour.py +++ b/scour/scour.py @@ -2193,7 +2193,13 @@ def cleanPath(element, options) : newPath.append( (cmd, lineTuples) ) # convert Bézier curve segments into s where possible elif cmd == 'c': - bez_ctl_pt = (0,0) + # set up the assumed bezier control point as the current point, i.e. (0,0) since we're using relative coords + bez_ctl_pt = (0, 0) + # however if the previous command was 's' the assumed control point is a reflection of the previous control point at the current point + if len(newPath): + (prevCmd, prevData) = newPath[-1] + if prevCmd == 's': + bez_ctl_pt = (prevData[-2]-prevData[-4], prevData[-1]-prevData[-3]) i = 0 curveTuples = [] while i < len(data): diff --git a/testscour.py b/testscour.py index 294cb7f..9d9f460 100755 --- a/testscour.py +++ b/testscour.py @@ -675,9 +675,13 @@ class ChangeLineToVerticalLineSegmentInPath(unittest.TestCase): class ChangeBezierToShorthandInPath(unittest.TestCase): def runTest(self): - path = scour.scourXmlFile('unittests/path-bez-optimize.svg').getElementsByTagNameNS(SVGNS, 'path')[0] - self.assertEqual(path.getAttribute('d'), 'm10 100c50-50 50 50 100 0s50 50 100 0', + doc = scour.scourXmlFile('unittests/path-bez-optimize.svg') + self.assertEqual(doc.getElementById('path1').getAttribute('d'), 'm10 100c50-50 50 50 100 0s50 50 100 0', 'Did not change bezier curves into shorthand curve segments in path') + self.assertEqual(doc.getElementById('path2a').getAttribute('d'), 'm200 200s200 100 200 0', + 'Did not change bezier curve into shorthand curve segment when first control point is the current point and previous command was not a bezier curve') + self.assertEqual(doc.getElementById('path2b').getAttribute('d'), 'm0 300s200-100 200 0c0 0 200 100 200 0', + 'Did change bezier curve into shorthand curve segment when first control point is the current point but previous command was a bezier curve with a different control point') class ChangeQuadToShorthandInPath(unittest.TestCase): def runTest(self): diff --git a/unittests/path-bez-optimize.svg b/unittests/path-bez-optimize.svg index 97bfdd1..30761f3 100644 --- a/unittests/path-bez-optimize.svg +++ b/unittests/path-bez-optimize.svg @@ -1,4 +1,6 @@ - + + +