summaryrefslogtreecommitdiffstats
path: root/src/boost/tools/quickbook/src/grammar.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/tools/quickbook/src/grammar.hpp')
-rw-r--r--src/boost/tools/quickbook/src/grammar.hpp79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/boost/tools/quickbook/src/grammar.hpp b/src/boost/tools/quickbook/src/grammar.hpp
new file mode 100644
index 00000000..17fea7d4
--- /dev/null
+++ b/src/boost/tools/quickbook/src/grammar.hpp
@@ -0,0 +1,79 @@
+/*=============================================================================
+ Copyright (c) 2002 2004 2006Joel de Guzman
+ Copyright (c) 2004 Eric Niebler
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_QUICKBOOK_GRAMMARS_HPP)
+#define BOOST_SPIRIT_QUICKBOOK_GRAMMARS_HPP
+
+#include <boost/spirit/include/classic_core.hpp>
+#include "fwd.hpp"
+#include "iterator.hpp"
+
+namespace quickbook
+{
+ namespace cl = boost::spirit::classic;
+
+ // The spirit scanner for explicitly instantiating grammars. This is a
+ // spirit implementation detail, but since classic is no longer under
+ // development, it won't change. And spirit 2 won't require such a hack.
+
+ typedef cl::scanner<
+ parse_iterator,
+ cl::scanner_policies<
+ cl::iteration_policy,
+ cl::match_policy,
+ cl::action_policy> >
+ scanner;
+
+ template <typename Scanner>
+ struct Scanner_must_be_the_quickbook_scanner_typedef;
+ template <> struct Scanner_must_be_the_quickbook_scanner_typedef<scanner>
+ {
+ };
+
+ struct grammar : public cl::grammar<grammar>
+ {
+ grammar(cl::rule<scanner> const& start_rule_, char const* /* name */)
+ : start_rule(start_rule_)
+ {
+ }
+
+ template <typename Scanner>
+ struct definition
+ : Scanner_must_be_the_quickbook_scanner_typedef<Scanner>
+ {
+ definition(grammar const& self) : start_rule(self.start_rule) {}
+ cl::rule<scanner> const& start() const { return start_rule; }
+ cl::rule<scanner> const& start_rule;
+ };
+
+ cl::rule<scanner> const& start_rule;
+ };
+
+ struct quickbook_grammar
+ {
+ public:
+ struct impl;
+
+ private:
+ boost::scoped_ptr<impl> impl_;
+
+ public:
+ grammar command_line_macro;
+ grammar inline_phrase;
+ grammar phrase_start;
+ grammar block_start;
+ grammar attribute_template_body;
+ grammar doc_info;
+
+ quickbook_grammar(quickbook::state&);
+ ~quickbook_grammar();
+ };
+}
+
+#endif