$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r68887 - branches/quickbook-filenames/tools/quickbook/src
From: dnljms_at_[hidden]
Date: 2011-02-14 19:24:00
Author: danieljames
Date: 2011-02-14 19:23:57 EST (Mon, 14 Feb 2011)
New Revision: 68887
URL: http://svn.boost.org/trac/boost/changeset/68887
Log:
Use values for various block elements.
Added:
   branches/quickbook-filenames/tools/quickbook/src/table_tags.hpp   (contents, props changed)
Text files modified: 
   branches/quickbook-filenames/tools/quickbook/src/actions.cpp               |   176 +++++++++++++++++++++++---------------- 
   branches/quickbook-filenames/tools/quickbook/src/actions.hpp               |    47 ++--------                              
   branches/quickbook-filenames/tools/quickbook/src/actions_class.cpp         |    35 ++-----                                 
   branches/quickbook-filenames/tools/quickbook/src/actions_class.hpp         |    19 ----                                    
   branches/quickbook-filenames/tools/quickbook/src/block_element_grammar.cpp |    97 +++++++++------------                   
   branches/quickbook-filenames/tools/quickbook/src/main_grammar.cpp          |     3                                         
   6 files changed, 169 insertions(+), 208 deletions(-)
Modified: branches/quickbook-filenames/tools/quickbook/src/actions.cpp
==============================================================================
--- branches/quickbook-filenames/tools/quickbook/src/actions.cpp	(original)
+++ branches/quickbook-filenames/tools/quickbook/src/actions.cpp	2011-02-14 19:23:57 EST (Mon, 14 Feb 2011)
@@ -22,6 +22,7 @@
 #include "grammar.hpp"
 #include "input_path.hpp"
 #include "template_tags.hpp"
