From f4ad21ae3a550e811790dd8b4f2e4a35139e0bf3 Mon Sep 17 00:00:00 2001 From: "alecf%netscape.com" Date: Tue, 19 Mar 2002 06:46:56 +0000 Subject: [PATCH] a further nsString api reduction: remove the last case-insensitive PRUnichar*-to-PRUnichar* comparisons, moving to new API, and remove old methods from nsString. r=dougt, sr=jag a=scc git-svn-id: svn://10.0.0.236/trunk@116842 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/content/base/src/nsCopySupport.cpp | 2 +- .../content/base/src/nsDocumentEncoder.cpp | 2 +- mozilla/content/base/src/nsParserUtils.cpp | 2 +- .../base/src/nsPlainTextSerializer.cpp | 6 +- .../html/style/src/nsCSSStyleSheet.cpp | 4 +- mozilla/content/xbl/src/nsXBLBinding.cpp | 2 +- .../content/xml/content/src/nsXMLElement.cpp | 6 +- .../document/src/nsXULCommandDispatcher.cpp | 2 +- .../xul/document/src/nsXULDocument.cpp | 2 +- .../templates/src/nsXULTemplateBuilder.cpp | 2 +- .../libeditor/text/nsPlaintextEditor.cpp | 31 +++-- .../webbrowserpersist/src/Makefile.in | 4 +- .../src/nsWebBrowserPersist.cpp | 3 +- .../source/base/MozillaString.cpp | 6 +- mozilla/intl/strres/src/nsAcceptLang.cpp | 4 +- .../intl/strres/tests/StringBundleTest.cpp | 2 +- .../unicharutil/src/nsEntityConverter.cpp | 2 +- .../intl/unicharutil/util/nsUnicharUtils.cpp | 2 + mozilla/layout/base/src/nsCopySupport.cpp | 2 +- mozilla/layout/generic/nsPageFrame.cpp | 117 ++++++----------- mozilla/layout/html/base/src/nsPageFrame.cpp | 117 ++++++----------- mozilla/layout/style/nsCSSStyleSheet.cpp | 4 +- .../layout/xul/base/src/nsTextBoxFrame.cpp | 31 ++++- .../addrbook/src/nsAbAutoCompleteSession.cpp | 4 +- .../addrbook/src/nsAbDirectoryQuery.cpp | 28 ++-- mozilla/mailnews/compose/src/nsMsgCompose.cpp | 17 ++- .../streamconv/converters/nsTXTToHTMLConv.cpp | 5 +- mozilla/profile/src/nsProfile.cpp | 2 - mozilla/rdf/base/src/nsRDFParserUtils.cpp | 2 +- .../manager/ssl/src/nsCertOutliner.cpp | 9 +- .../security/manager/ssl/src/nsCertTree.cpp | 9 +- .../manager/ssl/src/nsNSSCertificate.cpp | 3 +- mozilla/string/obsolete/bufferRoutines.h | 14 +- mozilla/string/obsolete/nsStr.cpp | 12 +- mozilla/string/obsolete/nsStrPrivate.h | 6 +- mozilla/string/obsolete/nsString2.cpp | 83 +++++------- mozilla/string/obsolete/nsString2.h | 24 ++-- mozilla/string/public/nsReadableUtils.h | 24 +++- mozilla/string/src/nsReadableUtils.cpp | 8 +- mozilla/widget/src/windows/nsFilePicker.h | 1 - .../xpcom/string/obsolete/bufferRoutines.h | 14 +- mozilla/xpcom/string/obsolete/nsStr.cpp | 12 +- mozilla/xpcom/string/obsolete/nsStrPrivate.h | 6 +- mozilla/xpcom/string/obsolete/nsString2.cpp | 83 +++++------- mozilla/xpcom/string/obsolete/nsString2.h | 24 ++-- mozilla/xpcom/string/public/nsReadableUtils.h | 24 +++- mozilla/xpcom/string/src/nsReadableUtils.cpp | 8 +- .../bookmarks/src/nsBookmarksService.cpp | 18 ++- .../history/src/nsGlobalHistory.cpp | 6 +- .../xpfe/components/intl/nsCharsetMenu.cpp | 8 +- .../xpfe/components/search/src/Makefile.in | 1 + .../search/src/nsInternetSearchService.cpp | 121 ++++++++++++------ .../search/src/nsLocalSearchService.cpp | 37 ++++-- .../urlbarhistory/src/nsUrlbarHistory.cpp | 18 ++- 54 files changed, 503 insertions(+), 483 deletions(-) diff --git a/mozilla/content/base/src/nsCopySupport.cpp b/mozilla/content/base/src/nsCopySupport.cpp index 19133e5d502..0ff6f509b5b 100644 --- a/mozilla/content/base/src/nsCopySupport.cpp +++ b/mozilla/content/base/src/nsCopySupport.cpp @@ -310,7 +310,7 @@ nsresult nsCopySupport::IsPlainTextContext(nsISelection *aSel, nsIDocument *aDoc nsCOMPtr bodyElem = do_QueryInterface(selContent); nsAutoString wsVal; rv = bodyElem->GetAttribute(NS_LITERAL_STRING("style"), wsVal); - if (NS_SUCCEEDED(rv) && (kNotFound != wsVal.Find(NS_LITERAL_STRING("-moz-pre-wrap").get()))) + if (NS_SUCCEEDED(rv) && (kNotFound != wsVal.Find(NS_LITERAL_STRING("-moz-pre-wrap")))) { *aIsPlainTextContext = PR_TRUE; break; diff --git a/mozilla/content/base/src/nsDocumentEncoder.cpp b/mozilla/content/base/src/nsDocumentEncoder.cpp index b49b6bfb79f..211e59d5c9c 100644 --- a/mozilla/content/base/src/nsDocumentEncoder.cpp +++ b/mozilla/content/base/src/nsDocumentEncoder.cpp @@ -1144,7 +1144,7 @@ nsHTMLCopyEncoder::SetSelection(nsISelection* aSelection) nsCOMPtr bodyElem = do_QueryInterface(selContent); nsAutoString wsVal; rv = bodyElem->GetAttribute(NS_LITERAL_STRING("style"), wsVal); - if (NS_SUCCEEDED(rv) && (kNotFound != wsVal.Find(NS_LITERAL_STRING("-moz-pre-wrap").get()))) + if (NS_SUCCEEDED(rv) && (kNotFound != wsVal.Find(NS_LITERAL_STRING("-moz-pre-wrap")))) { mIsTextWidget = PR_TRUE; break; diff --git a/mozilla/content/base/src/nsParserUtils.cpp b/mozilla/content/base/src/nsParserUtils.cpp index f8e521508bd..752473199e9 100644 --- a/mozilla/content/base/src/nsParserUtils.cpp +++ b/mozilla/content/base/src/nsParserUtils.cpp @@ -75,7 +75,7 @@ nsParserUtils::GetQuotedAttributeValue(nsString& aSource, // While there are more characters to look at while (startOfAttribute != -1) { // Find the attribute starting at offset - startOfAttribute = aSource.Find(aAttribute.get(), PR_FALSE, startOfAttribute); + startOfAttribute = aSource.Find(aAttribute, startOfAttribute); // If attribute found if (startOfAttribute != -1) { // Find the '=' character while skipping whitespace diff --git a/mozilla/content/base/src/nsPlainTextSerializer.cpp b/mozilla/content/base/src/nsPlainTextSerializer.cpp index 8ae614bd1df..91ed1a9a654 100644 --- a/mozilla/content/base/src/nsPlainTextSerializer.cpp +++ b/mozilla/content/base/src/nsPlainTextSerializer.cpp @@ -748,7 +748,8 @@ nsPlainTextSerializer::DoOpenContainer(PRInt32 aTag) nsAutoString value; nsresult rv = GetAttributeValue(nsHTMLAtoms::type, value); - if (NS_SUCCEEDED(rv) && value.EqualsIgnoreCase("cite")) { + if (NS_SUCCEEDED(rv) && + NS_LossyConvertUCS2toASCII(value).Equals("cite", nsCaseInsensitiveCStringComparator())) { mCiteQuoteLevel++; } else { @@ -905,7 +906,8 @@ nsPlainTextSerializer::DoCloseContainer(PRInt32 aTag) nsAutoString value; nsresult rv = GetAttributeValue(nsHTMLAtoms::type, value); - if (NS_SUCCEEDED(rv) && value.EqualsIgnoreCase("cite")) { + if (NS_SUCCEEDED(rv) && + NS_LossyConvertUCS2toASCII(value).Equals("cite", nsCaseInsensitiveCStringComparator())) { mCiteQuoteLevel--; } else { diff --git a/mozilla/content/html/style/src/nsCSSStyleSheet.cpp b/mozilla/content/html/style/src/nsCSSStyleSheet.cpp index d1ce83b139f..9fa40ffeb22 100644 --- a/mozilla/content/html/style/src/nsCSSStyleSheet.cpp +++ b/mozilla/content/html/style/src/nsCSSStyleSheet.cpp @@ -3681,7 +3681,7 @@ static PRBool SelectorMatches(RuleProcessorData &data, result = PRBool(localTrue == value.Equals(attr->mValue)); } else { - result = PRBool(localTrue == value.EqualsIgnoreCase(attr->mValue)); + result = PRBool(localTrue == value.Equals(attr->mValue, nsCaseInsensitiveStringComparator())); } break; case NS_ATTR_FUNC_INCLUDES: @@ -3738,7 +3738,7 @@ static PRBool SelectorMatches(RuleProcessorData &data, } break; case NS_ATTR_FUNC_CONTAINSMATCH: - result = PRBool(localTrue == (-1 != value.Find(attr->mValue, isCaseSensitive))); + result = PRBool(localTrue == (FindInReadable(attr->mValue, value, nsCaseInsensitiveStringComparator()))); break; } } diff --git a/mozilla/content/xbl/src/nsXBLBinding.cpp b/mozilla/content/xbl/src/nsXBLBinding.cpp index 1de91fb37ed..f507db79154 100644 --- a/mozilla/content/xbl/src/nsXBLBinding.cpp +++ b/mozilla/content/xbl/src/nsXBLBinding.cpp @@ -1387,7 +1387,7 @@ nsXBLBinding::IsInExcludesList(nsIAtom* aTag, const nsString& aList) if (aList == NS_LITERAL_STRING("*")) return PR_TRUE; // match _everything_! - PRInt32 indx = aList.Find(element); + PRInt32 indx = aList.Find(element, 0); if (indx == -1) return PR_FALSE; // not in the list at all diff --git a/mozilla/content/xml/content/src/nsXMLElement.cpp b/mozilla/content/xml/content/src/nsXMLElement.cpp index ffca9fdbddb..da32980e781 100644 --- a/mozilla/content/xml/content/src/nsXMLElement.cpp +++ b/mozilla/content/xml/content/src/nsXMLElement.cpp @@ -367,6 +367,10 @@ nsXMLElement::MaybeTriggerAutoLink(nsIWebShell *aShell) nsresult rv = NS_OK; if (mIsLink) { + // preload and precalculate length of atom outside of loop + const PRUnichar *onloadUnicode; + kOnLoadAtom->GetUnicode(&onloadUnicode); + nsDependentString onloadString(onloadUnicode); do { // actuate="onLoad" ? nsAutoString value; @@ -374,7 +378,7 @@ nsXMLElement::MaybeTriggerAutoLink(nsIWebShell *aShell) kActuateAtom, value); if (rv == NS_CONTENT_ATTR_HAS_VALUE && - value.EqualsAtom(kOnLoadAtom, PR_FALSE)) { + value.Equals(onloadString)) { // show= ? nsLinkVerb verb = eLinkVerb_Undefined; diff --git a/mozilla/content/xul/document/src/nsXULCommandDispatcher.cpp b/mozilla/content/xul/document/src/nsXULCommandDispatcher.cpp index 2914a02439c..2b159ad65f9 100644 --- a/mozilla/content/xul/document/src/nsXULCommandDispatcher.cpp +++ b/mozilla/content/xul/document/src/nsXULCommandDispatcher.cpp @@ -390,7 +390,7 @@ nsXULCommandDispatcher::Matches(const nsString& aList, if (aList.Equals(NS_LITERAL_STRING("*"))) return PR_TRUE; // match _everything_! - PRInt32 indx = aList.Find((const PRUnichar *)PromiseFlatString(aElement).get()); + PRInt32 indx = aList.Find(PromiseFlatString(aElement)); if (indx == -1) return PR_FALSE; // not in the list at all diff --git a/mozilla/content/xul/document/src/nsXULDocument.cpp b/mozilla/content/xul/document/src/nsXULDocument.cpp index 122b161665e..020ce2468a7 100644 --- a/mozilla/content/xul/document/src/nsXULDocument.cpp +++ b/mozilla/content/xul/document/src/nsXULDocument.cpp @@ -6374,7 +6374,7 @@ nsXULDocument::CheckTemplateBuilder(nsIContent* aElement) if ((nameSpaceID == kNameSpaceID_XUL) && (baseTag == nsXULAtoms::outliner)) { nsAutoString flags; aElement->GetAttr(kNameSpaceID_None, nsXULAtoms::flags, flags); - if (flags.Find(NS_LITERAL_STRING("dont-build-content").get()) >= 0) { + if (flags.Find(NS_LITERAL_STRING("dont-build-content")) >= 0) { nsCOMPtr builder = do_CreateInstance("@mozilla.org/xul/xul-outliner-builder;1"); diff --git a/mozilla/content/xul/templates/src/nsXULTemplateBuilder.cpp b/mozilla/content/xul/templates/src/nsXULTemplateBuilder.cpp index 6d675751772..c92e5ce3f70 100644 --- a/mozilla/content/xul/templates/src/nsXULTemplateBuilder.cpp +++ b/mozilla/content/xul/templates/src/nsXULTemplateBuilder.cpp @@ -1482,7 +1482,7 @@ nsXULTemplateBuilder::InitializeRuleNetwork() nsAutoString flags; mRoot->GetAttr(kNameSpaceID_None, nsXULAtoms::flags, flags); - if (flags.Find(NS_LITERAL_STRING("dont-test-empty").get()) >= 0) + if (flags.Find(NS_LITERAL_STRING("dont-test-empty")) >= 0) mFlags |= eDontTestEmpty; // Initialize the rule network diff --git a/mozilla/editor/libeditor/text/nsPlaintextEditor.cpp b/mozilla/editor/libeditor/text/nsPlaintextEditor.cpp index 725ff47c332..6bdb302e794 100644 --- a/mozilla/editor/libeditor/text/nsPlaintextEditor.cpp +++ b/mozilla/editor/libeditor/text/nsPlaintextEditor.cpp @@ -99,6 +99,7 @@ #include "nsIPref.h" #include "nsStyleConsts.h" #include "nsIStyleContext.h" +#include "nsUnicharUtils.h" #include "nsAOLCiter.h" #include "nsInternetCiter.h" @@ -262,7 +263,6 @@ nsPlaintextEditor::SetDocumentCharacterSet(const nsAReadableString & characterSe nsCOMPtrdomdoc; result = GetDocument(getter_AddRefs(domdoc)); if (NS_SUCCEEDED(result) && domdoc) { - nsAutoString newMetaString; nsCOMPtrmetaList; nsCOMPtrmetaNode; nsCOMPtrmetaElement; @@ -280,20 +280,26 @@ nsPlaintextEditor::SetDocumentCharacterSet(const nsAReadableString & characterSe metaElement = do_QueryInterface(metaNode); if (!metaElement) continue; - nsString currentValue; + nsAutoString currentValue; if (NS_FAILED(metaElement->GetAttribute(NS_LITERAL_STRING("http-equiv"), currentValue))) continue; - if (kNotFound != currentValue.Find("content-type", PR_TRUE)) { + if (FindInReadable(NS_LITERAL_STRING("content-type"), + currentValue, + nsCaseInsensitiveStringComparator())) { NS_NAMED_LITERAL_STRING(content, "content"); if (NS_FAILED(metaElement->GetAttribute(content, currentValue))) continue; - NS_NAMED_LITERAL_STRING(charset, "charset="); - PRInt32 offset = currentValue.Find(charset.get(), PR_TRUE); - if (kNotFound != offset) { - currentValue.Left(newMetaString, offset); // copy current value before "charset=" (e.g. text/html) - newMetaString.Append(charset); - newMetaString.Append(characterSet); - result = nsEditor::SetAttribute(metaElement, content, newMetaString); + NS_NAMED_LITERAL_STRING(charsetEquals, "charset="); + nsAString::const_iterator originalStart, start, end; + currentValue.BeginReading(start); + currentValue.EndReading(end); + if (FindInReadable(charsetEquals, start, end, + nsCaseInsensitiveStringComparator())) { + + // set attribute to charset=text/html + result = nsEditor::SetAttribute(metaElement, content, + Substring(originalStart, start) + + charsetEquals + characterSet); if (NS_SUCCEEDED(result)) newMetaCharset = PR_FALSE; break; @@ -322,10 +328,9 @@ nsPlaintextEditor::SetDocumentCharacterSet(const nsAReadableString & characterSe // not undoable, undo should undo CreateNode result = metaElement->SetAttribute(NS_LITERAL_STRING("http-equiv"), NS_LITERAL_STRING("Content-Type")); if (NS_SUCCEEDED(result)) { - newMetaString.Assign(NS_LITERAL_STRING("text/html;charset=")); - newMetaString.Append(characterSet); // not undoable, undo should undo CreateNode - result = metaElement->SetAttribute(NS_LITERAL_STRING("content"), newMetaString); + result = metaElement->SetAttribute(NS_LITERAL_STRING("content"), + NS_LITERAL_STRING("text/html;charset=") + characterSet); } } } diff --git a/mozilla/embedding/components/webbrowserpersist/src/Makefile.in b/mozilla/embedding/components/webbrowserpersist/src/Makefile.in index bdcc7ae70fc..7787991138b 100644 --- a/mozilla/embedding/components/webbrowserpersist/src/Makefile.in +++ b/mozilla/embedding/components/webbrowserpersist/src/Makefile.in @@ -24,7 +24,7 @@ VPATH = @srcdir@ include $(DEPTH)/config/autoconf.mk -MODULE = embedcomponents +MODULE = webbrowserpersist LIBRARY_NAME = webbrowserpersist_s REQUIRES = xpcom \ string \ @@ -36,8 +36,8 @@ REQUIRES = xpcom \ exthandler \ uriloader \ mimetype \ - webbrowserpersist \ intl \ + unicharutil \ $(NULL) CPPSRCS = nsWebBrowserPersist.cpp \ diff --git a/mozilla/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp b/mozilla/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp index b8382fddfe1..811727ed2e1 100644 --- a/mozilla/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp +++ b/mozilla/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp @@ -36,6 +36,7 @@ #include "nsIHttpChannel.h" #include "nsIUploadChannel.h" #include "nsEscape.h" +#include "nsUnicharUtils.h" #include "nsCExternalHandlerService.h" @@ -1119,7 +1120,7 @@ nsWebBrowserPersist::GetDocEncoderContentType(nsIDOMDocument *aDocument, const P // text/plain if (contentType.Length() > 0 && - !contentType.EqualsIgnoreCase(defaultContentType)) + !contentType.Equals(defaultContentType, nsCaseInsensitiveStringComparator())) { // Check if there is an encoder for the desired content type nsCAutoString contractID(NS_DOC_ENCODER_CONTRACTID_BASE); diff --git a/mozilla/extensions/transformiix/source/base/MozillaString.cpp b/mozilla/extensions/transformiix/source/base/MozillaString.cpp index 3e36b688312..f692dba9d5b 100644 --- a/mozilla/extensions/transformiix/source/base/MozillaString.cpp +++ b/mozilla/extensions/transformiix/source/base/MozillaString.cpp @@ -523,7 +523,7 @@ PRInt32 String::indexOf(const String& data, PRInt32 offset) const nsString nsStrData((PRUnichar *)data.toUnicode()); - return ptrNSString->Find(nsStrData, PR_FALSE, searchIndex); + return ptrNSString->Find(nsStrData, searchIndex); } // @@ -553,7 +553,7 @@ MBool String::isEqualIgnoreCase(const String& data) const return MB_FALSE; else { - if (ptrNSString->EqualsIgnoreCase(data.getConstNSString()) == PR_TRUE) + if (ptrNSString->Equals(data.getConstNSString(), nsCaseInsensitiveStringComparator()) == PR_TRUE) return MB_TRUE; else return MB_FALSE; @@ -597,7 +597,7 @@ PRInt32 String::lastIndexOf(const String& data, PRInt32 offset) const { nsString nsData((PRUnichar *)data.toUnicode(), data.length()); - return ptrNSString->RFind(nsData, PR_FALSE, offset); + return ptrNSString->RFind(nsData, offset); } // diff --git a/mozilla/intl/strres/src/nsAcceptLang.cpp b/mozilla/intl/strres/src/nsAcceptLang.cpp index 6f06934faee..b384d32ba33 100644 --- a/mozilla/intl/strres/src/nsAcceptLang.cpp +++ b/mozilla/intl/strres/src/nsAcceptLang.cpp @@ -113,7 +113,7 @@ nsAcceptLang::GetAcceptLangFromLocale(const PRUnichar *aLocale, PRUnichar **_ret /* not in languageNames.properties; lang only? */ - PRInt32 dash = lc_tmp.FindCharInSet("-"); + PRInt32 dash = lc_tmp.FindChar('-'); nsAutoString lang; nsAutoString country; if (dash > 0) { @@ -167,7 +167,7 @@ nsAcceptLang::GetLocaleFromAcceptLang(const PRUnichar *aName, PRUnichar **_retva /* always return lang-country */ - PRInt32 dash = acceptLang.FindCharInSet("-"); + PRInt32 dash = acceptLang.FindChar('-'); if (dash > 0) { /* lang-country already */ *_retval = ToNewUnicode(acceptLang); diff --git a/mozilla/intl/strres/tests/StringBundleTest.cpp b/mozilla/intl/strres/tests/StringBundleTest.cpp index b2c32ed2791..df8e7131f23 100644 --- a/mozilla/intl/strres/tests/StringBundleTest.cpp +++ b/mozilla/intl/strres/tests/StringBundleTest.cpp @@ -82,7 +82,7 @@ getCountry(PRUnichar *lc_name_unichar, PRUnichar **aCountry) lc_name.Assign(lc_name_unichar); // nsMemory::Free(lc_name_unichar); - PRInt32 dash = lc_name.FindCharInSet("-"); + PRInt32 dash = lc_name.FindChar('-'); if (dash > 0) { /* */ diff --git a/mozilla/intl/unicharutil/src/nsEntityConverter.cpp b/mozilla/intl/unicharutil/src/nsEntityConverter.cpp index e31e0a2e4aa..95bb86002b1 100644 --- a/mozilla/intl/unicharutil/src/nsEntityConverter.cpp +++ b/mozilla/intl/unicharutil/src/nsEntityConverter.cpp @@ -68,7 +68,7 @@ nsEntityConverter::~nsEntityConverter() NS_IMETHODIMP nsEntityConverter::LoadVersionPropertyFile() { - nsString aUrl(NS_LITERAL_STRING("resource:/res/entityTables/htmlEntityVersions.properties")); + NS_NAMED_LITERAL_STRING(aUrl, "resource:/res/entityTables/htmlEntityVersions.properties"); nsIPersistentProperties* entityProperties = NULL; nsIURI* url = NULL; nsIInputStream* in = NULL; diff --git a/mozilla/intl/unicharutil/util/nsUnicharUtils.cpp b/mozilla/intl/unicharutil/util/nsUnicharUtils.cpp index 8804f6a5ca1..35e05216313 100644 --- a/mozilla/intl/unicharutil/util/nsUnicharUtils.cpp +++ b/mozilla/intl/unicharutil/util/nsUnicharUtils.cpp @@ -241,7 +241,9 @@ nsCaseInsensitiveStringComparator::operator()( const PRUnichar* lhs, const PRUni int nsCaseInsensitiveStringComparator::operator()( PRUnichar lhs, PRUnichar rhs ) const { + // see if they're an exact match first if (lhs == rhs) return 0; + NS_InitCaseConversion(); gCaseConv->ToLower(lhs, &lhs); diff --git a/mozilla/layout/base/src/nsCopySupport.cpp b/mozilla/layout/base/src/nsCopySupport.cpp index 19133e5d502..0ff6f509b5b 100644 --- a/mozilla/layout/base/src/nsCopySupport.cpp +++ b/mozilla/layout/base/src/nsCopySupport.cpp @@ -310,7 +310,7 @@ nsresult nsCopySupport::IsPlainTextContext(nsISelection *aSel, nsIDocument *aDoc nsCOMPtr bodyElem = do_QueryInterface(selContent); nsAutoString wsVal; rv = bodyElem->GetAttribute(NS_LITERAL_STRING("style"), wsVal); - if (NS_SUCCEEDED(rv) && (kNotFound != wsVal.Find(NS_LITERAL_STRING("-moz-pre-wrap").get()))) + if (NS_SUCCEEDED(rv) && (kNotFound != wsVal.Find(NS_LITERAL_STRING("-moz-pre-wrap")))) { *aIsPlainTextContext = PR_TRUE; break; diff --git a/mozilla/layout/generic/nsPageFrame.cpp b/mozilla/layout/generic/nsPageFrame.cpp index 28c99e61a01..54dda5480d8 100644 --- a/mozilla/layout/generic/nsPageFrame.cpp +++ b/mozilla/layout/generic/nsPageFrame.cpp @@ -288,29 +288,21 @@ nsPageFrame::IsPercentageBase(PRBool& aBase) const return NS_OK; } -//------------------------------------------------------------------------------ -// helper function for converting from char * to unichar -static PRUnichar * -GetUStr(const char * aCStr) -{ - return ToNewUnicode(nsDependentCString(aCStr)); -} - // Remove fix below when string gets fixed #define WORKAROUND_FOR_BUG_110335 // replace the & with the value, but if the value is empty // set the string to zero length static void -SubstValueForCode(nsString& aStr, PRUnichar * aUKey, PRUnichar * aUStr) +SubstValueForCode(nsString& aStr, const PRUnichar * aUKey, const PRUnichar * aUStr) { #ifdef WORKAROUND_FOR_BUG_110335 - PRUnichar* uKeyStr = aUKey; + const PRUnichar* uKeyStr = aUKey; // Check to make sure our subst code & isn't in the data string // for example &T for title is in QB&T nsAutoString dataStr(aUStr); nsAutoString newKey(aUKey); - PRBool fixingSubstr = dataStr.Find(newKey) > -1; + PRBool fixingSubstr = (dataStr.Find(newKey) != kNotFound); if (fixingSubstr) { // well, the code is in the data str so make up a new code // but make sure it it isn't in either substs string or the data string @@ -329,14 +321,11 @@ SubstValueForCode(nsString& aStr, PRUnichar * aUKey, PRUnichar * aUStr) // Ok, we have the new code, so repplace the old code // in the dest str with the new code - nsAutoString oldKey(aUKey); - aStr.ReplaceSubstring(oldKey, newKey); + aStr.ReplaceSubstring(aUKey, newKey.get()); uKeyStr = ToNewUnicode(newKey); } - nsAutoString str; - str = aUStr; - if (str.Length() == 0) { + if (nsCRT::strlen(aUStr) == 0) { aStr.SetLength(0); } else { aStr.ReplaceSubstring(uKeyStr, aUStr); @@ -344,12 +333,11 @@ SubstValueForCode(nsString& aStr, PRUnichar * aUKey, PRUnichar * aUStr) // Free uKeyStr only if we fixed the string. if (fixingSubstr) { - nsMemory::Free(uKeyStr); + nsMemory::Free(NS_CONST_CAST(PRUnichar*, uKeyStr)); } #else - nsAutoString str; - str = aUStr; - if (str.Length() == 0) { + + if (nsCRT::strlen(aUStr) == 0) { aStr.SetLength(0); } else { aStr.ReplaceSubstring(aUKey, aUStr); @@ -368,74 +356,53 @@ nsPageFrame::ProcessSpecialCodes(const nsString& aStr, nsString& aNewStr) // Search to see if the &D code is in the string // then subst in the current date/time - PRUnichar * kDate = GetUStr("&D"); - if (kDate != nsnull) { - if (aStr.Find(kDate) > -1) { - if (mPD->mDateTimeStr != nsnull) { - aNewStr.ReplaceSubstring(kDate, mPD->mDateTimeStr); - } else { - aNewStr.ReplaceSubstring(kDate, NS_LITERAL_STRING("").get()); - } - nsMemory::Free(kDate); - return; + NS_NAMED_LITERAL_STRING(kDate, "&D"); + if (aStr.Find(kDate) != kNotFound) { + if (mPD->mDateTimeStr != nsnull) { + aNewStr.ReplaceSubstring(kDate.get(), mPD->mDateTimeStr); + } else { + aNewStr.ReplaceSubstring(kDate.get(), NS_LITERAL_STRING("").get()); } - nsMemory::Free(kDate); + return; } // NOTE: Must search for &PT before searching for &P // // Search to see if the "page number and page" total code are in the string - // and replace the page number and page total code with the actual values - PRUnichar * kPage = GetUStr("&PT"); - if (kPage != nsnull) { - if (aStr.Find(kPage) > -1) { - PRUnichar * uStr = nsTextFormatter::smprintf(mPD->mPageNumAndTotalsFormat, mPageNum, mTotNumPages); - aNewStr.ReplaceSubstring(kPage, uStr); - nsMemory::Free(uStr); - nsMemory::Free(kPage); - return; - } - nsMemory::Free(kPage); + // and replace the page number and page total code with the actual + // values + NS_NAMED_LITERAL_STRING(kPageAndTotal, "&PT"); + if (aStr.Find(kPageAndTotal) != kNotFound) { + PRUnichar * uStr = nsTextFormatter::smprintf(mPD->mPageNumAndTotalsFormat, mPageNum, mTotNumPages); + aNewStr.ReplaceSubstring(kPageAndTotal.get(), uStr); + nsMemory::Free(uStr); + return; } // Search to see if the page number code is in the string - // and replace the page number code with the actual values - kPage = GetUStr("&P"); - if (kPage != nsnull) { - if (aStr.Find(kPage) > -1) { - PRUnichar * uStr = nsTextFormatter::smprintf(mPD->mPageNumFormat, mPageNum); - aNewStr.ReplaceSubstring(kPage, uStr); - nsMemory::Free(uStr); - nsMemory::Free(kPage); - return; - } - nsMemory::Free(kPage); + // and replace the page number code with the actual value + NS_NAMED_LITERAL_STRING(kPage, "&P"); + if (aStr.Find(kPage) != kNotFound) { + PRUnichar * uStr = nsTextFormatter::smprintf(mPD->mPageNumFormat, mPageNum); + aNewStr.ReplaceSubstring(kPage.get(), uStr); + nsMemory::Free(uStr); + return; } - PRUnichar * kTitle = GetUStr("&T"); - if (kTitle != nsnull) { - if (aStr.Find(kTitle) > -1) { - PRUnichar * uTitle; - mPD->mPrintOptions->GetTitle(&uTitle); // creates memory - SubstValueForCode(aNewStr, kTitle, uTitle); - nsMemory::Free(uTitle); - nsMemory::Free(kTitle); - return; - } - nsMemory::Free(kTitle); + NS_NAMED_LITERAL_STRING(kTitle, "&T"); + if (aStr.Find(kTitle) != kNotFound) { + nsXPIDLString uTitle; + mPD->mPrintOptions->GetTitle(getter_Copies(uTitle)); + SubstValueForCode(aNewStr, kTitle.get(), uTitle.get()); + return; } - PRUnichar * kDocURL = GetUStr("&U"); - if (kDocURL != nsnull) { - if (aStr.Find(kDocURL) > -1) { - PRUnichar * uDocURL; - mPD->mPrintOptions->GetDocURL(&uDocURL); // creates memory - SubstValueForCode(aNewStr, kDocURL, uDocURL); - nsMemory::Free(uDocURL); - nsMemory::Free(kDocURL); - return; - } - nsMemory::Free(kDocURL); + NS_NAMED_LITERAL_STRING(kDocURL, "&U"); + if (aStr.Find(kDocURL) != kNotFound) { + nsXPIDLString uDocURL; + mPD->mPrintOptions->GetDocURL(getter_Copies(uDocURL)); + SubstValueForCode(aNewStr, kDocURL.get(), uDocURL.get()); + return; } } diff --git a/mozilla/layout/html/base/src/nsPageFrame.cpp b/mozilla/layout/html/base/src/nsPageFrame.cpp index 28c99e61a01..54dda5480d8 100644 --- a/mozilla/layout/html/base/src/nsPageFrame.cpp +++ b/mozilla/layout/html/base/src/nsPageFrame.cpp @@ -288,29 +288,21 @@ nsPageFrame::IsPercentageBase(PRBool& aBase) const return NS_OK; } -//------------------------------------------------------------------------------ -// helper function for converting from char * to unichar -static PRUnichar * -GetUStr(const char * aCStr) -{ - return ToNewUnicode(nsDependentCString(aCStr)); -} - // Remove fix below when string gets fixed #define WORKAROUND_FOR_BUG_110335 // replace the & with the value, but if the value is empty // set the string to zero length static void -SubstValueForCode(nsString& aStr, PRUnichar * aUKey, PRUnichar * aUStr) +SubstValueForCode(nsString& aStr, const PRUnichar * aUKey, const PRUnichar * aUStr) { #ifdef WORKAROUND_FOR_BUG_110335 - PRUnichar* uKeyStr = aUKey; + const PRUnichar* uKeyStr = aUKey; // Check to make sure our subst code & isn't in the data string // for example &T for title is in QB&T nsAutoString dataStr(aUStr); nsAutoString newKey(aUKey); - PRBool fixingSubstr = dataStr.Find(newKey) > -1; + PRBool fixingSubstr = (dataStr.Find(newKey) != kNotFound); if (fixingSubstr) { // well, the code is in the data str so make up a new code // but make sure it it isn't in either substs string or the data string @@ -329,14 +321,11 @@ SubstValueForCode(nsString& aStr, PRUnichar * aUKey, PRUnichar * aUStr) // Ok, we have the new code, so repplace the old code // in the dest str with the new code - nsAutoString oldKey(aUKey); - aStr.ReplaceSubstring(oldKey, newKey); + aStr.ReplaceSubstring(aUKey, newKey.get()); uKeyStr = ToNewUnicode(newKey); } - nsAutoString str; - str = aUStr; - if (str.Length() == 0) { + if (nsCRT::strlen(aUStr) == 0) { aStr.SetLength(0); } else { aStr.ReplaceSubstring(uKeyStr, aUStr); @@ -344,12 +333,11 @@ SubstValueForCode(nsString& aStr, PRUnichar * aUKey, PRUnichar * aUStr) // Free uKeyStr only if we fixed the string. if (fixingSubstr) { - nsMemory::Free(uKeyStr); + nsMemory::Free(NS_CONST_CAST(PRUnichar*, uKeyStr)); } #else - nsAutoString str; - str = aUStr; - if (str.Length() == 0) { + + if (nsCRT::strlen(aUStr) == 0) { aStr.SetLength(0); } else { aStr.ReplaceSubstring(aUKey, aUStr); @@ -368,74 +356,53 @@ nsPageFrame::ProcessSpecialCodes(const nsString& aStr, nsString& aNewStr) // Search to see if the &D code is in the string // then subst in the current date/time - PRUnichar * kDate = GetUStr("&D"); - if (kDate != nsnull) { - if (aStr.Find(kDate) > -1) { - if (mPD->mDateTimeStr != nsnull) { - aNewStr.ReplaceSubstring(kDate, mPD->mDateTimeStr); - } else { - aNewStr.ReplaceSubstring(kDate, NS_LITERAL_STRING("").get()); - } - nsMemory::Free(kDate); - return; + NS_NAMED_LITERAL_STRING(kDate, "&D"); + if (aStr.Find(kDate) != kNotFound) { + if (mPD->mDateTimeStr != nsnull) { + aNewStr.ReplaceSubstring(kDate.get(), mPD->mDateTimeStr); + } else { + aNewStr.ReplaceSubstring(kDate.get(), NS_LITERAL_STRING("").get()); } - nsMemory::Free(kDate); + return; } // NOTE: Must search for &PT before searching for &P // // Search to see if the "page number and page" total code are in the string - // and replace the page number and page total code with the actual values - PRUnichar * kPage = GetUStr("&PT"); - if (kPage != nsnull) { - if (aStr.Find(kPage) > -1) { - PRUnichar * uStr = nsTextFormatter::smprintf(mPD->mPageNumAndTotalsFormat, mPageNum, mTotNumPages); - aNewStr.ReplaceSubstring(kPage, uStr); - nsMemory::Free(uStr); - nsMemory::Free(kPage); - return; - } - nsMemory::Free(kPage); + // and replace the page number and page total code with the actual + // values + NS_NAMED_LITERAL_STRING(kPageAndTotal, "&PT"); + if (aStr.Find(kPageAndTotal) != kNotFound) { + PRUnichar * uStr = nsTextFormatter::smprintf(mPD->mPageNumAndTotalsFormat, mPageNum, mTotNumPages); + aNewStr.ReplaceSubstring(kPageAndTotal.get(), uStr); + nsMemory::Free(uStr); + return; } // Search to see if the page number code is in the string - // and replace the page number code with the actual values - kPage = GetUStr("&P"); - if (kPage != nsnull) { - if (aStr.Find(kPage) > -1) { - PRUnichar * uStr = nsTextFormatter::smprintf(mPD->mPageNumFormat, mPageNum); - aNewStr.ReplaceSubstring(kPage, uStr); - nsMemory::Free(uStr); - nsMemory::Free(kPage); - return; - } - nsMemory::Free(kPage); + // and replace the page number code with the actual value + NS_NAMED_LITERAL_STRING(kPage, "&P"); + if (aStr.Find(kPage) != kNotFound) { + PRUnichar * uStr = nsTextFormatter::smprintf(mPD->mPageNumFormat, mPageNum); + aNewStr.ReplaceSubstring(kPage.get(), uStr); + nsMemory::Free(uStr); + return; } - PRUnichar * kTitle = GetUStr("&T"); - if (kTitle != nsnull) { - if (aStr.Find(kTitle) > -1) { - PRUnichar * uTitle; - mPD->mPrintOptions->GetTitle(&uTitle); // creates memory - SubstValueForCode(aNewStr, kTitle, uTitle); - nsMemory::Free(uTitle); - nsMemory::Free(kTitle); - return; - } - nsMemory::Free(kTitle); + NS_NAMED_LITERAL_STRING(kTitle, "&T"); + if (aStr.Find(kTitle) != kNotFound) { + nsXPIDLString uTitle; + mPD->mPrintOptions->GetTitle(getter_Copies(uTitle)); + SubstValueForCode(aNewStr, kTitle.get(), uTitle.get()); + return; } - PRUnichar * kDocURL = GetUStr("&U"); - if (kDocURL != nsnull) { - if (aStr.Find(kDocURL) > -1) { - PRUnichar * uDocURL; - mPD->mPrintOptions->GetDocURL(&uDocURL); // creates memory - SubstValueForCode(aNewStr, kDocURL, uDocURL); - nsMemory::Free(uDocURL); - nsMemory::Free(kDocURL); - return; - } - nsMemory::Free(kDocURL); + NS_NAMED_LITERAL_STRING(kDocURL, "&U"); + if (aStr.Find(kDocURL) != kNotFound) { + nsXPIDLString uDocURL; + mPD->mPrintOptions->GetDocURL(getter_Copies(uDocURL)); + SubstValueForCode(aNewStr, kDocURL.get(), uDocURL.get()); + return; } } diff --git a/mozilla/layout/style/nsCSSStyleSheet.cpp b/mozilla/layout/style/nsCSSStyleSheet.cpp index d1ce83b139f..9fa40ffeb22 100644 --- a/mozilla/layout/style/nsCSSStyleSheet.cpp +++ b/mozilla/layout/style/nsCSSStyleSheet.cpp @@ -3681,7 +3681,7 @@ static PRBool SelectorMatches(RuleProcessorData &data, result = PRBool(localTrue == value.Equals(attr->mValue)); } else { - result = PRBool(localTrue == value.EqualsIgnoreCase(attr->mValue)); + result = PRBool(localTrue == value.Equals(attr->mValue, nsCaseInsensitiveStringComparator())); } break; case NS_ATTR_FUNC_INCLUDES: @@ -3738,7 +3738,7 @@ static PRBool SelectorMatches(RuleProcessorData &data, } break; case NS_ATTR_FUNC_CONTAINSMATCH: - result = PRBool(localTrue == (-1 != value.Find(attr->mValue, isCaseSensitive))); + result = PRBool(localTrue == (FindInReadable(attr->mValue, value, nsCaseInsensitiveStringComparator()))); break; } } diff --git a/mozilla/layout/xul/base/src/nsTextBoxFrame.cpp b/mozilla/layout/xul/base/src/nsTextBoxFrame.cpp index 62f57fd739e..057ae790b2f 100644 --- a/mozilla/layout/xul/base/src/nsTextBoxFrame.cpp +++ b/mozilla/layout/xul/base/src/nsTextBoxFrame.cpp @@ -709,7 +709,7 @@ nsTextBoxFrame::UpdateAccessTitle() nsMenuBarListener::GetMenuAccessKey(&menuAccessKey); if (menuAccessKey) { if (!mAccessKey.IsEmpty()) { - if ((mTitle.Find(mAccessKey, PR_TRUE) == kNotFound) + if (( !FindInReadable(mAccessKey, mTitle, nsCaseInsensitiveStringComparator())) || AlwaysAppendAccessKey()) { nsAutoString tmpstring(NS_LITERAL_STRING("(")); @@ -747,17 +747,34 @@ nsTextBoxFrame::UpdateAccessIndex() if (!mAccessKeyInfo) mAccessKeyInfo = new nsAccessKeyInfo(); + nsAString::const_iterator start, end; + + mCroppedTitle.BeginReading(start); + mCroppedTitle.EndReading(end); + + // remember the beginning of the string + nsAString::const_iterator originalStart = start; + + PRBool found; if (!AlwaysAppendAccessKey()) { - // not appending access key - do case-sensitive search first - mAccessKeyInfo->mAccesskeyIndex = mCroppedTitle.Find(mAccessKey, PR_FALSE); - if (mAccessKeyInfo->mAccesskeyIndex == kNotFound) { + // not appending access key - do case-sensitive search + // first + found = FindInReadable(mAccessKey, start, end); + if (!found) { // didn't find it - perform a case-insensitive search - mAccessKeyInfo->mAccesskeyIndex = mCroppedTitle.Find(mAccessKey, PR_TRUE); + start = originalStart; + found = FindInReadable(mAccessKey, start, end, + nsCaseInsensitiveStringComparator()); } } else { - // use case-insensitive, reverse find for appended access keys - mAccessKeyInfo->mAccesskeyIndex = mCroppedTitle.RFind(mAccessKey, PR_TRUE); + found = RFindInReadable(mAccessKey, start, end, + nsCaseInsensitiveStringComparator()); } + + if (found) + mAccessKeyInfo->mAccesskeyIndex = Distance(originalStart, start); + else + mAccessKeyInfo->mAccesskeyIndex = kNotFound; } } } diff --git a/mozilla/mailnews/addrbook/src/nsAbAutoCompleteSession.cpp b/mozilla/mailnews/addrbook/src/nsAbAutoCompleteSession.cpp index 2f8feefacf1..4250e5e5a6c 100644 --- a/mozilla/mailnews/addrbook/src/nsAbAutoCompleteSession.cpp +++ b/mozilla/mailnews/addrbook/src/nsAbAutoCompleteSession.cpp @@ -243,8 +243,8 @@ nsAbAutoCompleteSession::AddToResult(const PRUnichar* pNickNameStr, if (type != DEFAULT_MATCH && !bIsMailList) { nsAutoString emailaddr(pEmailStr); - PRInt32 foundIndex = emailaddr.Find(mDefaultDomain, PR_TRUE); - if (foundIndex > 0) + if (FindInReadable(mDefaultDomain, emailaddr, + nsCaseInsensitiveStringComparator())) { // okay the match contains the default domain, we want to insert it // AFTER any exisiting matches of the same type which also have a domain diff --git a/mozilla/mailnews/addrbook/src/nsAbDirectoryQuery.cpp b/mozilla/mailnews/addrbook/src/nsAbDirectoryQuery.cpp index 921ab2738a4..c1759870564 100644 --- a/mozilla/mailnews/addrbook/src/nsAbDirectoryQuery.cpp +++ b/mozilla/mailnews/addrbook/src/nsAbDirectoryQuery.cpp @@ -45,6 +45,7 @@ #include "nsXPIDLString.h" #include "nsReadableUtils.h" +#include "nsUnicharUtils.h" NS_IMPL_THREADSAFE_ISUPPORTS1(nsAbDirectoryQuerySimpleBooleanExpression, nsIAbBooleanExpression) @@ -618,28 +619,38 @@ nsresult nsAbDirectoryQuery::matchCardCondition (nsIAbCard* card, *matchFound = PR_TRUE; break; case nsIAbBooleanConditionTypes::Contains: - *matchFound = value.Find (matchValue.get(), PR_TRUE) >= 0; + *matchFound = FindInReadable(matchValue, value, nsCaseInsensitiveStringComparator()); break; case nsIAbBooleanConditionTypes::DoesNotContain: - *matchFound = value.Find (matchValue.get(), PR_TRUE) < 0; + *matchFound = !FindInReadable(matchValue, value, nsCaseInsensitiveStringComparator()); break; case nsIAbBooleanConditionTypes::Is: - *matchFound = value.CompareWithConversion (matchValue, PR_TRUE) == 0; + *matchFound = value.Equals (matchValue, nsCaseInsensitiveStringComparator()); break; case nsIAbBooleanConditionTypes::IsNot: - *matchFound = value.CompareWithConversion (matchValue, PR_TRUE) != 0; + *matchFound = !value.Equals (matchValue, nsCaseInsensitiveStringComparator()); break; case nsIAbBooleanConditionTypes::BeginsWith: - *matchFound = value.Find (matchValue.get(), PR_TRUE) == 0; + { + if (value.Length() < matchValue.Length()) { + *matchFound = PR_FALSE; + break; + } + *matchFound = + matchValue.Equals(Substring(value, 0, + matchValue.Length()), + nsCaseInsensitiveStringComparator()); + } break; case nsIAbBooleanConditionTypes::LessThan: - *matchFound = value.CompareWithConversion (matchValue, PR_TRUE) < 0; + *matchFound = Compare(value, matchValue, nsCaseInsensitiveStringComparator()) < 0; break; case nsIAbBooleanConditionTypes::GreaterThan: - *matchFound = value.CompareWithConversion (matchValue, PR_TRUE) > 0; + *matchFound = Compare(value, matchValue, nsCaseInsensitiveStringComparator()) > 0; break; case nsIAbBooleanConditionTypes::EndsWith: { + PRInt32 vl = value.Length (); PRInt32 mvl = matchValue.Length (); @@ -649,7 +660,8 @@ nsresult nsAbDirectoryQuery::matchCardCondition (nsIAbCard* card, break; } - *matchFound = value.Find (matchValue.get(), PR_TRUE, vl - mvl) == (vl - mvl); + *matchFound = matchValue.Equals(Substring(value, vl - mvl, mvl), + nsCaseInsensitiveStringComparator()); break; } case nsIAbBooleanConditionTypes::SoundsLike: diff --git a/mozilla/mailnews/compose/src/nsMsgCompose.cpp b/mozilla/mailnews/compose/src/nsMsgCompose.cpp index f2c1ee39031..cbe7d27fb2d 100644 --- a/mozilla/mailnews/compose/src/nsMsgCompose.cpp +++ b/mozilla/mailnews/compose/src/nsMsgCompose.cpp @@ -2960,10 +2960,13 @@ nsMsgCompose::LoadDataFromFile(nsFileSpec& fSpec, nsString &sigData) nsAutoString metaCharset; metaCharset.Assign(NS_LITERAL_STRING("charset=")); metaCharset.AppendWithConversion(sigEncoding.get()); - PRInt32 metaCharsetOffset = sigData.Find(metaCharset,PR_TRUE,0,-1); - - if (metaCharsetOffset != kNotFound) - sigData.Cut(metaCharsetOffset, metaCharset.Length()); + nsAString::const_iterator realstart, start, end; + sigData.BeginReading(start); + sigData.EndReading(end); + realstart = start; + if (FindInReadable(metaCharset, start, end, + nsCaseInsensitiveStringComparator())) + sigData.Cut(Distance(realstart, start), Distance(start, end)); } PR_FREEIF(readBuf); @@ -3453,7 +3456,7 @@ nsresult nsMsgCompose::GetMailListAddresses(nsString& name, nsISupportsArray* ma rv = enumerator->CurrentItem((nsISupports**)&mailList); if (NS_SUCCEEDED(rv) && mailList) { - if (name.EqualsIgnoreCase(mailList->mFullName)) + if (name.Equals(mailList->mFullName, nsCaseInsensitiveStringComparator())) { if (!mailList->mDirectory) return NS_ERROR_FAILURE; @@ -3763,10 +3766,10 @@ NS_IMETHODIMP nsMsgCompose::CheckAndPopulateRecipients(PRBool populateMailList, if (atPos >= 0) { recipient->mEmail.Right(domain, recipient->mEmail.Length() - atPos - 1); - if (plaintextDomains.Find(domain, PR_TRUE) >= 0) + if (FindInReadable(domain, plaintextDomains, nsCaseInsensitiveStringComparator())) recipient->mPreferFormat = nsIAbPreferMailFormat::plaintext; else - if (htmlDomains.Find(domain, PR_TRUE) >= 0) + if (FindInReadable(domain, htmlDomains, nsCaseInsensitiveStringComparator())) recipient->mPreferFormat = nsIAbPreferMailFormat::html; } } diff --git a/mozilla/netwerk/streamconv/converters/nsTXTToHTMLConv.cpp b/mozilla/netwerk/streamconv/converters/nsTXTToHTMLConv.cpp index 5fbcf71866f..ff5c52507bd 100644 --- a/mozilla/netwerk/streamconv/converters/nsTXTToHTMLConv.cpp +++ b/mozilla/netwerk/streamconv/converters/nsTXTToHTMLConv.cpp @@ -173,8 +173,7 @@ nsTXTToHTMLConv::OnDataAvailable(nsIRequest* request, nsISupports *aContext, } } - PRInt32 end = mBuffer.RFind(TOKEN_DELIMITERS, - PR_FALSE, mBuffer.Length()); + PRInt32 end = mBuffer.RFind(TOKEN_DELIMITERS, mBuffer.Length()); mBuffer.Left(pushBuffer, PR_MAX(cursor, end)); mBuffer.Cut(0, PR_MAX(cursor, end)); cursor = 0; @@ -242,7 +241,7 @@ nsTXTToHTMLConv::FindToken(PRInt32 cursor, convToken* *_retval) { PRInt32 loc = -1, firstToken = mBuffer.Length(); PRInt8 token = -1; for (PRInt8 i=0; i < mTokens.Count(); i++) { - loc = mBuffer.Find(((convToken*)mTokens[i])->token, PR_FALSE, cursor); + loc = mBuffer.Find(((convToken*)mTokens[i])->token, cursor); if (loc != -1) if (loc < firstToken) { firstToken = loc; diff --git a/mozilla/profile/src/nsProfile.cpp b/mozilla/profile/src/nsProfile.cpp index c3393a72e57..2461c85db6e 100644 --- a/mozilla/profile/src/nsProfile.cpp +++ b/mozilla/profile/src/nsProfile.cpp @@ -68,7 +68,6 @@ #include "nsIStreamListener.h" #include "nsIServiceManager.h" #include "nsCOMPtr.h" -#include "nsIBookmarksService.h" #include "nsIModule.h" #include "nsIGenericFactory.h" #include "nsICookieService.h" @@ -178,7 +177,6 @@ static nsIAtom* sApp_MessengerFolderCache50 = nsnull; // IID and CIDs of all the services needed static NS_DEFINE_CID(kIProfileIID, NS_IPROFILE_IID); -static NS_DEFINE_CID(kBookmarksCID, NS_BOOKMARKS_SERVICE_CID); static NS_DEFINE_CID(kComponentManagerCID, NS_COMPONENTMANAGER_CID); static NS_DEFINE_CID(kRegistryCID, NS_REGISTRY_CID); static NS_DEFINE_CID(kAppShellServiceCID, NS_APPSHELL_SERVICE_CID); diff --git a/mozilla/rdf/base/src/nsRDFParserUtils.cpp b/mozilla/rdf/base/src/nsRDFParserUtils.cpp index c6291a100ee..879e9be508f 100644 --- a/mozilla/rdf/base/src/nsRDFParserUtils.cpp +++ b/mozilla/rdf/base/src/nsRDFParserUtils.cpp @@ -229,7 +229,7 @@ static const char kApostrophe = '\''; PRInt32 endOffset = -1; nsresult result = NS_OK; - offset = aSource.Find(aAttribute); + offset = aSource.Find(aAttribute, 0); if (-1 != offset) { offset = aSource.FindChar('=', offset); diff --git a/mozilla/security/manager/ssl/src/nsCertOutliner.cpp b/mozilla/security/manager/ssl/src/nsCertOutliner.cpp index 3301c892b7c..d8bb9dfed5e 100644 --- a/mozilla/security/manager/ssl/src/nsCertOutliner.cpp +++ b/mozilla/security/manager/ssl/src/nsCertOutliner.cpp @@ -98,8 +98,7 @@ nsCertOutliner::CmpByToken(nsIX509Cert *a, nsIX509Cert *b) a->GetTokenName(getter_Copies(aTok)); b->GetTokenName(getter_Copies(bTok)); if (aTok != nsnull && bTok != nsnull) { - nsAutoString aStr(aTok); - cmp1 = aStr.CompareWithConversion(bTok); + cmp1 = Compare(aTok, bTok); } else { cmp1 = (aTok == nsnull) ? -1 : 1; } @@ -118,8 +117,7 @@ nsCertOutliner::CmpByIssuerOrg(nsIX509Cert *a, nsIX509Cert *b) a->GetIssuerOrganization(getter_Copies(aOrg)); b->GetIssuerOrganization(getter_Copies(bOrg)); if (aOrg != nsnull && bOrg != nsnull) { - nsAutoString aStr(aOrg); - cmp1 = aStr.CompareWithConversion(bOrg); + cmp1 = Compare(aOrg, bOrg); } else { cmp1 = (aOrg == nsnull) ? -1 : 1; } @@ -138,8 +136,7 @@ nsCertOutliner::CmpByName(nsIX509Cert *a, nsIX509Cert *b) a->GetOrganization(getter_Copies(aName)); b->GetOrganization(getter_Copies(bName)); if (aName != nsnull && bName != nsnull) { - nsAutoString aStr(aName); - cmp1 = aStr.CompareWithConversion(bName); + cmp1 = Compare(aName, bName); } else { cmp1 = (aName == nsnull) ? -1 : 1; } diff --git a/mozilla/security/manager/ssl/src/nsCertTree.cpp b/mozilla/security/manager/ssl/src/nsCertTree.cpp index 3301c892b7c..d8bb9dfed5e 100644 --- a/mozilla/security/manager/ssl/src/nsCertTree.cpp +++ b/mozilla/security/manager/ssl/src/nsCertTree.cpp @@ -98,8 +98,7 @@ nsCertOutliner::CmpByToken(nsIX509Cert *a, nsIX509Cert *b) a->GetTokenName(getter_Copies(aTok)); b->GetTokenName(getter_Copies(bTok)); if (aTok != nsnull && bTok != nsnull) { - nsAutoString aStr(aTok); - cmp1 = aStr.CompareWithConversion(bTok); + cmp1 = Compare(aTok, bTok); } else { cmp1 = (aTok == nsnull) ? -1 : 1; } @@ -118,8 +117,7 @@ nsCertOutliner::CmpByIssuerOrg(nsIX509Cert *a, nsIX509Cert *b) a->GetIssuerOrganization(getter_Copies(aOrg)); b->GetIssuerOrganization(getter_Copies(bOrg)); if (aOrg != nsnull && bOrg != nsnull) { - nsAutoString aStr(aOrg); - cmp1 = aStr.CompareWithConversion(bOrg); + cmp1 = Compare(aOrg, bOrg); } else { cmp1 = (aOrg == nsnull) ? -1 : 1; } @@ -138,8 +136,7 @@ nsCertOutliner::CmpByName(nsIX509Cert *a, nsIX509Cert *b) a->GetOrganization(getter_Copies(aName)); b->GetOrganization(getter_Copies(bName)); if (aName != nsnull && bName != nsnull) { - nsAutoString aStr(aName); - cmp1 = aStr.CompareWithConversion(bName); + cmp1 = Compare(aName, bName); } else { cmp1 = (aName == nsnull) ? -1 : 1; } diff --git a/mozilla/security/manager/ssl/src/nsNSSCertificate.cpp b/mozilla/security/manager/ssl/src/nsNSSCertificate.cpp index 431bb1ca45b..e2bc56de9f7 100644 --- a/mozilla/security/manager/ssl/src/nsNSSCertificate.cpp +++ b/mozilla/security/manager/ssl/src/nsNSSCertificate.cpp @@ -3545,8 +3545,7 @@ PRInt32 nsOCSPResponder::CmpCAName(nsIOCSPResponder *a, nsIOCSPResponder *b) a->GetResponseSigner(getter_Copies(aTok)); b->GetResponseSigner(getter_Copies(bTok)); if (aTok != nsnull && bTok != nsnull) { - nsAutoString aStr(aTok); - cmp1 = aStr.CompareWithConversion(bTok); + cmp1 = Compare(aTok, bTok); } else { cmp1 = (aTok == nsnull) ? 1 : -1; } diff --git a/mozilla/string/obsolete/bufferRoutines.h b/mozilla/string/obsolete/bufferRoutines.h index f8ec9809c12..095d552e04d 100644 --- a/mozilla/string/obsolete/bufferRoutines.h +++ b/mozilla/string/obsolete/bufferRoutines.h @@ -693,17 +693,9 @@ PRInt32 Compare1To1(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool a * @param aIgnorecase tells us whether to use a case-sensitive comparison * @return -1,0,1 depending on <,==,> */ -PRInt32 Compare2To2(const PRUnichar* aStr1,const PRUnichar* aStr2,PRUint32 aCount,PRBool aIgnoreCase); -PRInt32 Compare2To2(const PRUnichar* aStr1,const PRUnichar* aStr2,PRUint32 aCount,PRBool aIgnoreCase){ - PRInt32 result=0; -#ifndef XPCOM_STANDALONE - if(aIgnoreCase && NS_SUCCEEDED(NS_InitCaseConversion())) - gCaseConv->CaseInsensitiveCompare(aStr1, aStr2, aCount, &result); - else result=nsCRT::strncmp(aStr1,aStr2,aCount); -#else - NS_ERROR("call not supported in XPCOM_STANDALONE"); -#endif - return result; +PRInt32 Compare2To2(const PRUnichar* aStr1,const PRUnichar* aStr2,PRUint32 aCount); +PRInt32 Compare2To2(const PRUnichar* aStr1,const PRUnichar* aStr2,PRUint32 aCount){ + return nsCRT::strncmp(aStr1, aStr2, aCount * sizeof(PRUnichar)); } diff --git a/mozilla/string/obsolete/nsStr.cpp b/mozilla/string/obsolete/nsStr.cpp index c2fb371a4be..8d7a4ffa2e9 100644 --- a/mozilla/string/obsolete/nsStr.cpp +++ b/mozilla/string/obsolete/nsStr.cpp @@ -647,7 +647,7 @@ PRInt32 nsStrPrivate::FindSubstr1in2(const nsStr& aDest,const nsStr& aTarget, PR return kNotFound; } -PRInt32 nsStrPrivate::FindSubstr2in2(const nsStr& aDest,const nsStr& aTarget, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount) { +PRInt32 nsStrPrivate::FindSubstr2in2(const nsStr& aDest,const nsStr& aTarget, PRInt32 anOffset,PRInt32 aCount) { NS_ASSERTION(aDest.GetCharSize() == eTwoByte, "Must be 2 byte"); NS_ASSERTION(aTarget.GetCharSize() == eTwoByte, "Must be 2 byte"); @@ -675,7 +675,7 @@ PRInt32 nsStrPrivate::FindSubstr2in2(const nsStr& aDest,const nsStr& aTarget, PR const PRUnichar* right = (lastGetUnicode(&unicode) != NS_OK || unicode == nsnull) return PR_FALSE; - cmp=Compare2To2(mUStr,unicode, nsCRT::strlen(mUStr), aIgnoreCase); + cmp=Compare2To2(mUStr,unicode, nsCRT::strlen(mUStr)); result=PRBool(0==cmp); } diff --git a/mozilla/string/obsolete/nsString2.h b/mozilla/string/obsolete/nsString2.h index 63b3f359c30..52cd72ea677 100644 --- a/mozilla/string/obsolete/nsString2.h +++ b/mozilla/string/obsolete/nsString2.h @@ -309,10 +309,12 @@ public: * @param aCount tells us how many iterations to make starting at the given offset * @return offset in string, or -1 (kNotFound) */ - PRInt32 Find(const nsString& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=0,PRInt32 aCount=-1) const; PRInt32 Find(const nsCString& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=0,PRInt32 aCount=-1) const; PRInt32 Find(const char* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=0,PRInt32 aCount=-1) const; - PRInt32 Find(const PRUnichar* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=0,PRInt32 aCount=-1) const; + + PRInt32 Find(const nsAFlatString& aString, PRInt32 anOffset=0, PRInt32 aCount=-1) const; + + PRInt32 Find(const PRUnichar* aString, PRInt32 anOffset=0, PRInt32 aCount=-1) const; /** * This method searches this string for the first character @@ -336,8 +338,9 @@ public: * @return offset in string, or -1 (kNotFound) */ PRInt32 RFind(const char* aCString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=-1,PRInt32 aCount=-1) const; - PRInt32 RFind(const nsString& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=-1,PRInt32 aCount=-1) const; - PRInt32 RFind(const PRUnichar* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=-1,PRInt32 aCount=-1) const; + + PRInt32 RFind(const nsAFlatString& aString, PRInt32 anOffset=0,PRInt32 aCount=-1) const; + PRInt32 RFind(const PRUnichar* aString,PRInt32 anOffset=0,PRInt32 aCount=-1) const; /** @@ -376,20 +379,11 @@ public: */ PRInt32 CompareWithConversion(const char* aString, PRBool aIgnoreCase=PR_FALSE, PRInt32 aCount=-1) const; - PRInt32 CompareWithConversion(const PRUnichar* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const; - /* a hack to make sure things that used to compile continue to compile - even on compilers that don't have proper |explicit| support */ - inline PRInt32 - CompareWithConversion(const nsXPIDLString& aString, PRBool aIgnoreCase=PR_FALSE, PRInt32 aCount=-1) const - { - return CompareWithConversion(aString.get(), aIgnoreCase, aCount); - } - + PRBool EqualsWithConversion(const char* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const; - PRBool EqualsAtom(/*FIX: const */nsIAtom* anAtom,PRBool aIgnoreCase) const; + PRBool EqualsAtom(nsIAtom* anAtom) const; - PRBool EqualsIgnoreCase(const nsString& aString) const; PRBool EqualsIgnoreCase(const char* aString,PRInt32 aCount=-1) const; /** diff --git a/mozilla/string/public/nsReadableUtils.h b/mozilla/string/public/nsReadableUtils.h index dd0c92ac2bb..3ab9ee62bb0 100755 --- a/mozilla/string/public/nsReadableUtils.h +++ b/mozilla/string/public/nsReadableUtils.h @@ -210,6 +210,26 @@ NS_COM void ToLowerCase( const nsACString& aSource, nsACString& aDest ); NS_COM PRBool FindInReadable( const nsAString& aPattern, nsAString::const_iterator&, nsAString::const_iterator&, const nsStringComparator& = nsDefaultStringComparator() ); NS_COM PRBool FindInReadable( const nsACString& aPattern, nsACString::const_iterator&, nsACString::const_iterator&, const nsCStringComparator& = nsDefaultCStringComparator() ); + +/* sometimes we don't care about where the string was, just that we + * found it or not */ +inline PRBool FindInReadable( const nsAString& aPattern, nsAString& aSource, const nsStringComparator& compare = nsDefaultStringComparator() ) +{ + nsAString::const_iterator start, end; + aSource.BeginReading(start); + aSource.EndReading(end); + return FindInReadable(aPattern, start, end, compare); +} + +inline PRBool FindInReadable( const nsACString& aPattern, nsACString& aSource, const nsCStringComparator& compare = nsDefaultCStringComparator() ) +{ + nsACString::const_iterator start, end; + aSource.BeginReading(start); + aSource.EndReading(end); + return FindInReadable(aPattern, start, end, compare); +} + + NS_COM PRBool CaseInsensitiveFindInReadable( const nsACString& aPattern, nsACString::const_iterator&, nsACString::const_iterator& ); /** @@ -220,8 +240,8 @@ NS_COM PRBool CaseInsensitiveFindInReadable( const nsACString& aPattern, nsACStr * Currently, this is equivalent to the O(m*n) implementation previously on |ns[C]String|. * If we need something faster, then we can implement that later. */ -NS_COM PRBool RFindInReadable( const nsAString& aPattern, nsAString::const_iterator&, nsAString::const_iterator& ); -NS_COM PRBool RFindInReadable( const nsACString& aPattern, nsACString::const_iterator&, nsACString::const_iterator& ); +NS_COM PRBool RFindInReadable( const nsAString& aPattern, nsAString::const_iterator&, nsAString::const_iterator&, const nsStringComparator& = nsDefaultStringComparator() ); +NS_COM PRBool RFindInReadable( const nsACString& aPattern, nsACString::const_iterator&, nsACString::const_iterator&, const nsCStringComparator& = nsDefaultCStringComparator() ); /** * Finds the leftmost occurance of |aChar|, if any in the range diff --git a/mozilla/string/src/nsReadableUtils.cpp b/mozilla/string/src/nsReadableUtils.cpp index 84296185583..9b9dd7ab666 100755 --- a/mozilla/string/src/nsReadableUtils.cpp +++ b/mozilla/string/src/nsReadableUtils.cpp @@ -653,7 +653,7 @@ CaseInsensitiveFindInReadable( const nsACString& aPattern, nsACString::const_ite */ NS_COM PRBool -RFindInReadable( const nsAString& aPattern, nsAString::const_iterator& aSearchStart, nsAString::const_iterator& aSearchEnd ) +RFindInReadable( const nsAString& aPattern, nsAString::const_iterator& aSearchStart, nsAString::const_iterator& aSearchEnd, const nsStringComparator& aComparator) { PRBool found_it = PR_FALSE; @@ -662,7 +662,7 @@ RFindInReadable( const nsAString& aPattern, nsAString::const_iterator& aSearchSt while ( searchStart != searchEnd ) { - if ( FindInReadable(aPattern, searchStart, searchEnd) ) + if ( FindInReadable(aPattern, searchStart, searchEnd, aComparator) ) { found_it = PR_TRUE; @@ -686,7 +686,7 @@ RFindInReadable( const nsAString& aPattern, nsAString::const_iterator& aSearchSt NS_COM PRBool -RFindInReadable( const nsACString& aPattern, nsACString::const_iterator& aSearchStart, nsACString::const_iterator& aSearchEnd ) +RFindInReadable( const nsACString& aPattern, nsACString::const_iterator& aSearchStart, nsACString::const_iterator& aSearchEnd, const nsCStringComparator& aComparator) { PRBool found_it = PR_FALSE; @@ -695,7 +695,7 @@ RFindInReadable( const nsACString& aPattern, nsACString::const_iterator& aSearch while ( searchStart != searchEnd ) { - if ( FindInReadable(aPattern, searchStart, searchEnd) ) + if ( FindInReadable(aPattern, searchStart, searchEnd, aComparator) ) { found_it = PR_TRUE; diff --git a/mozilla/widget/src/windows/nsFilePicker.h b/mozilla/widget/src/windows/nsFilePicker.h index 94fd3d8e8dc..b350d6ba770 100644 --- a/mozilla/widget/src/windows/nsFilePicker.h +++ b/mozilla/widget/src/windows/nsFilePicker.h @@ -24,7 +24,6 @@ #ifndef nsFilePicker_h__ #define nsFilePicker_h__ -#include "nsIFileChannel.h" #include "nsILocalFile.h" #include "nsICharsetConverterManager.h" diff --git a/mozilla/xpcom/string/obsolete/bufferRoutines.h b/mozilla/xpcom/string/obsolete/bufferRoutines.h index f8ec9809c12..095d552e04d 100644 --- a/mozilla/xpcom/string/obsolete/bufferRoutines.h +++ b/mozilla/xpcom/string/obsolete/bufferRoutines.h @@ -693,17 +693,9 @@ PRInt32 Compare1To1(const char* aStr1,const char* aStr2,PRUint32 aCount,PRBool a * @param aIgnorecase tells us whether to use a case-sensitive comparison * @return -1,0,1 depending on <,==,> */ -PRInt32 Compare2To2(const PRUnichar* aStr1,const PRUnichar* aStr2,PRUint32 aCount,PRBool aIgnoreCase); -PRInt32 Compare2To2(const PRUnichar* aStr1,const PRUnichar* aStr2,PRUint32 aCount,PRBool aIgnoreCase){ - PRInt32 result=0; -#ifndef XPCOM_STANDALONE - if(aIgnoreCase && NS_SUCCEEDED(NS_InitCaseConversion())) - gCaseConv->CaseInsensitiveCompare(aStr1, aStr2, aCount, &result); - else result=nsCRT::strncmp(aStr1,aStr2,aCount); -#else - NS_ERROR("call not supported in XPCOM_STANDALONE"); -#endif - return result; +PRInt32 Compare2To2(const PRUnichar* aStr1,const PRUnichar* aStr2,PRUint32 aCount); +PRInt32 Compare2To2(const PRUnichar* aStr1,const PRUnichar* aStr2,PRUint32 aCount){ + return nsCRT::strncmp(aStr1, aStr2, aCount * sizeof(PRUnichar)); } diff --git a/mozilla/xpcom/string/obsolete/nsStr.cpp b/mozilla/xpcom/string/obsolete/nsStr.cpp index c2fb371a4be..8d7a4ffa2e9 100644 --- a/mozilla/xpcom/string/obsolete/nsStr.cpp +++ b/mozilla/xpcom/string/obsolete/nsStr.cpp @@ -647,7 +647,7 @@ PRInt32 nsStrPrivate::FindSubstr1in2(const nsStr& aDest,const nsStr& aTarget, PR return kNotFound; } -PRInt32 nsStrPrivate::FindSubstr2in2(const nsStr& aDest,const nsStr& aTarget, PRBool aIgnoreCase,PRInt32 anOffset,PRInt32 aCount) { +PRInt32 nsStrPrivate::FindSubstr2in2(const nsStr& aDest,const nsStr& aTarget, PRInt32 anOffset,PRInt32 aCount) { NS_ASSERTION(aDest.GetCharSize() == eTwoByte, "Must be 2 byte"); NS_ASSERTION(aTarget.GetCharSize() == eTwoByte, "Must be 2 byte"); @@ -675,7 +675,7 @@ PRInt32 nsStrPrivate::FindSubstr2in2(const nsStr& aDest,const nsStr& aTarget, PR const PRUnichar* right = (lastGetUnicode(&unicode) != NS_OK || unicode == nsnull) return PR_FALSE; - cmp=Compare2To2(mUStr,unicode, nsCRT::strlen(mUStr), aIgnoreCase); + cmp=Compare2To2(mUStr,unicode, nsCRT::strlen(mUStr)); result=PRBool(0==cmp); } diff --git a/mozilla/xpcom/string/obsolete/nsString2.h b/mozilla/xpcom/string/obsolete/nsString2.h index 63b3f359c30..52cd72ea677 100644 --- a/mozilla/xpcom/string/obsolete/nsString2.h +++ b/mozilla/xpcom/string/obsolete/nsString2.h @@ -309,10 +309,12 @@ public: * @param aCount tells us how many iterations to make starting at the given offset * @return offset in string, or -1 (kNotFound) */ - PRInt32 Find(const nsString& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=0,PRInt32 aCount=-1) const; PRInt32 Find(const nsCString& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=0,PRInt32 aCount=-1) const; PRInt32 Find(const char* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=0,PRInt32 aCount=-1) const; - PRInt32 Find(const PRUnichar* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=0,PRInt32 aCount=-1) const; + + PRInt32 Find(const nsAFlatString& aString, PRInt32 anOffset=0, PRInt32 aCount=-1) const; + + PRInt32 Find(const PRUnichar* aString, PRInt32 anOffset=0, PRInt32 aCount=-1) const; /** * This method searches this string for the first character @@ -336,8 +338,9 @@ public: * @return offset in string, or -1 (kNotFound) */ PRInt32 RFind(const char* aCString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=-1,PRInt32 aCount=-1) const; - PRInt32 RFind(const nsString& aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=-1,PRInt32 aCount=-1) const; - PRInt32 RFind(const PRUnichar* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 anOffset=-1,PRInt32 aCount=-1) const; + + PRInt32 RFind(const nsAFlatString& aString, PRInt32 anOffset=0,PRInt32 aCount=-1) const; + PRInt32 RFind(const PRUnichar* aString,PRInt32 anOffset=0,PRInt32 aCount=-1) const; /** @@ -376,20 +379,11 @@ public: */ PRInt32 CompareWithConversion(const char* aString, PRBool aIgnoreCase=PR_FALSE, PRInt32 aCount=-1) const; - PRInt32 CompareWithConversion(const PRUnichar* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const; - /* a hack to make sure things that used to compile continue to compile - even on compilers that don't have proper |explicit| support */ - inline PRInt32 - CompareWithConversion(const nsXPIDLString& aString, PRBool aIgnoreCase=PR_FALSE, PRInt32 aCount=-1) const - { - return CompareWithConversion(aString.get(), aIgnoreCase, aCount); - } - + PRBool EqualsWithConversion(const char* aString,PRBool aIgnoreCase=PR_FALSE,PRInt32 aCount=-1) const; - PRBool EqualsAtom(/*FIX: const */nsIAtom* anAtom,PRBool aIgnoreCase) const; + PRBool EqualsAtom(nsIAtom* anAtom) const; - PRBool EqualsIgnoreCase(const nsString& aString) const; PRBool EqualsIgnoreCase(const char* aString,PRInt32 aCount=-1) const; /** diff --git a/mozilla/xpcom/string/public/nsReadableUtils.h b/mozilla/xpcom/string/public/nsReadableUtils.h index dd0c92ac2bb..3ab9ee62bb0 100755 --- a/mozilla/xpcom/string/public/nsReadableUtils.h +++ b/mozilla/xpcom/string/public/nsReadableUtils.h @@ -210,6 +210,26 @@ NS_COM void ToLowerCase( const nsACString& aSource, nsACString& aDest ); NS_COM PRBool FindInReadable( const nsAString& aPattern, nsAString::const_iterator&, nsAString::const_iterator&, const nsStringComparator& = nsDefaultStringComparator() ); NS_COM PRBool FindInReadable( const nsACString& aPattern, nsACString::const_iterator&, nsACString::const_iterator&, const nsCStringComparator& = nsDefaultCStringComparator() ); + +/* sometimes we don't care about where the string was, just that we + * found it or not */ +inline PRBool FindInReadable( const nsAString& aPattern, nsAString& aSource, const nsStringComparator& compare = nsDefaultStringComparator() ) +{ + nsAString::const_iterator start, end; + aSource.BeginReading(start); + aSource.EndReading(end); + return FindInReadable(aPattern, start, end, compare); +} + +inline PRBool FindInReadable( const nsACString& aPattern, nsACString& aSource, const nsCStringComparator& compare = nsDefaultCStringComparator() ) +{ + nsACString::const_iterator start, end; + aSource.BeginReading(start); + aSource.EndReading(end); + return FindInReadable(aPattern, start, end, compare); +} + + NS_COM PRBool CaseInsensitiveFindInReadable( const nsACString& aPattern, nsACString::const_iterator&, nsACString::const_iterator& ); /** @@ -220,8 +240,8 @@ NS_COM PRBool CaseInsensitiveFindInReadable( const nsACString& aPattern, nsACStr * Currently, this is equivalent to the O(m*n) implementation previously on |ns[C]String|. * If we need something faster, then we can implement that later. */ -NS_COM PRBool RFindInReadable( const nsAString& aPattern, nsAString::const_iterator&, nsAString::const_iterator& ); -NS_COM PRBool RFindInReadable( const nsACString& aPattern, nsACString::const_iterator&, nsACString::const_iterator& ); +NS_COM PRBool RFindInReadable( const nsAString& aPattern, nsAString::const_iterator&, nsAString::const_iterator&, const nsStringComparator& = nsDefaultStringComparator() ); +NS_COM PRBool RFindInReadable( const nsACString& aPattern, nsACString::const_iterator&, nsACString::const_iterator&, const nsCStringComparator& = nsDefaultCStringComparator() ); /** * Finds the leftmost occurance of |aChar|, if any in the range diff --git a/mozilla/xpcom/string/src/nsReadableUtils.cpp b/mozilla/xpcom/string/src/nsReadableUtils.cpp index 84296185583..9b9dd7ab666 100755 --- a/mozilla/xpcom/string/src/nsReadableUtils.cpp +++ b/mozilla/xpcom/string/src/nsReadableUtils.cpp @@ -653,7 +653,7 @@ CaseInsensitiveFindInReadable( const nsACString& aPattern, nsACString::const_ite */ NS_COM PRBool -RFindInReadable( const nsAString& aPattern, nsAString::const_iterator& aSearchStart, nsAString::const_iterator& aSearchEnd ) +RFindInReadable( const nsAString& aPattern, nsAString::const_iterator& aSearchStart, nsAString::const_iterator& aSearchEnd, const nsStringComparator& aComparator) { PRBool found_it = PR_FALSE; @@ -662,7 +662,7 @@ RFindInReadable( const nsAString& aPattern, nsAString::const_iterator& aSearchSt while ( searchStart != searchEnd ) { - if ( FindInReadable(aPattern, searchStart, searchEnd) ) + if ( FindInReadable(aPattern, searchStart, searchEnd, aComparator) ) { found_it = PR_TRUE; @@ -686,7 +686,7 @@ RFindInReadable( const nsAString& aPattern, nsAString::const_iterator& aSearchSt NS_COM PRBool -RFindInReadable( const nsACString& aPattern, nsACString::const_iterator& aSearchStart, nsACString::const_iterator& aSearchEnd ) +RFindInReadable( const nsACString& aPattern, nsACString::const_iterator& aSearchStart, nsACString::const_iterator& aSearchEnd, const nsCStringComparator& aComparator) { PRBool found_it = PR_FALSE; @@ -695,7 +695,7 @@ RFindInReadable( const nsACString& aPattern, nsACString::const_iterator& aSearch while ( searchStart != searchEnd ) { - if ( FindInReadable(aPattern, searchStart, searchEnd) ) + if ( FindInReadable(aPattern, searchStart, searchEnd, aComparator) ) { found_it = PR_TRUE; diff --git a/mozilla/xpfe/components/bookmarks/src/nsBookmarksService.cpp b/mozilla/xpfe/components/bookmarks/src/nsBookmarksService.cpp index 936514b0625..a042c01dd22 100644 --- a/mozilla/xpfe/components/bookmarks/src/nsBookmarksService.cpp +++ b/mozilla/xpfe/components/bookmarks/src/nsBookmarksService.cpp @@ -2386,7 +2386,9 @@ nsBookmarksService::OnStopRequest(nsIRequest* request, nsISupports *ctxt, } // update icon? - if (schedule.Find(NS_LITERAL_STRING("icon").get(), PR_TRUE, 0) >= 0) + if (FindInReadable(NS_LITERAL_STRING("icon"), + schedule, + nsCaseInsensitiveStringComparator())) { nsCOMPtr statusLiteral; if (NS_SUCCEEDED(rv = gRDF->GetLiteral(NS_LITERAL_STRING("new").get(), getter_AddRefs(statusLiteral)))) @@ -2406,7 +2408,9 @@ nsBookmarksService::OnStopRequest(nsIRequest* request, nsISupports *ctxt, } // play a sound? - if (schedule.Find(NS_LITERAL_STRING("sound").get(), PR_TRUE, 0) >= 0) + if (FindInReadable(NS_LITERAL_STRING("sound"), + schedule, + nsCaseInsensitiveStringComparator())) { nsCOMPtr soundInterface; rv = nsComponentManager::CreateInstance(kSoundCID, @@ -2422,7 +2426,9 @@ nsBookmarksService::OnStopRequest(nsIRequest* request, nsISupports *ctxt, PRBool openURLFlag = PR_FALSE; // show an alert? - if (schedule.Find(NS_LITERAL_STRING("alert").get(), PR_TRUE, 0) >= 0) + if (FindInReadable(NS_LITERAL_STRING("alert"), + schedule, + nsCaseInsensitiveStringComparator())) { nsCOMPtr interfaces; nsCOMPtr prompter; @@ -2496,10 +2502,12 @@ nsBookmarksService::OnStopRequest(nsIRequest* request, nsISupports *ctxt, } } } - + // open the URL in a new window? if ((openURLFlag == PR_TRUE) || - (schedule.Find(NS_LITERAL_STRING("open").get(), PR_TRUE, 0) >= 0)) + FindInReadable(NS_LITERAL_STRING("open"), + schedule, + nsCaseInsensitiveStringComparator())) { if (NS_SUCCEEDED(rv)) { diff --git a/mozilla/xpfe/components/history/src/nsGlobalHistory.cpp b/mozilla/xpfe/components/history/src/nsGlobalHistory.cpp index a4ded20d266..2b43b713617 100644 --- a/mozilla/xpfe/components/history/src/nsGlobalHistory.cpp +++ b/mozilla/xpfe/components/history/src/nsGlobalHistory.cpp @@ -3847,9 +3847,9 @@ nsGlobalHistory::AutoCompleteEnumerator::IsResult(nsIMdbRow* aRow) nsCAutoString url; mHistory->GetRowValue(aRow, mURLColumn, url); - nsAutoString url2; - url2.AssignWithConversion(url.get()); - PRBool result = mHistory->AutoCompleteCompare(url2, mSelectValue, mExclude); + NS_ConvertUTF8toUCS2 utf8Url(url); + + PRBool result = mHistory->AutoCompleteCompare(utf8Url, mSelectValue, mExclude); return result; } diff --git a/mozilla/xpfe/components/intl/nsCharsetMenu.cpp b/mozilla/xpfe/components/intl/nsCharsetMenu.cpp index 2a8d1c0a2e2..80219a4d323 100644 --- a/mozilla/xpfe/components/intl/nsCharsetMenu.cpp +++ b/mozilla/xpfe/components/intl/nsCharsetMenu.cpp @@ -359,7 +359,7 @@ NS_IMPL_ISUPPORTS1(nsCharsetMenuObserver, nsIObserver); NS_IMETHODIMP nsCharsetMenuObserver::Observe(nsISupports *aSubject, const char *aTopic, const PRUnichar *someData) { NS_TIMELINE_START_TIMER("nsCharsetMenu:Observe"); - nsresult rv; + nsresult rv = NS_OK; //XUL event handler if (!nsCRT::strcmp(aTopic, "charsetmenu-selected")) { @@ -1755,7 +1755,7 @@ nsresult nsCharsetMenu::GetCollation(nsICollation ** aCollation) NS_IMETHODIMP nsCharsetMenu::SetCurrentCharset(const PRUnichar * aCharset) { NS_TIMELINE_START_TIMER("nsCharsetMenu:SetCurrentCharset"); - nsresult res; + nsresult res = NS_OK; if (mBrowserMenuInitialized) { nsCOMPtr atom; @@ -1785,7 +1785,7 @@ NS_IMETHODIMP nsCharsetMenu::SetCurrentCharset(const PRUnichar * aCharset) NS_IMETHODIMP nsCharsetMenu::SetCurrentMailCharset(const PRUnichar * aCharset) { NS_TIMELINE_START_TIMER("nsCharsetMenu:SetCurrentMailCharset"); - nsresult res; + nsresult res = NS_OK; if (mMailviewMenuInitialized) { nsCOMPtr atom; @@ -1810,7 +1810,7 @@ NS_IMETHODIMP nsCharsetMenu::SetCurrentMailCharset(const PRUnichar * aCharset) NS_IMETHODIMP nsCharsetMenu::SetCurrentComposerCharset(const PRUnichar * aCharset) { NS_TIMELINE_START_TIMER("nsCharsetMenu:SetCurrentComposerCharset"); - nsresult res; + nsresult res = NS_OK; if (mComposerMenuInitialized) { nsCOMPtr atom; diff --git a/mozilla/xpfe/components/search/src/Makefile.in b/mozilla/xpfe/components/search/src/Makefile.in index 05b2e870142..cc2509836be 100755 --- a/mozilla/xpfe/components/search/src/Makefile.in +++ b/mozilla/xpfe/components/search/src/Makefile.in @@ -35,6 +35,7 @@ REQUIRES = xpcom \ pref \ uconv \ intl \ + unicharutil \ $(NULL) CPPSRCS = \ diff --git a/mozilla/xpfe/components/search/src/nsInternetSearchService.cpp b/mozilla/xpfe/components/search/src/nsInternetSearchService.cpp index 0d1e1de9811..613771447e7 100755 --- a/mozilla/xpfe/components/search/src/nsInternetSearchService.cpp +++ b/mozilla/xpfe/components/search/src/nsInternetSearchService.cpp @@ -77,6 +77,7 @@ #include "nsIStringBundle.h" #include "nsIObserverService.h" #include "nsIURL.h" +#include "nsUnicharUtils.h" #include "nsReadableUtils.h" #ifdef XP_MAC @@ -126,7 +127,38 @@ static const char kSearchCommand[] = "http://home.netscape.co int PR_CALLBACK searchModePrefCallback(const char *pref, void *aClosure); +// helper routine because we need to rewrite this to use string +// iterators.. this replaces the old nsString::Find +static PRInt32 nsString_Find(nsAString& aPattern, + nsAString& aSource, + PRBool aIgnoreCase = PR_FALSE, + PRInt32 aOffset = 0, PRInt32 aCount = -1) +{ + nsAString::const_iterator start, end; + aSource.BeginReading(start); + aSource.EndReading(end); + + // now adjust for the parameters + start.advance(aOffset); + if (aCount>0) { + end = start; // note that start may have been advanced! + end.advance(aCount); + } + PRBool found; + if (aIgnoreCase) + found = FindInReadable(aPattern, start, end, + nsCaseInsensitiveStringComparator()); + else + found = FindInReadable(aPattern, start, end); + + if (!found) + return kNotFound; + + nsAString::const_iterator originalStart; + aSource.BeginReading(originalStart); + return Distance(originalStart, start); +} class InternetSearchContext : public nsIInternetSearchContext { @@ -2118,7 +2150,7 @@ InternetSearchDataSource::filterSite(nsIRDFResource *aResource) if (slashOffset2 <= slashOffset1) return(NS_ERROR_UNEXPECTED); site.Truncate(slashOffset2 + 1); - if (site.EqualsIgnoreCase(host)) + if (site.Equals(host, nsCaseInsensitiveStringComparator())) { mInner->Unassert(aSearchRoot, kNC_Child, aRes); } @@ -2490,8 +2522,9 @@ InternetSearchDataSource::GetInternetSearchURL(const char *searchEngineURI, } nsCOMPtr dataLit; - if (NS_FAILED(rv = FindData(engine, getter_AddRefs(dataLit))) || - (rv == NS_RDF_NO_VALUE)) return(rv); + rv = FindData(engine, getter_AddRefs(dataLit)); + if (NS_FAILED(rv) || + (rv == NS_RDF_NO_VALUE)) return(rv); if (!dataLit) return(NS_ERROR_UNEXPECTED); const PRUnichar *dataUni = nsnull; @@ -2542,9 +2575,12 @@ InternetSearchDataSource::GetInternetSearchURL(const char *searchEngineURI, } nsAutoString action, input, method, userVar; - if (NS_FAILED(rv = GetData(dataUni, "search", 0, "action", action))) return(rv); - if (NS_FAILED(rv = GetData(dataUni, "search", 0, "method", method))) return(rv); - if (NS_FAILED(rv = GetInputs(dataUni, userVar, text, input))) return(rv); + if (NS_FAILED(rv = GetData(dataUni, "search", 0, "action", action))) + return(rv); + if (NS_FAILED(rv = GetData(dataUni, "search", 0, "method", method))) + return(rv); + if (NS_FAILED(rv = GetInputs(dataUni, userVar, text, input))) + return(rv); if (input.Length() < 1) return(NS_ERROR_UNEXPECTED); // we can only handle HTTP GET @@ -2653,7 +2689,7 @@ InternetSearchDataSource::FindInternetSearchResults(const char *url, PRBool *sea nsAutoString action; if (NS_FAILED(rv = GetData(dataUni, "search", 0, "action", action))) continue; - if (shortURL.EqualsIgnoreCase(action)) + if (shortURL.Equals(action, nsCaseInsensitiveStringComparator())) { foundEngine = PR_TRUE; break; @@ -2661,7 +2697,7 @@ InternetSearchDataSource::FindInternetSearchResults(const char *url, PRBool *sea // extension for engines which can have multiple "actions" if (NS_FAILED(rv = GetData(dataUni, "browser", 0, "alsomatch", action))) continue; - if (action.Find(shortURL, PR_TRUE) >= 0) + if (nsString_Find(shortURL, action, PR_TRUE) >= 0) { foundEngine = PR_TRUE; break; @@ -2684,12 +2720,12 @@ InternetSearchDataSource::FindInternetSearchResults(const char *url, PRBool *sea NS_LITERAL_STRING("="); PRInt32 queryOffset; - if ((queryOffset = searchURL.Find(queryStr, PR_TRUE )) < 0) + if ((queryOffset = nsString_Find(queryStr, searchURL, PR_TRUE )) < 0) { queryStr = NS_LITERAL_STRING("&") + userVar + NS_LITERAL_STRING("="); - queryOffset = searchURL.Find(queryStr, PR_TRUE); + queryOffset = nsString_Find(queryStr, searchURL, PR_TRUE); } nsAutoString searchText; @@ -4154,8 +4190,7 @@ InternetSearchDataSource::GetNumInterpretSections(const PRUnichar *dataUni, PRUi nsString buffer(dataUni); - nsAutoString section; - section.Assign(NS_LITERAL_STRING(" 0) @@ -4173,7 +4208,7 @@ InternetSearchDataSource::GetNumInterpretSections(const PRUnichar *dataUni, PRUi line.Trim(" \t"); if (inSection == PR_FALSE) { - PRInt32 sectionOffset = line.Find(section, PR_TRUE); + PRInt32 sectionOffset = nsString_Find(section, line, PR_TRUE); if (sectionOffset < 0) continue; line.Cut(0, sectionOffset + section.Length() + 1); inSection = PR_TRUE; @@ -4222,7 +4257,7 @@ InternetSearchDataSource::GetData(const PRUnichar *dataUni, const char *sectionT line.Trim(" \t"); if (inSection == PR_FALSE) { - PRInt32 sectionOffset = line.Find(section, PR_TRUE); + PRInt32 sectionOffset = nsString_Find(section, line, PR_TRUE); if (sectionOffset < 0) continue; if (sectionNum > 0) { @@ -4984,12 +5019,12 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, nsCOMPtr bannerLiteral; if ((!bannerStartStr.IsEmpty()) && (!bannerEndStr.IsEmpty())) { - PRInt32 bannerStart = htmlResults.Find(bannerStartStr, PR_TRUE); + PRInt32 bannerStart = nsString_Find(bannerStartStr, htmlResults, PR_TRUE); if (bannerStart >= 0) { startIndex = bannerStart; - PRInt32 bannerEnd = htmlResults.Find(bannerEndStr, PR_TRUE, bannerStart + bannerStartStr.Length()); + PRInt32 bannerEnd = nsString_Find(bannerEndStr,htmlResults, PR_TRUE, bannerStart + bannerStartStr.Length()); if (bannerEnd > bannerStart) { stopIndex = bannerEnd - 1; @@ -5010,7 +5045,7 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, if (!resultListStartStr.IsEmpty()) { - PRInt32 resultListStart = htmlResults.Find(resultListStartStr, PR_TRUE); + PRInt32 resultListStart = nsString_Find(resultListStartStr, htmlResults, PR_TRUE); if (resultListStart >= 0) { startIndex = resultListStart + resultListStartStr.Length(); @@ -5024,12 +5059,16 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, } if (!resultListEndStr.IsEmpty()) { - // rjc note: use RFind to find the LAST occurrence of resultListEndStr - PRInt32 resultListEnd = htmlResults.RFind(resultListEndStr, PR_TRUE); - if (resultListEnd >= 0) - { - stopIndex = resultListEnd; - } + // rjc note: use RFind to find the LAST + // occurrence of resultListEndStr + + nsAString::const_iterator originalStart, start, end; + htmlResults.BeginReading(start); + htmlResults.EndReading(end); + originalStart = start; + + if (RFindInReadable(resultListEndStr, start, end)) + stopIndex = Distance(originalStart, start); } PRBool trimItemStart = PR_TRUE; @@ -5052,18 +5091,18 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, while(startIndex < stopIndex) { PRInt32 resultItemStart; - resultItemStart = htmlResults.Find(resultItemStartStr, PR_TRUE, startIndex); + resultItemStart = nsString_Find(resultItemStartStr, htmlResults, PR_TRUE, startIndex); if (resultItemStart < 0) break; PRInt32 resultItemEnd; if (trimItemStart == PR_TRUE) { resultItemStart += resultItemStartStr.Length(); - resultItemEnd = htmlResults.Find(resultItemEndStr, PR_TRUE, resultItemStart); + resultItemEnd = nsString_Find(resultItemEndStr, htmlResults, PR_TRUE, resultItemStart); } else { - resultItemEnd = htmlResults.Find(resultItemEndStr, PR_TRUE, resultItemStart + resultItemStartStr.Length()); + resultItemEnd = nsString_Find(resultItemEndStr, htmlResults, PR_TRUE, resultItemStart + resultItemStartStr.Length()); } if (resultItemEnd < 0) @@ -5112,7 +5151,7 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, { // handle case where HREF isn't quoted quoteStartOffset = hrefOffset + strlen("HREF="); - quoteEndOffset = resultItem.FindCharInSet(">", quoteStartOffset); + quoteEndOffset = resultItem.FindChar('>', quoteStartOffset); if (quoteEndOffset < quoteStartOffset) continue; } else @@ -5160,7 +5199,7 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, PRInt32 pathOptionsOffset = absPathStr.FindChar(PRUnichar('?')); if (pathOptionsOffset >= 0) absPathStr.Truncate(pathOptionsOffset); - PRBool pathsMatchFlag = serverPathStr.EqualsIgnoreCase(absPathStr); + PRBool pathsMatchFlag = serverPathStr.Equals(absPathStr, nsCaseInsensitiveStringComparator()); if (pathsMatchFlag == PR_TRUE) continue; } @@ -5240,7 +5279,7 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, mInner->GetTarget(res, kNC_Site, PR_TRUE, getter_AddRefs(oldSiteRes)); if (!oldSiteRes) { - PRInt32 protocolOffset = site.FindCharInSet(":", 0); + PRInt32 protocolOffset = site.FindChar(':', 0); if (protocolOffset >= 0) { site.Cut(0, protocolOffset+1); @@ -5248,7 +5287,7 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, { site.Cut(0, 1); } - PRInt32 slashOffset = site.FindCharInSet("/", 0); + PRInt32 slashOffset = site.FindChar('/', 0); if (slashOffset >= 0) { site.Truncate(slashOffset); @@ -5277,10 +5316,10 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, if ((!nameStartStr.IsEmpty()) && (!nameEndStr.IsEmpty())) { PRInt32 nameStart; - if ((nameStart = resultItem.Find(nameStartStr, PR_TRUE)) >= 0) + if ((nameStart = nsString_Find(nameStartStr, resultItem, PR_TRUE)) >= 0) { nameStart += nameStartStr.Length(); - PRInt32 nameEnd = resultItem.Find(nameEndStr, PR_TRUE, nameStart); + PRInt32 nameEnd = nsString_Find(nameEndStr, resultItem, PR_TRUE, nameStart); if (nameEnd > nameStart) { resultItem.Mid(nameStr, nameStart, nameEnd - nameStart); @@ -5290,7 +5329,7 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, if (nameStr.IsEmpty()) { - PRInt32 anchorEnd = resultItem.FindCharInSet(">", quoteEndOffset); + PRInt32 anchorEnd = resultItem.FindChar('>', quoteEndOffset); if (anchorEnd < quoteEndOffset) { #ifdef DEBUG_SEARCH_OUTPUT @@ -5340,10 +5379,10 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, { nsAutoString dateItem; PRInt32 dateStart; - if ((dateStart = resultItem.Find(dateStartStr, PR_TRUE)) >= 0) + if ((dateStart = nsString_Find(dateStartStr, resultItem, PR_TRUE)) >= 0) { dateStart += dateStartStr.Length(); - PRInt32 dateEnd = resultItem.Find(dateEndStr, PR_TRUE, dateStart); + PRInt32 dateEnd = nsString_Find(dateEndStr, resultItem, PR_TRUE, dateStart); if (dateEnd > dateStart) { resultItem.Mid(dateItem, dateStart, dateEnd - dateStart); @@ -5382,10 +5421,10 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, { nsAutoString priceItem; PRInt32 priceStart; - if ((priceStart = resultItem.Find(priceStartStr, PR_TRUE)) >= 0) + if ((priceStart = nsString_Find(priceStartStr, resultItem, PR_TRUE)) >= 0) { priceStart += priceStartStr.Length(); - PRInt32 priceEnd = resultItem.Find(priceEndStr, PR_TRUE, priceStart); + PRInt32 priceEnd = nsString_Find(priceEndStr, resultItem, PR_TRUE, priceStart); if (priceEnd > priceStart) { resultItem.Mid(priceItem, priceStart, priceEnd - priceStart); @@ -5428,10 +5467,10 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, { nsAutoString availItem; PRInt32 availStart; - if ((availStart = resultItem.Find(availStartStr, PR_TRUE)) >= 0) + if ((availStart = nsString_Find(availStartStr, resultItem, PR_TRUE)) >= 0) { availStart += availStartStr.Length(); - PRInt32 availEnd = resultItem.Find(availEndStr, PR_TRUE, availStart); + PRInt32 availEnd = nsString_Find(availEndStr, resultItem, PR_TRUE, availStart); if (availEnd > availStart) { resultItem.Mid(availItem, availStart, availEnd - availStart); @@ -5457,10 +5496,10 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, // look for relevance nsAutoString relItem; PRInt32 relStart; - if ((relStart = resultItem.Find(relevanceStartStr, PR_TRUE)) >= 0) + if ((relStart = nsString_Find(relevanceStartStr, resultItem, PR_TRUE)) >= 0) { relStart += relevanceStartStr.Length(); - PRInt32 relEnd = resultItem.Find(relevanceEndStr, PR_TRUE); + PRInt32 relEnd = nsString_Find(relevanceEndStr, resultItem, PR_TRUE); if (relEnd > relStart) { resultItem.Mid(relItem, relStart, relEnd - relStart); diff --git a/mozilla/xpfe/components/search/src/nsLocalSearchService.cpp b/mozilla/xpfe/components/search/src/nsLocalSearchService.cpp index 78edddd811f..a02c71ddff2 100755 --- a/mozilla/xpfe/components/search/src/nsLocalSearchService.cpp +++ b/mozilla/xpfe/components/search/src/nsLocalSearchService.cpp @@ -47,6 +47,8 @@ #include "nsIRDFContainerUtils.h" #include "nsEnumeratorUtils.h" #include "nsXPIDLString.h" +#include "nsReadableUtils.h" +#include "nsUnicharUtils.h" #include "xp_core.h" #include "plhash.h" #include "plstr.h" @@ -360,38 +362,53 @@ LocalSearchDataSource::doMatch(nsIRDFLiteral *literal, literal->GetValueConst( &str ); if (! str) return(found); nsAutoString value(str); - + if (matchMethod.Equals(NS_LITERAL_STRING("contains"))) { - if (value.Find(matchText, PR_TRUE) >= 0) + if (FindInReadable(matchText, value, + nsCaseInsensitiveStringComparator())) found = PR_TRUE; } else if (matchMethod.Equals(NS_LITERAL_STRING("startswith"))) { - if (value.Find(matchText, PR_TRUE) == 0) + nsAString::const_iterator start, realstart, end; + value.BeginReading(start); + value.EndReading(end); + realstart = start; + + if (FindInReadable(matchText, start, end, + nsCaseInsensitiveStringComparator()) && + start == realstart) + found = PR_TRUE; } else if (matchMethod.Equals(NS_LITERAL_STRING("endswith"))) { - PRInt32 pos = value.RFind(matchText, PR_TRUE); - if ((pos >= 0) && - (pos == (PRInt32(value.Length()) - - PRInt32(matchText.Length())))) + nsAString::const_iterator start, end, realend; + value.BeginReading(start); + value.EndReading(end); + realend = end; + + if (RFindInReadable(matchText, start, end, + nsCaseInsensitiveStringComparator()) && + end == realend) + found = PR_TRUE; } else if (matchMethod.Equals(NS_LITERAL_STRING("is"))) { - if (value.EqualsIgnoreCase(matchText)) + if (value.Equals(matchText, nsCaseInsensitiveStringComparator())) found = PR_TRUE; } else if (matchMethod.Equals(NS_LITERAL_STRING("isnot"))) { - if (!value.EqualsIgnoreCase(matchText)) + if (!value.Equals(matchText, nsCaseInsensitiveStringComparator())) found = PR_TRUE; } else if (matchMethod.Equals(NS_LITERAL_STRING("doesntcontain"))) { - if (value.Find(matchText, PR_TRUE) < 0) + if (!FindInReadable(matchText, value, + nsCaseInsensitiveStringComparator())) found = PR_TRUE; } return(found); diff --git a/mozilla/xpfe/components/urlbarhistory/src/nsUrlbarHistory.cpp b/mozilla/xpfe/components/urlbarhistory/src/nsUrlbarHistory.cpp index 2dc4d552c49..be8b922a8d2 100644 --- a/mozilla/xpfe/components/urlbarhistory/src/nsUrlbarHistory.cpp +++ b/mozilla/xpfe/components/urlbarhistory/src/nsUrlbarHistory.cpp @@ -253,11 +253,13 @@ nsUrlbarHistory::OnStartLookup(const PRUnichar *uSearchString, nsIAutoCompleteRe nsString * match = (nsString *)mIgnoreArray.ElementAt(i); if (match) { - PRInt32 index = match->Find(uSearchString, PR_TRUE); - if (index == 0) { - listener->OnAutoComplete(nsnull, nsIAutoCompleteStatus::ignored); - return NS_OK; - } + nsDependentString searchString(uSearchString); + if (searchString.Length() <= match->Length() && + searchString.Equals(Substring(*match, 0, searchString.Length()), + nsCaseInsensitiveStringComparator())) { + listener->OnAutoComplete(nsnull, nsIAutoCompleteStatus::ignored); + return NS_OK; + } } // match } //for @@ -472,8 +474,10 @@ nsUrlbarHistory::SearchCache(const PRUnichar* searchStr, nsIAutoCompleteResults* // NS_LossyConvertUCS2toASCII(rdfProtocol).get()); // We have all the data we need. Let's do the comparison // We compare the path first and compare the protocol next - index = rdfPath.Find(searchPath, PR_TRUE); - if (index == 0) { + + if (rdfPath.Length() >= searchPath.Length() && + searchPath.Equals(Substring(rdfPath, 0, searchPath.Length()), + nsCaseInsensitiveStringComparator())) { // The paths match. Now let's compare protocols if (searchProtocol.Length() && rdfProtocol.Length()) { // Both the strings have a protocol part. Compare them.