00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _CEGUIXercesParser_h_
00025 #define _CEGUIXercesParser_h_
00026
00027 #include "CEGUIXMLParser.h"
00028
00029
00030 #include <xercesc/framework/MemBufInputSource.hpp>
00031 #include <xercesc/util/PlatformUtils.hpp>
00032 #include <xercesc/util/TransService.hpp>
00033 #include <xercesc/util/XMLString.hpp>
00034 #include <xercesc/sax2/Attributes.hpp>
00035 #include <xercesc/sax2/DefaultHandler.hpp>
00036 #include <xercesc/sax2/SAX2XMLReader.hpp>
00037 #include <xercesc/sax2/XMLReaderFactory.hpp>
00038
00039
00040 namespace CEGUI
00041 {
00042 class XercesHandler : public XERCES_CPP_NAMESPACE::DefaultHandler
00043 {
00044 public:
00045 XercesHandler(XMLHandler& handler);
00046 ~XercesHandler(void);
00047
00048
00049 void startElement(const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname, const XERCES_CPP_NAMESPACE::Attributes& attrs);
00050 void endElement(const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname);
00051 void warning (const XERCES_CPP_NAMESPACE::SAXParseException &exc);
00052 void error (const XERCES_CPP_NAMESPACE::SAXParseException &exc);
00053 void fatalError (const XERCES_CPP_NAMESPACE::SAXParseException &exc);
00054
00055 protected:
00056 XMLHandler& d_handler;
00057 };
00058
00063 class XercesParser : public XMLParser
00064 {
00065 public:
00066 XercesParser(void);
00067 ~XercesParser(void);
00068
00069
00070 void parseXMLFile(XMLHandler& handler, const String& filename, const String& schemaName, const String& resourceGroup);
00071
00072
00077 static void populateAttributesBlock(const XERCES_CPP_NAMESPACE::Attributes& src, XMLAttributes& dest);
00078
00083 static String transcodeXmlCharToString(const XMLCh* const xmlch_str);
00084
00085 protected:
00086 static void initialiseSchema(XERCES_CPP_NAMESPACE::SAX2XMLReader* reader, const String& schemaName, const String& xmlFilename, const String& resourceGroup);
00087 static XERCES_CPP_NAMESPACE::SAX2XMLReader* createReader(XERCES_CPP_NAMESPACE::DefaultHandler& handler);
00088 static void doParse(XERCES_CPP_NAMESPACE::SAX2XMLReader* parser, const String& xmlFilename, const String& resourceGroup);
00089
00090
00091 bool initialiseImpl(void);
00092 void cleanupImpl(void);
00093 };
00094
00095 }
00096
00097
00098 #endif // end of guard _CEGUIXercesParser_h_