From c9e5903e731acaf60ae2e2c654f90fbea5f1a261 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 22 Feb 2009 20:52:34 +0000 Subject: Clean up xml++.h and xml++.cc in Ardour style. No functional changes. (We've diverged far enough for it to not matter, and are about to diverge even more, so might as well). git-svn-id: svn://localhost/ardour2/branches/3.0@4649 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/pbd/pbd/xml++.h | 198 ++++++++++++++++----------------- libs/pbd/xml++.cc | 301 +++++++++++++++++++++++++-------------------------- 2 files changed, 246 insertions(+), 253 deletions(-) (limited to 'libs') diff --git a/libs/pbd/pbd/xml++.h b/libs/pbd/pbd/xml++.h index 83cc8ff91b..9427c7070c 100644 --- a/libs/pbd/pbd/xml++.h +++ b/libs/pbd/pbd/xml++.h @@ -2,6 +2,7 @@ * libxml++ and this file are copyright (C) 2000 by Ari Johnson, and * are covered by the GNU Lesser General Public License, which should be * included with libxml++ as the file COPYING. + * Modified for Ardour and released under the same terms. */ #include @@ -25,134 +26,127 @@ class XMLTree; class XMLNode; class XMLProperty; -typedef list XMLNodeList; +typedef list XMLNodeList; typedef list > XMLSharedNodeList; -typedef XMLNodeList::iterator XMLNodeIterator; -typedef XMLNodeList::const_iterator XMLNodeConstIterator; -typedef list XMLPropertyList; -typedef XMLPropertyList::iterator XMLPropertyIterator; -typedef XMLPropertyList::const_iterator XMLPropertyConstIterator; -typedef map XMLPropertyMap; +typedef XMLNodeList::iterator XMLNodeIterator; +typedef XMLNodeList::const_iterator XMLNodeConstIterator; +typedef list XMLPropertyList; +typedef XMLPropertyList::iterator XMLPropertyIterator; +typedef XMLPropertyList::const_iterator XMLPropertyConstIterator; +typedef map XMLPropertyMap; class XMLTree { -private: - string _filename; - XMLNode *_root; - int _compression; - bool read_internal(bool validate); - public: - XMLTree(); - XMLTree(const string &fn, bool validate = false); - XMLTree(const XMLTree *); - ~XMLTree(); + XMLTree(); + XMLTree(const string& fn, bool validate = false); + XMLTree(const XMLTree*); + ~XMLTree(); - XMLNode *root() const { return _root; }; - XMLNode *set_root(XMLNode *n) { return _root = n; }; + XMLNode* root() const { return _root; } + XMLNode* set_root(XMLNode* n) { return _root = n; } - const string & filename() const { return _filename; }; - const string & set_filename(const string &fn) { return _filename = fn; }; + const string& filename() const { return _filename; } + const string& set_filename(const string& fn) { return _filename = fn; } - int compression() const { return _compression; }; - int set_compression(int); + int compression() const { return _compression; } + int set_compression(int); - bool read() { return read_internal(false); }; - bool read(const string &fn) { set_filename(fn); return read_internal(false); }; - bool read_and_validate() { return read_internal(true); }; - bool read_and_validate(const string &fn) { set_filename(fn); return read_internal(true); }; - bool read_buffer(const string &); + bool read() { return read_internal(false); } + bool read(const string& fn) { set_filename(fn); return read_internal(false); } + bool read_and_validate() { return read_internal(true); } + bool read_and_validate(const string& fn) { set_filename(fn); return read_internal(true); } + bool read_buffer(const string&); - bool write() const; - bool write(const string &fn) { set_filename(fn); return write(); }; + bool write() const; + bool write(const string& fn) { set_filename(fn); return write(); } - void debug (FILE*) const; + void debug (FILE*) const; - const string & write_buffer() const; -}; + const string& write_buffer() const; -class XMLNode { private: - string _name; - bool _is_content; - string _content; - XMLNodeList _children; - XMLPropertyList _proplist; - XMLPropertyMap _propmap; - mutable XMLNodeList _selected_children; + bool read_internal(bool validate); + + string _filename; + XMLNode* _root; + int _compression; +}; +class XMLNode { public: - XMLNode(const string& name); - XMLNode(const string& name, const string& content); - XMLNode(const XMLNode& other); - ~XMLNode(); - - const string name() const { return _name; }; - - bool is_content() const { return _is_content; }; - const string & content() const { return _content; }; - const string & set_content (const string &); - XMLNode *add_content(const string & = string()); - - const XMLNodeList & children (const string& str = string()) const; - XMLNode *add_child (const char *); - XMLNode *add_child_copy (const XMLNode&); - XMLNode *child (const char*) const; - void add_child_nocopy (XMLNode&); - - boost::shared_ptr find(const std::string xpath) const; - std::string attribute_value(); - - const XMLPropertyList & properties() const { return _proplist; }; - XMLProperty *property(const char * ); - XMLProperty *property(const std::string&); - const XMLProperty *property(const char * n) const - { return ((XMLNode *) this)->property(n); }; - const XMLProperty *property(const std::string& ns) const - { return ((XMLNode *) this)->property(ns); }; - XMLProperty *add_property(const char *name, const string& value); - XMLProperty *add_property(const char *name, const char *value = ""); - XMLProperty *add_property(const char *name, const long value); - - void remove_property(const string &); - - /** Remove all nodes with the name passed to remove_nodes */ - void remove_nodes(const string &); - /** Remove and delete all nodes with the name passed to remove_nodes */ - void remove_nodes_and_delete(const string &); - /** Remove and delete all nodes with property prop matching val */ - void remove_nodes_and_delete(const string& propname, const string& val); -}; + XMLNode(const string& name); + XMLNode(const string& name, const string& content); + XMLNode(const XMLNode& other); + ~XMLNode(); + + const string& name() const { return _name; } + + bool is_content() const { return _is_content; } + const string& content() const { return _content; } + const string& set_content(const string&); + XMLNode* add_content(const string& s = string()); + + const XMLNodeList& children(const string& str = string()) const; + XMLNode* child(const char*) const; + XMLNode* add_child(const char *); + XMLNode* add_child_copy(const XMLNode&); + void add_child_nocopy(XMLNode&); + + boost::shared_ptr find(const std::string xpath) const; + std::string attribute_value(); + + const XMLPropertyList& properties() const { return _proplist; } + XMLProperty* property(const char*); + XMLProperty* property(const string&); + const XMLProperty* property(const char* n) const { return ((XMLNode*)this)->property(n); } + const XMLProperty* property(const string& n) const { return ((XMLNode*)this)->property(n); } + + XMLProperty* add_property(const char* name, const string& value); + XMLProperty* add_property(const char* name, const char* value = ""); + XMLProperty* add_property(const char* name, const long value); + + void remove_property(const string&); + + /** Remove all nodes with the name passed to remove_nodes */ + void remove_nodes(const string&); + /** Remove and delete all nodes with the name passed to remove_nodes */ + void remove_nodes_and_delete(const string&); + /** Remove and delete all nodes with property prop matching val */ + void remove_nodes_and_delete(const string& propname, const string& val); -class XMLProperty { private: - string _name; - string _value; + string _name; + bool _is_content; + string _content; + XMLNodeList _children; + XMLPropertyList _proplist; + XMLPropertyMap _propmap; + mutable XMLNodeList _selected_children; +}; +class XMLProperty { public: - XMLProperty(const string &n, const string &v = string()); - ~XMLProperty(); + XMLProperty(const string& n, const string& v = string()); + ~XMLProperty(); - const string & name() const { return _name; }; - const string & value() const { return _value; }; - const string & set_value(const string &v) { return _value = v; }; + const string& name() const { return _name; } + const string& value() const { return _value; } + const string& set_value(const string& v) { return _value = v; } + +private: + string _name; + string _value; }; -class XMLException: public std::exception -{ +class XMLException: public std::exception { public: - explicit XMLException(const string message) - : message_(message) - { - } - - virtual ~XMLException() throw() {}; + explicit XMLException(const string msg) : _message(msg) {} + virtual ~XMLException() throw() {} - virtual const char* what() const throw() { return message_.c_str(); } - virtual void Raise() const { throw *this; } - virtual exception * Clone() const { return new exception(*this); } + virtual const char* what() const throw() { return _message.c_str(); } private: - string message_; + string _message; }; #endif /* __XML_H */ diff --git a/libs/pbd/xml++.cc b/libs/pbd/xml++.cc index 7d406d6c30..d878245242 100644 --- a/libs/pbd/xml++.cc +++ b/libs/pbd/xml++.cc @@ -2,6 +2,7 @@ * libxml++ and this file are copyright (C) 2000 by Ari Johnson, and * are covered by the GNU Lesser General Public License, which should be * included with libxml++ as the file COPYING. + * Modified for Ardour and released under the same terms. */ #include @@ -11,30 +12,30 @@ #define XML_VERSION "1.0" -static XMLNode *readnode(xmlNodePtr); -static void writenode(xmlDocPtr, XMLNode *, xmlNodePtr, int); -static XMLSharedNodeList* find_impl(xmlXPathContext* ctxt, const string xpath); +static XMLNode* readnode(xmlNodePtr); +static void writenode(xmlDocPtr, XMLNode*, xmlNodePtr, int); +static XMLSharedNodeList* find_impl(xmlXPathContext* ctxt, const string& xpath); -XMLTree::XMLTree() - : _filename(), - _root(0), - _compression(0) -{ +XMLTree::XMLTree() + : _filename() + , _root(0) + , _compression(0) +{ } -XMLTree::XMLTree(const string &fn, bool validate) - : _filename(fn), - _root(0), - _compression(0) -{ - read_internal(validate); +XMLTree::XMLTree(const string& fn, bool validate) + : _filename(fn) + , _root(0) + , _compression(0) +{ + read_internal(validate); } -XMLTree::XMLTree(const XMLTree * from) +XMLTree::XMLTree(const XMLTree* from) + : _filename(from->filename()) + , _root(new XMLNode(*from->root())) + , _compression(from->compression()) { - _filename = from->filename(); - _root = new XMLNode(*from->root()); - _compression = from->compression(); } XMLTree::~XMLTree() @@ -42,7 +43,7 @@ XMLTree::~XMLTree() delete _root; } -int +int XMLTree::set_compression(int c) { if (c > 9) { @@ -50,13 +51,13 @@ XMLTree::set_compression(int c) } else if (c < 0) { c = 0; } - + _compression = c; - + return _compression; } -bool +bool XMLTree::read_internal(bool validate) { //shouldnt be used anywhere ATM, remove if so! @@ -64,13 +65,13 @@ XMLTree::read_internal(bool validate) delete _root; _root = 0; - + xmlParserCtxtPtr ctxt; /* the parser context */ xmlDocPtr doc; /* the resulting document tree */ - + xmlKeepBlanksDefault(0); /* parse the file, activating the DTD validation option */ - if(validate) { + if (validate) { /* create a parser context */ ctxt = xmlNewParserCtxt(); if (ctxt == NULL) { @@ -80,15 +81,15 @@ XMLTree::read_internal(bool validate) } else { doc = xmlParseFile(_filename.c_str()); } - + /* check if parsing suceeded */ if (doc == NULL) { - if(validate) { + if (validate) { xmlFreeParserCtxt(ctxt); } return false; } else { - /* check if validation suceeded */ + /* check if validation suceeded */ if (validate && ctxt->valid == 0) { xmlFreeParserCtxt(ctxt); xmlFreeDoc(doc); @@ -96,59 +97,59 @@ XMLTree::read_internal(bool validate) throw XMLException("Failed to validate document " + _filename); } } - + _root = readnode(xmlDocGetRootElement(doc)); - + /* free up the parser context */ - if(validate) { + if (validate) { xmlFreeParserCtxt(ctxt); } xmlFreeDoc(doc); xmlCleanupParser(); - + return true; } -bool -XMLTree::read_buffer(const string & buffer) +bool +XMLTree::read_buffer(const string& buffer) { xmlDocPtr doc; - + _filename = ""; - + delete _root; _root = 0; - - doc = xmlParseMemory((char *) buffer.c_str(), buffer.length()); + + doc = xmlParseMemory((char*)buffer.c_str(), buffer.length()); if (!doc) { return false; } - + _root = readnode(xmlDocGetRootElement(doc)); xmlFreeDoc(doc); - + return true; } -bool -XMLTree::write(void) const +bool +XMLTree::write() const { xmlDocPtr doc; XMLNodeList children; int result; - + xmlKeepBlanksDefault(0); - doc = xmlNewDoc((xmlChar *) XML_VERSION); + doc = xmlNewDoc((xmlChar*) XML_VERSION); xmlSetDocCompressMode(doc, _compression); writenode(doc, _root, doc->children, 1); result = xmlSaveFormatFileEnc(_filename.c_str(), doc, "UTF-8", 1); xmlFreeDoc(doc); - + if (result == -1) { return false; } - + return true; } @@ -159,43 +160,46 @@ XMLTree::debug(FILE* out) const XMLNodeList children; xmlKeepBlanksDefault(0); - doc = xmlNewDoc((xmlChar *) XML_VERSION); + doc = xmlNewDoc((xmlChar*) XML_VERSION); xmlSetDocCompressMode(doc, _compression); writenode(doc, _root, doc->children, 1); xmlDebugDumpDocument (out, doc); xmlFreeDoc(doc); } -const string & -XMLTree::write_buffer(void) const +const string& +XMLTree::write_buffer() const { static string retval; - char *ptr; + char* ptr; int len; xmlDocPtr doc; XMLNodeList children; - + xmlKeepBlanksDefault(0); - doc = xmlNewDoc((xmlChar *) XML_VERSION); + doc = xmlNewDoc((xmlChar*) XML_VERSION); xmlSetDocCompressMode(doc, _compression); writenode(doc, _root, doc->children, 1); xmlDocDumpMemory(doc, (xmlChar **) & ptr, &len); xmlFreeDoc(doc); - + retval = ptr; - + free(ptr); - + return retval; } -XMLNode::XMLNode(const string & n) - : _name(n), _is_content(false), _content(string()) +XMLNode::XMLNode(const string& n) + : _name(n) + , _is_content(false) { } -XMLNode::XMLNode(const string & n, const string & c) - :_name(n), _is_content(true), _content(c) +XMLNode::XMLNode(const string& n, const string& c) + : _name(n) + , _is_content(true) + , _content(c) { } @@ -205,15 +209,15 @@ XMLNode::XMLNode(const XMLNode& from) XMLPropertyIterator curprop; XMLNodeList nodes; XMLNodeIterator curnode; - + _name = from.name(); set_content(from.content()); - + props = from.properties(); for (curprop = props.begin(); curprop != props.end(); ++curprop) { add_property((*curprop)->name().c_str(), (*curprop)->value()); } - + nodes = from.children(); for (curnode = nodes.begin(); curnode != nodes.end(); ++curnode) { add_child_copy(**curnode); @@ -224,109 +228,109 @@ XMLNode::~XMLNode() { XMLNodeIterator curchild; XMLPropertyIterator curprop; - + for (curchild = _children.begin(); curchild != _children.end(); ++curchild) { delete *curchild; } - + for (curprop = _proplist.begin(); curprop != _proplist.end(); ++curprop) { delete *curprop; } } -const string & -XMLNode::set_content(const string & c) +const string& +XMLNode::set_content(const string& c) { if (c.empty()) { _is_content = false; } else { _is_content = true; } - + _content = c; - + return _content; } XMLNode* -XMLNode::child (const char *name) const +XMLNode::child (const char* name) const { /* returns first child matching name */ XMLNodeConstIterator cur; - + if (name == 0) { return 0; } - + for (cur = _children.begin(); cur != _children.end(); ++cur) { if ((*cur)->name() == name) { return *cur; } } - + return 0; } -const XMLNodeList & +const XMLNodeList& XMLNode::children(const string& n) const { /* returns all children matching name */ XMLNodeConstIterator cur; - + if (n.empty()) { return _children; } _selected_children.clear(); - + for (cur = _children.begin(); cur != _children.end(); ++cur) { if ((*cur)->name() == n) { _selected_children.insert(_selected_children.end(), *cur); } } - + return _selected_children; } -XMLNode * -XMLNode::add_child(const char * n) +XMLNode* +XMLNode::add_child(const char* n) { return add_child_copy(XMLNode (n)); } void -XMLNode::add_child_nocopy (XMLNode& n) +XMLNode::add_child_nocopy(XMLNode& n) { _children.insert(_children.end(), &n); } -XMLNode * +XMLNode* XMLNode::add_child_copy(const XMLNode& n) { - XMLNode *copy = new XMLNode (n); + XMLNode *copy = new XMLNode(n); _children.insert(_children.end(), copy); return copy; } -boost::shared_ptr +boost::shared_ptr XMLNode::find(const string xpath) const { - xmlDocPtr doc = xmlNewDoc((xmlChar *) XML_VERSION); - writenode(doc, (XMLNode *) this, doc->children, 1); + xmlDocPtr doc = xmlNewDoc((xmlChar*) XML_VERSION); + writenode(doc, (XMLNode*)this, doc->children, 1); xmlXPathContext* ctxt = xmlXPathNewContext(doc); - - boost::shared_ptr result = - boost::shared_ptr(find_impl(ctxt, xpath)); - + + boost::shared_ptr result = + boost::shared_ptr(find_impl(ctxt, xpath)); + xmlXPathFreeContext(ctxt); xmlFreeDoc(doc); - + return result; } -std::string +std::string XMLNode::attribute_value() { XMLNodeList children = this->children(); @@ -337,14 +341,14 @@ XMLNode::attribute_value() return child->content(); } -XMLNode * -XMLNode::add_content(const string & c) +XMLNode* +XMLNode::add_content(const string& c) { return add_child_copy(XMLNode (string(), c)); } -XMLProperty * -XMLNode::property(const char * n) +XMLProperty* +XMLNode::property(const char* n) { string ns(n); map::iterator iter; @@ -356,27 +360,27 @@ XMLNode::property(const char * n) return 0; } -XMLProperty * -XMLNode::property(const string & ns) +XMLProperty* +XMLNode::property(const string& ns) { map::iterator iter; if ((iter = _propmap.find(ns)) != _propmap.end()) { return iter->second; } - + return 0; } -XMLProperty * -XMLNode::add_property(const char * n, const string & v) +XMLProperty* +XMLNode::add_property(const char* n, const string& v) { string ns(n); - if(_propmap.find(ns) != _propmap.end()){ + if (_propmap.find(ns) != _propmap.end()) { remove_property(ns); } - XMLProperty *tmp = new XMLProperty(ns, v); + XMLProperty* tmp = new XMLProperty(ns, v); if (!tmp) { return 0; @@ -388,23 +392,23 @@ XMLNode::add_property(const char * n, const string & v) return tmp; } -XMLProperty * -XMLNode::add_property(const char * n, const char * v) +XMLProperty* +XMLNode::add_property(const char* n, const char* v) { string vs(v); return add_property(n, vs); } -XMLProperty * -XMLNode::add_property(const char *name, const long value) +XMLProperty* +XMLNode::add_property(const char* name, const long value) { static char str[1024]; snprintf(str, 1024, "%ld", value); return add_property(name, str); } -void -XMLNode::remove_property(const string & n) +void +XMLNode::remove_property(const string& n) { if (_propmap.find(n) != _propmap.end()) { _proplist.remove(_propmap[n]); @@ -412,12 +416,12 @@ XMLNode::remove_property(const string & n) } } -void -XMLNode::remove_nodes(const string & n) +void +XMLNode::remove_nodes(const string& n) { XMLNodeIterator i = _children.begin(); XMLNodeIterator tmp; - + while (i != _children.end()) { tmp = i; ++tmp; @@ -428,12 +432,12 @@ XMLNode::remove_nodes(const string & n) } } -void -XMLNode::remove_nodes_and_delete(const string & n) +void +XMLNode::remove_nodes_and_delete(const string& n) { XMLNodeIterator i = _children.begin(); XMLNodeIterator tmp; - + while (i != _children.end()) { tmp = i; ++tmp; @@ -446,7 +450,7 @@ XMLNode::remove_nodes_and_delete(const string & n) } void -XMLNode::remove_nodes_and_delete(const string& propname, const string& val) +XMLNode::remove_nodes_and_delete(const string& propname, const string& val) { XMLNodeIterator i = _children.begin(); XMLNodeIterator tmp; @@ -457,7 +461,7 @@ XMLNode::remove_nodes_and_delete(const string& propname, const string& val) ++tmp; prop = (*i)->property(propname); - if(prop && prop->value() == val) { + if (prop && prop->value() == val) { delete *i; _children.erase(i); } @@ -466,10 +470,10 @@ XMLNode::remove_nodes_and_delete(const string& propname, const string& val) } } -XMLProperty::XMLProperty(const string &n, const string &v) - : _name(n), - _value(v) -{ +XMLProperty::XMLProperty(const string& n, const string& v) + : _name(n) + , _value(v) +{ // Normalize property name (replace '_' with '-' as old session are inconsistent) for (size_t i = 0; i < _name.length(); ++i) { if (_name[i] == '_') { @@ -482,86 +486,84 @@ XMLProperty::~XMLProperty() { } -static XMLNode * +static XMLNode* readnode(xmlNodePtr node) { string name, content; xmlNodePtr child; - XMLNode *tmp; + XMLNode* tmp; xmlAttrPtr attr; - + if (node->name) { - name = (char *) node->name; + name = (char*)node->name; } - + tmp = new XMLNode(name); - + for (attr = node->properties; attr; attr = attr->next) { content = ""; if (attr->children) { - content = (char *) attr->children->content; + content = (char*)attr->children->content; } - tmp->add_property((char *) attr->name, content); + tmp->add_property((char*)attr->name, content); } - + if (node->content) { - tmp->set_content((char *) node->content); + tmp->set_content((char*)node->content); } else { tmp->set_content(string()); } - + for (child = node->children; child; child = child->next) { tmp->add_child_nocopy (*readnode(child)); } - + return tmp; } -static void -writenode(xmlDocPtr doc, XMLNode * n, xmlNodePtr p, int root = 0) +static void +writenode(xmlDocPtr doc, XMLNode* n, xmlNodePtr p, int root = 0) { XMLPropertyList props; XMLPropertyIterator curprop; XMLNodeList children; XMLNodeIterator curchild; xmlNodePtr node; - + if (root) { - node = doc->children = xmlNewDocNode(doc, 0, (xmlChar *) n->name().c_str(), 0); + node = doc->children = xmlNewDocNode(doc, 0, (xmlChar*) n->name().c_str(), 0); } else { - node = xmlNewChild(p, 0, (xmlChar *) n->name().c_str(), 0); + node = xmlNewChild(p, 0, (xmlChar*) n->name().c_str(), 0); } - + if (n->is_content()) { node->type = XML_TEXT_NODE; - xmlNodeSetContentLen(node, (const xmlChar *) n->content().c_str(), n->content().length()); + xmlNodeSetContentLen(node, (const xmlChar*)n->content().c_str(), n->content().length()); } - + props = n->properties(); for (curprop = props.begin(); curprop != props.end(); ++curprop) { - xmlSetProp(node, (xmlChar *) (*curprop)->name().c_str(), (xmlChar *) (*curprop)->value().c_str()); + xmlSetProp(node, (xmlChar*) (*curprop)->name().c_str(), (xmlChar*) (*curprop)->value().c_str()); } - + children = n->children(); for (curchild = children.begin(); curchild != children.end(); ++curchild) { writenode(doc, *curchild, node); } } -static XMLSharedNodeList* find_impl(xmlXPathContext* ctxt, const string xpath) +static XMLSharedNodeList* find_impl(xmlXPathContext* ctxt, const string& xpath) { xmlXPathObject* result = xmlXPathEval((const xmlChar*)xpath.c_str(), ctxt); - if(!result) - { + if (!result) { xmlXPathFreeContext(ctxt); xmlFreeDoc(ctxt->doc); throw XMLException("Invalid XPath: " + xpath); } - if(result->type != XPATH_NODESET) - { + if (result->type != XPATH_NODESET) { xmlXPathFreeObject(result); xmlXPathFreeContext(ctxt); xmlFreeDoc(ctxt->doc); @@ -571,15 +573,12 @@ static XMLSharedNodeList* find_impl(xmlXPathContext* ctxt, const string xpath) xmlNodeSet* nodeset = result->nodesetval; XMLSharedNodeList* nodes = new XMLSharedNodeList(); - if( nodeset ) - { + if (nodeset) { for (int i = 0; i < nodeset->nodeNr; ++i) { XMLNode* node = readnode(nodeset->nodeTab[i]); nodes->push_back(boost::shared_ptr(node)); } - } - else - { + } else { // return empty set } -- cgit v1.2.3