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;