$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r85112 - trunk/tools/quickbook/src
From: dnljms_at_[hidden]
Date: 2013-07-22 15:32:43
Author: danieljames
Date: 2013-07-22 15:32:43 EDT (Mon, 22 Jul 2013)
New Revision: 85112
URL: http://svn.boost.org/trac/boost/changeset/85112
Log:
Use a value in `local` for `context`.
Text files modified: 
   trunk/tools/quickbook/src/main_grammar.cpp |    91 +++++++++++++++++++++++---------------- 
   1 files changed, 53 insertions(+), 38 deletions(-)
Modified: trunk/tools/quickbook/src/main_grammar.cpp
==============================================================================
--- trunk/tools/quickbook/src/main_grammar.cpp	Mon Jul 22 15:32:21 2013	(r85111)
+++ trunk/tools/quickbook/src/main_grammar.cpp	2013-07-22 15:32:43 EDT (Mon, 22 Jul 2013)	(r85112)
@@ -112,23 +112,19 @@
                         skip_escape
                         ;
 
-        struct context_closure : cl::closure<context_closure, element_info::context>
-        {
-            member1 context;
-        };
-
         cl::rule<scanner> simple_markup, simple_markup_end;
 
         cl::rule<scanner> paragraph;
         cl::rule<scanner> list;
-        cl::rule<scanner, context_closure::context_t> syntactic_block_item;
-        cl::rule<scanner, context_closure::context_t> common;
-        cl::rule<scanner, context_closure::context_t> element;
+        cl::rule<scanner> syntactic_block_item;
+        cl::rule<scanner> common;
+        cl::rule<scanner> element;
 
         // state
         std::stack<list_stack_item> list_stack;
         unsigned int list_indent;
         bool no_eols;
+        element_info::context context;
         char mark; // Simple markup's deliminator
         bool still_in_block; // Inside a syntatic block
 
@@ -147,6 +143,7 @@
             : list_stack()
             , list_indent(0)
             , no_eols(true)
+            , context(element_info::in_block)
             , mark('\0')
             , state_(state)
             {}
@@ -158,7 +155,7 @@
 
         bool start()
         {
-            if (!(l.info.type & l.element.context()) ||
+            if (!(l.info.type & l.context) ||
                     qbk_version_n < l.info.qbk_version)
                 return false;
 
@@ -294,6 +291,8 @@
 
         set_scoped_value<main_grammar_local, bool> scoped_no_eols(
                 local, &main_grammar_local::no_eols);
+        set_scoped_value<main_grammar_local, element_info::context> scoped_context(
+                local, &main_grammar_local::context);
         set_scoped_value<main_grammar_local, bool> scoped_still_in_block(
                 local, &main_grammar_local::still_in_block);
 
@@ -317,9 +316,9 @@
         // brackets.
         nested_phrase =
             state.values.save()
-            [   *( ~cl::eps_p(']')
-                >>  local.common(element_info::in_phrase)
-                )
+            [
+                scoped_context(element_info::in_phrase)
+                [*(~cl::eps_p(']') >> local.common)]
             ]
             ;
 
@@ -327,9 +326,9 @@
         // by a paragraph end.
         paragraph_phrase =
             state.values.save()
-            [   *( ~cl::eps_p(phrase_end)
-                >>  local.common(element_info::in_phrase)
-                )
+            [
+                scoped_context(element_info::in_phrase)
+                [*(~cl::eps_p(phrase_end) >> local.common)]
             ]
             ;
 
@@ -337,9 +336,9 @@
         // elements.
         extended_phrase =
             state.values.save()
-            [   *( ~cl::eps_p(phrase_end)
-                >>  local.common(element_info::in_conditional)
-                )
+            [
+                scoped_context(element_info::in_conditional)
+                [*(~cl::eps_p(phrase_end) >> local.common)]
             ]
             ;
 
@@ -349,15 +348,20 @@
         // is part of the paragraph that contains it.
         inline_phrase =
             state.values.save()
-            [   *local.common(element_info::in_phrase)
+            [
+                scoped_context(element_info::in_phrase)
+                [*local.common]
             ]
             ;
 
         table_title_phrase =
             state.values.save()
-            [   *( ~cl::eps_p(space >> (']' | '[' >> space >> '['))
-                >>  local.common(element_info::in_phrase)
-                )
+            [
+                scoped_context(element_info::in_phrase)
+                [   *( ~cl::eps_p(space >> (']' | '[' >> space >> '['))
+                    >>  local.common
+                    )
+                ]
             ]
             ;
 
@@ -396,10 +400,13 @@
 
         local.paragraph =
             scoped_still_in_block(true)
-            [   local.syntactic_block_item(element_info::only_contextual_block)
-            >>  *(  cl::eps_p(ph::var(local.still_in_block))
-                >>  local.syntactic_block_item(element_info::only_block)
-                )
+            [
+                scoped_context(element_info::only_contextual_block)
+                [   local.syntactic_block_item  [ph::var(local.context) = element_info::only_block]
+                >>  *(  cl::eps_p(ph::var(local.still_in_block))
+                    >>  local.syntactic_block_item
+                    )
+                ]
             ]                                   [paragraph]
             ;
 
@@ -408,25 +415,30 @@
             >>  (cl::ch_p('*') | '#')
             >>  (*cl::blank_p)
             >>  scoped_still_in_block(true)
-                [   *(  cl::eps_p(ph::var(local.still_in_block))
-                    >>  (   qbk_ver(107u) >> local.syntactic_block_item(element_info::only_block)
-                        |   qbk_ver(0, 107u) >> local.syntactic_block_item(element_info::only_list_block)
+                [   qbk_ver(107u) >> scoped_context(element_info::only_block)
+                    [   *(  cl::eps_p(ph::var(local.still_in_block))
+                        >>  local.syntactic_block_item
                         )
-                    )
+                    ]
+                |   qbk_ver(0, 107u) >> scoped_context(element_info::only_list_block)
+                    [   *(  cl::eps_p(ph::var(local.still_in_block))
+                        >>  local.syntactic_block_item
+                        )
+                    ]
                 ]                                   [list_item]
                 // TODO: `list_item` is sometimes called in the wrong place.
                 // Currently harmless.
             ;
 
         local.syntactic_block_item =
-                local.element(local.syntactic_block_item.context)
+                local.element
                 // Note that we don't do this for lists in 1.6 to avoid messing
                 // up on nested block elements.
             >>  !(  cl::eps_p(in_list) >> eol
                 |   qbk_ver(0, 106u)   >> eol
                 )                               [ph::var(local.still_in_block) = false]
             |   local.paragraph_separator       [ph::var(local.still_in_block) = false]
-            |   local.common(element_info::in_phrase)
+            |   scoped_context(element_info::in_phrase) [ local.common ]
             ;
 
         local.paragraph_separator =
@@ -444,11 +456,14 @@
         // Blocks contains within an element, e.g. a table cell or a footnote.
         inside_paragraph =
             state.values.save()
-            [   *(  local.paragraph_separator   [paragraph]
-                |   ~cl::eps_p(']')
-                >>  local.common(element_info::in_nested_block)
-                )
-            ]                                   [paragraph]
+            [
+                scoped_context(element_info::in_nested_block)
+                [   *(  local.paragraph_separator   [paragraph]
+                    |   ~cl::eps_p(']')
+                    >>  local.common
+                    )
+                ]
+            ]                                       [paragraph]
             ;
 
         local.hr =
@@ -503,7 +518,7 @@
 
         local.common =
                 local.macro
-            |   local.element(local.common.context)
+            |   local.element
             |   local.template_
             |   local.break_
             |   local.code_block