summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuergen Bocklage-Ryannel <juergen@ryannel.org>2018-11-22 14:38:23 +0100
committerJuergen Bocklage-Ryannel <juergen@ryannel.org>2018-11-22 14:38:23 +0100
commit22840dd0a67644afd20c1b9c4dfffa2c23cb4c6d (patch)
treed962f313c5e4e55a6126fa8b08fa5b54f82057d2
parent56e3acc8df35c16a93a68954698cdcfdb1c1c3d4 (diff)
downloadqtivi-qface-22840dd0a67644afd20c1b9c4dfffa2c23cb4c6d.tar.gz
- update macros to use ns filters
- add path to generator out = dest / path / document - pre-register qtml/qtcpp/doc/basic filters
-rw-r--r--qface/filters.py5
-rw-r--r--qface/generator.py29
-rw-r--r--qface/helper/doc.py6
-rw-r--r--qface/helper/qtcpp.py6
-rw-r--r--qface/templates/qface/qtcpp.j220
5 files changed, 48 insertions, 18 deletions
diff --git a/qface/filters.py b/qface/filters.py
index eba3c55..5969a64 100644
--- a/qface/filters.py
+++ b/qface/filters.py
@@ -1,6 +1,9 @@
import json
import hashlib
from .helper import qtqml
+from .helper import qtcpp
+from .helper import doc
+
def jsonify(symbol):
""" returns json format for symbol """
@@ -51,3 +54,5 @@ filters = {
}
filters.update(qtqml.Filters.get_filters())
+filters.update(qtcpp.Filters.get_filters())
+filters.update(doc.get_filters())
diff --git a/qface/generator.py b/qface/generator.py
index b19cfa2..eb3172d 100644
--- a/qface/generator.py
+++ b/qface/generator.py
@@ -96,6 +96,7 @@ class Generator(object):
self.env.exception_handler = template_error_handler
self.env.filters.update(filters)
self._destination = Path()
+ self._path = Path()
self._source = ''
self.context = context
self.force = force
@@ -107,8 +108,21 @@ class Generator(object):
@destination.setter
def destination(self, dst):
- if dst:
- self._destination = Path(self.apply(dst, self.context))
+ self._destination = dst
+
+ @property
+ def resolved_path(self):
+ return self.destination / self.path
+
+ @property
+ def path(self):
+ return self._path
+
+ @path.setter
+ def path(self, path):
+ if not path:
+ return
+ self._path = Path(self.apply(path))
@property
def source(self):
@@ -147,7 +161,8 @@ class Generator(object):
template = self.get_template(name)
return template.render(context)
- def apply(self, template, context):
+ def apply(self, template, context={}):
+ context.update(self.context)
"""Return the rendered text of a template instance"""
return self.env.from_string(template).render(context)
@@ -177,7 +192,7 @@ class Generator(object):
def _write(self, file_path: Path, template: str, context: dict, preserve: bool = False, force: bool = False):
force = self.force or force
- path = self.destination / Path(self.apply(file_path, context))
+ path = self.resolved_path / Path(self.apply(file_path, context))
path.parent.makedirs_p()
logger.info('write {0}'.format(path))
data = self.render(template, context)
@@ -209,7 +224,7 @@ class RuleGenerator(Generator):
'project': Path(destination).name,
'features': features,
})
- self.destination = '{{dst}}'
+ self.destination = destination
self.features = features
def process_rules(self, path: Path, system: System):
@@ -228,7 +243,7 @@ class RuleGenerator(Generator):
if not self._shall_proceed(rules):
return
self.context.update(rules.get('context', {}))
- self.destination = rules.get('destination', '{{dst}}')
+ self.path = rules.get('path', '')
self.source = rules.get('source', None)
self._process_rule(rules.get('system', None), {'system': system})
for module in system.modules:
@@ -246,7 +261,7 @@ class RuleGenerator(Generator):
return
self.context.update(context)
self.context.update(rule.get('context', {}))
- self.destination = rule.get('destination', None)
+ self.path = rule.get('path', None)
self.source = rule.get('source', None)
for entry in rule.get('documents', []):
target, source = self._resolve_rule_document(entry)
diff --git a/qface/helper/doc.py b/qface/helper/doc.py
index 2b1df51..2b99b57 100644
--- a/qface/helper/doc.py
+++ b/qface/helper/doc.py
@@ -83,3 +83,9 @@ def parse_doc(s):
else: # append any loose lines to description
doc.add_tag('description', line)
return doc
+
+
+def get_filters():
+ return {
+ 'parse_doc': parse_doc,
+ }
diff --git a/qface/helper/qtcpp.py b/qface/helper/qtcpp.py
index 1ffa865..aeae6f0 100644
--- a/qface/helper/qtcpp.py
+++ b/qface/helper/qtcpp.py
@@ -3,7 +3,11 @@ Provides helper functionality specificially for Qt C++/QML code generators
"""
import qface.idl.domain as domain
from jinja2 import environmentfilter
-from ..filters import upper_first
+
+
+def upper_first(s):
+ s = str(s)
+ return s[0].upper() + s[1:]
class Filters(object):
diff --git a/qface/templates/qface/qtcpp.j2 b/qface/templates/qface/qtcpp.j2
index 67b68f8..729bfc9 100644
--- a/qface/templates/qface/qtcpp.j2
+++ b/qface/templates/qface/qtcpp.j2
@@ -14,15 +14,15 @@
{%- endmacro %}
{% macro property_decl(property, notifiable=True) -%}
-Q_PROPERTY({{property|returnType}} {{property}} READ {{property}} {% if not property.readonly %}WRITE set{{property|upperfirst}}{% endif %}{% if not property.const and notifiable %} NOTIFY {{property}}Changed{% endif %})
+Q_PROPERTY({{property|qt.returnType}} {{property}} READ {{property}} {% if not property.readonly %}WRITE set{{property|upperfirst}}{% endif %}{% if not property.const and notifiable %} NOTIFY {{property}}Changed{% endif %})
{%- endmacro %}
{% macro property_setter_decl(property, ending=";") -%}
-void set{{property|upperfirst}}({{ property|parameterType }}){{ending}}
+void set{{property|upperfirst}}({{ property|qt.parameterType }}){{ending}}
{%- endmacro %}
{% macro property_getter_decl(property, ending=";") -%}
-{{property|returnType}} {{property}}() const{{ending}}
+{{property|qt.returnType}} {{property}}() const{{ending}}
{%- endmacro %}
{% macro signal_decl(symbol, postfix="") -%}
@@ -30,7 +30,7 @@ void {{symbol}}{{postfix}}();
{%- endmacro %}
{% macro property_member_decl(property) -%}
-{{property|returnType}} m_{{property}};
+{{property|qt.returnType}} m_{{property}};
{%- endmacro %}
{% macro property_setter_impl(class, property, notifiable=True) -%}
@@ -41,7 +41,7 @@ void {{symbol}}{{postfix}}();
{{doc.description|join("\n ")}}
{% endwith %}
*/
-void {{class}}::set{{property|upperfirst}}({{ property|parameterType }})
+void {{class}}::set{{property|upperfirst}}({{ property|qt.parameterType }})
{
{% if notifiable %}
if (m_{{property}} != {{property}}) {
@@ -56,7 +56,7 @@ void {{class}}::set{{property|upperfirst}}({{ property|parameterType }})
{% macro property_getter_impl(class, property) -%}
-{{property|returnType}} {{class}}::{{property}}() const
+{{property|qt.returnType}} {{class}}::{{property}}() const
{
return m_{{property}};
}
@@ -65,24 +65,24 @@ void {{class}}::set{{property|upperfirst}}({{ property|parameterType }})
{% macro operation_impl(class, operation) -%}
/*!
- \qmlmethod {{operation.type}} {{class}}::{{operation}}({{operation|parameters}})
+ \qmlmethod {{operation.type}} {{class}}::{{operation}}({{operation|qt.parameters}})
{% with doc = operation.comment|parse_doc %}
\brief {{doc.brief}}
{{doc.description|join("\n ")}}
{% endwith %}
*/
-{{operation|returnType}} {{class}}::{{operation}}({{operation|parameters}})
+{{operation|qt.returnType}} {{class}}::{{operation}}({{operation|qt.parameters}})
{
{% for parameter in operation.parameters %}
Q_UNUSED({{parameter.name}});
{% endfor %}
qWarning() << "{{class}}::{{operation}}(...) not implemented";
- return {{operation|defaultValue}};
+ return {{operation|qt.defaultValue}};
}
{%- endmacro %}
{% macro operation_decl(operation, ending=";") -%}
- virtual {{operation|returnType}} {{operation}}({{operation|parameters}}){{ending}}
+ virtual {{operation|qt.returnType}} {{operation}}({{operation|qt.parameters}}){{ending}}
{%- endmacro %}
{% macro autogenerated(prefix="//") -%}