Apply a modified patch submitted by Jan Thor in bug 717254 to fix a bug whereby Scour would keep the <defs/> element if it was there but had only whitespace or unreferenced children.
This commit is contained in:
parent
bdae2bafae
commit
4657cb7515
4 changed files with 61 additions and 20 deletions
22
scour.py
22
scour.py
|
|
@ -596,8 +596,9 @@ def removeUnreferencedElements(doc):
|
|||
"""
|
||||
global numElemsRemoved
|
||||
num = 0
|
||||
|
||||
# Remove certain unreferenced elements outside of defs
|
||||
removeTags = ['linearGradient', 'radialGradient', 'pattern']
|
||||
|
||||
identifiedElements = findElementsWithId(doc.documentElement)
|
||||
referencedIDs = findReferencedElements(doc.documentElement)
|
||||
|
||||
|
|
@ -609,8 +610,7 @@ def removeUnreferencedElements(doc):
|
|||
num += 1
|
||||
numElemsRemoved += 1
|
||||
|
||||
# TODO: should also go through defs and vacuum it
|
||||
num = 0
|
||||
# Remove most unreferenced elements inside defs
|
||||
defs = doc.documentElement.getElementsByTagName('defs')
|
||||
for aDef in defs:
|
||||
elemsToRemove = removeUnusedDefs(doc, aDef)
|
||||
|
|
@ -2784,15 +2784,21 @@ def scourString(in_string, options=None):
|
|||
if options.remove_metadata:
|
||||
removeMetadataElements(doc)
|
||||
|
||||
# remove unreferenced gradients/patterns outside of defs
|
||||
# and most unreferenced elements inside of defs
|
||||
while removeUnreferencedElements(doc) > 0:
|
||||
pass
|
||||
|
||||
# remove empty defs, metadata, g
|
||||
# NOTE: these elements will be removed even if they have (invalid) text nodes
|
||||
elemsToRemove = []
|
||||
# NOTE: these elements will be removed if they just have whitespace-only text nodes
|
||||
for tag in ['defs', 'metadata', 'g'] :
|
||||
for elem in doc.documentElement.getElementsByTagName(tag) :
|
||||
removeElem = not elem.hasChildNodes()
|
||||
if removeElem == False :
|
||||
for child in elem.childNodes :
|
||||
if child.nodeType in [1, 3, 4, 8] :
|
||||
if child.nodeType in [1, 4, 8]:
|
||||
break
|
||||
elif child.nodeType == 3 and not child.nodeValue.isspace():
|
||||
break
|
||||
else:
|
||||
removeElem = True
|
||||
|
|
@ -2800,10 +2806,6 @@ def scourString(in_string, options=None):
|
|||
elem.parentNode.removeChild(elem)
|
||||
numElemsRemoved += 1
|
||||
|
||||
# remove unreferenced gradients/patterns outside of defs
|
||||
while removeUnreferencedElements(doc) > 0:
|
||||
pass
|
||||
|
||||
if options.strip_ids:
|
||||
bContinueLooping = True
|
||||
while bContinueLooping:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue