Remove unreferenced patterns and gradients outside of a defs

This commit is contained in:
JSCHILL1 2009-04-15 10:58:06 -05:00
parent 2cc9c00ef7
commit 066c627833
7 changed files with 640 additions and 7 deletions

View file

@ -49,9 +49,10 @@
# Next Up:
# + moved all functionality into a module level function named 'scour' and only call it
# when being run as main (for unit testing)
# - Removed duplicate gradient stops
# + prevent metadata from being removed if they contain only text nodes
# - Remove unreferenced pattern elements
# - Remove 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/
@ -205,18 +206,39 @@ def removeUnreferencedIDs(referencedIDs, identifiedElements):
num += 1
return num
# returns the number of unreferenced children removed from defs elements
def vacuumDefs(doc):
global numElemsRemoved
num = 0
defs = doc.documentElement.getElementsByTagNameNS(NS['SVG'], 'defs')
for aDef in defs:
elemsToRemove = []
for elem in aDef.childNodes:
if elem.nodeType == 1 and elem.getAttribute('id') == '' :
aDef.removeChild(elem)
numElemsRemoved += 1
num += 1
elemsToRemove.append(elem)
for elem in elemsToRemove:
aDef.removeChild(elem)
numElemsRemoved += 1
num += 1
return num
# returns the number of unreferenced gradients or patterns removed from the document
# (this relies on the ids being removed first)
def removeUnreferencedElements(doc):
global numElemsRemoved
num = 0
for tag in ['pattern', 'linearGradient', 'radialGradient'] :
elems = doc.documentElement.getElementsByTagNameNS(NS['SVG'], tag)
elemsToRemove = []
for elem in elems:
if elem.getAttribute('id') == '' :
elemsToRemove.append(elem)
for elem in elemsToRemove:
elem.parentNode.removeChild(elem)
numElemsRemoved += 1
num += 1
return num
def removeNamespacedAttributes(node, namespaces):
global numAttrsRemoved
num = 0
@ -608,6 +630,9 @@ def scourString(in_string):
elem.parentNode.removeChild(elem)
numElemsRemoved += 1
# remove unreferenced gradients/patterns outside of defs
removeUnreferencedElements(doc)
# clean path data
for elem in doc.documentElement.getElementsByTagNameNS(NS['SVG'], 'path') :
cleanPath(elem)