#
# From http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/games-puzzle/enigma/files/enigma-1.01-xerces-c.patch?revision=1.2
#
--- configure.ac	2008-11-18 14:09:53.724778996 +0500
+++ configure.ac3	2008-11-18 14:42:30.322032537 +0500
@@ -167,14 +167,14 @@ dnl ------------------------------------
 dnl Check for xerces
 dnl ----------------------------------------
 if test "$MINGW32" = yes; then
-  AC_MSG_CHECKING([for Xerces 3.0 experimental version])
-  AC_EGREP_HEADER([gXercesMajVersion = 3],[xercesc/util/XercesVersion.hpp],
+  AC_MSG_CHECKING([for Xerces 3 version])
+  AC_EGREP_HEADER([XERCES_VERSION_MAJOR 3],[xercesc/util/XercesVersion.hpp],
       [AC_MSG_RESULT([found])],
       [AC_MSG_ERROR([not found])])      
    AC_CHECK_LIB(xerces, main,,[AC_MSG_ERROR([xerces is required to compile Enigma])])
 else
-  AC_MSG_CHECKING([for Xerces 3.0 experimental version])
-  AC_EGREP_HEADER([gXercesMajVersion = 3],[xercesc/util/XercesVersion.hpp],
+  AC_MSG_CHECKING([for Xerces 3 version])
+  AC_EGREP_HEADER([XERCES_VERSION_MAJOR 3],[xercesc/util/XercesVersion.hpp],
       xerces3exp="yes",
       xerces3exp="no")      
   if test "x$xerces3exp" = xyes; then
--- src/lev/ScoreManager.cc
+++ src/lev/ScoreManager.cc
@@ -65,15 +65,23 @@
     class ScoreDomSerFilter : public DOMWriterFilter {
 #endif
         public:
+#if _XERCES_VERSION >= 30000
+            virtual DOMNodeFilter::FilterAction acceptNode(const DOMNode *node) const;
+#else
             virtual short acceptNode(const DOMNode *node) const;
+#endif
             virtual unsigned long getWhatToShow () const {
                 return DOMNodeFilter::SHOW_ALL;
             }
             virtual void setWhatToShow (unsigned long toShow) {}
     };
-    
+   
+#if _XERCES_VERSION >= 30000
+    DOMNodeFilter::FilterAction ScoreDomSerFilter::acceptNode(const DOMNode *node) const {
+#else
     short ScoreDomSerFilter::acceptNode(const DOMNode *node) const {
-        if (node->getNodeType () == DOMNode::ELEMENT_NODE &&
+#endif
+	if (node->getNodeType () == DOMNode::ELEMENT_NODE &&
                  std::string(XMLtoUtf8(node->getNodeName()).c_str()) == "level") {
             const DOMElement *e = dynamic_cast<const DOMElement *>(node);
             std::string id = XMLtoUtf8(e->getAttribute(Utf8ToXML("id").x_str())).c_str();
--- src/Utf8ToXML.cc~	2008-12-29 00:12:26.000000000 +0600
+++ src/Utf8ToXML.cc	2008-12-29 00:15:19.000000000 +0600
@@ -40,11 +40,11 @@
     }
 
     void Utf8ToXML::init(const char * const toTranscode) {
-        unsigned int srcLength = std::strlen(toTranscode) + 1;
+        XMLSize_t srcLength = std::strlen(toTranscode) + 1;
         // make safe assumptions on utf-16 size
-        unsigned int maxDestLength = srcLength;
-        unsigned int charsEaten;
-        unsigned int destLength;
+        XMLSize_t maxDestLength = srcLength;
+        XMLSize_t charsEaten;
+        XMLSize_t destLength;
         unsigned char *charSizes = new unsigned char[maxDestLength]; // just junk
         // make a buffer - size does not matter - the object is temporary 
         xmlString = new XMLCh[maxDestLength];
--- src/XMLtoUtf8.cc~	2008-12-29 00:12:12.000000000 +0600
+++ src/XMLtoUtf8.cc	2008-12-29 00:14:47.000000000 +0600
@@ -27,11 +27,11 @@
 namespace enigma
 {
     XMLtoUtf8::XMLtoUtf8(const XMLCh* const toTranscode) {
-        unsigned int srcLength = XMLString::stringLen(toTranscode) + 1;
+        XMLSize_t srcLength = XMLString::stringLen(toTranscode) + 1;
         // make safe assumptions on utf-8 size
-        unsigned int maxDestLength = 3 * srcLength;
-        unsigned int charsEaten;
-        unsigned int destLength;
+        XMLSize_t maxDestLength = 3 * srcLength;
+        XMLSize_t charsEaten;
+        XMLSize_t destLength;
         // make a buffer - size does not matter - the object is temporary 
         utf8String = new char[maxDestLength];
         // transcode to utf-8 -- there are no unrepresentable chars
