From 502d13d719f9e43522494141692af801d8254e66 Mon Sep 17 00:00:00 2001
From: David Abram Cargill <cargilld@apache.org>
Date: Sun, 20 Mar 2005 19:02:46 +0000
Subject: [PATCH] Implement versions of uppercase and compareIstring that only
 check a to z, instead of all characters, and don't rely on functionality
 provided in the transcoders.

git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@176354 13f79535-47bb-0310-9956-ffa450edef68
---
 .../dom/impl/DOMImplementationImpl.cpp        |  10 +-
 src/xercesc/dom/impl/DOMWriterImpl.cpp        |  35 ++--
 src/xercesc/internal/XMLReader.cpp            |   4 +-
 src/xercesc/internal/XMLScanner.cpp           |  18 +-
 src/xercesc/parsers/DOMBuilderImpl.cpp        | 180 +++++++++---------
 src/xercesc/parsers/SAX2XMLReaderImpl.cpp     |  83 ++++----
 src/xercesc/util/HexBin.cpp                   |   5 +-
 src/xercesc/util/TransService.cpp             |   2 +-
 src/xercesc/util/XMLString.cpp                |  58 ++++++
 src/xercesc/util/XMLString.hpp                |  28 +++
 src/xercesc/util/XMLURL.cpp                   |   4 +-
 src/xercesc/validators/DTD/DTDScanner.cpp     |   9 +-
 12 files changed, 275 insertions(+), 161 deletions(-)

