summaryrefslogtreecommitdiffstats
path: root/source/XMLParser.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/XMLParser.h')
-rw-r--r--source/XMLParser.h701
1 files changed, 0 insertions, 701 deletions
diff --git a/source/XMLParser.h b/source/XMLParser.h
deleted file mode 100644
index f492d1a5d..000000000
--- a/source/XMLParser.h
+++ /dev/null
@@ -1,701 +0,0 @@
-
-// XMLParser.h
-
-// Interfaces to the CXMLParser class representing the base class for XML parsing
-
-// To use, derive a class from this base and override its OnStartElement(), OnEndElement() and OnCharacters() functions
-
-
-
-
-
-#pragma once
-
-#include "expat/expat.h"
-
-
-
-
-
-class CXMLParser
-{
-public:
- CXMLParser(void);
- virtual ~CXMLParser();
-
- // The actual parsing, may be called several times; the last time needs iIsFinal == true (-> flush)
- int Parse(const char * iData, size_t iLength, bool iIsFinal = false);
-
-private:
- // LibExpat stuff:
- XML_Parser mParser;
-
- static void StartElementHandler(void * iContext, const XML_Char * iElement, const XML_Char ** iAttributes)
- {
- ((CXMLParser *)iContext)->OnStartElement(iElement, iAttributes);
- }
-
- static void EndElementHandler (void * iContext, const XML_Char * iElement)
- {
- ((CXMLParser *)iContext)->OnEndElement(iElement);
- }
-
- static void CharacterDataHandler (void * iContext, const XML_Char * iData, int iLength)
- {
- ((CXMLParser *)iContext)->OnCharacters(iData, iLength);
- }
-
-protected:
- virtual void OnStartElement(const XML_Char * iElement, const XML_Char ** iAttributes) = 0;
- virtual void OnEndElement (const XML_Char * iElement) = 0;
- virtual void OnCharacters (const XML_Char * iCharacters, int iLength) = 0;
-} ;
-
-
-
-
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// The following template has been modified from code available at
-// http://www.codeproject.com/Articles/1847/C-Wrappers-for-the-Expat-XML-Parser
-// It uses templates to remove the virtual function call penalty (both size and speed) for each callback
-
-/* Usage:
-1, Declare a subclass:
- class CMyParser : public CExpatImpl<CMyParser>
-2, Declare handlers that you want in that subclass:
- void CMyParser::OnEndElement(const XML_Char * iTagName);
-3, Create an instance of your class:
- CMyParser Parser;
-4, Call Create():
- Parser.Create(NULL, NULL);
-4, Call Parse(), repeatedly:
- Parser.Parse(Buffer, Length);
-*/
-
-template <class _T>
-class CExpatImpl
-{
-
-// @access Constructors and destructors
-public:
-
- // @cmember General constructor
-
- CExpatImpl ()
- {
- m_p = NULL;
- }
-
- // @cmember Destructor
-
- ~CExpatImpl ()
- {
- Destroy ();
- }
-
-// @access Parser creation and deletion methods
-public:
-
- // @cmember Create a parser
-
- bool Create (const XML_Char * pszEncoding = NULL, const XML_Char * pszSep = NULL)
- {
- // Destroy the old parser
- Destroy ();
-
- // If the encoding or seperator are empty, then NULL
- if (pszEncoding != NULL && pszEncoding [0] == 0)
- {
- pszEncoding = NULL;
- }
- if (pszSep != NULL && pszSep [0] == 0)
- {
- pszSep = NULL;
- }
-
- // Create the new parser
- m_p = XML_ParserCreate_MM (pszEncoding, NULL, pszSep);
- if (m_p == NULL)
- {
- return false;
- }
-
- // Invoke the post create routine
- _T * pThis = static_cast <_T *> (this);
- pThis ->OnPostCreate ();
-
- // Set the user data used in callbacks
- XML_SetUserData (m_p, (void *) this);
- return true;
- }
-
- // @cmember Destroy the parser
-
- void Destroy (void)
- {
- if (m_p != NULL)
- {
- XML_ParserFree (m_p);
- }
- m_p = NULL;
- }
-
-
- // @cmember Parse a block of data
-
- bool Parse (const char *pszBuffer, int nLength, bool fIsFinal = true)
- {
- assert (m_p != NULL);
- return XML_Parse (m_p, pszBuffer, nLength, fIsFinal) != 0;
- }
-
- // @cmember Parse internal buffer
-
- bool ParseBuffer (int nLength, bool fIsFinal = true)
- {
- assert (m_p != NULL);
- return XML_ParseBuffer (m_p, nLength, fIsFinal) != 0;
- }
-
- // @cmember Get the internal buffer
-
- void *GetBuffer (int nLength)
- {
- assert (m_p != NULL);
- return XML_GetBuffer (m_p, nLength);
- }
-
-
-protected:
- // Parser callback enable/disable methods:
-
- // @cmember Enable/Disable the start element handler
-
- void EnableStartElementHandler (bool fEnable = true)
- {
- assert (m_p != NULL);
- XML_SetStartElementHandler (m_p, fEnable ? StartElementHandler : NULL);
- }
-
- // @cmember Enable/Disable the end element handler
-
- void EnableEndElementHandler (bool fEnable = true)
- {
- assert (m_p != NULL);
- XML_SetEndElementHandler (m_p, fEnable ? EndElementHandler : NULL);
- }
-
- // @cmember Enable/Disable the element handlers
-
- void EnableElementHandler (bool fEnable = true)
- {
- assert (m_p != NULL);
- EnableStartElementHandler (fEnable);
- EnableEndElementHandler (fEnable);
- }
-
- // @cmember Enable/Disable the character data handler
-
- void EnableCharacterDataHandler (bool fEnable = true)
- {
- assert (m_p != NULL);
- XML_SetCharacterDataHandler (m_p, fEnable ? CharacterDataHandler : NULL);
- }
-
- // @cmember Enable/Disable the processing instruction handler
-
- void EnableProcessingInstructionHandler (bool fEnable = true)
- {
- assert (m_p != NULL);
- XML_SetProcessingInstructionHandler (m_p, fEnable ? ProcessingInstructionHandler : NULL);
- }
-
- // @cmember Enable/Disable the comment handler
-
- void EnableCommentHandler (bool fEnable = true)
- {
- assert (m_p != NULL);
- XML_SetCommentHandler (m_p, fEnable ? CommentHandler : NULL);
- }
-
- // @cmember Enable/Disable the start CDATA section handler
-
- void EnableStartCdataSectionHandler (bool fEnable = true)
- {
- assert (m_p != NULL);
- XML_SetStartCdataSectionHandler (m_p, fEnable ? StartCdataSectionHandler : NULL);
- }
-
- // @cmember Enable/Disable the end CDATA section handler
-
- void EnableEndCdataSectionHandler (bool fEnable = true)
- {
- assert (m_p != NULL);
- XML_SetEndCdataSectionHandler (m_p, fEnable ? EndCdataSectionHandler : NULL);
- }
-
- // @cmember Enable/Disable the CDATA section handlers
-
- void EnableCdataSectionHandler (bool fEnable = true)
- {
- assert (m_p != NULL);
- EnableStartCdataSectionHandler (fEnable);
- EnableEndCdataSectionHandler (fEnable);
- }
-
- // @cmember Enable/Disable default handler
-
- void EnableDefaultHandler (bool fEnable = true, bool fExpand = true)
- {
- assert (m_p != NULL);
- if (fExpand)
- {
- XML_SetDefaultHandlerExpand (m_p, fEnable ? DefaultHandler : NULL);
- }
- else
- XML_SetDefaultHandler (m_p, fEnable ? DefaultHandler : NULL);
- }
-
- // @cmember Enable/Disable external entity ref handler
-
- void EnableExternalEntityRefHandler (bool fEnable = true)
- {
- assert (m_p != NULL);
- XML_SetExternalEntityRefHandler (m_p, fEnable ? ExternalEntityRefHandler : NULL);
- }
-
- // @cmember Enable/Disable unknown encoding handler
-
- void EnableUnknownEncodingHandler (bool fEnable = true)
- {
- assert (m_p != NULL);
- XML_SetUnknownEncodingHandler (m_p, fEnable ? UnknownEncodingHandler : NULL);
- }
-
- // @cmember Enable/Disable start namespace handler
-
- void EnableStartNamespaceDeclHandler (bool fEnable = true)
- {
- assert (m_p != NULL);
- XML_SetStartNamespaceDeclHandler (m_p, fEnable ? StartNamespaceDeclHandler : NULL);
- }
-
- // @cmember Enable/Disable end namespace handler
-
- void EnableEndNamespaceDeclHandler (bool fEnable = true)
- {
- assert (m_p != NULL);
- XML_SetEndNamespaceDeclHandler (m_p, fEnable ? EndNamespaceDeclHandler : NULL);
- }
-
- // @cmember Enable/Disable namespace handlers
-
- void EnableNamespaceDeclHandler (bool fEnable = true)
- {
- EnableStartNamespaceDeclHandler (fEnable);
- EnableEndNamespaceDeclHandler (fEnable);
- }
-
- // @cmember Enable/Disable the XML declaration handler
-
- void EnableXmlDeclHandler (bool fEnable = true)
- {
- assert (m_p != NULL);
- XML_SetXmlDeclHandler (m_p, fEnable ? XmlDeclHandler : NULL);
- }
-
- // @cmember Enable/Disable the start DOCTYPE declaration handler
-
- void EnableStartDoctypeDeclHandler (bool fEnable = true)
- {
- assert (m_p != NULL);
- XML_SetStartDoctypeDeclHandler (m_p, fEnable ? StartDoctypeDeclHandler : NULL);
- }
-
- // @cmember Enable/Disable the end DOCTYPE declaration handler
-
- void EnableEndDoctypeDeclHandler (bool fEnable = true)
- {
- assert (m_p != NULL);
- XML_SetEndDoctypeDeclHandler (m_p,
- fEnable ? EndDoctypeDeclHandler : NULL);
- }
-
- // @cmember Enable/Disable the DOCTYPE declaration handler
-
- void EnableDoctypeDeclHandler (bool fEnable = true)
- {
- assert (m_p != NULL);
- EnableStartDoctypeDeclHandler (fEnable);
- EnableEndDoctypeDeclHandler (fEnable);
- }
-
-public:
- // Parser error reporting methods
-
- // @cmember Get last error
-
- enum XML_Error GetErrorCode ()
- {
- assert (m_p != NULL);
- return XML_GetErrorCode (m_p);
- }
-
- // @cmember Get the current byte index
-
- long GetCurrentByteIndex ()
- {
- assert (m_p != NULL);
- return XML_GetCurrentByteIndex (m_p);
- }
-
- // @cmember Get the current line number
-
- int GetCurrentLineNumber ()
- {
- assert (m_p != NULL);
- return XML_GetCurrentLineNumber (m_p);
- }
-
- // @cmember Get the current column number
-
- int GetCurrentColumnNumber ()
- {
- assert (m_p != NULL);
- return XML_GetCurrentColumnNumber (m_p);
- }
-
- // @cmember Get the current byte count
-
- int GetCurrentByteCount ()
- {
- assert (m_p != NULL);
- return XML_GetCurrentByteCount (m_p);
- }
-
- // @cmember Get the input context
-
- const char *GetInputContext (int *pnOffset, int *pnSize)
- {
- assert (m_p != NULL);
- return XML_GetInputContext (m_p, pnOffset, pnSize);
- }
-
- // @cmember Get last error string
-
- const XML_LChar *GetErrorString ()
- {
- return XML_ErrorString (GetErrorCode ());
- }
-
- // @cmember Return the version string
-
- static const XML_LChar *GetExpatVersion ()
- {
- return XML_ExpatVersion ();
- }
-
- // @cmember Get the version information
-
- static void GetExpatVersion (int *pnMajor, int *pnMinor, int *pnMicro)
- {
- XML_expat_version v = XML_ExpatVersionInfo ();
- if (pnMajor)
- *pnMajor = v .major;
- if (pnMinor)
- *pnMinor = v .minor;
- if (pnMicro)
- *pnMicro = v .micro;
- }
-
- // @cmember Get last error string
-
- static const XML_LChar *GetErrorString (enum XML_Error nError)
- {
- return XML_ErrorString (nError);
- }
-
-
- // Public handler methods:
- // The template parameter should provide their own implementation for those handlers that they want
-
- // @cmember Start element handler
-
- void OnStartElement (const XML_Char *pszName, const XML_Char **papszAttrs)
- {
- return;
- }
-
- // @cmember End element handler
-
- void OnEndElement (const XML_Char *pszName)
- {
- return;
- }
-
- // @cmember Character data handler
-
- void OnCharacterData (const XML_Char *pszData, int nLength)
- {
- return;
- }
-
- // @cmember Processing instruction handler
-
- void OnProcessingInstruction (const XML_Char *pszTarget,
- const XML_Char *pszData)
- {
- return;
- }
-
- // @cmember Comment handler
-
- void OnComment (const XML_Char *pszData)
- {
- return;
- }
-
- // @cmember Start CDATA section handler
-
- void OnStartCdataSection ()
- {
- return;
- }
-
- // @cmember End CDATA section handler
-
- void OnEndCdataSection ()
- {
- return;
- }
-
- // @cmember Default handler
-
- void OnDefault (const XML_Char *pszData, int nLength)
- {
- return;
- }
-
- // @cmember External entity ref handler
-
- bool OnExternalEntityRef (const XML_Char *pszContext,
- const XML_Char *pszBase, const XML_Char *pszSystemID,
- const XML_Char *pszPublicID)
- {
- return false;
- }
-
- // @cmember Unknown encoding handler
-
- bool OnUnknownEncoding (const XML_Char *pszName, XML_Encoding *pInfo)
- {
- return false;
- }
-
- // @cmember Start namespace declaration handler
-
- void OnStartNamespaceDecl (const XML_Char *pszPrefix,
- const XML_Char *pszURI)
- {
- return;
- }
-
- // @cmember End namespace declaration handler
-
- void OnEndNamespaceDecl (const XML_Char *pszPrefix)
- {
- return;
- }
-
- // @cmember XML declaration handler
-
- void OnXmlDecl (const XML_Char *pszVersion, const XML_Char *pszEncoding,
- bool fStandalone)
- {
- return;
- }
-
- // @cmember Start DOCTYPE declaration handler
-
- void OnStartDoctypeDecl (const XML_Char *pszDoctypeName,
- const XML_Char *pszSysID, const XML_Char *pszPubID,
- bool fHasInternalSubset)
- {
- return;
- }
-
- // @cmember End DOCTYPE declaration handler
-
- void OnEndDoctypeDecl ()
- {
- return;
- }
-
-// @access Protected methods
-protected:
-
- // @cmember Handle any post creation
-
- void OnPostCreate ()
- {
- }
-
-// @access Protected static methods
-protected:
-
- // @cmember Start element handler wrapper
-
- static void __cdecl StartElementHandler (void *pUserData,
- const XML_Char *pszName, const XML_Char **papszAttrs)
- {
- _T *pThis = static_cast <_T *> ((CExpatImpl <_T> *) pUserData);
- pThis ->OnStartElement (pszName, papszAttrs);
- }
-
- // @cmember End element handler wrapper
-
- static void __cdecl EndElementHandler (void *pUserData,
- const XML_Char *pszName)
- {
- _T *pThis = static_cast <_T *> ((CExpatImpl <_T> *) pUserData);
- pThis ->OnEndElement (pszName);
- }
-
- // @cmember Character data handler wrapper
-
- static void __cdecl CharacterDataHandler (void *pUserData,
- const XML_Char *pszData, int nLength)
- {
- _T *pThis = static_cast <_T *> ((CExpatImpl <_T> *) pUserData);
- pThis ->OnCharacterData (pszData, nLength);
- }
-
- // @cmember Processing instruction handler wrapper
-
- static void __cdecl ProcessingInstructionHandler (void *pUserData,
- const XML_Char *pszTarget, const XML_Char *pszData)
- {
- _T *pThis = static_cast <_T *> ((CExpatImpl <_T> *) pUserData);
- pThis ->OnProcessingInstruction (pszTarget, pszData);
- }
-
- // @cmember Comment handler wrapper
-
- static void __cdecl CommentHandler (void *pUserData,
- const XML_Char *pszData)
- {
- _T *pThis = static_cast <_T *> ((CExpatImpl <_T> *) pUserData);
- pThis ->OnComment (pszData);
- }
-
- // @cmember Start CDATA section wrapper
-
- static void __cdecl StartCdataSectionHandler (void *pUserData)
- {
- _T *pThis = static_cast <_T *> ((CExpatImpl <_T> *) pUserData);
- pThis ->OnStartCdataSection ();
- }
-
- // @cmember End CDATA section wrapper
-
- static void __cdecl EndCdataSectionHandler (void *pUserData)
- {
- _T *pThis = static_cast <_T *> ((CExpatImpl <_T> *) pUserData);
- pThis ->OnEndCdataSection ();
- }
-
- // @cmember Default wrapper
-
- static void __cdecl DefaultHandler (void *pUserData,
- const XML_Char *pszData, int nLength)
- {
- _T *pThis = static_cast <_T *> ((CExpatImpl <_T> *) pUserData);
- pThis ->OnDefault (pszData, nLength);
- }
-
- // @cmember External entity ref wrapper
-
- static int __cdecl ExternalEntityRefHandler (void *pUserData,
- const XML_Char *pszContext, const XML_Char *pszBase,
- const XML_Char *pszSystemID, const XML_Char *pszPublicID)
- {
- _T *pThis = static_cast <_T *> ((CExpatImpl <_T> *) pUserData);
- return pThis ->OnExternalEntityRef (pszContext,
- pszBase, pszSystemID, pszPublicID) ? 1 : 0;
- }
-
- // @cmember Unknown encoding wrapper
-
- static int __cdecl UnknownEncodingHandler (void * pUserData, const XML_Char * pszName, XML_Encoding * pInfo)
- {
- _T *pThis = static_cast <_T *> ((CExpatImpl <_T> *) pUserData);
- return pThis ->OnUnknownEncoding (pszName, pInfo) ? 1 : 0;
- }
-
- // @cmember Start namespace decl wrapper
-
- static void __cdecl StartNamespaceDeclHandler (void * pUserData, const XML_Char * pszPrefix, const XML_Char * pszURI)
- {
- _T *pThis = static_cast <_T *> ((CExpatImpl <_T> *) pUserData);
- pThis ->OnStartNamespaceDecl (pszPrefix, pszURI);
- }
-
- // @cmember End namespace decl wrapper
-
- static void __cdecl EndNamespaceDeclHandler (void * pUserData, const XML_Char * pszPrefix)
- {
- _T *pThis = static_cast <_T *> ((CExpatImpl <_T> *) pUserData);
- pThis ->OnEndNamespaceDecl (pszPrefix);
- }
-
- // @cmember XML declaration wrapper
-
- static void __cdecl XmlDeclHandler (void *pUserData, const XML_Char *pszVersion, const XML_Char *pszEncoding, int nStandalone)
- {
- _T *pThis = static_cast <_T *> ((CExpatImpl <_T> *) pUserData);
- pThis ->OnXmlDecl (pszVersion, pszEncoding, nStandalone != 0);
- }
-
- // @cmember Start Doctype declaration wrapper
-
- static void __cdecl StartDoctypeDeclHandler (
- void *pUserData, const XML_Char *pszDoctypeName, const XML_Char *pszSysID,
- const XML_Char *pszPubID, int nHasInternalSubset
- )
- {
- _T *pThis = static_cast <_T *> ((CExpatImpl <_T> *) pUserData);
- pThis ->OnStartDoctypeDecl (pszDoctypeName, pszSysID,
- pszPubID, nHasInternalSubset != 0);
- }
-
- // @cmember End Doctype declaration wrapper
-
- static void __cdecl EndDoctypeDeclHandler (void *pUserData)
- {
- _T *pThis = static_cast <_T *> ((CExpatImpl <_T> *) pUserData);
- pThis ->OnEndDoctypeDecl ();
- }
-
-
-protected:
-
- XML_Parser m_p;
-
- /// Returns the value of the specified attribute, if found; NULL otherwise
- static const XML_Char * FindAttr(const XML_Char ** iAttrs, const XML_Char * iAttrToFind)
- {
- for (const XML_Char ** Attr = iAttrs; *Attr != NULL; Attr += 2)
- {
- if (strcmp(*Attr, iAttrToFind) == 0)
- {
- return *(Attr + 1);
- }
- } // for Attr - iAttrs[]
- return NULL;
- }
-} ;
-
-
-
-