blob: f9d91d2652b3a3e09437a9243b7a2a48153d907d [file] [log] [blame]
// tiny XML sub-set tools --------------------------------------------------//
// (C) Copyright Beman Dawes 2002. 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)
// Provides self-contained tools for this XML sub-set:
//
// element ::= { "<" name { name "=" "\"" value "\"" } ">"
// {element} [contents] "</" name ">" }
//
// The point of "self-contained" is to minimize tool-chain dependencies.
#ifndef BOOST_TINY_XML_H
#define BOOST_TINY_XML_H
#include "boost/smart_ptr.hpp" // for shared_ptr
#include "boost/utility.hpp" // for noncopyable
#include <list>
#include <iostream>
#include <string>
namespace boost
{
namespace tiny_xml
{
class element;
struct attribute
{
std::string name;
std::string value;
attribute(){}
attribute( const std::string & name, const std::string & value )
: name(name), value(value) {}
};
typedef boost::shared_ptr< element > element_ptr;
typedef std::list< element_ptr > element_list;
typedef std::list< attribute > attribute_list;
class element
: private boost::noncopyable // because deep copy sematics would be required
{
public:
std::string name;
attribute_list attributes;
element_list elements;
std::string content;
element() {}
explicit element( const std::string & name ) : name(name) {}
};
element_ptr parse( std::istream & in, const std::string & msg );
// Precondition: stream positioned at either the initial "<"
// or the first character after the initial "<".
// Postcondition: stream positioned at the first character after final
// ">" (or eof).
// Returns: an element_ptr to an element representing the parsed stream.
// Throws: std::string on syntax error. msg appended to what() string.
void write( const element & e, std::ostream & out );
}
}
#endif // BOOST_TINY_XML_H