mirror of
https://github.com/boostorg/quickbook.git
synced 2026-01-26 06:42:27 +00:00
Separate actions and state.
[SVN r59563]
This commit is contained in:
@@ -22,7 +22,7 @@ exe quickbook
|
||||
process.cpp
|
||||
quickbook.cpp
|
||||
actions.cpp
|
||||
actions_class.cpp
|
||||
state.cpp
|
||||
utils.cpp
|
||||
input_path.cpp
|
||||
post_process.cpp
|
||||
|
||||
15
actions.cpp
15
actions.cpp
@@ -10,7 +10,7 @@
|
||||
=============================================================================*/
|
||||
|
||||
#include "actions.hpp"
|
||||
#include "actions_class.hpp"
|
||||
#include "state.hpp"
|
||||
#include "doc_info.hpp"
|
||||
#include "utils.hpp"
|
||||
|
||||
@@ -22,6 +22,17 @@ namespace quickbook
|
||||
unsigned qbk_minor_version = 0;
|
||||
unsigned qbk_version_n = 0; // qbk_major_version * 100 + qbk_minor_version
|
||||
|
||||
actions::actions(state& state)
|
||||
: state_(state)
|
||||
, templates(state.templates)
|
||||
, macro(state.macro)
|
||||
, process(*this)
|
||||
, phrase_push(state.phrase)
|
||||
, phrase_pop(state.phrase)
|
||||
, error(state.error_count)
|
||||
, syntax_p(state.source_mode, *this)
|
||||
{}
|
||||
|
||||
namespace {
|
||||
std::string fully_qualified_id(std::string const& library_id,
|
||||
std::string const& qualified_section_id,
|
||||
@@ -50,7 +61,7 @@ namespace quickbook
|
||||
detail::outwarn(pos.file,pos.line) << "Empty id.\n";
|
||||
}
|
||||
|
||||
void phrase_push_action::operator()(unused_type, unused_type, unused_type) const
|
||||
void phrase_push_action::operator()() const
|
||||
{
|
||||
phrase.push();
|
||||
}
|
||||
|
||||
28
actions.hpp
28
actions.hpp
@@ -55,6 +55,8 @@ namespace quickbook
|
||||
boost::phoenix::function<quickbook_before_impl> qbk_before;
|
||||
}
|
||||
|
||||
// TODO: Define this elsewhere?
|
||||
|
||||
struct macro {
|
||||
macro() {}
|
||||
explicit macro(char const* x) : raw_markup(x) {};
|
||||
@@ -109,7 +111,11 @@ namespace quickbook
|
||||
phrase_push_action(collector& phrase)
|
||||
: phrase(phrase) {}
|
||||
|
||||
void operator()(unused_type, unused_type, unused_type) const;
|
||||
void operator()(unused_type, unused_type, unused_type) const {
|
||||
return (*this)();
|
||||
}
|
||||
|
||||
void operator()() const;
|
||||
|
||||
collector& phrase;
|
||||
};
|
||||
@@ -163,6 +169,26 @@ namespace quickbook
|
||||
|
||||
quickbook::actions& actions;
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// actions
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
struct actions
|
||||
{
|
||||
actions(state&);
|
||||
|
||||
state& state_;
|
||||
template_stack& templates;
|
||||
macro_symbols& macro;
|
||||
|
||||
process_action process;
|
||||
phrase_push_action phrase_push;
|
||||
phrase_pop_action phrase_pop;
|
||||
error_action error;
|
||||
element_id_warning_action element_id_warning;
|
||||
syntax_highlight syntax_p;
|
||||
};
|
||||
}
|
||||
|
||||
#ifdef BOOST_MSVC
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
#include <boost/fusion/include/adapt_struct.hpp>
|
||||
#include "grammars.hpp"
|
||||
#include "block.hpp"
|
||||
#include "utils.hpp"
|
||||
#include "actions_class.hpp"
|
||||
#include "template.hpp"
|
||||
#include "actions.hpp"
|
||||
#include "parse_utils.hpp"
|
||||
#include "code.hpp"
|
||||
|
||||
|
||||
@@ -12,7 +12,8 @@
|
||||
#include <boost/assert.hpp>
|
||||
#include <boost/filesystem/convenience.hpp>
|
||||
#include "block_actions.hpp"
|
||||
#include "actions_class.hpp"
|
||||
#include "actions.hpp"
|
||||
#include "state.hpp"
|
||||
#include "quickbook.hpp"
|
||||
#include "grammars.hpp"
|
||||
#include "code_snippet_types.hpp"
|
||||
@@ -45,30 +46,30 @@ namespace quickbook
|
||||
begin_section2 process(quickbook::actions& actions, begin_section const& x)
|
||||
{
|
||||
// TODO: This uses the generated title.
|
||||
actions.section_id = x.id ? *x.id :
|
||||
actions.state_.section_id = x.id ? *x.id :
|
||||
detail::make_identifier(
|
||||
x.content.raw_markup.begin(),
|
||||
x.content.raw_markup.end());
|
||||
|
||||
if (actions.section_level != 0) {
|
||||
actions.qualified_section_id += '.';
|
||||
if (actions.state_.section_level != 0) {
|
||||
actions.state_.qualified_section_id += '.';
|
||||
}
|
||||
else {
|
||||
BOOST_ASSERT(actions.qualified_section_id.empty());
|
||||
BOOST_ASSERT(actions.state_.qualified_section_id.empty());
|
||||
}
|
||||
|
||||
actions.qualified_section_id += actions.section_id;
|
||||
++actions.section_level;
|
||||
actions.state_.qualified_section_id += actions.state_.section_id;
|
||||
++actions.state_.section_level;
|
||||
|
||||
begin_section2 r;
|
||||
|
||||
if (qbk_version_n < 103) // version 1.2 and below
|
||||
{
|
||||
r.id = actions.doc_id + "." + actions.section_id;
|
||||
r.id = actions.state_.doc_id + "." + actions.state_.section_id;
|
||||
}
|
||||
else // version 1.3 and above
|
||||
{
|
||||
r.linkend = r.id = actions.doc_id + "." + actions.qualified_section_id;
|
||||
r.linkend = r.id = actions.state_.doc_id + "." + actions.state_.qualified_section_id;
|
||||
}
|
||||
|
||||
r.content = x.content.content;
|
||||
@@ -78,26 +79,26 @@ namespace quickbook
|
||||
|
||||
end_section2 process(quickbook::actions& actions, end_section const& x)
|
||||
{
|
||||
--actions.section_level;
|
||||
if (actions.section_level < 0)
|
||||
--actions.state_.section_level;
|
||||
if (actions.state_.section_level < 0)
|
||||
{
|
||||
detail::outerr(x.position.file,x.position.line)
|
||||
<< "Mismatched [endsect] near column " << x.position.column << ".\n";
|
||||
++actions.error_count;
|
||||
++actions.state_.error_count;
|
||||
|
||||
// $$$ TODO: somehow fail parse else BOOST_ASSERT(std::string::npos != n)
|
||||
// $$$ below will assert.
|
||||
}
|
||||
if (actions.section_level == 0)
|
||||
if (actions.state_.section_level == 0)
|
||||
{
|
||||
actions.qualified_section_id.clear();
|
||||
actions.state_.qualified_section_id.clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string::size_type const n =
|
||||
actions.qualified_section_id.find_last_of('.');
|
||||
actions.state_.qualified_section_id.find_last_of('.');
|
||||
BOOST_ASSERT(std::string::npos != n);
|
||||
actions.qualified_section_id.erase(n, std::string::npos);
|
||||
actions.state_.qualified_section_id.erase(n, std::string::npos);
|
||||
}
|
||||
|
||||
return end_section2();
|
||||
@@ -112,7 +113,8 @@ namespace quickbook
|
||||
|
||||
r.level = x.level;
|
||||
if(r.level < 0) {
|
||||
r.level = actions.section_level + 2;// section_level is zero-based. We need to use a
|
||||
r.level = actions.state_.section_level + 2;
|
||||
// section_level is zero-based. We need to use a
|
||||
// one-based heading which is one greater
|
||||
// than the current. Thus: section_level + 2.
|
||||
if (r.level > 6) // The max is h6, clip it if it goes
|
||||
@@ -121,7 +123,7 @@ namespace quickbook
|
||||
|
||||
if (!new_style) // version 1.2 and below
|
||||
{
|
||||
r.id = actions.section_id + "." +
|
||||
r.id = actions.state_.section_id + "." +
|
||||
detail::make_identifier(
|
||||
x.content.raw_markup.begin(),
|
||||
x.content.raw_markup.end());
|
||||
@@ -129,7 +131,7 @@ namespace quickbook
|
||||
else // version 1.3 and above
|
||||
{
|
||||
r.linkend = r.id = fully_qualified_id(
|
||||
actions.doc_id, actions.qualified_section_id,
|
||||
actions.state_.doc_id, actions.state_.qualified_section_id,
|
||||
detail::make_identifier(
|
||||
x.content.raw_markup.begin(),
|
||||
x.content.raw_markup.end()));
|
||||
@@ -143,7 +145,7 @@ namespace quickbook
|
||||
|
||||
nothing process(quickbook::actions& actions, def_macro const& x)
|
||||
{
|
||||
actions.macro.add(
|
||||
actions.state_.macro.add(
|
||||
x.macro_identifier.begin()
|
||||
, x.macro_identifier.end()
|
||||
, quickbook::macro(x.content));
|
||||
@@ -152,10 +154,10 @@ namespace quickbook
|
||||
|
||||
nothing process(quickbook::actions& actions, define_template const& x)
|
||||
{
|
||||
if(!actions.templates.add(x)) {
|
||||
if(!actions.state_.templates.add(x)) {
|
||||
detail::outerr(x.position.file, x.position.line)
|
||||
<< "Template Redefinition: " << x.id << std::endl;
|
||||
++actions.error_count;
|
||||
++actions.state_.error_count;
|
||||
}
|
||||
|
||||
return nothing();
|
||||
@@ -169,12 +171,12 @@ namespace quickbook
|
||||
|
||||
if(qbk_version_n >= 105) {
|
||||
if(x.id) {
|
||||
r.id = fully_qualified_id(actions.doc_id,
|
||||
actions.qualified_section_id, *x.id);
|
||||
r.id = fully_qualified_id(actions.state_.doc_id,
|
||||
actions.state_.qualified_section_id, *x.id);
|
||||
}
|
||||
else if(r.title) {
|
||||
r.id = fully_qualified_id(actions.doc_id,
|
||||
actions.qualified_section_id,
|
||||
r.id = fully_qualified_id(actions.state_.doc_id,
|
||||
actions.state_.qualified_section_id,
|
||||
detail::make_identifier(x.title.begin(), x.title.end()));
|
||||
}
|
||||
}
|
||||
@@ -284,9 +286,9 @@ namespace quickbook
|
||||
fs::path path(x);
|
||||
if (!path.is_complete())
|
||||
{
|
||||
fs::path infile = fs::complete(actions.filename).normalize();
|
||||
fs::path infile = fs::complete(actions.state_.filename).normalize();
|
||||
path = (infile.branch_path() / path).normalize();
|
||||
fs::path outdir = fs::complete(actions.outdir).normalize();
|
||||
fs::path outdir = fs::complete(actions.state_.outdir).normalize();
|
||||
path = path_difference(outdir, path);
|
||||
}
|
||||
return path;
|
||||
@@ -302,59 +304,59 @@ namespace quickbook
|
||||
|
||||
nothing process(quickbook::actions& actions, include const& x)
|
||||
{
|
||||
fs::path filein = include_search(actions.filename.branch_path(), x.path);
|
||||
fs::path filein = include_search(actions.state_.filename.branch_path(), x.path);
|
||||
std::string doc_id;
|
||||
|
||||
// swap the filenames
|
||||
std::swap(actions.filename, filein);
|
||||
std::swap(actions.state_.filename, filein);
|
||||
|
||||
// save the doc info strings
|
||||
actions.doc_id.swap(doc_id);
|
||||
actions.state_.doc_id.swap(doc_id);
|
||||
|
||||
// scope the macros
|
||||
macro_symbols macro = actions.macro;
|
||||
macro_symbols macro = actions.state_.macro;
|
||||
// scope the templates
|
||||
//~ template_symbols templates = actions.templates; $$$ fixme $$$
|
||||
//~ template_symbols templates = actions.state_.templates; $$$ fixme $$$
|
||||
|
||||
// if an id is specified in this include (as in [include:id foo.qbk])
|
||||
// then use it as the doc_id.
|
||||
if (x.id) actions.doc_id = *x.id;
|
||||
if (x.id) actions.state_.doc_id = *x.id;
|
||||
|
||||
// update the __FILENAME__ macro
|
||||
*actions.macro.find("__FILENAME__") =
|
||||
quickbook::macro(actions.filename.native_file_string());
|
||||
*actions.state_.macro.find("__FILENAME__") =
|
||||
quickbook::macro(actions.state_.filename.native_file_string());
|
||||
|
||||
// parse the file
|
||||
quickbook::parse(actions.filename.native_file_string().c_str(), actions, true);
|
||||
quickbook::parse(actions.state_.filename.native_file_string().c_str(), actions, true);
|
||||
|
||||
// restore the values
|
||||
std::swap(actions.filename, filein);
|
||||
std::swap(actions.state_.filename, filein);
|
||||
|
||||
actions.doc_id.swap(doc_id);
|
||||
actions.state_.doc_id.swap(doc_id);
|
||||
|
||||
// restore the macros
|
||||
actions.macro = macro;
|
||||
actions.state_.macro = macro;
|
||||
// restore the templates
|
||||
//~ actions.templates = templates; $$$ fixme $$$
|
||||
//~ actions.state_.templates = templates; $$$ fixme $$$
|
||||
|
||||
return nothing();
|
||||
}
|
||||
|
||||
nothing process(quickbook::actions& actions, import const& x)
|
||||
{
|
||||
fs::path path = include_search(actions.filename.branch_path(), x.path);
|
||||
fs::path path = include_search(actions.state_.filename.branch_path(), x.path);
|
||||
std::string ext = fs::extension(path);
|
||||
std::vector<define_template> storage;
|
||||
actions.error_count +=
|
||||
load_snippets(path.string(), storage, ext, actions.doc_id);
|
||||
actions.state_.error_count +=
|
||||
load_snippets(path.string(), storage, ext, actions.state_.doc_id);
|
||||
|
||||
BOOST_FOREACH(define_template const& definition, storage)
|
||||
{
|
||||
if (!actions.templates.add(definition))
|
||||
if (!actions.state_.templates.add(definition))
|
||||
{
|
||||
detail::outerr(definition.position.file, definition.position.line)
|
||||
<< "Template Redefinition: " << definition.id << std::endl;
|
||||
++actions.error_count;
|
||||
++actions.state_.error_count;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,8 @@
|
||||
|
||||
#include <stack>
|
||||
#include <boost/assert.hpp>
|
||||
#include "actions_class.hpp"
|
||||
#include "actions.hpp"
|
||||
#include "state.hpp"
|
||||
#include "gen_types.hpp"
|
||||
#include "utils.hpp"
|
||||
|
||||
@@ -82,7 +83,7 @@ namespace quickbook
|
||||
<< "Illegal change of list style near column " << pos.column << ".\n";
|
||||
detail::outwarn(pos.file,pos.line)
|
||||
<< "Ignoring change of list style" << std::endl;
|
||||
++actions.error_count;
|
||||
++actions.state_.error_count;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
218
boostbook.cpp
218
boostbook.cpp
@@ -3,18 +3,18 @@
|
||||
#include "fwd.hpp"
|
||||
#include "boostbook.hpp"
|
||||
#include "phrase.hpp"
|
||||
#include "actions_class.hpp"
|
||||
#include "state.hpp"
|
||||
|
||||
namespace quickbook
|
||||
{
|
||||
struct output_action
|
||||
{
|
||||
output_action(quickbook::actions& actions) : actions(actions) {}
|
||||
quickbook::actions& actions;
|
||||
output_action(quickbook::state& state) : state(state) {}
|
||||
quickbook::state& state;
|
||||
|
||||
template <typename T>
|
||||
void operator()(T const& x) const {
|
||||
output(actions, x);
|
||||
output(state, x);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -119,45 +119,45 @@ namespace quickbook
|
||||
} initialize_instance;
|
||||
}
|
||||
|
||||
void output(quickbook::actions& actions, std::string const& x)
|
||||
void output(quickbook::state& state, std::string const& x)
|
||||
{
|
||||
actions.phrase << x;
|
||||
state.phrase << x;
|
||||
}
|
||||
|
||||
void output(quickbook::actions& actions, char x)
|
||||
void output(quickbook::state& state, char x)
|
||||
{
|
||||
actions.phrase << encode(x);
|
||||
state.phrase << encode(x);
|
||||
}
|
||||
|
||||
void output(quickbook::actions& actions, anchor const& x) {
|
||||
actions.phrase << "<anchor id=\"";
|
||||
actions.phrase << encode(x.id);
|
||||
actions.phrase << "\"/>\n";
|
||||
void output(quickbook::state& state, anchor const& x) {
|
||||
state.phrase << "<anchor id=\"";
|
||||
state.phrase << encode(x.id);
|
||||
state.phrase << "\"/>\n";
|
||||
}
|
||||
|
||||
void output(quickbook::actions& actions, link const& x) {
|
||||
void output(quickbook::state& state, link const& x) {
|
||||
boostbook_markup m = markup_map.at(x.type);
|
||||
actions.phrase << m.pre;
|
||||
actions.phrase << encode(x.destination);
|
||||
actions.phrase << "\">";
|
||||
actions.phrase << x.content;
|
||||
actions.phrase << m.post;
|
||||
state.phrase << m.pre;
|
||||
state.phrase << encode(x.destination);
|
||||
state.phrase << "\">";
|
||||
state.phrase << x.content;
|
||||
state.phrase << m.post;
|
||||
}
|
||||
|
||||
void output(quickbook::actions& actions, formatted const& x) {
|
||||
void output(quickbook::state& state, formatted const& x) {
|
||||
boostbook_markup m = markup_map.at(x.type);
|
||||
actions.phrase << m.pre << x.content << m.post;
|
||||
state.phrase << m.pre << x.content << m.post;
|
||||
}
|
||||
|
||||
void output(quickbook::actions& actions, break_ const& x) {
|
||||
void output(quickbook::state& state, break_ const& x) {
|
||||
boostbook_markup m = markup_map.at("break");
|
||||
actions.phrase << m.pre;
|
||||
state.phrase << m.pre;
|
||||
}
|
||||
|
||||
void output(quickbook::actions& actions, image2 const& x) {
|
||||
actions.phrase << "<inlinemediaobject>";
|
||||
void output(quickbook::state& state, image2 const& x) {
|
||||
state.phrase << "<inlinemediaobject>";
|
||||
|
||||
actions.phrase << "<imageobject><imagedata";
|
||||
state.phrase << "<imageobject><imagedata";
|
||||
|
||||
for(image2::attribute_map::const_iterator
|
||||
attr_first = x.attributes.begin(), attr_last = x.attributes.end();
|
||||
@@ -165,7 +165,7 @@ namespace quickbook
|
||||
{
|
||||
if(attr_first->first == "alt") continue;
|
||||
|
||||
actions.phrase
|
||||
state.phrase
|
||||
<< " "
|
||||
<< attr_first->first
|
||||
<< "=\""
|
||||
@@ -173,35 +173,35 @@ namespace quickbook
|
||||
<< "\"";
|
||||
}
|
||||
|
||||
actions.phrase << "></imagedata></imageobject>";
|
||||
state.phrase << "></imagedata></imageobject>";
|
||||
|
||||
image2::attribute_map::const_iterator it = x.attributes.find("alt");
|
||||
if(it != x.attributes.end()) {
|
||||
// Also add a textobject -- use the basename of the image file.
|
||||
// This will mean we get "alt" attributes of the HTML img.
|
||||
actions.phrase << "<textobject><phrase>";
|
||||
actions.phrase << encode(it->second);
|
||||
actions.phrase << "</phrase></textobject>";
|
||||
state.phrase << "<textobject><phrase>";
|
||||
state.phrase << encode(it->second);
|
||||
state.phrase << "</phrase></textobject>";
|
||||
}
|
||||
|
||||
actions.phrase << "</inlinemediaobject>";
|
||||
state.phrase << "</inlinemediaobject>";
|
||||
}
|
||||
|
||||
void output(quickbook::actions& actions, hr) {
|
||||
actions.phrase << markup_map.at("hr").pre;
|
||||
void output(quickbook::state& state, hr) {
|
||||
state.phrase << markup_map.at("hr").pre;
|
||||
}
|
||||
|
||||
void output(quickbook::actions& actions, begin_section2 const& x) {
|
||||
actions.phrase << "\n<section id=\"" << x.id << "\">\n";
|
||||
void output(quickbook::state& state, begin_section2 const& x) {
|
||||
state.phrase << "\n<section id=\"" << x.id << "\">\n";
|
||||
if(x.linkend.empty()) {
|
||||
actions.phrase
|
||||
state.phrase
|
||||
<< "<title>"
|
||||
<< x.content
|
||||
<< "</title>\n"
|
||||
;
|
||||
}
|
||||
else {
|
||||
actions.phrase
|
||||
state.phrase
|
||||
<< "<title>"
|
||||
<< "<link linkend=\""
|
||||
<< x.linkend
|
||||
@@ -213,169 +213,169 @@ namespace quickbook
|
||||
}
|
||||
}
|
||||
|
||||
void output(quickbook::actions& actions, end_section2 const& x) {
|
||||
actions.phrase << "</section>";
|
||||
void output(quickbook::state& state, end_section2 const& x) {
|
||||
state.phrase << "</section>";
|
||||
}
|
||||
|
||||
void output(quickbook::actions& actions, heading2 const& x) {
|
||||
actions.phrase
|
||||
void output(quickbook::state& state, heading2 const& x) {
|
||||
state.phrase
|
||||
<< "<anchor id=\"" << x.id << "\"/>"
|
||||
<< "<bridgehead renderas=\"sect" << x.level << "\">";
|
||||
|
||||
if(x.linkend.empty()) {
|
||||
actions.phrase << x.content;
|
||||
state.phrase << x.content;
|
||||
}
|
||||
else {
|
||||
actions.phrase
|
||||
state.phrase
|
||||
<< "<link linkend=\"" << x.linkend << "\">"
|
||||
<< x.content << "</link>";
|
||||
}
|
||||
|
||||
actions.phrase << "</bridgehead>";
|
||||
state.phrase << "</bridgehead>";
|
||||
}
|
||||
|
||||
void output(quickbook::actions& actions, variablelist const& x)
|
||||
void output(quickbook::state& state, variablelist const& x)
|
||||
{
|
||||
actions.phrase << "<variablelist>\n";
|
||||
state.phrase << "<variablelist>\n";
|
||||
|
||||
actions.phrase << "<title>";
|
||||
actions.phrase << encode(x.title);
|
||||
actions.phrase << "</title>\n";
|
||||
state.phrase << "<title>";
|
||||
state.phrase << encode(x.title);
|
||||
state.phrase << "</title>\n";
|
||||
|
||||
boostbook_markup m = markup_map.at("varlistentry");
|
||||
|
||||
for(std::vector<varlistentry>::const_iterator
|
||||
it = x.entries.begin(); it != x.entries.end(); ++it)
|
||||
{
|
||||
actions.phrase << m.pre;
|
||||
std::for_each(it->begin(), it->end(), output_action(actions));
|
||||
actions.phrase << m.post;
|
||||
state.phrase << m.pre;
|
||||
std::for_each(it->begin(), it->end(), output_action(state));
|
||||
state.phrase << m.post;
|
||||
}
|
||||
|
||||
actions.phrase << "</variablelist>\n";
|
||||
state.phrase << "</variablelist>\n";
|
||||
}
|
||||
|
||||
void output(quickbook::actions& actions, table2 const& x)
|
||||
void output(quickbook::state& state, table2 const& x)
|
||||
{
|
||||
if (x.title)
|
||||
{
|
||||
actions.phrase << "<table frame=\"all\"";
|
||||
state.phrase << "<table frame=\"all\"";
|
||||
if(x.id)
|
||||
actions.phrase << " id=\"" << *x.id << "\"";
|
||||
actions.phrase << ">\n";
|
||||
actions.phrase << "<title>";
|
||||
actions.phrase << encode(*x.title);
|
||||
actions.phrase << "</title>";
|
||||
state.phrase << " id=\"" << *x.id << "\"";
|
||||
state.phrase << ">\n";
|
||||
state.phrase << "<title>";
|
||||
state.phrase << encode(*x.title);
|
||||
state.phrase << "</title>";
|
||||
}
|
||||
else
|
||||
{
|
||||
actions.phrase << "<informaltable frame=\"all\"";
|
||||
state.phrase << "<informaltable frame=\"all\"";
|
||||
if(x.id)
|
||||
actions.phrase << " id=\"" << *x.id << "\"";
|
||||
actions.phrase << ">\n";
|
||||
state.phrase << " id=\"" << *x.id << "\"";
|
||||
state.phrase << ">\n";
|
||||
}
|
||||
|
||||
// This is a bit odd for backwards compatability: the old version just
|
||||
// used the last count that was calculated.
|
||||
actions.phrase << "<tgroup cols=\"" << x.cols << "\">\n";
|
||||
state.phrase << "<tgroup cols=\"" << x.cols << "\">\n";
|
||||
|
||||
boostbook_markup m = markup_map.at("row");
|
||||
|
||||
if (x.head)
|
||||
{
|
||||
actions.phrase << "<thead>";
|
||||
actions.phrase << m.pre;
|
||||
std::for_each(x.head->begin(), x.head->end(), actions.process);
|
||||
actions.phrase << m.post;
|
||||
actions.phrase << "</thead>\n";
|
||||
state.phrase << "<thead>";
|
||||
state.phrase << m.pre;
|
||||
std::for_each(x.head->begin(), x.head->end(), output_action(state));
|
||||
state.phrase << m.post;
|
||||
state.phrase << "</thead>\n";
|
||||
}
|
||||
|
||||
actions.phrase << "<tbody>\n";
|
||||
state.phrase << "<tbody>\n";
|
||||
|
||||
for(std::vector<table_row>::const_iterator
|
||||
it = x.rows.begin(); it != x.rows.end(); ++it)
|
||||
{
|
||||
actions.phrase << m.pre;
|
||||
std::for_each(it->begin(), it->end(), actions.process);
|
||||
actions.phrase << m.post;
|
||||
state.phrase << m.pre;
|
||||
std::for_each(it->begin(), it->end(), output_action(state));
|
||||
state.phrase << m.post;
|
||||
}
|
||||
|
||||
actions.phrase << "</tbody>\n" << "</tgroup>\n";
|
||||
state.phrase << "</tbody>\n" << "</tgroup>\n";
|
||||
|
||||
if (x.title)
|
||||
{
|
||||
actions.phrase << "</table>\n";
|
||||
state.phrase << "</table>\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
actions.phrase << "</informaltable>\n";
|
||||
state.phrase << "</informaltable>\n";
|
||||
}
|
||||
}
|
||||
|
||||
void output(quickbook::actions& actions, xinclude2 const& x)
|
||||
void output(quickbook::state& state, xinclude2 const& x)
|
||||
{
|
||||
actions.phrase << "\n<xi:include href=\"" << x.path << "\" />\n";
|
||||
state.phrase << "\n<xi:include href=\"" << x.path << "\" />\n";
|
||||
}
|
||||
|
||||
void output(quickbook::actions& actions, list2 const& x)
|
||||
void output(quickbook::state& state, list2 const& x)
|
||||
{
|
||||
actions.phrase << std::string(x.mark == '#' ? "<orderedlist>\n" : "<itemizedlist>\n");
|
||||
state.phrase << std::string(x.mark == '#' ? "<orderedlist>\n" : "<itemizedlist>\n");
|
||||
|
||||
for(std::vector<list_item2>::const_iterator
|
||||
it = x.items.begin(), end = x.items.end(); it != end; ++it)
|
||||
{
|
||||
actions.phrase << "<listitem>\n" << it->content;
|
||||
if(!it->sublist.items.empty()) output(actions, it->sublist);
|
||||
actions.phrase << std::string("\n</listitem>");
|
||||
state.phrase << "<listitem>\n" << it->content;
|
||||
if(!it->sublist.items.empty()) output(state, it->sublist);
|
||||
state.phrase << std::string("\n</listitem>");
|
||||
}
|
||||
|
||||
actions.phrase << std::string(x.mark == '#' ? "\n</orderedlist>" : "\n</itemizedlist>");
|
||||
state.phrase << std::string(x.mark == '#' ? "\n</orderedlist>" : "\n</itemizedlist>");
|
||||
}
|
||||
|
||||
void output(quickbook::actions& actions, code_token const& x)
|
||||
void output(quickbook::state& state, code_token const& x)
|
||||
{
|
||||
std::string type = x.type;
|
||||
if(type == "space") {
|
||||
actions.phrase << x.text;
|
||||
state.phrase << x.text;
|
||||
}
|
||||
else {
|
||||
actions.phrase
|
||||
state.phrase
|
||||
<< "<phrase role=\"" << x.type << "\">"
|
||||
<< encode(x.text)
|
||||
<< "</phrase>";
|
||||
}
|
||||
}
|
||||
|
||||
void output(quickbook::actions& actions, doc_info const& info)
|
||||
void output(quickbook::state& state, doc_info const& info)
|
||||
{
|
||||
// if we're ignoring the document info, we're done.
|
||||
if (info.ignore) return;
|
||||
|
||||
actions.phrase
|
||||
state.phrase
|
||||
<< "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
|
||||
<< "<!DOCTYPE library PUBLIC \"-//Boost//DTD BoostBook XML V1.0//EN\""
|
||||
<< " \"http://www.boost.org/tools/boostbook/dtd/boostbook.dtd\">";
|
||||
|
||||
// Document tag
|
||||
|
||||
actions.phrase
|
||||
state.phrase
|
||||
<< '<' << info.doc_type << " id=\"" << info.doc_id << "\"\n";
|
||||
|
||||
if(info.doc_type == "library")
|
||||
{
|
||||
actions.phrase << " name=\"" << info.doc_title << "\"\n";
|
||||
state.phrase << " name=\"" << info.doc_title << "\"\n";
|
||||
}
|
||||
|
||||
if(!info.doc_dirname.empty())
|
||||
{
|
||||
actions.phrase << " dirname=\"" << info.doc_dirname << "\"\n";
|
||||
state.phrase << " dirname=\"" << info.doc_dirname << "\"\n";
|
||||
}
|
||||
|
||||
actions.phrase
|
||||
state.phrase
|
||||
<< "last-revision=\"" << info.doc_last_revision << "\""
|
||||
<< " xmlns:xi=\"http://www.w3.org/2001/XInclude\"";
|
||||
|
||||
actions.phrase << ">"; // end document tag.
|
||||
state.phrase << ">"; // end document tag.
|
||||
|
||||
// Title tag
|
||||
|
||||
@@ -389,35 +389,35 @@ namespace quickbook
|
||||
}
|
||||
|
||||
// For 'library', the title comes after the info block.
|
||||
if(info.doc_type != "library") actions.phrase << title;
|
||||
if(info.doc_type != "library") state.phrase << title;
|
||||
|
||||
// Info tag
|
||||
|
||||
actions.phrase << "<" << info.doc_type << "info>\n";
|
||||
state.phrase << "<" << info.doc_type << "info>\n";
|
||||
|
||||
if(!info.doc_authors.empty())
|
||||
{
|
||||
actions.phrase << "<authorgroup>\n";
|
||||
state.phrase << "<authorgroup>\n";
|
||||
BOOST_FOREACH(doc_info::author const& author, info.doc_authors) {
|
||||
actions.phrase
|
||||
state.phrase
|
||||
<< "<author>\n"
|
||||
<< "<firstname>" << author.first << "</firstname>\n"
|
||||
<< "<surname>" << author.second << "</surname>\n"
|
||||
<< "</author>\n";
|
||||
}
|
||||
actions.phrase << "</authorgroup>\n";
|
||||
state.phrase << "</authorgroup>\n";
|
||||
}
|
||||
|
||||
BOOST_FOREACH(doc_info::copyright_entry const& copyright,
|
||||
info.doc_copyrights)
|
||||
{
|
||||
actions.phrase << "<copyright>\n";
|
||||
state.phrase << "<copyright>\n";
|
||||
|
||||
BOOST_FOREACH(std::string const& year, copyright.first) {
|
||||
actions.phrase << "<year>" << year << "</year>\n";
|
||||
state.phrase << "<year>" << year << "</year>\n";
|
||||
}
|
||||
|
||||
actions.phrase
|
||||
state.phrase
|
||||
<< "<holder>" << copyright.second << "</holder>\n"
|
||||
<< "</copyright>\n"
|
||||
;
|
||||
@@ -425,7 +425,7 @@ namespace quickbook
|
||||
|
||||
if (!info.doc_license.empty())
|
||||
{
|
||||
actions.phrase
|
||||
state.phrase
|
||||
<< "<legalnotice>\n"
|
||||
<< "<para>\n"
|
||||
<< info.doc_license
|
||||
@@ -438,7 +438,7 @@ namespace quickbook
|
||||
|
||||
if (!info.doc_purpose.empty())
|
||||
{
|
||||
actions.phrase
|
||||
state.phrase
|
||||
<< "<" << info.doc_type << "purpose>\n"
|
||||
<< info.doc_purpose
|
||||
<< "</" << info.doc_type << "purpose>\n"
|
||||
@@ -448,7 +448,7 @@ namespace quickbook
|
||||
|
||||
if (!info.doc_category.empty())
|
||||
{
|
||||
actions.phrase
|
||||
state.phrase
|
||||
<< "<" << info.doc_type << "category name=\"category:"
|
||||
<< info.doc_category
|
||||
<< "\"></" << info.doc_type << "category>\n"
|
||||
@@ -456,20 +456,20 @@ namespace quickbook
|
||||
;
|
||||
}
|
||||
|
||||
actions.phrase
|
||||
state.phrase
|
||||
<< "</" << info.doc_type << "info>\n"
|
||||
;
|
||||
|
||||
if(info.doc_type == "library") actions.phrase << title;
|
||||
if(info.doc_type == "library") state.phrase << title;
|
||||
}
|
||||
|
||||
void output(quickbook::actions& actions, doc_info_post const& x)
|
||||
void output(quickbook::state& state, doc_info_post const& x)
|
||||
{
|
||||
// if we're ignoring the document info, do nothing.
|
||||
if (x.info.ignore) return;
|
||||
|
||||
// We've finished generating our output. Here's what we'll do
|
||||
// *after* everything else.
|
||||
actions.phrase << "</" << x.info.doc_type << ">";
|
||||
state.phrase << "</" << x.info.doc_type << ">";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,33 +25,33 @@ namespace quickbook
|
||||
|
||||
// Output function for boostbook, these should eventually become an
|
||||
// interface with implementations for boostbook and html.
|
||||
// They probably shouldn't use quickbook::actions, instead they
|
||||
// They probably shouldn't use quickbook::state, instead they
|
||||
// should either take a stream/collector to write to, or return their
|
||||
// output by value.
|
||||
|
||||
void output(quickbook::actions&, doc_info const&);
|
||||
void output(quickbook::actions&, doc_info_post const&);
|
||||
void output(quickbook::state&, doc_info const&);
|
||||
void output(quickbook::state&, doc_info_post const&);
|
||||
|
||||
// Note: char is a plain quickbook character, string is an encoded
|
||||
// boostbook string. Oops.
|
||||
void output(quickbook::actions&, char);
|
||||
void output(quickbook::actions&, std::string const&);
|
||||
void output(quickbook::actions&, anchor const&);
|
||||
void output(quickbook::actions&, link const&);
|
||||
void output(quickbook::actions&, formatted const&);
|
||||
void output(quickbook::actions&, break_ const&);
|
||||
void output(quickbook::actions&, image2 const&);
|
||||
void output(quickbook::state&, char);
|
||||
void output(quickbook::state&, std::string const&);
|
||||
void output(quickbook::state&, anchor const&);
|
||||
void output(quickbook::state&, link const&);
|
||||
void output(quickbook::state&, formatted const&);
|
||||
void output(quickbook::state&, break_ const&);
|
||||
void output(quickbook::state&, image2 const&);
|
||||
|
||||
void output(quickbook::actions&, hr);
|
||||
void output(quickbook::actions&, begin_section2 const&);
|
||||
void output(quickbook::actions&, end_section2 const&);
|
||||
void output(quickbook::actions&, heading2 const&);
|
||||
void output(quickbook::actions&, variablelist const&);
|
||||
void output(quickbook::actions&, table2 const&);
|
||||
void output(quickbook::actions&, xinclude2 const&);
|
||||
void output(quickbook::actions&, list2 const&);
|
||||
void output(quickbook::state&, hr);
|
||||
void output(quickbook::state&, begin_section2 const&);
|
||||
void output(quickbook::state&, end_section2 const&);
|
||||
void output(quickbook::state&, heading2 const&);
|
||||
void output(quickbook::state&, variablelist const&);
|
||||
void output(quickbook::state&, table2 const&);
|
||||
void output(quickbook::state&, xinclude2 const&);
|
||||
void output(quickbook::state&, list2 const&);
|
||||
|
||||
void output(quickbook::actions&, code_token const&);
|
||||
void output(quickbook::state&, code_token const&);
|
||||
|
||||
std::string encode(std::string const&);
|
||||
std::string encode(char);
|
||||
|
||||
@@ -16,9 +16,9 @@
|
||||
#include <iterator>
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include "utils.hpp"
|
||||
#include "actions_class.hpp"
|
||||
#include "grammars.hpp"
|
||||
#include "code_snippet_types.hpp"
|
||||
#include "template.hpp"
|
||||
|
||||
namespace quickbook
|
||||
{
|
||||
|
||||
@@ -10,7 +10,8 @@
|
||||
|
||||
#include "doc_info.hpp"
|
||||
#include "grammars.hpp"
|
||||
#include "actions_class.hpp"
|
||||
#include "actions.hpp"
|
||||
#include "state.hpp"
|
||||
#include "parse_utils.hpp"
|
||||
#include <boost/spirit/include/qi_core.hpp>
|
||||
#include <boost/spirit/include/qi_uint.hpp>
|
||||
@@ -112,7 +113,7 @@ namespace quickbook
|
||||
| doc_last_revision [member_assign(&doc_info::doc_last_revision)]
|
||||
// This has to be set in actions so that source code in phrases use the
|
||||
// correct encoding.
|
||||
| doc_source_mode [ph::ref(actions.source_mode) = qi::_1]
|
||||
| doc_source_mode [ph::ref(actions.state_.source_mode) = qi::_1]
|
||||
)
|
||||
>> space >> ']' >> +qi::eol
|
||||
)
|
||||
|
||||
@@ -16,7 +16,8 @@
|
||||
#include "collector.hpp"
|
||||
#include "quickbook.hpp"
|
||||
#include "doc_info_actions.hpp"
|
||||
#include "actions_class.hpp"
|
||||
#include "actions.hpp"
|
||||
#include "state.hpp"
|
||||
#include "utils.hpp"
|
||||
|
||||
namespace quickbook
|
||||
|
||||
2
fwd.hpp
2
fwd.hpp
@@ -16,9 +16,11 @@ namespace quickbook
|
||||
{
|
||||
struct nothing {};
|
||||
|
||||
struct template_stack;
|
||||
struct macro;
|
||||
struct doc_info;
|
||||
|
||||
struct state;
|
||||
struct actions;
|
||||
struct code_snippet_actions;
|
||||
|
||||
|
||||
@@ -21,7 +21,8 @@
|
||||
#include "code.hpp"
|
||||
#include "phrase.hpp"
|
||||
#include "grammars.hpp"
|
||||
#include "actions_class.hpp"
|
||||
#include "actions.hpp"
|
||||
#include "template.hpp"
|
||||
#include "parse_utils.hpp"
|
||||
|
||||
BOOST_FUSION_ADAPT_STRUCT(
|
||||
|
||||
@@ -10,7 +10,8 @@
|
||||
|
||||
#include <boost/assert.hpp>
|
||||
#include "phrase.hpp"
|
||||
#include "actions_class.hpp"
|
||||
#include "actions.hpp"
|
||||
#include "state.hpp"
|
||||
#include "utils.hpp"
|
||||
#include "code.hpp"
|
||||
#include "boostbook.hpp"
|
||||
@@ -19,7 +20,7 @@
|
||||
namespace quickbook
|
||||
{
|
||||
nothing process(quickbook::actions& actions, source_mode const& s) {
|
||||
actions.source_mode = s.mode;
|
||||
actions.state_.source_mode = s.mode;
|
||||
return nothing();
|
||||
}
|
||||
|
||||
@@ -97,12 +98,12 @@ namespace quickbook
|
||||
|
||||
// TODO: I don't need to save this, do I?
|
||||
std::string save;
|
||||
actions.phrase.swap(save);
|
||||
actions.state_.phrase.swap(save);
|
||||
|
||||
// print the code with syntax coloring
|
||||
std::string str = actions.syntax_p(first_, last_);
|
||||
|
||||
actions.phrase.swap(save);
|
||||
actions.state_.phrase.swap(save);
|
||||
|
||||
r.type = x.block ? "programlisting" : "code";
|
||||
r.content = str;
|
||||
|
||||
@@ -12,7 +12,8 @@
|
||||
#include <boost/filesystem/fstream.hpp>
|
||||
#include "phrase.hpp"
|
||||
#include "gen_types.hpp"
|
||||
#include "actions_class.hpp"
|
||||
#include "actions.hpp"
|
||||
#include "state.hpp"
|
||||
#include "utils.hpp"
|
||||
|
||||
namespace quickbook
|
||||
@@ -41,7 +42,7 @@ namespace quickbook
|
||||
<< "Duplicate image attribute: "
|
||||
<< begin->first
|
||||
<< std::endl;
|
||||
++actions.error_count;
|
||||
++actions.state_.error_count;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ namespace quickbook
|
||||
template <typename T>
|
||||
void process_action::operator()(T const& x) const
|
||||
{
|
||||
output(actions, process(actions, x));
|
||||
output(actions.state_, process(actions, x));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
@@ -34,11 +34,9 @@ namespace quickbook
|
||||
return x;
|
||||
}
|
||||
|
||||
void output(quickbook::actions&, nothing) {
|
||||
void output(quickbook::state&, nothing) {
|
||||
}
|
||||
|
||||
void output(quickbook::actions&, std::string const&);
|
||||
|
||||
template void process_action::operator()<formatted>(formatted const&) const;
|
||||
template void process_action::operator()<source_mode>(source_mode const&) const;
|
||||
template void process_action::operator()<macro>(macro const&) const;
|
||||
|
||||
@@ -18,7 +18,8 @@
|
||||
#include <boost/ref.hpp>
|
||||
#include "fwd.hpp"
|
||||
#include "quickbook.hpp"
|
||||
#include "actions_class.hpp"
|
||||
#include "state.hpp"
|
||||
#include "actions.hpp"
|
||||
#include "grammars.hpp"
|
||||
#include "post_process.hpp"
|
||||
#include "utils.hpp"
|
||||
@@ -56,7 +57,7 @@ namespace quickbook
|
||||
std::string storage;
|
||||
int err = detail::load(filein_, storage);
|
||||
if (err != 0) {
|
||||
++actor.error_count;
|
||||
++actor.state_.error_count;
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -94,24 +95,25 @@ namespace quickbook
|
||||
file_position const pos = first.get_position();
|
||||
detail::outerr(pos.file,pos.line)
|
||||
<< "Syntax Error near column " << pos.column << ".\n";
|
||||
++actor.error_count;
|
||||
++actor.state_.error_count;
|
||||
}
|
||||
|
||||
if(actor.error_count)
|
||||
if(actor.state_.error_count)
|
||||
{
|
||||
detail::outerr(filein_)
|
||||
<< "Error count: " << actor.error_count << ".\n";
|
||||
<< "Error count: " << actor.state_.error_count << ".\n";
|
||||
}
|
||||
|
||||
return actor.error_count ? 1 : 0;
|
||||
return actor.state_.error_count ? 1 : 0;
|
||||
}
|
||||
|
||||
static int
|
||||
parse(char const* filein_, fs::path const& outdir, string_stream& out, bool ignore_docinfo = false)
|
||||
{
|
||||
actions actor(filein_, outdir, out);
|
||||
quickbook::state state(filein_, outdir, out);
|
||||
actions actor(state);
|
||||
bool r = parse(filein_, actor);
|
||||
if (actor.section_level != 0)
|
||||
if (actor.state_.section_level != 0)
|
||||
detail::outwarn(filein_)
|
||||
<< "Warning missing [endsect] detected at end of file."
|
||||
<< std::endl;
|
||||
|
||||
@@ -10,7 +10,8 @@
|
||||
=============================================================================*/
|
||||
|
||||
#include <boost/filesystem/operations.hpp>
|
||||
#include "actions_class.hpp"
|
||||
#include "actions.hpp"
|
||||
#include "state.hpp"
|
||||
#include "quickbook.hpp"
|
||||
|
||||
#if (defined(BOOST_MSVC) && (BOOST_MSVC <= 1310))
|
||||
@@ -21,7 +22,7 @@ namespace quickbook
|
||||
{
|
||||
namespace fs = boost::filesystem;
|
||||
|
||||
actions::actions(char const* filein_, fs::path const& outdir_, string_stream& out_)
|
||||
state::state(char const* filein_, fs::path const& outdir_, string_stream& out_)
|
||||
// header info
|
||||
: doc_id()
|
||||
, doc_title()
|
||||
@@ -42,14 +43,6 @@ namespace quickbook
|
||||
, template_depth(0)
|
||||
, templates()
|
||||
, error_count(0)
|
||||
|
||||
// actions
|
||||
, process(*this)
|
||||
, phrase_push(phrase)
|
||||
, phrase_pop(phrase)
|
||||
, error(error_count)
|
||||
|
||||
, syntax_p(source_mode, *this)
|
||||
{
|
||||
// turn off __FILENAME__ macro on debug mode = true
|
||||
std::string filename_str = debug_mode ?
|
||||
@@ -64,7 +57,7 @@ namespace quickbook
|
||||
;
|
||||
}
|
||||
|
||||
void actions::push()
|
||||
void state::push()
|
||||
{
|
||||
state_stack.push(
|
||||
boost::make_tuple(
|
||||
@@ -82,7 +75,7 @@ namespace quickbook
|
||||
templates.push();
|
||||
}
|
||||
|
||||
void actions::pop()
|
||||
void state::pop()
|
||||
{
|
||||
boost::tie(
|
||||
filename
|
||||
@@ -14,18 +14,18 @@
|
||||
#include <boost/tuple/tuple.hpp>
|
||||
#include <boost/filesystem/path.hpp>
|
||||
#include "fwd.hpp"
|
||||
#include "actions.hpp"
|
||||
#include "collector.hpp"
|
||||
#include "template.hpp"
|
||||
#include "actions.hpp"
|
||||
|
||||
namespace quickbook
|
||||
{
|
||||
namespace qi = boost::spirit::qi;
|
||||
namespace fs = boost::filesystem;
|
||||
|
||||
struct actions
|
||||
struct state
|
||||
{
|
||||
actions(char const* filein_, fs::path const& outdir, string_stream& out_);
|
||||
state(char const* filein_, fs::path const& outdir, string_stream& out_);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// State
|
||||
@@ -70,19 +70,7 @@ namespace quickbook
|
||||
// push/pop the states and the streams
|
||||
void push();
|
||||
void pop();
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// actions
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
process_action process;
|
||||
phrase_push_action phrase_push;
|
||||
phrase_pop_action phrase_pop;
|
||||
error_action error;
|
||||
|
||||
syntax_highlight syntax_p;
|
||||
|
||||
element_id_warning_action element_id_warning;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
#endif // BOOST_SPIRIT_ACTIONS_CLASS_HPP
|
||||
@@ -13,7 +13,7 @@
|
||||
#include <boost/spirit/include/qi_string.hpp>
|
||||
#include <boost/spirit/include/qi_directive.hpp>
|
||||
#include <boost/fusion/include/adapt_struct.hpp>
|
||||
#include "actions_class.hpp"
|
||||
#include "actions.hpp"
|
||||
#include "grammars.hpp"
|
||||
#include "phrase.hpp"
|
||||
#include "utils.hpp"
|
||||
@@ -370,7 +370,7 @@ namespace quickbook
|
||||
|
||||
std::string syntax_highlight::operator()(iterator first, iterator last) const
|
||||
{
|
||||
escape_actions.phrase.push();
|
||||
escape_actions.phrase_push();
|
||||
|
||||
// print the code with syntax coloring
|
||||
if (source_mode == "c++")
|
||||
@@ -393,10 +393,6 @@ namespace quickbook
|
||||
BOOST_ASSERT(0);
|
||||
}
|
||||
|
||||
std::string str;
|
||||
escape_actions.phrase.swap(str);
|
||||
escape_actions.phrase.pop();
|
||||
|
||||
return str;
|
||||
return escape_actions.phrase_pop();
|
||||
}
|
||||
}
|
||||
|
||||
48
template.cpp
48
template.cpp
@@ -11,7 +11,7 @@
|
||||
#include "template.hpp"
|
||||
#include "phrase_actions.hpp"
|
||||
#include "grammars.hpp"
|
||||
#include "actions_class.hpp"
|
||||
#include "state.hpp"
|
||||
#include "utils.hpp"
|
||||
|
||||
#ifdef BOOST_MSVC
|
||||
@@ -268,13 +268,13 @@ namespace quickbook
|
||||
{
|
||||
std::vector<std::string> empty_params;
|
||||
|
||||
if (!actions.templates.add(
|
||||
if (!actions.state_.templates.add(
|
||||
define_template(*tpl, empty_params, *arg, pos),
|
||||
&scope))
|
||||
{
|
||||
detail::outerr(pos.file,pos.line)
|
||||
<< "Duplicate Symbol Found" << std::endl;
|
||||
++actions.error_count;
|
||||
++actions.state_.error_count;
|
||||
return std::make_pair(false, tpl);
|
||||
}
|
||||
++arg; ++tpl;
|
||||
@@ -315,11 +315,11 @@ namespace quickbook
|
||||
simple_phrase_grammar phrase_p(actions);
|
||||
|
||||
// do a phrase level parse
|
||||
iterator first(body.begin(), body.end(), actions.filename.native_file_string().c_str());
|
||||
iterator first(body.begin(), body.end(), actions.state_.filename.native_file_string().c_str());
|
||||
first.set_position(template_pos);
|
||||
iterator last(body.end(), body.end());
|
||||
r = boost::spirit::qi::parse(first, last, phrase_p) && first == last;
|
||||
actions.phrase.swap(result);
|
||||
actions.state_.phrase.swap(result);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -331,11 +331,11 @@ namespace quickbook
|
||||
body += "\n\n";
|
||||
while (iter != body.end() && ((*iter == '\r') || (*iter == '\n')))
|
||||
++iter; // skip initial newlines
|
||||
iterator first(iter, body.end(), actions.filename.native_file_string().c_str());
|
||||
iterator first(iter, body.end(), actions.state_.filename.native_file_string().c_str());
|
||||
first.set_position(template_pos);
|
||||
iterator last(body.end(), body.end());
|
||||
r = boost::spirit::qi::parse(first, last, block_p) && first == last;
|
||||
actions.phrase.swap(result);
|
||||
actions.state_.phrase.swap(result);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
@@ -343,13 +343,13 @@ namespace quickbook
|
||||
|
||||
std::string process(quickbook::actions& actions, call_template const& x)
|
||||
{
|
||||
++actions.template_depth;
|
||||
if (actions.template_depth > actions.max_template_depth)
|
||||
++actions.state_.template_depth;
|
||||
if (actions.state_.template_depth > actions.state_.max_template_depth)
|
||||
{
|
||||
detail::outerr(x.position.file, x.position.line)
|
||||
<< "Infinite loop detected" << std::endl;
|
||||
--actions.template_depth;
|
||||
++actions.error_count;
|
||||
--actions.state_.template_depth;
|
||||
++actions.state_.error_count;
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -358,17 +358,17 @@ namespace quickbook
|
||||
//
|
||||
// Note that for quickbook 1.4- this value is just ignored when the
|
||||
// arguments are expanded.
|
||||
template_scope const& call_scope = actions.templates.top_scope();
|
||||
template_scope const& call_scope = actions.state_.templates.top_scope();
|
||||
|
||||
std::string result;
|
||||
actions.push(); // scope the actions' states
|
||||
actions.state_.push(); // scope the actions' states
|
||||
{
|
||||
// Quickbook 1.4-: When expanding the tempalte continue to use the
|
||||
// current scope (the dynamic scope).
|
||||
// Quickbook 1.5+: Use the scope the template was defined in
|
||||
// (the static scope).
|
||||
if (qbk_version_n >= 105)
|
||||
actions.templates.set_parent_scope(*x.symbol->parent);
|
||||
actions.state_.templates.set_parent_scope(*x.symbol->parent);
|
||||
|
||||
std::vector<std::string> args = x.args;
|
||||
|
||||
@@ -376,9 +376,9 @@ namespace quickbook
|
||||
// Break the arguments
|
||||
if (!break_arguments(args, x.symbol->params, x.position))
|
||||
{
|
||||
actions.pop(); // restore the actions' states
|
||||
--actions.template_depth;
|
||||
++actions.error_count;
|
||||
actions.state_.pop(); // restore the actions' states
|
||||
--actions.state_.template_depth;
|
||||
++actions.state_.error_count;
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -392,8 +392,8 @@ namespace quickbook
|
||||
|
||||
if (!get_arg_result)
|
||||
{
|
||||
actions.pop(); // restore the actions' states
|
||||
--actions.template_depth;
|
||||
actions.state_.pop(); // restore the actions' states
|
||||
--actions.state_.template_depth;
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -409,15 +409,15 @@ namespace quickbook
|
||||
<< x.symbol->body
|
||||
<< "------------------end--------------------" << std::endl
|
||||
<< std::endl;
|
||||
actions.pop(); // restore the actions' states
|
||||
--actions.template_depth;
|
||||
++actions.error_count;
|
||||
actions.state_.pop(); // restore the actions' states
|
||||
--actions.state_.template_depth;
|
||||
++actions.state_.error_count;
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
actions.pop(); // restore the actions' states
|
||||
--actions.template_depth;
|
||||
actions.state_.pop(); // restore the actions' states
|
||||
--actions.state_.template_depth;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user