$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r69169 - branches/quickbook-filenames/tools/quickbook/src
From: dnljms_at_[hidden]
Date: 2011-02-22 15:30:48
Author: danieljames
Date: 2011-02-22 15:30:47 EST (Tue, 22 Feb 2011)
New Revision: 69169
URL: http://svn.boost.org/trac/boost/changeset/69169
Log:
Single rule for all headings.
Text files modified: 
   branches/quickbook-filenames/tools/quickbook/src/block_element_grammar.cpp |    56 ++++++--------------------------------- 
   branches/quickbook-filenames/tools/quickbook/src/grammar_impl.hpp          |     9 +++++-                                  
   branches/quickbook-filenames/tools/quickbook/src/main_grammar.cpp          |    47 ++++++++++++++++++---------------       
   3 files changed, 42 insertions(+), 70 deletions(-)
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-22 15:30:47 EST (Tue, 22 Feb 2011)
@@ -26,7 +26,7 @@
     struct block_element_grammar_local
     {
         cl::rule<scanner>
-                        h, h1, h2, h3, h4, h5, h6, heading,
+                        heading,
                         blurb, blockquote,
                         warning, caution, important, note, tip,
                         inner_phrase, def_macro,
@@ -85,16 +85,6 @@
                                                 [actions.end_section]
             ;
 
-        elements.add
-            ("heading", element_info(element_info::block, &local.h))
-            ("h1", element_info(element_info::block, &local.h1))
-            ("h2", element_info(element_info::block, &local.h2))
-            ("h3", element_info(element_info::block, &local.h3))
-            ("h4", element_info(element_info::block, &local.h4))
-            ("h5", element_info(element_info::block, &local.h5))
-            ("h6", element_info(element_info::block, &local.h6))
-            ;
-
         local.heading
             =   actions.values.scoped
                 [   space
@@ -104,44 +94,16 @@
                 ]
             ;
 
-        // This looks verbose now, but it'll eventually be replaced with a
-        // more automatic version (see how doc_info works).
-
-        local.h
-            =   cl::eps_p                       [actions.values.tag(block_tags::generic_heading)]
-            >>  local.heading
-            ;
-
-        local.h1
-            =   cl::eps_p                       [actions.values.tag(block_tags::heading1)]
-            >>  local.heading
-            ;
-
-        local.h2
-            =   cl::eps_p                       [actions.values.tag(block_tags::heading2)]
-            >>  local.heading
-            ;
-
-        local.h3
-            =   cl::eps_p                       [actions.values.tag(block_tags::heading3)]
-            >>  local.heading
-            ;
-
-        local.h4
-            =   cl::eps_p                       [actions.values.tag(block_tags::heading4)]
-            >>  local.heading
-            ;
-
-        local.h5
-            =   cl::eps_p                       [actions.values.tag(block_tags::heading5)]
-            >>  local.heading
+        elements.add
+            ("heading", element_info(element_info::block, &local.heading, block_tags::generic_heading))
+            ("h1", element_info(element_info::block, &local.heading, block_tags::heading1))
+            ("h2", element_info(element_info::block, &local.heading, block_tags::heading2))
+            ("h3", element_info(element_info::block, &local.heading, block_tags::heading3))
+            ("h4", element_info(element_info::block, &local.heading, block_tags::heading4))
+            ("h5", element_info(element_info::block, &local.heading, block_tags::heading5))
+            ("h6", element_info(element_info::block, &local.heading, block_tags::heading6))
             ;
 
-        local.h6
-            =   cl::eps_p                       [actions.values.tag(block_tags::heading6)]
-            >>  local.heading
-            ;
-        
         elements.add("blurb", element_info(element_info::block, &local.blurb));
 
         local.blurb =
Modified: branches/quickbook-filenames/tools/quickbook/src/grammar_impl.hpp
==============================================================================
--- branches/quickbook-filenames/tools/quickbook/src/grammar_impl.hpp	(original)
+++ branches/quickbook-filenames/tools/quickbook/src/grammar_impl.hpp	2011-02-22 15:30:47 EST (Tue, 22 Feb 2011)
@@ -13,6 +13,7 @@
 
 #include "grammar.hpp"
 #include "rule_store.hpp"
+#include "values.hpp"
 #include <boost/spirit/include/classic_symbols.hpp>
 
 namespace quickbook
@@ -33,11 +34,15 @@
             conditional_or_block = 5
         };
 
