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
parent 8543368a6e
commit 35fa0843a9

View file

@ -641,11 +641,14 @@ def findReferencingProperty(node, prop, val, ids):
ids[id] = [1, [node]] ids[id] = [1, [node]]
def removeUnusedDefs(doc, defElem, elemsToRemove=None): def removeUnusedDefs(doc, defElem, elemsToRemove=None, referencedIDs=None):
if elemsToRemove is None: if elemsToRemove is None:
elemsToRemove = [] elemsToRemove = []
referencedIDs = findReferencedElements(doc.documentElement) # 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'] keepTags = ['font', 'style', 'metadata', 'script', 'title', 'desc']
for elem in defElem.childNodes: for elem in defElem.childNodes:
@ -655,7 +658,7 @@ def removeUnusedDefs(doc, defElem, elemsToRemove=None):
# we only inspect the children of a group in a defs if the group # we only inspect the children of a group in a defs if the group
# is not referenced anywhere else # is not referenced anywhere else
if elem.nodeName == 'g' and elem.namespaceURI == NS['SVG']: 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) # we only remove if it is not one of our tags we always keep (see above)
elif elem.nodeName not in keepTags: elif elem.nodeName not in keepTags:
elemsToRemove.append(elem) elemsToRemove.append(elem)