+#include "table_tags.hpp"
 
 namespace quickbook
 {
@@ -84,7 +85,8 @@
     {
         if(!actions.output_pre(out)) return;
 
-        out << pre << actions.inside_text << post;
+        value_consumer values = actions.values.get();
+        out << pre << values.consume().get_boostbook() << post;
     }
 
     void phrase_action::operator()() const
@@ -143,6 +145,8 @@
 
         std::string str;
         phrase.swap(str);
+        
+        value_consumer values = actions.values.get();
 
         std::string anchor;
 
@@ -154,7 +158,7 @@
         else
         {
             std::string id =
-                !element_id.empty() ? element_id :
+                values.is(general_tags::element_id) ? values.consume().get_quickbook() :
                 qbk_version_n >= 106 ? detail::make_identifier(first, last) :
                 detail::make_identifier(str.begin(), str.end());
 
@@ -183,8 +187,10 @@
         std::string str;
         phrase.swap(str);
 
+        value_consumer values = actions.values.get();
+
         std::string id =
-            !element_id.empty() ? element_id :
+            values.is(general_tags::element_id) ? values.consume().get_quickbook() :
             qbk_version_n >= 106 ? detail::make_identifier(first, last) :
             detail::make_identifier(str.begin(), str.end());
 
@@ -683,27 +689,37 @@
         actions.phrase.pop(); // restore the phrase
     }
 
-    void template_body_action::operator()(iterator first, iterator last) const
+    void template_body_action::operator()(iterator, iterator) const
     {
         if(actions.suppress) return;
+
+        value_consumer values = actions.values.get();
+        std::string identifier = values.consume().get_quickbook();
+
+        std::vector<std::string> template_values;
+        BOOST_FOREACH(value const& p, values.consume()) {
+            template_values.push_back(p.get_quickbook());
+        }
+
+        BOOST_ASSERT(values.is(template_tags::block) || values.is(template_tags::phrase));
+        value body = values.consume();
+        BOOST_ASSERT(!values.is());
+    
         if (!actions.templates.add(
             template_symbol(
-                actions.template_identifier,
-                actions.template_info,
-                std::string(first, last),
+                identifier,
+                template_values,
+                body.get_quickbook(),
                 actions.filename,
-                first.get_position(),
-                actions.template_block,
+                body.get_position(),
+                body.get_tag() == template_tags::block,
                 &actions.templates.top_scope())))
         {
-            file_position const pos = first.get_position();
+            file_position const pos = body.get_position();
             detail::outerr(actions.filename, pos.line)
-                << "Template Redefinition: " << detail::utf8(actions.template_identifier) << std::endl;
+                << "Template Redefinition: " << detail::utf8(identifier) << std::endl;
             ++actions.error_count;
         }
-
-        actions.template_identifier.clear();
-        actions.template_info.clear();
     }
 
     namespace
@@ -1141,46 +1157,72 @@
     {
         if(actions.suppress) return;
 
+        value_consumer values = actions.values.get();
+        std::string title = values.consume(table_tags::title).get_quickbook();
+
         actions.out << "<variablelist>\n";
 
         actions.out << "<title>";
-        std::string::iterator first = actions.table_title.begin();
-        std::string::iterator last = actions.table_title.end();
-        while (first != last)
-            detail::print_char(*first++, actions.out.get());
+        detail::print_string(title, actions.out.get());
         actions.out << "</title>\n";
 
-        std::string str;
-        actions.phrase.swap(str);
-        actions.out << str;
+        BOOST_FOREACH(value_consumer entry, values) {
+            actions.out << start_varlistentry_;
+            
+            if(entry.is()) {
+                actions.out << start_varlistterm_;
+                actions.out << entry.consume().get_boostbook();
+                actions.out << end_varlistterm_;
+            }
+            
+            if(entry.is()) {
+                actions.out << start_varlistitem_;
+                BOOST_FOREACH(value phrase, entry) actions.out << phrase.get_boostbook();
+                actions.out << end_varlistitem_;
+            }
+
+            actions.out << end_varlistentry_;
+        }
 
         actions.out << "</variablelist>\n";
-        actions.table_span = 0;
-        actions.table_header.clear();
-        actions.table_title.clear();
     }
 
     void table_action::operator()(iterator, iterator) const
     {
         if(actions.suppress) return;
 
-        std::string::iterator first = actions.table_title.begin();
-        std::string::iterator last = actions.table_title.end();
-        bool has_title = first != last;
+        value_consumer values = actions.values.get();
+
+        std::string element_id;
+        if(values.is(general_tags::element_id))
+            element_id = values.consume().get_quickbook();
+
+        std::string title = values.consume(table_tags::title).get_quickbook();
+        bool has_title = !title.empty();
         
         std::string table_id;
         if(qbk_version_n >= 105) {
-            if(!actions.element_id.empty()) {
+            if(!element_id.empty()) {
                 table_id = fully_qualified_id(actions.doc_id,
-                    actions.qualified_section_id, actions.element_id);
+                    actions.qualified_section_id, element_id);
             }
             else if(has_title) {
                 table_id = fully_qualified_id(actions.doc_id,
                     actions.qualified_section_id,
-                    detail::make_identifier(first, last));
+                    detail::make_identifier(title.begin(), title.end()));
             }
         }
 
+        // Emulating the old behaviour which used the width of the final
+        // row for span_count.
+        int row_count = 0;
+        int span_count = 0;
+
+        BOOST_FOREACH(value row, values) {
+            ++row_count;
+            span_count = boost::distance(row);
+        }
+
         if (has_title)
         {
             actions.out << "<table frame=\"all\"";
@@ -1188,8 +1230,7 @@
                 actions.out << " id=\"" << table_id << "\"";
             actions.out << ">\n";
             actions.out << "<title>";
-            while (first != last)
-                detail::print_char(*first++, actions.out.get());
+            detail::print_string(title, actions.out.get());
             actions.out << "</title>";
         }
         else
@@ -1200,18 +1241,26 @@
             actions.out << ">\n";
         }
 
-        actions.out << "<tgroup cols=\"" << actions.table_span << "\">\n";
+        actions.out << "<tgroup cols=\"" << span_count << "\">\n";
 
-        if (!actions.table_header.empty())
+        if (row_count > 1)
         {
-            actions.out << "<thead>" << actions.table_header << "</thead>\n";
+            actions.out << "<thead>" << start_row_;
+            BOOST_FOREACH(value cell, values.consume()) {
+                actions.out << start_cell_ << cell.get_boostbook() << end_cell_;
+            }
+            actions.out << end_row_ << "</thead>\n";
         }
 
         actions.out << "<tbody>\n";
 
