Don't remove unreferenced defs if --keep-unreferenced-defs is specified (#62)
* Don't remove unreferenced defs if `--keep-unreferenced-defs` is specified (fixes #18) * Add unittests for previous commit
This commit is contained in:
parent
3299f8f6e0
commit
fe2884c3e8
3 changed files with 51 additions and 1 deletions
|
|
@ -623,7 +623,9 @@ def removeUnreferencedElements(doc, keepDefs):
|
||||||
for id in identifiedElements:
|
for id in identifiedElements:
|
||||||
if not id in referencedIDs:
|
if not id in referencedIDs:
|
||||||
goner = identifiedElements[id]
|
goner = identifiedElements[id]
|
||||||
if goner != None and goner.parentNode != None and goner.nodeName in removeTags:
|
if (goner != None and goner.nodeName in removeTags
|
||||||
|
and goner.parentNode != None
|
||||||
|
and goner.parentNode.tagName != 'defs'):
|
||||||
goner.parentNode.removeChild(goner)
|
goner.parentNode.removeChild(goner)
|
||||||
num += 1
|
num += 1
|
||||||
numElemsRemoved += 1
|
numElemsRemoved += 1
|
||||||
|
|
|
||||||
29
testscour.py
29
testscour.py
|
|
@ -176,6 +176,35 @@ class RemoveUnreferencedElementInDefs(unittest.TestCase):
|
||||||
self.assertEqual(len(doc.getElementsByTagNameNS(SVGNS, 'rect')), 1,
|
self.assertEqual(len(doc.getElementsByTagNameNS(SVGNS, 'rect')), 1,
|
||||||
'Unreferenced rect left in defs' )
|
'Unreferenced rect left in defs' )
|
||||||
|
|
||||||
|
class RemoveUnreferencedDefs(unittest.TestCase):
|
||||||
|
def runTest(self):
|
||||||
|
doc = scour.scourXmlFile('unittests/unreferenced-defs.svg')
|
||||||
|
self.assertEqual(len(doc.getElementsByTagNameNS(SVGNS, 'linearGradient')), 1,
|
||||||
|
'Referenced linearGradient removed from defs' )
|
||||||
|
self.assertEqual(len(doc.getElementsByTagNameNS(SVGNS, 'radialGradient')), 0,
|
||||||
|
'Unreferenced radialGradient left in defs' )
|
||||||
|
self.assertEqual(len(doc.getElementsByTagNameNS(SVGNS, 'pattern')), 0,
|
||||||
|
'Unreferenced pattern left in defs' )
|
||||||
|
self.assertEqual(len(doc.getElementsByTagNameNS(SVGNS, 'rect')), 1,
|
||||||
|
'Referenced rect removed from defs' )
|
||||||
|
self.assertEqual(len(doc.getElementsByTagNameNS(SVGNS, 'circle')), 0,
|
||||||
|
'Unreferenced circle left in defs' )
|
||||||
|
|
||||||
|
class KeepUnreferencedDefs(unittest.TestCase):
|
||||||
|
def runTest(self):
|
||||||
|
doc = scour.scourXmlFile('unittests/unreferenced-defs.svg',
|
||||||
|
scour.parse_args(['--keep-unreferenced-defs'])[0])
|
||||||
|
self.assertEqual(len(doc.getElementsByTagNameNS(SVGNS, 'linearGradient')), 1,
|
||||||
|
'Referenced linearGradient removed from defs with `--keep-unreferenced-defs`' )
|
||||||
|
self.assertEqual(len(doc.getElementsByTagNameNS(SVGNS, 'radialGradient')), 1,
|
||||||
|
'Unreferenced radialGradient removed from defs with `--keep-unreferenced-defs`' )
|
||||||
|
self.assertEqual(len(doc.getElementsByTagNameNS(SVGNS, 'pattern')), 1,
|
||||||
|
'Unreferenced pattern removed from defs with `--keep-unreferenced-defs`' )
|
||||||
|
self.assertEqual(len(doc.getElementsByTagNameNS(SVGNS, 'rect')), 1,
|
||||||
|
'Referenced rect removed from defs with `--keep-unreferenced-defs`' )
|
||||||
|
self.assertEqual(len(doc.getElementsByTagNameNS(SVGNS, 'circle')), 1,
|
||||||
|
'Unreferenced circle removed from defs with `--keep-unreferenced-defs`' )
|
||||||
|
|
||||||
class DoNotRemoveChainedRefsInDefs(unittest.TestCase):
|
class DoNotRemoveChainedRefsInDefs(unittest.TestCase):
|
||||||
def runTest(self):
|
def runTest(self):
|
||||||
doc = scour.scourXmlFile('unittests/refs-in-defs.svg')
|
doc = scour.scourXmlFile('unittests/refs-in-defs.svg')
|
||||||
|
|
|
||||||
19
unittests/unreferenced-defs.svg
Normal file
19
unittests/unreferenced-defs.svg
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="linearGradient">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop offset="1" stop-color="blue"/>
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient id="radialGradient">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop offset="1" stop-color="blue"/>
|
||||||
|
</radialGradient>
|
||||||
|
<pattern id="pattern">
|
||||||
|
<polygon fill="none" points="71.125,-1.896 2.125,-1.896 2.125,-70.896 71.125,-70.896"/>
|
||||||
|
</pattern>
|
||||||
|
<rect id="rect" width="50" height="50"/>
|
||||||
|
<circle id="circle" width="100" height="100"/>
|
||||||
|
</defs>
|
||||||
|
<use x="10" y="10" xlink:href="#rect" fill="url(#linearGradient)"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 729 B |
Loading…
Add table
Add a link
Reference in a new issue