summaryrefslogtreecommitdiff
path: root/src/xml.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-05-13 14:20:36 +0100
committerCarl Hetherington <cth@carlh.net>2013-05-13 14:20:36 +0100
commit797916ae28d976f3c5be62d37b45864219af6098 (patch)
treea9bf9231987085c0eb9b6c3ce7427e1489929ec8 /src/xml.cc
parentd77d0d1bd972f6343752ca45a3d5e0a0924e2d50 (diff)
Use libcxml. Lump all static configuration flags into one.
Diffstat (limited to 'src/xml.cc')
-rw-r--r--src/xml.cc263
1 files changed, 0 insertions, 263 deletions
diff --git a/src/xml.cc b/src/xml.cc
deleted file mode 100644
index 508790ab..00000000
--- a/src/xml.cc
+++ /dev/null
@@ -1,263 +0,0 @@
-#include <sstream>
-#include <iostream>
-#include <boost/lexical_cast.hpp>
-#include <boost/filesystem.hpp>
-#include <boost/algorithm/string.hpp>
-#include <libxml++/libxml++.h>
-#include "xml.h"
-#include "exceptions.h"
-#include "util.h"
-
-using namespace std;
-using namespace boost;
-using namespace libdcp;
-
-XMLNode::XMLNode ()
- : _node (0)
-{
-
-}
-
-XMLNode::XMLNode (xmlpp::Node const * node)
- : _node (node)
-{
-
-}
-
-xmlpp::Node *
-XMLNode::node_child (string name)
-{
- list<xmlpp::Node*> n = node_children (name);
- if (n.size() > 1) {
- boost::throw_exception (XMLError ("duplicate XML tag " + name));
- } else if (n.empty ()) {
- boost::throw_exception (XMLError ("missing XML tag " + name + " in " + _node->get_name()));
- }
-
- return n.front ();
-}
-
-list<xmlpp::Node*>
-XMLNode::node_children (string name)
-{
- /* XXX: using find / get_path should work here, but I can't follow
- how get_path works.
- */
-
- xmlpp::Node::NodeList c = _node->get_children ();
-
- list<xmlpp::Node*> n;
- for (xmlpp::Node::NodeList::iterator i = c.begin (); i != c.end(); ++i) {
- if ((*i)->get_name() == name) {
- n.push_back (*i);
- }
- }
-
- _taken.push_back (name);
- return n;
-}
-
-string
-XMLNode::string_child (string name)
-{
- return XMLNode (node_child (name)).content ();
-}
-
-string
-XMLNode::optional_string_child (string name)
-{
- list<xmlpp::Node*> nodes = node_children (name);
- if (nodes.size() > 2) {
- boost::throw_exception (XMLError ("duplicate XML tag " + name));
- }
-
- if (nodes.empty ()) {
- return "";
- }
-
- return string_child (name);
-}
-
-ContentKind
-XMLNode::kind_child (string name)
-{
- return content_kind_from_string (string_child (name));
-}
-
-Fraction
-XMLNode::fraction_child (string name)
-{
- return Fraction (string_child (name));
-}
-
-int64_t
-XMLNode::int64_child (string name)
-{
- string s = string_child (name);
- erase_all (s, " ");
- return lexical_cast<int64_t> (s);
-}
-
-int64_t
-XMLNode::optional_int64_child (string name)
-{
- list<xmlpp::Node*> nodes = node_children (name);
- if (nodes.size() > 2) {
- boost::throw_exception (XMLError ("duplicate XML tag " + name));
- }
-
- if (nodes.empty ()) {
- return 0;
- }
-
- return int64_child (name);
-}
-
-float
-XMLNode::float_child (string name)
-{
- return lexical_cast<float> (string_child (name));
-}
-
-void
-XMLNode::ignore_child (string name)
-{
- _taken.push_back (name);
-}
-
-Time
-XMLNode::time_attribute (string name)
-{
- return Time (string_attribute (name));
-}
-
-string
-XMLNode::string_attribute (string name)
-{
- xmlpp::Element const * e = dynamic_cast<const xmlpp::Element *> (_node);
- if (!e) {
- boost::throw_exception (XMLError ("missing attribute"));
- }
-
- xmlpp::Attribute* a = e->get_attribute (name);
- if (!a) {
- boost::throw_exception (XMLError ("missing attribute"));
- }
-
- return a->get_value ();
-}
-
-string
-XMLNode::optional_string_attribute (string name)
-{
- xmlpp::Element const * e = dynamic_cast<const xmlpp::Element *> (_node);
- if (!e) {
- return "";
- }
-
- xmlpp::Attribute* a = e->get_attribute (name);
- if (!a) {
- return "";
- }
-
- return a->get_value ();
-}
-
-float
-XMLNode::float_attribute (string name)
-{
- return lexical_cast<float> (string_attribute (name));
-}
-
-int64_t
-XMLNode::int64_attribute (string name)
-{
- return lexical_cast<int64_t> (string_attribute (name));
-}
-
-int64_t
-XMLNode::optional_int64_attribute (string name)
-{
- string const s = optional_string_attribute (name);
- if (s.empty ()) {
- return 0;
- }
-
- return lexical_cast<int64_t> (s);
-}
-
-optional<bool>
-XMLNode::optional_bool_attribute (string name)
-{
- string const s = optional_string_attribute (name);
- if (s.empty ()) {
- return optional<bool> ();
- }
-
- if (s == "1" || s == "yes") {
- return optional<bool> (true);
- }
-
- return optional<bool> (false);
-}
-
-optional<Color>
-XMLNode::optional_color_attribute (string name)
-{
- string const s = optional_string_attribute (name);
- if (s.empty ()) {
- return optional<Color> ();
- }
-
- return optional<Color> (Color (s));
-}
-
-void
-XMLNode::done ()
-{
- xmlpp::Node::NodeList c = _node->get_children ();
- for (xmlpp::Node::NodeList::iterator i = c.begin(); i != c.end(); ++i) {
- if (dynamic_cast<xmlpp::Element *> (*i) && find (_taken.begin(), _taken.end(), (*i)->get_name()) == _taken.end ()) {
- boost::throw_exception (XMLError ("unexpected XML node " + (*i)->get_name()));
- }
- }
-}
-
-string
-XMLNode::content ()
-{
- string content;
-
- xmlpp::Node::NodeList c = _node->get_children ();
- for (xmlpp::Node::NodeList::const_iterator i = c.begin(); i != c.end(); ++i) {
- xmlpp::ContentNode const * v = dynamic_cast<xmlpp::ContentNode const *> (*i);
- if (v) {
- content += v->get_content ();
- }
- }
-
- return content;
-}
-
-XMLFile::XMLFile (string file, string root_name)
-{
- if (!filesystem::exists (file)) {
- boost::throw_exception (FileError ("XML file does not exist", file));
- }
-
- _parser = new xmlpp::DomParser;
- _parser->parse_file (file);
- if (!_parser) {
- boost::throw_exception (XMLError ("could not parse XML"));
- }
-
- _node = _parser->get_document()->get_root_node ();
- if (_node->get_name() != root_name) {
- boost::throw_exception (XMLError ("unrecognised root node"));
- }
-}
-
-XMLFile::~XMLFile ()
-{
- delete _parser;
-}