00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _CEGUIXercesParser_h_
00029 #define _CEGUIXercesParser_h_
00030
00031 #include "CEGUIXMLParser.h"
00032
00033 #if (defined( __WIN32__ ) || defined( _WIN32 )) && !defined(CEGUI_STATIC)
00034 # ifdef CEGUIXERCESPARSER_EXPORTS
00035 # define CEGUIXERCESPARSER_API __declspec(dllexport)
00036 # else
00037 # define CEGUIXERCESPARSER_API __declspec(dllimport)
00038 # endif
00039 #else
00040 # define CEGUIXERCESPARSER_API
00041 #endif
00042
00043
00044
00045 #include <xercesc/framework/MemBufInputSource.hpp>
00046 #include <xercesc/util/PlatformUtils.hpp>
00047 #include <xercesc/util/TransService.hpp>
00048 #include <xercesc/util/XMLString.hpp>
00049 #include <xercesc/sax2/Attributes.hpp>
00050 #include <xercesc/sax2/DefaultHandler.hpp>
00051 #include <xercesc/sax2/SAX2XMLReader.hpp>
00052 #include <xercesc/sax2/XMLReaderFactory.hpp>
00053
00054
00055 namespace CEGUI
00056 {
00057 class XercesHandler : public XERCES_CPP_NAMESPACE::DefaultHandler
00058 {
00059 public:
00060 XercesHandler(XMLHandler& handler);
00061 ~XercesHandler(void);
00062
00063
00064 void startElement(const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname, const XERCES_CPP_NAMESPACE::Attributes& attrs);
00065 void endElement(const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname);
00066 void characters (const XMLCh *const chars, const unsigned int length);
00067 void warning (const XERCES_CPP_NAMESPACE::SAXParseException &exc);
00068 void error (const XERCES_CPP_NAMESPACE::SAXParseException &exc);
00069 void fatalError (const XERCES_CPP_NAMESPACE::SAXParseException &exc);
00070
00071 protected:
00072 XMLHandler& d_handler;
00073 };
00074
00079 class CEGUIXERCESPARSER_API XercesParser : public XMLParser
00080 {
00081 public:
00082 XercesParser(void);
00083 ~XercesParser(void);
00084
00085
00086 void parseXMLFile(XMLHandler& handler, const String& filename, const String& schemaName, const String& resourceGroup);
00087
00088
00093 static void populateAttributesBlock(const XERCES_CPP_NAMESPACE::Attributes& src, XMLAttributes& dest);
00094
00106 static String transcodeXmlCharToString(const XMLCh* const xmlch_str, unsigned int length);
00107
00118 static void setSchemaDefaultResourceGroup(const String& resourceGroup)
00119 { d_defaultSchemaResourceGroup = resourceGroup; }
00120
00128 static const String& getSchemaDefaultResourceGroup()
00129 { return d_defaultSchemaResourceGroup; }
00130
00131 protected:
00132 static void initialiseSchema(XERCES_CPP_NAMESPACE::SAX2XMLReader* reader, const String& schemaName, const String& xmlFilename, const String& resourceGroup);
00133 static XERCES_CPP_NAMESPACE::SAX2XMLReader* createReader(XERCES_CPP_NAMESPACE::DefaultHandler& handler);
00134 static void doParse(XERCES_CPP_NAMESPACE::SAX2XMLReader* parser, const String& xmlFilename, const String& resourceGroup);
00135
00136
00137 bool initialiseImpl(void);
00138 void cleanupImpl(void);
00139
00141 static String d_defaultSchemaResourceGroup;
00142 };
00143
00144 }
00145
00146
00147 #endif // end of guard _CEGUIXercesParser_h_