blob: bbed5c82e4d7524aef8a75955e49137143046486 [file] [log] [blame]
/*=============================================================================
Copyright (c) 2001-2007 Hartmut Kaiser
Copyright (c) 2001-2003 Daniel Nuffer
http://spirit.sourceforge.net/
Distributed under 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(TREE_TO_XML_HPP)
#define TREE_TO_XML_HPP
#include <boost/spirit/home/classic/namespace.hpp>
namespace boost { namespace spirit {
BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
namespace impl {
template <typename CharT> struct default_string;
}
///////////////////////////////////////////////////////////////////////////////
//
// Dump a parse tree as a xml stream
//
// The functions 'tree_to_xml' can be used to output a parse tree as a xml
// stream into the given ostream. The parameters have the following
// meaning:
//
// mandatory parameters:
// ostrm The output stream used for streaming the parse tree.
// tree The parse tree to output.
//
// optional parameters:
// input_line The input line from which the parse tree was
// generated (if given, it is used to output a comment
// containing this line).
// id_to_name A map, which is used for converting the rule id's contained
// in the parse tree to readable strings. Here a auxiliary
// associative container can be used, which maps a rule_id to
// a std::string (i.e. a std::map<rule_id, std::string>).
// get_token_id
// A function or functor, which takes an instance of a token
// and which should return a token id (i.e. something like
// 'int f(char const c)').
// get_token_value
// A function or functor, which takes an instance of a token
// and which should return a readable representation of this
// token (i.e. something like 'std::string f(char const c)').
//
// The structure of the generated xml stream conforms to the DTD given in the
// file 'parsetree.dtd'. This file is located in the spirit/tree directory.
//
///////////////////////////////////////////////////////////////////////////////
template <
typename CharT, typename TreeNodeT, typename AssocContainerT,
typename GetIdT, typename GetValueT
>
inline void
basic_tree_to_xml (std::basic_ostream<CharT> &ostrm, TreeNodeT const &tree,
std::basic_string<CharT> const &input_line,
AssocContainerT const& id_to_name, GetIdT const &get_token_id,
GetValueT const &get_token_value);
template <typename CharT, typename TreeNodeT, typename AssocContainerT>
inline void
basic_tree_to_xml (std::basic_ostream<CharT> &ostrm, TreeNodeT const &tree,
std::basic_string<CharT> const &input_line,
AssocContainerT const& id_to_name);
template <typename CharT, typename TreeNodeT>
inline void
basic_tree_to_xml (std::basic_ostream<CharT> &ostrm, TreeNodeT const &tree,
std::basic_string<CharT> const &input_line =
impl::default_string<CharT>::get());
///////////////////////////////////////////////////////////////////////////
template <
typename TreeNodeT, typename AssocContainerT,
typename GetIdT, typename GetValueT
>
inline void
tree_to_xml (std::ostream &ostrm, TreeNodeT const &tree,
std::string const &input_line, AssocContainerT const& id_to_name,
GetIdT const &get_token_id, GetValueT const &get_token_value)
{
basic_tree_to_xml<char>(ostrm, tree, input_line, id_to_name,
get_token_id, get_token_value);
}
template <typename TreeNodeT, typename AssocContainerT>
inline void
tree_to_xml (std::ostream &ostrm, TreeNodeT const &tree,
std::string const &input_line, AssocContainerT const& id_to_name)
{
basic_tree_to_xml<char>(ostrm, tree, input_line, id_to_name);
}
template <typename TreeNodeT>
inline void
tree_to_xml (std::ostream &ostrm, TreeNodeT const &tree,
std::string const &input_line = "")
{
basic_tree_to_xml<char>(ostrm, tree, input_line);
}
BOOST_SPIRIT_CLASSIC_NAMESPACE_END
}} // namespace BOOST_SPIRIT_CLASSIC_NS
#include <boost/spirit/home/classic/tree/impl/tree_to_xml.ipp>
#endif // !defined(TREE_TO_XML_HPP)