formula/source/core/api/FormulaCompiler.cxx | 17 ++++++++++++----- sc/source/core/tool/compiler.cxx | 24 +++++++++++++++++++++--- 2 files changed, 33 insertions(+), 8 deletions(-)
New commits: commit 2f4e5b0b310a34a436998d8103c65e891ff2bff5 Author: Eike Rathke <er...@redhat.com> AuthorDate: Wed Aug 3 22:54:46 2022 +0200 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Sat Aug 13 13:26:59 2022 +0200 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 <er...@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 <er...@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 <caol...@redhat.com> diff --git a/formula/source/core/api/FormulaCompiler.cxx b/formula/source/core/api/FormulaCompiler.cxx index 1aa8d9f65855..be926e7d521a 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 b1de55436f9c..86499cc209b9 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