-        std::string str;
-        actions.phrase.swap(str);
-        actions.out << str;
+        BOOST_FOREACH(value row, values) {
+            actions.out << start_row_;
+            BOOST_FOREACH(value cell, row) {
+                actions.out << start_cell_ << cell.get_boostbook() << end_cell_;
+            }
+            actions.out << end_row_;
+        }
 
         actions.out << "</tbody>\n"
                      << "</tgroup>\n";
@@ -1224,45 +1273,17 @@
         {
             actions.out << "</informaltable>\n";
         }
-
-        actions.table_span = 0;
-        actions.table_header.clear();
-        actions.table_title.clear();
-    }
-
-    void start_row_action::operator()(char) const
-    {
-        if (actions.suppress) return;
-
-        // the first row is the header
-        if (header.empty() && !phrase.str().empty())
-        {
-            phrase.swap(header);
-        }
-
-        phrase << start_row_;
-        span = 0;
-    }
-
-    void start_row_action::operator()(iterator f, iterator) const
-    {
-        (*this)(*f);
-    }
-
-    void col_action::operator()(iterator, iterator) const
-    {
-        if(actions.suppress) return;
-        phrase << start_cell_ << actions.inside_text << end_cell_;
-        ++span;
     }
 
     void begin_section_action::operator()(iterator first, iterator last) const
     {    
         if(actions.suppress) return;
 
-        section_id = element_id.empty() ?
-            detail::make_identifier(first, last) :
-            element_id;
+        value_consumer values = actions.values.get();
+
+        section_id = values.is(general_tags::element_id) ?
+            values.consume().get_quickbook() :
+            detail::make_identifier(first, last);
 
         if (section_level != 0)
             qualified_section_id += '.';
@@ -1548,6 +1569,16 @@
         out.raw = std::string(first, last);
     }
     
+    void phrase_to_value_action::operator()(iterator first, iterator last) const
+    {
+        if(!actions.output_pre(actions.phrase)) return;
+
+        std::string value;
+        actions.phrase.swap(value);
+        actions.values.builder.insert(
+            bbk_value(value, actions.values.builder.release_tag()));
+    }
+    
     void inner_phrase_action_pre::operator()(iterator, iterator) const
     {
         // TODO: Really?
@@ -1604,7 +1635,8 @@
     void scoped_block_push::success_impl()
     {
         actions.inside_paragraph();
-        actions.inside_text = actions.out.str();
+        actions.values.builder.insert(
+            bbk_value(actions.out.str(), actions.values.builder.release_tag()));
     }
 
     set_no_eols_scoped::set_no_eols_scoped(quickbook::actions& actions)
Modified: branches/quickbook-filenames/tools/quickbook/src/actions.hpp
==============================================================================
--- branches/quickbook-filenames/tools/quickbook/src/actions.hpp	(original)
+++ branches/quickbook-filenames/tools/quickbook/src/actions.hpp	2011-02-14 19:23:57 EST (Mon, 14 Feb 2011)
@@ -175,7 +175,6 @@
         header_action(
             collector& out,
             collector& phrase,
-            std::string const& element_id,
             std::string const& library_id,
             std::string const& section_id,
             std::string const& qualified_section_id,
@@ -183,7 +182,6 @@
             quickbook::actions& actions)
         : out(out)
         , phrase(phrase)
-        , element_id(element_id)
         , library_id(library_id)
         , section_id(section_id)
         , qualified_section_id(qualified_section_id)
@@ -194,7 +192,6 @@
 
         collector& out;
         collector& phrase;
-        std::string const& element_id;
         std::string const& library_id;
         std::string const& section_id;
         std::string const& qualified_section_id;
@@ -209,7 +206,6 @@
         generic_header_action(
             collector& out,
             collector& phrase,
-            std::string const& element_id,
             std::string const& library_id,
             std::string const& section_id,
             std::string const& qualified_section_id,
@@ -217,7 +213,6 @@
             quickbook::actions& actions)
         : out(out)
         , phrase(phrase)
-        , element_id(element_id)
         , library_id(library_id)
         , section_id(section_id)
         , qualified_section_id(qualified_section_id)
@@ -228,7 +223,6 @@
 
         collector& out;
         collector& phrase;
-        std::string const& element_id;
         std::string const& library_id;
         std::string const& section_id;
         std::string const& qualified_section_id;
@@ -661,34 +655,6 @@
         quickbook::actions& actions;
     };
 
