mirror of
https://github.com/pantor/inja.git
synced 2026-05-31 16:24:52 +00:00
Loop vars for object loops (#145)
* loops vars for object loops * Fix formatting Co-authored-by: Craig Pepper <craig.a.pepper@boeing.com>
This commit is contained in:
@@ -119,15 +119,15 @@ class Renderer {
|
||||
|
||||
if (level.loop_type == LoopLevel::Type::Array) {
|
||||
level.data[static_cast<std::string>(level.value_name)] = level.values.at(level.index); // *level.it;
|
||||
auto& loopData = level.data["loop"];
|
||||
loopData["index"] = level.index;
|
||||
loopData["index1"] = level.index + 1;
|
||||
loopData["is_first"] = (level.index == 0);
|
||||
loopData["is_last"] = (level.index == level.size - 1);
|
||||
} else {
|
||||
level.data[static_cast<std::string>(level.key_name)] = level.map_it->first;
|
||||
level.data[static_cast<std::string>(level.value_name)] = *level.map_it->second;
|
||||
}
|
||||
auto &loopData = level.data["loop"];
|
||||
loopData["index"] = level.index;
|
||||
loopData["index1"] = level.index + 1;
|
||||
loopData["is_first"] = (level.index == 0);
|
||||
loopData["is_last"] = (level.index == level.size - 1);
|
||||
}
|
||||
|
||||
const TemplateStorage& m_included_templates;
|
||||
@@ -494,6 +494,7 @@ class Renderer {
|
||||
level.value_name = bc.str;
|
||||
level.values = std::move(m_stack.back());
|
||||
level.data = (*m_data);
|
||||
level.index = 0;
|
||||
m_stack.pop_back();
|
||||
|
||||
if (bc.value.is_string()) {
|
||||
@@ -512,6 +513,7 @@ class Renderer {
|
||||
auto sort_lambda = [](const LoopLevel::KeyValue& a, const LoopLevel::KeyValue& b) { return a.first < b.first; };
|
||||
std::sort(level.map_values.begin(), level.map_values.end(), sort_lambda);
|
||||
level.map_it = level.map_values.begin();
|
||||
level.size = level.map_values.size();
|
||||
} else {
|
||||
if (!level.values.is_array()) {
|
||||
m_loop_stack.pop_back();
|
||||
@@ -520,7 +522,6 @@ class Renderer {
|
||||
|
||||
// list iterator
|
||||
level.loop_type = LoopLevel::Type::Array;
|
||||
level.index = 0;
|
||||
level.size = level.values.size();
|
||||
}
|
||||
|
||||
@@ -543,8 +544,8 @@ class Renderer {
|
||||
LoopLevel& level = m_loop_stack.back();
|
||||
|
||||
bool done;
|
||||
level.index += 1;
|
||||
if (level.loop_type == LoopLevel::Type::Array) {
|
||||
level.index += 1;
|
||||
done = (level.index == level.values.size());
|
||||
} else {
|
||||
level.map_it += 1;
|
||||
|
||||
Reference in New Issue
Block a user