#!/usr/bin/env python3 import sys, inkex, os options = { "cleanupAttrs": True, "removeDoctype": True, "removeXMLProcInst": True, "removeComments": True, "removeMetadata": True, "removeTitle": False, "removeDesc": True, "removeUselessDefs": True, "removeEditorsNSData": True, "removeEmptyAttrs": True, "removeHiddenElems": True, "removeEmptyText": True, "removeEmptyContainers": True, "removeViewBox": True, "cleanupEnableBackground": True, "convertStyleToAttrs": True, "convertColors": True, "convertPathData": True, "convertTransform": True, "removeUnknownsAndDefaults": True, "removeNonInheritableGroupAttrs": True, "removeUselessStrokeAndFill": True, "removeUnusedNS": True, "cleanupIDs": True, "cleanupNumericValues": True, "moveElemsAttrsToGroup": True, "moveGroupAttrsToElems": True, "collapseGroups": True, "removeRasterImages": False, "mergePaths": True, "convertShapeToPath": True, "sortAttrs": False, "transformsWithOnePath": False, "removeDimensions": False, "removeAttrs": False, "addClassesToSVGElement": False } class SVGOOutput(inkex.EffectExtension): def __init__(self): inkex.Effect.__init__(self) self.arg_parser.add_argument("--tabs", type=str, dest="tab") for key in options: self.arg_parser.add_argument("--" + key, type=inkex.Boolean, dest=key, default=options[key]) def getCommand(self, name, option): return " --"+ name + " " + str(option).lower() def effect(self): # "node.exe" or "node" on Windows or just "node" on Linux command = "node svgo.js --file=" + self.options.input_file optionsDict = self.options.__dict__ for key in options: command += self.getCommand(key, optionsDict[key]) p = os.popen(command) result = p.read() p.close() sys.stdout.write(result) sys.stdout.close() if __name__ == '__main__': SVGOOutput().run()