Avoid recomputing findReferencedElements in removeUnusedDefs

The removeUnusedDefs function does not actually remove anything (that
is left for its callers to do).  This implies that
findReferencedElements will return the same value before, during and
after a call to removeUnusedDefs.  Therefore, we can reuse the value
from findReferencedElements when recursing into child nodes.

Signed-off-by: Niels Thykier <niels@thykier.net>
This commit is contained in:
Niels Thykier 2018-02-17 10:14:49 +00:00 committed by Eduard Braun
parent 633b381d87
commit b916a189e9

View file

@ -641,10 +641,13 @@ def findReferencingProperty(node, prop, val, ids):
ids[id] = [1, [node]]
def removeUnusedDefs(doc, defElem, elemsToRemove=None):
def removeUnusedDefs(doc, defElem, elemsToRemove=None, referencedIDs=None):
if elemsToRemove is None:
elemsToRemove = []
# removeUnusedDefs do not change the XML itself; therefore there is no point in
# recomputing findReferencedElements when we recurse into child nodes.
if referencedIDs is None:
referencedIDs = findReferencedElements(doc.documentElement)
keepTags = ['font', 'style', 'metadata', 'script', 'title', 'desc']
@ -655,7 +658,7 @@ def removeUnusedDefs(doc, defElem, elemsToRemove=None):
# we only inspect the children of a group in a defs if the group
# is not referenced anywhere else
if elem.nodeName == 'g' and elem.namespaceURI == NS['SVG']:
elemsToRemove = removeUnusedDefs(doc, elem, elemsToRemove)
elemsToRemove = removeUnusedDefs(doc, elem, elemsToRemove, referencedIDs=referencedIDs)
# we only remove if it is not one of our tags we always keep (see above)
elif elem.nodeName not in keepTags:
elemsToRemove.append(elem)