]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - libs/xml/xmltextags.cpp
my own uncrustify run
[xonotic/netradiant.git] / libs / xml / xmltextags.cpp
index c30f986795e22f404bb506e24566166635281171..c9d2b06b6087c455c88426c8ab089baf67b971f1 100644 (file)
@@ -1,23 +1,23 @@
 /*
-Copyright (C) 2006, Stefan Greven.
-All Rights Reserved.
+   Copyright (C) 2006, Stefan Greven.
+   All Rights Reserved.
 
-This file is part of GtkRadiant.
+   This file is part of GtkRadiant.
 
-GtkRadiant is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+   GtkRadiant is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
 
-GtkRadiant is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+   GtkRadiant is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with GtkRadiant; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-*/
+   You should have received a copy of the GNU General Public License
+   along with GtkRadiant; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
 
 #include "xmltextags.h"
 
@@ -26,572 +26,567 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #include "qerplugin.h"
 #include "stream/stringstream.h"
 
-XmlTagBuilder::XmlTagBuilder()
-{
+XmlTagBuilder::XmlTagBuilder(){
 }
 
-XmlTagBuilder::~XmlTagBuilder()
-{
-  // clean up
-  xmlFreeDoc(doc);
-  xmlXPathFreeContext(context);
+XmlTagBuilder::~XmlTagBuilder(){
+       // clean up
+       xmlFreeDoc( doc );
+       xmlXPathFreeContext( context );
 }
 
-bool XmlTagBuilder::CreateXmlDocument()
-{
-  /* Creates an XML file
-
-     returns TRUE if the file was created successfully or FALSE when failed
-  */
-
-  xmlTextWriterPtr writer;
-
-  writer = xmlNewTextWriterDoc(&doc, 0);
-
-  // begin a new UTF-8 formatted xml document
-  xmlTextWriterStartDocument(writer, NULL, "UTF-8", NULL);
-
-  // create the root node with stock and custom elements
-  xmlTextWriterStartElement(writer, (xmlChar*)"root");
-  xmlTextWriterWriteString(writer, (xmlChar*)"\n  ");
-  xmlTextWriterStartElement(writer, (xmlChar*)"stock");
-  xmlTextWriterWriteString(writer, (xmlChar*)"\n  ");
-  xmlTextWriterEndElement(writer);
-  xmlTextWriterWriteString(writer, (xmlChar*)"\n  ");
-  xmlTextWriterStartElement(writer, (xmlChar*)"custom");
-  xmlTextWriterWriteString(writer, (xmlChar*)"\n  ");
-  xmlTextWriterEndElement(writer);
-  xmlTextWriterWriteString(writer, (xmlChar*)"\n");
-  xmlTextWriterEndElement(writer);
-
-  // end of the xml document
-  xmlTextWriterEndDocument(writer);
-  xmlFreeTextWriter(writer);
-
-  if(!doc)
-  {
-    return false;
-  } else {
-    context = xmlXPathNewContext(doc);
-       return true;
-  }
+bool XmlTagBuilder::CreateXmlDocument(){
+       /* Creates an XML file
+
+          returns TRUE if the file was created successfully or FALSE when failed
+        */
+
+       xmlTextWriterPtr writer;
+
+       writer = xmlNewTextWriterDoc( &doc, 0 );
+
+       // begin a new UTF-8 formatted xml document
+       xmlTextWriterStartDocument( writer, NULL, "UTF-8", NULL );
+
+       // create the root node with stock and custom elements
+       xmlTextWriterStartElement( writer, (xmlChar*)"root" );
+       xmlTextWriterWriteString( writer, (xmlChar*)"\n  " );
+       xmlTextWriterStartElement( writer, (xmlChar*)"stock" );
+       xmlTextWriterWriteString( writer, (xmlChar*)"\n  " );
+       xmlTextWriterEndElement( writer );
+       xmlTextWriterWriteString( writer, (xmlChar*)"\n  " );
+       xmlTextWriterStartElement( writer, (xmlChar*)"custom" );
+       xmlTextWriterWriteString( writer, (xmlChar*)"\n  " );
+       xmlTextWriterEndElement( writer );
+       xmlTextWriterWriteString( writer, (xmlChar*)"\n" );
+       xmlTextWriterEndElement( writer );
+
+       // end of the xml document
+       xmlTextWriterEndDocument( writer );
+       xmlFreeTextWriter( writer );
+
+       if ( !doc ) {
+               return false;
+       }
+       else {
+               context = xmlXPathNewContext( doc );
+               return true;
+       }
 }
 
-bool XmlTagBuilder::OpenXmlDoc(const char* file, const char* savefile)
-{
-  /* Reads a XML document from a file
-
-     returns TRUE if the document was read successfully or FALSE when failed
-  */
-
-  if(savefile)
-    m_savefilename = savefile;
-  else
-    m_savefilename = file;
-    
-  doc = xmlParseFile(file);    // TODO error checking!
-
-  if(!doc)
-  {
-    return false;
-  } else {
-    context = xmlXPathNewContext(doc);
-       return true;
-  }
+bool XmlTagBuilder::OpenXmlDoc( const char* file, const char* savefile ){
+       /* Reads a XML document from a file
+
+          returns TRUE if the document was read successfully or FALSE when failed
+        */
+
+       if ( savefile ) {
+               m_savefilename = savefile;
+       }
+       else{
+               m_savefilename = file;
+       }
+
+       doc = xmlParseFile( file ); // TODO error checking!
+
+       if ( !doc ) {
+               return false;
+       }
+       else {
+               context = xmlXPathNewContext( doc );
+               return true;
+       }
 }
 
-bool XmlTagBuilder::SaveXmlDoc(void)
-{
-       return SaveXmlDoc(m_savefilename.c_str());
+bool XmlTagBuilder::SaveXmlDoc( void ){
+       return SaveXmlDoc( m_savefilename.c_str() );
 }
 
-bool XmlTagBuilder::SaveXmlDoc(const char* file)
-{
-  /* Writes the XML document
+bool XmlTagBuilder::SaveXmlDoc( const char* file ){
+       /* Writes the XML document
+
+          returns TRUE if the document was saved successfully or FALSE when saving failed
+        */
 
-     returns TRUE if the document was saved successfully or FALSE when saving failed
-  */
-  
-  xmlSaveNoEmptyTags = 1;
+       xmlSaveNoEmptyTags = 1;
 
-  if(xmlSaveFile(file, doc) != -1)
-  {
-    return true;
-  }
-  return false;
+       if ( xmlSaveFile( file, doc ) != -1 ) {
+               return true;
+       }
+       return false;
 }
 
-bool XmlTagBuilder::AddShaderNode(const char* shader, TextureType textureType, NodeShaderType nodeShaderType)
-{
-  /* Adds a shader node
-
-     char* shader - the name of the shader or texture (without trailing .tga or something)
-
-     returns TRUE if the node was added successfully or FALSE when failed
-  */
-
-  xmlNodeSetPtr nodePtr = NULL;
-  xmlXPathObjectPtr xpathPtr = NULL;
-  
-  switch(textureType)
-  {
-    case STOCK:
-      xpathPtr = XpathEval("/root/stock");
-      break;
-    case CUSTOM:
-      xpathPtr = XpathEval("/root/custom");
-  };
-  
-  if(xpathPtr)
-    nodePtr = xpathPtr->nodesetval;
-  else
-    return false;
-
-  if(!xmlXPathNodeSetIsEmpty(nodePtr))
-  {
-    xmlNodePtr newnode, newtext;
-    xmlNodePtr nodeParent = nodePtr->nodeTab[0];
-
-    // create a new node and set the node attribute (shader path)
-    switch(nodeShaderType)
-    {
-      case SHADER:
-        newnode = xmlNewNode(NULL, (xmlChar*)"shader");
-        break;
-      case TEXTURE:
-        newnode = xmlNewNode(NULL, (xmlChar*)"texture");
-      };
-
-      newnode = xmlDocCopyNode(newnode, doc, 1);
-      xmlSetProp(newnode, (xmlChar*)"path", (xmlChar*)shader);
-      xmlNodeSetContent(newnode, (xmlChar*)"\n    ");
-
-      if(nodePtr->nodeTab[0]->children->next == NULL)   // there are no shaders yet
-      {
-        // add spaces
-        newtext = xmlNewText((xmlChar*)"  ");
-        xmlAddChild(nodeParent->children, newtext);
-
-        // add the new node
-        xmlAddNextSibling(nodeParent->children, newnode);
-
-        // append a new line
-        newtext = xmlNewText((xmlChar*)"\n  ");
-        xmlAddNextSibling(nodeParent->children->next, newtext);
-      } else {
-        // add the node
-        xmlAddNextSibling(nodeParent->children, newnode);
-
-        // append a new line and spaces
-        newtext = xmlNewText((xmlChar*)"\n    ");
-        xmlAddNextSibling(nodeParent->children->next, newtext);
-      }
-      
-      xmlXPathFreeObject(xpathPtr);
-      return true;
-  } else {
-    xmlXPathFreeObject(xpathPtr);
-    return false;
-  }
+bool XmlTagBuilder::AddShaderNode( const char* shader, TextureType textureType, NodeShaderType nodeShaderType ){
+       /* Adds a shader node
+
+          char* shader - the name of the shader or texture (without trailing .tga or something)
+
+          returns TRUE if the node was added successfully or FALSE when failed
+        */
+
+       xmlNodeSetPtr nodePtr = NULL;
+       xmlXPathObjectPtr xpathPtr = NULL;
+
+       switch ( textureType )
+       {
+       case STOCK:
+               xpathPtr = XpathEval( "/root/stock" );
+               break;
+       case CUSTOM:
+               xpathPtr = XpathEval( "/root/custom" );
+       };
+
+       if ( xpathPtr ) {
+               nodePtr = xpathPtr->nodesetval;
+       }
+       else{
+               return false;
+       }
+
+       if ( !xmlXPathNodeSetIsEmpty( nodePtr ) ) {
+               xmlNodePtr newnode, newtext;
+               xmlNodePtr nodeParent = nodePtr->nodeTab[0];
+
+               // create a new node and set the node attribute (shader path)
+               switch ( nodeShaderType )
+               {
+               case SHADER:
+                       newnode = xmlNewNode( NULL, (xmlChar*)"shader" );
+                       break;
+               case TEXTURE:
+                       newnode = xmlNewNode( NULL, (xmlChar*)"texture" );
+               };
+
+               newnode = xmlDocCopyNode( newnode, doc, 1 );
+               xmlSetProp( newnode, (xmlChar*)"path", (xmlChar*)shader );
+               xmlNodeSetContent( newnode, (xmlChar*)"\n    " );
+
+               if ( nodePtr->nodeTab[0]->children->next == NULL ) { // there are no shaders yet
+                       // add spaces
+                       newtext = xmlNewText( (xmlChar*)"  " );
+                       xmlAddChild( nodeParent->children, newtext );
+
+                       // add the new node
+                       xmlAddNextSibling( nodeParent->children, newnode );
+
+                       // append a new line
+                       newtext = xmlNewText( (xmlChar*)"\n  " );
+                       xmlAddNextSibling( nodeParent->children->next, newtext );
+               }
+               else {
+                       // add the node
+                       xmlAddNextSibling( nodeParent->children, newnode );
+
+                       // append a new line and spaces
+                       newtext = xmlNewText( (xmlChar*)"\n    " );
+                       xmlAddNextSibling( nodeParent->children->next, newtext );
+               }
+
+               xmlXPathFreeObject( xpathPtr );
+               return true;
+       }
+       else {
+               xmlXPathFreeObject( xpathPtr );
+               return false;
+       }
 }
 
-bool XmlTagBuilder::DeleteShaderNode(const char* shader)
-{
-  /* Deletes a shader node
-
-     char* shader - the name of the shader or texture (without trailing .tga or something)
-
-     returns TRUE if the node was deleted successfully or FALSE when failed
-  */
-
-  char buffer[256];
-  char* expression = GetTagsXpathExpression(buffer, shader, EMPTY);
-  xmlXPathObjectPtr xpathPtr = XpathEval(expression);
-  
-  xmlNodeSetPtr nodePtr;
-  if(xpathPtr)
-       nodePtr = xpathPtr->nodesetval;
-  else
-       return false;
-
-  if(!xmlXPathNodeSetIsEmpty(nodePtr))
-  {
-    xmlNodePtr ptrContent = nodePtr->nodeTab[0];
-    xmlNodePtr ptrWhitespace = nodePtr->nodeTab[0]->prev;
-
-    // delete the node
-    xmlUnlinkNode(ptrContent);
-    xmlFreeNode(ptrContent);
-
-    // delete leading whitespace node
-    xmlUnlinkNode(ptrWhitespace);
-    xmlFreeNode(ptrWhitespace);
-    xmlXPathFreeObject(xpathPtr);
-    return true;
-  }
-  xmlXPathFreeObject(xpathPtr);
-  return false;
+bool XmlTagBuilder::DeleteShaderNode( const char* shader ){
+       /* Deletes a shader node
+
+          char* shader - the name of the shader or texture (without trailing .tga or something)
+
+          returns TRUE if the node was deleted successfully or FALSE when failed
+        */
+
+       char buffer[256];
+       char* expression = GetTagsXpathExpression( buffer, shader, EMPTY );
+       xmlXPathObjectPtr xpathPtr = XpathEval( expression );
+
+       xmlNodeSetPtr nodePtr;
+       if ( xpathPtr ) {
+               nodePtr = xpathPtr->nodesetval;
+       }
+       else{
+               return false;
+       }
+
+       if ( !xmlXPathNodeSetIsEmpty( nodePtr ) ) {
+               xmlNodePtr ptrContent = nodePtr->nodeTab[0];
+               xmlNodePtr ptrWhitespace = nodePtr->nodeTab[0]->prev;
+
+               // delete the node
+               xmlUnlinkNode( ptrContent );
+               xmlFreeNode( ptrContent );
+
+               // delete leading whitespace node
+               xmlUnlinkNode( ptrWhitespace );
+               xmlFreeNode( ptrWhitespace );
+               xmlXPathFreeObject( xpathPtr );
+               return true;
+       }
+       xmlXPathFreeObject( xpathPtr );
+       return false;
 }
 
-bool XmlTagBuilder::CheckShaderTag(const char* shader)
-{
-  /* Checks whether there exists an entry for a shader/texture with at least one tag
-
-     char* shader  - the name of the shader or texture (without trailing .tga or something)
-
-     returns TRUE if the shader is already stored in the XML tag file and has at least one tag
-  */
-
-  // build the XPath expression to search for
-  char buffer[256];
-  strcpy(buffer, "/root/*/*[@path='");
-  strcat(buffer, shader);
-  strcat(buffer, "']");
-
-  char* expression = buffer;
-
-  xmlXPathObjectPtr xpathPtr = XpathEval(expression);
-  xmlNodeSetPtr nodePtr;
-  if(xpathPtr)
-    nodePtr = xpathPtr->nodesetval;
-  else
-       return false;
-
-  if(!xmlXPathNodeSetIsEmpty(nodePtr))
-  {
-    xmlXPathFreeObject(xpathPtr);
-    return true;
-  } else {
-    xmlXPathFreeObject(xpathPtr);
-    return false;
-  }
+bool XmlTagBuilder::CheckShaderTag( const char* shader ){
+       /* Checks whether there exists an entry for a shader/texture with at least one tag
+
+          char* shader  - the name of the shader or texture (without trailing .tga or something)
+
+          returns TRUE if the shader is already stored in the XML tag file and has at least one tag
+        */
+
+       // build the XPath expression to search for
+       char buffer[256];
+       strcpy( buffer, "/root/*/*[@path='" );
+       strcat( buffer, shader );
+       strcat( buffer, "']" );
+
+       char* expression = buffer;
+
+       xmlXPathObjectPtr xpathPtr = XpathEval( expression );
+       xmlNodeSetPtr nodePtr;
+       if ( xpathPtr ) {
+               nodePtr = xpathPtr->nodesetval;
+       }
+       else{
+               return false;
+       }
+
+       if ( !xmlXPathNodeSetIsEmpty( nodePtr ) ) {
+               xmlXPathFreeObject( xpathPtr );
+               return true;
+       }
+       else {
+               xmlXPathFreeObject( xpathPtr );
+               return false;
+       }
 }
 
-bool XmlTagBuilder::CheckShaderTag(const char* shader, const char* content)
-{
-  /* Checks whether a tag with content already exists
-
-     char* shader  - the name of the shader or texture (without trailing .tga or something)
-     char* content - the node content (a tag name)
-
-     returns TRUE if the tag with content already exists or FALSE if not
-  */
-
-  // build the XPath expression to search for
-  // example expression: "/stock/*[@path='textures/alpha/barb_wire'][child::tag='Alpha']";
-
-  char buffer[256];
-  strcpy(buffer, "/root/*/*[@path='");
-  strcat(buffer, shader);
-  strcat(buffer, "'][child::tag='");
-  strcat(buffer, content);
-  strcat(buffer, "']");
-
-  char* expression = buffer;
-
-  xmlXPathObjectPtr xpathPtr = XpathEval(expression);
-  xmlNodeSetPtr nodePtr;
-  if(xpathPtr)
-    nodePtr = xpathPtr->nodesetval;
-  else
-       return false;
-
-  if(!xmlXPathNodeSetIsEmpty(nodePtr))
-  {
-    xmlXPathFreeObject(xpathPtr);
-    return true;
-  } else {
-    xmlXPathFreeObject(xpathPtr);
-    return false;
-  }
+bool XmlTagBuilder::CheckShaderTag( const char* shader, const char* content ){
+       /* Checks whether a tag with content already exists
+
+          char* shader  - the name of the shader or texture (without trailing .tga or something)
+          char* content - the node content (a tag name)
+
+          returns TRUE if the tag with content already exists or FALSE if not
+        */
+
+       // build the XPath expression to search for
+       // example expression: "/stock/*[@path='textures/alpha/barb_wire'][child::tag='Alpha']";
+
+       char buffer[256];
+       strcpy( buffer, "/root/*/*[@path='" );
+       strcat( buffer, shader );
+       strcat( buffer, "'][child::tag='" );
+       strcat( buffer, content );
+       strcat( buffer, "']" );
+
+       char* expression = buffer;
+
+       xmlXPathObjectPtr xpathPtr = XpathEval( expression );
+       xmlNodeSetPtr nodePtr;
+       if ( xpathPtr ) {
+               nodePtr = xpathPtr->nodesetval;
+       }
+       else{
+               return false;
+       }
+
+       if ( !xmlXPathNodeSetIsEmpty( nodePtr ) ) {
+               xmlXPathFreeObject( xpathPtr );
+               return true;
+       }
+       else {
+               xmlXPathFreeObject( xpathPtr );
+               return false;
+       }
 }
 
-bool XmlTagBuilder::AddShaderTag(const char* shader, const char* content, NodeTagType nodeTagType)
-{
-  /* Adds a tag node to an existing shader/texture node if there's no tag with the same content yet
-
-     char* shader  - the name of the shader or texture (without trailing .tga or something)
-     char* content - the node content (a tag name)
-
-     returns TRUE if the node was added successfully or FALSE when failed
-  */
-
-  // build the XPath expression
-  char buffer[256];
-  char* expression = GetTagsXpathExpression(buffer, shader, EMPTY);
-  
-  xmlXPathObjectPtr xpathPtr = XpathEval(expression);
-  xmlNodeSetPtr nodePtr;
-  if(xpathPtr)
-    nodePtr = xpathPtr->nodesetval;
-  else
-       return false;
-
-  if(!xmlXPathNodeSetIsEmpty(nodePtr)) // node was found
-  {
-    xmlNodePtr newnode = xmlNewNode(NULL, (xmlChar*)"tag");
-    xmlNodePtr nodeParent = nodePtr->nodeTab[0];
-    newnode = xmlDocCopyNode(newnode, doc, 1);
-    xmlNodeSetContent(newnode, (xmlChar*)content);
-
-    if(nodePtr->nodeTab[0]->children->next == NULL)    // shader node has NO children
-    {
-      // add spaces
-      xmlNodePtr newtext = xmlNewText((xmlChar*)"  ");
-      xmlAddChild(nodeParent->children, newtext);
-
-      // add new node
-      xmlAddNextSibling(nodeParent->children, newnode);
-
-      // append a new line + spaces
-      newtext = xmlNewText((xmlChar*)"\n    ");
-      xmlAddNextSibling(nodeParent->children->next, newtext);
-    } else { // shader node has children already - the new node will be the first sibling
-      xmlAddNextSibling(nodeParent->children, newnode);
-         xmlNodePtr newtext = xmlNewText((xmlChar*)"\n      ");
-      xmlAddNextSibling(nodeParent->children->next, newtext);
-    }
-       xmlXPathFreeObject(xpathPtr);
-    return true;
-  } else {
-    xmlXPathFreeObject(xpathPtr);
-    return false;
-  }
+bool XmlTagBuilder::AddShaderTag( const char* shader, const char* content, NodeTagType nodeTagType ){
+       /* Adds a tag node to an existing shader/texture node if there's no tag with the same content yet
+
+          char* shader  - the name of the shader or texture (without trailing .tga or something)
+          char* content - the node content (a tag name)
+
+          returns TRUE if the node was added successfully or FALSE when failed
+        */
+
+       // build the XPath expression
+       char buffer[256];
+       char* expression = GetTagsXpathExpression( buffer, shader, EMPTY );
+
+       xmlXPathObjectPtr xpathPtr = XpathEval( expression );
+       xmlNodeSetPtr nodePtr;
+       if ( xpathPtr ) {
+               nodePtr = xpathPtr->nodesetval;
+       }
+       else{
+               return false;
+       }
+
+       if ( !xmlXPathNodeSetIsEmpty( nodePtr ) ) { // node was found
+               xmlNodePtr newnode = xmlNewNode( NULL, (xmlChar*)"tag" );
+               xmlNodePtr nodeParent = nodePtr->nodeTab[0];
+               newnode = xmlDocCopyNode( newnode, doc, 1 );
+               xmlNodeSetContent( newnode, (xmlChar*)content );
+
+               if ( nodePtr->nodeTab[0]->children->next == NULL ) { // shader node has NO children
+                       // add spaces
+                       xmlNodePtr newtext = xmlNewText( (xmlChar*)"  " );
+                       xmlAddChild( nodeParent->children, newtext );
+
+                       // add new node
+                       xmlAddNextSibling( nodeParent->children, newnode );
+
+                       // append a new line + spaces
+                       newtext = xmlNewText( (xmlChar*)"\n    " );
+                       xmlAddNextSibling( nodeParent->children->next, newtext );
+               }
+               else { // shader node has children already - the new node will be the first sibling
+                       xmlAddNextSibling( nodeParent->children, newnode );
+                       xmlNodePtr newtext = xmlNewText( (xmlChar*)"\n      " );
+                       xmlAddNextSibling( nodeParent->children->next, newtext );
+               }
+               xmlXPathFreeObject( xpathPtr );
+               return true;
+       }
+       else {
+               xmlXPathFreeObject( xpathPtr );
+               return false;
+       }
 }
 
 //int XmlTagBuilder::RenameShaderTag(const char* oldtag, const char* newtag)
-int XmlTagBuilder::RenameShaderTag(const char* oldtag, CopiedString newtag)
-{
-  /* Replaces tag node contents
-
-     char* oldtag - the <tag></tag> node content that sould be changed
-     char* newtag - the new <tag></tag> node content
-
-     returns the number of renamed shaders
-  */
-
-  int num = 0;
-
-  // build the XPath expression
-  char expression[256];
-  strcpy(expression, "/root/*/*[child::tag='");
-  strcat(expression, oldtag);
-  strcat(expression, "']/*");
-
-  xmlXPathObjectPtr result = xmlXPathEvalExpression((xmlChar*)expression, context);
-  if(!result)
-    return 0;
-  xmlNodeSetPtr nodePtr = result->nodesetval;
-
-  for(int i = 0; i < nodePtr->nodeNr; i++)
-  {
-    xmlNodePtr ptrContent = nodePtr->nodeTab[i];
-    char* content = (char*)xmlNodeGetContent(ptrContent);
-
-    if(strcmp(content, oldtag) == 0)   // found a node with old content?
-    {
-      xmlNodeSetContent(ptrContent, (xmlChar*)newtag.c_str());
-      num++;
-    }
-  }
-
-  SaveXmlDoc();
-  xmlXPathFreeObject(result);// CHANGED
-  return num;
+int XmlTagBuilder::RenameShaderTag( const char* oldtag, CopiedString newtag ){
+       /* Replaces tag node contents
+
+          char* oldtag - the <tag></tag> node content that sould be changed
+          char* newtag - the new <tag></tag> node content
+
+          returns the number of renamed shaders
+        */
+
+       int num = 0;
+
+       // build the XPath expression
+       char expression[256];
+       strcpy( expression, "/root/*/*[child::tag='" );
+       strcat( expression, oldtag );
+       strcat( expression, "']/*" );
+
+       xmlXPathObjectPtr result = xmlXPathEvalExpression( (xmlChar*)expression, context );
+       if ( !result ) {
+               return 0;
+       }
+       xmlNodeSetPtr nodePtr = result->nodesetval;
+
+       for ( int i = 0; i < nodePtr->nodeNr; i++ )
+       {
+               xmlNodePtr ptrContent = nodePtr->nodeTab[i];
+               char* content = (char*)xmlNodeGetContent( ptrContent );
+
+               if ( strcmp( content, oldtag ) == 0 ) { // found a node with old content?
+                       xmlNodeSetContent( ptrContent, (xmlChar*)newtag.c_str() );
+                       num++;
+               }
+       }
+
+       SaveXmlDoc();
+       xmlXPathFreeObject( result ); // CHANGED
+       return num;
 }
 
-bool XmlTagBuilder::DeleteShaderTag(const char* shader, const char* tag)
-{
-  /* Deletes a child node of a shader
-
-     char* shader  - the name of the shader or texture (without trailing .tga or something)
-     char* tag     - the tag being deleted
-
-     returns TRUE if the node was deleted successfully or FALSE when failed
-  */
-
-  char buffer[256];
-  char* expression = GetTagsXpathExpression(buffer, shader, TAG);
-  xmlXPathObjectPtr xpathPtr = XpathEval(expression);
-  xmlNodeSetPtr nodePtr;
-  if(xpathPtr)
-    nodePtr = xpathPtr->nodesetval;
-  else
-       return false;
-
-  if(!xmlXPathNodeSetIsEmpty(nodePtr))
-  {
-    for(int i = 0; i < nodePtr->nodeNr; i++)
-    {
-      xmlNodePtr ptrContent = nodePtr->nodeTab[i];
-      char* content = (char*)(xmlChar*)xmlNodeGetContent(ptrContent);
-
-      if(strcmp(content, tag) == 0)    // find the node
-      {
-        xmlNodePtr ptrWhitespace = nodePtr->nodeTab[i]->prev;
-        // delete the node
-        xmlUnlinkNode(ptrContent);
-        xmlFreeNode(ptrContent);
-
-        // delete leading whitespace node
-        xmlUnlinkNode(ptrWhitespace);
-        xmlFreeNode(ptrWhitespace);
-        xmlXPathFreeObject(xpathPtr);
-        return true;
-      }
-    }
-  }
-  xmlXPathFreeObject(xpathPtr);
-  return false;
+bool XmlTagBuilder::DeleteShaderTag( const char* shader, const char* tag ){
+       /* Deletes a child node of a shader
+
+          char* shader  - the name of the shader or texture (without trailing .tga or something)
+          char* tag     - the tag being deleted
+
+          returns TRUE if the node was deleted successfully or FALSE when failed
+        */
+
+       char buffer[256];
+       char* expression = GetTagsXpathExpression( buffer, shader, TAG );
+       xmlXPathObjectPtr xpathPtr = XpathEval( expression );
+       xmlNodeSetPtr nodePtr;
+       if ( xpathPtr ) {
+               nodePtr = xpathPtr->nodesetval;
+       }
+       else{
+               return false;
+       }
+
+       if ( !xmlXPathNodeSetIsEmpty( nodePtr ) ) {
+               for ( int i = 0; i < nodePtr->nodeNr; i++ )
+               {
+                       xmlNodePtr ptrContent = nodePtr->nodeTab[i];
+                       char* content = (char*)(xmlChar*)xmlNodeGetContent( ptrContent );
+
+                       if ( strcmp( content, tag ) == 0 ) { // find the node
+                               xmlNodePtr ptrWhitespace = nodePtr->nodeTab[i]->prev;
+                               // delete the node
+                               xmlUnlinkNode( ptrContent );
+                               xmlFreeNode( ptrContent );
+
+                               // delete leading whitespace node
+                               xmlUnlinkNode( ptrWhitespace );
+                               xmlFreeNode( ptrWhitespace );
+                               xmlXPathFreeObject( xpathPtr );
+                               return true;
+                       }
+               }
+       }
+       xmlXPathFreeObject( xpathPtr );
+       return false;
 }
 
-bool XmlTagBuilder::DeleteTag(const char* tag)
-{
-  /* Deletes a tag from all shaders
+bool XmlTagBuilder::DeleteTag( const char* tag ){
+       /* Deletes a tag from all shaders
 
-     char* tag - the tag being deleted from all shaders
+          char* tag - the tag being deleted from all shaders
 
-     returns TRUE if the tag was deleted successfully or FALSE when failed
-  */
+          returns TRUE if the tag was deleted successfully or FALSE when failed
+        */
 
-  char expression[256];
-  strcpy(expression, "/root/*/*[child::tag='");
-  strcat(expression, tag);
-  strcat(expression, "']");
+       char expression[256];
+       strcpy( expression, "/root/*/*[child::tag='" );
+       strcat( expression, tag );
+       strcat( expression, "']" );
 
-  std::set<CopiedString> dellist;
-  TagSearch(expression, dellist);
-  std::set<CopiedString>::iterator iter;
+       std::set<CopiedString> dellist;
+       TagSearch( expression, dellist );
+       std::set<CopiedString>::iterator iter;
 
-  for(iter = dellist.begin(); iter != dellist.end(); iter++)
-  {
-    DeleteShaderTag(iter->c_str(), tag);
-  }
-  SaveXmlDoc();
+       for ( iter = dellist.begin(); iter != dellist.end(); iter++ )
+       {
+               DeleteShaderTag( iter->c_str(), tag );
+       }
+       SaveXmlDoc();
 
-  return true;
+       return true;
 }
 
-void XmlTagBuilder::GetShaderTags(const char* shader, std::vector<CopiedString>& tags)
-{
-  /* Gets the tags from a shader
-
-     char* shader - the name of the shader
-
-     returns a vector containing the tags
-  */
-
-  char* expression;
-
-  if(shader == NULL)   // get all tags from all shaders
-  {
-    expression = "/root/*/*/tag";
-  } else {
-    char buffer[256];
-    expression = GetTagsXpathExpression(buffer, shader, TAG);
-  }
-
-  xmlXPathObjectPtr xpathPtr = XpathEval(expression);
-  xmlNodeSetPtr nodePtr;
-  if(xpathPtr)
-    nodePtr = xpathPtr->nodesetval;
-  else
-       return;
-
-  if(!xmlXPathNodeSetIsEmpty(nodePtr))
-  {
-    for(int i = 0; i < nodePtr->nodeNr; i++)
-    {
-      tags.push_back((CopiedString)(char*)xmlNodeGetContent(nodePtr->nodeTab[i]));
-    }
-  }
-  xmlXPathFreeObject(xpathPtr);
+void XmlTagBuilder::GetShaderTags( const char* shader, std::vector<CopiedString>& tags ){
+       /* Gets the tags from a shader
+
+          char* shader - the name of the shader
+
+          returns a vector containing the tags
+        */
+
+       char* expression;
+
+       if ( shader == NULL ) { // get all tags from all shaders
+               expression = "/root/*/*/tag";
+       }
+       else {
+               char buffer[256];
+               expression = GetTagsXpathExpression( buffer, shader, TAG );
+       }
+
+       xmlXPathObjectPtr xpathPtr = XpathEval( expression );
+       xmlNodeSetPtr nodePtr;
+       if ( xpathPtr ) {
+               nodePtr = xpathPtr->nodesetval;
+       }
+       else{
+               return;
+       }
+
+       if ( !xmlXPathNodeSetIsEmpty( nodePtr ) ) {
+               for ( int i = 0; i < nodePtr->nodeNr; i++ )
+               {
+                       tags.push_back( (CopiedString)(char*)xmlNodeGetContent( nodePtr->nodeTab[i] ) );
+               }
+       }
+       xmlXPathFreeObject( xpathPtr );
 }
 
-void XmlTagBuilder::GetUntagged(std::set<CopiedString>& shaders)
-{
-  /* Gets all textures and shaders listed in the xml file that don't have any tag
-
-     returns a set containing the shaders (with path)
-  */
-
-  char* expression = "/root/*/*[not(child::tag)]";
-
-  xmlXPathObjectPtr xpathPtr = XpathEval(expression);
-  xmlNodeSetPtr nodePtr;
-  if(xpathPtr)
-    nodePtr = xpathPtr->nodesetval;
-  else
-       return;
-  if(!xmlXPathNodeSetIsEmpty(nodePtr))
-  {
-    xmlNodePtr ptr;
-
-    for(int i = 0; i < nodePtr->nodeNr; i++)
-    {
-      ptr = nodePtr->nodeTab[i];
-         shaders.insert((char*)xmlGetProp(ptr, (xmlChar*)"path"));
-    }
-  }
-  
-  xmlXPathFreeObject(xpathPtr);
-}
+void XmlTagBuilder::GetUntagged( std::set<CopiedString>& shaders ){
+       /* Gets all textures and shaders listed in the xml file that don't have any tag
+
+          returns a set containing the shaders (with path)
+        */
 
-void XmlTagBuilder::GetAllTags(std::set<CopiedString>& tags)
-{
-  /* Gets a list of all tags that are used (assigned to any shader)
-
-     returns a set containing all used tags
-  */
-
-  char* expression = "/root/*/*/tag";
-
-  xmlXPathObjectPtr xpathPtr = XpathEval(expression);
-  xmlNodeSetPtr nodePtr;
-  if(xpathPtr)
-    nodePtr = xpathPtr->nodesetval;
-  else
-       return;
-  if(!xmlXPathNodeSetIsEmpty(nodePtr))
-  {
-    for(int i = 0; i < nodePtr->nodeNr; i++)
-    {
-      tags.insert((CopiedString)(char*)xmlNodeGetContent(nodePtr->nodeTab[i]));
-    }
-  }
-  
-  xmlXPathFreeObject(xpathPtr);
+       char* expression = "/root/*/*[not(child::tag)]";
+
+       xmlXPathObjectPtr xpathPtr = XpathEval( expression );
+       xmlNodeSetPtr nodePtr;
+       if ( xpathPtr ) {
+               nodePtr = xpathPtr->nodesetval;
+       }
+       else{
+               return;
+       }
+
+       if ( !xmlXPathNodeSetIsEmpty( nodePtr ) ) {
+               xmlNodePtr ptr;
+
+               for ( int i = 0; i < nodePtr->nodeNr; i++ )
+               {
+                       ptr = nodePtr->nodeTab[i];
+                       shaders.insert( (char*)xmlGetProp( ptr, (xmlChar*)"path" ) );
+               }
+       }
+
+       xmlXPathFreeObject( xpathPtr );
 }
 
-void XmlTagBuilder::TagSearch(const char* expression, std::set<CopiedString>& paths)
-{
-  /* Searches shaders by tags
-
-     char* expression - the XPath expression to search
-
-     returns a set containing the found shaders
-  */
-
-  xmlXPathObjectPtr xpathPtr = XpathEval(expression);
-  xmlNodeSetPtr nodePtr;
-  if(xpathPtr)
-    nodePtr = xpathPtr->nodesetval;
-  else
-       return;
-
-  if(!xmlXPathNodeSetIsEmpty(nodePtr))
-  {
-    xmlNodePtr ptr;
-    xmlChar* xmlattrib;
-    for(int i = 0; i < nodePtr->nodeNr; i++)
-    {
-      ptr = nodePtr->nodeTab[i];
-      xmlattrib = xmlGetProp(ptr, (xmlChar*)"path");
-         paths.insert((CopiedString)(char*)xmlattrib);
-    }
-  }
-  xmlXPathFreeObject(xpathPtr);
+void XmlTagBuilder::GetAllTags( std::set<CopiedString>& tags ){
+       /* Gets a list of all tags that are used (assigned to any shader)
+
+          returns a set containing all used tags
+        */
+
+       char* expression = "/root/*/*/tag";
+
+       xmlXPathObjectPtr xpathPtr = XpathEval( expression );
+       xmlNodeSetPtr nodePtr;
+       if ( xpathPtr ) {
+               nodePtr = xpathPtr->nodesetval;
+       }
+       else{
+               return;
+       }
+
+       if ( !xmlXPathNodeSetIsEmpty( nodePtr ) ) {
+               for ( int i = 0; i < nodePtr->nodeNr; i++ )
+               {
+                       tags.insert( (CopiedString)(char*)xmlNodeGetContent( nodePtr->nodeTab[i] ) );
+               }
+       }
+
+       xmlXPathFreeObject( xpathPtr );
 }
 
+void XmlTagBuilder::TagSearch( const char* expression, std::set<CopiedString>& paths ){
+       /* Searches shaders by tags
+
+          char* expression - the XPath expression to search
+
+          returns a set containing the found shaders
+        */
+
+       xmlXPathObjectPtr xpathPtr = XpathEval( expression );
+       xmlNodeSetPtr nodePtr;
+       if ( xpathPtr ) {
+               nodePtr = xpathPtr->nodesetval;
+       }
+       else{
+               return;
+       }
+
+       if ( !xmlXPathNodeSetIsEmpty( nodePtr ) ) {
+               xmlNodePtr ptr;
+               xmlChar* xmlattrib;
+               for ( int i = 0; i < nodePtr->nodeNr; i++ )
+               {
+                       ptr = nodePtr->nodeTab[i];
+                       xmlattrib = xmlGetProp( ptr, (xmlChar*)"path" );
+                       paths.insert( (CopiedString)(char*)xmlattrib );
+               }
+       }
+       xmlXPathFreeObject( xpathPtr );
+}