diff options
Diffstat (limited to 'sc/source/core/tool')
-rw-r--r-- | sc/source/core/tool/token.cxx | 43 | ||||
-rw-r--r-- | sc/source/core/tool/tokenstringcontext.cxx | 18 |
2 files changed, 44 insertions, 17 deletions
diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx index 5dc92e61b984..60b4fb3be475 100644 --- a/sc/source/core/tool/token.cxx +++ b/sc/source/core/tool/token.cxx @@ -3262,7 +3262,22 @@ void appendTokenByType( sc::TokenStringContext& rCxt, OUStringBuffer& rBuf, cons // TODO : Implement this. break; case svIndex: - // TODO : Implement this. + { + sal_uInt16 nIndex = rToken.GetIndex(); + switch (eOp) + { + case ocName: + { + sc::TokenStringContext::IndexNameMapType::const_iterator it = rCxt.maGlobalRangeNames.find(nIndex); + if (it != rCxt.maGlobalRangeNames.end()) + rBuf.append(it->second); + } + break; + // TODO : Handle other name types. + default: + ; + } + } break; case svExternal: // TODO : Implement this. @@ -3324,23 +3339,19 @@ OUString ScTokenArray::CreateString( sc::TokenStringContext& rCxt, const ScAddre { const FormulaToken* pToken = *p; OpCode eOp = pToken->GetOpCode(); - switch (eOp) + bool bCheckType = true; + if (eOp == ocSpaces) { - case ocPush: - appendTokenByType(rCxt, aBuf, *pToken, rPos); - break; - case ocSpaces: - // TODO : Handle intersection operator '!!'. - aBuf.append(sal_Unicode(' ')); - break; - default: - { - if (eOp < rCxt.mxOpCodeMap->getSymbolCount()) - aBuf.append(rCxt.mxOpCodeMap->getSymbol(eOp)); - else - return OUString(); - } + // TODO : Handle intersection operator '!!'. + aBuf.append(' '); + continue; } + + if (eOp < rCxt.mxOpCodeMap->getSymbolCount()) + aBuf.append(rCxt.mxOpCodeMap->getSymbol(eOp)); + + if (bCheckType) + appendTokenByType(rCxt, aBuf, *pToken, rPos); } return aBuf.makeStringAndClear(); diff --git a/sc/source/core/tool/tokenstringcontext.cxx b/sc/source/core/tool/tokenstringcontext.cxx index 5fea0a9837d9..b26d338df278 100644 --- a/sc/source/core/tool/tokenstringcontext.cxx +++ b/sc/source/core/tool/tokenstringcontext.cxx @@ -9,12 +9,13 @@ #include "tokenstringcontext.hxx" #include "compiler.hxx" +#include "document.hxx" using namespace com::sun::star; namespace sc { -TokenStringContext::TokenStringContext( formula::FormulaGrammar::Grammar eGram ) : +TokenStringContext::TokenStringContext( const ScDocument* pDoc, formula::FormulaGrammar::Grammar eGram ) : meGram(eGram), mpRefConv(ScCompiler::GetRefConvention(formula::FormulaGrammar::extractRefConvention(eGram))) { @@ -22,6 +23,21 @@ TokenStringContext::TokenStringContext( formula::FormulaGrammar::Grammar eGram ) mxOpCodeMap = aComp.GetOpCodeMap(formula::FormulaGrammar::extractFormulaLanguage(eGram)); if (mxOpCodeMap) maErrRef = mxOpCodeMap->getSymbol(ocErrRef); + + if (pDoc) + { + maTabNames = pDoc->GetAllTableNames(); + const ScRangeName* pNames = pDoc->GetRangeName(); + if (pNames) + { + ScRangeName::const_iterator it = pNames->begin(), itEnd = pNames->end(); + for (; it != itEnd; ++it) + { + const ScRangeData* pData = it->second; + maGlobalRangeNames.insert(IndexNameMapType::value_type(pData->GetIndex(), pData->GetName())); + } + } + } } } |