|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r70205 - in trunk/tools/quickbook: . src
From: dnljms_at_[hidden]
Date: 2011-03-19 15:16:33
Author: danieljames
Date: 2011-03-19 15:16:32 EDT (Sat, 19 Mar 2011)
New Revision: 70205
URL: http://svn.boost.org/trac/boost/changeset/70205
Log:
Quickbook: more use of phoenix.
Properties modified:
trunk/tools/quickbook/ (props changed)
Text files modified:
trunk/tools/quickbook/src/block_element_grammar.cpp | 2 -
trunk/tools/quickbook/src/doc_info_grammar.cpp | 2
trunk/tools/quickbook/src/grammar_impl.hpp | 3 ++
trunk/tools/quickbook/src/main_grammar.cpp | 57 ++++++++++++++-------------------------
trunk/tools/quickbook/src/parsers.hpp | 10 ++----
trunk/tools/quickbook/src/phrase_element_grammar.cpp | 2 -
trunk/tools/quickbook/src/utils.hpp | 19 -------------
7 files changed, 28 insertions(+), 67 deletions(-)
Modified: trunk/tools/quickbook/src/block_element_grammar.cpp
==============================================================================
--- trunk/tools/quickbook/src/block_element_grammar.cpp (original)
+++ trunk/tools/quickbook/src/block_element_grammar.cpp 2011-03-19 15:16:32 EDT (Sat, 19 Mar 2011)
@@ -39,8 +39,6 @@
void quickbook_grammar::impl::init_block_elements()
{
- using detail::var;
-
block_element_grammar_local& local = store_.create();
local.element_id =
Modified: trunk/tools/quickbook/src/doc_info_grammar.cpp
==============================================================================
--- trunk/tools/quickbook/src/doc_info_grammar.cpp (original)
+++ trunk/tools/quickbook/src/doc_info_grammar.cpp 2011-03-19 15:16:32 EDT (Sat, 19 Mar 2011)
@@ -125,7 +125,7 @@
[actions.error("Unrecognized document attribute: '%s'.")]
)
>> hard_space
- >> actions.values.list(detail::var(local.attribute_tag))
+ >> actions.values.list(ph::var(local.attribute_tag))
[local.attribute_rule]
>> space
>> ']'
Modified: trunk/tools/quickbook/src/grammar_impl.hpp
==============================================================================
--- trunk/tools/quickbook/src/grammar_impl.hpp (original)
+++ trunk/tools/quickbook/src/grammar_impl.hpp 2011-03-19 15:16:32 EDT (Sat, 19 Mar 2011)
@@ -37,6 +37,9 @@
phrase = nested_block | in_phrase
};
+ element_info()
+ : type(nothing), rule(), tag(0) {}
+
element_info(
type_enum t,
cl::rule<scanner>* r,
Modified: trunk/tools/quickbook/src/main_grammar.cpp
==============================================================================
--- trunk/tools/quickbook/src/main_grammar.cpp (original)
+++ trunk/tools/quickbook/src/main_grammar.cpp 2011-03-19 15:16:32 EDT (Sat, 19 Mar 2011)
@@ -20,8 +20,8 @@
#include <boost/spirit/include/classic_if.hpp>
#include <boost/spirit/include/classic_loops.hpp>
#include <boost/spirit/include/classic_attribute.hpp>
+#include <boost/spirit/include/classic_lazy.hpp>
#include <boost/spirit/include/phoenix1_primitives.hpp>
-#include <boost/spirit/include/phoenix1_casts.hpp>
namespace quickbook
{
@@ -29,35 +29,21 @@
struct main_grammar_local
{
- 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;
- };
-
struct process_element_impl : scoped_action_base {
process_element_impl(main_grammar_local& l)
: l(l) {}
bool start()
{
- if (!(l.element_type & l.actions_.context))
+ if (!(l.info.type & l.actions_.context))
return false;
- // Save the element type because it might
- // be overridden by nested markup.
- element_type_ = l.element_type;
+ info_ = l.info;
- if (!(element_type_ & element_info::in_phrase))
+ if (!(info_.type & element_info::in_phrase))
l.actions_.paragraph();
- l.actions_.values.reset()();
+ l.actions_.values.builder.reset();
return true;
}
@@ -65,18 +51,18 @@
template <typename ResultT, typename ScannerT>
bool result(ResultT result, ScannerT const& scan)
{
- if (result || l.element_type & element_info::in_phrase)
+ if (result || info_.type & element_info::in_phrase)
return result;
l.actions_.error(scan.first, scan.first);
return true;
}
- void success() { l.element_type = element_type_; }
+ void success() { l.element_type = info_.type; }
void failure() { l.element_type = element_info::nothing; }
main_grammar_local& l;
- element_info::type_enum element_type_;
+ element_info info_;
};
struct is_block_type
@@ -91,7 +77,7 @@
bool operator()() const
{
- return !(l_.element_type & element_info::in_phrase);
+ return l_.element_type && !(l_.element_type & element_info::in_phrase);
}
main_grammar_local& l_;
@@ -100,7 +86,7 @@
cl::rule<scanner>
top_level, blocks, paragraph_separator,
code, code_line, blank_line, hr,
- list, list_item, element,
+ list, list_item,
nested_char, escape,
inline_code,
template_,
@@ -115,28 +101,26 @@
dummy_block
;
+ cl::rule<scanner> element;
+
struct simple_markup_closure
: cl::closure<simple_markup_closure, char>
{
member1 mark;
};
- cl::rule<scanner, simple_markup_closure::context_t>
- simple_markup;
+ cl::rule<scanner, simple_markup_closure::context_t> simple_markup;
cl::rule<scanner> simple_markup_end;
+ element_info info;
element_info::type_enum element_type;
- cl::rule<scanner> element_rule;
- value::tag_type element_tag;
quickbook::actions& actions_;
- assign_element_type assign_element;
scoped_parser<process_element_impl> process_element;
is_block_type is_block;
main_grammar_local(quickbook::actions& actions)
: actions_(actions)
- , assign_element(*this)
, process_element(*this)
, is_block(*this)
{}
@@ -144,8 +128,6 @@
void quickbook_grammar::impl::init_main()
{
- using detail::var;
-
main_grammar_local& local = store_.add(new main_grammar_local(actions));
block_skip_initial_spaces =
@@ -194,13 +176,14 @@
local.element
= '['
>> ( cl::eps_p(cl::punct_p)
- >> elements [local.assign_element]
- | elements [local.assign_element]
+ >> elements [ph::var(local.info) = ph::arg1]
+ | elements [ph::var(local.info) = ph::arg1]
>> (cl::eps_p - (cl::alnum_p | '_'))
)
>> local.process_element()
- [ actions.values.list(detail::var(local.element_tag))
- [ local.element_rule
+ [ actions.values.list(ph::var(local.info.tag))
+
+ [ cl::lazy_p(*ph::var(local.info.rule))
>> space
>> ']'
] [actions.element]
@@ -563,7 +546,7 @@
phrase_end =
']'
- | cl::eps_p(var(actions.no_eols))
+ | cl::eps_p(ph::var(actions.no_eols))
>> cl::eol_p >> *cl::blank_p >> cl::eol_p
; // Make sure that we don't go
// past a single block, except
Modified: trunk/tools/quickbook/src/parsers.hpp
==============================================================================
--- trunk/tools/quickbook/src/parsers.hpp (original)
+++ trunk/tools/quickbook/src/parsers.hpp 2011-03-19 15:16:32 EDT (Sat, 19 Mar 2011)
@@ -14,7 +14,9 @@
#include <boost/spirit/include/classic_core.hpp>
#include <boost/spirit/include/classic_nil.hpp>
+#include <boost/spirit/include/phoenix1_primitives.hpp>
#include <boost/spirit/include/phoenix1_tuples.hpp>
+#include <boost/spirit/include/phoenix1_binders.hpp>
namespace quickbook {
namespace cl = boost::spirit::classic;
@@ -53,10 +55,6 @@
struct scoped
{
- typedef void result_type;
- template <typename Arg1 = void, typename Arg2 = void>
- struct result { typedef void type; };
-
explicit scoped(Impl const& impl)
: impl_(impl)
, in_progress_(false)
@@ -74,14 +72,14 @@
template <typename Arg1>
bool start(phoenix::tuple<Arg1> const& x)
{
- in_progress_ = impl_.start(x[t0()]);
+ in_progress_ = phoenix::bind(&Impl::start)(phoenix::var(impl_), x[t0()])();
return in_progress_;
}
template <typename Arg1, typename Arg2>
bool start(phoenix::tuple<Arg1, Arg2> const& x)
{
- in_progress_ = impl_.start(x[t0()], x[t1()]);
+ in_progress_ = phoenix::bind(&Impl::start)(phoenix::var(impl_), x[t0()], x[t1()])();
return in_progress_;
}
Modified: trunk/tools/quickbook/src/phrase_element_grammar.cpp
==============================================================================
--- trunk/tools/quickbook/src/phrase_element_grammar.cpp (original)
+++ trunk/tools/quickbook/src/phrase_element_grammar.cpp 2011-03-19 15:16:32 EDT (Sat, 19 Mar 2011)
@@ -32,8 +32,6 @@
void quickbook_grammar::impl::init_phrase_elements()
{
- using detail::var;
-
phrase_element_grammar_local& local = store_.create();
elements.add
Modified: trunk/tools/quickbook/src/utils.hpp
==============================================================================
--- trunk/tools/quickbook/src/utils.hpp (original)
+++ trunk/tools/quickbook/src/utils.hpp 2011-03-19 15:16:32 EDT (Sat, 19 Mar 2011)
@@ -12,7 +12,6 @@
#include <string>
#include <cctype>
-#include <boost/ref.hpp>
#include <boost/assert.hpp>
#include <boost/filesystem/v3/path.hpp>
#include <boost/range/algorithm_ext/push_back.hpp>
@@ -42,24 +41,6 @@
return out_name;
}
- template <typename T>
- struct var_wrapper
- : public ::boost::reference_wrapper<T>
- {
- typedef ::boost::reference_wrapper<T> parent;
-
- explicit inline var_wrapper(T& t) : parent(t) {}
-
- inline T& operator()() const { return parent::get(); }
- };
-
- template <typename T>
- inline var_wrapper<T>
- var(T& t)
- {
- return var_wrapper<T>(t);
- }
-
// un-indent a code segment
void unindent(std::string& program);
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk