From b39621ea51dd186cfcc65ae4fd45266d46c8fbb8 Mon Sep 17 00:00:00 2001 From: King_DuckZ Date: Thu, 18 Jan 2018 00:16:17 +0000 Subject: [PATCH] Fix the build but the code is still untested. --- src/scraplang/apply.cpp | 56 +++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/src/scraplang/apply.cpp b/src/scraplang/apply.cpp index 9de4514..b71266b 100644 --- a/src/scraplang/apply.cpp +++ b/src/scraplang/apply.cpp @@ -173,11 +173,36 @@ namespace duck { namespace sl { MustacheEntry* m_current_mustache; }; - mstch::map to_mustache_dict_recursive (const EntryNode& parNode, std::string_view parSrc, XPAthRunner& parRunner) { + mstch::map to_mustache_dict_recursive (const EntryNode& parNode, std::string_view parSrc, XPathRunner& parRunner) { mstch::map retval; for (const XPathElement* xpath : parNode.xpaths) { assert(xpath); + std::cout << "Running query for \"" << xpath->name << "\"\n"; + auto results = parRunner.query(parSrc, xpath->xpath); + if (results.size() == 1) { + retval[xpath->name] = results.front(); + } + else if (results.size() > 1) { + mstch::array values; + values.reserve(results.size()); + std::copy(results.begin(), results.end(), std::back_inserter(values)); + retval[xpath->name] = std::move(values); + } + else if (xpath->def_val) { + retval[xpath->name] = *xpath->def_val; + } + else { + retval[xpath->name] = std::string(); + } } + + for (auto& curr_struct : parNode.structs) { + assert(not curr_struct.name.empty()); + retval[std::string(curr_struct.name)] = + to_mustache_dict_recursive(curr_struct, parSrc, parRunner); + } + + return retval; } mstch::map to_mustache_map (const EntryNodeList& parNodes, XPathRunner& parRunner) { @@ -195,32 +220,9 @@ namespace duck { namespace sl { assert(false); //not implemented } - //mstch::map curr_entry_map = to_mustache_dict_recursive( - for (const XPathElement* xpath : entry.second.xpaths) { - assert(xpath); - std::cout << "Running query for \"" << xpath->name << "\"\n"; - auto results = parRunner.query(src_url, xpath->xpath); - if (results.size() == 1) { - retval[xpath->name] = results.front(); - } - else if (results.size() > 1) { - mstch::array values; - values.reserve(results.size()); - std::copy(results.begin(), results.end(), std::back_inserter(values)); - retval[xpath->name] = std::move(values); - } - else if (xpath->def_val) { - retval[xpath->name] = *xpath->def_val; - } - else { - retval[xpath->name] = std::string(); - } - } - - for (auto& curr_struct : entry.second.structs) { - assert(not curr_struct.name.empty()); - retval[curr_struct.name] = struct_to_mustache(curr_struct, src_url, parRunner); - } + mstch::map curr_entry_map = to_mustache_dict_recursive(entry.second, src_url, parRunner); + curr_entry_map.merge(std::move(retval)); + retval.swap(curr_entry_map); } return retval;