X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Console%2FParse.cc;h=a631f0f1ca4618a6bacc5d6b3c49b68e91744928;hb=c0b5c560da72983939b286632ac481e076649ddb;hp=f143149c6d624ec86febecf0a10124d304a38aac;hpb=d620e7ff9b68377ea20ca266c23cc3f05781868c;p=senf.git diff --git a/Console/Parse.cc b/Console/Parse.cc index f143149..a631f0f 100644 --- a/Console/Parse.cc +++ b/Console/Parse.cc @@ -27,8 +27,11 @@ #include "Parse.ih" // Custom includes -#include "../Utils/String.hh" +#include #include +#include +#include "../Utils/String.hh" +#include "../Utils/Exception.hh" //#include "Parse.mpp" #define prefix_ @@ -223,8 +226,20 @@ prefix_ senf::console::CommandParser::~CommandParser() prefix_ bool senf::console::CommandParser::parse(std::string command, Callback cb) { detail::ParseDispatcher::BindInfo bind (impl().dispatcher, cb); -# warning don't use c_str() in parse and add istream parser. Implement error checking in parser. - return boost::spirit::parse( command.c_str(), + return boost::spirit::parse( command.begin(), command.end(), + impl().grammar.use_parser(), + impl().grammar.use_parser() + ).full; +} + +prefix_ bool senf::console::CommandParser::parseFile(std::string filename, Callback cb) +{ + detail::ParseDispatcher::BindInfo bind (impl().dispatcher, cb); + boost::spirit::file_iterator<> i (filename); + if (!i) throw SystemException(ENOENT SENF_EXC_DEBUGINFO); + boost::spirit::file_iterator<> const i_end (i.make_end()); + + return boost::spirit::parse( i, i_end, impl().grammar.use_parser(), impl().grammar.use_parser() ).full;