diff options
author | Andy Cedilnik <andy.cedilnik@kitware.com> | 2005-01-18 18:41:23 (GMT) |
---|---|---|
committer | Andy Cedilnik <andy.cedilnik@kitware.com> | 2005-01-18 18:41:23 (GMT) |
commit | dcadffbe00c29d8a55d6d3e58cbc46caddaf1dcb (patch) | |
tree | 3d3448cf138454f0895b9290170c1384e8f02909 /Source/cmXMLParser.h | |
parent | b37b661087ee2aa4bb877659ad65f2ce9cf5dba4 (diff) | |
download | CMake-dcadffbe00c29d8a55d6d3e58cbc46caddaf1dcb.zip CMake-dcadffbe00c29d8a55d6d3e58cbc46caddaf1dcb.tar.gz CMake-dcadffbe00c29d8a55d6d3e58cbc46caddaf1dcb.tar.bz2 |
ENH: Add XML parser
Diffstat (limited to 'Source/cmXMLParser.h')
-rw-r--r-- | Source/cmXMLParser.h | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/Source/cmXMLParser.h b/Source/cmXMLParser.h new file mode 100644 index 0000000..cb9b9b7 --- /dev/null +++ b/Source/cmXMLParser.h @@ -0,0 +1,108 @@ +/*========================================================================= + + Program: CMake - Cross-Platform Makefile Generator + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + + Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved. + See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#ifndef cmXMLParser_h +#define cmXMLParser_h + +#include "cmStandardIncludes.h" + +extern "C" +{ + void cmXMLParserStartElement(void*, const char*, const char**); + void cmXMLParserEndElement(void*, const char*); + void cmXMLParserCharacterDataHandler(void*, const char*, int); +} + +/** \class cmXMLParser + * \brief Helper class for performing XML parsing + * + * Superclass for all XML parsers. + */ +class cmXMLParser +{ +public: + cmXMLParser(); + virtual ~cmXMLParser(); + + //! Parse given XML string + virtual int Parse(const char* string); + + //! Parse given XML file + virtual int ParseFile(const char* file); + + /** + * When parsing fragments of XML or streaming XML, use the following three + * methods. InitializeParser method initialize parser but does not perform + * any actual parsing. ParseChunk parses framgent of XML. This has to match + * to what was already parsed. CleanupParser finishes parsing. If there were + * errors, CleanupParser will report them. + */ + virtual int InitializeParser(); + virtual int ParseChunk(const char* inputString, unsigned int length); + virtual int CleanupParser(); + +protected: + //! This variable is true if there was a parse error while parsing in chunks. + int ParseError; + + //1 Expat parser structure. Exists only during call to Parse(). + void* Parser; + + /** + * Called before each block of input is read from the stream to check if + * parsing is complete. Can be replaced by subclasses to change the + * terminating condition for parsing. Parsing always stops when the end of + * file is reached in the stream. + */ + + virtual int ParsingComplete(); + + /** + * Called when a new element is opened in the XML source. Should be replaced + * by subclasses to handle each element. + * name = Name of new element. + * atts = Null-terminated array of attribute name/value pairs. Even + * indices are attribute names, and odd indices are values. + */ + virtual void StartElement(const char* name, const char** atts); + + //! Called at the end of an element in the XML source opened when StartElement + // was called. + virtual void EndElement(const char* name); + + //! Called when there is character data to handle. + virtual void CharacterDataHandler(const char* data, int length); + + //! Called by Parse to report an XML syntax error. + virtual void ReportXmlParseError(); + + //! Utility for convenience of subclasses. Wraps isspace C library + // routine. + static int IsSpace(char c); + + //! Send the given buffer to the XML parser. + virtual int ParseBuffer(const char* buffer, unsigned int count); + + //! Send the given c-style string to the XML parser. + int ParseBuffer(const char* buffer); + + //! Callbacks for the expat + friend void cmXMLParserStartElement(void*, const char*, const char**); + friend void cmXMLParserEndElement(void*, const char*); + friend void cmXMLParserCharacterDataHandler(void*, const char*, int); +}; + +#endif |