From cab235b1d438a247c5fdb9822c4c5f26395df957 Mon Sep 17 00:00:00 2001
From: Khaled Noaman <knoaman@apache.org>
Date: Tue, 9 Apr 2002 15:44:00 +0000
Subject: [PATCH] Add lower case string support.

git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@173617 13f79535-47bb-0310-9956-ffa450edef68
---
 src/xercesc/util/TransService.hpp             |  8 +++--
 .../util/Transcoders/ICU/ICUTransService.cpp  | 10 +++++++
 .../util/Transcoders/ICU/ICUTransService.hpp  |  8 +++--
 .../Transcoders/Iconv/IconvTransService.cpp   |  9 ++++++
 .../Transcoders/Iconv/IconvTransService.hpp   |  8 +++--
 .../Iconv390/Iconv390TransService.cpp         | 10 +++++++
 .../Iconv390/Iconv390TransService.hpp         |  8 +++--
 .../Iconv400/Iconv400TransService.cpp         |  5 ++++
 .../Iconv400/Iconv400TransService.hpp         |  1 +
 .../IconvFBSD/IconvFBSDTransService.cpp       |  7 +++++
 .../IconvFBSD/IconvFBSDTransService.hpp       |  8 +++--
 .../MacOSUnicodeConverter.cpp                 | 30 +++++++++++++++++++
 .../MacOSUnicodeConverter.hpp                 |  2 +-
 .../Transcoders/Win32/Win32TransService.cpp   |  4 +++
 .../Transcoders/Win32/Win32TransService.hpp   |  8 +++--
 src/xercesc/util/XMLString.cpp                |  2 +-
 16 files changed, 114 insertions(+), 14 deletions(-)

