Kaydet (Commit) b9641d17 authored tarafından Kohei Yoshida's avatar Kohei Yoshida

More of the same.

Change-Id: I29c60f2f7a31b69b224d4c910392c88990b48572
üst 7af53e4e
...@@ -399,7 +399,7 @@ XclExpTableopRef XclExpTableopBuffer::CreateOrExtendTableop( ...@@ -399,7 +399,7 @@ XclExpTableopRef XclExpTableopBuffer::CreateOrExtendTableop(
// try to extract cell references of a multiple operations formula // try to extract cell references of a multiple operations formula
XclMultipleOpRefs aRefs; XclMultipleOpRefs aRefs;
if( XclTokenArrayHelper::GetMultipleOpRefs( aRefs, rScTokArr ) ) if (XclTokenArrayHelper::GetMultipleOpRefs(aRefs, rScTokArr, rScPos))
{ {
// try to find an existing TABLEOP record for this cell position // try to find an existing TABLEOP record for this cell position
for( size_t nPos = 0, nSize = maTableopList.GetSize(); !xRec && (nPos < nSize); ++nPos ) for( size_t nPos = 0, nSize = maTableopList.GetSize(); !xRec && (nPos < nSize); ++nPos )
......
...@@ -780,14 +780,14 @@ const ScTokenArray* XclTokenArrayHelper::GetSharedFormula( const XclRoot& rRoot, ...@@ -780,14 +780,14 @@ const ScTokenArray* XclTokenArrayHelper::GetSharedFormula( const XclRoot& rRoot,
namespace { namespace {
inline bool lclGetAddress( ScAddress& rAddress, const FormulaToken& rToken ) inline bool lclGetAddress( ScAddress& rAddress, const FormulaToken& rToken, const ScAddress& rPos )
{ {
OpCode eOpCode = rToken.GetOpCode(); OpCode eOpCode = rToken.GetOpCode();
bool bIsSingleRef = (eOpCode == ocPush) && (rToken.GetType() == svSingleRef); bool bIsSingleRef = (eOpCode == ocPush) && (rToken.GetType() == svSingleRef);
if( bIsSingleRef ) if( bIsSingleRef )
{ {
const ScSingleRefData& rRef = static_cast<const ScToken&>(rToken).GetSingleRef(); const ScSingleRefData& rRef = static_cast<const ScToken&>(rToken).GetSingleRef();
rAddress.Set( rRef.nCol, rRef.nRow, rRef.nTab ); rAddress = rRef.toAbs(rPos);
bIsSingleRef = !rRef.IsDeleted(); bIsSingleRef = !rRef.IsDeleted();
} }
return bIsSingleRef; return bIsSingleRef;
...@@ -795,7 +795,8 @@ inline bool lclGetAddress( ScAddress& rAddress, const FormulaToken& rToken ) ...@@ -795,7 +795,8 @@ inline bool lclGetAddress( ScAddress& rAddress, const FormulaToken& rToken )
} // namespace } // namespace
bool XclTokenArrayHelper::GetMultipleOpRefs( XclMultipleOpRefs& rRefs, const ScTokenArray& rScTokArr ) bool XclTokenArrayHelper::GetMultipleOpRefs(
XclMultipleOpRefs& rRefs, const ScTokenArray& rScTokArr, const ScAddress& rScPos )
{ {
rRefs.mbDblRefMode = false; rRefs.mbDblRefMode = false;
enum enum
...@@ -817,32 +818,32 @@ bool XclTokenArrayHelper::GetMultipleOpRefs( XclMultipleOpRefs& rRefs, const ScT ...@@ -817,32 +818,32 @@ bool XclTokenArrayHelper::GetMultipleOpRefs( XclMultipleOpRefs& rRefs, const ScT
eState = (eOpCode == ocOpen) ? stOpen : stError; eState = (eOpCode == ocOpen) ? stOpen : stError;
break; break;
case stOpen: case stOpen:
eState = lclGetAddress( rRefs.maFmlaScPos, *aIt ) ? stFormula : stError; eState = lclGetAddress(rRefs.maFmlaScPos, *aIt, rScPos) ? stFormula : stError;
break; break;
case stFormula: case stFormula:
eState = bIsSep ? stFormulaSep : stError; eState = bIsSep ? stFormulaSep : stError;
break; break;
case stFormulaSep: case stFormulaSep:
eState = lclGetAddress( rRefs.maColFirstScPos, *aIt ) ? stColFirst : stError; eState = lclGetAddress(rRefs.maColFirstScPos, *aIt, rScPos) ? stColFirst : stError;
break; break;
case stColFirst: case stColFirst:
eState = bIsSep ? stColFirstSep : stError; eState = bIsSep ? stColFirstSep : stError;
break; break;
case stColFirstSep: case stColFirstSep:
eState = lclGetAddress( rRefs.maColRelScPos, *aIt ) ? stColRel : stError; eState = lclGetAddress(rRefs.maColRelScPos, *aIt, rScPos) ? stColRel : stError;
break; break;
case stColRel: case stColRel:
eState = bIsSep ? stColRelSep : ((eOpCode == ocClose) ? stClose : stError); eState = bIsSep ? stColRelSep : ((eOpCode == ocClose) ? stClose : stError);
break; break;
case stColRelSep: case stColRelSep:
eState = lclGetAddress( rRefs.maRowFirstScPos, *aIt ) ? stRowFirst : stError; eState = lclGetAddress(rRefs.maRowFirstScPos, *aIt, rScPos) ? stRowFirst : stError;
rRefs.mbDblRefMode = true; rRefs.mbDblRefMode = true;
break; break;
case stRowFirst: case stRowFirst:
eState = bIsSep ? stRowFirstSep : stError; eState = bIsSep ? stRowFirstSep : stError;
break; break;
case stRowFirstSep: case stRowFirstSep:
eState = lclGetAddress( rRefs.maRowRelScPos, *aIt ) ? stRowRel : stError; eState = lclGetAddress(rRefs.maRowRelScPos, *aIt, rScPos) ? stRowRel : stError;
break; break;
case stRowRel: case stRowRel:
eState = (eOpCode == ocClose) ? stClose : stError; eState = (eOpCode == ocClose) ? stClose : stError;
......
...@@ -537,7 +537,7 @@ public: ...@@ -537,7 +537,7 @@ public:
@descr Requires that the formula contains a single MULTIPLE.OPERATION function call. @descr Requires that the formula contains a single MULTIPLE.OPERATION function call.
Spaces in the formula are silently ignored. Spaces in the formula are silently ignored.
@return true = Multiple operation found, and all references successfully extracted. */ @return true = Multiple operation found, and all references successfully extracted. */
static bool GetMultipleOpRefs( XclMultipleOpRefs& rRefs, const ScTokenArray& rScTokArr ); static bool GetMultipleOpRefs( XclMultipleOpRefs& rRefs, const ScTokenArray& rScTokArr, const ScAddress& rScPos );
}; };
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
......
...@@ -465,16 +465,16 @@ void LotusRangeList::Append( LotusRange* pLR, const String& rName ) ...@@ -465,16 +465,16 @@ void LotusRangeList::Append( LotusRange* pLR, const String& rName )
ScSingleRefData* pSingRef = &aComplRef.Ref1; ScSingleRefData* pSingRef = &aComplRef.Ref1;
pSingRef->nCol = pLR->nColStart; pSingRef->SetAbsCol(pLR->nColStart);
pSingRef->nRow = pLR->nRowStart; pSingRef->SetAbsRow(pLR->nRowStart);
if( pLR->IsSingle() ) if( pLR->IsSingle() )
aTokArray.AddSingleReference( *pSingRef ); aTokArray.AddSingleReference( *pSingRef );
else else
{ {
pSingRef = &aComplRef.Ref2; pSingRef = &aComplRef.Ref2;
pSingRef->nCol = pLR->nColEnd; pSingRef->SetAbsCol(pLR->nColEnd);
pSingRef->nRow = pLR->nRowEnd; pSingRef->SetAbsRow(pLR->nRowEnd);
aTokArray.AddDoubleReference( aComplRef ); aTokArray.AddDoubleReference( aComplRef );
} }
...@@ -515,11 +515,12 @@ void RangeNameBufferWK3::Add( const String& rOrgName, const ScComplexRefData& rC ...@@ -515,11 +515,12 @@ void RangeNameBufferWK3::Add( const String& rOrgName, const ScComplexRefData& rC
const ScSingleRefData& rRef1 = rCRD.Ref1; const ScSingleRefData& rRef1 = rCRD.Ref1;
const ScSingleRefData& rRef2 = rCRD.Ref2; const ScSingleRefData& rRef2 = rCRD.Ref2;
ScAddress aAbs1 = rRef1.toAbs(ScAddress());
if( rRef1.nCol == rRef2.nCol && rRef1.nRow == rRef2.nRow && rRef1.nTab == rRef2.nTab ) ScAddress aAbs2 = rRef2.toAbs(ScAddress());
if (aAbs1 == aAbs2)
{ {
pScTokenArray->AddSingleReference( rCRD.Ref1 ); pScTokenArray->AddSingleReference( rCRD.Ref1 );
aInsert.bSingleRef = sal_True; aInsert.bSingleRef = true;
} }
else else
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment