#pragma once #include "codegen_export.h" #include "XmlReader.h" #include #include namespace NGL { class INGLLogger; } namespace Grantlee { class Context; class Engine; class TemplateImpl; using Template = QSharedPointer; } namespace CodeGen { class StructBuilder; class GeneratorGrantleeBase : public QObject { Q_OBJECT public: virtual ~GeneratorGrantleeBase(); virtual bool init(const XmlReader *reader, StructBuilder *structBuilder) = 0; bool setTemplate(const QString &templateName, const QString &tmpl); QString render() const; QString errorString() const; bool generateData(const QString &templateName, const QString &outDirectory); protected: explicit GeneratorGrantleeBase(const char *loggerName); bool initInternal(const XmlReader *reader, StructBuilder *structBuilder); bool readFile(const QString &filename, QString &data) const; bool getFilenameFromData(const QString &dataToParse, QString &filename) const; void addCustomFunctions(const QVector &customFunctions); void exportUsedServices(const XmlReader *reader); protected: Grantlee::Engine *m_engine; Grantlee::Context *m_ctx; Grantlee::Template m_template; StructBuilder *m_structBuilder; NGL::INGLLogger &m_logger; }; }