added option to keep elements within defs

This commit is contained in:
Markus Kohlhase 2014-01-12 17:10:02 +01:00
parent c27ca4db8a
commit 9bb929d91e

View file

@ -587,7 +587,7 @@ def removeUnusedDefs(doc, defElem, elemsToRemove=None):
elemsToRemove.append(elem) elemsToRemove.append(elem)
return elemsToRemove return elemsToRemove
def removeUnreferencedElements(doc): def removeUnreferencedElements(doc, keepDefs):
""" """
Removes all unreferenced elements except for <svg>, <font>, <metadata>, <title>, and <desc>. Removes all unreferenced elements except for <svg>, <font>, <metadata>, <title>, and <desc>.
Also vacuums the defs of any non-referenced renderable elements. Also vacuums the defs of any non-referenced renderable elements.
@ -610,6 +610,7 @@ def removeUnreferencedElements(doc):
num += 1 num += 1
numElemsRemoved += 1 numElemsRemoved += 1
if not keepDefs:
# Remove most unreferenced elements inside defs # Remove most unreferenced elements inside defs
defs = doc.documentElement.getElementsByTagName('defs') defs = doc.documentElement.getElementsByTagName('defs')
for aDef in defs: for aDef in defs:
@ -2923,7 +2924,7 @@ def scourString(in_string, options=None):
# remove unreferenced gradients/patterns outside of defs # remove unreferenced gradients/patterns outside of defs
# and most unreferenced elements inside of defs # and most unreferenced elements inside of defs
while removeUnreferencedElements(doc) > 0: while removeUnreferencedElements(doc, options.keep_defs) > 0:
pass pass
# remove empty defs, metadata, g # remove empty defs, metadata, g
@ -3119,6 +3120,9 @@ _options_parser.add_option("--shorten-ids-prefix",
_options_parser.add_option("--disable-embed-rasters", _options_parser.add_option("--disable-embed-rasters",
action="store_false", dest="embed_rasters", default=True, action="store_false", dest="embed_rasters", default=True,
help="won't embed rasters as base64-encoded data") 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", _options_parser.add_option("--keep-editor-data",
action="store_true", dest="keep_editor_data", default=False, action="store_true", dest="keep_editor_data", default=False,
help="won't remove Inkscape, Sodipodi or Adobe Illustrator elements and attributes") help="won't remove Inkscape, Sodipodi or Adobe Illustrator elements and attributes")