diff options
Diffstat (limited to 'share/extensions/tools/generate_argparse_conf.py')
-rw-r--r-- | share/extensions/tools/generate_argparse_conf.py | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/share/extensions/tools/generate_argparse_conf.py b/share/extensions/tools/generate_argparse_conf.py new file mode 100644 index 0000000..fda9145 --- /dev/null +++ b/share/extensions/tools/generate_argparse_conf.py @@ -0,0 +1,60 @@ +# coding=utf-8 +import os +from string import Template +import xml.etree.ElementTree as ET +import argparse + +parser = argparse.ArgumentParser(description='Reads an *.inx file and generates initialization code for argparse') +parser.add_argument('input') +args = parser.parse_args() + +if os.path.isabs(args.input): + inpath = args.input +else: + folder = os.path.dirname(os.path.realpath(__file__)) + inpath = os.path.normpath(os.path.join(folder, args.input)) + +templateWithType = Template('self.arg_parser.add_argument("--$param", type=$type, dest="$param", default=$default)') +templateWithoutType = Template('self.arg_parser.add_argument("--$param", dest="$param", default=$default)') +def handle_param_node(node): + if node.attrib["type"] == 'float': + cmd = templateWithType.substitute( + param=node.attrib["name"], + type='float', + default=node.text) + print(cmd) + elif node.attrib["type"] == 'int': + cmd = templateWithType.substitute( + param=node.attrib["name"], + type='int', + default=node.text) + print(cmd) + elif node.attrib["type"] == 'boolean': + cmd = templateWithType.substitute( + param=node.attrib["name"], + type='inkex.inkbool', + default='"' + node.text + '"') + print(cmd) + elif node.attrib["type"] == 'enum': + cmd = templateWithoutType.substitute( + param=node.attrib["name"], + default='"' + node[0].text + '"') + print(cmd) + elif node.attrib["type"] == 'notebook': + cmd = templateWithoutType.substitute( + param=node.attrib["name"], + default='"' + node[0].attrib["name"] + '"') + print(cmd) + else: + # TODO: Implement other types of args + raise NotImplementedError + +def process_node(node): + for child in node: + if child.tag.endswith('param'): + handle_param_node(child) + process_node(child) + +tree = ET.parse(inpath) +root = tree.getroot() +process_node(root)
\ No newline at end of file |