diff options
author | Eike Rathke <erack@redhat.com> | 2015-04-18 00:27:28 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2015-04-18 00:46:08 +0200 |
commit | 8c2173d95c8fd626c5399144d5820a791147bdbf (patch) | |
tree | 889a344c9085889236fb9f9816c292ada85e5746 /formula/source | |
parent | 6f25c21eb5cf311d828b77e602a17390af19c962 (diff) |
TableRef: transform to reference if not supported, i.e. for ODFF
Change-Id: I64f751455fbba901bb41f91daaf64ee4878a19b4
Diffstat (limited to 'formula/source')
-rw-r--r-- | formula/source/core/api/FormulaCompiler.cxx | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/formula/source/core/api/FormulaCompiler.cxx b/formula/source/core/api/FormulaCompiler.cxx index 64121e6d6b52..c8e467821446 100644 --- a/formula/source/core/api/FormulaCompiler.cxx +++ b/formula/source/core/api/FormulaCompiler.cxx @@ -1868,6 +1868,44 @@ const FormulaToken* FormulaCompiler::CreateStringFromToken( OUStringBuffer& rBuf case svIndex: CreateStringFromIndex( rBuffer, t ); + if (t->GetOpCode() == ocTableRef && bAllowArrAdvance && mxSymbols->getSymbol( ocTableRefOpen).isEmpty()) + { + // Suppress all TableRef related tokens, the resulting + // range was written by CreateStringFromIndex(). + const FormulaToken* p = pArr->PeekNext(); + if (p->GetOpCode() == ocTableRefOpen) + { + p = pArr->Next(); + int nLevel = 0; + do + { + // Switch cases correspond with those in + // ScCompiler::HandleTableRef() + switch (p->GetOpCode()) + { + case ocTableRefOpen: + ++nLevel; + break; + case ocTableRefClose: + --nLevel; + break; + case ocTableRefItemAll: + case ocTableRefItemHeaders: + case ocTableRefItemData: + case ocTableRefItemTotals: + case ocTableRefItemThisRow: + case ocSep: + case ocPush: + case ocRange: + case ocSpaces: + break; + default: + nLevel = 0; + bNext = false; + } + } while (nLevel && (p = pArr->Next())); + } + } break; case svExternal: { |