diff options
author | Eike Rathke <erack@redhat.com> | 2015-03-06 23:22:45 +0100 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2015-03-07 00:24:46 +0100 |
commit | 333f8a76341f5b4921e89012d133007503e49612 (patch) | |
tree | 58c29cd6ba39db06a46156e3c0d580afb6e050dd /sc | |
parent | 40c9a46b78b8919aae82dd9b94774d63bb9cb4e6 (diff) |
first stab at handling table[] all range
Change-Id: I608cf04cf4b0b991f4a45a868566faeae5be77c9
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/core/tool/compiler.cxx | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx index 0ab8f9ba40b2..dce91710c386 100644 --- a/sc/source/core/tool/compiler.cxx +++ b/sc/source/core/tool/compiler.cxx @@ -3931,6 +3931,17 @@ ScTokenArray* ScCompiler::CompileString( const OUString& rFormula ) { static_cast<ScTokenArray*>(pArr)->MergeRangeReference( aPos); } + else if (eLastOp == ocDBArea && pNewToken->GetOpCode() == ocTableRefOpen) + { + sal_uInt16 nIdx = pArr->GetLen() - 1; + const FormulaToken* pPrev = pArr->PeekPrev( nIdx); + if (pPrev && pPrev->GetOpCode() == ocDBArea) + { + // pPrev may be dead hereafter. + static_cast<ScTokenArray*>(pArr)->ReplaceToken( 1, + new ScTableRefToken( pPrev->GetIndex(), ScTableRefToken::ALL)); + } + } eLastOp = maRawToken.GetOpCode(); if ( bAutoCorrect ) aCorrectedFormula += aCorrectedSymbol; @@ -4664,12 +4675,19 @@ bool ScCompiler::HandleTableRef() aRange.aEnd.SetTab(aRange.aStart.Tab()); ScTokenArray* pNew = new ScTokenArray(); ScTableRefToken::Item eItem = pTR->GetItem(); + bool bGotToken = false; if (eItem == ScTableRefToken::ALL) { ScComplexRefData aRefData; aRefData.InitFlags(); aRefData.SetRange(aRange, aPos); pNew->AddDoubleReference( aRefData ); + // Optional [] (or [#All]) may follow. + if ((bGotToken = GetToken()) && mpToken->GetOpCode() == ocTableRefOpen) + { + if ((bGotToken = GetToken()) && mpToken->GetOpCode() == ocTableRefClose) + bGotToken = false; // get next token below + } } else { @@ -4678,7 +4696,7 @@ bool ScCompiler::HandleTableRef() } PushTokenArray( pNew, true ); pNew->Reset(); - return GetToken(); + return bGotToken ? true : GetToken(); } return true; } |