📄 actions.hpp
字号:
/*============================================================================= Copyright (c) 2002 2004 2006 Joel de Guzman Copyright (c) 2004 Eric Niebler 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)=============================================================================*/#if !defined(BOOST_SPIRIT_QUICKBOOK_ACTIONS_HPP)#define BOOST_SPIRIT_QUICKBOOK_ACTIONS_HPP#include <time.h>#include <map>#include <string>#include <vector>#include <stack>#include <algorithm>#include <boost/spirit/iterator/position_iterator.hpp>#include <boost/filesystem/operations.hpp>#include <boost/foreach.hpp>#include <boost/tuple/tuple.hpp>#include "../syntax_highlight.hpp"#include "./collector.hpp"#include "./template_stack.hpp"#include "./utils.hpp"#ifdef BOOST_MSVC// disable copy/assignment could not be generated, unreferenced formal params#pragma warning (push)#pragma warning(disable : 4511 4512 4100)#endifnamespace quickbook{ namespace fs = boost::filesystem; typedef position_iterator<std::string::const_iterator> iterator; typedef symbols<std::string> string_symbols; struct actions; extern tm* current_time; // the current time extern tm* current_gm_time; // the current UTC time extern bool debug_mode; extern unsigned qbk_major_version; extern unsigned qbk_minor_version; extern unsigned qbk_version_n; // qbk_major_version * 100 + qbk_minor_version extern std::vector<std::string> include_path; // forward declarations struct actions; int parse(char const* filein_, actions& actor, bool ignore_docinfo = false); struct error_action { // Prints an error message to std::cerr void operator()(iterator first, iterator /*last*/) const; }; struct phrase_action { // blurb, blockquote, preformatted, list_item, // unordered_list, ordered_list phrase_action( collector& out, collector& phrase, std::string const& pre, std::string const& post) : out(out) , phrase(phrase) , pre(pre) , post(post) {} void operator()(iterator first, iterator last) const; collector& out; collector& phrase; std::string pre; std::string post; }; struct header_action { // Handles paragraph, h1, h2, h3, h4, h5, h6, header_action( collector& out, collector& phrase, std::string const& library_id, std::string const& section_id, std::string const& qualified_section_id, std::string const& pre, std::string const& post) : out(out) , phrase(phrase) , library_id(library_id) , section_id(section_id) , qualified_section_id(qualified_section_id) , pre(pre) , post(post) {} void operator()(iterator first, iterator last) const; collector& out; collector& phrase; std::string const& library_id; std::string const& section_id; std::string const& qualified_section_id; std::string pre; std::string post; }; struct generic_header_action { // Handles h generic_header_action( collector& out, collector& phrase, std::string const& library_id, std::string const& section_id, std::string const& qualified_section_id, int const& section_level) : out(out) , phrase(phrase) , library_id(library_id) , section_id(section_id) , qualified_section_id(qualified_section_id) , section_level(section_level) {} void operator()(iterator first, iterator last) const; collector& out; collector& phrase; std::string const& library_id; std::string const& section_id; std::string const& qualified_section_id; int const& section_level; }; struct simple_phrase_action { // Handles simple text formats simple_phrase_action( collector& out , std::string const& pre , std::string const& post , string_symbols const& macro) : out(out) , pre(pre) , post(post) , macro(macro) {} void operator()(iterator first, iterator last) const; collector& out; std::string pre; std::string post; string_symbols const& macro; }; struct cond_phrase_action_pre { // Handles conditional phrases cond_phrase_action_pre( collector& out , std::vector<bool>& conditions , string_symbols const& macro) : out(out) , conditions(conditions) , macro(macro) {} void operator()(iterator first, iterator last) const; collector& out; std::vector<bool>& conditions; string_symbols const& macro; }; struct cond_phrase_action_post { // Handles conditional phrases cond_phrase_action_post( collector& out , std::vector<bool>& conditions , string_symbols const& macro) : out(out) , conditions(conditions) , macro(macro) {} void operator()(iterator first, iterator last) const; collector& out; std::vector<bool>& conditions; string_symbols const& macro; }; struct list_action { // Handles lists typedef std::pair<char, int> mark_type; list_action( collector& out , collector& list_buffer , int& list_indent , std::stack<mark_type>& list_marks) : out(out) , list_buffer(list_buffer) , list_indent(list_indent) , list_marks(list_marks) {} void operator()(iterator first, iterator last) const; collector& out; collector& list_buffer; int& list_indent; std::stack<mark_type>& list_marks; }; struct list_format_action { // Handles list formatting and hierarchy typedef std::pair<char, int> mark_type; list_format_action( collector& out , int& list_indent , std::stack<mark_type>& list_marks) : out(out) , list_indent(list_indent) , list_marks(list_marks) {} void operator()(iterator first, iterator last) const; collector& out; int& list_indent; std::stack<mark_type>& list_marks; }; struct span { // Decorates c++ code fragments span(char const* name, collector& out) : name(name), out(out) {} void operator()(iterator first, iterator last) const; char const* name; collector& out; }; struct unexpected_char { // Handles unexpected chars in c++ syntax unexpected_char(collector& out) : out(out) {} void operator()(char) const; collector& out; }; struct anchor_action { // Handles anchors anchor_action(collector& out) : out(out) {} void operator()(iterator first, iterator last) const; collector& out; }; namespace { char const* quickbook_get_date = "__quickbook_get_date__"; char const* quickbook_get_time = "__quickbook_get_time__"; } struct do_macro_action { // Handles macro substitutions do_macro_action(collector& phrase) : phrase(phrase) {} void operator()(std::string const& str) const; collector& phrase; }; struct space { // Prints a space space(collector& out) : out(out) {} void operator()(iterator first, iterator last) const; void operator()(char ch) const; collector& out; }; struct pre_escape_back { // Escapes back from code to quickbook (Pre) pre_escape_back(actions& escape_actions, std::string& save) : escape_actions(escape_actions), save(save) {} void operator()(iterator first, iterator last) const; actions& escape_actions; std::string& save; }; struct post_escape_back { // Escapes back from code to quickbook (Post) post_escape_back(collector& out, actions& escape_actions, std::string& save) : out(out), escape_actions(escape_actions), save(save) {} void operator()(iterator first, iterator last) const; collector& out; actions& escape_actions; std::string& save; }; typedef cpp_highlight< span , space , string_symbols , do_macro_action , pre_escape_back , post_escape_back , actions , unexpected_char , collector> cpp_p_type; typedef python_highlight< span , space , string_symbols , do_macro_action , pre_escape_back , post_escape_back , actions , unexpected_char , collector> python_p_type; struct code_action { // Does the actual syntax highlighing of code code_action( collector& out , collector& phrase , collector& temp , std::string const& source_mode , string_symbols const& macro , actions& escape_actions) : out(out) , phrase(phrase) , temp(temp) , source_mode(source_mode) , cpp_p(temp, macro, do_macro_action(temp), escape_actions) , python_p(temp, macro, do_macro_action(temp), escape_actions) { } void operator()(iterator first, iterator last) const; collector& out; collector& phrase; collector& temp; std::string const& source_mode; cpp_p_type cpp_p;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -