/* Copyright (C) 2006, Stefan Greven. All Rights Reserved. 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 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 */ #if !defined( INCLUDED_XMLTEXTAGS_H ) #define INCLUDED_XMLTEXTAGS_H #include #include #include #include "iscriplib.h" #include #include enum NodeTagType { TAG, EMPTY }; enum NodeShaderType { SHADER, TEXTURE }; enum TextureType { STOCK, CUSTOM }; class XmlTagBuilder { private: CopiedString m_savefilename; xmlDocPtr doc; xmlXPathContextPtr context; xmlNodeSetPtr nodePtr; xmlXPathObjectPtr XpathEval( const char* queryString ){ xmlChar* expression = (xmlChar*)queryString; xmlXPathObjectPtr result = xmlXPathEvalExpression( expression, context ); return result; }; char* GetTagsXpathExpression( char* buffer, const char* shader, NodeTagType nodeTagType ){ strcpy( buffer, "/root/*/*[@path='" ); strcat( buffer, shader ); switch ( nodeTagType ) { case TAG: strcat( buffer, "']/tag" ); break; case EMPTY: strcat( buffer, "']" ); }; return buffer; } public: XmlTagBuilder(); ~XmlTagBuilder(); bool CreateXmlDocument(); bool OpenXmlDoc( const char* file, const char* savefile = 0 ); bool SaveXmlDoc( const char* file ); bool SaveXmlDoc( void ); bool AddShaderNode( const char* shader, TextureType textureType, NodeShaderType nodeShaderType ); bool DeleteShaderNode( const char* shader ); bool CheckShaderTag( const char* shader ); bool CheckShaderTag( const char* shader, const char* content ); bool AddShaderTag( const char* shader, const char* content, NodeTagType nodeTagType ); bool DeleteTag( const char* tag ); int RenameShaderTag( const char* oldtag, CopiedString newtag ); bool DeleteShaderTag( const char* shader, const char* tag ); void GetShaderTags( const char* shader, std::vector& tags ); void GetUntagged( std::set& shaders ); void GetAllTags( std::set& tags ); void TagSearch( const char* expression, std::set& paths ); }; #endif