tdf#144245 - Case-insensitive operation for non-ASCII characters
Support case-insensitive operation for non-ASCII characters in the
Collection object (VBA).
Change-Id: Ie17560cb9aac5bfb32aa041744445dd4839681d6
diff --git a/basic/source/classes/sb.cxx b/basic/source/classes/sb.cxx
index f0ab981..3e758d4 100644
--- a/basic/source/classes/sb.cxx
+++ b/basic/source/classes/sb.cxx
@@ -47,6 +47,9 @@
#include <memory>
#include <unordered_map>
#include <unotools/syslocale.hxx>
#include <unotools/charclass.hxx>
#include <com/sun/star/script/ModuleType.hpp>
#include <com/sun/star/script/ModuleInfo.hpp>
@@ -2058,14 +2061,21 @@ sal_Int32 BasicCollection::implGetIndexForName(std::u16string_view rName)
sal_Int32 nIndex = -1;
sal_Int32 nCount = xItemArray->Count();
sal_Int32 nNameHash = MakeHashCode( rName );
const SvtSysLocale aSysLocale;
const CharClass* aCharClass = aSysLocale.GetCharClassPtr();
for( sal_Int32 i = 0 ; i < nCount ; i++ )
{
SbxVariable* pVar = xItemArray->Get(i);
if( pVar->GetHashCode() == nNameHash &&
pVar->GetName().equalsIgnoreAsciiCase( rName ) )
if (pVar->GetHashCode() == nNameHash)
{
nIndex = i;
break;
// tdf#144245 - case-insensitive operation for non-ASCII characters
const OUString aName = aCharClass->uppercase(OUString(rName));
const OUString aVarName(aCharClass->uppercase(pVar->GetName()));
if (aName == aVarName)
{
nIndex = i;
break;
}
}
}
return nIndex;