aboutsummaryrefslogtreecommitdiffstats
path: root/builtin/qtcpp/qtcpp.py
diff options
context:
space:
mode:
authorJuergen Bocklage-Ryannel <juergen.bocklage-ryannel@pelagicore.com>2017-01-13 10:52:19 +0100
committerJuergen Bocklage-Ryannel <juergen.bocklage-ryannel@pelagicore.com>2017-01-13 10:52:19 +0100
commitaf48c23a7180285e4159c0235b8f1a3c09fe8309 (patch)
treefd5f31c0b6c488467e3df8124683b79f28c81aaf /builtin/qtcpp/qtcpp.py
parent440e3fe4818100d9164491f609148fdcca8f7089 (diff)
Extracted the qtcpp builtin generator into own folder started to re-layout the examples folder.
Diffstat (limited to 'builtin/qtcpp/qtcpp.py')
-rwxr-xr-xbuiltin/qtcpp/qtcpp.py67
1 files changed, 67 insertions, 0 deletions
diff --git a/builtin/qtcpp/qtcpp.py b/builtin/qtcpp/qtcpp.py
new file mode 100755
index 0000000..7bf642d
--- /dev/null
+++ b/builtin/qtcpp/qtcpp.py
@@ -0,0 +1,67 @@
+#!/usr/bin/env python3
+# Copyright (c) Pelagicore AB 2016
+
+import click
+import logging
+import logging.config
+import yaml
+from path import Path
+
+from qface.generator import FileSystem, Generator
+from qface.helper.qtcpp import Filters
+
+
+here = Path(__file__).dirname()
+
+logging.config.dictConfig(yaml.load(open(here / 'log.yaml')))
+
+log = logging.getLogger(__file__)
+
+
+def run(input, output):
+ log.debug('run {0} {1}'.format(input, output))
+ system = FileSystem.parse(input)
+ generator = Generator(searchpath=here / 'templates')
+ generator.register_filter('returnType', Filters.returnType)
+ generator.register_filter('parameterType', Filters.parameterType)
+ generator.register_filter('defaultValue', Filters.defaultValue)
+ ctx = {'output': output}
+ for module in system.modules:
+ log.debug('generate code for module %s', module)
+ ctx.update({'module': module})
+ dst = generator.apply('{{output}}/{{module|lower|replace(".", "-")}}', ctx)
+ ctx.update({'dst': dst})
+ generator.write('{{dst}}/qmldir', 'qmldir', ctx, preserve=True)
+ generator.write('{{dst}}/plugin.cpp', 'plugin.cpp', ctx, preserve=True)
+ generator.write('{{dst}}/plugin.h', 'plugin.h', ctx, preserve=True)
+ generator.write('{{dst}}/{{module|lower|replace(".", "-")}}.pro', 'plugin.pro', ctx, preserve=True)
+ generator.write('{{dst}}/generated/generated.pri', 'generated.pri', ctx)
+ generator.write('{{dst}}/generated/qml{{module.module_name|lower}}module.h', 'module.h', ctx)
+ generator.write('{{dst}}/generated/qml{{module.module_name|lower}}module.cpp', 'module.cpp', ctx)
+ for interface in module.interfaces:
+ log.debug('generate code for interface %s', interface)
+ ctx.update({'interface': interface})
+ generator.write('{{dst}}/qml{{interface|lower}}.h', 'interface.h', ctx, preserve=True)
+ generator.write('{{dst}}/qml{{interface|lower}}.cpp', 'interface.cpp', ctx, preserve=True)
+ generator.write('{{dst}}/generated/qmlabstract{{interface|lower}}.h', 'abstractinterface.h', ctx)
+ generator.write('{{dst}}/generated/qmlabstract{{interface|lower}}.cpp', 'abstractinterface.cpp', ctx)
+ for struct in module.structs:
+ log.debug('generate code for struct %s', struct)
+ ctx.update({'struct': struct})
+ generator.write('{{dst}}/generated/qml{{struct|lower}}.h', 'struct.h', ctx)
+ generator.write('{{dst}}/generated/qml{{struct|lower}}.cpp', 'struct.cpp', ctx)
+ generator.write('{{dst}}/generated/qml{{struct|lower}}model.h', 'structmodel.h', ctx)
+ generator.write('{{dst}}/generated/qml{{struct|lower}}model.cpp', 'structmodel.cpp', ctx)
+
+
+@click.command()
+@click.argument('input', nargs=-1, type=click.Path(exists=True))
+@click.argument('output', nargs=1, type=click.Path(exists=True))
+def app(input, output):
+ """Takes several files or directories as input and generates the code
+ in the given output directory."""
+ run(input, output)
+
+
+if __name__ == '__main__':
+ app()