Prevent removal of metadata elements if they have only text nodes. Also added some unit tests.
7
scour.py
|
|
@ -51,7 +51,10 @@
|
|||
# when being run as main (for unit testing)
|
||||
# - Removed duplicate gradient stops
|
||||
# - Convert all colors to #RRGGBB format
|
||||
# -
|
||||
# - prevent metadata from being removed if they contain only text nodes
|
||||
# - 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/
|
||||
|
||||
|
||||
# necessary to get true division
|
||||
from __future__ import division
|
||||
|
|
@ -597,7 +600,7 @@ def scourString(in_string):
|
|||
removeElem = not elem.hasChildNodes()
|
||||
if removeElem == False :
|
||||
for child in elem.childNodes :
|
||||
if child.nodeType in [1, 4, 8] :
|
||||
if child.nodeType in [1, 3, 4, 8] :
|
||||
break
|
||||
else:
|
||||
removeElem = True
|
||||
|
|
|
|||
24
testscour.py
|
|
@ -95,6 +95,30 @@ class NoAdobeXPathElements(unittest.TestCase):
|
|||
lambda e: e.namespaceURI != 'http://ns.adobe.com/XPath/1.0/'), False,
|
||||
'Found Adobe XPath elements' )
|
||||
|
||||
#class NoInkscapeAttributes(unittest.TestCase):
|
||||
# def runTest(self):
|
||||
# self.assertNotEquals(walkTree(scour.scourXmlFile('unittests/inkscape.svg').documentElement,
|
||||
# lambda e: for a in e.attributes: a.namespaceURI
|
||||
# False,
|
||||
# 'Found Inkscape attributes')
|
||||
|
||||
class DoNotRemoveMetadataWithOnlyText(unittest.TestCase):
|
||||
def runTest(self):
|
||||
doc = scour.scourXmlFile('unittests/metadata-with-text.svg')
|
||||
self.assertEquals(len(doc.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'metadata')), 1,
|
||||
'Removed metadata element with only text child' )
|
||||
|
||||
class RemoveEmptyMetadataElement(unittest.TestCase):
|
||||
def runTest(self):
|
||||
doc = scour.scourXmlFile('unittests/empty-metadata.svg')
|
||||
self.assertEquals(len(doc.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'metadata')), 0,
|
||||
'Did not remove empty metadata element' )
|
||||
|
||||
class RemoveEmptyGElements(unittest.TestCase):
|
||||
def runTest(self):
|
||||
doc = scour.scourXmlFile('unittests/empty-g.svg')
|
||||
self.assertEquals(len(doc.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'g')), 1,
|
||||
'Did not remove empty g element' )
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
xmlns:ir="http://ns.adobe.com/ImageReplacement/1.0/"
|
||||
xmlns:custom="http://ns.adobe.com/GenericCustomNamespace/1.0/"
|
||||
xmlns:xpath="http://ns.adobe.com/XPath/1.0/"
|
||||
xmlns:ok="A.namespace.we.want.left.in"
|
||||
i:viewOrigin="190.2959 599.1841" i:rulerOrigin="0 0" i:pageBounds="0 792 612 0">
|
||||
<x:foo>bar</x:foo>
|
||||
<i:foo>bar</i:foo>
|
||||
|
|
@ -26,4 +27,18 @@
|
|||
<slices/>
|
||||
<sliceSourceBounds y="191.664" x="190.296" width="225.72" height="407.52" bottomLeftOrigin="true"/>
|
||||
</sfw>
|
||||
<rect width="300" height="200" fill="green"
|
||||
x:baz="1"
|
||||
i:baz="1"
|
||||
graph:baz="1"
|
||||
a:baz="1"
|
||||
f:baz="1"
|
||||
ir:baz="1"
|
||||
custom:baz='1'
|
||||
xpath:baz="1"
|
||||
xmlns:v="http://ns.adobe.Variables/1.0/"
|
||||
v:baz="1"
|
||||
xmlns:sfw="http://ns.adobe.com/SaveForWeb/1.0/"
|
||||
sfw:baz="1"
|
||||
ok:baz="1" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.5 KiB |
6
unittests/empty-g.svg
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<g/>
|
||||
<g>
|
||||
<rect width="300" height="200" fill="green" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 118 B |
3
unittests/empty-metadata.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata></metadata>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 71 B |
|
|
@ -1,5 +1,5 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="dihttp://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:version="0.46" version="1.0">
|
||||
<inkscape:perspective inkscape:vp_x="0 : 526.18109 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="744.09448 : 526.18109 : 1" inkscape:persp3d-origin="372.04724 : 350.78739 : 1" id="perspective3104"/>
|
||||
<rect width="300" height="200" fill="green" />
|
||||
<rect width="300" height="200" fill="green" inkscape:collect="always"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 396 B After Width: | Height: | Size: 423 B |
3
unittests/metadata-with-text.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>This is a metadata element with only text node children</metadata>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 126 B |