From 5881890e44d8c24c184a7516609d8b752180469e Mon Sep 17 00:00:00 2001 From: Niels Thykier Date: Mon, 18 May 2020 20:46:43 +0000 Subject: [PATCH] removeUnreferencedElements: Remove defs before unref elements The `removeUnusedDefs` function can take `referencedIDs` as parameter and its work do not invalidate it. By moving it up in `removeUnreferencedElements` we can save a call to `findReferencedElements` per call to `removeUnreferencedElements`. Signed-off-by: Niels Thykier --- scour/scour.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/scour/scour.py b/scour/scour.py index 18a81d2..c9eff0e 100644 --- a/scour/scour.py +++ b/scour/scour.py @@ -674,6 +674,16 @@ def removeUnreferencedElements(doc, keepDefs): identifiedElements = findElementsWithId(doc.documentElement) referencedIDs = findReferencedElements(doc.documentElement) + if not keepDefs: + # Remove most unreferenced elements inside defs + defs = doc.documentElement.getElementsByTagName('defs') + for aDef in defs: + elemsToRemove = removeUnusedDefs(doc, aDef, referencedIDs=referencedIDs) + for elem in elemsToRemove: + elem.parentNode.removeChild(elem) + _num_elements_removed += 1 + num += 1 + for id in identifiedElements: if id not in referencedIDs: goner = identifiedElements[id] @@ -684,15 +694,6 @@ def removeUnreferencedElements(doc, keepDefs): num += 1 _num_elements_removed += 1 - if not keepDefs: - # Remove most unreferenced elements inside defs - defs = doc.documentElement.getElementsByTagName('defs') - for aDef in defs: - elemsToRemove = removeUnusedDefs(doc, aDef) - for elem in elemsToRemove: - elem.parentNode.removeChild(elem) - _num_elements_removed += 1 - num += 1 return num