tdf#142031 - Collect all the characters for the formula suggestion auto input

Change-Id: Idec350b09279f42f2ca42a1c02082d8e9e4207b8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138702
Tested-by: Jenkins
Reviewed-by: Eike Rathke <erack@redhat.com>
diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx
index f16e52a..de0a49e 100644
--- a/sc/source/ui/app/inputhdl.cxx
+++ b/sc/source/ui/app/inputhdl.cxx
@@ -68,6 +68,7 @@
#include <tabvwsh.hxx>
#include <docsh.hxx>
#include <scmod.hxx>
#include <formulaopt.hxx>
#include <uiitems.hxx>
#include <global.hxx>
#include <sc.hrc>
@@ -1019,6 +1020,10 @@ void ScInputHandler::GetFormulaData()
    else
        pFormulaDataPara.reset( new ScTypedCaseStrSet );

    const CharClass* pCharClass = (SC_MOD()->GetFormulaOptions().GetUseEnglishFuncName()
                                       ? ScCompiler::GetCharClassEnglish()
                                       : ScCompiler::GetCharClassLocalized());

    const OUString aParenthesesReplacement( cParenthesesReplacement);
    const ScFunctionList* pFuncList = ScGlobal::GetStarCalcFunctionList();
    sal_uInt32 nListCount = pFuncList->GetCount();
@@ -1027,16 +1032,12 @@ void ScInputHandler::GetFormulaData()
        const ScFuncDesc* pDesc = pFuncList->GetFunction( i );
        if ( pDesc->mxFuncName )
        {
            const sal_Unicode* pName = pDesc->mxFuncName->getStr();
            const sal_Int32 nLen = pDesc->mxFuncName->getLength();
            OUString aFuncName(pCharClass->uppercase(*(pDesc->mxFuncName)));
            // fdo#75264 fill maFormulaChar with all characters used in formula names
            for ( sal_Int32 j = 0; j < nLen; j++ )
            {
                sal_Unicode c = pName[ j ];
                maFormulaChar.insert( c );
            }
            OUString aFuncName = *pDesc->mxFuncName + aParenthesesReplacement;
            pFormulaData->insert(ScTypedStrData(aFuncName, 0.0, 0.0, ScTypedStrData::Standard));
            for (sal_Int32 j = 0; j < aFuncName.getLength(); j++)
                maFormulaChar.insert(aFuncName[j]);
            pFormulaData->insert(ScTypedStrData(*(pDesc->mxFuncName) + aParenthesesReplacement, 0.0, 0.0,
                                                ScTypedStrData::Standard));
            pDesc->initArgumentInfo();
            OUString aEntry = pDesc->getSignature();
            pFormulaDataPara->insert(ScTypedStrData(aEntry, 0.0, 0.0, ScTypedStrData::Standard));
@@ -1066,8 +1067,19 @@ void ScInputHandler::GetFormulaData()
        }
    }
    miAutoPosFormula = pFormulaData->end();
    rDoc.GetFormulaEntries( *pFormulaData );
    rDoc.GetFormulaEntries( *pFormulaDataPara );

    // tdf#142031 - collect all the characters for the formula suggestion auto input
    ScTypedCaseStrSet aStrSet;
    rDoc.GetFormulaEntries( aStrSet );
    for (auto iter = aStrSet.begin(); iter != aStrSet.end(); ++iter)
    {
        const OUString aFuncName = ScGlobal::getCharClass().uppercase((*iter).GetString());
        // fdo#75264 fill maFormulaChar with all characters used in formula names
        for (sal_Int32 j = 0; j < aFuncName.getLength(); j++)
            maFormulaChar.insert(aFuncName[j]);
    }
    pFormulaData->insert(aStrSet.begin(), aStrSet.end());
    pFormulaDataPara->insert(aStrSet.begin(), aStrSet.end());
}

IMPL_LINK( ScInputHandler, ShowHideTipVisibleParentListener, VclWindowEvent&, rEvent, void )