From 359c42166f02007c0c392a8e21a954d94cb294d1 Mon Sep 17 00:00:00 2001 From: JSCHILL1 Date: Wed, 15 Apr 2009 11:24:27 -0500 Subject: [PATCH] Format output XML prettily --- scour.py | 21 ++++++++++++++------- testscour.py | 13 +++++++++++++ unittests/unreferenced-linearGradient.svg | 5 +++++ unittests/unreferenced-radialGradient.svg | 5 +++++ 4 files changed, 37 insertions(+), 7 deletions(-) create mode 100644 unittests/unreferenced-linearGradient.svg create mode 100644 unittests/unreferenced-radialGradient.svg diff --git a/scour.py b/scour.py index 69e1f76..453fbfd 100755 --- a/scour.py +++ b/scour.py @@ -47,11 +47,9 @@ # * Collapse all group based transformations # Next Up: -# + moved all functionality into a module level function named 'scour' and only call it -# when being run as main (for unit testing) -# + prevent metadata from being removed if they contain only text nodes -# - Remove unreferenced pattern elements # - Remove duplicate gradient stops +# - Remove unnecessary nested elements +# - Pretty up whitespace nodes on output # - Convert all colors to #RRGGBB format # - rework command-line argument processing so that options are configurable # - remove unreferenced patterns? https://bugs.edge.launchpad.net/ubuntu/+source/human-icon-theme/+bug/361667/ @@ -644,9 +642,18 @@ def scourString(in_string): # properly size the SVG document (ideally width/height should be 100% with a viewBox) properlySizeDoc(doc.documentElement) - # output the document - out_string = doc.documentElement.toxml() - return out_string + # output the document as a pretty string with a single space for indent + out_string = doc.documentElement.toprettyxml(' ') + + # now strip out empty lines + lines = [] + # Get rid of empty lines + for line in out_string.splitlines(True): + if line.strip(): + lines.append(line) + + # return the string stripped of empty lines + return "".join(lines) # used mostly by unit tests # input is a filename diff --git a/testscour.py b/testscour.py index 2877ed5..39055c2 100755 --- a/testscour.py +++ b/testscour.py @@ -126,6 +126,19 @@ class RemoveUnreferencedPattern(unittest.TestCase): self.assertEquals(len(doc.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'pattern')), 0, 'Unreferenced pattern not removed' ) +class RemoveUnreferencedLinearGradient(unittest.TestCase): + def runTest(self): + doc = scour.scourXmlFile('unittests/unreferenced-linearGradient.svg') + self.assertEquals(len(doc.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'linearGradient')), 0, + 'Unreferenced linearGradient not removed' ) + +class RemoveUnreferencedRadialGradient(unittest.TestCase): + def runTest(self): + doc = scour.scourXmlFile('unittests/unreferenced-radialGradient.svg') + self.assertEquals(len(doc.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'radialradient')), 0, + 'Unreferenced radialGradient not removed' ) + + # These tests will fail at present #class RemoveDuplicateGradientStops(unittest.TestCase): # def runTest(self): diff --git a/unittests/unreferenced-linearGradient.svg b/unittests/unreferenced-linearGradient.svg new file mode 100644 index 0000000..276b421 --- /dev/null +++ b/unittests/unreferenced-linearGradient.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/unittests/unreferenced-radialGradient.svg b/unittests/unreferenced-radialGradient.svg new file mode 100644 index 0000000..48c86c8 --- /dev/null +++ b/unittests/unreferenced-radialGradient.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file