diff options
author | Eike Rathke <erack@redhat.com> | 2015-04-22 22:55:34 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2015-04-23 15:18:01 +0200 |
commit | e9646512e62b9f74bd82307d054a6739cb4ac0d3 (patch) | |
tree | 08b4040af1b2a8c4e69423dfef3a13de8f01391d /sc/source/core | |
parent | 97539f5eb1d1f6ba3349bdfcbd71b8256370a783 (diff) |
TableRef: create column specifier string from singleref
Change-Id: Iac842f7a44240bf3da3fd2658f1ae05cac85ad7d
Diffstat (limited to 'sc/source/core')
-rw-r--r-- | sc/source/core/tool/compiler.cxx | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx index 19d2cfc8c92e..19a073983825 100644 --- a/sc/source/core/tool/compiler.cxx +++ b/sc/source/core/tool/compiler.cxx @@ -4476,8 +4476,36 @@ void ScCompiler::CreateStringFromMatrix( OUStringBuffer& rBuffer, const FormulaT rBuffer.append( mxSymbols->getSymbol(ocArrayClose) ); } +namespace { +void escapeTableRefColumnSpecifier( OUString& rStr ) +{ + const sal_Int32 n = rStr.getLength(); + OUStringBuffer aBuf( n * 2 ); + const sal_Unicode* p = rStr.getStr(); + const sal_Unicode* const pStop = p + n; + for ( ; p < pStop; ++p) + { + const sal_Unicode c = *p; + switch (c) + { + case '\'': + case '[': + case '#': + case ']': + aBuf.append( '\'' ); + break; + default: + ; // nothing + } + aBuf.append( c ); + } + rStr = aBuf.makeStringAndClear(); +} +} + void ScCompiler::CreateStringFromSingleRef( OUStringBuffer& rBuffer, const FormulaToken* _pTokenP ) const { + const FormulaToken* p; OUString aErrRef = GetCurrentOpCodeMap()->getSymbol(ocErrRef); const OpCode eOp = _pTokenP->GetOpCode(); const ScSingleRefData& rRef = *_pTokenP->GetSingleRef(); @@ -4499,6 +4527,13 @@ void ScCompiler::CreateStringFromSingleRef( OUStringBuffer& rBuffer, const Formu GetSetupTabNames(), aRef, true); } } + else if ((p = pArr->PeekPrevNoSpaces()) && p->GetOpCode() == ocTableRefOpen) + { + ScAddress aAbs = rRef.toAbs(aPos); + OUString aStr = pDoc->GetString(aAbs); + escapeTableRefColumnSpecifier( aStr); + rBuffer.append(aStr); + } else pConv->makeRefStr(rBuffer, meGrammar, aPos, aErrRef, GetSetupTabNames(), aRef, true); |