sc/source/core/tool/compiler.cxx | 70 +++++++++++++++++++++++++++++++-------- 1 file changed, 57 insertions(+), 13 deletions(-)
New commits: commit bca0b4fb2c8b32ce11c6aae12cc60b5f00fa9fcc Author: Eike Rathke <er...@redhat.com> Date: Wed Mar 25 22:32:03 2015 +0100 TableRef: generate token for #Data Change-Id: I06d4789b92d9f6567dd87c8d3cb6186538269663 diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx index 9ae82f3..a82596c 100644 --- a/sc/source/core/tool/compiler.cxx +++ b/sc/source/core/tool/compiler.cxx @@ -4804,6 +4804,23 @@ bool ScCompiler::HandleTableRef() bForwardToClose = true; } break; + case ScTableRefToken::DATA: + { + if (pDBData->HasHeader()) + aRange.aStart.IncRow(); + /* TODO: this assumes totals to be present, they need to + * be implemented at the table. */ + if (aRange.aEnd.Row() - aRange.aStart.Row() >= 1) + aRange.aEnd.IncRow(-1); + if (aRange.aEnd.Row() < aRange.aStart.Row()) + { + /* TODO: add RefData with deleted rows to generate + * #REF! error? */ + bAddRange = false; + } + bForwardToClose = true; + } + break; case ScTableRefToken::TOTALS: { aRange.aStart.SetRow( aRange.aEnd.Row()); commit 38c8e7e5317a90a96625e9d680fde18e3de89be8 Author: Eike Rathke <er...@redhat.com> Date: Wed Mar 25 20:22:07 2015 +0000 TableRef: generate tokens for #Headers and #Totals Change-Id: Ib28bae06022d151bc108ebb3062efe86cc3b8bb9 diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx index 551f690..9ae82f3 100644 --- a/sc/source/core/tool/compiler.cxx +++ b/sc/source/core/tool/compiler.cxx @@ -4780,26 +4780,53 @@ bool ScCompiler::HandleTableRef() pDBData->GetArea(aRange); aRange.aEnd.SetTab(aRange.aStart.Tab()); ScTokenArray* pNew = new ScTokenArray(); - ScTableRefToken::Item eItem = pTR->GetItem(); bool bGotToken = false; - if (eItem == ScTableRefToken::TABLE || eItem == ScTableRefToken::ALL) + bool bAddRange = true; + bool bForwardToClose = false; + ScTableRefToken::Item eItem = pTR->GetItem(); + switch (eItem) + { + case ScTableRefToken::TABLE: + case ScTableRefToken::ALL: + { + // Optional [] (or [#All]) may follow. + if ((bGotToken = GetToken()) && mpToken->GetOpCode() == ocTableRefOpen) + { + bool bAll = ((bGotToken = GetToken()) && mpToken->GetOpCode() == ocTableRefItemAll); + if (bGotToken && (!bAll || (bGotToken = GetToken())) && mpToken->GetOpCode() == ocTableRefClose) + bGotToken = false; // get next token below + } + } + break; + case ScTableRefToken::HEADERS: + { + aRange.aEnd.SetRow( aRange.aStart.Row()); + bForwardToClose = true; + } + break; + case ScTableRefToken::TOTALS: + { + aRange.aStart.SetRow( aRange.aEnd.Row()); + bForwardToClose = true; + } + break; + default: + /* TODO: implement all other cases. */ + SetError(errUnknownToken); + bAddRange = false; + } + if (bAddRange) { ScComplexRefData aRefData; aRefData.InitFlags(); - aRefData.SetRange(aRange, aPos); + aRefData.SetRange( aRange, aPos); pNew->AddDoubleReference( aRefData ); - // Optional [] (or [#All]) may follow. - if ((bGotToken = GetToken()) && mpToken->GetOpCode() == ocTableRefOpen) - { - bool bAll = ((bGotToken = GetToken()) && mpToken->GetOpCode() == ocTableRefItemAll); - if (bGotToken && (!bAll || (bGotToken = GetToken())) && mpToken->GetOpCode() == ocTableRefClose) - bGotToken = false; // get next token below - } } - else + if (bForwardToClose) { - /* TODO: implement all other cases. */ - SetError(errUnknownToken); + while ((bGotToken = GetToken()) && mpToken->GetOpCode() != ocTableRefClose) + ; + bGotToken = false; // get next token below } PushTokenArray( pNew, true ); pNew->Reset(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits