# Authors: see git history # # Copyright (c) 2010 Authors # Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details. from inkex import NSS, Boolean from ..commands import find_commands from ..svg.svg import find_elements from ..svg.tags import EMBROIDERABLE_TAGS, SVG_GROUP_TAG from .base import InkstitchExtension class RemoveEmbroiderySettings(InkstitchExtension): def __init__(self, *args, **kwargs): InkstitchExtension.__init__(self, *args, **kwargs) self.arg_parser.add_argument("-p", "--del_params", dest="del_params", type=Boolean, default=True) self.arg_parser.add_argument("-c", "--del_commands", dest="del_commands", type=Boolean, default=False) self.arg_parser.add_argument("-d", "--del_print", dest="del_print", type=Boolean, default=False) def effect(self): self.svg = self.document.getroot() if self.options.del_params: self.remove_params() if self.options.del_commands: self.remove_commands() if self.options.del_print: self.remove_print_settings() def remove_print_settings(self): print_settings = "svg:metadata//*" print_settings = find_elements(self.svg, print_settings) for print_setting in print_settings: if print_setting.prefix == "inkstitch": self.remove_element(print_setting) def remove_params(self): if not self.svg.selected: xpath = ".//svg:path|.//svg:circle|.//svg:rect|.//svg:ellipse" elements = find_elements(self.svg, xpath) self.remove_inkstitch_attributes(elements) else: elements = self.get_selected_elements() self.remove_inkstitch_attributes(elements) def remove_commands(self): if not self.svg.selected: # we are not able to grab commands by a specific id # so let's move through every object instead and see if it has a command xpath = ".//svg:path|.//svg:circle|.//svg:rect|.//svg:ellipse" elements = find_elements(self.svg, xpath) else: elements = self.get_selected_elements() if elements: for element in elements: for command in find_commands(element): group = command.connector.getparent() group.getparent().remove(group) if not self.svg.selected: # remove standalone commands standalone_commands = ".//svg:use[starts-with(@xlink:href, '#inkstitch_')]" self.remove_elements(standalone_commands) # let's remove the symbols (defs), we won't need them in the document symbols = ".//*[starts-with(@id, 'inkstitch_')]" self.remove_elements(symbols) def get_selected_elements(self): elements = [] for node in self.svg.selected.values(): if node.tag == SVG_GROUP_TAG: for child in node.iterdescendants(EMBROIDERABLE_TAGS): elements.append(child) else: elements.append(node) return elements def remove_elements(self, xpath): elements = find_elements(self.svg, xpath) for element in elements: self.remove_element(element) def remove_element(self, element): element.getparent().remove(element) def remove_inkstitch_attributes(self, elements): for element in elements: for attrib in element.attrib: if attrib.startswith(NSS['inkstitch'], 1): del element.attrib[attrib]