mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 05:00:20 +00:00
8a3a0edb83
Unfortunately Coverity doesn't understand that most Qt data structures are copy-on-write. It's a mis-feature of Qt, but it is the way it is. Thus, passing by value is not an issue. Out of ca. 25 warnings only two were legit. Let's silence the others by either std::move()ing or passing by reference, as would be idiomatic C++, which Qt is not. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
60 lines
1.9 KiB
C++
60 lines
1.9 KiB
C++
// SPDX-License-Identifier: GPL-2.0
|
|
#ifndef TEMPLATELAYOUT_H
|
|
#define TEMPLATELAYOUT_H
|
|
|
|
#include "core/statistics.h"
|
|
#include "core/equipment.h"
|
|
#include <QStringList>
|
|
|
|
struct print_options;
|
|
struct template_options;
|
|
class QTextStream;
|
|
|
|
void find_all_templates();
|
|
void set_bundled_templates_as_read_only();
|
|
void copy_bundled_templates(QString src, const QString &dst, QStringList *templateBackupList);
|
|
|
|
enum token_t {LITERAL, FORSTART, FORSTOP, BLOCKSTART, BLOCKSTOP, IFSTART, IFSTOP, PARSERERROR};
|
|
|
|
struct token {
|
|
enum token_t type;
|
|
QString contents;
|
|
};
|
|
|
|
extern QList<QString> grantlee_templates, grantlee_statistics_templates;
|
|
|
|
class TemplateLayout : public QObject {
|
|
Q_OBJECT
|
|
public:
|
|
TemplateLayout(const print_options &printOptions, const template_options &templateOptions);
|
|
QString generate(const std::vector<dive *> &dives);
|
|
QString generateStatistics();
|
|
static QString readTemplate(QString template_name);
|
|
static void writeTemplate(QString template_name, QString grantlee_template);
|
|
int numDives; // valid after a call to generate()
|
|
|
|
private:
|
|
struct State {
|
|
QList<const dive *> dives;
|
|
QList<stats_t *> years;
|
|
QMap<QString, QString> types;
|
|
int forloopiterator = -1;
|
|
const dive * const *currentDive = nullptr;
|
|
const stats_t * const *currentYear = nullptr;
|
|
const QString *currentCylinder = nullptr;
|
|
const cylinder_t * const *currentCylinderObject = nullptr;
|
|
};
|
|
const print_options &printOptions;
|
|
const template_options &templateOptions;
|
|
QList<token> lexer(QString input);
|
|
void parser(QList<token> tokenList, int from, int to, QTextStream &out, State &state);
|
|
template<typename V, typename T>
|
|
void parser_for(QList<token> tokenList, int from, int to, QTextStream &out, State &state, const V &data, const T *&act, bool emitProgress);
|
|
QVariant getValue(QString list, QString property, const State &state);
|
|
QString translate(QString s, State &state);
|
|
|
|
signals:
|
|
void progressUpdated(int value);
|
|
};
|
|
|
|
#endif
|