-    struct start_row_action
-    {
-        // Handles table rows
-
-        start_row_action(collector& phrase, unsigned& span, std::string& header, quickbook::actions& actions)
-            : phrase(phrase), span(span), header(header), actions(actions) {}
-
-        void operator()(char) const;
-        void operator()(iterator f, iterator) const;
-
-        collector& phrase;
-        unsigned& span;
-        std::string& header;
-        quickbook::actions& actions;
-    };
-
-    struct col_action
-    {
-        col_action(collector& phrase, unsigned& span, quickbook::actions& actions)
-        : phrase(phrase), span(span), actions(actions) {}
-
-        void operator()(iterator, iterator) const;
-
-        collector& phrase;
-        unsigned& span;
-        quickbook::actions& actions;
-    };
-
     struct begin_section_action
     {
         // Handles begin page
@@ -700,7 +666,6 @@
           , std::string& section_id
           , int& section_level
           , std::string& qualified_section_id
-          , std::string& element_id
           , quickbook::actions& actions)
         : out(out)
         , phrase(phrase)
@@ -708,7 +673,6 @@
         , section_id(section_id)
         , section_level(section_level)
         , qualified_section_id(qualified_section_id)
-        , element_id(element_id)
         , actions(actions) {}
 
         void operator()(iterator first, iterator last) const;
@@ -719,7 +683,6 @@
         std::string& section_id;
         int& section_level;
         std::string& qualified_section_id;
-        std::string& element_id;
         quickbook::actions& actions;
     };
 
@@ -847,6 +810,16 @@
         quickbook::actions& actions;
     };
 