diff --git a/src/xercesc/util/TransService.hpp b/src/xercesc/util/TransService.hpp
index dd4746e8d..5224f26c5 100644
--- a/src/xercesc/util/TransService.hpp
+++ b/src/xercesc/util/TransService.hpp
@@ -56,8 +56,11 @@
 
 /*
  * $Log$
- * Revision 1.1  2002/02/01 22:22:13  peiyongz
- * Initial revision
+ * Revision 1.2  2002/04/09 15:44:00  knoaman
+ * Add lower case string support.
+ *
+ * Revision 1.1.1.1  2002/02/01 22:22:13  peiyongz
+ * sane_include
  *
  * Revision 1.14  2001/11/01 23:37:07  jasons
  * 2001-11-01  Jason E. Stewart  <jason@openinformatics.com>
@@ -211,6 +214,7 @@ public :
     virtual bool supportsSrcOfs() const = 0;
 
     virtual void upperCase(XMLCh* const toUpperCase) const = 0;
+    virtual void lowerCase(XMLCh* const toLowerCase) const = 0;
 
 	// -----------------------------------------------------------------------
     //	Allow users to add their own encodings to the intrinsinc mapping
diff --git a/src/xercesc/util/Transcoders/ICU/ICUTransService.cpp b/src/xercesc/util/Transcoders/ICU/ICUTransService.cpp
index 980b2fa86..79cff2921 100644
--- a/src/xercesc/util/Transcoders/ICU/ICUTransService.cpp
+++ b/src/xercesc/util/Transcoders/ICU/ICUTransService.cpp
@@ -301,6 +301,16 @@ void ICUTransService::upperCase(XMLCh* const toUpperCase) const
     }
 }
 
+void ICUTransService::lowerCase(XMLCh* const toLowerCase) const
+{
+    XMLCh* outPtr = toLowerCase;
+    while (*outPtr)
+    {
+        *outPtr = XMLCh(Unicode::toLowerCase(UChar(*outPtr)));
+        outPtr++;
+    }
+}
+
 
 
 // ---------------------------------------------------------------------------
diff --git a/src/xercesc/util/Transcoders/ICU/ICUTransService.hpp b/src/xercesc/util/Transcoders/ICU/ICUTransService.hpp
index 031fc63d2..89c086e3e 100644
--- a/src/xercesc/util/Transcoders/ICU/ICUTransService.hpp
+++ b/src/xercesc/util/Transcoders/ICU/ICUTransService.hpp
@@ -56,8 +56,11 @@
 
 /*
  * $Log$
- * Revision 1.1  2002/02/01 22:22:36  peiyongz
- * Initial revision
+ * Revision 1.2  2002/04/09 15:44:00  knoaman
+ * Add lower case string support.
+ *
+ * Revision 1.1.1.1  2002/02/01 22:22:36  peiyongz
+ * sane_include
  *
  * Revision 1.10  2000/03/18 00:00:03  roddey
  * Initial updates for two way transcoding support
@@ -142,6 +145,7 @@ public :
     virtual bool supportsSrcOfs() const;
 
     virtual void upperCase(XMLCh* const toUpperCase) const;
+    virtual void lowerCase(XMLCh* const toLowerCase) const;
 
 
 protected :
diff --git a/src/xercesc/util/Transcoders/Iconv/IconvTransService.cpp b/src/xercesc/util/Transcoders/Iconv/IconvTransService.cpp
index 442b59936..5c71301ba 100644
--- a/src/xercesc/util/Transcoders/Iconv/IconvTransService.cpp
+++ b/src/xercesc/util/Transcoders/Iconv/IconvTransService.cpp
@@ -227,6 +227,15 @@ void IconvTransService::upperCase(XMLCh* const toUpperCase) const
     }
 }
 
+void IconvTransService::lowerCase(XMLCh* const toLowerCase) const
+{
+    XMLCh* outPtr = toLowerCase;
+    while (*outPtr)
+    {
+        *outPtr = towlower(*outPtr);
+        outPtr++;
+    }
+}
 
 
 // ---------------------------------------------------------------------------
diff --git a/src/xercesc/util/Transcoders/Iconv/IconvTransService.hpp b/src/xercesc/util/Transcoders/Iconv/IconvTransService.hpp
index 7ac9a3c2a..9121f8de2 100644
--- a/src/xercesc/util/Transcoders/Iconv/IconvTransService.hpp
+++ b/src/xercesc/util/Transcoders/Iconv/IconvTransService.hpp
@@ -56,8 +56,11 @@
 
 /*
  * $Log$
- * Revision 1.1  2002/02/01 22:22:36  peiyongz
- * Initial revision
+ * Revision 1.2  2002/04/09 15:44:00  knoaman
+ * Add lower case string support.
+ *
+ * Revision 1.1.1.1  2002/02/01 22:22:36  peiyongz
+ * sane_include
  *
  * Revision 1.8  2000/03/02 19:55:35  roddey
  * This checkin includes many changes done while waiting for the
@@ -132,6 +135,7 @@ public :
     virtual bool supportsSrcOfs() const;
 
     virtual void upperCase(XMLCh* const toUpperCase) const;
+    virtual void lowerCase(XMLCh* const toLowerCase) const;
 
 protected :
     // -----------------------------------------------------------------------
diff --git a/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.cpp b/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.cpp
index 038c0f6fb..d0491c152 100644
--- a/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.cpp
+++ b/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.cpp
@@ -334,6 +334,16 @@ void Iconv390TransService::upperCase(XMLCh* const toUpperCase) const
     }
 }
 
+void Iconv390TransService::lowerCase(XMLCh* const toLowerCase) const
+{
+    XMLCh* outPtr = toLowerCase;
+    while (*outPtr != 0) {
+	if ((*outPtr >= 0x41) && (*outPtr <= 0x5A))
+	    *outPtr = *outPtr + 0x20;
+	outPtr++;
+    }
+}
+
 // ---------------------------------------------------------------------------
 unsigned int Iconv390LCPTranscoder::calcRequiredSize(const char* const srcText)
 {
diff --git a/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.hpp b/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.hpp
index 30675d327..f0b7839a4 100644
--- a/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.hpp
+++ b/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.hpp
@@ -56,8 +56,11 @@
 
 /*
  * $Log$
- * Revision 1.1  2002/02/01 22:22:36  peiyongz
- * Initial revision
+ * Revision 1.2  2002/04/09 15:44:00  knoaman
+ * Add lower case string support.
+ *
+ * Revision 1.1.1.1  2002/02/01 22:22:36  peiyongz
+ * sane_include
  *
  * Revision 1.3  2000/03/02 19:55:36  roddey
  * This checkin includes many changes done while waiting for the
@@ -125,6 +128,7 @@ public :
     virtual bool supportsSrcOfs() const;
 
     virtual void upperCase(XMLCh* const toUpperCase) const;
+    virtual void lowerCase(XMLCh* const toLowerCase) const;
 
 protected :
     // -----------------------------------------------------------------------
diff --git a/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.cpp b/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.cpp
index 83bdecbc1..2b3b7e7b4 100644
--- a/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.cpp
+++ b/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.cpp
@@ -245,6 +245,11 @@ void Iconv400TransService::upperCase(XMLCh* const toUpperCase) const
     }
 }
 
+void Iconv400TransService::lowerCase(XMLCh* const toLowerCase) const
+{
+    //TO DO
+}
+
 // ---------------------------------------------------------------------------
 //  Iconv400TransService: The virtual transcoding service API
 // ---------------------------------------------------------------------------
diff --git a/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.hpp b/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.hpp
index 95e4b2017..7c87baaa6 100644
--- a/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.hpp
+++ b/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.hpp
@@ -107,6 +107,7 @@ public :
     virtual bool supportsSrcOfs() const;
 
     virtual void upperCase(XMLCh* const toUpperCase) const;
+    virtual void lowerCase(XMLCh* const toLowerCase) const;
 
 
 protected :
diff --git a/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp b/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp
index 39845b478..68056fb07 100644
--- a/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp
+++ b/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.3  2002/04/09 15:44:00  knoaman
+ * Add lower case string support.
+ *
  * Revision 1.2  2002/03/18 13:39:11  tng
  * [Bug 7162 ] IconvFreeBSDTransService.cpp needs an #include statement fixed to use xercesc.
  *
@@ -830,6 +833,10 @@ void IconvFBSDTransService::upperCase(XMLCh* const toUpperCase) const
     }
 }
 
+void IconvFBSDTransService::lowerCase(XMLCh* const toLowerCase) const
+{
+    //TO DO
+}
 
 // ---------------------------------------------------------------------------
 //  IconvFBSDLCPTranscoder: The virtual transcoder API
diff --git a/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.hpp b/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.hpp
index 7e3983a1b..550a81a15 100644
--- a/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.hpp
+++ b/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.hpp
@@ -56,8 +56,11 @@
 
 /*
  * $Log$
- * Revision 1.1  2002/02/01 22:22:36  peiyongz
- * Initial revision
+ * Revision 1.2  2002/04/09 15:44:00  knoaman
+ * Add lower case string support.
+ *
+ * Revision 1.1.1.1  2002/02/01 22:22:36  peiyongz
+ * sane_include
  *
  * Revision 1.3  2002/01/14 19:45:15  tng
  * Support IconvFBSD in multi-threading environment with all the possible combinations of threading and transcoding options.  By Max Gotlib.
@@ -237,6 +240,7 @@ public :
     virtual bool supportsSrcOfs() const;
 
     virtual void upperCase(XMLCh* const toUpperCase) const;
+    virtual void lowerCase(XMLCh* const toUpperCase) const;
 
 protected :
     // -----------------------------------------------------------------------
diff --git a/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.cpp b/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.cpp
index 16d714be5..06ed803c2 100644
--- a/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.cpp
+++ b/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.cpp
@@ -492,6 +492,36 @@ void MacOSUnicodeConverter::upperCase(XMLCh* const toUpperCase) const
 #endif
 }
 
+void MacOSUnicodeConverter::lowerCase(XMLCh* const toLowerCase) const
+{
+	//	ะตะตะต TODO: Support CFString for this conversion
+#if defined(XML_METROWERKS)
+	// Use this if there's a reasonable c library available.
+	// Metrowerks does this reasonably
+	wchar_t * p = (wchar_t*) toLowerCase;
+	wchar_t c;
+	
+	while ((c = *p) != 0)
+		*p++ = std::towlower(c);
+#elif defined(XML_MACOSX) || true
+	// This might work, assuming we're on an ascii compiler.
+	// We'll use this under ProjectBuilder for now.
+	// Note that this only handles the ascii portion of the
+	// string, leaving all other characters in original case.
+	wchar_t * p = (wchar_t*)toLowerCase;
+	wchar_t c;
+	
+	while ((c = *p) != 0)
+	{
+		if (c >= 'A' && c <= 'Z')
+			c += 'a' - 'A';
+		*p++ = c;
+	}
+#else
+	#error Sorry, no support for lowerCase
+#endif
+}
+
 
 void
 MacOSUnicodeConverter::ConvertWideToNarrow(const XMLCh* wide, char* narrow, std::size_t maxChars)
diff --git a/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.hpp b/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.hpp
index 3d418f225..fe157e391 100644
--- a/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.hpp
+++ b/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.hpp
@@ -111,7 +111,7 @@ public :
     virtual bool supportsSrcOfs() const;
 
     virtual void upperCase(XMLCh* const toUpperCase) const;
-
+    virtual void lowerCase(XMLCh* const toLowerCase) const;
 
 protected :
     // -----------------------------------------------------------------------
diff --git a/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp b/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp
index d4f063cdd..b5556fb1f 100644
--- a/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp
+++ b/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp
@@ -489,6 +489,10 @@ void Win32TransService::upperCase(XMLCh* const toUpperCase) const
     _wcsupr(toUpperCase);
 }
 
+void Win32TransService::lowerCase(XMLCh* const toLowerCase) const
+{
+    _wcslwr(toLowerCase);
+}
 
 bool Win32TransService::isAlias(const   HKEY            encodingKey
                     ,       char* const     aliasBuf 
diff --git a/src/xercesc/util/Transcoders/Win32/Win32TransService.hpp b/src/xercesc/util/Transcoders/Win32/Win32TransService.hpp
index 9d31d4946..788098f46 100644
--- a/src/xercesc/util/Transcoders/Win32/Win32TransService.hpp
+++ b/src/xercesc/util/Transcoders/Win32/Win32TransService.hpp
@@ -56,8 +56,11 @@
 
 /*
  * $Log$
- * Revision 1.1  2002/02/01 22:22:37  peiyongz
- * Initial revision
+ * Revision 1.2  2002/04/09 15:44:00  knoaman
+ * Add lower case string support.
+ *
+ * Revision 1.1.1.1  2002/02/01 22:22:37  peiyongz
+ * sane_include
  *
  * Revision 1.10  2000/05/09 00:22:45  andyh
  * Memory Cleanup.  XMLPlatformUtils::Terminate() deletes all lazily
@@ -154,6 +157,7 @@ public :
     virtual bool supportsSrcOfs() const;
 
     virtual void upperCase(XMLCh* const toUpperCase) const;
+    virtual void lowerCase(XMLCh* const toLowerCase) const;
 
 
 protected :
diff --git a/src/xercesc/util/XMLString.cpp b/src/xercesc/util/XMLString.cpp
index 5bdeb4395..905fb1fa8 100644
--- a/src/xercesc/util/XMLString.cpp
+++ b/src/xercesc/util/XMLString.cpp
@@ -1459,7 +1459,7 @@ void XMLString::upperCase(XMLCh* const toUpperCase)
 void XMLString::lowerCase(XMLCh* const toLowerCase)
 {
     // Refer this one to the transcoding service
-    //XMLPlatformUtils::fgTransService->lowerCase(toLowerCase);
+    XMLPlatformUtils::fgTransService->lowerCase(toLowerCase);
 }
 
 
-- 
GitLab