int main(int argc, const char **argv) { unitTests(); Settings settings; ArgumentList args = gatherArguments(argc, argv, settings); // TODO: Probably don't want to share them between files Bindings bindings = bindStandardLibrary(); Interpreter interpreter(bindings, settings); if (args.empty()) { repl(interpreter, settings); } else { for (ArgumentList::const_iterator it = args.begin() ; it != args.end() ; ++it) { execute(interpreter, *it, settings); } } // If you use CTRL-D, nice to output a newline... std::cout << '\n'; }
std::string PageTemplate::get_variable(const ArgumentList& arguments, const ArrayArgument::Item* arrayItem, const std::string& var) const { if (arrayItem != 0) { ArrayArgument::Item::const_iterator i = arrayItem->find(var); if (i != arrayItem->end()) return i->second; } ArgumentList::const_iterator i = arguments.find(var); return i == arguments.end() ? std::string() : i->second->to_string(); }
void PageTemplate::yield_foreach(const ArgumentList& arguments, const TokenPtr& token, std::string& result) const { const ForeachToken* ftoken = static_cast<const ForeachToken*>(token.get()); ArgumentList::const_iterator i = arguments.find(ftoken->data); if (i == arguments.end() || !i->second->is_array()) return; const ArrayArgument* array = static_cast<const ArrayArgument*>(i->second.get()); for (std::size_t i = 0, n = array->size(); i < n; i++) { if (i > 0) yield_tokens(arguments, 0, ftoken->sep, result); yield_tokens(arguments, &array->get(i), ftoken->body, result); } }