Skip to content

Commit

Permalink
added option to keep elements within defs
Browse files Browse the repository at this point in the history
  • Loading branch information
flosse committed Jan 12, 2014
1 parent c27ca4d commit 9bb929d
Showing 1 changed file with 14 additions and 10 deletions.
24 changes: 14 additions & 10 deletions scour/scour.py
Original file line number Diff line number Diff line change
Expand Up @@ -587,7 +587,7 @@ def removeUnusedDefs(doc, defElem, elemsToRemove=None):
elemsToRemove.append(elem)
return elemsToRemove

def removeUnreferencedElements(doc):
def removeUnreferencedElements(doc, keepDefs):
"""
Removes all unreferenced elements except for <svg>, <font>, <metadata>, <title>, and <desc>.
Also vacuums the defs of any non-referenced renderable elements.
Expand All @@ -610,14 +610,15 @@ def removeUnreferencedElements(doc):
num += 1
numElemsRemoved += 1

# 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)
numElemsRemoved += 1
num += 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)
numElemsRemoved += 1
num += 1
return num

def shortenIDs(doc, prefix, unprotectedElements=None):
Expand Down Expand Up @@ -2923,7 +2924,7 @@ def scourString(in_string, options=None):

# remove unreferenced gradients/patterns outside of defs
# and most unreferenced elements inside of defs
while removeUnreferencedElements(doc) > 0:
while removeUnreferencedElements(doc, options.keep_defs) > 0:
pass

# remove empty defs, metadata, g
Expand Down Expand Up @@ -3119,6 +3120,9 @@ def format_usage(self, usage):
_options_parser.add_option("--disable-embed-rasters",
action="store_false", dest="embed_rasters", default=True,
help="won't embed rasters as base64-encoded data")
_options_parser.add_option("--keep-unreferenced-defs",
action="store_true", dest="keep_defs", default=False,
help="won't remove elements within the defs container that are unreferenced")
_options_parser.add_option("--keep-editor-data",
action="store_true", dest="keep_editor_data", default=False,
help="won't remove Inkscape, Sodipodi or Adobe Illustrator elements and attributes")
Expand Down

0 comments on commit 9bb929d

Please sign in to comment.