diff options
author | Juergen Bocklage-Ryannel <juergen@ryannel.org> | 2018-11-22 14:38:23 +0100 |
---|---|---|
committer | Juergen Bocklage-Ryannel <juergen@ryannel.org> | 2018-11-22 14:38:23 +0100 |
commit | 22840dd0a67644afd20c1b9c4dfffa2c23cb4c6d (patch) | |
tree | d962f313c5e4e55a6126fa8b08fa5b54f82057d2 | |
parent | 56e3acc8df35c16a93a68954698cdcfdb1c1c3d4 (diff) | |
download | qtivi-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.py | 5 | ||||
-rw-r--r-- | qface/generator.py | 29 | ||||
-rw-r--r-- | qface/helper/doc.py | 6 | ||||
-rw-r--r-- | qface/helper/qtcpp.py | 6 | ||||
-rw-r--r-- | qface/templates/qface/qtcpp.j2 | 20 |
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="//") -%} |