$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r67634 - trunk/tools/quickbook/src
From: dnljms_at_[hidden]
Date: 2011-01-03 17:11:50
Author: danieljames
Date: 2011-01-03 17:11:44 EST (Mon, 03 Jan 2011)
New Revision: 67634
URL: http://svn.boost.org/trac/boost/changeset/67634
Log:
Use a single grammar.
Speeds up quickbook a fair bit, hopefully will make up for the anchors
change which was quite costly.
Text files modified: 
   trunk/tools/quickbook/src/actions.cpp          |     6 ++----                                  
   trunk/tools/quickbook/src/actions_class.cpp    |    15 +++++++++++++--                         
   trunk/tools/quickbook/src/actions_class.hpp    |     6 ++++++                                  
   trunk/tools/quickbook/src/fwd.hpp              |     1 +                                       
   trunk/tools/quickbook/src/quickbook.cpp        |    10 ++++------                              
   trunk/tools/quickbook/src/syntax_highlight.hpp |    12 ++++++------                            
   6 files changed, 32 insertions(+), 18 deletions(-)
Modified: trunk/tools/quickbook/src/actions.cpp
==============================================================================
--- trunk/tools/quickbook/src/actions.cpp	(original)
+++ trunk/tools/quickbook/src/actions.cpp	2011-01-03 17:11:44 EST (Mon, 03 Jan 2011)
@@ -813,15 +813,13 @@
             }
             else
             {
-                quickbook_grammar g(actions);
-
                 if (!body.is_block)
                 {
                     //  do a phrase level parse
                     iterator first(body.content.begin(), body.content.end(),
                         position(body.position.file.c_str(), body.position.line, body.position.column));
                     iterator last(body.content.end(), body.content.end());
-                    return cl::parse(first, last, g.simple_phrase).full;
+                    return cl::parse(first, last, actions.grammar().simple_phrase).full;
                 }
                 else
                 {
@@ -833,7 +831,7 @@
                     iterator first(content.begin(), content.end(),
                         position(body.position.file.c_str(), body.position.line, body.position.column));
                     iterator last(content.end(), content.end());
-                    return cl::parse(first, last, g.block).full;
+                    return cl::parse(first, last, actions.grammar().block).full;
                 }
             }
         }
Modified: trunk/tools/quickbook/src/actions_class.cpp
==============================================================================
--- trunk/tools/quickbook/src/actions_class.cpp	(original)
+++ trunk/tools/quickbook/src/actions_class.cpp	2011-01-03 17:11:44 EST (Mon, 03 Jan 2011)
@@ -11,6 +11,7 @@
 #include "actions_class.hpp"
 #include "markups.hpp"
 #include "quickbook.hpp"
+#include "grammar.hpp"
 
 #if (defined(BOOST_MSVC) && (BOOST_MSVC <= 1310))
 #pragma warning(disable:4355)
@@ -19,8 +20,10 @@
 namespace quickbook
 {
     actions::actions(char const* filein_, fs::path const& outdir_, string_stream& out_)
+        : grammar_()
+
     // header info
-        : doc_type()
+        , doc_type()
         , doc_title()
         , doc_version()
         , doc_id()
@@ -210,8 +213,12 @@
             ("__TIME__", std::string(quickbook_get_time))
             ("__FILENAME__", filename_str)
         ;
+        
+        boost::scoped_ptr<quickbook_grammar> g(
+            new quickbook_grammar(*this));
+        grammar_.swap(g);
     }
-
+    
     void actions::push()
     {
         state_stack.push(
@@ -272,4 +279,8 @@
         list_buffer.pop();
         templates.pop();
     }
+    
+    quickbook_grammar& actions::grammar() const {
+        return *grammar_;
+    }
 }
Modified: trunk/tools/quickbook/src/actions_class.hpp
==============================================================================
--- trunk/tools/quickbook/src/actions_class.hpp	(original)
+++ trunk/tools/quickbook/src/actions_class.hpp	2011-01-03 17:11:44 EST (Mon, 03 Jan 2011)
@@ -13,6 +13,7 @@
 #include "actions.hpp"
 #include "scoped_parser.hpp"
 #include <boost/tuple/tuple.hpp>
