From 8c2173d95c8fd626c5399144d5820a791147bdbf Mon Sep 17 00:00:00 2001 From: Eike Rathke Date: Sat, 18 Apr 2015 00:27:28 +0200 Subject: TableRef: transform to reference if not supported, i.e. for ODFF Change-Id: I64f751455fbba901bb41f91daaf64ee4878a19b4 --- formula/source/core/api/FormulaCompiler.cxx | 38 +++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'formula/source') 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: { -- cgit