summaryrefslogtreecommitdiff
path: root/formula
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2015-04-18 00:27:28 +0200
committerEike Rathke <erack@redhat.com>2015-04-18 00:46:08 +0200
commit8c2173d95c8fd626c5399144d5820a791147bdbf (patch)
tree889a344c9085889236fb9f9816c292ada85e5746 /formula
parent6f25c21eb5cf311d828b77e602a17390af19c962 (diff)
TableRef: transform to reference if not supported, i.e. for ODFF
Change-Id: I64f751455fbba901bb41f91daaf64ee4878a19b4
Diffstat (limited to 'formula')
-rw-r--r--formula/source/core/api/FormulaCompiler.cxx38
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:
{