+    struct phrase_to_value_action
+    {
+        phrase_to_value_action(quickbook::actions& actions)
+            : actions(actions) {}
+
+        void operator()(iterator first, iterator last) const;
+
+        quickbook::actions& actions;
+    };
+
     struct inner_phrase_action_pre
     {
         inner_phrase_action_pre(quickbook::actions& actions)
Modified: branches/quickbook-filenames/tools/quickbook/src/actions_class.cpp
==============================================================================
--- branches/quickbook-filenames/tools/quickbook/src/actions_class.cpp	(original)
+++ branches/quickbook-filenames/tools/quickbook/src/actions_class.cpp	2011-02-14 19:23:57 EST (Mon, 14 Feb 2011)
@@ -23,6 +23,9 @@
     actions::actions(fs::path const& filein_, fs::path const& outdir_, string_stream& out_)
         : grammar_()
 
+        , values()
+        , phrase_value(*this)
+
     // header info
         , doc_type()
         , doc_title()
@@ -56,15 +59,9 @@
         , source_mode("c++")
 
     // temporary or global state
-        , element_id()
-        , table_title()
-        , table_span(0)
-        , table_header()
         , macro_id()
         , list_marks()
         , list_indent(-1)
-        , template_identifier()
-        , template_info()
         , template_depth(0)
         , templates()
         , error_count(0)
@@ -94,13 +91,13 @@
         , code_block(phrase, phrase, *this)
         , inline_code(phrase, *this)
         , inside_paragraph(out, phrase, paragraph_pre, paragraph_post, *this)
-        , h(out, phrase, element_id, doc_id, section_id, qualified_section_id, section_level, *this)
-        , h1(out, phrase, element_id, doc_id, section_id, qualified_section_id, 1, *this)
-        , h2(out, phrase, element_id, doc_id, section_id, qualified_section_id, 2, *this)
-        , h3(out, phrase, element_id, doc_id, section_id, qualified_section_id, 3, *this)
-        , h4(out, phrase, element_id, doc_id, section_id, qualified_section_id, 4, *this)
-        , h5(out, phrase, element_id, doc_id, section_id, qualified_section_id, 5, *this)
-        , h6(out, phrase, element_id, doc_id, section_id, qualified_section_id, 6, *this)
+        , h(out, phrase, doc_id, section_id, qualified_section_id, section_level, *this)
+        , h1(out, phrase, doc_id, section_id, qualified_section_id, 1, *this)
+        , h2(out, phrase, doc_id, section_id, qualified_section_id, 2, *this)
+        , h3(out, phrase, doc_id, section_id, qualified_section_id, 3, *this)
+        , h4(out, phrase, doc_id, section_id, qualified_section_id, 4, *this)
+        , h5(out, phrase, doc_id, section_id, qualified_section_id, 5, *this)
+        , h6(out, phrase, doc_id, section_id, qualified_section_id, 6, *this)
         , hr(out, hr_, *this)
         , blurb(out, blurb_pre, blurb_post, *this)
         , blockquote(out, blockquote_pre, blockquote_post, *this)
@@ -164,13 +161,6 @@
         , simple_strikethrough(phrase, strikethrough_pre_, strikethrough_post_, macro, *this)
 
         , variablelist(*this)
-        , start_varlistentry(phrase, start_varlistentry_, *this)
-        , end_varlistentry(phrase, end_varlistentry_, *this)
-        , start_varlistterm(phrase, start_varlistterm_, *this)
-        , end_varlistterm(phrase, end_varlistterm_, *this)
-        , start_varlistitem(phrase, start_varlistitem_, *this)
-        , varlistitem(phrase, "", "", *this)
-        , end_varlistitem(phrase, end_varlistitem_, *this)
 
         , break_(phrase, *this)
         , macro_identifier(*this)
@@ -183,12 +173,9 @@
         , link_pre(phrase, link_pre_, *this)
         , link_post(phrase, link_post_, *this)
         , table(*this)
-        , start_row(phrase, table_span, table_header, *this)
-        , end_row(phrase, end_row_, *this)
-        , cell(phrase, table_span, *this)
         , anchor(*this)
 
-        , begin_section(out, phrase, doc_id, section_id, section_level, qualified_section_id, element_id, *this)
+        , begin_section(out, phrase, doc_id, section_id, section_level, qualified_section_id, *this)
         , end_section(out, section_level, min_section_level, qualified_section_id, error_count, *this)
         , element_id_warning(*this)
         , xinclude(out, *this)
Modified: branches/quickbook-filenames/tools/quickbook/src/actions_class.hpp
==============================================================================
--- branches/quickbook-filenames/tools/quickbook/src/actions_class.hpp	(original)
+++ branches/quickbook-filenames/tools/quickbook/src/actions_class.hpp	2011-02-14 19:23:57 EST (Mon, 14 Feb 2011)
@@ -46,6 +46,7 @@
         static int const max_template_depth = 100;
 
         value_parser            values;
+        phrase_to_value_action  phrase_value;
 
     // header info
         std::string             doc_type;
@@ -104,19 +105,11 @@
         std::stack<string_symbols> macro_stack;
 
     // temporary or global state
-        std::string             inside_text;
-        std::string             element_id;
-        std::string             table_title;
-        unsigned                table_span;
-        std::string             table_header;
         std::string             macro_id;
         std::stack<mark_type>   list_marks;
         int                     list_indent;
         bool                    condition;
-        std::string             template_identifier;
-        string_list             template_info;
         int                     template_depth;
-        bool                    template_block;
         template_stack          templates;
         int                     error_count;
         string_list             anchors;
@@ -218,13 +211,6 @@
         simple_phrase_action    simple_strikethrough;
 
         variablelist_action     variablelist;
-        markup_action           start_varlistentry;
-        markup_action           end_varlistentry;
-        markup_action           start_varlistterm;
-        markup_action           end_varlistterm;
-        markup_action           start_varlistitem;
-        tagged_action           varlistitem;
-        markup_action           end_varlistitem;
 
         break_action            break_;
         macro_identifier_action macro_identifier;
@@ -237,9 +223,6 @@
         link_action             link_pre;
         markup_action           link_post;
         table_action            table;
-        start_row_action        start_row;
-        markup_action           end_row;
-        col_action              cell;
         anchor_action           anchor;
 
         begin_section_action    begin_section;
Modified: branches/quickbook-filenames/tools/quickbook/src/block_element_grammar.cpp
==============================================================================
--- branches/quickbook-filenames/tools/quickbook/src/block_element_grammar.cpp	(original)
+++ branches/quickbook-filenames/tools/quickbook/src/block_element_grammar.cpp	2011-02-14 19:23:57 EST (Mon, 14 Feb 2011)
@@ -11,6 +11,8 @@
 #include "utils.hpp"
 #include "actions_class.hpp"
 #include "grammar_impl.hpp"
+#include "table_tags.hpp"
+#include "template_tags.hpp"
 #include <boost/spirit/include/classic_assign_actor.hpp>
 #include <boost/spirit/include/classic_if.hpp>
 #include <boost/spirit/include/classic_clear_actor.hpp>
@@ -41,33 +43,24 @@
         block_element_grammar_local& local = store_.create();
 
         local.element_id =
-                ':'
-            >>
-                (
-                    cl::if_p(qbk_since(105u)) [space]
-                >>  (+(cl::alnum_p | '_'))      [cl::assign_a(actions.element_id)]
+            !(  ':'
+            >>  (   cl::if_p(qbk_since(105u)) [space]
+                >>  (+(cl::alnum_p | '_'))      [actions.values.entry(general_tags::element_id)]
                 |   cl::eps_p                   [actions.element_id_warning]
-                                                [cl::assign_a(actions.element_id)]
                 )
-            | cl::eps_p                         [cl::assign_a(actions.element_id)]
+            )
             ;
         
         local.element_id_1_5 =
                 cl::if_p(qbk_since(105u)) [
                     local.element_id
                 ]
-                .else_p [
-                    cl::eps_p                   [cl::assign_a(actions.element_id)]
-                ]
                 ;
 
         local.element_id_1_6 =
                 cl::if_p(qbk_since(106u)) [
                     local.element_id
                 ]
-                .else_p [
-                    cl::eps_p                   [cl::assign_a(actions.element_id)]
-                ]
                 ;
 
         elements.add
@@ -104,9 +97,6 @@
         local.h5 = space >> local.element_id_1_6 >> space >> local.inner_phrase [actions.h5];
         local.h6 = space >> local.element_id_1_6 >> space >> local.inner_phrase [actions.h6];
         
-        static const bool true_ = true;
-        static const bool false_ = false;
-
         elements.add("blurb", element_info(element_info::block, &local.blurb));
 
         local.blurb =
@@ -183,22 +173,21 @@
 
         local.template_ =
                space
-            >> local.template_id                [cl::assign_a(actions.template_identifier)]
-                                                [cl::clear_a(actions.template_info)]
-            >>
+            >> local.template_id                [actions.values.reset][actions.values.entry]
+            >> actions.values.scoped[
             !(
                 space >> '['
                 >> *(
                         space
-                    >>  local.template_id       [cl::push_back_a(actions.template_info)]
+                    >>  local.template_id       [actions.values.entry]
                     )
                 >> space >> ']'
             )
+            ]
             >>  (   cl::eps_p(*cl::blank_p >> cl::eol_p)
-                                                [cl::assign_a(actions.template_block, true_)]
-                |   cl::eps_p                   [cl::assign_a(actions.template_block, false_)]
-                )
-            >>  local.template_body             [actions.template_body]
+                >>  local.template_body         [actions.values.entry(template_tags::block)]
+                |   local.template_body         [actions.values.entry(template_tags::phrase)]
+                )                               [actions.template_body]
             ;
 
         local.template_body =
@@ -213,7 +202,7 @@
 
         local.variablelist =
                 (cl::eps_p(*cl::blank_p >> cl::eol_p) | space)
-            >>  (*(cl::anychar_p - eol))        [cl::assign_a(actions.table_title)]
+            >>  (*(cl::anychar_p - eol))        [actions.values.entry(table_tags::title)]
             >>  (+eol)                          [actions.output_pre]
             >>  *local.varlistentry
             >>  cl::eps_p                       [actions.variablelist]
@@ -221,47 +210,40 @@
 
         local.varlistentry =
             space
-            >>  cl::ch_p('[')                   [actions.start_varlistentry]
-            >>
-            (
+            >>  cl::ch_p('[')
+            >>  actions.values.scoped
+            [
                 (
-                    local.varlistterm           [actions.start_varlistitem]
-                    >>  (   +local.varlistitem  [actions.varlistitem]
+                    local.varlistterm
+                    >>  (   +local.varlistitem
                         |   cl::eps_p           [actions.error]
-                        )                       [actions.end_varlistitem]
-                    >>  cl::ch_p(']')           [actions.end_varlistentry]
+                        )
+                    >>  cl::ch_p(']')
                     >>  space
                 )
                 | cl::eps_p                     [actions.error]
-            )
+            ]
             ;
 
         local.varlistterm =
             space
-            >>  cl::ch_p('[')                   [actions.start_varlistterm]
-            >>
-            (
-                (
-                    phrase
-                    >>  cl::ch_p(']')           [actions.end_varlistterm]
-                    >>  space
-                )
-                | cl::eps_p                     [actions.error]
-            )
+            >>  cl::ch_p('[')
+            >>  actions.values.save
+                [   phrase
+                >>  cl::ch_p(']')
+                >>  space
+                |   cl::eps_p                   [actions.error]
+                ]                               [actions.phrase_value]                
             ;
 
         local.varlistitem =
             space
             >>  cl::ch_p('[')
-            >>
-            (
-                (
-                    inside_paragraph
-                    >>  cl::ch_p(']')
-                    >>  space
+            >>  (   inside_paragraph
+                >>  cl::ch_p(']')
+                >>  space
+                |   cl::eps_p                   [actions.error]
                 )
-                | cl::eps_p                     [actions.error]
-            )
             ;
 
         elements.add
@@ -272,7 +254,7 @@
                 (cl::eps_p(*cl::blank_p >> cl::eol_p) | space)
             >>  local.element_id_1_5
             >>  (cl::eps_p(*cl::blank_p >> cl::eol_p) | space)
-            >>  (*(cl::anychar_p - eol))        [cl::assign_a(actions.table_title)]
+            >>  (*(cl::anychar_p - eol))        [actions.values.entry(table_tags::title)]
             >>  (+eol)                          [actions.output_pre]
             >>  *local.table_row
             >>  cl::eps_p                       [actions.table]
@@ -280,12 +262,12 @@
 
         local.table_row =
             space
-            >>  cl::ch_p('[')                   [actions.start_row]
+            >>  cl::ch_p('[')
             >>
             (
                 (
-                    *local.table_cell
-                    >>  cl::ch_p(']')           [actions.end_row]
+                    actions.values.scoped(table_tags::row)[*local.table_cell]
+                    >>  cl::ch_p(']')
                     >>  space
                 )
                 | cl::eps_p                     [actions.error]
@@ -295,9 +277,10 @@
         local.table_cell =
                 space
             >>  cl::ch_p('[')
-            >>  (   inside_paragraph
+            >>  (   cl::eps_p                   [actions.values.tag(table_tags::cell)]
+                >>  inside_paragraph
                 >>  cl::ch_p(']')
-                >>  space                       [actions.cell]
+                >>  space
                 | cl::eps_p                     [actions.error]
                 )
             ;
Modified: branches/quickbook-filenames/tools/quickbook/src/main_grammar.cpp
==============================================================================
--- branches/quickbook-filenames/tools/quickbook/src/main_grammar.cpp	(original)
+++ branches/quickbook-filenames/tools/quickbook/src/main_grammar.cpp	2011-02-14 19:23:57 EST (Mon, 14 Feb 2011)
@@ -164,6 +164,7 @@
             >>  local.element
             >>  cl::eps_p(local.check_element(element_info::in_block))
                                                 [actions.inside_paragraph]
+                                                [actions.values.reset]
             >>  (   local.element_rule
                 >>  (   (space >> ']')
                     |   cl::eps_p               [actions.error]
@@ -357,11 +358,13 @@
 
         inside_paragraph =
             actions.scoped_block[
+            actions.values.save[
             (*( common
             |   (cl::anychar_p - phrase_end)    [actions.plain_char]
             |   (+eol)                          [actions.inside_paragraph]
             ))                                  [actions.inside_paragraph]
             ]
+            ]
             ;
 
         local.phrase_element
Added: branches/quickbook-filenames/tools/quickbook/src/table_tags.hpp
==============================================================================
--- (empty file)
+++ branches/quickbook-filenames/tools/quickbook/src/table_tags.hpp	2011-02-14 19:23:57 EST (Mon, 14 Feb 2011)
@@ -0,0 +1,26 @@
+/*=============================================================================
+    Copyright (c) 2011 Daniel James
+
+    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_TABLE_TAGS_HPP)
+#define BOOST_SPIRIT_QUICKBOOK_TABLE_TAGS_HPP
+
+#include "value_tags.hpp"
+
+namespace quickbook
+{
+    QUICKBOOK_VALUE_TAGS(table_tags, 0x200,
+        (title)(row)(cell)
+    )
+
+    QUICKBOOK_VALUE_TAGS(general_tags, 0x300,
+        (element_id)
+    )
+
+}
+
+#endif
\ No newline at end of file