/*============================================================================= 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) =============================================================================*/ #include #include #include #include #include #include #include "grammar_impl.hpp" #include "block.hpp" #include "actions.hpp" #include "misc_rules.hpp" #include "parse_utils.hpp" namespace quickbook { namespace qi = boost::spirit::qi; namespace ph = boost::phoenix; // Workaround for clang: namespace { struct dummmy { qi::rule a1; }; } void quickbook_grammar::impl::init_block_table() { // Table qi::rule& table = store_.create(); qi::rule& table_row = store_.create(); qi::rule& table_cell = store_.create(); qi::rule& table_cell_body = store_.create(); block_keyword_rules.add("table", table[actions.process]); table = (&(*qi::blank >> qi::eol) | space) >> (( qi::eps(qbk_since(105u)) >> element_id [member_assign(&quickbook::table::id)] ) | qi::eps) >> (&(*qi::blank >> qi::eol) | space) >> (*(qi::char_ - eol)) [member_assign(&quickbook::table::title)] >> +eol >> (*table_row) [member_assign(&quickbook::table::rows)] ; table_row = space >> '[' >> ( *table_cell >> ']' >> space | error >> qi::attr(quickbook::table_row()) ) ; table_cell = space >> '[' >> ( table_cell_body >> ']' >> space | error >> qi::attr(quickbook::table_cell()) ) ; table_cell_body = inside_paragraph [member_assign(&quickbook::block_formatted::content)] [member_assign(&quickbook::block_formatted::type, "cell")] ; qi::rule& variablelist = store_.create(); qi::rule& varlistentry = store_.create(); qi::rule& varlistterm = store_.create(); qi::rule& varlistterm_body = store_.create(); qi::rule& varlistitem = store_.create(); qi::rule& varlistitem_body = store_.create(); block_keyword_rules.add("variablelist", variablelist[actions.process]); variablelist = (&(*qi::blank >> qi::eol) | space) >> (*(qi::char_ - eol)) [member_assign(&quickbook::variablelist::title)] >> +eol >> (*varlistentry) [member_assign(&quickbook::variablelist::entries)] ; varlistentry = space >> '[' >> ( varlistterm >> +varlistitem >> ']' >> space | error >> qi::attr(quickbook::varlistentry()) ) ; varlistterm = space >> '[' >> ( varlistterm_body >> ']' >> space | error >> qi::attr(quickbook::block_formatted()) ) ; varlistterm_body = phrase_attr [member_assign(&quickbook::block_formatted::content)] [member_assign(&quickbook::block_formatted::type, "varlistterm")] ; varlistitem = space >> '[' >> ( varlistitem_body >> ']' >> space | error >> qi::attr(quickbook::block_formatted()) ) ; varlistitem_body = inside_paragraph [member_assign(&quickbook::block_formatted::content)] [member_assign(&quickbook::block_formatted::type, "varlistitem")] ; } }