diff --git a/mozilla/content/html/style/src/nsCSSParser.cpp b/mozilla/content/html/style/src/nsCSSParser.cpp
index a5d6fb6aafb..0680e4959dd 100644
--- a/mozilla/content/html/style/src/nsCSSParser.cpp
+++ b/mozilla/content/html/style/src/nsCSSParser.cpp
@@ -57,6 +57,7 @@
#include "nsNetUtil.h"
#include "nsCOMPtr.h"
#include "nsString.h"
+#include "nsUnicharUtils.h"
#include "nsIAtom.h"
#include "nsVoidArray.h"
#include "nsISupportsArray.h"
@@ -1054,7 +1055,7 @@ PRBool CSSParserImpl::GatherMedia(PRInt32& aErrorCode, nsString& aMedia,
if (! first) {
aMedia.AppendWithConversion(',');
}
- mToken.mIdent.ToLowerCase(); // case insensitive from CSS - must be lower cased
+ ToLowerCase(mToken.mIdent); // case insensitive from CSS - must be lower cased
if (aMediaAtoms) {
nsIAtom* medium = NS_NewAtom(mToken.mIdent);
aMediaAtoms->AppendElement(medium);
@@ -1237,7 +1238,7 @@ PRBool CSSParserImpl::ParseNameSpaceRule(PRInt32& aErrorCode,
if (eCSSToken_Ident == mToken.mType) {
prefix = mToken.mIdent;
- prefix.ToLowerCase(); // always case insensitive, since stays within CSS
+ ToLowerCase(prefix); // always case insensitive, since stays within CSS
if (! GetToken(aErrorCode, PR_TRUE)) {
REPORT_UNEXPECTED_EOF();
return PR_FALSE;
@@ -1775,7 +1776,7 @@ void CSSParserImpl::ParseTypeOrUniversalSelector(PRInt32& aDataMask,
aSelector.SetTag(mToken.mIdent);
}
else {
- mToken.mIdent.ToLowerCase(buffer);
+ ToLowerCase(mToken.mIdent, buffer);
aSelector.SetTag(buffer);
}
}
@@ -1819,7 +1820,7 @@ void CSSParserImpl::ParseTypeOrUniversalSelector(PRInt32& aDataMask,
PRInt32 nameSpaceID = kNameSpaceID_Unknown;
if (mNameSpace) {
nsIAtom* prefix;
- buffer.ToLowerCase(); // always case insensitive, since stays within CSS
+ ToLowerCase(buffer); // always case insensitive, since stays within CSS
prefix = NS_NewAtom(buffer);
mNameSpace->FindNameSpaceID(prefix, nameSpaceID);
NS_IF_RELEASE(prefix);
@@ -1842,7 +1843,7 @@ void CSSParserImpl::ParseTypeOrUniversalSelector(PRInt32& aDataMask,
aSelector.SetTag(mToken.mIdent);
}
else {
- mToken.mIdent.ToLowerCase(buffer);
+ ToLowerCase(mToken.mIdent, buffer);
aSelector.SetTag(buffer);
}
}
@@ -1874,7 +1875,7 @@ void CSSParserImpl::ParseTypeOrUniversalSelector(PRInt32& aDataMask,
aSelector.SetTag(buffer);
}
else {
- buffer.ToLowerCase();
+ ToLowerCase(buffer);
aSelector.SetTag(buffer);
}
aDataMask |= SEL_MASK_ELEM;
@@ -1900,7 +1901,7 @@ void CSSParserImpl::ParseTypeOrUniversalSelector(PRInt32& aDataMask,
aSelector.SetTag(mToken.mIdent);
}
else {
- mToken.mIdent.ToLowerCase(buffer);
+ ToLowerCase(mToken.mIdent, buffer);
aSelector.SetTag(buffer);
}
}
@@ -2007,7 +2008,7 @@ void CSSParserImpl::ParseAttributeSelector(PRInt32& aDataMask,
nameSpaceID = kNameSpaceID_Unknown;
if (mNameSpace) {
nsIAtom* prefix;
- attr.ToLowerCase(); // always case insensitive, since stays within CSS
+ ToLowerCase(attr); // always case insensitive, since stays within CSS
prefix = NS_NewAtom(attr);
mNameSpace->FindNameSpaceID(prefix, nameSpaceID);
NS_IF_RELEASE(prefix);
@@ -2043,7 +2044,7 @@ void CSSParserImpl::ParseAttributeSelector(PRInt32& aDataMask,
}
if (! mCaseSensitive) {
- attr.ToLowerCase();
+ ToLowerCase(attr);
}
if (! GetToken(aErrorCode, PR_TRUE)) { // premature EOF
REPORT_UNEXPECTED_EOF();
@@ -2165,7 +2166,7 @@ void CSSParserImpl::ParsePseudoSelector(PRInt32& aDataMask,
buffer.Truncate();
buffer.AppendWithConversion(':');
buffer.Append(mToken.mIdent);
- buffer.ToLowerCase();
+ ToLowerCase(buffer);
nsIAtom* pseudo = NS_NewAtom(buffer);
if (eCSSToken_Ident != mToken.mType) { // malformed selector
@@ -3138,7 +3139,7 @@ PRBool CSSParserImpl::ParseAttr(PRInt32& aErrorCode, nsCSSValue& aValue)
PRInt32 nameSpaceID = kNameSpaceID_Unknown;
if (mNameSpace) {
nsIAtom* prefix;
- holdIdent.ToLowerCase(); // always case insensitive, since stays within CSS
+ ToLowerCase(holdIdent); // always case insensitive, since stays within CSS
prefix = NS_NewAtom(holdIdent);
mNameSpace->FindNameSpaceID(prefix, nameSpaceID);
NS_IF_RELEASE(prefix);
@@ -3156,7 +3157,7 @@ PRBool CSSParserImpl::ParseAttr(PRInt32& aErrorCode, nsCSSValue& aValue)
attr.Append(mToken.mIdent);
} else {
nsAutoString buffer;
- mToken.mIdent.ToLowerCase(buffer);
+ ToLowerCase(mToken.mIdent, buffer);
attr.Append(buffer);
}
}
@@ -3170,7 +3171,7 @@ PRBool CSSParserImpl::ParseAttr(PRInt32& aErrorCode, nsCSSValue& aValue)
attr = holdIdent;
}
else {
- holdIdent.ToLowerCase(attr);
+ ToLowerCase(holdIdent, attr);
}
}
}
@@ -3202,7 +3203,7 @@ PRBool CSSParserImpl::ParseAttr(PRInt32& aErrorCode, nsCSSValue& aValue)
attr.Append(mToken.mIdent);
} else {
nsAutoString buffer;
- mToken.mIdent.ToLowerCase(buffer);
+ ToLowerCase(mToken.mIdent, buffer);
attr.Append(buffer);
}
}
diff --git a/mozilla/gfx/src/mac/nsDeviceContextMac.cpp b/mozilla/gfx/src/mac/nsDeviceContextMac.cpp
index d4d0b72ab87..19db017982b 100644
--- a/mozilla/gfx/src/mac/nsDeviceContextMac.cpp
+++ b/mozilla/gfx/src/mac/nsDeviceContextMac.cpp
@@ -66,6 +66,7 @@
#include "nsIScreenManager.h"
#include "nsIServiceManager.h"
#include "nsReadableUtils.h"
+#include "nsUnicharUtils.h"
PRUint32 nsDeviceContextMac::mPixelsPerInch = 96;
@@ -761,8 +762,8 @@ FontNameKey::FontNameKey(const nsString& aString)
PRUint32 FontNameKey::HashCode(void) const
{
nsString str;
- mString.ToLowerCase(str);
- return nsCRT::HashCode(str.get());
+ ToLowerCase(mString, str);
+ return nsCRT::HashCode(str.get());
}
PRBool FontNameKey::Equals(const nsHashKey *aKey) const
diff --git a/mozilla/intl/unicharutil/util/nsUnicharUtils.cpp b/mozilla/intl/unicharutil/util/nsUnicharUtils.cpp
index 22844c41831..10fe8829ffe 100644
--- a/mozilla/intl/unicharutil/util/nsUnicharUtils.cpp
+++ b/mozilla/intl/unicharutil/util/nsUnicharUtils.cpp
@@ -31,7 +31,6 @@
// global cache of the case conversion service
static nsICaseConversion *gCaseConv = nsnull;
-static NS_DEFINE_CID(kUnicharUtilCID, NS_UNICHARUTIL_CID);
class nsShutdownObserver : public nsIObserver
{
@@ -59,9 +58,7 @@ static nsresult NS_InitCaseConversion() {
nsresult rv;
- rv = nsServiceManager::GetService(kUnicharUtilCID,
- NS_GET_IID(nsICaseConversion),
- (nsISupports**)&gCaseConv);
+ rv = CallGetService(NS_UNICHARUTIL_CONTRACTID, &gCaseConv);
if (NS_SUCCEEDED(rv)) {
nsCOMPtr obs =
@@ -76,38 +73,77 @@ static nsresult NS_InitCaseConversion() {
return NS_OK;
}
-
-// to be turned on for bug 100214
-//#if 0
class ConvertToLowerCase
{
public:
typedef PRUnichar value_type;
- PRUint32 write( const PRUnichar* aSource, PRUint32 aSourceLength)
+ ConvertToLowerCase()
{
NS_InitCaseConversion();
+ }
+
+ PRUint32 write( const PRUnichar* aSource, PRUint32 aSourceLength)
+ {
gCaseConv->ToLower(aSource, NS_CONST_CAST(PRUnichar*,aSource), aSourceLength);
return aSourceLength;
}
};
void
-ToLowerCase( nsAString& aString)
+ToLowerCase( nsAString& aString )
{
nsAString::iterator fromBegin, fromEnd;
ConvertToLowerCase converter;
copy_string(aString.BeginWriting(fromBegin), aString.EndWriting(fromEnd), converter);
}
+class CopyToLowerCase
+ {
+ public:
+ typedef PRUnichar value_type;
+
+ CopyToLowerCase( nsAString::iterator& aDestIter )
+ : mIter(aDestIter)
+ {
+ NS_InitCaseConversion();
+ }
+
+ PRUint32 write( const PRUnichar* aSource, PRUint32 aSourceLength )
+ {
+ PRUint32 len = PR_MIN(PRUint32(mIter.size_forward()), aSourceLength);
+ PRUnichar* dest = NS_CONST_CAST(PRUnichar*, mIter.get());
+ gCaseConv->ToLower(aSource, dest, len);
+ mIter.advance(len);
+ return len;
+ }
+
+ protected:
+ nsAString::iterator& mIter;
+ };
+
+void
+ToLowerCase( const nsAString& aSource, nsAString& aDest )
+ {
+ nsAString::const_iterator fromBegin, fromEnd;
+ nsAString::iterator toBegin;
+ aDest.SetLength(aSource.Length());
+ CopyToLowerCase converter(aDest.BeginWriting(toBegin));
+ copy_string(aSource.BeginReading(fromBegin), aSource.EndReading(fromEnd), converter);
+ }
+
class ConvertToUpperCase
{
public:
typedef PRUnichar value_type;
- PRUint32 write( const PRUnichar* aSource, PRUint32 aSourceLength)
+ ConvertToUpperCase()
{
NS_InitCaseConversion();
+ }
+
+ PRUint32 write( const PRUnichar* aSource, PRUint32 aSourceLength)
+ {
gCaseConv->ToUpper(aSource, NS_CONST_CAST(PRUnichar*,aSource), aSourceLength);
return aSourceLength;
}
@@ -121,6 +157,40 @@ ToUpperCase( nsAString& aString )
copy_string(aString.BeginWriting(fromBegin), aString.EndWriting(fromEnd), converter);
}
+class CopyToUpperCase
+ {
+ public:
+ typedef PRUnichar value_type;
+
+ CopyToUpperCase( nsAString::iterator& aDestIter )
+ : mIter(aDestIter)
+ {
+ NS_InitCaseConversion();
+ }
+
+ PRUint32 write( const PRUnichar* aSource, PRUint32 aSourceLength )
+ {
+ PRUint32 len = PR_MIN(PRUint32(mIter.size_forward()), aSourceLength);
+ PRUnichar* dest = NS_CONST_CAST(PRUnichar*, mIter.get());
+ gCaseConv->ToUpper(aSource, dest, len);
+ mIter.advance(len);
+ return len;
+ }
+
+ protected:
+ nsAString::iterator& mIter;
+ };
+
+void
+ToUpperCase( const nsAString& aSource, nsAString& aDest )
+ {
+ nsAString::const_iterator fromBegin, fromEnd;
+ nsAString::iterator toBegin;
+ aDest.SetLength(aSource.Length());
+ CopyToUpperCase converter(aDest.BeginWriting(toBegin));
+ copy_string(aSource.BeginReading(fromBegin), aSource.EndReading(fromEnd), converter);
+ }
+
PRBool
CaseInsensitiveFindInReadable( const nsAString& aPattern, nsAString::const_iterator& aSearchStart, nsAString::const_iterator& aSearchEnd )
{
@@ -151,8 +221,6 @@ nsCaseInsensitiveStringComparator::operator()( PRUnichar lhs, PRUnichar rhs ) co
return 1;
}
-///#endif
-
PRUnichar
ToLowerCase(PRUnichar aChar)
{
diff --git a/mozilla/intl/unicharutil/util/nsUnicharUtils.h b/mozilla/intl/unicharutil/util/nsUnicharUtils.h
index c335a08b00e..41a24b5273c 100644
--- a/mozilla/intl/unicharutil/util/nsUnicharUtils.h
+++ b/mozilla/intl/unicharutil/util/nsUnicharUtils.h
@@ -26,6 +26,8 @@
//#if 0
void ToLowerCase( nsAString& );
void ToUpperCase( nsAString& );
+void ToLowerCase( const nsAString& aSource, nsAString& aDest );
+void ToUpperCase( const nsAString& aSource, nsAString& aDest );
PRBool CaseInsensitiveFindInReadable( const nsAString& aPattern, nsAString::const_iterator&, nsAString::const_iterator& );
diff --git a/mozilla/layout/style/nsCSSParser.cpp b/mozilla/layout/style/nsCSSParser.cpp
index a5d6fb6aafb..0680e4959dd 100644
--- a/mozilla/layout/style/nsCSSParser.cpp
+++ b/mozilla/layout/style/nsCSSParser.cpp
@@ -57,6 +57,7 @@
#include "nsNetUtil.h"
#include "nsCOMPtr.h"
#include "nsString.h"
+#include "nsUnicharUtils.h"
#include "nsIAtom.h"
#include "nsVoidArray.h"
#include "nsISupportsArray.h"
@@ -1054,7 +1055,7 @@ PRBool CSSParserImpl::GatherMedia(PRInt32& aErrorCode, nsString& aMedia,
if (! first) {
aMedia.AppendWithConversion(',');
}
- mToken.mIdent.ToLowerCase(); // case insensitive from CSS - must be lower cased
+ ToLowerCase(mToken.mIdent); // case insensitive from CSS - must be lower cased
if (aMediaAtoms) {
nsIAtom* medium = NS_NewAtom(mToken.mIdent);
aMediaAtoms->AppendElement(medium);
@@ -1237,7 +1238,7 @@ PRBool CSSParserImpl::ParseNameSpaceRule(PRInt32& aErrorCode,
if (eCSSToken_Ident == mToken.mType) {
prefix = mToken.mIdent;
- prefix.ToLowerCase(); // always case insensitive, since stays within CSS
+ ToLowerCase(prefix); // always case insensitive, since stays within CSS
if (! GetToken(aErrorCode, PR_TRUE)) {
REPORT_UNEXPECTED_EOF();
return PR_FALSE;
@@ -1775,7 +1776,7 @@ void CSSParserImpl::ParseTypeOrUniversalSelector(PRInt32& aDataMask,
aSelector.SetTag(mToken.mIdent);
}
else {
- mToken.mIdent.ToLowerCase(buffer);
+ ToLowerCase(mToken.mIdent, buffer);
aSelector.SetTag(buffer);
}
}
@@ -1819,7 +1820,7 @@ void CSSParserImpl::ParseTypeOrUniversalSelector(PRInt32& aDataMask,
PRInt32 nameSpaceID = kNameSpaceID_Unknown;
if (mNameSpace) {
nsIAtom* prefix;
- buffer.ToLowerCase(); // always case insensitive, since stays within CSS
+ ToLowerCase(buffer); // always case insensitive, since stays within CSS
prefix = NS_NewAtom(buffer);
mNameSpace->FindNameSpaceID(prefix, nameSpaceID);
NS_IF_RELEASE(prefix);
@@ -1842,7 +1843,7 @@ void CSSParserImpl::ParseTypeOrUniversalSelector(PRInt32& aDataMask,
aSelector.SetTag(mToken.mIdent);
}
else {
- mToken.mIdent.ToLowerCase(buffer);
+ ToLowerCase(mToken.mIdent, buffer);
aSelector.SetTag(buffer);
}
}
@@ -1874,7 +1875,7 @@ void CSSParserImpl::ParseTypeOrUniversalSelector(PRInt32& aDataMask,
aSelector.SetTag(buffer);
}
else {
- buffer.ToLowerCase();
+ ToLowerCase(buffer);
aSelector.SetTag(buffer);
}
aDataMask |= SEL_MASK_ELEM;
@@ -1900,7 +1901,7 @@ void CSSParserImpl::ParseTypeOrUniversalSelector(PRInt32& aDataMask,
aSelector.SetTag(mToken.mIdent);
}
else {
- mToken.mIdent.ToLowerCase(buffer);
+ ToLowerCase(mToken.mIdent, buffer);
aSelector.SetTag(buffer);
}
}
@@ -2007,7 +2008,7 @@ void CSSParserImpl::ParseAttributeSelector(PRInt32& aDataMask,
nameSpaceID = kNameSpaceID_Unknown;
if (mNameSpace) {
nsIAtom* prefix;
- attr.ToLowerCase(); // always case insensitive, since stays within CSS
+ ToLowerCase(attr); // always case insensitive, since stays within CSS
prefix = NS_NewAtom(attr);
mNameSpace->FindNameSpaceID(prefix, nameSpaceID);
NS_IF_RELEASE(prefix);
@@ -2043,7 +2044,7 @@ void CSSParserImpl::ParseAttributeSelector(PRInt32& aDataMask,
}
if (! mCaseSensitive) {
- attr.ToLowerCase();
+ ToLowerCase(attr);
}
if (! GetToken(aErrorCode, PR_TRUE)) { // premature EOF
REPORT_UNEXPECTED_EOF();
@@ -2165,7 +2166,7 @@ void CSSParserImpl::ParsePseudoSelector(PRInt32& aDataMask,
buffer.Truncate();
buffer.AppendWithConversion(':');
buffer.Append(mToken.mIdent);
- buffer.ToLowerCase();
+ ToLowerCase(buffer);
nsIAtom* pseudo = NS_NewAtom(buffer);
if (eCSSToken_Ident != mToken.mType) { // malformed selector
@@ -3138,7 +3139,7 @@ PRBool CSSParserImpl::ParseAttr(PRInt32& aErrorCode, nsCSSValue& aValue)
PRInt32 nameSpaceID = kNameSpaceID_Unknown;
if (mNameSpace) {
nsIAtom* prefix;
- holdIdent.ToLowerCase(); // always case insensitive, since stays within CSS
+ ToLowerCase(holdIdent); // always case insensitive, since stays within CSS
prefix = NS_NewAtom(holdIdent);
mNameSpace->FindNameSpaceID(prefix, nameSpaceID);
NS_IF_RELEASE(prefix);
@@ -3156,7 +3157,7 @@ PRBool CSSParserImpl::ParseAttr(PRInt32& aErrorCode, nsCSSValue& aValue)
attr.Append(mToken.mIdent);
} else {
nsAutoString buffer;
- mToken.mIdent.ToLowerCase(buffer);
+ ToLowerCase(mToken.mIdent, buffer);
attr.Append(buffer);
}
}
@@ -3170,7 +3171,7 @@ PRBool CSSParserImpl::ParseAttr(PRInt32& aErrorCode, nsCSSValue& aValue)
attr = holdIdent;
}
else {
- holdIdent.ToLowerCase(attr);
+ ToLowerCase(holdIdent, attr);
}
}
}
@@ -3202,7 +3203,7 @@ PRBool CSSParserImpl::ParseAttr(PRInt32& aErrorCode, nsCSSValue& aValue)
attr.Append(mToken.mIdent);
} else {
nsAutoString buffer;
- mToken.mIdent.ToLowerCase(buffer);
+ ToLowerCase(mToken.mIdent, buffer);
attr.Append(buffer);
}
}
diff --git a/mozilla/string/obsolete/nsString.cpp b/mozilla/string/obsolete/nsString.cpp
index fd18cc2c26a..1d3011f5fbd 100644
--- a/mozilla/string/obsolete/nsString.cpp
+++ b/mozilla/string/obsolete/nsString.cpp
@@ -251,28 +251,6 @@ void nsCString::ToUpperCase() {
nsStr::ChangeCase(*this,PR_TRUE);
}
-/**
- * Converts chars in this to lowercase, and
- * stores them in aString
- * @update gess 01/04/99
- * @param aOut is a string to contain result
- */
-void nsCString::ToLowerCase(nsCString& aString) const {
- aString=*this;
- nsStr::ChangeCase(aString,PR_FALSE);
-}
-
-/**
- * Converts chars in this to uppercase, and
- * stores them in a given output string
- * @update gess 01/04/99
- * @param aOut is a string to contain result
- */
-void nsCString::ToUpperCase(nsCString& aString) const {
- aString=*this;
- nsStr::ChangeCase(aString,PR_TRUE);
-}
-
/**
* This method is used to remove all occurances of the
* characters found in aSet from this string.
diff --git a/mozilla/string/obsolete/nsString.h b/mozilla/string/obsolete/nsString.h
index db37021917f..3c132761534 100644
--- a/mozilla/string/obsolete/nsString.h
+++ b/mozilla/string/obsolete/nsString.h
@@ -155,28 +155,12 @@ public:
void ToLowerCase();
- /**
- * Converts chars in this to lowercase, and
- * stores them in aOut
- * @update gess 7/27/98
- * @param aOut is a string to contain result
- */
- void ToLowerCase(nsCString& aString) const;
-
/**
* Converts chars in this to uppercase
* @update gess 7/27/98
*/
void ToUpperCase();
- /**
- * Converts chars in this to lowercase, and
- * stores them in a given output string
- * @update gess 7/27/98
- * @param aOut is a string to contain result
- */
- void ToUpperCase(nsCString& aString) const;
-
/**
* This method is used to remove all occurances of the
diff --git a/mozilla/string/obsolete/nsString2.cpp b/mozilla/string/obsolete/nsString2.cpp
index 8efa3dcd2ca..cba0308627d 100644
--- a/mozilla/string/obsolete/nsString2.cpp
+++ b/mozilla/string/obsolete/nsString2.cpp
@@ -262,28 +262,6 @@ void nsString::ToUpperCase() {
nsStr::ChangeCase(*this,PR_TRUE);
}
-/**
- * Converts chars in this to uppercase, and
- * stores them in aString
- * @update gess 01/04/99
- * @param aOut is a string to contain result
- */
-void nsString::ToLowerCase(nsString& aString) const {
- aString=*this;
- nsStr::ChangeCase(aString,PR_FALSE);
-}
-
-/**
- * Converts chars in this to uppercase, and
- * stores them in a given output string
- * @update gess 01/04/99
- * @param aOut is a string to contain result
- */
-void nsString::ToUpperCase(nsString& aString) const {
- aString=*this;
- nsStr::ChangeCase(aString,PR_TRUE);
-}
-
/**
* This method is used to remove all occurances of the
* characters found in aSet from this string.
diff --git a/mozilla/string/obsolete/nsString2.h b/mozilla/string/obsolete/nsString2.h
index fb141b3a630..576187ab286 100644
--- a/mozilla/string/obsolete/nsString2.h
+++ b/mozilla/string/obsolete/nsString2.h
@@ -176,28 +176,12 @@ public:
void ToLowerCase();
- /**
- * Converts chars in this to lowercase, and
- * stores them in aOut
- * @update gess 7/27/98
- * @param aOut is a string to contain result
- */
- void ToLowerCase(nsString& aString) const;
-
/**
* Converts chars in this to uppercase
* @update gess 7/27/98
*/
void ToUpperCase();
- /**
- * Converts chars in this to lowercase, and
- * stores them in a given output string
- * @update gess 7/27/98
- * @param aOut is a string to contain result
- */
- void ToUpperCase(nsString& aString) const;
-
/**
* This method is used to remove all occurances of the
diff --git a/mozilla/string/public/nsReadableUtils.h b/mozilla/string/public/nsReadableUtils.h
index 14db3bc6d8e..2188ea2db80 100755
--- a/mozilla/string/public/nsReadableUtils.h
+++ b/mozilla/string/public/nsReadableUtils.h
@@ -174,6 +174,13 @@ NS_COM void ToUpperCase( nsACString& );
NS_COM void ToLowerCase( nsACString& );
+ /**
+ * Converts case from string aSource to aDest.
+ */
+NS_COM void ToUpperCase( const nsACString& aSource, nsACString& aDest );
+
+NS_COM void ToLowerCase( const nsACString& aSource, nsACString& aDest );
+
/**
* Finds the leftmost occurance of |aPattern|, if any in the range |aSearchStart|..|aSearchEnd|.
*
diff --git a/mozilla/string/src/nsReadableUtils.cpp b/mozilla/string/src/nsReadableUtils.cpp
index 3588ee49c2b..6b316e73e59 100755
--- a/mozilla/string/src/nsReadableUtils.cpp
+++ b/mozilla/string/src/nsReadableUtils.cpp
@@ -340,7 +340,7 @@ IsASCII( const nsAString& aString )
/**
- * A character sink for case conversion.
+ * A character sink for in-place case conversion.
*/
class ConvertToUpperCase
{
@@ -372,6 +372,51 @@ ToUpperCase( nsACString& aCString )
}
+ /**
+ * A character sink for copying with case conversion.
+ */
+class CopyToUpperCase
+ {
+ public:
+ typedef char value_type;
+
+ CopyToUpperCase( nsACString::iterator& aDestIter )
+ : mIter(aDestIter)
+ {
+ }
+
+ PRUint32
+ write( const char* aSource, PRUint32 aSourceLength )
+ {
+ PRUint32 len = PR_MIN(PRUint32(mIter.size_forward()), aSourceLength);
+ char* cp = mIter.get();
+ const char* end = aSource + len;
+ while (aSource != end) {
+ char ch = *aSource;
+ if ((ch >= 'a') && (ch <= 'z'))
+ *cp = ch - ('a' - 'A');
+ ++aSource;
+ ++cp;
+ }
+ mIter.advance(len);
+ return len;
+ }
+
+ protected:
+ nsACString::iterator& mIter;
+ };
+
+NS_COM
+void
+ToUpperCase( const nsACString& aSource, nsACString& aDest )
+ {
+ nsACString::const_iterator fromBegin, fromEnd;
+ nsACString::iterator toBegin;
+ aDest.SetLength(aSource.Length());
+ CopyToUpperCase converter(aDest.BeginWriting(toBegin));
+ copy_string(aSource.BeginReading(fromBegin), aSource.EndReading(fromEnd), converter);
+ }
+
/**
* A character sink for case conversion.
*/
@@ -404,6 +449,51 @@ ToLowerCase( nsACString& aCString )
copy_string(aCString.BeginWriting(fromBegin), aCString.EndWriting(fromEnd), converter);
}
+ /**
+ * A character sink for copying with case conversion.
+ */
+class CopyToLowerCase
+ {
+ public:
+ typedef char value_type;
+
+ CopyToLowerCase( nsACString::iterator& aDestIter )
+ : mIter(aDestIter)
+ {
+ }
+
+ PRUint32
+ write( const char* aSource, PRUint32 aSourceLength )
+ {
+ PRUint32 len = PR_MIN(PRUint32(mIter.size_forward()), aSourceLength);
+ char* cp = mIter.get();
+ const char* end = aSource + len;
+ while (aSource != end) {
+ char ch = *aSource;
+ if ((ch >= 'A') && (ch <= 'Z'))
+ *cp = ch + ('a' - 'A');
+ ++aSource;
+ ++cp;
+ }
+ mIter.advance(len);
+ return len;
+ }
+
+ protected:
+ nsACString::iterator& mIter;
+ };
+
+NS_COM
+void
+ToLowerCase( const nsACString& aSource, nsACString& aDest )
+ {
+ nsACString::const_iterator fromBegin, fromEnd;
+ nsACString::iterator toBegin;
+ aDest.SetLength(aSource.Length());
+ CopyToLowerCase converter(aDest.BeginWriting(toBegin));
+ copy_string(aSource.BeginReading(fromBegin), aSource.EndReading(fromEnd), converter);
+ }
+
template
PRBool
FindInReadable_Impl( const StringT& aPattern, IteratorT& aSearchStart, IteratorT& aSearchEnd, const Comparator& compare )
diff --git a/mozilla/xpcom/string/obsolete/nsString.cpp b/mozilla/xpcom/string/obsolete/nsString.cpp
index fd18cc2c26a..1d3011f5fbd 100644
--- a/mozilla/xpcom/string/obsolete/nsString.cpp
+++ b/mozilla/xpcom/string/obsolete/nsString.cpp
@@ -251,28 +251,6 @@ void nsCString::ToUpperCase() {
nsStr::ChangeCase(*this,PR_TRUE);
}
-/**
- * Converts chars in this to lowercase, and
- * stores them in aString
- * @update gess 01/04/99
- * @param aOut is a string to contain result
- */
-void nsCString::ToLowerCase(nsCString& aString) const {
- aString=*this;
- nsStr::ChangeCase(aString,PR_FALSE);
-}
-
-/**
- * Converts chars in this to uppercase, and
- * stores them in a given output string
- * @update gess 01/04/99
- * @param aOut is a string to contain result
- */
-void nsCString::ToUpperCase(nsCString& aString) const {
- aString=*this;
- nsStr::ChangeCase(aString,PR_TRUE);
-}
-
/**
* This method is used to remove all occurances of the
* characters found in aSet from this string.
diff --git a/mozilla/xpcom/string/obsolete/nsString.h b/mozilla/xpcom/string/obsolete/nsString.h
index db37021917f..3c132761534 100644
--- a/mozilla/xpcom/string/obsolete/nsString.h
+++ b/mozilla/xpcom/string/obsolete/nsString.h
@@ -155,28 +155,12 @@ public:
void ToLowerCase();
- /**
- * Converts chars in this to lowercase, and
- * stores them in aOut
- * @update gess 7/27/98
- * @param aOut is a string to contain result
- */
- void ToLowerCase(nsCString& aString) const;
-
/**
* Converts chars in this to uppercase
* @update gess 7/27/98
*/
void ToUpperCase();
- /**
- * Converts chars in this to lowercase, and
- * stores them in a given output string
- * @update gess 7/27/98
- * @param aOut is a string to contain result
- */
- void ToUpperCase(nsCString& aString) const;
-
/**
* This method is used to remove all occurances of the
diff --git a/mozilla/xpcom/string/obsolete/nsString2.cpp b/mozilla/xpcom/string/obsolete/nsString2.cpp
index 8efa3dcd2ca..cba0308627d 100644
--- a/mozilla/xpcom/string/obsolete/nsString2.cpp
+++ b/mozilla/xpcom/string/obsolete/nsString2.cpp
@@ -262,28 +262,6 @@ void nsString::ToUpperCase() {
nsStr::ChangeCase(*this,PR_TRUE);
}
-/**
- * Converts chars in this to uppercase, and
- * stores them in aString
- * @update gess 01/04/99
- * @param aOut is a string to contain result
- */
-void nsString::ToLowerCase(nsString& aString) const {
- aString=*this;
- nsStr::ChangeCase(aString,PR_FALSE);
-}
-
-/**
- * Converts chars in this to uppercase, and
- * stores them in a given output string
- * @update gess 01/04/99
- * @param aOut is a string to contain result
- */
-void nsString::ToUpperCase(nsString& aString) const {
- aString=*this;
- nsStr::ChangeCase(aString,PR_TRUE);
-}
-
/**
* This method is used to remove all occurances of the
* characters found in aSet from this string.
diff --git a/mozilla/xpcom/string/obsolete/nsString2.h b/mozilla/xpcom/string/obsolete/nsString2.h
index fb141b3a630..576187ab286 100644
--- a/mozilla/xpcom/string/obsolete/nsString2.h
+++ b/mozilla/xpcom/string/obsolete/nsString2.h
@@ -176,28 +176,12 @@ public:
void ToLowerCase();
- /**
- * Converts chars in this to lowercase, and
- * stores them in aOut
- * @update gess 7/27/98
- * @param aOut is a string to contain result
- */
- void ToLowerCase(nsString& aString) const;
-
/**
* Converts chars in this to uppercase
* @update gess 7/27/98
*/
void ToUpperCase();
- /**
- * Converts chars in this to lowercase, and
- * stores them in a given output string
- * @update gess 7/27/98
- * @param aOut is a string to contain result
- */
- void ToUpperCase(nsString& aString) const;
-
/**
* This method is used to remove all occurances of the
diff --git a/mozilla/xpcom/string/public/nsReadableUtils.h b/mozilla/xpcom/string/public/nsReadableUtils.h
index 14db3bc6d8e..2188ea2db80 100755
--- a/mozilla/xpcom/string/public/nsReadableUtils.h
+++ b/mozilla/xpcom/string/public/nsReadableUtils.h
@@ -174,6 +174,13 @@ NS_COM void ToUpperCase( nsACString& );
NS_COM void ToLowerCase( nsACString& );
+ /**
+ * Converts case from string aSource to aDest.
+ */
+NS_COM void ToUpperCase( const nsACString& aSource, nsACString& aDest );
+
+NS_COM void ToLowerCase( const nsACString& aSource, nsACString& aDest );
+
/**
* Finds the leftmost occurance of |aPattern|, if any in the range |aSearchStart|..|aSearchEnd|.
*
diff --git a/mozilla/xpcom/string/src/nsReadableUtils.cpp b/mozilla/xpcom/string/src/nsReadableUtils.cpp
index 3588ee49c2b..6b316e73e59 100755
--- a/mozilla/xpcom/string/src/nsReadableUtils.cpp
+++ b/mozilla/xpcom/string/src/nsReadableUtils.cpp
@@ -340,7 +340,7 @@ IsASCII( const nsAString& aString )
/**
- * A character sink for case conversion.
+ * A character sink for in-place case conversion.
*/
class ConvertToUpperCase
{
@@ -372,6 +372,51 @@ ToUpperCase( nsACString& aCString )
}
+ /**
+ * A character sink for copying with case conversion.
+ */
+class CopyToUpperCase
+ {
+ public:
+ typedef char value_type;
+
+ CopyToUpperCase( nsACString::iterator& aDestIter )
+ : mIter(aDestIter)
+ {
+ }
+
+ PRUint32
+ write( const char* aSource, PRUint32 aSourceLength )
+ {
+ PRUint32 len = PR_MIN(PRUint32(mIter.size_forward()), aSourceLength);
+ char* cp = mIter.get();
+ const char* end = aSource + len;
+ while (aSource != end) {
+ char ch = *aSource;
+ if ((ch >= 'a') && (ch <= 'z'))
+ *cp = ch - ('a' - 'A');
+ ++aSource;
+ ++cp;
+ }
+ mIter.advance(len);
+ return len;
+ }
+
+ protected:
+ nsACString::iterator& mIter;
+ };
+
+NS_COM
+void
+ToUpperCase( const nsACString& aSource, nsACString& aDest )
+ {
+ nsACString::const_iterator fromBegin, fromEnd;
+ nsACString::iterator toBegin;
+ aDest.SetLength(aSource.Length());
+ CopyToUpperCase converter(aDest.BeginWriting(toBegin));
+ copy_string(aSource.BeginReading(fromBegin), aSource.EndReading(fromEnd), converter);
+ }
+
/**
* A character sink for case conversion.
*/
@@ -404,6 +449,51 @@ ToLowerCase( nsACString& aCString )
copy_string(aCString.BeginWriting(fromBegin), aCString.EndWriting(fromEnd), converter);
}
+ /**
+ * A character sink for copying with case conversion.
+ */
+class CopyToLowerCase
+ {
+ public:
+ typedef char value_type;
+
+ CopyToLowerCase( nsACString::iterator& aDestIter )
+ : mIter(aDestIter)
+ {
+ }
+
+ PRUint32
+ write( const char* aSource, PRUint32 aSourceLength )
+ {
+ PRUint32 len = PR_MIN(PRUint32(mIter.size_forward()), aSourceLength);
+ char* cp = mIter.get();
+ const char* end = aSource + len;
+ while (aSource != end) {
+ char ch = *aSource;
+ if ((ch >= 'A') && (ch <= 'Z'))
+ *cp = ch + ('a' - 'A');
+ ++aSource;
+ ++cp;
+ }
+ mIter.advance(len);
+ return len;
+ }
+
+ protected:
+ nsACString::iterator& mIter;
+ };
+
+NS_COM
+void
+ToLowerCase( const nsACString& aSource, nsACString& aDest )
+ {
+ nsACString::const_iterator fromBegin, fromEnd;
+ nsACString::iterator toBegin;
+ aDest.SetLength(aSource.Length());
+ CopyToLowerCase converter(aDest.BeginWriting(toBegin));
+ copy_string(aSource.BeginReading(fromBegin), aSource.EndReading(fromEnd), converter);
+ }
+
template
PRBool
FindInReadable_Impl( const StringT& aPattern, IteratorT& aSearchStart, IteratorT& aSearchEnd, const Comparator& compare )