sw/source/filter/html/htmldrawreader.cxx | 2 sw/source/filter/html/htmlform.cxx | 2 sw/source/filter/html/htmlgrin.cxx | 6 sw/source/filter/html/htmltab.cxx | 326 +++++++++++++++---------------- sw/source/filter/html/swhtml.cxx | 31 +- sw/source/filter/html/swhtml.hxx | 10 6 files changed, 187 insertions(+), 190 deletions(-)
New commits: commit 4f4545b8c3c017dcf39c9707f1602c2c9718f19f Author: Caolán McNamara <caol...@redhat.com> Date: Mon Dec 11 10:45:49 2017 +0000 valgrind: various html leaks Change-Id: I5536254edd6fa2ba7f7fb2457edd8ad5a5111313 Reviewed-on: https://gerrit.libreoffice.org/46244 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> diff --git a/sw/source/filter/html/htmldrawreader.cxx b/sw/source/filter/html/htmldrawreader.cxx index 171e991222af..9720a399de2f 100644 --- a/sw/source/filter/html/htmldrawreader.cxx +++ b/sw/source/filter/html/htmldrawreader.cxx @@ -477,7 +477,7 @@ void SwHTMLParser::NewMarquee( HTMLTable *pCurTable ) m_bFixMarqueeWidth = false; if( !nWidth || bPrcWidth ) { - if( m_pTable ) + if( m_xTable ) { if( !pCurTable ) { diff --git a/sw/source/filter/html/htmlform.cxx b/sw/source/filter/html/htmlform.cxx index b426b844f311..988f7503d55c 100644 --- a/sw/source/filter/html/htmlform.cxx +++ b/sw/source/filter/html/htmlform.cxx @@ -1799,7 +1799,7 @@ void SwHTMLParser::InsertInput() { aSz.Width() = HTML_DFLT_IMG_WIDTH; bSetGrfWidth = true; - if( m_pTable != nullptr ) + if (m_xTable) IncGrfsThatResizeTable(); } if( !aSz.Height() ) diff --git a/sw/source/filter/html/htmlgrin.cxx b/sw/source/filter/html/htmlgrin.cxx index 6928b2ff0fce..12e20ccc4ec3 100644 --- a/sw/source/filter/html/htmlgrin.cxx +++ b/sw/source/filter/html/htmlgrin.cxx @@ -589,7 +589,7 @@ IMAGE_SETEVENT: { // When the graphic is in a table, it will be requested immediately, // so that it is available before the table is layouted. - if( m_pTable!=nullptr && !nWidth ) + if (m_xTable && !nWidth) { bRequestGrfNow = true; IncGrfsThatResizeTable(); @@ -1399,14 +1399,14 @@ void SwHTMLParser::StripTrailingPara() m_xDoc->GetNodes().Delete( m_pPam->GetPoint()->nNode ); m_pPam->Move( fnMoveBackward, GoInNode ); } - else if( pCNd && pCNd->IsTextNode() && m_pTable ) + else if (pCNd && pCNd->IsTextNode() && m_xTable) { // In empty cells we set a small font, so that the cell doesn't // get higher than the graphic resp. as low as possible. bSetSmallFont = true; } } - else if( pCNd && pCNd->IsTextNode() && m_pTable && + else if( pCNd && pCNd->IsTextNode() && m_xTable && pCNd->StartOfSectionIndex()+2 == pCNd->EndOfSectionIndex() ) { diff --git a/sw/source/filter/html/htmltab.cxx b/sw/source/filter/html/htmltab.cxx index 8f7dccdeb8ee..16e3d7ec6c1d 100644 --- a/sw/source/filter/html/htmltab.cxx +++ b/sw/source/filter/html/htmltab.cxx @@ -165,7 +165,7 @@ class HTMLTableCnts // Only one of the next two pointers must be set! const SwStartNode *m_pStartNode; // a paragraph - HTMLTable *m_pTable; // a table + std::shared_ptr<HTMLTable> m_xTable; // a table std::shared_ptr<SwHTMLTableLayoutCnts> m_xLayoutInfo; @@ -175,15 +175,15 @@ class HTMLTableCnts public: - explicit HTMLTableCnts( const SwStartNode* pStNd ); - explicit HTMLTableCnts( HTMLTable* pTab ); + explicit HTMLTableCnts(const SwStartNode* pStNd); + explicit HTMLTableCnts(const std::shared_ptr<HTMLTable>& rTab); ~HTMLTableCnts(); // only allowed in ~HTMLTableCell // Determine SwStartNode and HTMLTable respectively const SwStartNode *GetStartNode() const { return m_pStartNode; } - const HTMLTable *GetTable() const { return m_pTable; } - HTMLTable *GetTable() { return m_pTable; } + const std::shared_ptr<HTMLTable>& GetTable() const { return m_xTable; } + std::shared_ptr<HTMLTable>& GetTable() { return m_xTable; } // Add a new node at the end of the list void Add( HTMLTableCnts* pNewCnts ); @@ -620,21 +620,22 @@ void HTMLTableCnts::InitCtor() m_bNoBreak = false; } -HTMLTableCnts::HTMLTableCnts( const SwStartNode* pStNd ): - m_pStartNode(pStNd), m_pTable(nullptr) +HTMLTableCnts::HTMLTableCnts(const SwStartNode* pStNd) + : m_pStartNode(pStNd) { InitCtor(); } -HTMLTableCnts::HTMLTableCnts( HTMLTable* pTab ): - m_pStartNode(nullptr), m_pTable(pTab) +HTMLTableCnts::HTMLTableCnts(const std::shared_ptr<HTMLTable>& rTab) + : m_pStartNode(nullptr) + , m_xTable(rTab) { InitCtor(); } HTMLTableCnts::~HTMLTableCnts() { - delete m_pTable; // we don't need the tables anymore + m_xTable.reset(); // we don't need the tables anymore delete m_pNext; } @@ -662,7 +663,7 @@ const std::shared_ptr<SwHTMLTableLayoutCnts>& HTMLTableCnts::CreateLayoutInfo() std::shared_ptr<SwHTMLTableLayoutCnts> xNextInfo; if (m_pNext) xNextInfo = m_pNext->CreateLayoutInfo(); - SwHTMLTableLayout *pTableInfo = m_pTable ? m_pTable->CreateLayoutInfo() : nullptr; + SwHTMLTableLayout *pTableInfo = m_xTable ? m_xTable->CreateLayoutInfo() : nullptr; m_xLayoutInfo.reset(new SwHTMLTableLayoutCnts(m_pStartNode, pTableInfo, m_bNoBreak, xNextInfo)); } @@ -1890,7 +1891,7 @@ void HTMLTable::SetBorders() bool bFirstPara = true; while( pCnts ) { - HTMLTable *pTable = pCnts->GetTable(); + HTMLTable *pTable = pCnts->GetTable().get(); if( pTable && !pTable->BordersSet() ) { pTable->InheritBorders( this, i, j, @@ -2658,12 +2659,12 @@ const SwStartNode *SwHTMLParser::InsertTableSection SwTextFormatColl *pColl = m_pCSS1Parser->GetTextCollFromPool( RES_POOLCOLL_TABLE ); const SwStartNode *pStNd; - if (m_pTable->m_bFirstCell ) + if (m_xTable->m_bFirstCell ) { SwNode *const pNd = & m_pPam->GetPoint()->nNode.GetNode(); pNd->GetTextNode()->ChgFormatColl( pColl ); pStNd = pNd->FindTableBoxStartNode(); - m_pTable->m_bFirstCell = false; + m_xTable->m_bFirstCell = false; } else { @@ -2675,7 +2676,7 @@ const SwStartNode *SwHTMLParser::InsertTableSection SwNodeIndex nIdx( *pNd, 1 ); pStNd = m_xDoc->GetNodes().MakeTextSection( nIdx, SwTableBoxStartNode, pColl ); - m_pTable->IncBoxCount(); + m_xTable->IncBoxCount(); } //Added defaults to CJK and CTL @@ -2706,10 +2707,10 @@ const SwStartNode *SwHTMLParser::InsertTableSection( sal_uInt16 nPoolId ) SwNode *const pNd = & m_pPam->GetPoint()->nNode.GetNode(); const SwStartNode *pStNd; - if (m_pTable->m_bFirstCell) + if (m_xTable->m_bFirstCell) { pNd->GetTextNode()->ChgFormatColl( pColl ); - m_pTable->m_bFirstCell = false; + m_xTable->m_bFirstCell = false; pStNd = pNd->FindTableBoxStartNode(); } else @@ -2733,7 +2734,7 @@ const SwStartNode *SwHTMLParser::InsertTableSection( sal_uInt16 nPoolId ) m_pPam->GetPoint()->nNode = pStNd->GetIndex() + 1; SwTextNode *pTextNd = m_pPam->GetPoint()->nNode.GetNode().GetTextNode(); m_pPam->GetPoint()->nContent.Assign( pTextNd, 0 ); - m_pTable->IncBoxCount(); + m_xTable->IncBoxCount(); } return pStNd; @@ -2858,7 +2859,7 @@ class SectionSaveStruct : public SwPendingStackData public: - HTMLTable *m_pTable; + std::shared_ptr<HTMLTable> m_xTable; explicit SectionSaveStruct( SwHTMLParser& rParser ); @@ -2870,8 +2871,7 @@ public: SectionSaveStruct::SectionSaveStruct( SwHTMLParser& rParser ) : m_nBaseFontStMinSave(0), m_nFontStMinSave(0), m_nFontStHeadStartSave(0), - m_nDefListDeepSave(0), m_nContextStMinSave(0), m_nContextStAttrMinSave(0), - m_pTable( nullptr ) + m_nDefListDeepSave(0), m_nContextStMinSave(0), m_nContextStAttrMinSave(0) { // Freeze font stacks m_nBaseFontStMinSave = rParser.m_nBaseFontStMin; @@ -3274,7 +3274,7 @@ HTMLTableCnts *SwHTMLParser::InsertTableContents( sal_uInt16 SwHTMLParser::IncGrfsThatResizeTable() { - return m_pTable ? m_pTable->IncGrfsThatResize() : 0; + return m_xTable ? m_xTable->IncGrfsThatResize() : 0; } void SwHTMLParser::RegisterDrawObjectToTable( HTMLTable *pCurTable, @@ -3289,13 +3289,13 @@ void SwHTMLParser::BuildTableCell( HTMLTable *pCurTable, bool bReadOptions, if( !IsParserWorking() && !m_pPendStack ) return; - CellSaveStruct* pSaveStruct; + std::unique_ptr<CellSaveStruct> xSaveStruct; HtmlTokenId nToken = HtmlTokenId::NONE; bool bPending = false; if( m_pPendStack ) { - pSaveStruct = static_cast<CellSaveStruct*>(m_pPendStack->pData); + xSaveStruct.reset(static_cast<CellSaveStruct*>(m_pPendStack->pData)); SwPendingStack* pTmp = m_pPendStack->pNext; delete m_pPendStack; @@ -3308,7 +3308,7 @@ void SwHTMLParser::BuildTableCell( HTMLTable *pCurTable, bool bReadOptions, else { // <TH> resp. <TD> were already read - if( m_pTable->IsOverflowing() ) + if (m_xTable->IsOverflowing()) { SaveState( HtmlTokenId::NONE ); return; @@ -3316,7 +3316,7 @@ void SwHTMLParser::BuildTableCell( HTMLTable *pCurTable, bool bReadOptions, if( !pCurTable->GetContext() ) { - bool bTopTable = m_pTable==pCurTable; + bool bTopTable = m_xTable.get() == pCurTable; // the table has no content yet, this means the actual table needs // to be created first @@ -3372,7 +3372,7 @@ void SwHTMLParser::BuildTableCell( HTMLTable *pCurTable, bool bReadOptions, bool bParentLFStripped = false; if( bTopTable ) { - SvxAdjust eTableAdjust = m_pTable->GetTableAdjust(false); + SvxAdjust eTableAdjust = m_xTable->GetTableAdjust(false); // If the table is left or right adjusted or should be in a text frame, // it'll get one @@ -3657,7 +3657,7 @@ void SwHTMLParser::BuildTableCell( HTMLTable *pCurTable, bool bReadOptions, } SwNode const*const pNd = & m_pPam->GetPoint()->nNode.GetNode(); - const SwStartNode *pStNd = (m_pTable->m_bFirstCell ? pNd->FindTableNode() + const SwStartNode *pStNd = (m_xTable->m_bFirstCell ? pNd->FindTableNode() : pNd->FindTableBoxStartNode() ); pCurTable->SetTable( pStNd, pTCntxt, nLeftSpace, nRightSpace ); @@ -3670,8 +3670,7 @@ void SwHTMLParser::BuildTableCell( HTMLTable *pCurTable, bool bReadOptions, m_nContextStAttrMin = m_nContextStMin; } - pSaveStruct = new CellSaveStruct( *this, pCurTable, bHead, - bReadOptions ); + xSaveStruct.reset(new CellSaveStruct(*this, pCurTable, bHead, bReadOptions)); // If the first GetNextToken() doesn't succeed (pending input), must re-read from the beginning. SaveState( HtmlTokenId::NONE ); @@ -3687,9 +3686,9 @@ void SwHTMLParser::BuildTableCell( HTMLTable *pCurTable, bool bReadOptions, nToken = FilterToken( nToken ); - OSL_ENSURE( m_pPendStack || !m_bCallNextToken || pSaveStruct->IsInSection(), + OSL_ENSURE( m_pPendStack || !m_bCallNextToken || xSaveStruct->IsInSection(), "Where is the section??" ); - if( !m_pPendStack && m_bCallNextToken && pSaveStruct->IsInSection() ) + if( !m_pPendStack && m_bCallNextToken && xSaveStruct->IsInSection() ) { // Call NextToken directly (e.g. ignore the content of floating frames or applets) NextToken( nToken ); @@ -3721,10 +3720,10 @@ void SwHTMLParser::BuildTableCell( HTMLTable *pCurTable, bool bReadOptions, { // only if we create a new table, but not if we're still // reading in the table after a Pending - pSaveStruct->m_pTable = m_pTable; + xSaveStruct->m_xTable = m_xTable; // HACK: create a section for a table that goes in a text frame - if( !pSaveStruct->IsInSection() ) + if( !xSaveStruct->IsInSection() ) { // The loop needs to be forward, since the // first option always wins @@ -3742,7 +3741,7 @@ void SwHTMLParser::BuildTableCell( HTMLTable *pCurTable, bool bReadOptions, } if( bNeedsSection ) { - pSaveStruct->AddContents( + xSaveStruct->AddContents( InsertTableContents(bHead ) ); } } @@ -3760,79 +3759,79 @@ void SwHTMLParser::BuildTableCell( HTMLTable *pCurTable, bool bReadOptions, : SvxAdjust::End; } - HTMLTable *pSubTable = BuildTable( eTabAdjust, - bHead, - pSaveStruct->IsInSection(), - bHasToFly ); + std::shared_ptr<HTMLTable> xSubTable = BuildTable(eTabAdjust, + bHead, + xSaveStruct->IsInSection(), + bHasToFly); if( SvParserState::Pending != GetStatus() ) { // Only if the table is really complete - if( pSubTable ) + if (xSubTable) { - OSL_ENSURE( pSubTable->GetTableAdjust(false)!= SvxAdjust::Left && - pSubTable->GetTableAdjust(false)!= SvxAdjust::Right, + OSL_ENSURE( xSubTable->GetTableAdjust(false)!= SvxAdjust::Left && + xSubTable->GetTableAdjust(false)!= SvxAdjust::Right, "left or right aligned tables belong in frames" ); - auto& rParentContents = pSubTable->GetParentContents(); + auto& rParentContents = xSubTable->GetParentContents(); if (rParentContents) { - OSL_ENSURE( !pSaveStruct->IsInSection(), + OSL_ENSURE( !xSaveStruct->IsInSection(), "Where is the section" ); // If there's no table coming, we have a section - pSaveStruct->AddContents(rParentContents.release()); + xSaveStruct->AddContents(rParentContents.release()); } const SwStartNode *pCapStNd = - pSubTable->GetCaptionStartNode(); + xSubTable->GetCaptionStartNode(); - if( pSubTable->GetContext() ) + if (xSubTable->GetContext()) { - OSL_ENSURE( !pSubTable->GetContext()->GetFrameFormat(), + OSL_ENSURE( !xSubTable->GetContext()->GetFrameFormat(), "table in frame" ); - if( pCapStNd && pSubTable->IsTopCaption() ) + if( pCapStNd && xSubTable->IsTopCaption() ) { - pSaveStruct->AddContents( + xSaveStruct->AddContents( new HTMLTableCnts(pCapStNd) ); } - pSaveStruct->AddContents( - new HTMLTableCnts(pSubTable) ); + xSaveStruct->AddContents( + new HTMLTableCnts(xSubTable) ); - if( pCapStNd && !pSubTable->IsTopCaption() ) + if( pCapStNd && !xSubTable->IsTopCaption() ) { - pSaveStruct->AddContents( + xSaveStruct->AddContents( new HTMLTableCnts(pCapStNd) ); } // We don't have a section anymore - pSaveStruct->ClearIsInSection(); + xSaveStruct->ClearIsInSection(); } else if( pCapStNd ) { // Since we can't delete this section (it might // belong to the first box), we'll add it - pSaveStruct->AddContents( + xSaveStruct->AddContents( new HTMLTableCnts(pCapStNd) ); // We don't have a section anymore - pSaveStruct->ClearIsInSection(); + xSaveStruct->ClearIsInSection(); } } - m_pTable = pSaveStruct->m_pTable; + m_xTable = xSaveStruct->m_xTable; } } break; case HtmlTokenId::NOBR_ON: // HACK for MS: Is the <NOBR> at the start of the cell? - pSaveStruct->StartNoBreak( *m_pPam->GetPoint() ); + xSaveStruct->StartNoBreak( *m_pPam->GetPoint() ); break; case HtmlTokenId::NOBR_OFF: - pSaveStruct->EndNoBreak( *m_pPam->GetPoint() ); + xSaveStruct->EndNoBreak( *m_pPam->GetPoint() ); break; case HtmlTokenId::COMMENT: @@ -3842,10 +3841,10 @@ void SwHTMLParser::BuildTableCell( HTMLTable *pCurTable, bool bReadOptions, break; case HtmlTokenId::MARQUEE_ON: - if( !pSaveStruct->IsInSection() ) + if( !xSaveStruct->IsInSection() ) { // create a new section, the PaM is gonna be there - pSaveStruct->AddContents( + xSaveStruct->AddContents( InsertTableContents( bHead ) ); } m_bCallNextToken = true; @@ -3854,15 +3853,15 @@ void SwHTMLParser::BuildTableCell( HTMLTable *pCurTable, bool bReadOptions, case HtmlTokenId::TEXTTOKEN: // Don't add a section for an empty string - if( !pSaveStruct->IsInSection() && 1==aToken.getLength() && + if( !xSaveStruct->IsInSection() && 1==aToken.getLength() && ' '==aToken[0] ) break; SAL_FALLTHROUGH; default: - if( !pSaveStruct->IsInSection() ) + if( !xSaveStruct->IsInSection() ) { // add a new section, the PaM's gonna be there - pSaveStruct->AddContents( + xSaveStruct->AddContents( InsertTableContents( bHead ) ); } @@ -3885,7 +3884,7 @@ void SwHTMLParser::BuildTableCell( HTMLTable *pCurTable, bool bReadOptions, { m_pPendStack = new SwPendingStack( bHead ? HtmlTokenId::TABLEHEADER_ON : HtmlTokenId::TABLEDATA_ON, m_pPendStack ); - m_pPendStack->pData = pSaveStruct; + m_pPendStack->pData = xSaveStruct.release(); return; } @@ -3894,14 +3893,14 @@ void SwHTMLParser::BuildTableCell( HTMLTable *pCurTable, bool bReadOptions, // We also create an empty content if the cell ended with a table and had no // COL tags. Otherwise, it was probably exported by us and we don't // want to have an additional paragraph - if( !pSaveStruct->HasFirstContents() || - (!pSaveStruct->IsInSection() && !pCurTable->HasColTags()) ) + if( !xSaveStruct->HasFirstContents() || + (!xSaveStruct->IsInSection() && !pCurTable->HasColTags()) ) { - OSL_ENSURE( pSaveStruct->HasFirstContents() || - !pSaveStruct->IsInSection(), + OSL_ENSURE( xSaveStruct->HasFirstContents() || + !xSaveStruct->IsInSection(), "Section or not, that is the question here" ); const SwStartNode *pStNd = - InsertTableSection( static_cast< sal_uInt16 >(pSaveStruct->IsHeaderCell() + InsertTableSection( static_cast< sal_uInt16 >(xSaveStruct->IsHeaderCell() ? RES_POOLCOLL_TABLE_HDLN : RES_POOLCOLL_TABLE )); const SwEndNode *pEndNd = pStNd->EndOfSectionNode(); @@ -3914,13 +3913,13 @@ void SwHTMLParser::BuildTableCell( HTMLTable *pCurTable, bool bReadOptions, SvxFontHeightItem aFontHeightCTL( 40, 100, RES_CHRATR_CTL_FONTSIZE ); pCNd->SetAttr( aFontHeightCTL ); - pSaveStruct->AddContents( new HTMLTableCnts(pStNd) ); - pSaveStruct->ClearIsInSection(); + xSaveStruct->AddContents( new HTMLTableCnts(pStNd) ); + xSaveStruct->ClearIsInSection(); } - if( pSaveStruct->IsInSection() ) + if( xSaveStruct->IsInSection() ) { - pSaveStruct->CheckNoBreak( *m_pPam->GetPoint() ); + xSaveStruct->CheckNoBreak( *m_pPam->GetPoint() ); // End all open contexts. We'll take AttrMin because nContextStMin might // have been modified. Since it's gonna be restored by EndContext, it's okay @@ -3956,10 +3955,10 @@ void SwHTMLParser::BuildTableCell( HTMLTable *pCurTable, bool bReadOptions, SetAttr( false ); - pSaveStruct->InsertCell( *this, pCurTable ); + xSaveStruct->InsertCell( *this, pCurTable ); // we're probably before a <TH>, <TD>, <TR> or </TABLE> - delete pSaveStruct; + xSaveStruct.reset(); } class RowSaveStruct : public SwPendingStackData @@ -3984,12 +3983,12 @@ void SwHTMLParser::BuildTableRow( HTMLTable *pCurTable, bool bReadOptions, return; HtmlTokenId nToken = HtmlTokenId::NONE; - RowSaveStruct* pSaveStruct; + std::unique_ptr<RowSaveStruct> xSaveStruct; bool bPending = false; if( m_pPendStack ) { - pSaveStruct = static_cast<RowSaveStruct*>(m_pPendStack->pData); + xSaveStruct.reset(static_cast<RowSaveStruct*>(m_pPendStack->pData)); SwPendingStack* pTmp = m_pPendStack->pNext; delete m_pPendStack; @@ -4006,7 +4005,7 @@ void SwHTMLParser::BuildTableRow( HTMLTable *pCurTable, bool bReadOptions, Color aBGColor; OUString aBGImage, aStyle, aId, aClass; bool bBGColor = false; - pSaveStruct = new RowSaveStruct; + xSaveStruct.reset(new RowSaveStruct); if( bReadOptions ) { @@ -4106,13 +4105,13 @@ void SwHTMLParser::BuildTableRow( HTMLTable *pCurTable, bool bReadOptions, BuildTableCell( pCurTable, true, HtmlTokenId::TABLEHEADER_ON==nToken ); if( SvParserState::Pending != GetStatus() ) { - pSaveStruct->bHasCells = true; - bDone = m_pTable->IsOverflowing(); + xSaveStruct->bHasCells = true; + bDone = m_xTable->IsOverflowing(); } break; case HtmlTokenId::CAPTION_ON: BuildTableCaption( pCurTable ); - bDone = m_pTable->IsOverflowing(); + bDone = m_xTable->IsOverflowing(); break; case HtmlTokenId::CAPTION_OFF: case HtmlTokenId::TABLEHEADER_OFF: @@ -4165,12 +4164,12 @@ void SwHTMLParser::BuildTableRow( HTMLTable *pCurTable, bool bReadOptions, if( SvParserState::Pending == GetStatus() ) { m_pPendStack = new SwPendingStack( HtmlTokenId::TABLEROW_ON, m_pPendStack ); - m_pPendStack->pData = pSaveStruct; + m_pPendStack->pData = xSaveStruct.release(); } else { - pCurTable->CloseRow( !pSaveStruct->bHasCells ); - delete pSaveStruct; + pCurTable->CloseRow(!xSaveStruct->bHasCells); + xSaveStruct.reset(); } // we're probably before <TR> or </TABLE> @@ -4186,11 +4185,11 @@ void SwHTMLParser::BuildTableSection( HTMLTable *pCurTable, HtmlTokenId nToken = HtmlTokenId::NONE; bool bPending = false; - RowSaveStruct* pSaveStruct; + std::unique_ptr<RowSaveStruct> xSaveStruct; if( m_pPendStack ) { - pSaveStruct = static_cast<RowSaveStruct*>(m_pPendStack->pData); + xSaveStruct.reset(static_cast<RowSaveStruct*>(m_pPendStack->pData)); SwPendingStack* pTmp = m_pPendStack->pNext; delete m_pPendStack; @@ -4202,7 +4201,7 @@ void SwHTMLParser::BuildTableSection( HTMLTable *pCurTable, } else { - pSaveStruct = new RowSaveStruct; + xSaveStruct.reset(new RowSaveStruct); if( bReadOptions ) { @@ -4216,13 +4215,13 @@ void SwHTMLParser::BuildTableSection( HTMLTable *pCurTable, InsertBookmark( rOption.GetString() ); break; case HtmlOptionId::ALIGN: - pSaveStruct->eAdjust = - rOption.GetEnum( aHTMLPAlignTable, pSaveStruct->eAdjust ); + xSaveStruct->eAdjust = + rOption.GetEnum( aHTMLPAlignTable, xSaveStruct->eAdjust ); break; case HtmlOptionId::VALIGN: - pSaveStruct->eVertOri = + xSaveStruct->eVertOri = rOption.GetEnum( aHTMLTableVAlignTable, - pSaveStruct->eVertOri ); + xSaveStruct->eVertOri ); break; default: break; } @@ -4275,21 +4274,21 @@ void SwHTMLParser::BuildTableSection( HTMLTable *pCurTable, break; case HtmlTokenId::CAPTION_ON: BuildTableCaption( pCurTable ); - bDone = m_pTable->IsOverflowing(); + bDone = m_xTable->IsOverflowing(); break; case HtmlTokenId::CAPTION_OFF: break; case HtmlTokenId::TABLEHEADER_ON: case HtmlTokenId::TABLEDATA_ON: SkipToken(); - BuildTableRow( pCurTable, false, pSaveStruct->eAdjust, - pSaveStruct->eVertOri ); - bDone = m_pTable->IsOverflowing(); + BuildTableRow( pCurTable, false, xSaveStruct->eAdjust, + xSaveStruct->eVertOri ); + bDone = m_xTable->IsOverflowing(); break; case HtmlTokenId::TABLEROW_ON: - BuildTableRow( pCurTable, true, pSaveStruct->eAdjust, - pSaveStruct->eVertOri ); - bDone = m_pTable->IsOverflowing(); + BuildTableRow( pCurTable, true, xSaveStruct->eAdjust, + xSaveStruct->eVertOri ); + bDone = m_xTable->IsOverflowing(); break; case HtmlTokenId::MULTICOL_ON: // we can't add columned text frames here @@ -4326,12 +4325,12 @@ void SwHTMLParser::BuildTableSection( HTMLTable *pCurTable, { m_pPendStack = new SwPendingStack( bHead ? HtmlTokenId::THEAD_ON : HtmlTokenId::TBODY_ON, m_pPendStack ); - m_pPendStack->pData = pSaveStruct; + m_pPendStack->pData = xSaveStruct.release(); } else { pCurTable->CloseSection( bHead ); - delete pSaveStruct; + xSaveStruct.reset(); } // now we stand (perhaps) in front of <TBODY>,... or </TABLE> @@ -4604,7 +4603,7 @@ void SwHTMLParser::BuildTableCaption( HTMLTable *pCurTable ) } else { - if( m_pTable->IsOverflowing() ) + if (m_xTable->IsOverflowing()) { SaveState( HtmlTokenId::NONE ); return; @@ -4631,7 +4630,7 @@ void SwHTMLParser::BuildTableCaption( HTMLTable *pCurTable ) // Add a text section in the icon section as a container for the header // and set the PaM there const SwStartNode *pStNd; - if( m_pTable == pCurTable ) + if (m_xTable.get() == pCurTable) pStNd = InsertTempTableCaptionSection(); else pStNd = InsertTableSection( RES_POOLCOLL_TEXT ); @@ -4669,8 +4668,8 @@ void SwHTMLParser::BuildTableCaption( HTMLTable *pCurTable ) case HtmlTokenId::TABLE_ON: if( !m_pPendStack ) { - pSaveStruct->m_pTable = m_pTable; - bool bHasToFly = pSaveStruct->m_pTable!=pCurTable; + pSaveStruct->m_xTable = m_xTable; + bool bHasToFly = pSaveStruct->m_xTable.get() != pCurTable; BuildTable( pCurTable->GetTableAdjust( true ), false, true, bHasToFly ); } @@ -4680,7 +4679,7 @@ void SwHTMLParser::BuildTableCaption( HTMLTable *pCurTable ) } if( SvParserState::Pending != GetStatus() ) { - m_pTable = pSaveStruct->m_pTable; + m_xTable = pSaveStruct->m_xTable; } break; case HtmlTokenId::TABLE_OFF: @@ -4735,7 +4734,7 @@ void SwHTMLParser::BuildTableCaption( HTMLTable *pCurTable ) bool bLFStripped = StripTrailingLF() > 0; - if( m_pTable==pCurTable ) + if (m_xTable.get() == pCurTable) { // On moving the caption later, the last paragraph isn't moved as well. // That means, there has to be an empty paragraph at the end of the section @@ -4768,10 +4767,10 @@ void SwHTMLParser::BuildTableCaption( HTMLTable *pCurTable ) class TableSaveStruct : public SwPendingStackData { public: - HTMLTable *m_pCurrentTable; + std::shared_ptr<HTMLTable> m_xCurrentTable; - explicit TableSaveStruct( HTMLTable *pCurTable ) : - m_pCurrentTable( pCurTable ) + explicit TableSaveStruct(const std::shared_ptr<HTMLTable>& rCurTable) + : m_xCurrentTable(rCurTable) {} // Initiate creation of the table and put the table in a text frame if @@ -4781,9 +4780,9 @@ public: void TableSaveStruct::MakeTable( sal_uInt16 nWidth, SwPosition& rPos, SwDoc *pDoc ) { - m_pCurrentTable->MakeTable(nullptr, nWidth); + m_xCurrentTable->MakeTable(nullptr, nWidth); - HTMLTableContext *pTCntxt = m_pCurrentTable->GetContext(); + HTMLTableContext *pTCntxt = m_xCurrentTable->GetContext(); OSL_ENSURE( pTCntxt, "Where is the table context" ); SwTableNode *pTableNd = pTCntxt->GetTableNode(); @@ -4945,21 +4944,21 @@ HTMLTableOptions::HTMLTableOptions( const HTMLOptions& rOptions, } } -HTMLTable *SwHTMLParser::BuildTable( SvxAdjust eParentAdjust, - bool bIsParentHead, - bool bHasParentSection, - bool bHasToFly ) +std::shared_ptr<HTMLTable> SwHTMLParser::BuildTable(SvxAdjust eParentAdjust, + bool bIsParentHead, + bool bHasParentSection, + bool bHasToFly) { - if( !IsParserWorking() && !m_pPendStack ) - return nullptr; + if (!IsParserWorking() && !m_pPendStack) + return std::shared_ptr<HTMLTable>(); HtmlTokenId nToken = HtmlTokenId::NONE; bool bPending = false; - TableSaveStruct* pSaveStruct; + std::unique_ptr<TableSaveStruct> xSaveStruct; if( m_pPendStack ) { - pSaveStruct = static_cast<TableSaveStruct*>(m_pPendStack->pData); + xSaveStruct.reset(static_cast<TableSaveStruct*>(m_pPendStack->pData)); SwPendingStack* pTmp = m_pPendStack->pNext; delete m_pPendStack; @@ -4971,22 +4970,22 @@ HTMLTable *SwHTMLParser::BuildTable( SvxAdjust eParentAdjust, } else { - m_pTable = nullptr; + m_xTable.reset(); HTMLTableOptions *pTableOptions = new HTMLTableOptions( GetOptions(), eParentAdjust ); if( !pTableOptions->aId.isEmpty() ) InsertBookmark( pTableOptions->aId ); - HTMLTable *pCurTable = new HTMLTable( this, m_pTable, + std::shared_ptr<HTMLTable> xCurTable(new HTMLTable(this, m_xTable.get(), bIsParentHead, bHasParentSection, bHasToFly, - pTableOptions ); - if( !m_pTable ) - m_pTable = pCurTable; + pTableOptions)); + if (!m_xTable) + m_xTable = xCurTable; - pSaveStruct = new TableSaveStruct( pCurTable ); + xSaveStruct.reset(new TableSaveStruct(xCurTable)); delete pTableOptions; @@ -4994,7 +4993,7 @@ HTMLTable *SwHTMLParser::BuildTable( SvxAdjust eParentAdjust, SaveState( HtmlTokenId::NONE ); } - HTMLTable *pCurTable = pSaveStruct->m_pCurrentTable; + std::shared_ptr<HTMLTable> xCurTable = xSaveStruct->m_xCurrentTable; // </TABLE> is needed according to DTD if( nToken == HtmlTokenId::NONE ) @@ -5008,10 +5007,10 @@ HTMLTable *SwHTMLParser::BuildTable( SvxAdjust eParentAdjust, nToken = FilterToken( nToken ); OSL_ENSURE( m_pPendStack || !m_bCallNextToken || - pCurTable->GetContext() || pCurTable->HasParentSection(), + xCurTable->GetContext() || xCurTable->HasParentSection(), "Where is the section?" ); if( !m_pPendStack && m_bCallNextToken && - (pCurTable->GetContext() || pCurTable->HasParentSection()) ) + (xCurTable->GetContext() || xCurTable->HasParentSection()) ) { /// Call NextToken directly (e.g. ignore the content of floating frames or applets) NextToken( nToken ); @@ -5019,7 +5018,7 @@ HTMLTable *SwHTMLParser::BuildTable( SvxAdjust eParentAdjust, else switch( nToken ) { case HtmlTokenId::TABLE_ON: - if( !pCurTable->GetContext() ) + if( !xCurTable->GetContext() ) { // If there's no table added, read the next table' SkipToken(); @@ -5031,28 +5030,28 @@ HTMLTable *SwHTMLParser::BuildTable( SvxAdjust eParentAdjust, bDone = true; break; case HtmlTokenId::CAPTION_ON: - BuildTableCaption( pCurTable ); - bDone = m_pTable->IsOverflowing(); + BuildTableCaption(xCurTable.get()); + bDone = m_xTable->IsOverflowing(); break; case HtmlTokenId::COL_ON: SkipToken(); - BuildTableColGroup( pCurTable, false ); + BuildTableColGroup(xCurTable.get(), false); break; case HtmlTokenId::COLGROUP_ON: - BuildTableColGroup( pCurTable, true ); + BuildTableColGroup(xCurTable.get(), true); break; case HtmlTokenId::TABLEROW_ON: case HtmlTokenId::TABLEHEADER_ON: case HtmlTokenId::TABLEDATA_ON: SkipToken(); - BuildTableSection( pCurTable, false, false ); - bDone = m_pTable->IsOverflowing(); + BuildTableSection(xCurTable.get(), false, false); + bDone = m_xTable->IsOverflowing(); break; case HtmlTokenId::THEAD_ON: case HtmlTokenId::TFOOT_ON: case HtmlTokenId::TBODY_ON: - BuildTableSection( pCurTable, true, HtmlTokenId::THEAD_ON==nToken ); - bDone = m_pTable->IsOverflowing(); + BuildTableSection(xCurTable.get(), true, HtmlTokenId::THEAD_ON==nToken); + bDone = m_xTable->IsOverflowing(); break; case HtmlTokenId::MULTICOL_ON: // we can't add columned text frames here @@ -5065,13 +5064,13 @@ HTMLTable *SwHTMLParser::BuildTable( SvxAdjust eParentAdjust, break; case HtmlTokenId::TEXTTOKEN: // blank strings may be a series of CR+LF and no text - if( (pCurTable->GetContext() || - !pCurTable->HasParentSection()) && + if( (xCurTable->GetContext() || + !xCurTable->HasParentSection()) && 1==aToken.getLength() && ' '==aToken[0] ) break; SAL_FALLTHROUGH; default: - pCurTable->MakeParentContents(); + xCurTable->MakeParentContents(); NextToken( nToken ); break; } @@ -5089,16 +5088,16 @@ HTMLTable *SwHTMLParser::BuildTable( SvxAdjust eParentAdjust, if( SvParserState::Pending == GetStatus() ) { m_pPendStack = new SwPendingStack( HtmlTokenId::TABLE_ON, m_pPendStack ); - m_pPendStack->pData = pSaveStruct; - return nullptr; + m_pPendStack->pData = xSaveStruct.release(); + return std::shared_ptr<HTMLTable>(); } - HTMLTableContext *pTCntxt = pCurTable->GetContext(); + HTMLTableContext *pTCntxt = xCurTable->GetContext(); if( pTCntxt ) { // Modify table structure - pCurTable->CloseTable(); + xCurTable->CloseTable(); // end contexts that began out of cells. Needs to exist before (!) we move the table, // since the current one doesn't exist anymore afterwards @@ -5112,10 +5111,10 @@ HTMLTable *SwHTMLParser::BuildTable( SvxAdjust eParentAdjust, m_nContextStMin = pTCntxt->GetContextStMin(); m_nContextStAttrMin = pTCntxt->GetContextStAttrMin(); - if( m_pTable==pCurTable ) + if (m_xTable == xCurTable) { // Set table caption - const SwStartNode *pCapStNd = m_pTable->GetCaptionStartNode(); + const SwStartNode *pCapStNd = m_xTable->GetCaptionStartNode(); if( pCapStNd ) { // The last paragraph of the section is never part of the copy. @@ -5127,7 +5126,7 @@ HTMLTable *SwHTMLParser::BuildTable( SvxAdjust eParentAdjust, SwNodeRange aSrcRg( *pCapStNd, 1, *pCapStNd->EndOfSectionNode(), -1 ); - bool bTop = m_pTable->IsTopCaption(); + bool bTop = m_xTable->IsTopCaption(); SwStartNode *pTableStNd = pTCntxt->GetTableNode(); OSL_ENSURE( pTableStNd, "Where is the table node" ); @@ -5159,19 +5158,19 @@ HTMLTable *SwHTMLParser::BuildTable( SvxAdjust eParentAdjust, m_pPam->SetMark(); m_pPam->DeleteMark(); m_xDoc->getIDocumentContentOperations().DeleteSection( const_cast<SwStartNode *>(pCapStNd) ); - m_pTable->SetCaption( nullptr, false ); + m_xTable->SetCaption( nullptr, false ); } // Process SwTable sal_uInt16 nBrowseWidth = (sal_uInt16)GetCurrentBrowseWidth(); - pSaveStruct->MakeTable( nBrowseWidth, *m_pPam->GetPoint(), m_xDoc.get() ); + xSaveStruct->MakeTable(nBrowseWidth, *m_pPam->GetPoint(), m_xDoc.get()); } GetNumInfo().Set( pTCntxt->GetNumInfo() ); pTCntxt->RestorePREListingXMP( *this ); RestoreAttrTab( pTCntxt->aAttrTab ); - if( m_pTable==pCurTable ) + if (m_xTable == xCurTable) { // Set upper paragraph spacing m_bUpperSpace = true; @@ -5181,8 +5180,8 @@ HTMLTable *SwHTMLParser::BuildTable( SvxAdjust eParentAdjust, pTCntxt->GetTableNode()->GetTable().GetTabSortBoxes().size()); // Jump to a table if needed - if( JUMPTO_TABLE == m_eJumpTo && m_pTable->GetSwTable() && - m_pTable->GetSwTable()->GetFrameFormat()->GetName() == m_sJmpMark ) + if( JUMPTO_TABLE == m_eJumpTo && m_xTable->GetSwTable() && + m_xTable->GetSwTable()->GetFrameFormat()->GetName() == m_sJmpMark ) { m_bChkJumpMark = true; m_eJumpTo = JUMPTO_NONE; @@ -5197,32 +5196,31 @@ HTMLTable *SwHTMLParser::BuildTable( SvxAdjust eParentAdjust, Show(); } } - else if( m_pTable==pCurTable ) + else if (m_xTable == xCurTable) { // There was no table read // We maybe need to delete a read caption - const SwStartNode *pCapStNd = pCurTable->GetCaptionStartNode(); + const SwStartNode *pCapStNd = xCurTable->GetCaptionStartNode(); if( pCapStNd ) { m_pPam->SetMark(); m_pPam->DeleteMark(); m_xDoc->getIDocumentContentOperations().DeleteSection( const_cast<SwStartNode *>(pCapStNd) ); - pCurTable->SetCaption( nullptr, false ); + xCurTable->SetCaption( nullptr, false ); } } - if( m_pTable == pCurTable ) + if (m_xTable == xCurTable) { - delete pSaveStruct->m_pCurrentTable; - pSaveStruct->m_pCurrentTable = nullptr; - m_pTable = nullptr; + xSaveStruct->m_xCurrentTable.reset(); + m_xTable.reset(); } - HTMLTable* pRetTable = pSaveStruct->m_pCurrentTable; - delete pSaveStruct; + std::shared_ptr<HTMLTable> xRetTable = xSaveStruct->m_xCurrentTable; + xSaveStruct.reset(); - return pRetTable; + return xRetTable; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/filter/html/swhtml.cxx b/sw/source/filter/html/swhtml.cxx index 1ddf9f741270..062366ea7188 100644 --- a/sw/source/filter/html/swhtml.cxx +++ b/sw/source/filter/html/swhtml.cxx @@ -253,7 +253,6 @@ SwHTMLParser::SwHTMLParser( SwDoc* pD, SwPaM& rCursor, SvStream& rIn, m_xDoc( pD ), m_pActionViewShell( nullptr ), m_pSttNdIdx( nullptr ), - m_pTable(nullptr), m_pFormImpl( nullptr ), m_pMarquee( nullptr ), m_pField( nullptr ), @@ -452,7 +451,7 @@ SwHTMLParser::~SwHTMLParser() DeleteFormImpl(); DeleteFootEndNoteImpl(); - OSL_ENSURE( !m_pTable, "It exists still a open table" ); + OSL_ENSURE(!m_xTable.get(), "It exists still a open table"); delete m_pImageMaps; OSL_ENSURE( !m_pPendStack, @@ -1378,20 +1377,20 @@ void SwHTMLParser::NextToken( HtmlTokenId nToken ) case HtmlTokenId::OBJECT_ON: #if HAVE_FEATURE_JAVA NewObject(); - m_bCallNextToken = m_pAppletImpl!=nullptr && m_pTable!=nullptr; + m_bCallNextToken = m_pAppletImpl!=nullptr && m_xTable; #endif break; case HtmlTokenId::APPLET_ON: #if HAVE_FEATURE_JAVA InsertApplet(); - m_bCallNextToken = m_pAppletImpl!=nullptr && m_pTable!=nullptr; + m_bCallNextToken = m_pAppletImpl!=nullptr && m_xTable; #endif break; case HtmlTokenId::IFRAME_ON: InsertFloatingFrame(); - m_bCallNextToken = m_bInFloatingFrame && m_pTable!=nullptr; + m_bCallNextToken = m_bInFloatingFrame && m_xTable; break; case HtmlTokenId::LINEBREAK: @@ -1432,7 +1431,7 @@ void SwHTMLParser::NextToken( HtmlTokenId nToken ) case HtmlTokenId::LINEFEEDCHAR: if( m_pPam->GetPoint()->nContent.GetIndex() ) AppendTextNode(); - if( !m_pTable && !m_xDoc->IsInHeaderFooter( m_pPam->GetPoint()->nNode ) ) + if (!m_xTable && !m_xDoc->IsInHeaderFooter(m_pPam->GetPoint()->nNode)) { NewAttr( &m_aAttrTab.pBreak, SvxFormatBreakItem(SvxBreak::PageBefore, RES_BREAK) ); EndAttr( m_aAttrTab.pBreak, false ); @@ -1502,7 +1501,7 @@ void SwHTMLParser::NextToken( HtmlTokenId nToken ) case HtmlTokenId::NOEMBED_ON: m_bInNoEmbed = true; - m_bCallNextToken = m_pTable!=nullptr; + m_bCallNextToken = bool(m_xTable); ReadRawData( OOO_STRING_SVTOOLS_HTML_noembed ); break; @@ -1573,7 +1572,7 @@ void SwHTMLParser::NextToken( HtmlTokenId nToken ) case HtmlTokenId::MARQUEE_ON: NewMarquee(); - m_bCallNextToken = m_pMarquee!=nullptr && m_pTable!=nullptr; + m_bCallNextToken = m_pMarquee!=nullptr && m_xTable; break; case HtmlTokenId::FORM_ON: @@ -1670,8 +1669,8 @@ void SwHTMLParser::NextToken( HtmlTokenId nToken ) { if( m_nOpenParaToken != HtmlTokenId::NONE ) EndPara(); - OSL_ENSURE( !m_pTable, "table in table not allowed here" ); - if( !m_pTable && (IsNewDoc() || !m_pPam->GetNode().FindTableNode()) && + OSL_ENSURE(!m_xTable.get(), "table in table not allowed here"); + if( !m_xTable && (IsNewDoc() || !m_pPam->GetNode().FindTableNode()) && (m_pPam->GetPoint()->nNode.GetIndex() > m_xDoc->GetNodes().GetEndOfExtras().GetIndex() || !m_pPam->GetNode().FindFootnoteStartNode() ) ) @@ -1849,7 +1848,7 @@ void SwHTMLParser::NextToken( HtmlTokenId nToken ) case HtmlTokenId::SDFIELD_ON: NewField(); - m_bCallNextToken = m_bInField && m_pTable!=nullptr; + m_bCallNextToken = m_bInField && m_xTable; break; case HtmlTokenId::EMPHASIS_OFF: @@ -1916,12 +1915,12 @@ void SwHTMLParser::NextToken( HtmlTokenId nToken ) case HtmlTokenId::TEXTAREA_ON: NewTextArea(); - m_bCallNextToken = m_bTextArea && m_pTable!=nullptr; + m_bCallNextToken = m_bTextArea && m_xTable; break; case HtmlTokenId::SELECT_ON: NewSelect(); - m_bCallNextToken = m_bSelect && m_pTable!=nullptr; + m_bCallNextToken = m_bSelect && m_xTable; break; case HtmlTokenId::ANCHOR_ON: @@ -2375,7 +2374,7 @@ bool SwHTMLParser::AppendTextNode( SwHTMLAppendMode eMode, bool bUpdateNum ) } } - if( !m_pTable && !--m_nParaCnt ) + if (!m_xTable && !--m_nParaCnt) Show(); return bRet; @@ -3905,7 +3904,7 @@ void SwHTMLParser::NewPara() void SwHTMLParser::EndPara( bool bReal ) { - if( HtmlTokenId::LI_ON==m_nOpenParaToken && m_pTable ) + if (HtmlTokenId::LI_ON==m_nOpenParaToken && m_xTable) { #if OSL_DEBUG_LEVEL > 0 const SwNumRule *pNumRule = m_pPam->GetNode().GetTextNode()->GetNumRule(); @@ -5268,7 +5267,7 @@ void SwHTMLParser::InsertHorzRule() // paragraph indents. That makes little sense in a table. In order to // avoid that the line is considered during the width calculation, it // still gets an appropriate LRSpace-Item. - if( !m_pTable ) + if (!m_xTable) { // fake length and alignment of line above paragraph indents long nBrowseWidth = GetCurrentBrowseWidth(); diff --git a/sw/source/filter/html/swhtml.hxx b/sw/source/filter/html/swhtml.hxx index 98b380dbb13c..8ca919895a04 100644 --- a/sw/source/filter/html/swhtml.hxx +++ b/sw/source/filter/html/swhtml.hxx @@ -401,7 +401,7 @@ class SwHTMLParser : public SfxHTMLParser, public SwClient SwViewShell *m_pActionViewShell; // SwViewShell, where StartAction was called SwNodeIndex *m_pSttNdIdx; - HTMLTable *m_pTable; // current "outermost" table + std::shared_ptr<HTMLTable> m_xTable; // current "outermost" table SwHTMLForm_Impl *m_pFormImpl; // current form SdrObject *m_pMarquee; // current marquee SwField *m_pField; // current field @@ -818,10 +818,10 @@ private: void BuildTableSection( HTMLTable *pTable, bool bReadOptions, bool bHead ); void BuildTableColGroup( HTMLTable *pTable, bool bReadOptions ); void BuildTableCaption( HTMLTable *pTable ); - HTMLTable *BuildTable( SvxAdjust eCellAdjust, - bool bIsParentHead = false, - bool bHasParentSection=true, - bool bHasToFlow = false ); + std::shared_ptr<HTMLTable> BuildTable(SvxAdjust eCellAdjust, + bool bIsParentHead = false, + bool bHasParentSection=true, + bool bHasToFlow = false); // misc ...
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits