Fix documentation build under maverick (doxygen 1.7.1)
[senf.git] / senf / Utils / Console / Parse.cc
index f9b2d21..cca6f69 100644 (file)
 #include <cerrno>
 #include <sys/stat.h>
 #include <boost/iterator/transform_iterator.hpp>
-#include <boost/spirit/iterator/file_iterator.hpp>
-#include <boost/spirit/iterator/position_iterator.hpp>
+#include <senf/config.hh>
+
+#if HAVE_BOOST_SPIRIT_INCLUDE_CLASSIC_HPP
+#  include <boost/spirit/include/classic_file_iterator.hpp>
+#  include <boost/spirit/include/classic_position_iterator.hpp>
+#else
+#  include <boost/spirit/iterator/file_iterator.hpp>
+#  include <boost/spirit/iterator/position_iterator.hpp>
+#endif
+
 #include <senf/Utils/Exception.hh>
 #include <senf/Utils/senfassert.hh>
 
 //#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<senf::console::detail::FilePositionWithIndex>
@@ -305,6 +316,9 @@ namespace spirit {
             }
     };
 
+#if HAVE_BOOST_SPIRIT_INCLUDE_CLASSIC_HPP
+}
+#endif
 }}
 
 prefix_ senf::console::CommandParser::CommandParser()
@@ -321,34 +335,34 @@ template <class Iterator>
 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<PositionIterator> result;
+    detail::boost_spirit::parse_info<PositionIterator> result;
 
     for(;;) {
-        result = boost::spirit::parse(
+        result = detail::boost_spirit::parse(
             b, e, * impl().grammar.use_parser<Impl::Grammar::SkipParser>());
         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::CommandParser>(),
                                           impl().grammar.use_parser<Impl::Grammar::SkipParser>());
         }
-        catch (boost::spirit::parser_error<Impl::Grammar::Errors, PositionIterator> & ex) {
+        catch (detail::boost_spirit::parser_error<Impl::Grammar::Errors, PositionIterator> & 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("<unknown>"));
     PositionIterator e (arguments.end(), arguments.end(), std::string("<unknown>"));
     detail::ParseDispatcher::BindInfo bind (impl().dispatcher, info);
-    boost::spirit::parse_info<PositionIterator> result;
+    detail::boost_spirit::parse_info<PositionIterator> result;
     try {
-        result = boost::spirit::parse( b, e,
+        result = detail::boost_spirit::parse( b, e,
                                        impl().grammar.use_parser<Impl::Grammar::ArgumentsParser>(),
                                        impl().grammar.use_parser<Impl::Grammar::SkipParser>() );
     }
-    catch (boost::spirit::parser_error<Impl::Grammar::Errors, PositionIterator> & ex) {
+    catch (detail::boost_spirit::parser_error<Impl::Grammar::Errors, PositionIterator> & 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("<unknown>"));
     PositionIterator e (path.end(), path.end(), std::string("<unknown>"));
     detail::ParseDispatcher::BindInfo bind (impl().dispatcher, info);
-    boost::spirit::parse_info<PositionIterator> result;
+    detail::boost_spirit::parse_info<PositionIterator> result;
     try {
-        result = boost::spirit::parse( b, e,
+        result = detail::boost_spirit::parse( b, e,
                                        impl().grammar.use_parser<Impl::Grammar::PathParser>(),
                                        impl().grammar.use_parser<Impl::Grammar::SkipParser>() );
     }
-    catch (boost::spirit::parser_error<Impl::Grammar::Errors, PositionIterator> & ex) {
+    catch (detail::boost_spirit::parser_error<Impl::Grammar::Errors, PositionIterator> & ex) {
         throwParserError(ex);
     }
     if (! result.full) {
@@ -457,7 +471,7 @@ senf::console::CommandParser::parseIncremental(std::string const & commands, Cal
                           parseLoop(commands.begin(), commands.end(), "<unknown>", 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"