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 #include "CEGUIXercesParserProperties.h"
00033
00034 #if (defined( __WIN32__ ) || defined( _WIN32 )) && !defined(CEGUI_STATIC)
00035 # ifdef CEGUIXERCESPARSER_EXPORTS
00036 # define CEGUIXERCESPARSER_API __declspec(dllexport)
00037 # else
00038 # define CEGUIXERCESPARSER_API __declspec(dllimport)
00039 # endif
00040 #else
00041 # define CEGUIXERCESPARSER_API
00042 #endif
00043
00044
00045
00046 #include <xercesc/framework/MemBufInputSource.hpp>
00047 #include <xercesc/util/PlatformUtils.hpp>
00048 #include <xercesc/util/TransService.hpp>
00049 #include <xercesc/util/XMLString.hpp>
00050 #include <xercesc/sax2/Attributes.hpp>
00051 #include <xercesc/sax2/DefaultHandler.hpp>
00052 #include <xercesc/sax2/SAX2XMLReader.hpp>
00053 #include <xercesc/sax2/XMLReaderFactory.hpp>
00054
00055
00056 namespace CEGUI
00057 {
00058 class XercesHandler : public XERCES_CPP_NAMESPACE::DefaultHandler
00059 {
00060 public:
00061 XercesHandler(XMLHandler& handler);
00062 ~XercesHandler(void);
00063
00064
00065 void startElement(const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname, const XERCES_CPP_NAMESPACE::Attributes& attrs);
00066 void endElement(const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname);
00067 #if _XERCES_VERSION >= 30000
00068 void characters(const XMLCh* const chars, const XMLSize_t length);
00069 #else
00070 void characters (const XMLCh *const chars, const unsigned int length);
00071 #endif
00072 void warning (const XERCES_CPP_NAMESPACE::SAXParseException &exc);
00073 void error (const XERCES_CPP_NAMESPACE::SAXParseException &exc);
00074 void fatalError (const XERCES_CPP_NAMESPACE::SAXParseException &exc);
00075
00076 protected:
00077 XMLHandler& d_handler;
00078 };
00079
00084 class CEGUIXERCESPARSER_API XercesParser : public XMLParser
00085 {
00086 public:
00087 XercesParser(void);
00088 ~XercesParser(void);
00089
00090
00091 void parseXMLFile(XMLHandler& handler, const String& filename, const String& schemaName, const String& resourceGroup);
00092
00093
00098 static void populateAttributesBlock(const XERCES_CPP_NAMESPACE::Attributes& src, XMLAttributes& dest);
00099
00111 static String transcodeXmlCharToString(const XMLCh* const xmlch_str, unsigned int length);
00112
00123 static void setSchemaDefaultResourceGroup(const String& resourceGroup)
00124 { d_defaultSchemaResourceGroup = resourceGroup; }
00125
00133 static const String& getSchemaDefaultResourceGroup()
00134 { return d_defaultSchemaResourceGroup; }
00135
00136 protected:
00137 static void initialiseSchema(XERCES_CPP_NAMESPACE::SAX2XMLReader* reader, const String& schemaName, const String& xmlFilename, const String& resourceGroup);
00138 static XERCES_CPP_NAMESPACE::SAX2XMLReader* createReader(XERCES_CPP_NAMESPACE::DefaultHandler& handler);
00139 static void doParse(XERCES_CPP_NAMESPACE::SAX2XMLReader* parser, const String& xmlFilename, const String& resourceGroup);
00140
00141
00142 bool initialiseImpl(void);
00143 void cleanupImpl(void);
00144
00146 static String d_defaultSchemaResourceGroup;
00148 static XercesParserProperties::SchemaDefaultResourceGroup
00149 s_schemaDefaultResourceGroupProperty;
00150 };
00151
00152 }
00153
00154
00155 #endif // end of guard _CEGUIXercesParser_h_