mirror of
https://github.com/pantor/inja.git
synced 2026-02-17 09:03:58 +00:00
fix some clang-tidy warnings
This commit is contained in:
@@ -164,7 +164,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::string load_file(const std::string& filename) {
|
std::string load_file(const std::string& filename) {
|
||||||
Parser parser(parser_config, lexer_config, template_storage, function_storage);
|
const Parser parser(parser_config, lexer_config, template_storage, function_storage);
|
||||||
return Parser::load_file(input_path / filename);
|
return Parser::load_file(input_path / filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ public:
|
|||||||
|
|
||||||
size_t pos;
|
size_t pos;
|
||||||
|
|
||||||
AstNode(size_t pos): pos(pos) {}
|
explicit AstNode(size_t pos): pos(pos) {}
|
||||||
virtual ~AstNode() {}
|
virtual ~AstNode() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -73,7 +73,7 @@ public:
|
|||||||
|
|
||||||
explicit BlockNode(): AstNode(0) {}
|
explicit BlockNode(): AstNode(0) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -84,7 +84,7 @@ public:
|
|||||||
|
|
||||||
explicit TextNode(size_t pos, size_t length): AstNode(pos), length(length) {}
|
explicit TextNode(size_t pos, size_t length): AstNode(pos), length(length) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -93,7 +93,7 @@ class ExpressionNode : public AstNode {
|
|||||||
public:
|
public:
|
||||||
explicit ExpressionNode(size_t pos): AstNode(pos) {}
|
explicit ExpressionNode(size_t pos): AstNode(pos) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -104,7 +104,7 @@ public:
|
|||||||
|
|
||||||
explicit LiteralNode(std::string_view data_text, size_t pos): ExpressionNode(pos), value(json::parse(data_text)) {}
|
explicit LiteralNode(std::string_view data_text, size_t pos): ExpressionNode(pos), value(json::parse(data_text)) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -127,7 +127,7 @@ public:
|
|||||||
|
|
||||||
explicit DataNode(std::string_view ptr_name, size_t pos): ExpressionNode(pos), name(ptr_name), ptr(json::json_pointer(convert_dot_to_ptr(ptr_name))) {}
|
explicit DataNode(std::string_view ptr_name, size_t pos): ExpressionNode(pos), name(ptr_name), ptr(json::json_pointer(convert_dot_to_ptr(ptr_name))) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -247,7 +247,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -259,14 +259,14 @@ public:
|
|||||||
explicit ExpressionListNode(): AstNode(0) {}
|
explicit ExpressionListNode(): AstNode(0) {}
|
||||||
explicit ExpressionListNode(size_t pos): AstNode(pos) {}
|
explicit ExpressionListNode(size_t pos): AstNode(pos) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class StatementNode : public AstNode {
|
class StatementNode : public AstNode {
|
||||||
public:
|
public:
|
||||||
StatementNode(size_t pos): AstNode(pos) {}
|
explicit StatementNode(size_t pos): AstNode(pos) {}
|
||||||
|
|
||||||
virtual void accept(NodeVisitor& v) const = 0;
|
virtual void accept(NodeVisitor& v) const = 0;
|
||||||
};
|
};
|
||||||
@@ -277,7 +277,7 @@ public:
|
|||||||
BlockNode body;
|
BlockNode body;
|
||||||
BlockNode* const parent;
|
BlockNode* const parent;
|
||||||
|
|
||||||
ForStatementNode(BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent) {}
|
explicit ForStatementNode(BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent) {}
|
||||||
|
|
||||||
virtual void accept(NodeVisitor& v) const = 0;
|
virtual void accept(NodeVisitor& v) const = 0;
|
||||||
};
|
};
|
||||||
@@ -288,7 +288,7 @@ public:
|
|||||||
|
|
||||||
explicit ForArrayStatementNode(const std::string& value, BlockNode* const parent, size_t pos): ForStatementNode(parent, pos), value(value) {}
|
explicit ForArrayStatementNode(const std::string& value, BlockNode* const parent, size_t pos): ForStatementNode(parent, pos), value(value) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -301,7 +301,7 @@ public:
|
|||||||
explicit ForObjectStatementNode(const std::string& key, const std::string& value, BlockNode* const parent, size_t pos)
|
explicit ForObjectStatementNode(const std::string& key, const std::string& value, BlockNode* const parent, size_t pos)
|
||||||
: ForStatementNode(parent, pos), key(key), value(value) {}
|
: ForStatementNode(parent, pos), key(key), value(value) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -319,7 +319,7 @@ public:
|
|||||||
explicit IfStatementNode(BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent), is_nested(false) {}
|
explicit IfStatementNode(BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent), is_nested(false) {}
|
||||||
explicit IfStatementNode(bool is_nested, BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent), is_nested(is_nested) {}
|
explicit IfStatementNode(bool is_nested, BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent), is_nested(is_nested) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -330,7 +330,7 @@ public:
|
|||||||
|
|
||||||
explicit IncludeStatementNode(const std::string& file, size_t pos): StatementNode(pos), file(file) {}
|
explicit IncludeStatementNode(const std::string& file, size_t pos): StatementNode(pos), file(file) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -341,7 +341,7 @@ public:
|
|||||||
|
|
||||||
explicit ExtendsStatementNode(const std::string& file, size_t pos): StatementNode(pos), file(file) {}
|
explicit ExtendsStatementNode(const std::string& file, size_t pos): StatementNode(pos), file(file) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -354,7 +354,7 @@ public:
|
|||||||
|
|
||||||
explicit BlockStatementNode(BlockNode* const parent, const std::string& name, size_t pos): StatementNode(pos), name(name), parent(parent) {}
|
explicit BlockStatementNode(BlockNode* const parent, const std::string& name, size_t pos): StatementNode(pos), name(name), parent(parent) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -366,7 +366,7 @@ public:
|
|||||||
|
|
||||||
explicit SetStatementNode(const std::string& key, size_t pos): StatementNode(pos), key(key) {}
|
explicit SetStatementNode(const std::string& key, size_t pos): StatementNode(pos), key(key) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -48,11 +48,11 @@ class Parser {
|
|||||||
std::stack<ForStatementNode*> for_statement_stack;
|
std::stack<ForStatementNode*> for_statement_stack;
|
||||||
std::stack<BlockStatementNode*> block_statement_stack;
|
std::stack<BlockStatementNode*> block_statement_stack;
|
||||||
|
|
||||||
inline void throw_parser_error(const std::string& message) const {
|
void throw_parser_error(const std::string& message) const {
|
||||||
INJA_THROW(ParserError(message, lexer.current_position()));
|
INJA_THROW(ParserError(message, lexer.current_position()));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void get_next_token() {
|
void get_next_token() {
|
||||||
if (have_peek_tok) {
|
if (have_peek_tok) {
|
||||||
tok = peek_tok;
|
tok = peek_tok;
|
||||||
have_peek_tok = false;
|
have_peek_tok = false;
|
||||||
@@ -61,19 +61,19 @@ class Parser {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void get_peek_token() {
|
void get_peek_token() {
|
||||||
if (!have_peek_tok) {
|
if (!have_peek_tok) {
|
||||||
peek_tok = lexer.scan();
|
peek_tok = lexer.scan();
|
||||||
have_peek_tok = true;
|
have_peek_tok = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void add_literal(Arguments &arguments, const char* content_ptr) {
|
void add_literal(Arguments &arguments, const char* content_ptr) {
|
||||||
const std::string_view data_text(literal_start.data(), tok.text.data() - literal_start.data() + tok.text.size());
|
const std::string_view data_text(literal_start.data(), tok.text.data() - literal_start.data() + tok.text.size());
|
||||||
arguments.emplace_back(std::make_shared<LiteralNode>(data_text, data_text.data() - content_ptr));
|
arguments.emplace_back(std::make_shared<LiteralNode>(data_text, data_text.data() - content_ptr));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void add_operator(Arguments &arguments, OperatorStack &operator_stack) {
|
void add_operator(Arguments &arguments, OperatorStack &operator_stack) {
|
||||||
auto function = operator_stack.top();
|
auto function = operator_stack.top();
|
||||||
operator_stack.pop();
|
operator_stack.pop();
|
||||||
|
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ class Renderer : public NodeVisitor {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const BlockNode& node) {
|
void visit(const BlockNode& node) override {
|
||||||
for (const auto& n : node.nodes) {
|
for (const auto& n : node.nodes) {
|
||||||
n->accept(*this);
|
n->accept(*this);
|
||||||
|
|
||||||
@@ -206,17 +206,17 @@ class Renderer : public NodeVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const TextNode& node) {
|
void visit(const TextNode& node) override {
|
||||||
output_stream->write(current_template->content.c_str() + node.pos, node.length);
|
output_stream->write(current_template->content.c_str() + node.pos, node.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const ExpressionNode&) {}
|
void visit(const ExpressionNode&) override {}
|
||||||
|
|
||||||
void visit(const LiteralNode& node) {
|
void visit(const LiteralNode& node) override {
|
||||||
data_eval_stack.push(&node.value);
|
data_eval_stack.push(&node.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const DataNode& node) {
|
void visit(const DataNode& node) override {
|
||||||
if (additional_data.contains(node.ptr)) {
|
if (additional_data.contains(node.ptr)) {
|
||||||
data_eval_stack.push(&(additional_data[node.ptr]));
|
data_eval_stack.push(&(additional_data[node.ptr]));
|
||||||
} else if (data_input->contains(node.ptr)) {
|
} else if (data_input->contains(node.ptr)) {
|
||||||
@@ -236,7 +236,7 @@ class Renderer : public NodeVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const FunctionNode& node) {
|
void visit(const FunctionNode& node) override {
|
||||||
switch (node.operation) {
|
switch (node.operation) {
|
||||||
case Op::Not: {
|
case Op::Not: {
|
||||||
const auto args = get_arguments<1>(node);
|
const auto args = get_arguments<1>(node);
|
||||||
@@ -516,15 +516,15 @@ class Renderer : public NodeVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const ExpressionListNode& node) {
|
void visit(const ExpressionListNode& node) override {
|
||||||
print_data(eval_expression_list(node));
|
print_data(eval_expression_list(node));
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const StatementNode&) {}
|
void visit(const StatementNode&) override {}
|
||||||
|
|
||||||
void visit(const ForStatementNode&) {}
|
void visit(const ForStatementNode&) override {}
|
||||||
|
|
||||||
void visit(const ForArrayStatementNode& node) {
|
void visit(const ForArrayStatementNode& node) override {
|
||||||
const auto result = eval_expression_list(node.condition);
|
const auto result = eval_expression_list(node.condition);
|
||||||
if (!result->is_array()) {
|
if (!result->is_array()) {
|
||||||
throw_renderer_error("object must be an array", node);
|
throw_renderer_error("object must be an array", node);
|
||||||
@@ -563,7 +563,7 @@ class Renderer : public NodeVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const ForObjectStatementNode& node) {
|
void visit(const ForObjectStatementNode& node) override {
|
||||||
const auto result = eval_expression_list(node.condition);
|
const auto result = eval_expression_list(node.condition);
|
||||||
if (!result->is_object()) {
|
if (!result->is_object()) {
|
||||||
throw_renderer_error("object must be an object", node);
|
throw_renderer_error("object must be an object", node);
|
||||||
@@ -602,7 +602,7 @@ class Renderer : public NodeVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const IfStatementNode& node) {
|
void visit(const IfStatementNode& node) override {
|
||||||
const auto result = eval_expression_list(node.condition);
|
const auto result = eval_expression_list(node.condition);
|
||||||
if (truthy(result.get())) {
|
if (truthy(result.get())) {
|
||||||
node.true_statement.accept(*this);
|
node.true_statement.accept(*this);
|
||||||
@@ -611,7 +611,7 @@ class Renderer : public NodeVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const IncludeStatementNode& node) {
|
void visit(const IncludeStatementNode& node) override {
|
||||||
auto sub_renderer = Renderer(config, template_storage, function_storage);
|
auto sub_renderer = Renderer(config, template_storage, function_storage);
|
||||||
const auto included_template_it = template_storage.find(node.file);
|
const auto included_template_it = template_storage.find(node.file);
|
||||||
if (included_template_it != template_storage.end()) {
|
if (included_template_it != template_storage.end()) {
|
||||||
@@ -621,7 +621,7 @@ class Renderer : public NodeVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const ExtendsStatementNode& node) {
|
void visit(const ExtendsStatementNode& node) override {
|
||||||
const auto included_template_it = template_storage.find(node.file);
|
const auto included_template_it = template_storage.find(node.file);
|
||||||
if (included_template_it != template_storage.end()) {
|
if (included_template_it != template_storage.end()) {
|
||||||
const Template* parent_template = &included_template_it->second;
|
const Template* parent_template = &included_template_it->second;
|
||||||
@@ -632,7 +632,7 @@ class Renderer : public NodeVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const BlockStatementNode& node) {
|
void visit(const BlockStatementNode& node) override {
|
||||||
const size_t old_level = current_level;
|
const size_t old_level = current_level;
|
||||||
current_level = 0;
|
current_level = 0;
|
||||||
current_template = template_stack.front();
|
current_template = template_stack.front();
|
||||||
@@ -646,7 +646,7 @@ class Renderer : public NodeVisitor {
|
|||||||
current_template = template_stack.back();
|
current_template = template_stack.back();
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const SetStatementNode& node) {
|
void visit(const SetStatementNode& node) override {
|
||||||
std::string ptr = node.key;
|
std::string ptr = node.key;
|
||||||
replace_substring(ptr, ".", "/");
|
replace_substring(ptr, ".", "/");
|
||||||
ptr = "/" + ptr;
|
ptr = "/" + ptr;
|
||||||
@@ -654,7 +654,7 @@ class Renderer : public NodeVisitor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Renderer(const RenderConfig& config, const TemplateStorage& template_storage, const FunctionStorage& function_storage)
|
explicit Renderer(const RenderConfig& config, const TemplateStorage& template_storage, const FunctionStorage& function_storage)
|
||||||
: config(config), template_storage(template_storage), function_storage(function_storage) {}
|
: config(config), template_storage(template_storage), function_storage(function_storage) {}
|
||||||
|
|
||||||
void render_to(std::ostream& os, const Template& tmpl, const json& data, json* loop_data = nullptr) {
|
void render_to(std::ostream& os, const Template& tmpl, const json& data, json* loop_data = nullptr) {
|
||||||
|
|||||||
@@ -9,58 +9,58 @@ namespace inja {
|
|||||||
* \brief A class for counting statistics on a Template.
|
* \brief A class for counting statistics on a Template.
|
||||||
*/
|
*/
|
||||||
class StatisticsVisitor : public NodeVisitor {
|
class StatisticsVisitor : public NodeVisitor {
|
||||||
void visit(const BlockNode& node) {
|
void visit(const BlockNode& node) override {
|
||||||
for (const auto& n : node.nodes) {
|
for (const auto& n : node.nodes) {
|
||||||
n->accept(*this);
|
n->accept(*this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const TextNode&) {}
|
void visit(const TextNode&) override {}
|
||||||
void visit(const ExpressionNode&) {}
|
void visit(const ExpressionNode&) override {}
|
||||||
void visit(const LiteralNode&) {}
|
void visit(const LiteralNode&) override {}
|
||||||
|
|
||||||
void visit(const DataNode&) {
|
void visit(const DataNode&) override {
|
||||||
variable_counter += 1;
|
variable_counter += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const FunctionNode& node) {
|
void visit(const FunctionNode& node) override {
|
||||||
for (const auto& n : node.arguments) {
|
for (const auto& n : node.arguments) {
|
||||||
n->accept(*this);
|
n->accept(*this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const ExpressionListNode& node) {
|
void visit(const ExpressionListNode& node) override {
|
||||||
node.root->accept(*this);
|
node.root->accept(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const StatementNode&) {}
|
void visit(const StatementNode&) override {}
|
||||||
void visit(const ForStatementNode&) {}
|
void visit(const ForStatementNode&) override {}
|
||||||
|
|
||||||
void visit(const ForArrayStatementNode& node) {
|
void visit(const ForArrayStatementNode& node) override {
|
||||||
node.condition.accept(*this);
|
node.condition.accept(*this);
|
||||||
node.body.accept(*this);
|
node.body.accept(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const ForObjectStatementNode& node) {
|
void visit(const ForObjectStatementNode& node) override {
|
||||||
node.condition.accept(*this);
|
node.condition.accept(*this);
|
||||||
node.body.accept(*this);
|
node.body.accept(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const IfStatementNode& node) {
|
void visit(const IfStatementNode& node) override {
|
||||||
node.condition.accept(*this);
|
node.condition.accept(*this);
|
||||||
node.true_statement.accept(*this);
|
node.true_statement.accept(*this);
|
||||||
node.false_statement.accept(*this);
|
node.false_statement.accept(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const IncludeStatementNode&) {}
|
void visit(const IncludeStatementNode&) override {}
|
||||||
|
|
||||||
void visit(const ExtendsStatementNode&) {}
|
void visit(const ExtendsStatementNode&) override {}
|
||||||
|
|
||||||
void visit(const BlockStatementNode& node) {
|
void visit(const BlockStatementNode& node) override {
|
||||||
node.block.accept(*this);
|
node.block.accept(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const SetStatementNode&) {}
|
void visit(const SetStatementNode&) override {}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
size_t variable_counter;
|
size_t variable_counter;
|
||||||
|
|||||||
@@ -428,7 +428,7 @@ public:
|
|||||||
|
|
||||||
size_t pos;
|
size_t pos;
|
||||||
|
|
||||||
AstNode(size_t pos): pos(pos) {}
|
explicit AstNode(size_t pos): pos(pos) {}
|
||||||
virtual ~AstNode() {}
|
virtual ~AstNode() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -438,7 +438,7 @@ public:
|
|||||||
|
|
||||||
explicit BlockNode(): AstNode(0) {}
|
explicit BlockNode(): AstNode(0) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -449,7 +449,7 @@ public:
|
|||||||
|
|
||||||
explicit TextNode(size_t pos, size_t length): AstNode(pos), length(length) {}
|
explicit TextNode(size_t pos, size_t length): AstNode(pos), length(length) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -458,7 +458,7 @@ class ExpressionNode : public AstNode {
|
|||||||
public:
|
public:
|
||||||
explicit ExpressionNode(size_t pos): AstNode(pos) {}
|
explicit ExpressionNode(size_t pos): AstNode(pos) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -469,7 +469,7 @@ public:
|
|||||||
|
|
||||||
explicit LiteralNode(std::string_view data_text, size_t pos): ExpressionNode(pos), value(json::parse(data_text)) {}
|
explicit LiteralNode(std::string_view data_text, size_t pos): ExpressionNode(pos), value(json::parse(data_text)) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -492,7 +492,7 @@ public:
|
|||||||
|
|
||||||
explicit DataNode(std::string_view ptr_name, size_t pos): ExpressionNode(pos), name(ptr_name), ptr(json::json_pointer(convert_dot_to_ptr(ptr_name))) {}
|
explicit DataNode(std::string_view ptr_name, size_t pos): ExpressionNode(pos), name(ptr_name), ptr(json::json_pointer(convert_dot_to_ptr(ptr_name))) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -612,7 +612,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -624,14 +624,14 @@ public:
|
|||||||
explicit ExpressionListNode(): AstNode(0) {}
|
explicit ExpressionListNode(): AstNode(0) {}
|
||||||
explicit ExpressionListNode(size_t pos): AstNode(pos) {}
|
explicit ExpressionListNode(size_t pos): AstNode(pos) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class StatementNode : public AstNode {
|
class StatementNode : public AstNode {
|
||||||
public:
|
public:
|
||||||
StatementNode(size_t pos): AstNode(pos) {}
|
explicit StatementNode(size_t pos): AstNode(pos) {}
|
||||||
|
|
||||||
virtual void accept(NodeVisitor& v) const = 0;
|
virtual void accept(NodeVisitor& v) const = 0;
|
||||||
};
|
};
|
||||||
@@ -642,7 +642,7 @@ public:
|
|||||||
BlockNode body;
|
BlockNode body;
|
||||||
BlockNode* const parent;
|
BlockNode* const parent;
|
||||||
|
|
||||||
ForStatementNode(BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent) {}
|
explicit ForStatementNode(BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent) {}
|
||||||
|
|
||||||
virtual void accept(NodeVisitor& v) const = 0;
|
virtual void accept(NodeVisitor& v) const = 0;
|
||||||
};
|
};
|
||||||
@@ -653,7 +653,7 @@ public:
|
|||||||
|
|
||||||
explicit ForArrayStatementNode(const std::string& value, BlockNode* const parent, size_t pos): ForStatementNode(parent, pos), value(value) {}
|
explicit ForArrayStatementNode(const std::string& value, BlockNode* const parent, size_t pos): ForStatementNode(parent, pos), value(value) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -666,7 +666,7 @@ public:
|
|||||||
explicit ForObjectStatementNode(const std::string& key, const std::string& value, BlockNode* const parent, size_t pos)
|
explicit ForObjectStatementNode(const std::string& key, const std::string& value, BlockNode* const parent, size_t pos)
|
||||||
: ForStatementNode(parent, pos), key(key), value(value) {}
|
: ForStatementNode(parent, pos), key(key), value(value) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -684,7 +684,7 @@ public:
|
|||||||
explicit IfStatementNode(BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent), is_nested(false) {}
|
explicit IfStatementNode(BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent), is_nested(false) {}
|
||||||
explicit IfStatementNode(bool is_nested, BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent), is_nested(is_nested) {}
|
explicit IfStatementNode(bool is_nested, BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent), is_nested(is_nested) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -695,7 +695,7 @@ public:
|
|||||||
|
|
||||||
explicit IncludeStatementNode(const std::string& file, size_t pos): StatementNode(pos), file(file) {}
|
explicit IncludeStatementNode(const std::string& file, size_t pos): StatementNode(pos), file(file) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -706,7 +706,7 @@ public:
|
|||||||
|
|
||||||
explicit ExtendsStatementNode(const std::string& file, size_t pos): StatementNode(pos), file(file) {}
|
explicit ExtendsStatementNode(const std::string& file, size_t pos): StatementNode(pos), file(file) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -719,7 +719,7 @@ public:
|
|||||||
|
|
||||||
explicit BlockStatementNode(BlockNode* const parent, const std::string& name, size_t pos): StatementNode(pos), name(name), parent(parent) {}
|
explicit BlockStatementNode(BlockNode* const parent, const std::string& name, size_t pos): StatementNode(pos), name(name), parent(parent) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -731,7 +731,7 @@ public:
|
|||||||
|
|
||||||
explicit SetStatementNode(const std::string& key, size_t pos): StatementNode(pos), key(key) {}
|
explicit SetStatementNode(const std::string& key, size_t pos): StatementNode(pos), key(key) {}
|
||||||
|
|
||||||
void accept(NodeVisitor& v) const {
|
void accept(NodeVisitor& v) const override {
|
||||||
v.visit(*this);
|
v.visit(*this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -753,58 +753,58 @@ namespace inja {
|
|||||||
* \brief A class for counting statistics on a Template.
|
* \brief A class for counting statistics on a Template.
|
||||||
*/
|
*/
|
||||||
class StatisticsVisitor : public NodeVisitor {
|
class StatisticsVisitor : public NodeVisitor {
|
||||||
void visit(const BlockNode& node) {
|
void visit(const BlockNode& node) override {
|
||||||
for (const auto& n : node.nodes) {
|
for (const auto& n : node.nodes) {
|
||||||
n->accept(*this);
|
n->accept(*this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const TextNode&) {}
|
void visit(const TextNode&) override {}
|
||||||
void visit(const ExpressionNode&) {}
|
void visit(const ExpressionNode&) override {}
|
||||||
void visit(const LiteralNode&) {}
|
void visit(const LiteralNode&) override {}
|
||||||
|
|
||||||
void visit(const DataNode&) {
|
void visit(const DataNode&) override {
|
||||||
variable_counter += 1;
|
variable_counter += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const FunctionNode& node) {
|
void visit(const FunctionNode& node) override {
|
||||||
for (const auto& n : node.arguments) {
|
for (const auto& n : node.arguments) {
|
||||||
n->accept(*this);
|
n->accept(*this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const ExpressionListNode& node) {
|
void visit(const ExpressionListNode& node) override {
|
||||||
node.root->accept(*this);
|
node.root->accept(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const StatementNode&) {}
|
void visit(const StatementNode&) override {}
|
||||||
void visit(const ForStatementNode&) {}
|
void visit(const ForStatementNode&) override {}
|
||||||
|
|
||||||
void visit(const ForArrayStatementNode& node) {
|
void visit(const ForArrayStatementNode& node) override {
|
||||||
node.condition.accept(*this);
|
node.condition.accept(*this);
|
||||||
node.body.accept(*this);
|
node.body.accept(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const ForObjectStatementNode& node) {
|
void visit(const ForObjectStatementNode& node) override {
|
||||||
node.condition.accept(*this);
|
node.condition.accept(*this);
|
||||||
node.body.accept(*this);
|
node.body.accept(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const IfStatementNode& node) {
|
void visit(const IfStatementNode& node) override {
|
||||||
node.condition.accept(*this);
|
node.condition.accept(*this);
|
||||||
node.true_statement.accept(*this);
|
node.true_statement.accept(*this);
|
||||||
node.false_statement.accept(*this);
|
node.false_statement.accept(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const IncludeStatementNode&) {}
|
void visit(const IncludeStatementNode&) override {}
|
||||||
|
|
||||||
void visit(const ExtendsStatementNode&) {}
|
void visit(const ExtendsStatementNode&) override {}
|
||||||
|
|
||||||
void visit(const BlockStatementNode& node) {
|
void visit(const BlockStatementNode& node) override {
|
||||||
node.block.accept(*this);
|
node.block.accept(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const SetStatementNode&) {}
|
void visit(const SetStatementNode&) override {}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
size_t variable_counter;
|
size_t variable_counter;
|
||||||
@@ -1498,11 +1498,11 @@ class Parser {
|
|||||||
std::stack<ForStatementNode*> for_statement_stack;
|
std::stack<ForStatementNode*> for_statement_stack;
|
||||||
std::stack<BlockStatementNode*> block_statement_stack;
|
std::stack<BlockStatementNode*> block_statement_stack;
|
||||||
|
|
||||||
inline void throw_parser_error(const std::string& message) const {
|
void throw_parser_error(const std::string& message) const {
|
||||||
INJA_THROW(ParserError(message, lexer.current_position()));
|
INJA_THROW(ParserError(message, lexer.current_position()));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void get_next_token() {
|
void get_next_token() {
|
||||||
if (have_peek_tok) {
|
if (have_peek_tok) {
|
||||||
tok = peek_tok;
|
tok = peek_tok;
|
||||||
have_peek_tok = false;
|
have_peek_tok = false;
|
||||||
@@ -1511,19 +1511,19 @@ class Parser {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void get_peek_token() {
|
void get_peek_token() {
|
||||||
if (!have_peek_tok) {
|
if (!have_peek_tok) {
|
||||||
peek_tok = lexer.scan();
|
peek_tok = lexer.scan();
|
||||||
have_peek_tok = true;
|
have_peek_tok = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void add_literal(Arguments &arguments, const char* content_ptr) {
|
void add_literal(Arguments &arguments, const char* content_ptr) {
|
||||||
const std::string_view data_text(literal_start.data(), tok.text.data() - literal_start.data() + tok.text.size());
|
const std::string_view data_text(literal_start.data(), tok.text.data() - literal_start.data() + tok.text.size());
|
||||||
arguments.emplace_back(std::make_shared<LiteralNode>(data_text, data_text.data() - content_ptr));
|
arguments.emplace_back(std::make_shared<LiteralNode>(data_text, data_text.data() - content_ptr));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void add_operator(Arguments &arguments, OperatorStack &operator_stack) {
|
void add_operator(Arguments &arguments, OperatorStack &operator_stack) {
|
||||||
auto function = operator_stack.top();
|
auto function = operator_stack.top();
|
||||||
operator_stack.pop();
|
operator_stack.pop();
|
||||||
|
|
||||||
@@ -2349,7 +2349,7 @@ class Renderer : public NodeVisitor {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const BlockNode& node) {
|
void visit(const BlockNode& node) override {
|
||||||
for (const auto& n : node.nodes) {
|
for (const auto& n : node.nodes) {
|
||||||
n->accept(*this);
|
n->accept(*this);
|
||||||
|
|
||||||
@@ -2359,17 +2359,17 @@ class Renderer : public NodeVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const TextNode& node) {
|
void visit(const TextNode& node) override {
|
||||||
output_stream->write(current_template->content.c_str() + node.pos, node.length);
|
output_stream->write(current_template->content.c_str() + node.pos, node.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const ExpressionNode&) {}
|
void visit(const ExpressionNode&) override {}
|
||||||
|
|
||||||
void visit(const LiteralNode& node) {
|
void visit(const LiteralNode& node) override {
|
||||||
data_eval_stack.push(&node.value);
|
data_eval_stack.push(&node.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const DataNode& node) {
|
void visit(const DataNode& node) override {
|
||||||
if (additional_data.contains(node.ptr)) {
|
if (additional_data.contains(node.ptr)) {
|
||||||
data_eval_stack.push(&(additional_data[node.ptr]));
|
data_eval_stack.push(&(additional_data[node.ptr]));
|
||||||
} else if (data_input->contains(node.ptr)) {
|
} else if (data_input->contains(node.ptr)) {
|
||||||
@@ -2389,7 +2389,7 @@ class Renderer : public NodeVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const FunctionNode& node) {
|
void visit(const FunctionNode& node) override {
|
||||||
switch (node.operation) {
|
switch (node.operation) {
|
||||||
case Op::Not: {
|
case Op::Not: {
|
||||||
const auto args = get_arguments<1>(node);
|
const auto args = get_arguments<1>(node);
|
||||||
@@ -2669,15 +2669,15 @@ class Renderer : public NodeVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const ExpressionListNode& node) {
|
void visit(const ExpressionListNode& node) override {
|
||||||
print_data(eval_expression_list(node));
|
print_data(eval_expression_list(node));
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const StatementNode&) {}
|
void visit(const StatementNode&) override {}
|
||||||
|
|
||||||
void visit(const ForStatementNode&) {}
|
void visit(const ForStatementNode&) override {}
|
||||||
|
|
||||||
void visit(const ForArrayStatementNode& node) {
|
void visit(const ForArrayStatementNode& node) override {
|
||||||
const auto result = eval_expression_list(node.condition);
|
const auto result = eval_expression_list(node.condition);
|
||||||
if (!result->is_array()) {
|
if (!result->is_array()) {
|
||||||
throw_renderer_error("object must be an array", node);
|
throw_renderer_error("object must be an array", node);
|
||||||
@@ -2716,7 +2716,7 @@ class Renderer : public NodeVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const ForObjectStatementNode& node) {
|
void visit(const ForObjectStatementNode& node) override {
|
||||||
const auto result = eval_expression_list(node.condition);
|
const auto result = eval_expression_list(node.condition);
|
||||||
if (!result->is_object()) {
|
if (!result->is_object()) {
|
||||||
throw_renderer_error("object must be an object", node);
|
throw_renderer_error("object must be an object", node);
|
||||||
@@ -2755,7 +2755,7 @@ class Renderer : public NodeVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const IfStatementNode& node) {
|
void visit(const IfStatementNode& node) override {
|
||||||
const auto result = eval_expression_list(node.condition);
|
const auto result = eval_expression_list(node.condition);
|
||||||
if (truthy(result.get())) {
|
if (truthy(result.get())) {
|
||||||
node.true_statement.accept(*this);
|
node.true_statement.accept(*this);
|
||||||
@@ -2764,7 +2764,7 @@ class Renderer : public NodeVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const IncludeStatementNode& node) {
|
void visit(const IncludeStatementNode& node) override {
|
||||||
auto sub_renderer = Renderer(config, template_storage, function_storage);
|
auto sub_renderer = Renderer(config, template_storage, function_storage);
|
||||||
const auto included_template_it = template_storage.find(node.file);
|
const auto included_template_it = template_storage.find(node.file);
|
||||||
if (included_template_it != template_storage.end()) {
|
if (included_template_it != template_storage.end()) {
|
||||||
@@ -2774,7 +2774,7 @@ class Renderer : public NodeVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const ExtendsStatementNode& node) {
|
void visit(const ExtendsStatementNode& node) override {
|
||||||
const auto included_template_it = template_storage.find(node.file);
|
const auto included_template_it = template_storage.find(node.file);
|
||||||
if (included_template_it != template_storage.end()) {
|
if (included_template_it != template_storage.end()) {
|
||||||
const Template* parent_template = &included_template_it->second;
|
const Template* parent_template = &included_template_it->second;
|
||||||
@@ -2785,7 +2785,7 @@ class Renderer : public NodeVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const BlockStatementNode& node) {
|
void visit(const BlockStatementNode& node) override {
|
||||||
const size_t old_level = current_level;
|
const size_t old_level = current_level;
|
||||||
current_level = 0;
|
current_level = 0;
|
||||||
current_template = template_stack.front();
|
current_template = template_stack.front();
|
||||||
@@ -2799,7 +2799,7 @@ class Renderer : public NodeVisitor {
|
|||||||
current_template = template_stack.back();
|
current_template = template_stack.back();
|
||||||
}
|
}
|
||||||
|
|
||||||
void visit(const SetStatementNode& node) {
|
void visit(const SetStatementNode& node) override {
|
||||||
std::string ptr = node.key;
|
std::string ptr = node.key;
|
||||||
replace_substring(ptr, ".", "/");
|
replace_substring(ptr, ".", "/");
|
||||||
ptr = "/" + ptr;
|
ptr = "/" + ptr;
|
||||||
@@ -2807,7 +2807,7 @@ class Renderer : public NodeVisitor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Renderer(const RenderConfig& config, const TemplateStorage& template_storage, const FunctionStorage& function_storage)
|
explicit Renderer(const RenderConfig& config, const TemplateStorage& template_storage, const FunctionStorage& function_storage)
|
||||||
: config(config), template_storage(template_storage), function_storage(function_storage) {}
|
: config(config), template_storage(template_storage), function_storage(function_storage) {}
|
||||||
|
|
||||||
void render_to(std::ostream& os, const Template& tmpl, const json& data, json* loop_data = nullptr) {
|
void render_to(std::ostream& os, const Template& tmpl, const json& data, json* loop_data = nullptr) {
|
||||||
@@ -2983,7 +2983,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::string load_file(const std::string& filename) {
|
std::string load_file(const std::string& filename) {
|
||||||
Parser parser(parser_config, lexer_config, template_storage, function_storage);
|
const Parser parser(parser_config, lexer_config, template_storage, function_storage);
|
||||||
return Parser::load_file(input_path / filename);
|
return Parser::load_file(input_path / filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user