-        element_info(type_enum t, cl::rule<scanner>* r)
-            : type(t), rule(r) {}
+        element_info(
+                type_enum t,
+                cl::rule<scanner>* r,
+                value::tag_type tag = value::no_tag)
+            : type(t), rule(r), tag(tag) {}
 
         type_enum type;
         cl::rule<scanner>* rule;
+        value::tag_type tag;
     };
 
     struct quickbook_grammar::impl
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-22 15:30:47 EST (Tue, 22 Feb 2011)
@@ -68,33 +68,13 @@
 
     struct main_grammar_local
     {
-        cl::rule<scanner>
-                        top_level, blocks, paragraph_separator,
-                        block_element,
-                        code, code_line, blank_line, hr,
-                        list, ordered_list, list_item,
-                        phrase_element, extended_phrase_element, element,
-                        simple_phrase_end,
-                        escape,
-                        inline_code, simple_format,
-                        simple_bold, simple_italic, simple_underline,
-                        simple_teletype, template_,
-                        code_block, macro,
-                        template_args,
-                        template_args_1_4, template_arg_1_4,
-                        template_inner_arg_1_4, brackets_1_4,
-                        template_args_1_5, template_arg_1_5, template_arg_1_5_content,
-                        template_inner_arg_1_5, brackets_1_5,
-                        command_line_macro_identifier, command_line_phrase,
-                        dummy_block
-                        ;
-
         struct assign_element_type {
             assign_element_type(main_grammar_local& l) : l(l) {}
 
             void operator()(element_info& t) const {
                 l.element_type = t.type;
                 l.element_rule = *t.rule;
+                l.element_tag = t.tag;
             }
             
             main_grammar_local& l;
@@ -112,8 +92,30 @@
             element_info::context t;
         };
 
+        cl::rule<scanner>
+                        top_level, blocks, paragraph_separator,
+                        block_element,
+                        code, code_line, blank_line, hr,
+                        list, ordered_list, list_item,
+                        phrase_element, extended_phrase_element, element,
+                        simple_phrase_end,
+                        escape,
+                        inline_code, simple_format,
+                        simple_bold, simple_italic, simple_underline,
+                        simple_teletype, template_,
+                        code_block, macro,
+                        template_args,
+                        template_args_1_4, template_arg_1_4,
+                        template_inner_arg_1_4, brackets_1_4,
+                        template_args_1_5, template_arg_1_5, template_arg_1_5_content,
+                        template_inner_arg_1_5, brackets_1_5,
+                        command_line_macro_identifier, command_line_phrase,
+                        dummy_block
+                        ;
+
         element_info::type_enum element_type;
         cl::rule<scanner> element_rule;
+        value::tag_type element_tag;
         assign_element_type assign_element;
 
         main_grammar_local()
@@ -174,6 +176,7 @@
             >>  cl::eps_p(local.check_element(element_info::in_block))
                                                 [actions.inside_paragraph]
                                                 [actions.values.reset()]
+                                                [actions.values.tag(detail::var(local.element_tag))]
             >>  (   local.element_rule
                 >>  (   (space >> ']')          [actions.element]
                     |   cl::eps_p               [actions.error]
@@ -384,6 +387,7 @@
             >>  (   local.element
                 >>  cl::eps_p(local.check_element(element_info::in_phrase))
                                                 [actions.values.reset()]
+                                                [actions.values.tag(detail::var(local.element_tag))]
                 >>  local.element_rule
                 >>  cl::eps_p(space >> ']')     [actions.element]
                 |   local.template_
@@ -398,6 +402,7 @@
             >>  cl::eps_p(local.check_element(element_info::in_conditional))
                                                 [actions.inside_paragraph]
                                                 [actions.values.reset()]
+                                                [actions.values.tag(detail::var(local.element_tag))]
             >>  (   local.element_rule
                 >>  (   (space >> ']')          [actions.element]
                     |   cl::eps_p               [actions.error]