+#include <boost/scoped_ptr.hpp>
 
 namespace quickbook
 {
@@ -23,6 +24,10 @@
     {
         actions(char const* filein_, fs::path const& outdir, string_stream& out_);
 
+    private:
+        boost::scoped_ptr<quickbook_grammar> grammar_;
+
+    public:
     ///////////////////////////////////////////////////////////////////////////
     // State
     ///////////////////////////////////////////////////////////////////////////
@@ -124,6 +129,7 @@
         void copy_macros_for_write();
         void push();
         void pop();
+        quickbook_grammar& grammar() const;
 
     ///////////////////////////////////////////////////////////////////////////
     // actions
Modified: trunk/tools/quickbook/src/fwd.hpp
==============================================================================
--- trunk/tools/quickbook/src/fwd.hpp	(original)
+++ trunk/tools/quickbook/src/fwd.hpp	2011-01-03 17:11:44 EST (Mon, 03 Jan 2011)
@@ -18,6 +18,7 @@
 namespace quickbook
 {
     struct actions;
+    struct quickbook_grammar;
 
     typedef boost::spirit::classic::file_position_base<char const*> position;
     typedef boost::spirit::classic::position_iterator<
Modified: trunk/tools/quickbook/src/quickbook.cpp
==============================================================================
--- trunk/tools/quickbook/src/quickbook.cpp	(original)
+++ trunk/tools/quickbook/src/quickbook.cpp	2011-01-03 17:11:44 EST (Mon, 03 Jan 2011)
@@ -44,8 +44,6 @@
 
     static void set_macros(actions& actor)
     {
-        quickbook_grammar g(actor);
-
         for(std::vector<std::string>::const_iterator
                 it = preset_defines.begin(),
                 end = preset_defines.end();
@@ -54,7 +52,7 @@
             iterator first(it->begin(), it->end(), "command line parameter");
             iterator last(it->end(), it->end());
 
-            cl::parse(first, last, g.command_line_macro);
+            cl::parse(first, last, actor.grammar().command_line_macro);
             // TODO: Check result?
         }
     }
@@ -81,14 +79,13 @@
         iterator first(storage.begin(), storage.end(), filein_);
         iterator last(storage.end(), storage.end());
 
-        quickbook_grammar g(actor);
-        cl::parse_info<iterator> info = cl::parse(first, last, g.doc_info);
+        cl::parse_info<iterator> info = cl::parse(first, last, actor.grammar().doc_info);
 
         if (info.hit || ignore_docinfo)
         {
             pre(actor.out, actor, ignore_docinfo);
 
-            info = cl::parse(info.hit ? info.stop : first, last, g.block);
+            info = cl::parse(info.hit ? info.stop : first, last, actor.grammar().block);
             if (info.full)
             {
                 post(actor.out, actor, ignore_docinfo);
@@ -110,6 +107,7 @@
     parse_document(char const* filein_, fs::path const& outdir, string_stream& out, bool ignore_docinfo = false)
     {
         actions actor(filein_, outdir, out);
+
         set_macros(actor);
         bool r = parse_file(filein_, actor);
         if (actor.section_level != 0)
Modified: trunk/tools/quickbook/src/syntax_highlight.hpp
==============================================================================
--- trunk/tools/quickbook/src/syntax_highlight.hpp	(original)
+++ trunk/tools/quickbook/src/syntax_highlight.hpp	2011-01-03 17:11:44 EST (Mon, 03 Jan 2011)
@@ -41,7 +41,7 @@
         struct definition
         {
             definition(cpp_highlight const& self)
-                : g(self.escape_actions)
+                : g(self.escape_actions.grammar())
             {
                 program
                     =
@@ -157,7 +157,7 @@
                             string_char;
 
             cl::symbols<> keyword_;
-            quickbook_grammar g;
+            quickbook_grammar& g;
             std::string save;
 
             cl::rule<Scanner> const&
@@ -192,7 +192,7 @@
         struct definition
         {
             definition(python_highlight const& self)
-                : g(self.escape_actions)
+                : g(self.escape_actions.grammar())
             {
                 program
                     =
@@ -313,7 +313,7 @@
                             qbk_phrase, escape, string_char;
 
             cl::symbols<> keyword_;
-            quickbook_grammar g;
+            quickbook_grammar& g;
             std::string save;
 
             cl::rule<Scanner> const&
@@ -344,7 +344,7 @@
         struct definition
         {
             definition(teletype_highlight const& self)
-                : g(self.escape_actions)
+                : g(self.escape_actions.grammar())
             {
                 program
                     =
@@ -390,7 +390,7 @@
 
             cl::rule<Scanner> program, macro, qbk_phrase, escape;
 
-            quickbook_grammar g;
+            quickbook_grammar& g;
             std::string save;
 
             cl::rule<Scanner> const&