add count variables to template

This commit is contained in:
pantor
2020-06-27 17:18:25 +02:00
parent d25a4de54f
commit bc020a5ee0
3 changed files with 33 additions and 0 deletions

View File

@@ -17,6 +17,17 @@ namespace inja {
struct Template {
std::vector<Node> nodes;
std::string content;
/// Return number of variables (total number, not distinct ones) in the template
int count_variables() {
int result {0};
for (auto& n : nodes) {
if (n.flags == Node::Flag::ValueLookupDot || n.flags == Node::Flag::ValueLookupPointer) {
result += 1;
}
}
return result;
}
};
using TemplateStorage = std::map<std::string, Template>;

View File

@@ -2280,6 +2280,17 @@ namespace inja {
struct Template {
std::vector<Node> nodes;
std::string content;
/// Return number of variables (total number, not distinct ones) in the template
int count_variables() {
int result {0};
for (auto& n : nodes) {
if (n.flags == Node::Flag::ValueLookupDot || n.flags == Node::Flag::ValueLookupPointer) {
result += 1;
}
}
return result;
}
};
using TemplateStorage = std::map<std::string, Template>;

View File

@@ -417,6 +417,17 @@ TEST_CASE("templates") {
CHECK(env.render("{% for city in cities %}{% include \"city.tpl\" %}{% endfor %}", loop_data) ==
"0:Munich;1:New York;");
}
SUBCASE("count variables") {
inja::Environment env;
inja::Template t1 = env.parse("Hello {{ name }}");
inja::Template t2 = env.parse("{% if is_happy %}{{ name }}{% else %}{{ city }}{% endif %}");
inja::Template t3 = env.parse("{% if at(name, test) %}{{ name }}{% else %}{{ city }}{{ upper(city) }}{% endif %}");
CHECK(t1.count_variables() == 1);
CHECK(t2.count_variables() == 3);
CHECK(t3.count_variables() == 5);
}
}
TEST_CASE("other-syntax") {