blob: 20ba63b00fc9337e46226dd5e82f1bce48790ae2 [file] [log] [blame]
/*=============================================================================
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)
=============================================================================*/
#include "syntax_highlight.hpp"
#include "actions_class.hpp"
namespace quickbook
{
typedef cpp_highlight<
span
, space
, string_symbols
, do_macro_action
, pre_escape_back
, post_escape_back
, unexpected_char
, collector>
cpp_p_type;
typedef python_highlight<
span
, space
, string_symbols
, do_macro_action
, pre_escape_back
, post_escape_back
, unexpected_char
, collector>
python_p_type;
typedef teletype_highlight<
plain_char_action
, string_symbols
, do_macro_action
, pre_escape_back
, post_escape_back
, collector>
teletype_p_type;
std::string syntax_highlight(
iterator first, iterator last,
actions& escape_actions,
std::string const& source_mode)
{
quickbook::collector temp;
// print the code with syntax coloring
if (source_mode == "c++")
{
cpp_p_type cpp_p(temp, escape_actions.macro, do_macro_action(temp), escape_actions);
boost::spirit::classic::parse(first, last, cpp_p);
}
else if (source_mode == "python")
{
python_p_type python_p(temp, escape_actions.macro, do_macro_action(temp), escape_actions);
boost::spirit::classic::parse(first, last, python_p);
}
else if (source_mode == "teletype")
{
teletype_p_type teletype_p(temp, escape_actions.macro, do_macro_action(temp), escape_actions);
boost::spirit::classic::parse(first, last, teletype_p);
}
else
{
BOOST_ASSERT(0);
}
std::string str;
temp.swap(str);
return str;
}
}