Resolves: tdf#150253 Add English names for GRAM_API AddIn functions
... so not only the com.sun.star.sheet.addin.* programmatic names
are recognized for XCell::setFormula() non-localized API calls.
Change-Id: I1f1f3f45001360445b25765312782f04ee079ee9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137769
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Jenkins
diff --git a/formula/source/core/api/FormulaCompiler.cxx b/formula/source/core/api/FormulaCompiler.cxx
index 1aa8d9f6..a13a7a1 100644
--- a/formula/source/core/api/FormulaCompiler.cxx
+++ b/formula/source/core/api/FormulaCompiler.cxx
@@ -961,8 +961,7 @@ void FormulaCompiler::InitSymbolsAPI() const
static OpCodeMapData aMap;
osl::MutexGuard aGuard(&aMap.maMtx);
if (!aMap.mxSymbolMap)
// XFunctionAccess API always used PODF grammar, keep it.
loadSymbols(RID_STRLIST_FUNCTION_NAMES_ENGLISH_API, FormulaGrammar::GRAM_PODF, aMap.mxSymbolMap, SeparatorType::RESOURCE_BASE);
loadSymbols(RID_STRLIST_FUNCTION_NAMES_ENGLISH_API, FormulaGrammar::GRAM_API, aMap.mxSymbolMap, SeparatorType::RESOURCE_BASE);
mxSymbolsAPI = aMap.mxSymbolMap;
}
diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index 0de38ad..2b1d702 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -110,6 +110,9 @@ void ScCompiler::fillFromAddInMap( const NonConstOpCodeMapPtr& xMap,FormulaGramm
size_t nSymbolOffset;
switch( _eGrammar )
{
// XFunctionAccess and XCell::setFormula()/getFormula() API always used
// PODF grammar symbols, keep it.
case FormulaGrammar::GRAM_API:
case FormulaGrammar::GRAM_PODF:
nSymbolOffset = offsetof( AddInMap, pUpper);
break;
@@ -121,9 +124,8 @@ void ScCompiler::fillFromAddInMap( const NonConstOpCodeMapPtr& xMap,FormulaGramm
nSymbolOffset = offsetof( AddInMap, pEnglish);
break;
}
const AddInMap* pMap = g_aAddInMap;
const AddInMap* const pStop = pMap + GetAddInMapCount();
for ( ; pMap < pStop; ++pMap)
const AddInMap* const pStop = g_aAddInMap + GetAddInMapCount();
for (const AddInMap* pMap = g_aAddInMap; pMap < pStop; ++pMap)
{
char const * const * ppSymbol =
reinterpret_cast< char const * const * >(
@@ -131,6 +133,22 @@ void ScCompiler::fillFromAddInMap( const NonConstOpCodeMapPtr& xMap,FormulaGramm
xMap->putExternal( OUString::createFromAscii( *ppSymbol),
OUString::createFromAscii( pMap->pOriginal));
}
if (_eGrammar == FormulaGrammar::GRAM_API)
{
// Add English names additionally to programmatic names, so they
// can be used in XCell::setFormula() non-localized API calls.
// Note the reverse map will still deliver programmatic names for
// XCell::getFormula().
nSymbolOffset = offsetof( AddInMap, pEnglish);
for (const AddInMap* pMap = g_aAddInMap; pMap < pStop; ++pMap)
{
char const * const * ppSymbol =
reinterpret_cast< char const * const * >(
reinterpret_cast< char const * >(pMap) + nSymbolOffset);
xMap->putExternal( OUString::createFromAscii( *ppSymbol),
OUString::createFromAscii( pMap->pOriginal));
}
}
}
void ScCompiler::fillFromAddInCollectionUpperName( const NonConstOpCodeMapPtr& xMap ) const