diff --git a/src/xercesc/dom/impl/DOMImplementationImpl.cpp b/src/xercesc/dom/impl/DOMImplementationImpl.cpp
index 26e03b1c5..85201ea7f 100644
--- a/src/xercesc/dom/impl/DOMImplementationImpl.cpp
+++ b/src/xercesc/dom/impl/DOMImplementationImpl.cpp
@@ -186,23 +186,23 @@ bool  DOMImplementationImpl::hasFeature(const  XMLCh * feature,  const  XMLCh *
     bool version3_0 = XMLString::equals(version, g3_0);
 
     // Currently, we support only XML Level 1 version 1.0
-    if (XMLString::compareIString(feature, XMLUni::fgXMLString) == 0
+    if (XMLString::compareIStringASCII(feature, XMLUni::fgXMLString) == 0
         && (anyVersion || version1_0 || version2_0))
         return true;
 
-    if (XMLString::compareIString(feature, gCore) == 0
+    if (XMLString::compareIStringASCII(feature, gCore) == 0
         && (anyVersion || version1_0 || version2_0 || version3_0))
         return true;
 
-    if (XMLString::compareIString(feature, gTrav) == 0
+    if (XMLString::compareIStringASCII(feature, gTrav) == 0
         && (anyVersion || version2_0))
         return true;
 
-    if (XMLString::compareIString(feature, gRange) == 0
+    if (XMLString::compareIStringASCII(feature, gRange) == 0
         && (anyVersion || version2_0))
         return true;
 
-    if (XMLString::compareIString(feature, gLS) == 0
+    if (XMLString::compareIStringASCII(feature, gLS) == 0
         && (anyVersion || version3_0))
         return true;
 
diff --git a/src/xercesc/dom/impl/DOMWriterImpl.cpp b/src/xercesc/dom/impl/DOMWriterImpl.cpp
index 2f56dd08e..99a834f7e 100644
--- a/src/xercesc/dom/impl/DOMWriterImpl.cpp
+++ b/src/xercesc/dom/impl/DOMWriterImpl.cpp
@@ -17,6 +17,9 @@
 /*
  * $Id$
  * $Log$
+ * Revision 1.57  2005/03/20 19:02:45  cargilld
+ * Implement versions of uppercase and compareIstring that only check a to z, instead of all characters, and don't rely on functionality provided in the transcoders.
+ *
  * Revision 1.56  2005/03/08 09:33:32  amassari
  * Redeclare a namespace binding if the prefix is already bound to a different namespace (jira# 1371)
  *
@@ -1807,21 +1810,21 @@ void DOMWriterImpl::processBOM()
     if (!getFeature(BYTE_ORDER_MARK_ID))
         return;
 
-    if ((XMLString::compareIString(fEncoding, XMLUni::fgUTF16LEncodingString)  == 0) ||
-        (XMLString::compareIString(fEncoding, XMLUni::fgUTF16LEncodingString2) == 0)  )
+    if ((XMLString::compareIStringASCII(fEncoding, XMLUni::fgUTF16LEncodingString)  == 0) ||
+        (XMLString::compareIStringASCII(fEncoding, XMLUni::fgUTF16LEncodingString2) == 0)  )
     {
         fFormatter->writeBOM(BOM_utf16le, 2);
     }
-    else if ((XMLString::compareIString(fEncoding, XMLUni::fgUTF16BEncodingString)  == 0) ||
-             (XMLString::compareIString(fEncoding, XMLUni::fgUTF16BEncodingString2) == 0)  )
+    else if ((XMLString::compareIStringASCII(fEncoding, XMLUni::fgUTF16BEncodingString)  == 0) ||
+             (XMLString::compareIStringASCII(fEncoding, XMLUni::fgUTF16BEncodingString2) == 0)  )
     {
         fFormatter->writeBOM(BOM_utf16be, 2);
     }
-    else if ((XMLString::compareIString(fEncoding, XMLUni::fgUTF16EncodingString)  == 0) ||
-             (XMLString::compareIString(fEncoding, XMLUni::fgUTF16EncodingString2) == 0) ||
-             (XMLString::compareIString(fEncoding, XMLUni::fgUTF16EncodingString3) == 0) ||
-             (XMLString::compareIString(fEncoding, XMLUni::fgUTF16EncodingString4) == 0) ||
-             (XMLString::compareIString(fEncoding, XMLUni::fgUTF16EncodingString5) == 0)  ) 
+    else if ((XMLString::compareIStringASCII(fEncoding, XMLUni::fgUTF16EncodingString)  == 0) ||
+             (XMLString::compareIStringASCII(fEncoding, XMLUni::fgUTF16EncodingString2) == 0) ||
+             (XMLString::compareIStringASCII(fEncoding, XMLUni::fgUTF16EncodingString3) == 0) ||
+             (XMLString::compareIStringASCII(fEncoding, XMLUni::fgUTF16EncodingString4) == 0) ||
+             (XMLString::compareIStringASCII(fEncoding, XMLUni::fgUTF16EncodingString5) == 0)  ) 
     {
 #if defined(ENDIANMODE_LITTLE)
             fFormatter->writeBOM(BOM_utf16le, 2);
@@ -1829,19 +1832,19 @@ void DOMWriterImpl::processBOM()
             fFormatter->writeBOM(BOM_utf16be, 2);
 #endif
     }
-    else if ((XMLString::compareIString(fEncoding, XMLUni::fgUCS4LEncodingString)  == 0) ||
-             (XMLString::compareIString(fEncoding, XMLUni::fgUCS4LEncodingString2) == 0)  )
+    else if ((XMLString::compareIStringASCII(fEncoding, XMLUni::fgUCS4LEncodingString)  == 0) ||
+             (XMLString::compareIStringASCII(fEncoding, XMLUni::fgUCS4LEncodingString2) == 0)  )
     {
         fFormatter->writeBOM(BOM_ucs4le, 4);
     }
-    else if ((XMLString::compareIString(fEncoding, XMLUni::fgUCS4BEncodingString)  == 0) ||
-             (XMLString::compareIString(fEncoding, XMLUni::fgUCS4BEncodingString2) == 0)  )
+    else if ((XMLString::compareIStringASCII(fEncoding, XMLUni::fgUCS4BEncodingString)  == 0) ||
+             (XMLString::compareIStringASCII(fEncoding, XMLUni::fgUCS4BEncodingString2) == 0)  )
     {
         fFormatter->writeBOM(BOM_ucs4be, 4);
     }
-    else if ((XMLString::compareIString(fEncoding, XMLUni::fgUCS4EncodingString)  == 0) ||
-             (XMLString::compareIString(fEncoding, XMLUni::fgUCS4EncodingString2) == 0) ||
-             (XMLString::compareIString(fEncoding, XMLUni::fgUCS4EncodingString3) == 0)  )
+    else if ((XMLString::compareIStringASCII(fEncoding, XMLUni::fgUCS4EncodingString)  == 0) ||
+             (XMLString::compareIStringASCII(fEncoding, XMLUni::fgUCS4EncodingString2) == 0) ||
+             (XMLString::compareIStringASCII(fEncoding, XMLUni::fgUCS4EncodingString3) == 0)  )
     {
 #if defined(ENDIANMODE_LITTLE)
         fFormatter->writeBOM(BOM_ucs4le, 4);
diff --git a/src/xercesc/internal/XMLReader.cpp b/src/xercesc/internal/XMLReader.cpp
index b8b45e2d7..19aaa7f40 100644
--- a/src/xercesc/internal/XMLReader.cpp
+++ b/src/xercesc/internal/XMLReader.cpp
@@ -207,7 +207,7 @@ XMLReader::XMLReader(const  XMLCh* const          pubId
 
     // Copy the encoding string to our member
     fEncodingStr = XMLString::replicate(encodingStr, fMemoryManager);
-    XMLString::upperCase(fEncodingStr);
+    XMLString::upperCaseASCII(fEncodingStr);
 
     // Ask the transcoding service if it supports src offset info
     fSrcOfsSupported = XMLPlatformUtils::fgTransService->supportsSrcOfs();
@@ -1003,7 +1003,7 @@ bool XMLReader::setEncoding(const XMLCh* const newEncoding)
     // upperCase the newEncoding first for better performance
     //
     XMLCh* inputEncoding = XMLString::replicate(newEncoding, fMemoryManager);
-    XMLString::upperCase(inputEncoding);
+    XMLString::upperCaseASCII(inputEncoding);
 
     //
     //  Try to map the string to one of our standard encodings. If its not
diff --git a/src/xercesc/internal/XMLScanner.cpp b/src/xercesc/internal/XMLScanner.cpp
index 44c7fff8b..997b80738 100644
--- a/src/xercesc/internal/XMLScanner.cpp
+++ b/src/xercesc/internal/XMLScanner.cpp
@@ -1059,7 +1059,11 @@ void XMLScanner::scanPI()
     namePtr = bbName.getRawBuffer();
 
     // See if it is some form of 'xml' and emit a warning
-    if (!XMLString::compareIString(namePtr, XMLUni::fgXMLString))
+    //if (!XMLString::compareIString(namePtr, XMLUni::fgXMLString))
+    if (bbName.getLen() == 3 &&
+        (((namePtr[0] == chLatin_x) || (namePtr[0] == chLatin_X)) &&
+         ((namePtr[1] == chLatin_m) || (namePtr[1] == chLatin_M)) &&
+         ((namePtr[2] == chLatin_l) || (namePtr[2] == chLatin_L))))   
         emitError(XMLErrs::NoPIStartsWithXML);
 
     // If namespaces are enabled, then no colons allowed
@@ -1418,9 +1422,17 @@ void XMLScanner::scanXMLDecl(const DeclTypes type)
             else
             {
                 emitError(XMLErrs::BadStandalone);
-                if (!XMLString::compareIString(rawValue, XMLUni::fgYesString))
+                //if (!XMLString::compareIString(rawValue, XMLUni::fgYesString))
+                //else if (!XMLString::compareIString(rawValue, XMLUni::fgNoString))
+                if (buffers[curString]->getLen() == 3 &&
+                    (((rawValue[0] == chLatin_y) || (rawValue[0] == chLatin_Y)) &&
+                     ((rawValue[1] == chLatin_e) || (rawValue[1] == chLatin_E)) &&
+                     ((rawValue[2] == chLatin_s) || (rawValue[2] == chLatin_S))))   
+                    fStandalone = true;                
+                else if (buffers[curString]->getLen() == 2 &&
+                    (((rawValue[0] == chLatin_n) || (rawValue[0] == chLatin_N)) &&
+                     ((rawValue[1] == chLatin_o) || (rawValue[1] == chLatin_O))))   
                     fStandalone = true;
-                else if (!XMLString::compareIString(rawValue, XMLUni::fgNoString))
                     fStandalone = false;
             }
         }
diff --git a/src/xercesc/parsers/DOMBuilderImpl.cpp b/src/xercesc/parsers/DOMBuilderImpl.cpp
index a978290ba..bbc3e411a 100644
--- a/src/xercesc/parsers/DOMBuilderImpl.cpp
+++ b/src/xercesc/parsers/DOMBuilderImpl.cpp
@@ -125,22 +125,22 @@ void DOMBuilderImpl::setFilter(DOMBuilderFilter* const)
 // ---------------------------------------------------------------------------
 void DOMBuilderImpl::setFeature(const XMLCh* const name, const bool state)
 {
-    if (XMLString::compareIString(name, XMLUni::fgDOMEntities) == 0) {
+    if (XMLString::compareIStringASCII(name, XMLUni::fgDOMEntities) == 0) {
         setCreateEntityReferenceNodes(state);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgDOMComments) == 0) {
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgDOMComments) == 0) {
         setCreateCommentNodes(state);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgDOMDatatypeNormalization) == 0) {
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgDOMDatatypeNormalization) == 0) {
         getScanner()->setNormalizeData(state);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgDOMNamespaces) == 0) {
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgDOMNamespaces) == 0) {
         setDoNamespaces(state);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgDOMWhitespaceInElementContent) == 0) {
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgDOMWhitespaceInElementContent) == 0) {
         setIncludeIgnorableWhitespace(state);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgDOMValidation) == 0) {
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgDOMValidation) == 0) {
 
         fValidation = state;
 
@@ -152,7 +152,7 @@ void DOMBuilderImpl::setFeature(const XMLCh* const name, const bool state)
             setValidationScheme(AbstractDOMParser::Val_Never);
         }
     }
-    else if (XMLString::compareIString(name, XMLUni::fgDOMValidateIfSchema) == 0) {
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgDOMValidateIfSchema) == 0) {
 
         fAutoValidation = state;
 
@@ -163,30 +163,30 @@ void DOMBuilderImpl::setFeature(const XMLCh* const name, const bool state)
             setValidationScheme(AbstractDOMParser::Val_Never);
         }
     }
-    else if (XMLString::compareIString(name, XMLUni::fgDOMCharsetOverridesXMLEncoding) == 0) {
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgDOMCharsetOverridesXMLEncoding) == 0) {
         // in fact, setting this has no effect to the parser
         fCharsetOverridesXMLEncoding = state;
     }
-    else if (XMLString::compareIString(name, XMLUni::fgDOMSupportedMediatypesOnly) == 0 ||
-             XMLString::compareIString(name, XMLUni::fgDOMInfoset) == 0 ||
-             XMLString::compareIString(name, XMLUni::fgDOMCanonicalForm) == 0 ) {
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgDOMSupportedMediatypesOnly) == 0 ||
+             XMLString::compareIStringASCII(name, XMLUni::fgDOMInfoset) == 0 ||
+             XMLString::compareIStringASCII(name, XMLUni::fgDOMCanonicalForm) == 0 ) {
         if (state)
             throw DOMException(DOMException::NOT_SUPPORTED_ERR, 0, getMemoryManager());
     }
-    else if (XMLString::compareIString(name, XMLUni::fgDOMNamespaceDeclarations) == 0 ||
-             XMLString::compareIString(name, XMLUni::fgDOMCDATASections) == 0 ) {
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgDOMNamespaceDeclarations) == 0 ||
+             XMLString::compareIStringASCII(name, XMLUni::fgDOMCDATASections) == 0 ) {
         if (!state)
             throw DOMException(DOMException::NOT_SUPPORTED_ERR, 0, getMemoryManager());
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesSchema) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesSchema) == 0)
     {
         setDoSchema(state);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesSchemaFullChecking) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesSchemaFullChecking) == 0)
     {
         setValidationSchemaFullChecking(state);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesUserAdoptsDOMDocument) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesUserAdoptsDOMDocument) == 0)
     {
         if(state)
             fUserAdoptsDocument = true;
@@ -194,56 +194,56 @@ void DOMBuilderImpl::setFeature(const XMLCh* const name, const bool state)
             fUserAdoptsDocument = false;
     }
 
-    else if (XMLString::compareIString(name, XMLUni::fgXercesLoadExternalDTD) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesLoadExternalDTD) == 0)
     {
         setLoadExternalDTD(state);
     }
 
-    else if (XMLString::compareIString(name, XMLUni::fgXercesContinueAfterFatalError) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesContinueAfterFatalError) == 0)
     {
         setExitOnFirstFatalError(!state);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesValidationErrorAsFatal) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesValidationErrorAsFatal) == 0)
     {
         setValidationConstraintFatal(state);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesCacheGrammarFromParse) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesCacheGrammarFromParse) == 0)
     {
         getScanner()->cacheGrammarFromParse(state);
 
         if (state)
             getScanner()->useCachedGrammarInParse(state);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesUseCachedGrammarInParse) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesUseCachedGrammarInParse) == 0)
     {
         if (state || !getScanner()->isCachingGrammarFromParse())
             getScanner()->useCachedGrammarInParse(state);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesCalculateSrcOfs) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesCalculateSrcOfs) == 0)
     {
         getScanner()->setCalculateSrcOfs(state);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesStandardUriConformant) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesStandardUriConformant) == 0)
     {
         getScanner()->setStandardUriConformant(state);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesDOMHasPSVIInfo) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesDOMHasPSVIInfo) == 0)
     {
         setCreateSchemaInfo(state);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesGenerateSyntheticAnnotations) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesGenerateSyntheticAnnotations) == 0)
     {
         getScanner()->setGenerateSyntheticAnnotations(state);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesValidateAnnotations) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesValidateAnnotations) == 0)
     {
         getScanner()->setValidateAnnotations(state);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesIdentityConstraintChecking) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesIdentityConstraintChecking) == 0)
     {
         getScanner()->setIdentityConstraintChecking(state);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesIgnoreCachedDTD) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesIgnoreCachedDTD) == 0)
     {
         getScanner()->setIgnoredCachedDTD(state);
     }
@@ -254,98 +254,98 @@ void DOMBuilderImpl::setFeature(const XMLCh* const name, const bool state)
 
 bool DOMBuilderImpl::getFeature(const XMLCh* const name) const
 {
-    if (XMLString::compareIString(name, XMLUni::fgDOMEntities) == 0) {
+    if (XMLString::compareIStringASCII(name, XMLUni::fgDOMEntities) == 0) {
         return getCreateEntityReferenceNodes();
     }
-    else if (XMLString::compareIString(name, XMLUni::fgDOMComments) == 0) {
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgDOMComments) == 0) {
         return getCreateCommentNodes();
     }
-    else if (XMLString::compareIString(name, XMLUni::fgDOMDatatypeNormalization) == 0) {
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgDOMDatatypeNormalization) == 0) {
         return getScanner()->getNormalizeData();
     }
-    else if (XMLString::compareIString(name, XMLUni::fgDOMNamespaces) == 0) {
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgDOMNamespaces) == 0) {
         return getDoNamespaces();
     }
-    else if (XMLString::compareIString(name, XMLUni::fgDOMWhitespaceInElementContent) == 0) {
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgDOMWhitespaceInElementContent) == 0) {
         return getIncludeIgnorableWhitespace();
     }
-    else if (XMLString::compareIString(name, XMLUni::fgDOMValidation) == 0) {
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgDOMValidation) == 0) {
         return fValidation;
     }
-    else if (XMLString::compareIString(name, XMLUni::fgDOMValidateIfSchema) == 0) {
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgDOMValidateIfSchema) == 0) {
         return fAutoValidation;
     }
-    else if (XMLString::compareIString(name, XMLUni::fgDOMCharsetOverridesXMLEncoding) == 0) {
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgDOMCharsetOverridesXMLEncoding) == 0) {
         return fCharsetOverridesXMLEncoding;
     }
-    else if (XMLString::compareIString(name, XMLUni::fgDOMSupportedMediatypesOnly) == 0 ||
-             XMLString::compareIString(name, XMLUni::fgDOMInfoset) == 0 ||
-             XMLString::compareIString(name, XMLUni::fgDOMCanonicalForm) == 0 ) {
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgDOMSupportedMediatypesOnly) == 0 ||
+             XMLString::compareIStringASCII(name, XMLUni::fgDOMInfoset) == 0 ||
+             XMLString::compareIStringASCII(name, XMLUni::fgDOMCanonicalForm) == 0 ) {
         return false;
     }
-    else if (XMLString::compareIString(name, XMLUni::fgDOMNamespaceDeclarations) == 0 ||
-             XMLString::compareIString(name, XMLUni::fgDOMCDATASections) == 0 ) {
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgDOMNamespaceDeclarations) == 0 ||
+             XMLString::compareIStringASCII(name, XMLUni::fgDOMCDATASections) == 0 ) {
         return true;
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesSchema) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesSchema) == 0)
     {
         return getDoSchema();
     }
 
-    else if (XMLString::compareIString(name, XMLUni::fgXercesSchemaFullChecking) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesSchemaFullChecking) == 0)
     {
         return getValidationSchemaFullChecking();
     }
 
-    else if (XMLString::compareIString(name, XMLUni::fgXercesIdentityConstraintChecking) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesIdentityConstraintChecking) == 0)
     {
         return getIdentityConstraintChecking();
     }
 
-    else if (XMLString::compareIString(name, XMLUni::fgXercesLoadExternalDTD) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesLoadExternalDTD) == 0)
     {
         return getLoadExternalDTD();
     }
 
-    else if (XMLString::compareIString(name, XMLUni::fgXercesContinueAfterFatalError) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesContinueAfterFatalError) == 0)
     {
         return !getExitOnFirstFatalError();
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesValidationErrorAsFatal) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesValidationErrorAsFatal) == 0)
     {
         return getValidationConstraintFatal();
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesCacheGrammarFromParse) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesCacheGrammarFromParse) == 0)
     {
         return getScanner()->isCachingGrammarFromParse();
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesUseCachedGrammarInParse) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesUseCachedGrammarInParse) == 0)
     {
         return getScanner()->isUsingCachedGrammarInParse();
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesCalculateSrcOfs) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesCalculateSrcOfs) == 0)
     {
         return getScanner()->getCalculateSrcOfs();
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesStandardUriConformant) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesStandardUriConformant) == 0)
     {
         return getScanner()->getStandardUriConformant();
     }
-    else if(XMLString::compareIString(name, XMLUni::fgXercesUserAdoptsDOMDocument) == 0) {
+    else if(XMLString::compareIStringASCII(name, XMLUni::fgXercesUserAdoptsDOMDocument) == 0) {
         return fUserAdoptsDocument;
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesDOMHasPSVIInfo) == 0) {
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesDOMHasPSVIInfo) == 0) {
         return getCreateSchemaInfo();
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesGenerateSyntheticAnnotations) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesGenerateSyntheticAnnotations) == 0)
     {
         return getScanner()->getGenerateSyntheticAnnotations();
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesValidateAnnotations) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesValidateAnnotations) == 0)
     {
         return getScanner()->getValidateAnnotations();
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesIgnoreCachedDTD) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesIgnoreCachedDTD) == 0)
     {
         return getScanner()->getIgnoreCachedDTD();
     }
@@ -358,44 +358,44 @@ bool DOMBuilderImpl::getFeature(const XMLCh* const name) const
 
 bool DOMBuilderImpl::canSetFeature(const XMLCh* const name, const bool state) const
 {
-    if ((XMLString::compareIString(name, XMLUni::fgDOMEntities) == 0) ||
-        (XMLString::compareIString(name, XMLUni::fgDOMComments) == 0) ||
-        (XMLString::compareIString(name, XMLUni::fgDOMDatatypeNormalization) == 0) ||
-        (XMLString::compareIString(name, XMLUni::fgDOMNamespaces) == 0) ||
-        (XMLString::compareIString(name, XMLUni::fgDOMValidation) == 0) ||
-        (XMLString::compareIString(name, XMLUni::fgDOMValidateIfSchema) == 0) ||
-        (XMLString::compareIString(name, XMLUni::fgDOMCharsetOverridesXMLEncoding) == 0) ||
-        (XMLString::compareIString(name, XMLUni::fgDOMWhitespaceInElementContent) == 0) ||
-        (XMLString::compareIString(name, XMLUni::fgXercesUserAdoptsDOMDocument) == 0) ||
-        (XMLString::compareIString(name, XMLUni::fgXercesCalculateSrcOfs) == 0) ||
-        (XMLString::compareIString(name, XMLUni::fgXercesStandardUriConformant) == 0) ||
-        (XMLString::compareIString(name, XMLUni::fgXercesDOMHasPSVIInfo) == 0) ||
-        (XMLString::compareIString(name, XMLUni::fgXercesValidateAnnotations) == 0) ||
-        (XMLString::compareIString(name, XMLUni::fgXercesGenerateSyntheticAnnotations) == 0) ||
-        (XMLString::compareIString(name, XMLUni::fgXercesIdentityConstraintChecking) == 0) ||
-        (XMLString::compareIString(name, XMLUni::fgXercesIgnoreCachedDTD) == 0)
+    if ((XMLString::compareIStringASCII(name, XMLUni::fgDOMEntities) == 0) ||
+        (XMLString::compareIStringASCII(name, XMLUni::fgDOMComments) == 0) ||
+        (XMLString::compareIStringASCII(name, XMLUni::fgDOMDatatypeNormalization) == 0) ||
+        (XMLString::compareIStringASCII(name, XMLUni::fgDOMNamespaces) == 0) ||
+        (XMLString::compareIStringASCII(name, XMLUni::fgDOMValidation) == 0) ||
+        (XMLString::compareIStringASCII(name, XMLUni::fgDOMValidateIfSchema) == 0) ||
+        (XMLString::compareIStringASCII(name, XMLUni::fgDOMCharsetOverridesXMLEncoding) == 0) ||
+        (XMLString::compareIStringASCII(name, XMLUni::fgDOMWhitespaceInElementContent) == 0) ||
+        (XMLString::compareIStringASCII(name, XMLUni::fgXercesUserAdoptsDOMDocument) == 0) ||
+        (XMLString::compareIStringASCII(name, XMLUni::fgXercesCalculateSrcOfs) == 0) ||
+        (XMLString::compareIStringASCII(name, XMLUni::fgXercesStandardUriConformant) == 0) ||
+        (XMLString::compareIStringASCII(name, XMLUni::fgXercesDOMHasPSVIInfo) == 0) ||
+        (XMLString::compareIStringASCII(name, XMLUni::fgXercesValidateAnnotations) == 0) ||
+        (XMLString::compareIStringASCII(name, XMLUni::fgXercesGenerateSyntheticAnnotations) == 0) ||
+        (XMLString::compareIStringASCII(name, XMLUni::fgXercesIdentityConstraintChecking) == 0) ||
+        (XMLString::compareIStringASCII(name, XMLUni::fgXercesIgnoreCachedDTD) == 0)
        ) {
         return true;
     }
 
-    else if (XMLString::compareIString(name, XMLUni::fgDOMSupportedMediatypesOnly) == 0 ||
-             XMLString::compareIString(name, XMLUni::fgDOMInfoset) == 0 ||
-             XMLString::compareIString(name, XMLUni::fgDOMCanonicalForm) == 0 ) {
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgDOMSupportedMediatypesOnly) == 0 ||
+             XMLString::compareIStringASCII(name, XMLUni::fgDOMInfoset) == 0 ||
+             XMLString::compareIStringASCII(name, XMLUni::fgDOMCanonicalForm) == 0 ) {
         if (!state)
             return true;
     }
-    else if (XMLString::compareIString(name, XMLUni::fgDOMNamespaceDeclarations) == 0 ||
-             XMLString::compareIString(name, XMLUni::fgDOMCDATASections) == 0 ) {
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgDOMNamespaceDeclarations) == 0 ||
+             XMLString::compareIStringASCII(name, XMLUni::fgDOMCDATASections) == 0 ) {
         if (state)
             return true;
     }
-    else if ((XMLString::compareIString(name, XMLUni::fgXercesSchema) == 0) ||
-             (XMLString::compareIString(name, XMLUni::fgXercesSchemaFullChecking) == 0) ||
-             (XMLString::compareIString(name, XMLUni::fgXercesLoadExternalDTD) == 0) ||
-             (XMLString::compareIString(name, XMLUni::fgXercesContinueAfterFatalError) == 0) ||
-             (XMLString::compareIString(name, XMLUni::fgXercesValidationErrorAsFatal) == 0) ||
-             (XMLString::compareIString(name, XMLUni::fgXercesCacheGrammarFromParse) == 0) ||
-             (XMLString::compareIString(name, XMLUni::fgXercesUseCachedGrammarInParse) == 0)) {
+    else if ((XMLString::compareIStringASCII(name, XMLUni::fgXercesSchema) == 0) ||
+             (XMLString::compareIStringASCII(name, XMLUni::fgXercesSchemaFullChecking) == 0) ||
+             (XMLString::compareIStringASCII(name, XMLUni::fgXercesLoadExternalDTD) == 0) ||
+             (XMLString::compareIStringASCII(name, XMLUni::fgXercesContinueAfterFatalError) == 0) ||
+             (XMLString::compareIStringASCII(name, XMLUni::fgXercesValidationErrorAsFatal) == 0) ||
+             (XMLString::compareIStringASCII(name, XMLUni::fgXercesCacheGrammarFromParse) == 0) ||
+             (XMLString::compareIStringASCII(name, XMLUni::fgXercesUseCachedGrammarInParse) == 0)) {
         return true;
     }
     return false;
@@ -407,16 +407,16 @@ bool DOMBuilderImpl::canSetFeature(const XMLCh* const name, const bool state) co
 // ---------------------------------------------------------------------------
 void DOMBuilderImpl::setProperty(const XMLCh* const name, void* value)
 {
-	if (XMLString::compareIString(name, XMLUni::fgXercesSchemaExternalSchemaLocation) == 0)
+	if (XMLString::compareIStringASCII(name, XMLUni::fgXercesSchemaExternalSchemaLocation) == 0)
 	{
 		setExternalSchemaLocation((XMLCh*)value);
 	}
 
-	else if (XMLString::compareIString(name, XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation) == 0)
+	else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation) == 0)
 	{
 		setExternalNoNamespaceSchemaLocation((XMLCh*)value);
 	}
-	else if (XMLString::compareIString(name, XMLUni::fgXercesSecurityManager) == 0)
+	else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesSecurityManager) == 0)
 	{
 		setSecurityManager((SecurityManager*)value);
 	}
@@ -436,11 +436,11 @@ void DOMBuilderImpl::setProperty(const XMLCh* const name, void* value)
 
 void* DOMBuilderImpl::getProperty(const XMLCh* const name) const
 {
-    if (XMLString::compareIString(name, XMLUni::fgXercesSchemaExternalSchemaLocation) == 0)
+    if (XMLString::compareIStringASCII(name, XMLUni::fgXercesSchemaExternalSchemaLocation) == 0)
         return (void*)getExternalSchemaLocation();
-    else if (XMLString::compareIString(name, XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation) == 0)
         return (void*)getExternalNoNamespaceSchemaLocation();
-    else if (XMLString::compareIString(name, XMLUni::fgXercesSecurityManager) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesSecurityManager) == 0)
         return (void*)getSecurityManager();
     else
         throw DOMException(DOMException::NOT_FOUND_ERR, 0, getMemoryManager());
diff --git a/src/xercesc/parsers/SAX2XMLReaderImpl.cpp b/src/xercesc/parsers/SAX2XMLReaderImpl.cpp
index cf5c4d5ab..93761d879 100644
--- a/src/xercesc/parsers/SAX2XMLReaderImpl.cpp
+++ b/src/xercesc/parsers/SAX2XMLReaderImpl.cpp
@@ -16,6 +16,9 @@
 
 /*
  * $Log$
+ * Revision 1.44  2005/03/20 19:02:45  cargilld
+ * Implement versions of uppercase and compareIstring that only check a to z, instead of all characters, and don't rely on functionality provided in the transcoders.
+ *
  * Revision 1.43  2005/02/25 11:31:07  amassari
  * Performance improvements by David Bertoni (jira# 1343)
  *
@@ -1487,11 +1490,11 @@ void SAX2XMLReaderImpl::setFeature(const XMLCh* const name, const bool value)
     if (fParseInProgress)
         throw SAXNotSupportedException("Feature modification is not supported during parse.", fMemoryManager);
 	
-    if (XMLString::compareIString(name, XMLUni::fgSAX2CoreNameSpaces) == 0)
+    if (XMLString::compareIStringASCII(name, XMLUni::fgSAX2CoreNameSpaces) == 0)
     {
         setDoNamespaces(value);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgSAX2CoreValidation) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgSAX2CoreValidation) == 0)
     {
         fValidation = value;
         if (fValidation)
@@ -1502,11 +1505,11 @@ void SAX2XMLReaderImpl::setFeature(const XMLCh* const name, const bool value)
         else
             setValidationScheme(Val_Never);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgSAX2CoreNameSpacePrefixes) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgSAX2CoreNameSpacePrefixes) == 0)
     {
         fNamespacePrefix = value;
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesDynamic) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesDynamic) == 0)
     {
         fAutoValidation = value;
         // for auto validation, the sax2 core validation feature must also be enabled.
@@ -1518,59 +1521,59 @@ void SAX2XMLReaderImpl::setFeature(const XMLCh* const name, const bool value)
         else
             setValidationScheme(Val_Never);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesSchema) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesSchema) == 0)
     {
         setDoSchema(value);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesSchemaFullChecking) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesSchemaFullChecking) == 0)
     {
         fScanner->setValidationSchemaFullChecking(value);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesIdentityConstraintChecking) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesIdentityConstraintChecking) == 0)
     {
         fScanner->setIdentityConstraintChecking(value);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesLoadExternalDTD) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesLoadExternalDTD) == 0)
     {
         fScanner->setLoadExternalDTD(value);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesContinueAfterFatalError) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesContinueAfterFatalError) == 0)
     {
         fScanner->setExitOnFirstFatal(!value);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesValidationErrorAsFatal) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesValidationErrorAsFatal) == 0)
     {
         fScanner->setValidationConstraintFatal(value);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesCacheGrammarFromParse) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesCacheGrammarFromParse) == 0)
     {
         fScanner->cacheGrammarFromParse(value);
 
         if (value)
             fScanner->useCachedGrammarInParse(value);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesUseCachedGrammarInParse) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesUseCachedGrammarInParse) == 0)
     {
         if (value || !fScanner->isCachingGrammarFromParse())
             fScanner->useCachedGrammarInParse(value);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesCalculateSrcOfs) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesCalculateSrcOfs) == 0)
     {
         fScanner->setCalculateSrcOfs(value);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesStandardUriConformant) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesStandardUriConformant) == 0)
     {
         fScanner->setStandardUriConformant(value);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesGenerateSyntheticAnnotations) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesGenerateSyntheticAnnotations) == 0)
     {
         fScanner->setGenerateSyntheticAnnotations(value);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesValidateAnnotations) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesValidateAnnotations) == 0)
     {
         fScanner->setValidateAnnotations(value);
     }
-    else if (XMLString::compareIString(name, XMLUni::fgXercesIgnoreCachedDTD) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesIgnoreCachedDTD) == 0)
     {
         fScanner->setIgnoredCachedDTD(value);
     }
@@ -1580,39 +1583,39 @@ void SAX2XMLReaderImpl::setFeature(const XMLCh* const name, const bool value)
 
 bool SAX2XMLReaderImpl::getFeature(const XMLCh* const name) const
 {
-    if (XMLString::compareIString(name, XMLUni::fgSAX2CoreNameSpaces) == 0)
+    if (XMLString::compareIStringASCII(name, XMLUni::fgSAX2CoreNameSpaces) == 0)
         return getDoNamespaces();
-    else if (XMLString::compareIString(name, XMLUni::fgSAX2CoreValidation) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgSAX2CoreValidation) == 0)
         return fValidation;
-    else if (XMLString::compareIString(name, XMLUni::fgSAX2CoreNameSpacePrefixes) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgSAX2CoreNameSpacePrefixes) == 0)
         return fNamespacePrefix;
-    else if (XMLString::compareIString(name, XMLUni::fgXercesDynamic) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesDynamic) == 0)
         return fAutoValidation;
-    else if (XMLString::compareIString(name, XMLUni::fgXercesSchema) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesSchema) == 0)
         return getDoSchema();
-    else if (XMLString::compareIString(name, XMLUni::fgXercesSchemaFullChecking) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesSchemaFullChecking) == 0)
         return fScanner->getValidationSchemaFullChecking();
-    else if (XMLString::compareIString(name, XMLUni::fgXercesIdentityConstraintChecking) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesIdentityConstraintChecking) == 0)
         return fScanner->getIdentityConstraintChecking();
-    else if (XMLString::compareIString(name, XMLUni::fgXercesLoadExternalDTD) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesLoadExternalDTD) == 0)
         return fScanner->getLoadExternalDTD();
-    else if (XMLString::compareIString(name, XMLUni::fgXercesContinueAfterFatalError) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesContinueAfterFatalError) == 0)
         return !fScanner->getExitOnFirstFatal();
-    else if (XMLString::compareIString(name, XMLUni::fgXercesValidationErrorAsFatal) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesValidationErrorAsFatal) == 0)
         return fScanner->getValidationConstraintFatal();
-    else if (XMLString::compareIString(name, XMLUni::fgXercesCacheGrammarFromParse) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesCacheGrammarFromParse) == 0)
         return fScanner->isCachingGrammarFromParse();
-    else if (XMLString::compareIString(name, XMLUni::fgXercesUseCachedGrammarInParse) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesUseCachedGrammarInParse) == 0)
         return fScanner->isUsingCachedGrammarInParse();
-    else if (XMLString::compareIString(name, XMLUni::fgXercesCalculateSrcOfs) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesCalculateSrcOfs) == 0)
         return fScanner->getCalculateSrcOfs();
-    else if (XMLString::compareIString(name, XMLUni::fgXercesStandardUriConformant) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesStandardUriConformant) == 0)
         return fScanner->getStandardUriConformant();
-    else if (XMLString::compareIString(name, XMLUni::fgXercesGenerateSyntheticAnnotations) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesGenerateSyntheticAnnotations) == 0)
         return fScanner->getGenerateSyntheticAnnotations();
-    else if (XMLString::compareIString(name, XMLUni::fgXercesValidateAnnotations) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesValidateAnnotations) == 0)
         return fScanner->getValidateAnnotations();
-    else if (XMLString::compareIString(name, XMLUni::fgXercesIgnoreCachedDTD) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesIgnoreCachedDTD) == 0)
         return fScanner->getIgnoreCachedDTD();
     else
        throw SAXNotRecognizedException("Unknown Feature", fMemoryManager);
@@ -1625,15 +1628,15 @@ void SAX2XMLReaderImpl::setProperty(const XMLCh* const name, void* value)
 	if (fParseInProgress)
 		throw SAXNotSupportedException("Property modification is not supported during parse.", fMemoryManager);
 
-	if (XMLString::compareIString(name, XMLUni::fgXercesSchemaExternalSchemaLocation) == 0)
+	if (XMLString::compareIStringASCII(name, XMLUni::fgXercesSchemaExternalSchemaLocation) == 0)
 	{
 		fScanner->setExternalSchemaLocation((XMLCh*)value);
 	}
-	else if (XMLString::compareIString(name, XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation) == 0)
+	else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation) == 0)
 	{
 		fScanner->setExternalNoNamespaceSchemaLocation((XMLCh*)value);
 	}
-	else if (XMLString::compareIString(name, XMLUni::fgXercesSecurityManager) == 0)
+	else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesSecurityManager) == 0)
 	{
 		fScanner->setSecurityManager((SecurityManager*)value);
 	}
@@ -1662,11 +1665,11 @@ void SAX2XMLReaderImpl::setProperty(const XMLCh* const name, void* value)
 
 void* SAX2XMLReaderImpl::getProperty(const XMLCh* const name) const
 {
-    if (XMLString::compareIString(name, XMLUni::fgXercesSchemaExternalSchemaLocation) == 0)
+    if (XMLString::compareIStringASCII(name, XMLUni::fgXercesSchemaExternalSchemaLocation) == 0)
         return (void*)fScanner->getExternalSchemaLocation();
-    else if (XMLString::compareIString(name, XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation) == 0)
         return (void*)fScanner->getExternalNoNamespaceSchemaLocation();
-    else if (XMLString::compareIString(name, XMLUni::fgXercesSecurityManager) == 0)
+    else if (XMLString::compareIStringASCII(name, XMLUni::fgXercesSecurityManager) == 0)
         return (void*)fScanner->getSecurityManager();
     else if (XMLString::equals(name, XMLUni::fgXercesScannerName))
         return (void*)fScanner->getName();
diff --git a/src/xercesc/util/HexBin.cpp b/src/xercesc/util/HexBin.cpp
index 8c80a2dec..e4e184325 100644
--- a/src/xercesc/util/HexBin.cpp
+++ b/src/xercesc/util/HexBin.cpp
@@ -16,6 +16,9 @@
 
 /*
  * $Log$
+ * Revision 1.8  2005/03/20 19:02:45  cargilld
+ * Implement versions of uppercase and compareIstring that only check a to z, instead of all characters, and don't rely on functionality provided in the transcoders.
+ *
  * Revision 1.7  2005/01/07 15:12:10  amassari
  * Removed warnings
  *
@@ -98,7 +101,7 @@ XMLCh* HexBin::getCanonicalRepresentation(const XMLCh*          const hexData
         return 0;
 
     XMLCh* retStr = XMLString::replicate(hexData, manager);
-    XMLString::upperCase(retStr);
+    XMLString::upperCaseASCII(retStr);
 
     return retStr;
 }
diff --git a/src/xercesc/util/TransService.cpp b/src/xercesc/util/TransService.cpp
index cb3be7763..81beb591d 100644
--- a/src/xercesc/util/TransService.cpp
+++ b/src/xercesc/util/TransService.cpp
@@ -159,7 +159,7 @@ XMLTransService::makeNewTranscoderFor(  const   XMLCh* const            encoding
         resValue = XMLTransService::InternalFailure;
         return 0;
     }
-    XMLString::upperCase(upBuf);
+    XMLString::upperCaseASCII(upBuf);
     ENameMap* ourMapping = gMappings->get(upBuf);
 
     // If we found it, then call the factory method for it
diff --git a/src/xercesc/util/XMLString.cpp b/src/xercesc/util/XMLString.cpp
index 89fc353d8..0af072460 100644
--- a/src/xercesc/util/XMLString.cpp
+++ b/src/xercesc/util/XMLString.cpp
@@ -952,6 +952,49 @@ int XMLString::compareIString(  const   XMLCh* const    str1
     return XMLPlatformUtils::fgTransService->compareIString(str1, str2);
 }
 
+int XMLString::compareIStringASCII(  const   XMLCh* const    str1
+                                     , const XMLCh* const    str2)
+{
+    const XMLCh* psz1 = str1;
+    const XMLCh* psz2 = str2;
+
+    if (psz1 == 0 || psz2 == 0) {
+
+        if (psz1 == 0) {
+            return 0 - XMLString::stringLen(psz2);
+        }
+		else if (psz2 == 0) {
+            return XMLString::stringLen(psz1);
+        }
+    }
+
+    XMLCh ch1;
+    XMLCh ch2;
+
+    while (true) {
+        if (*psz1 >= chLatin_A && *psz1 <= chLatin_Z)
+            ch1 = *psz1 - chLatin_A + chLatin_a;
+        else
+            ch1 = *psz1;
+        if (*psz2 >= chLatin_A && *psz2 <= chLatin_Z)
+            ch2 = *psz2 - chLatin_A + chLatin_a;
+        else
+            ch2 = *psz2;
+
+        // If an inequality, then return difference
+        if (ch1 != ch2)
+            return int(ch1) - int(ch2);
+
+        // If either ended, then both ended, so equal
+        if (!ch1)
+            break;
+
+        // Move upwards to next chars
+        psz1++;
+        psz2++;
+    }
+    return 0;
+}    
 
 int XMLString::compareNString(  const   XMLCh* const    str1
                                 , const XMLCh* const    str2
@@ -1407,6 +1450,21 @@ void XMLString::upperCase(XMLCh* const toUpperCase)
     XMLPlatformUtils::fgTransService->upperCase(toUpperCase);
 }
 
+void XMLString::upperCaseASCII(XMLCh* const toUpperCase)
+{
+    XMLCh* psz1 = toUpperCase;
+
+    if (!psz1)
+        return;
+
+    while (*psz1) {
+        if (*psz1 >= chLatin_a && *psz1 <= chLatin_z)
+            *psz1 = *psz1 - chLatin_a + chLatin_A;
+
+        psz1++;        
+    }    
+}
+
 
 void XMLString::lowerCase(XMLCh* const toLowerCase)
 {
diff --git a/src/xercesc/util/XMLString.hpp b/src/xercesc/util/XMLString.hpp
index 418f72305..606ece217 100644
--- a/src/xercesc/util/XMLString.hpp
+++ b/src/xercesc/util/XMLString.hpp
@@ -16,6 +16,9 @@
 
 /*
  * $Log$
+ * Revision 1.33  2005/03/20 19:02:45  cargilld
+ * Implement versions of uppercase and compareIstring that only check a to z, instead of all characters, and don't rely on functionality provided in the transcoders.
+ *
  * Revision 1.32  2005/03/08 09:04:09  amassari
  * Improve performances of XMLString::tokenizeString (jira# 1363) - patch by Christian Will
  *
@@ -342,6 +345,24 @@ public:
         , const XMLCh* const    str2
     );
 
+    /** Lexicographically compares lowercase versions of <code>str1</code> and
+      * <code>str2</code> and returns a value indicating their relationship.
+      * The routine only lowercases A to Z.
+      * @param str1 Null-terminated ASCII string to compare
+      * @param str2 Null-terminated ASCII string to compare
+      * @return The return value indicates the relation of <code>str1</code> to
+      * <code>str2</code> as follows
+      *  Less than 0 means <code>str1</code> is less than <code>str2</code>
+      *  Equal to 0 means <code>str1</code> is identical to <code>str2</code>
+      *  Greater than 0 means <code>str1</code> is more than <code>str2</code>
+      */
+    static int compareIStringASCII
+    (
+        const   XMLCh* const    str1
+        , const XMLCh* const    str2
+    );
+
+
 
     /** Lexicographically compares, at most, the first count characters in
       * <code>str1</code> and <code>str2</code> and returns a value indicating the
@@ -1492,6 +1513,13 @@ public:
       */
     static void upperCase(XMLCh* const toUpperCase);
 
+    /** Converts a string to uppercase
+      * The routine only uppercases A to Z.
+      * @param toUpperCase The string which needs to be converted to uppercase.
+      *        On return, this buffer also holds the converted uppercase string
+      */
+    static void upperCaseASCII(XMLCh* const toUpperCase);
+
 	/** Converts a string to lowercase
       * @param toLowerCase The string which needs to be converted to lowercase.
       *        On return, this buffer also holds the converted lowercase string
diff --git a/src/xercesc/util/XMLURL.cpp b/src/xercesc/util/XMLURL.cpp
index f7800ac94..c7c98b01f 100644
--- a/src/xercesc/util/XMLURL.cpp
+++ b/src/xercesc/util/XMLURL.cpp
@@ -137,7 +137,7 @@ XMLURL::Protocols XMLURL::lookupByName(const XMLCh* const protoName)
 {
     for (unsigned int index = 0; index < XMLURL::Protocols_Count; index++)
     {
-        if (!XMLString::compareIString(gProtoList[index].prefix, protoName))
+        if (!XMLString::compareIStringASCII(protoName, gProtoList[index].prefix))
             return gProtoList[index].protocol;
     }
     return XMLURL::Unknown;
@@ -580,7 +580,7 @@ BinInputStream* XMLURL::makeNewStream() const
     //
     if (fProtocol == XMLURL::File)
     {
-        if (!fHost || !XMLString::compareIString(fHost, XMLUni::fgLocalHostString))
+        if (!fHost || !XMLString::compareIStringASCII(fHost, XMLUni::fgLocalHostString))
         {
 
             XMLCh* realPath = XMLString::replicate(fPath, fMemoryManager);
diff --git a/src/xercesc/validators/DTD/DTDScanner.cpp b/src/xercesc/validators/DTD/DTDScanner.cpp
index 395a5ef77..c064350f7 100644
--- a/src/xercesc/validators/DTD/DTDScanner.cpp
+++ b/src/xercesc/validators/DTD/DTDScanner.cpp
@@ -16,6 +16,9 @@
 
 /*
  * $Log$
+ * Revision 1.38  2005/03/20 19:02:45  cargilld
+ * Implement versions of uppercase and compareIstring that only check a to z, instead of all characters, and don't rely on functionality provided in the transcoders.
+ *
  * Revision 1.37  2005/01/07 15:28:49  amassari
  * Removed warnings
  *
@@ -3724,7 +3727,11 @@ void DTDScanner::scanPI()
     namePtr = bbName.getRawBuffer();
 
     // See if it issome form of 'xml' and emit a warning
-    if (!XMLString::compareIString(namePtr, XMLUni::fgXMLString))
+    //if (!XMLString::compareIString(namePtr, XMLUni::fgXMLString))
+    if (bbName.getLen() == 3 &&
+        (((namePtr[0] == chLatin_x) || (namePtr[0] == chLatin_X)) &&
+         ((namePtr[1] == chLatin_m) || (namePtr[1] == chLatin_M)) &&
+         ((namePtr[2] == chLatin_l) || (namePtr[2] == chLatin_L))))       
         fScanner->emitError(XMLErrs::NoPIStartsWithXML);
 
     // If namespaces are enabled, then no colons allowed
-- 
GitLab