Resolves: tdf#150253 Add English names for GRAM_API AddIn functions
This is a combination of 2 commits.
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.
xChange-Id: I1f1f3f45001360445b25765312782f04ee079ee9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137769
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Jenkins
(cherry picked from commit 86ed0105a4d70d481e3358ae1c6855766ef44d23)
Add known but not in AddInMap English names for GRAM_API, tdf#150253 follow-up
xChange-Id: I1edc2a979946078e4548c0933f9b64b7a08a7e6d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137773
Tested-by: Jenkins
Reviewed-by: Eike Rathke <erack@redhat.com>
(cherry picked from commit a56d0c34716f381accbd9d2e3040a62d3583d18d)
Change-Id: I1f1f3f45001360445b25765312782f04ee079ee9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137837
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/formula/source/core/api/FormulaCompiler.cxx b/formula/source/core/api/FormulaCompiler.cxx
index 1aa8d9f6..be926e7 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;
}
@@ -1013,10 +1012,18 @@ void FormulaCompiler::loadSymbols(const std::pair<const char*, int>* pSymbols, F
fillFromAddInMap( rxMap, eGrammar);
// Fill from collection for AddIns not already present.
if ( FormulaGrammar::GRAM_ENGLISH != eGrammar )
fillFromAddInCollectionUpperName( rxMap);
else
if (FormulaGrammar::GRAM_ENGLISH == eGrammar)
fillFromAddInCollectionEnglishName( rxMap);
else
{
fillFromAddInCollectionUpperName( rxMap);
if (FormulaGrammar::GRAM_API == eGrammar)
{
// Add known but not in AddInMap English names, e.g. from the
// PricingFunctions AddIn or any user supplied AddIn.
fillFromAddInCollectionEnglishName( rxMap);
}
}
}
void FormulaCompiler::fillFromAddInCollectionUpperName( const NonConstOpCodeMapPtr& /*xMap */) const
diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index b1de554..86499cc 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