8 #include <boost/shared_ptr.hpp>
9 #include <boost/optional.hpp>
11 #include "exceptions.h"
25 XMLNode (xmlpp::Node const * node);
27 std::string string_child (std::string);
28 std::string optional_string_child (std::string);
29 ContentKind kind_child (std::string);
30 Fraction fraction_child (std::string);
31 int64_t int64_child (std::string);
32 int64_t optional_int64_child (std::string);
33 float float_child (std::string);
34 void ignore_child (std::string);
37 Time time_attribute (std::string);
38 float float_attribute (std::string);
39 std::string string_attribute (std::string);
40 std::string optional_string_attribute (std::string);
41 int64_t int64_attribute (std::string);
42 int64_t optional_int64_attribute (std::string);
43 boost::optional<bool> optional_bool_attribute (std::string);
44 boost::optional<Color> optional_color_attribute (std::string);
46 std::string content ();
49 boost::shared_ptr<T> type_child (std::string name) {
50 return boost::shared_ptr<T> (new T (node_child (name)));
54 boost::shared_ptr<T> optional_type_child (std::string name) {
55 std::list<xmlpp::Node*> n = node_children (name);
57 throw XMLError ("duplicate XML tag");
58 } else if (n.empty ()) {
59 return boost::shared_ptr<T> ();
62 return boost::shared_ptr<T> (new T (n.front ()));
66 std::list<boost::shared_ptr<T> > type_children (std::string name) {
67 std::list<xmlpp::Node*> n = node_children (name);
68 std::list<boost::shared_ptr<T> > r;
69 for (typename std::list<xmlpp::Node*>::iterator i = n.begin(); i != n.end(); ++i) {
70 r.push_back (boost::shared_ptr<T> (new T (*i)));
76 std::list<boost::shared_ptr<T> > type_grand_children (std::string name, std::string sub) {
77 XMLNode p (node_child (name));
78 return p.type_children<T> (sub);
81 xmlpp::Node const * _node;
84 xmlpp::Node* node_child (std::string);
85 std::list<xmlpp::Node*> node_children (std::string);
86 std::list<Glib::ustring> _taken;
89 class XMLFile : public XMLNode
92 XMLFile (std::string file, std::string root_name);
96 xmlpp::DomParser* _parser;