sc/qa/unit/ucalc_formula.cxx | 20 ++++++++++++++++++++ sc/source/core/tool/compiler.cxx | 28 ++++++++-------------------- 2 files changed, 28 insertions(+), 20 deletions(-)
New commits: commit 83cdcdb9f0fe11309939f5dca4fb46e426559896 Author: Kohei Yoshida <kohei.yosh...@collabora.com> Date: Sat Feb 8 18:19:42 2014 -0500 fdo#74512: Generate escaped sheet names after the grammer is set. Otherwise the single quote characters wouldn't be properly doubled. Change-Id: I864ca8912a35049905e52e002d92d648e1278015 diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx index 8c6dee9..f8d00f1 100644 --- a/sc/source/core/tool/compiler.cxx +++ b/sc/source/core/tool/compiler.cxx @@ -238,6 +238,14 @@ void ScCompiler::SetGrammar( const FormulaGrammar::Grammar eGrammar ) if (eMyGrammar != GetGrammar()) SetGrammarAndRefConvention( eMyGrammar, eOldGrammar); } + + if (pDoc && maTabNames.empty()) + { + maTabNames = pDoc->GetAllTableNames(); + std::vector<OUString>::iterator it = maTabNames.begin(), itEnd = maTabNames.end(); + for (; it != itEnd; ++it) + ScCompiler::CheckTabQuotes(*it, formula::FormulaGrammar::extractRefConvention(meGrammar)); + } } void ScCompiler::SetNumberFormatter( SvNumberFormatter* pFormatter ) @@ -1546,16 +1554,6 @@ ScCompiler::ScCompiler( ScDocument* pDocument, const ScAddress& rPos,ScTokenArra mbRewind( false ) { nMaxTab = pDoc ? pDoc->GetTableCount() - 1 : 0; - - if (pDoc) - { - maTabNames = pDoc->GetAllTableNames(); - { - std::vector<OUString>::iterator it = maTabNames.begin(), itEnd = maTabNames.end(); - for (; it != itEnd; ++it) - ScCompiler::CheckTabQuotes(*it, formula::FormulaGrammar::extractRefConvention(meGrammar)); - } - } } ScCompiler::ScCompiler( sc::CompileFormulaContext& rCxt, const ScAddress& rPos ) : @@ -1589,16 +1587,6 @@ ScCompiler::ScCompiler( ScDocument* pDocument, const ScAddress& rPos) mbRewind( false ) { nMaxTab = pDoc ? pDoc->GetTableCount() - 1 : 0; - - if (pDoc) - { - maTabNames = pDoc->GetAllTableNames(); - { - std::vector<OUString>::iterator it = maTabNames.begin(), itEnd = maTabNames.end(); - for (; it != itEnd; ++it) - ScCompiler::CheckTabQuotes(*it, formula::FormulaGrammar::extractRefConvention(meGrammar)); - } - } } ScCompiler::~ScCompiler() commit c4987cd730be2d4aa7c76e69fad4e3195413fb0c Author: Kohei Yoshida <kohei.yosh...@collabora.com> Date: Sat Feb 8 18:01:08 2014 -0500 fdo#74512: Add test for this. Change-Id: I472a91375c6408761d9c300b3575cfe101649fca diff --git a/sc/qa/unit/ucalc_formula.cxx b/sc/qa/unit/ucalc_formula.cxx index 411ed9e..05ff6b6 100644 --- a/sc/qa/unit/ucalc_formula.cxx +++ b/sc/qa/unit/ucalc_formula.cxx @@ -217,6 +217,26 @@ void Test::testFormulaParseReference() m_pDoc->GetName(4, aTabName); CPPUNIT_ASSERT_EQUAL(aTab4, aTabName); + // Make sure the formula input and output match. + { + const char* aChecks[] = { + "'90''s Music'.B12", + "'90''s and 70''s'.$AB$100", + "'All Others'.Z$100", + "NoQuote.$C111" + }; + + for (size_t i = 0; i < SAL_N_ELEMENTS(aChecks); ++i) + { + // Use the 'Dummy' sheet for this. + OUString aInput("="); + aInput += OUString::createFromAscii(aChecks[i]); + m_pDoc->SetString(ScAddress(0,0,0), aInput); + if (!checkFormula(*m_pDoc, ScAddress(0,0,0), aChecks[i])) + CPPUNIT_FAIL("Wrong formula"); + } + } + ScAddress aPos; ScAddress::ExternalInfo aExtInfo; sal_uInt16 nRes = aPos.Parse("'90''s Music'.D10", m_pDoc, formula::FormulaGrammar::CONV_OOO, &aExtInfo); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits