summaryrefslogtreecommitdiff
path: root/sc/source/core/tool
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/core/tool')
-rw-r--r--sc/source/core/tool/token.cxx43
-rw-r--r--sc/source/core/tool/tokenstringcontext.cxx18
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()));
+ }
+ }
+ }
}
}