X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FUtils%2FConsole%2FParse.cc;h=cca6f69c98e22d5c5a8f48e66cd23373c3b3d530;hb=93d9568d448749dc187e7622b733a4a3caa319df;hp=f9b2d213cc7da2bebf19654876c768554a4108d8;hpb=9cb871b939efe93e35dd96808d25089399acfc46;p=senf.git diff --git a/senf/Utils/Console/Parse.cc b/senf/Utils/Console/Parse.cc index f9b2d21..cca6f69 100644 --- a/senf/Utils/Console/Parse.cc +++ b/senf/Utils/Console/Parse.cc @@ -30,14 +30,22 @@ #include #include #include -#include -#include +#include + +#if HAVE_BOOST_SPIRIT_INCLUDE_CLASSIC_HPP +# include +# include +#else +# include +# include +#endif + #include #include //#include "Parse.mpp" #define prefix_ -///////////////////////////////cc.p//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// namespace senf { namespace console { @@ -120,7 +128,7 @@ namespace detail { }}} -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::console::Token prefix_ senf::console::Token::Token(TokenType type, std::string token, @@ -162,7 +170,7 @@ prefix_ std::ostream & senf::console::operator<<(std::ostream & os, Token const return os; } -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::console::ParseCommandInfo prefix_ std::ostream & senf::console::operator<<(std::ostream & stream, @@ -201,7 +209,7 @@ prefix_ std::ostream & senf::console::operator<<(std::ostream & stream, return stream; } -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::console::ParseCommandInfo::ArgumentIterator prefix_ void senf::console::ParseCommandInfo::ArgumentIterator::setRange() @@ -243,7 +251,7 @@ prefix_ void senf::console::ParseCommandInfo::ArgumentIterator::decrement() } } -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::console::CommandParser #ifndef DOXYGEN @@ -279,6 +287,9 @@ namespace { namespace boost { namespace spirit { +#if HAVE_BOOST_SPIRIT_INCLUDE_CLASSIC_HPP +namespace classic { +#endif template <> struct position_policy @@ -305,6 +316,9 @@ namespace spirit { } }; +#if HAVE_BOOST_SPIRIT_INCLUDE_CLASSIC_HPP +} +#endif }} prefix_ senf::console::CommandParser::CommandParser() @@ -321,34 +335,34 @@ template prefix_ Iterator senf::console::CommandParser::parseLoop(Iterator npb, Iterator npe, std::string const & source, Callback cb) { - typedef boost::spirit::position_iterator< + typedef detail::boost_spirit::position_iterator< Iterator, detail::FilePositionWithIndex> PositionIterator; PositionIterator b (npb, npe, source); PositionIterator e (npe, npe, source); ParseCommandInfo info; detail::ParseDispatcher::BindInfo bind (impl().dispatcher, info); - boost::spirit::parse_info result; + detail::boost_spirit::parse_info result; for(;;) { - result = boost::spirit::parse( + result = detail::boost_spirit::parse( b, e, * impl().grammar.use_parser()); b = result.stop; if (b == e) return e.base(); info.clear(); try { - result = boost::spirit::parse(b, e, + result = detail::boost_spirit::parse(b, e, impl().grammar.use_parser(), impl().grammar.use_parser()); } - catch (boost::spirit::parser_error & ex) { + catch (detail::boost_spirit::parser_error & ex) { if (impl().grammar.incremental && ex.where == e) return b.base(); else throwParserError(ex); } // Otherwise the error handling in the parser is broken - SENF_ASSERT( result.hit ); + SENF_ASSERT( result.hit, "Internal parser failure (error handling broken?)" ); if (! info.empty()) try { cb(info); @@ -375,7 +389,7 @@ prefix_ void senf::console::CommandParser::parseFile(std::string const & filenam if (stat( filename.c_str(), &statBuf) != 0) throw SystemException(filename, errno SENF_EXC_DEBUGINFO); if (statBuf.st_size == 0) return; - boost::spirit::file_iterator<> i (filename); + detail::boost_spirit::file_iterator<> i (filename); if (!i) { if (errno == 0) // hmm.. errno==0 but the file_iterator is false; something is wrong but we @@ -384,25 +398,25 @@ prefix_ void senf::console::CommandParser::parseFile(std::string const & filenam else throw SystemException(filename, errno SENF_EXC_DEBUGINFO); } - boost::spirit::file_iterator<> const i_end (i.make_end()); + detail::boost_spirit::file_iterator<> const i_end (i.make_end()); parseLoop(i, i_end, filename, cb); } prefix_ void senf::console::CommandParser::parseArguments(std::string const & arguments, ParseCommandInfo & info) { - typedef boost::spirit::position_iterator< + typedef detail::boost_spirit::position_iterator< std::string::const_iterator, detail::FilePositionWithIndex> PositionIterator; PositionIterator b (arguments.begin(), arguments.end(), std::string("")); PositionIterator e (arguments.end(), arguments.end(), std::string("")); detail::ParseDispatcher::BindInfo bind (impl().dispatcher, info); - boost::spirit::parse_info result; + detail::boost_spirit::parse_info result; try { - result = boost::spirit::parse( b, e, + result = detail::boost_spirit::parse( b, e, impl().grammar.use_parser(), impl().grammar.use_parser() ); } - catch (boost::spirit::parser_error & ex) { + catch (detail::boost_spirit::parser_error & ex) { throwParserError(ex); } if (! result.full) { @@ -415,18 +429,18 @@ prefix_ void senf::console::CommandParser::parseArguments(std::string const & ar prefix_ void senf::console::CommandParser::parsePath(std::string const & path, ParseCommandInfo & info) { - typedef boost::spirit::position_iterator< + typedef detail::boost_spirit::position_iterator< std::string::const_iterator, detail::FilePositionWithIndex> PositionIterator; PositionIterator b (path.begin(), path.end(), std::string("")); PositionIterator e (path.end(), path.end(), std::string("")); detail::ParseDispatcher::BindInfo bind (impl().dispatcher, info); - boost::spirit::parse_info result; + detail::boost_spirit::parse_info result; try { - result = boost::spirit::parse( b, e, + result = detail::boost_spirit::parse( b, e, impl().grammar.use_parser(), impl().grammar.use_parser() ); } - catch (boost::spirit::parser_error & ex) { + catch (detail::boost_spirit::parser_error & ex) { throwParserError(ex); } if (! result.full) { @@ -457,7 +471,7 @@ senf::console::CommandParser::parseIncremental(std::string const & commands, Cal parseLoop(commands.begin(), commands.end(), "", cb) ); } -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // Character sets prefix_ bool senf::console::CommandParser::isSpecialChar(char ch) @@ -485,7 +499,7 @@ prefix_ bool senf::console::CommandParser::isWordChar(char ch) return Impl::Grammar::word_p.test(ch); } -/////////////////////////////cc.e//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_ //#include "Parse.mpp"