blob: 597a7c9d684f16a946af033ee06fd53cbbb0053a [file] [log] [blame]
/*=============================================================================
Copyright (c) 2002 2004 2006 Joel de Guzman
Copyright (c) 2004 Eric Niebler
Copyright (c) 2005 Thomas Guest
http://spirit.sourceforge.net/
Use, modification and distribution is subject to the Boost Software
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================*/
#include "./actions_class.hpp"
#include "./markups.hpp"
#if (defined(BOOST_MSVC) && (BOOST_MSVC <= 1310))
#pragma warning(disable:4355)
#endif
namespace quickbook
{
actions::actions(char const* filein_, fs::path const& outdir_, string_stream& out_)
// header info
: doc_type()
, doc_title()
, doc_version()
, doc_id()
, doc_dirname()
, doc_copyrights()
, doc_purpose()
, doc_category()
, doc_authors()
, doc_license()
, doc_last_revision()
, include_doc_id()
, doc_license_1_1()
, doc_purpose_1_1()
// main output stream
, out(out_)
// auxilliary streams
, phrase()
, temp()
, list_buffer()
// state
, filename(fs::complete(fs::path(filein_, fs::native)))
, outdir(outdir_)
, macro()
, section_level(0)
, section_id()
, qualified_section_id()
, source_mode("c++")
// temporary or global state
, table_title()
, table_span(0)
, table_header()
, macro_id()
, list_marks()
, list_indent(-1)
, template_info()
, template_depth(0)
, template_escape(false)
, templates()
, error_count(0)
// actions
, error(error_count)
, extract_doc_license(doc_license, phrase)
, extract_doc_purpose(doc_purpose, phrase)
, syntax_p(temp, source_mode, macro, *this)
, code(out, phrase, syntax_p)
, code_block(phrase, phrase, syntax_p)
, inline_code(phrase, syntax_p)
, paragraph(out, phrase, paragraph_pre, paragraph_post)
, inside_paragraph(temp_para, phrase, paragraph_pre, paragraph_post)
, h(out, phrase, doc_id, section_id, qualified_section_id, section_level)
, h1(out, phrase, doc_id, section_id, qualified_section_id, h1_pre, h1_post)
, h2(out, phrase, doc_id, section_id, qualified_section_id, h2_pre, h2_post)
, h3(out, phrase, doc_id, section_id, qualified_section_id, h3_pre, h3_post)
, h4(out, phrase, doc_id, section_id, qualified_section_id, h4_pre, h4_post)
, h5(out, phrase, doc_id, section_id, qualified_section_id, h5_pre, h5_post)
, h6(out, phrase, doc_id, section_id, qualified_section_id, h6_pre, h6_post)
, hr(out, hr_)
, blurb(out, temp_para, blurb_pre, blurb_post)
, blockquote(out, temp_para, blockquote_pre, blockquote_post)
, preformatted(out, phrase, preformatted_pre, preformatted_post)
, warning(out, temp_para, warning_pre, warning_post)
, caution(out, temp_para, caution_pre, caution_post)
, important(out, temp_para, important_pre, important_post)
, note(out, temp_para, note_pre, note_post)
, tip(out, temp_para, tip_pre, tip_post)
, plain_char(phrase)
, raw_char(phrase)
, image(phrase)
, cond_phrase_pre(phrase, conditions, macro)
, cond_phrase_post(phrase, conditions, macro)
, list(out, list_buffer, list_indent, list_marks)
, list_format(list_buffer, list_indent, list_marks, error_count)
, list_item(list_buffer, phrase, list_item_pre, list_item_post)
, funcref_pre(phrase, funcref_pre_)
, funcref_post(phrase, funcref_post_)
, classref_pre(phrase, classref_pre_)
, classref_post(phrase, classref_post_)
, memberref_pre(phrase, memberref_pre_)
, memberref_post(phrase, memberref_post_)
, enumref_pre(phrase, enumref_pre_)
, enumref_post(phrase, enumref_post_)
, macroref_pre(phrase, macroref_pre_)
, macroref_post(phrase, macroref_post_)
, headerref_pre(phrase, headerref_pre_)
, headerref_post(phrase, headerref_post_)
, conceptref_pre(phrase, conceptref_pre_)
, conceptref_post(phrase, conceptref_post_)
, globalref_pre(phrase, globalref_pre_)
, globalref_post(phrase, globalref_post_)
, bold_pre(phrase, bold_pre_)
, bold_post(phrase, bold_post_)
, italic_pre(phrase, italic_pre_)
, italic_post(phrase, italic_post_)
, underline_pre(phrase, underline_pre_)
, underline_post(phrase, underline_post_)
, teletype_pre(phrase, teletype_pre_)
, teletype_post(phrase, teletype_post_)
, strikethrough_pre(phrase, strikethrough_pre_)
, strikethrough_post(phrase, strikethrough_post_)
, quote_pre(phrase, quote_pre_)
, quote_post(phrase, quote_post_)
, replaceable_pre(phrase, replaceable_pre_)
, replaceable_post(phrase, replaceable_post_)
, footnote_pre(phrase, footnote_pre_)
, footnote_post(phrase, footnote_post_)
, simple_bold(phrase, bold_pre_, bold_post_, macro)
, simple_italic(phrase, italic_pre_, italic_post_, macro)
, simple_underline(phrase, underline_pre_, underline_post_, macro)
, simple_teletype(phrase, teletype_pre_, teletype_post_, macro)
, simple_strikethrough(phrase, strikethrough_pre_, strikethrough_post_, macro)
, variablelist(*this)
, start_varlistentry(phrase, start_varlistentry_)
, end_varlistentry(phrase, end_varlistentry_)
, start_varlistterm(phrase, start_varlistterm_)
, end_varlistterm(phrase, end_varlistterm_)
, start_varlistitem(phrase)
, end_varlistitem(phrase, temp_para)
, break_(phrase)
, macro_identifier(*this)
, macro_definition(*this)
, do_macro(phrase)
, template_body(*this)
, do_template(*this)
, url_pre(phrase, url_pre_)
, url_post(phrase, url_post_)
, link_pre(phrase, link_pre_)
, link_post(phrase, link_post_)
, table(*this)
, start_row(phrase, table_span, table_header)
, end_row(phrase, end_row_)
, start_cell(phrase, table_span)
, end_cell(phrase, temp_para)
, anchor(out)
, begin_section(out, phrase, doc_id, section_id, section_level, qualified_section_id)
, end_section(out, section_level, qualified_section_id, error_count)
, xinclude(out, *this)
, include(*this)
, import(out, *this)
, escape_pre(phrase, escape_pre_)
, escape_post(phrase, escape_post_)
{
// turn off __FILENAME__ macro on debug mode = true
std::string filename_str = debug_mode ?
std::string("NO_FILENAME_MACRO_GENERATED_IN_DEBUG_MODE") :
filename.native_file_string();
// add the predefined macros
macro.add
("__DATE__", std::string(quickbook_get_date))
("__TIME__", std::string(quickbook_get_time))
("__FILENAME__", filename_str)
;
}
void actions::push()
{
state_stack.push(
boost::make_tuple(
filename
, outdir
, macro
, section_level
, section_id
, qualified_section_id
, source_mode
)
);
out.push();
phrase.push();
temp.push();
temp_para.push();
list_buffer.push();
templates.push();
}
void actions::pop()
{
boost::tie(
filename
, outdir
, macro
, section_level
, section_id
, qualified_section_id
, source_mode
) = state_stack.top();
state_stack.pop();
out.pop();
phrase.pop();
temp.pop();
temp_para.pop();
list_buffer.pop();
templates.pop();
}
}