summaryrefslogtreecommitdiff
path: root/sw/source
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-02-14 21:16:12 +0000
committerCaolán McNamara <caolanm@redhat.com>2018-02-15 09:32:27 +0100
commit2affa16c998bc08c1e2adbc832c5fecf3d52c1f0 (patch)
treedad491e11123b1841a6434ddf7a95e6aad896807 /sw/source
parent0dfef73bea7ea70577209a9ed68ad037c8bbab4c (diff)
ofz#6360 Direct-leak
Change-Id: Ie058f6cf9af88f486e11c2cca1efec81ec01c04e Reviewed-on: https://gerrit.libreoffice.org/49783 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'sw/source')
-rw-r--r--sw/source/filter/ww8/ww8par.cxx6
-rw-r--r--sw/source/filter/ww8/ww8par.hxx6
-rw-r--r--sw/source/filter/ww8/ww8par2.cxx238
-rw-r--r--sw/source/filter/ww8/ww8par2.hxx148
-rw-r--r--sw/source/filter/ww8/ww8par4.cxx2
5 files changed, 198 insertions, 202 deletions
diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx
index a3a90efed173..e6a5d3bd6b4a 100644
--- a/sw/source/filter/ww8/ww8par.cxx
+++ b/sw/source/filter/ww8/ww8par.cxx
@@ -1939,7 +1939,7 @@ WW8ReaderSave::WW8ReaderSave(SwWW8ImplReader* pRdr ,WW8_CP nStartCp) :
mpSFlyPara(pRdr->m_xSFlyPara.release()),
mpPreviousNumPaM(pRdr->m_pPreviousNumPaM),
mpPrevNumRule(pRdr->m_pPrevNumRule),
- mpTableDesc(pRdr->m_pTableDesc),
+ mxTableDesc(std::move(pRdr->m_xTableDesc)),
mnInTable(pRdr->m_nInTable),
mnCurrentColl(pRdr->m_nCurrentColl),
mcSymbol(pRdr->m_cSymbol),
@@ -1962,7 +1962,6 @@ WW8ReaderSave::WW8ReaderSave(SwWW8ImplReader* pRdr ,WW8_CP nStartCp) :
pRdr->m_nInTable = 0;
pRdr->m_pPreviousNumPaM = nullptr;
pRdr->m_pPrevNumRule = nullptr;
- pRdr->m_pTableDesc = nullptr;
pRdr->m_nCurrentColl = 0;
pRdr->m_xCtrlStck.reset(new SwWW8FltControlStack(&pRdr->m_rDoc, pRdr->m_nFieldFlags,
@@ -1994,7 +1993,7 @@ void WW8ReaderSave::Restore( SwWW8ImplReader* pRdr )
pRdr->m_xSFlyPara.reset(mpSFlyPara);
pRdr->m_pPreviousNumPaM = mpPreviousNumPaM;
pRdr->m_pPrevNumRule = mpPrevNumRule;
- pRdr->m_pTableDesc = mpTableDesc;
+ pRdr->m_xTableDesc = std::move(mxTableDesc);
pRdr->m_cSymbol = mcSymbol;
pRdr->m_bSymbol = mbSymbol;
pRdr->m_bIgnoreText = mbIgnoreText;
@@ -4168,7 +4167,6 @@ SwWW8ImplReader::SwWW8ImplReader(sal_uInt8 nVersionPara, SotStorage* pStorage,
, m_pAktColl(nullptr)
, m_pDfltTextFormatColl(nullptr)
, m_pStandardFormatColl(nullptr)
- , m_pTableDesc(nullptr)
, m_pDrawModel(nullptr)
, m_pDrawPg(nullptr)
, m_pDrawEditEngine(nullptr)
diff --git a/sw/source/filter/ww8/ww8par.hxx b/sw/source/filter/ww8/ww8par.hxx
index 329cf0acfd28..9d84a13ec742 100644
--- a/sw/source/filter/ww8/ww8par.hxx
+++ b/sw/source/filter/ww8/ww8par.hxx
@@ -593,7 +593,7 @@ private:
WW8SwFlyPara* mpSFlyPara;
SwPaM* mpPreviousNumPaM;
const SwNumRule* mpPrevNumRule;
- WW8TabDesc* mpTableDesc;
+ std::unique_ptr<WW8TabDesc> mxTableDesc;
int mnInTable;
sal_uInt16 mnCurrentColl;
sal_Unicode mcSymbol;
@@ -1230,9 +1230,9 @@ private:
std::unique_ptr<WW8FlyPara> m_xWFlyPara; // WW-parameter
std::unique_ptr<WW8SwFlyPara> m_xSFlyPara; // Sw parameters created from previous
- WW8TabDesc* m_pTableDesc; // description of table properties
+ std::unique_ptr<WW8TabDesc> m_xTableDesc; // description of table properties
//Keep track of tables within tables
- std::stack<WW8TabDesc*> m_aTableStack;
+ std::stack<std::unique_ptr<WW8TabDesc>> m_aTableStack;
ANLDRuleMap m_aANLDRules;
std::unique_ptr<WW8_OLST> m_xNumOlst; // position in text
diff --git a/sw/source/filter/ww8/ww8par2.cxx b/sw/source/filter/ww8/ww8par2.cxx
index 93f1190a6093..3120179717f6 100644
--- a/sw/source/filter/ww8/ww8par2.cxx
+++ b/sw/source/filter/ww8/ww8par2.cxx
@@ -76,56 +76,6 @@
using namespace ::com::sun::star;
-// Gets filled in WW8TabDesc::MergeCells().
-// Algorithm must ensure proper row and column order in WW8SelBoxInfo!
-class WW8SelBoxInfo
-{
-private:
- std::vector<std::vector<SwTableBox*> > m_vRows;
-
- WW8SelBoxInfo(WW8SelBoxInfo const&) = delete;
- WW8SelBoxInfo& operator=(WW8SelBoxInfo const&) = delete;
-
-public:
- short nGroupXStart;
- short nGroupWidth;
- bool bGroupLocked;
-
- WW8SelBoxInfo(short nXCenter, short nWidth)
- : nGroupXStart( nXCenter ), nGroupWidth( nWidth ), bGroupLocked(false)
- {}
-
- size_t size() const
- {
- size_t nResult = 0;
- for (auto& it : m_vRows)
- nResult += it.size();
- return nResult;
- }
-
- size_t rowsCount() const { return m_vRows.size(); }
-
- const std::vector<SwTableBox*>& row( size_t nIndex ) { return m_vRows[nIndex]; }
-
- void push_back( SwTableBox* pBox )
- {
- bool bDone = false;
- for (auto& iRow : m_vRows)
- if (iRow[0]->GetUpper() == pBox->GetUpper())
- {
- iRow.push_back(pBox);
- bDone = true;
- break;
- }
- if (!bDone)
- {
- const size_t sz = m_vRows.size();
- m_vRows.resize(sz+1);
- m_vRows[sz].push_back(pBox);
- }
- }
-};
-
WW8TabBandDesc::WW8TabBandDesc()
{
memset(this, 0, sizeof(*this));
@@ -140,104 +90,6 @@ WW8TabBandDesc::~WW8TabBandDesc()
delete[] pNewSHDs;
}
-class WW8TabDesc
-{
- std::vector<OUString> m_aNumRuleNames;
- std::unique_ptr<sw::util::RedlineStack> mxOldRedlineStack;
-
- SwWW8ImplReader* m_pIo;
-
- WW8TabBandDesc* m_pFirstBand;
- WW8TabBandDesc* m_pActBand;
-
- SwPosition* m_pTmpPos;
-
- SwTableNode* m_pTableNd; // table node
- const SwTableLines* m_pTabLines; // row array of node
- SwTableLine* m_pTabLine; // current row
- SwTableBoxes* m_pTabBoxes; // boxes array in current row
- SwTableBox* m_pTabBox; // current cell
-
- std::vector<std::unique_ptr<WW8SelBoxInfo>> m_MergeGroups; // list of all cells to be merged
-
- WW8_TCell* m_pAktWWCell;
-
- short m_nRows;
- short m_nDefaultSwCols;
- short m_nBands;
- short m_nMinLeft;
- short m_nConvertedLeft;
- short m_nMaxRight;
- short m_nSwWidth;
- short m_nPreferredWidth;
- short m_nPercentWidth;
-
- bool m_bOk;
- bool m_bClaimLineFormat;
- sal_Int16 m_eOri;
- bool m_bIsBiDi;
- // 2. common admin info
- short m_nAktRow;
- short m_nAktBandRow; // SW: row of current band
- // 3. admin info for writer
- short m_nAktCol;
-
- sal_uInt16 m_nRowsToRepeat;
-
- // 4. methods
-
- sal_uInt16 GetLogicalWWCol() const;
- void SetTabBorders( SwTableBox* pBox, short nIdx );
- void SetTabShades( SwTableBox* pBox, short nWwIdx );
- void SetTabVertAlign( SwTableBox* pBox, short nWwIdx );
- void SetTabDirection( SwTableBox* pBox, short nWwIdx );
- void CalcDefaults();
- void SetPamInCell(short nWwCol, bool bPam);
- void InsertCells( short nIns );
- void AdjustNewBand();
-
- WW8SelBoxInfo* FindMergeGroup(short nX1, short nWidth, bool bExact);
-
- // single box - maybe used in a merge group
- // (the merge groups are processed later at once)
- void UpdateTableMergeGroup(WW8_TCell const & rCell,
- WW8SelBoxInfo* pActGroup, SwTableBox* pActBox, sal_uInt16 nCol );
- void StartMiserableHackForUnsupportedDirection(short nWwCol);
- void EndMiserableHackForUnsupportedDirection(short nWwCol);
-
- WW8TabDesc(WW8TabDesc const&) = delete;
- WW8TabDesc& operator=(WW8TabDesc const&) = delete;
-
-public:
- const SwTable* m_pTable; // table
- SwPosition* m_pParentPos;
- SwFlyFrameFormat* m_pFlyFormat;
- SfxItemSet m_aItemSet;
- bool IsValidCell(short nCol) const;
- bool InFirstParaInCell() const;
-
- WW8TabDesc( SwWW8ImplReader* pIoClass, WW8_CP nStartCp );
- bool Ok() const { return m_bOk; }
- void CreateSwTable();
- void UseSwTable();
- void SetSizePosition(SwFrameFormat* pFrameFormat);
- void TableCellEnd();
- void MoveOutsideTable();
- void ParkPaM();
- void FinishSwTable();
- void MergeCells();
- short GetMinLeft() const { return m_nConvertedLeft; }
- ~WW8TabDesc();
-
- const WW8_TCell* GetAktWWCell() const { return m_pAktWWCell; }
- short GetAktCol() const { return m_nAktCol; }
- // find name of numrule valid for current WW-COL
- OUString GetNumRuleName() const;
- void SetNumRuleName( const OUString& rName );
-
- sw::util::RedlineStack* getOldRedlineStack() { return mxOldRedlineStack.get(); }
-};
-
void sw::util::RedlineStack::close( const SwPosition& rPos,
RedlineType_t eType, WW8TabDesc* pTabDesc )
{
@@ -610,9 +462,9 @@ ApoTestResults SwWW8ImplReader::TestApo(int nCellLevel, bool bTableRowEnd,
bTestAllowed = true;
else
{
- if (!m_pTableDesc)
+ if (!m_xTableDesc)
{
- OSL_ENSURE(m_pTableDesc, "What!");
+ OSL_ENSURE(m_xTableDesc.get(), "What!");
bTestAllowed = false;
}
else
@@ -622,9 +474,9 @@ ApoTestResults SwWW8ImplReader::TestApo(int nCellLevel, bool bTableRowEnd,
// The cell isn't valid, if e.g. there is a new row
// <pTableDesc->nAktRow> >= <pTableDesc->pTabLines->Count()>
bTestAllowed =
- m_pTableDesc->GetAktCol() == 0 &&
- ( !m_pTableDesc->IsValidCell( m_pTableDesc->GetAktCol() ) ||
- m_pTableDesc->InFirstParaInCell() );
+ m_xTableDesc->GetAktCol() == 0 &&
+ ( !m_xTableDesc->IsValidCell( m_xTableDesc->GetAktCol() ) ||
+ m_xTableDesc->InFirstParaInCell() );
}
}
}
@@ -1048,9 +900,9 @@ void SwWW8ImplReader::StartAnl(const sal_uInt8* pSprm13)
SprmResult aS12; // sprmAnld
OUString sNumRule;
- if (m_pTableDesc)
+ if (m_xTableDesc)
{
- sNumRule = m_pTableDesc->GetNumRuleName();
+ sNumRule = m_xTableDesc->GetNumRuleName();
if (!sNumRule.isEmpty())
{
pNumRule = m_rDoc.FindNumRulePtr(sNumRule);
@@ -1084,12 +936,12 @@ void SwWW8ImplReader::StartAnl(const sal_uInt8* pSprm13)
m_rDoc.MakeNumRule( sNumRule, nullptr, false,
SvxNumberFormat::LABEL_ALIGNMENT ) ];
}
- if (m_pTableDesc)
+ if (m_xTableDesc)
{
if (!aS12.pSprm)
aS12 = m_xPlcxMan->HasParaSprm(m_bVer67 ? 12 : NS_sprm::LN_PAnld); // sprmAnld
if (!aS12.pSprm || aS12.nRemainingData < sal_Int32(sizeof(WW8_ANLD)) || !reinterpret_cast<WW8_ANLD const *>(aS12.pSprm)->fNumberAcross)
- m_pTableDesc->SetNumRuleName(pNumRule->GetName());
+ m_xTableDesc->SetNumRuleName(pNumRule->GetName());
}
}
@@ -3483,8 +3335,8 @@ bool SwWW8ImplReader::StartTable(WW8_CP nStartCp)
if (m_bReadNoTable)
return false;
- if (m_pTableDesc)
- m_aTableStack.push(m_pTableDesc);
+ if (m_xTableDesc)
+ m_aTableStack.push(std::move(m_xTableDesc));
// #i33818# - determine absolute position object attributes,
// if possible. It's needed for nested tables.
@@ -3534,57 +3386,57 @@ bool SwWW8ImplReader::StartTable(WW8_CP nStartCp)
NewAttr( pStyleFormat->GetBreak() );
}
- m_pTableDesc = new WW8TabDesc( this, nStartCp );
+ m_xTableDesc.reset(new WW8TabDesc(this, nStartCp));
- if( m_pTableDesc->Ok() )
+ if( m_xTableDesc->Ok() )
{
int nNewInTable = m_nInTable + 1;
if ((eAnchor == RndStdIds::FLY_AT_CHAR)
&& !m_aTableStack.empty() && !InEqualApo(nNewInTable) )
{
- m_pTableDesc->m_pParentPos = new SwPosition(*m_pPaM->GetPoint());
+ m_xTableDesc->m_pParentPos = new SwPosition(*m_pPaM->GetPoint());
SfxItemSet aItemSet(m_rDoc.GetAttrPool(),
svl::Items<RES_FRMATR_BEGIN, RES_FRMATR_END-1>{});
// #i33818# - anchor the Writer fly frame for the nested table at-character.
// #i45301#
SwFormatAnchor aAnchor( eAnchor );
- aAnchor.SetAnchor( m_pTableDesc->m_pParentPos );
+ aAnchor.SetAnchor( m_xTableDesc->m_pParentPos );
aItemSet.Put( aAnchor );
- m_pTableDesc->m_pFlyFormat = m_rDoc.MakeFlySection( eAnchor,
- m_pTableDesc->m_pParentPos, &aItemSet);
- OSL_ENSURE( m_pTableDesc->m_pFlyFormat->GetAnchor().GetAnchorId() == eAnchor,
+ m_xTableDesc->m_pFlyFormat = m_rDoc.MakeFlySection( eAnchor,
+ m_xTableDesc->m_pParentPos, &aItemSet);
+ OSL_ENSURE( m_xTableDesc->m_pFlyFormat->GetAnchor().GetAnchorId() == eAnchor,
"Not the anchor type requested!" );
- MoveInsideFly(m_pTableDesc->m_pFlyFormat);
+ MoveInsideFly(m_xTableDesc->m_pFlyFormat);
}
- m_pTableDesc->CreateSwTable();
- if (m_pTableDesc->m_pFlyFormat)
+ m_xTableDesc->CreateSwTable();
+ if (m_xTableDesc->m_pFlyFormat)
{
- m_pTableDesc->SetSizePosition(m_pTableDesc->m_pFlyFormat);
+ m_xTableDesc->SetSizePosition(m_xTableDesc->m_pFlyFormat);
// #i33818# - Use absolute position object attributes,
// if existing, and apply them to the created Writer fly frame.
if ( pTableWFlyPara && pTableSFlyPara )
{
WW8FlySet aFlySet( *this, pTableWFlyPara, pTableSFlyPara, false );
SwFormatAnchor aAnchor( RndStdIds::FLY_AT_CHAR );
- aAnchor.SetAnchor( m_pTableDesc->m_pParentPos );
+ aAnchor.SetAnchor( m_xTableDesc->m_pParentPos );
aFlySet.Put( aAnchor );
- m_pTableDesc->m_pFlyFormat->SetFormatAttr( aFlySet );
+ m_xTableDesc->m_pFlyFormat->SetFormatAttr( aFlySet );
}
else
{
SwFormatHoriOrient aHori =
- m_pTableDesc->m_pTable->GetFrameFormat()->GetHoriOrient();
- m_pTableDesc->m_pFlyFormat->SetFormatAttr(aHori);
- m_pTableDesc->m_pFlyFormat->SetFormatAttr( SwFormatSurround( css::text::WrapTextMode_NONE ) );
+ m_xTableDesc->m_pTable->GetFrameFormat()->GetHoriOrient();
+ m_xTableDesc->m_pFlyFormat->SetFormatAttr(aHori);
+ m_xTableDesc->m_pFlyFormat->SetFormatAttr( SwFormatSurround( css::text::WrapTextMode_NONE ) );
}
// #i33818# - The nested table doesn't have to leave
// the table cell. Thus, the Writer fly frame has to follow the text flow.
- m_pTableDesc->m_pFlyFormat->SetFormatAttr( SwFormatFollowTextFlow( true ) );
+ m_xTableDesc->m_pFlyFormat->SetFormatAttr( SwFormatFollowTextFlow( true ) );
}
else
- m_pTableDesc->SetSizePosition(nullptr);
- m_pTableDesc->UseSwTable();
+ m_xTableDesc->SetSizePosition(nullptr);
+ m_xTableDesc->UseSwTable();
}
else
PopTableDesc();
@@ -3593,13 +3445,13 @@ bool SwWW8ImplReader::StartTable(WW8_CP nStartCp)
delete pTableWFlyPara;
delete pTableSFlyPara;
- return nullptr != m_pTableDesc;
+ return m_xTableDesc.get() != nullptr;
}
void SwWW8ImplReader::TabCellEnd()
{
- if (m_nInTable && m_pTableDesc)
- m_pTableDesc->TableCellEnd();
+ if (m_nInTable && m_xTableDesc)
+ m_xTableDesc->TableCellEnd();
m_bFirstPara = true; // We have come to the end of a cell so FirstPara flag
m_bReadTable = false;
@@ -3619,32 +3471,30 @@ void SwWW8ImplReader::Read_TabRowEnd( sal_uInt16, const sal_uInt8* pData, short
void SwWW8ImplReader::PopTableDesc()
{
- if (m_pTableDesc && m_pTableDesc->m_pFlyFormat)
+ if (m_xTableDesc && m_xTableDesc->m_pFlyFormat)
{
- MoveOutsideFly(m_pTableDesc->m_pFlyFormat,*m_pTableDesc->m_pParentPos);
+ MoveOutsideFly(m_xTableDesc->m_pFlyFormat, *m_xTableDesc->m_pParentPos);
}
- delete m_pTableDesc;
- if (m_aTableStack.empty())
- m_pTableDesc = nullptr;
- else
+ m_xTableDesc.reset();
+ if (!m_aTableStack.empty())
{
- m_pTableDesc = m_aTableStack.top();
+ m_xTableDesc = std::move(m_aTableStack.top());
m_aTableStack.pop();
}
}
void SwWW8ImplReader::StopTable()
{
- OSL_ENSURE(m_pTableDesc, "Panic, stop table with no table!");
- if (!m_pTableDesc)
+ OSL_ENSURE(m_xTableDesc.get(), "Panic, stop table with no table!");
+ if (!m_xTableDesc)
return;
// We are leaving a table so make sure the next paragraph doesn't think
// it's the first paragraph
m_bFirstPara = false;
- m_pTableDesc->FinishSwTable();
+ m_xTableDesc->FinishSwTable();
PopTableDesc();
m_bReadTable = true;
@@ -3652,12 +3502,12 @@ void SwWW8ImplReader::StopTable()
bool SwWW8ImplReader::IsInvalidOrToBeMergedTabCell() const
{
- if( !m_pTableDesc )
+ if( !m_xTableDesc )
return false;
- const WW8_TCell* pCell = m_pTableDesc->GetAktWWCell();
+ const WW8_TCell* pCell = m_xTableDesc->GetAktWWCell();
- return !m_pTableDesc->IsValidCell( m_pTableDesc->GetAktCol() )
+ return !m_xTableDesc->IsValidCell( m_xTableDesc->GetAktCol() )
|| ( pCell
&& ( !pCell->bFirstMerged
&& ( pCell->bMerged
diff --git a/sw/source/filter/ww8/ww8par2.hxx b/sw/source/filter/ww8/ww8par2.hxx
index b66fc73a9aa0..6accc6329c1e 100644
--- a/sw/source/filter/ww8/ww8par2.hxx
+++ b/sw/source/filter/ww8/ww8par2.hxx
@@ -144,6 +144,154 @@ public:
long nWidth, long nHeight);
};
+// Gets filled in WW8TabDesc::MergeCells().
+// Algorithm must ensure proper row and column order in WW8SelBoxInfo!
+class WW8SelBoxInfo
+{
+private:
+ std::vector<std::vector<SwTableBox*> > m_vRows;
+
+ WW8SelBoxInfo(WW8SelBoxInfo const&) = delete;
+ WW8SelBoxInfo& operator=(WW8SelBoxInfo const&) = delete;
+
+public:
+ short nGroupXStart;
+ short nGroupWidth;
+ bool bGroupLocked;
+
+ WW8SelBoxInfo(short nXCenter, short nWidth)
+ : nGroupXStart( nXCenter ), nGroupWidth( nWidth ), bGroupLocked(false)
+ {}
+
+ size_t size() const
+ {
+ size_t nResult = 0;
+ for (auto& it : m_vRows)
+ nResult += it.size();
+ return nResult;
+ }
+
+ size_t rowsCount() const { return m_vRows.size(); }
+
+ const std::vector<SwTableBox*>& row( size_t nIndex ) { return m_vRows[nIndex]; }
+
+ void push_back( SwTableBox* pBox )
+ {
+ bool bDone = false;
+ for (auto& iRow : m_vRows)
+ if (iRow[0]->GetUpper() == pBox->GetUpper())
+ {
+ iRow.push_back(pBox);
+ bDone = true;
+ break;
+ }
+ if (!bDone)
+ {
+ const size_t sz = m_vRows.size();
+ m_vRows.resize(sz+1);
+ m_vRows[sz].push_back(pBox);
+ }
+ }
+};
+
+class WW8TabDesc
+{
+ std::vector<OUString> m_aNumRuleNames;
+ std::unique_ptr<sw::util::RedlineStack> mxOldRedlineStack;
+
+ SwWW8ImplReader* m_pIo;
+
+ WW8TabBandDesc* m_pFirstBand;
+ WW8TabBandDesc* m_pActBand;
+
+ SwPosition* m_pTmpPos;
+
+ SwTableNode* m_pTableNd; // table node
+ const SwTableLines* m_pTabLines; // row array of node
+ SwTableLine* m_pTabLine; // current row
+ SwTableBoxes* m_pTabBoxes; // boxes array in current row
+ SwTableBox* m_pTabBox; // current cell
+
+ std::vector<std::unique_ptr<WW8SelBoxInfo>> m_MergeGroups; // list of all cells to be merged
+
+ WW8_TCell* m_pAktWWCell;
+
+ short m_nRows;
+ short m_nDefaultSwCols;
+ short m_nBands;
+ short m_nMinLeft;
+ short m_nConvertedLeft;
+ short m_nMaxRight;
+ short m_nSwWidth;
+ short m_nPreferredWidth;
+ short m_nPercentWidth;
+
+ bool m_bOk;
+ bool m_bClaimLineFormat;
+ sal_Int16 m_eOri;
+ bool m_bIsBiDi;
+ // 2. common admin info
+ short m_nAktRow;
+ short m_nAktBandRow; // SW: row of current band
+ // 3. admin info for writer
+ short m_nAktCol;
+
+ sal_uInt16 m_nRowsToRepeat;
+
+ // 4. methods
+
+ sal_uInt16 GetLogicalWWCol() const;
+ void SetTabBorders( SwTableBox* pBox, short nIdx );
+ void SetTabShades( SwTableBox* pBox, short nWwIdx );
+ void SetTabVertAlign( SwTableBox* pBox, short nWwIdx );
+ void SetTabDirection( SwTableBox* pBox, short nWwIdx );
+ void CalcDefaults();
+ void SetPamInCell(short nWwCol, bool bPam);
+ void InsertCells( short nIns );
+ void AdjustNewBand();
+
+ WW8SelBoxInfo* FindMergeGroup(short nX1, short nWidth, bool bExact);
+
+ // single box - maybe used in a merge group
+ // (the merge groups are processed later at once)
+ void UpdateTableMergeGroup(WW8_TCell const & rCell,
+ WW8SelBoxInfo* pActGroup, SwTableBox* pActBox, sal_uInt16 nCol );
+ void StartMiserableHackForUnsupportedDirection(short nWwCol);
+ void EndMiserableHackForUnsupportedDirection(short nWwCol);
+
+ WW8TabDesc(WW8TabDesc const&) = delete;
+ WW8TabDesc& operator=(WW8TabDesc const&) = delete;
+
+public:
+ const SwTable* m_pTable; // table
+ SwPosition* m_pParentPos;
+ SwFlyFrameFormat* m_pFlyFormat;
+ SfxItemSet m_aItemSet;
+ bool IsValidCell(short nCol) const;
+ bool InFirstParaInCell() const;
+
+ WW8TabDesc( SwWW8ImplReader* pIoClass, WW8_CP nStartCp );
+ bool Ok() const { return m_bOk; }
+ void CreateSwTable();
+ void UseSwTable();
+ void SetSizePosition(SwFrameFormat* pFrameFormat);
+ void TableCellEnd();
+ void MoveOutsideTable();
+ void ParkPaM();
+ void FinishSwTable();
+ void MergeCells();
+ short GetMinLeft() const { return m_nConvertedLeft; }
+ ~WW8TabDesc();
+
+ const WW8_TCell* GetAktWWCell() const { return m_pAktWWCell; }
+ short GetAktCol() const { return m_nAktCol; }
+ // find name of numrule valid for current WW-COL
+ OUString GetNumRuleName() const;
+ void SetNumRuleName( const OUString& rName );
+
+ sw::util::RedlineStack* getOldRedlineStack() { return mxOldRedlineStack.get(); }
+};
+
enum WW8LvlType {WW8_None, WW8_Outline, WW8_Numbering, WW8_Sequence, WW8_Pause};
WW8LvlType GetNumType(sal_uInt8 nWwLevelNo);
diff --git a/sw/source/filter/ww8/ww8par4.cxx b/sw/source/filter/ww8/ww8par4.cxx
index 7ee6fac81825..ae4b675beec6 100644
--- a/sw/source/filter/ww8/ww8par4.cxx
+++ b/sw/source/filter/ww8/ww8par4.cxx
@@ -507,7 +507,7 @@ void SwWW8ImplReader::Read_CRevisionMark(RedlineType_t eType,
}
if (nLen < 0)
- m_xRedlineStack->close(*m_pPaM->GetPoint(), eType, m_pTableDesc );
+ m_xRedlineStack->close(*m_pPaM->GetPoint(), eType, m_xTableDesc.get());
else
{
// start of new revision mark, if not there default to first entry