starmath/source/parse.cxx | 103 ++++++++------- sw/source/filter/html/htmlgrin.cxx | 6 sw/source/filter/html/htmltab.cxx | 103 ++++++--------- sw/source/ui/index/cnttab.cxx | 8 - xmloff/source/text/XMLIndexIllustrationSourceContext.cxx | 2 xmloff/source/text/XMLIndexTemplateContext.cxx | 14 -- xmloff/source/text/XMLIndexTemplateContext.hxx | 1 7 files changed, 120 insertions(+), 117 deletions(-)
New commits: commit 6ca6d6ac912588a8f62d7e6b668ebec333752ebc Author: Caolán McNamara <caol...@redhat.com> Date: Thu Dec 7 09:35:08 2017 +0000 Related: tdf#71737: allows links in more indexes tables, objects and user-defined Change-Id: I081446832ee86453227f4838552c88fd9e5cf75f Reviewed-on: https://gerrit.libreoffice.org/46326 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/ui/index/cnttab.cxx b/sw/source/ui/index/cnttab.cxx index ac3b7fc411d0..0fbc5b42f22d 100644 --- a/sw/source/ui/index/cnttab.cxx +++ b/sw/source/ui/index/cnttab.cxx @@ -2103,7 +2103,11 @@ void SwTOXEntryTabPage::ActivatePage( const SfxItemSet& /*rSet*/) bool bToxIsAuthorities = TOX_AUTHORITIES == aCurType.eType; bool bToxIsIndex = TOX_INDEX == aCurType.eType; bool bToxIsContent = TOX_CONTENT == aCurType.eType; - bool bToxIsSequence = TOX_ILLUSTRATIONS == aCurType.eType; + bool bToxSupportsLinks = TOX_CONTENT == aCurType.eType || + TOX_ILLUSTRATIONS == aCurType.eType || + TOX_TABLES == aCurType.eType || + TOX_OBJECTS == aCurType.eType || + TOX_USER == aCurType.eType; m_pLevelLB->Clear(); for(sal_uInt16 i = 1; i < m_pCurrentForm->GetFormMax(); i++) @@ -2173,7 +2177,7 @@ void SwTOXEntryTabPage::ActivatePage( const SfxItemSet& /*rSet*/) //show or hide controls m_pEntryNoPB->Show(bToxIsContent); - m_pHyperLinkPB->Show(bToxIsContent || bToxIsSequence); + m_pHyperLinkPB->Show(bToxSupportsLinks); m_pRelToStyleCB->Show(!bToxIsAuthorities); m_pChapterInfoPB->Show(!bToxIsContent && !bToxIsAuthorities); m_pEntryPB->Show(!bToxIsAuthorities); diff --git a/xmloff/source/text/XMLIndexIllustrationSourceContext.cxx b/xmloff/source/text/XMLIndexIllustrationSourceContext.cxx index 4e79914d4856..87fa6219b570 100644 --- a/xmloff/source/text/XMLIndexIllustrationSourceContext.cxx +++ b/xmloff/source/text/XMLIndexIllustrationSourceContext.cxx @@ -63,7 +63,7 @@ SvXMLImportContextRef XMLIndexIllustrationSourceContext::CreateChildContext( aLevelNameTableMap, XML_TOKEN_INVALID, // no outline-level attr aLevelStylePropNameTableMap, - aIllustrationAllowedTokenTypesTable); + aAllowedTokenTypesTable); } else { diff --git a/xmloff/source/text/XMLIndexTemplateContext.cxx b/xmloff/source/text/XMLIndexTemplateContext.cxx index b538860afeeb..17d718fc6cdf 100644 --- a/xmloff/source/text/XMLIndexTemplateContext.cxx +++ b/xmloff/source/text/XMLIndexTemplateContext.cxx @@ -432,7 +432,7 @@ const SvXMLEnumMapEntry<sal_uInt16>* aLevelNameTableMap = nullptr; const sal_Char* aLevelStylePropNameTableMap[] = { nullptr, "ParaStyleLevel1", nullptr }; -const bool aIllustrationAllowedTokenTypesTable[] = +const bool aAllowedTokenTypesTable[] = { true, // XML_TOK_INDEX_TYPE_ENTRY_TEXT = true, // XML_TOK_INDEX_TYPE_TAB_STOP, @@ -444,16 +444,4 @@ const bool aIllustrationAllowedTokenTypesTable[] = false // XML_TOK_INDEX_TYPE_BIBLIOGRAPHY }; -const bool aAllowedTokenTypesTable[] = -{ - true, // XML_TOK_INDEX_TYPE_ENTRY_TEXT = - true, // XML_TOK_INDEX_TYPE_TAB_STOP, - true, // XML_TOK_INDEX_TYPE_TEXT, - true, // XML_TOK_INDEX_TYPE_PAGE_NUMBER, - true, // XML_TOK_INDEX_TYPE_CHAPTER, - false, // XML_TOK_INDEX_TYPE_LINK_START, - false, // XML_TOK_INDEX_TYPE_LINK_END, - false // XML_TOK_INDEX_TYPE_BIBLIOGRAPHY -}; - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/xmloff/source/text/XMLIndexTemplateContext.hxx b/xmloff/source/text/XMLIndexTemplateContext.hxx index b2907ef1efb3..03562ee91541 100644 --- a/xmloff/source/text/XMLIndexTemplateContext.hxx +++ b/xmloff/source/text/XMLIndexTemplateContext.hxx @@ -56,7 +56,6 @@ extern const bool aAllowedTokenTypesBibliography[]; // table, illustration and object tables: extern const SvXMLEnumMapEntry<sal_uInt16>* aLevelNameTableMap; // NULL: no outline-level extern const sal_Char* aLevelStylePropNameTableMap[]; -extern const bool aIllustrationAllowedTokenTypesTable[]; extern const bool aAllowedTokenTypesTable[]; commit 5c3317897b2ddd9f7144917685a4da2242fd1696 Author: Caolán McNamara <caol...@redhat.com> Date: Tue Dec 12 15:24:46 2017 +0000 ofz: fix leaks by exceptions Change-Id: Iad0987e9935ff02c80fea9dd7ebd4fdbe9fe2a9c Reviewed-on: https://gerrit.libreoffice.org/46317 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/starmath/source/parse.cxx b/starmath/source/parse.cxx index 4a9dd64a0bc8..c9a6cfdf9c5d 100644 --- a/starmath/source/parse.cxx +++ b/starmath/source/parse.cxx @@ -1021,28 +1021,39 @@ SmLineNode *SmParser::DoLine() return pSNode.release(); } +namespace +{ + SmNodeArray buildNodeArray(std::vector<std::unique_ptr<SmNode>>& rSubNodes) + { + SmNodeArray aSubArray(rSubNodes.size()); + for (size_t i = 0; i < rSubNodes.size(); ++i) + aSubArray[i] = rSubNodes[i].release(); + return aSubArray; + } +} + SmNode *SmParser::DoExpression(bool bUseExtraSpaces) { DepthProtect aDepthGuard(m_nParseDepth); if (aDepthGuard.TooDeep()) throw std::range_error("parser depth limit"); - SmNodeArray RelationArray; - RelationArray.push_back(DoRelation()); + std::vector<std::unique_ptr<SmNode>> RelationArray; + RelationArray.emplace_back(std::unique_ptr<SmNode>(DoRelation())); while (m_aCurToken.nLevel >= 4) - RelationArray.push_back(DoRelation()); + RelationArray.emplace_back(std::unique_ptr<SmNode>(DoRelation())); if (RelationArray.size() > 1) { std::unique_ptr<SmExpressionNode> pSNode(new SmExpressionNode(m_aCurToken)); - pSNode->SetSubNodes(RelationArray); + pSNode->SetSubNodes(buildNodeArray(RelationArray)); pSNode->SetUseExtraSpaces(bUseExtraSpaces); return pSNode.release(); } else { // This expression has only one node so just push this node. - return RelationArray[0]; + return RelationArray[0].release(); } } @@ -1070,16 +1081,16 @@ SmNode *SmParser::DoSum() if (aDepthGuard.TooDeep()) throw std::range_error("parser depth limit"); - SmNode *pFirst = DoProduct(); + std::unique_ptr<SmNode> xFirst(DoProduct()); while (TokenInGroup(TG::Sum)) { - std::unique_ptr<SmStructureNode> pSNode(new SmBinHorNode(m_aCurToken)); - SmNode *pSecond = DoOpSubSup(); - SmNode *pThird = DoProduct(); - pSNode->SetSubNodes(pFirst, pSecond, pThird); - pFirst = pSNode.release(); + std::unique_ptr<SmStructureNode> xSNode(new SmBinHorNode(m_aCurToken)); + std::unique_ptr<SmNode> xSecond(DoOpSubSup()); + std::unique_ptr<SmNode> xThird(DoProduct()); + xSNode->SetSubNodes(xFirst.release(), xSecond.release(), xThird.release()); + xFirst = std::move(xSNode); } - return pFirst; + return xFirst.release(); } SmNode *SmParser::DoProduct() @@ -1088,37 +1099,38 @@ SmNode *SmParser::DoProduct() if (aDepthGuard.TooDeep()) throw std::range_error("parser depth limit"); - SmNode *pFirst = DoPower(); + std::unique_ptr<SmNode> xFirst(DoPower()); while (TokenInGroup(TG::Product)) - { SmStructureNode *pSNode; - SmNode *pOper; + { + std::unique_ptr<SmStructureNode> xSNode; + std::unique_ptr<SmNode> xOper; bool bSwitchArgs = false; SmTokenType eType = m_aCurToken.eType; switch (eType) { case TOVER: - pSNode = new SmBinVerNode(m_aCurToken); - pOper = new SmRectangleNode(m_aCurToken); + xSNode.reset(new SmBinVerNode(m_aCurToken)); + xOper.reset(new SmRectangleNode(m_aCurToken)); NextToken(); break; case TBOPER: - pSNode = new SmBinHorNode(m_aCurToken); + xSNode.reset(new SmBinHorNode(m_aCurToken)); NextToken(); //Let the glyph node know it's a binary operation m_aCurToken.eType = TBOPER; m_aCurToken.nGroup = TG::Product; - pOper = DoGlyphSpecial(); + xOper.reset(DoGlyphSpecial()); break; case TOVERBRACE : case TUNDERBRACE : - pSNode = new SmVerticalBraceNode(m_aCurToken); - pOper = new SmMathSymbolNode(m_aCurToken); + xSNode.reset(new SmVerticalBraceNode(m_aCurToken)); + xOper.reset(new SmMathSymbolNode(m_aCurToken)); NextToken(); break; @@ -1128,9 +1140,9 @@ SmNode *SmParser::DoProduct() { SmBinDiagonalNode *pSTmp = new SmBinDiagonalNode(m_aCurToken); pSTmp->SetAscending(eType == TWIDESLASH); - pSNode = pSTmp; + xSNode.reset(pSTmp); - pOper = new SmPolyLineNode(m_aCurToken); + xOper.reset(new SmPolyLineNode(m_aCurToken)); NextToken(); bSwitchArgs = true; @@ -1138,29 +1150,30 @@ SmNode *SmParser::DoProduct() } default: - pSNode = new SmBinHorNode(m_aCurToken); + xSNode.reset(new SmBinHorNode(m_aCurToken)); - pOper = DoOpSubSup(); + xOper.reset(DoOpSubSup()); } - SmNode *pArg = DoPower(); + std::unique_ptr<SmNode> xArg(DoPower()); if (bSwitchArgs) { //! vgl siehe SmBinDiagonalNode::Arrange - pSNode->SetSubNodes(pFirst, pArg, pOper); + xSNode->SetSubNodes(xFirst.release(), xArg.release(), xOper.release()); } else { - pSNode->SetSubNodes(pFirst, pOper, pArg); + xSNode->SetSubNodes(xFirst.release(), xOper.release(), xArg.release()); } - pFirst = pSNode; + xFirst = std::move(xSNode); } - return pFirst; + return xFirst.release(); } SmNode *SmParser::DoSubSup(TG nActiveGroup, SmNode *pGivenNode) { + std::unique_ptr<SmNode> xGivenNode(pGivenNode); DepthProtect aDepthGuard(m_nParseDepth); if (aDepthGuard.TooDeep()) throw std::range_error("parser depth limit"); @@ -1177,13 +1190,14 @@ SmNode *SmParser::DoSubSup(TG nActiveGroup, SmNode *pGivenNode) pNode->SetUseLimits(nActiveGroup == TG::Limit); // initialize subnodes array - SmNodeArray aSubNodes(1 + SUBSUP_NUM_ENTRIES, nullptr); - aSubNodes[0] = pGivenNode; + std::vector<std::unique_ptr<SmNode>> aSubNodes(1 + SUBSUP_NUM_ENTRIES); + aSubNodes[0] = std::move(xGivenNode); // process all sub-/supscripts int nIndex = 0; while (TokenInGroup(nActiveGroup)) - { SmTokenType eType (m_aCurToken.eType); + { + SmTokenType eType (m_aCurToken.eType); switch (eType) { @@ -1205,7 +1219,7 @@ SmNode *SmParser::DoSubSup(TG nActiveGroup, SmNode *pGivenNode) if (aSubNodes[nIndex]) // if already occupied at earlier iteration { // forget the earlier one, remember an error instead - delete aSubNodes[nIndex]; + aSubNodes[nIndex].reset(); pENode.reset(DoError(SmParseError::DoubleSubsupscript)); // this also skips current token. } else @@ -1226,10 +1240,10 @@ SmNode *SmParser::DoSubSup(TG nActiveGroup, SmNode *pGivenNode) else pSNode.reset(DoTerm(true)); - aSubNodes[nIndex] = pENode ? pENode.release() : pSNode.release(); + aSubNodes[nIndex] = std::move(pENode ? pENode : pSNode); } - pNode->SetSubNodes(aSubNodes); + pNode->SetSubNodes(buildNodeArray(aSubNodes)); return pNode.release(); } @@ -2019,7 +2033,8 @@ SmBracebodyNode *SmParser::DoBracebody(bool bIsLeftRight) throw std::range_error("parser depth limit"); auto pBody = o3tl::make_unique<SmBracebodyNode>(m_aCurToken); - SmNodeArray aNodes; + + std::vector<std::unique_ptr<SmNode>> aNodes; // get body if any if (bIsLeftRight) { @@ -2027,14 +2042,14 @@ SmBracebodyNode *SmParser::DoBracebody(bool bIsLeftRight) { if (m_aCurToken.eType == TMLINE) { - aNodes.push_back(new SmMathSymbolNode(m_aCurToken)); + aNodes.emplace_back(o3tl::make_unique<SmMathSymbolNode>(m_aCurToken)); NextToken(); } else if (m_aCurToken.eType != TRIGHT) { - aNodes.push_back(DoAlign()); + aNodes.emplace_back(std::unique_ptr<SmNode>(DoAlign())); if (m_aCurToken.eType != TMLINE && m_aCurToken.eType != TRIGHT) - aNodes.push_back(DoError(SmParseError::RightExpected)); + aNodes.emplace_back(std::unique_ptr<SmNode>(DoError(SmParseError::RightExpected))); } } while (m_aCurToken.eType != TEND && m_aCurToken.eType != TRIGHT); } @@ -2044,19 +2059,19 @@ SmBracebodyNode *SmParser::DoBracebody(bool bIsLeftRight) { if (m_aCurToken.eType == TMLINE) { - aNodes.push_back(new SmMathSymbolNode(m_aCurToken)); + aNodes.emplace_back(o3tl::make_unique<SmMathSymbolNode>(m_aCurToken)); NextToken(); } else if (!TokenInGroup(TG::RBrace)) { - aNodes.push_back(DoAlign()); + aNodes.emplace_back(std::unique_ptr<SmNode>(DoAlign())); if (m_aCurToken.eType != TMLINE && !TokenInGroup(TG::RBrace)) - aNodes.push_back(DoError(SmParseError::RbraceExpected)); + aNodes.emplace_back(std::unique_ptr<SmNode>(DoError(SmParseError::RbraceExpected))); } } while (m_aCurToken.eType != TEND && !TokenInGroup(TG::RBrace)); } - pBody->SetSubNodes(aNodes); + pBody->SetSubNodes(buildNodeArray(aNodes)); pBody->SetScaleMode(bIsLeftRight ? SmScaleMode::Height : SmScaleMode::None); return pBody.release(); } commit a1d685988d99fa24e9625b751f50c327c4803005 Author: Caolán McNamara <caol...@redhat.com> Date: Tue Dec 12 15:47:25 2017 +0000 ofz: throw early Change-Id: I6d3ce03d5cb43df30f6f693c73ccf22c45a8b839 Reviewed-on: https://gerrit.libreoffice.org/46323 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/htmlgrin.cxx b/sw/source/filter/html/htmlgrin.cxx index 5a5924b0cfd4..620bcf6d101d 100644 --- a/sw/source/filter/html/htmlgrin.cxx +++ b/sw/source/filter/html/htmlgrin.cxx @@ -259,6 +259,12 @@ void SwHTMLParser::SetAnchorAndAdjustment( sal_Int16 eVertOri, if( bMoveBackward ) m_pPam->Move( fnMoveBackward ); + if (aAnchor.GetAnchorId() == RndStdIds::FLY_AS_CHAR && !m_pPam->GetNode().GetTextNode()) + { + eState = SvParserState::Error; + throw std::runtime_error("missing paragraph"); + } + aAnchor.SetAnchor( m_pPam->GetPoint() ); if( bMoveBackward ) diff --git a/sw/source/filter/html/htmltab.cxx b/sw/source/filter/html/htmltab.cxx index 0551c886c022..80d0d883d8e8 100644 --- a/sw/source/filter/html/htmltab.cxx +++ b/sw/source/filter/html/htmltab.cxx @@ -2729,7 +2729,10 @@ const SwStartNode *SwHTMLParser::InsertTableSection( sal_uInt16 nPoolId ) } if (!pStNd) + { + eState = SvParserState::Error; throw std::runtime_error("missing table start node"); + } return pStNd; } commit b4eac2d4d9fcfd1e08e5e51ba540d154faa6d083 Author: Caolán McNamara <caol...@redhat.com> Date: Tue Dec 12 11:40:13 2017 +0000 ofz: fix brush leak Change-Id: Iaab1d09be69fd3a47975ca360b78ca23954056af Reviewed-on: https://gerrit.libreoffice.org/46290 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/htmltab.cxx b/sw/source/filter/html/htmltab.cxx index 5680ca23b932..0551c886c022 100644 --- a/sw/source/filter/html/htmltab.cxx +++ b/sw/source/filter/html/htmltab.cxx @@ -267,7 +267,7 @@ typedef std::vector<std::unique_ptr<HTMLTableCell>> HTMLTableCells; class HTMLTableRow { - HTMLTableCells *m_pCells; ///< cells of the row + std::unique_ptr<HTMLTableCells> m_xCells; ///< cells of the row bool bIsEndOfGroup : 1; @@ -276,7 +276,7 @@ class HTMLTableRow SvxAdjust eAdjust; sal_Int16 eVertOri; - SvxBrushItem *pBGBrush; // background of cell from STYLE + std::unique_ptr<SvxBrushItem> xBGBrush; // background of cell from STYLE public: @@ -284,8 +284,6 @@ public: explicit HTMLTableRow( sal_uInt16 nCells ); // cells of the row are empty - ~HTMLTableRow(); - inline void SetHeight( sal_uInt16 nHeight ); sal_uInt16 GetHeight() const { return nHeight; } @@ -297,8 +295,8 @@ public: void SetVertOri( sal_Int16 eV) { eVertOri = eV; } sal_Int16 GetVertOri() const { return eVertOri; } - void SetBGBrush( SvxBrushItem *pBrush ) { pBGBrush = pBrush; } - const SvxBrushItem *GetBGBrush() const { return pBGBrush; } + void SetBGBrush(std::unique_ptr<SvxBrushItem>& rBrush ) { xBGBrush = std::move(rBrush); } + const std::unique_ptr<SvxBrushItem>& GetBGBrush() const { return xBGBrush; } void SetEndOfGroup() { bIsEndOfGroup = true; } bool IsEndOfGroup() const { return bIsEndOfGroup; } @@ -397,8 +395,8 @@ class HTMLTable SwTableBoxFormat *m_pBoxFormat; // frame::Frame-Format from SwTableBox SwTableLineFormat *m_pLineFormat; // frame::Frame-Format from SwTableLine SwTableLineFormat *m_pLineFrameFormatNoHeight; - SvxBrushItem *m_pBackgroundBrush; // background of the table - SvxBrushItem *m_pInheritedBackgroundBrush; // "inherited" background of the table + std::unique_ptr<SvxBrushItem> m_xBackgroundBrush; // background of the table + std::unique_ptr<SvxBrushItem> m_xInheritedBackgroundBrush; // "inherited" background of the table const SwStartNode *m_pCaptionStartNode; // Start-Node of the table-caption //lines for the border SvxBorderLine m_aTopBorderLine; @@ -503,8 +501,8 @@ class HTMLTable // is the border already set? bool BordersSet() const { return m_bBordersSet; } - const SvxBrushItem *GetBGBrush() const { return m_pBackgroundBrush; } - const SvxBrushItem *GetInhBGBrush() const { return m_pInheritedBackgroundBrush; } + const std::unique_ptr<SvxBrushItem>& GetBGBrush() const { return m_xBackgroundBrush; } + const std::unique_ptr<SvxBrushItem>& GetInhBGBrush() const { return m_xInheritedBackgroundBrush; } sal_uInt16 GetBorderWidth( const SvxBorderLine& rBLine, bool bWithDistance=false ) const; @@ -549,8 +547,7 @@ public: bool bHasValue, double nValue, bool bNoWrap ); // announce the start/end of a new row - void OpenRow( SvxAdjust eAdjust, sal_Int16 eVertOri, - SvxBrushItem *pBGBrush ); + void OpenRow(SvxAdjust eAdjust, sal_Int16 eVertOri, std::unique_ptr<SvxBrushItem>& rBGBrush); void CloseRow( bool bEmpty ); // announce the end of a new section @@ -602,7 +599,7 @@ public: const SwTable *GetSwTable() const { return m_pSwTable; } - void SetBGBrush( const SvxBrushItem& rBrush ) { delete m_pBackgroundBrush; m_pBackgroundBrush = new SvxBrushItem( rBrush ); } + void SetBGBrush(const SvxBrushItem& rBrush) { m_xBackgroundBrush.reset(new SvxBrushItem(rBrush)); } const OUString& GetId() const { return m_aId; } const OUString& GetClass() const { return m_aClass; } @@ -753,30 +750,23 @@ std::unique_ptr<SwHTMLTableLayoutCell> HTMLTableCell::CreateLayoutInfo() } HTMLTableRow::HTMLTableRow(sal_uInt16 const nCells) - : m_pCells(new HTMLTableCells), + : m_xCells(new HTMLTableCells), bIsEndOfGroup(false), nHeight(0), nEmptyRows(0), eAdjust(SvxAdjust::End), eVertOri(text::VertOrientation::TOP), - pBGBrush(nullptr), bBottomBorder(false) { for( sal_uInt16 i=0; i<nCells; i++ ) { - m_pCells->push_back(o3tl::make_unique<HTMLTableCell>()); + m_xCells->push_back(o3tl::make_unique<HTMLTableCell>()); } - OSL_ENSURE(nCells == m_pCells->size(), + OSL_ENSURE(nCells == m_xCells->size(), "wrong Cell count in new HTML table row"); } -HTMLTableRow::~HTMLTableRow() -{ - delete m_pCells; - delete pBGBrush; -} - inline void HTMLTableRow::SetHeight( sal_uInt16 nHght ) { if( nHght > nHeight ) @@ -785,9 +775,9 @@ inline void HTMLTableRow::SetHeight( sal_uInt16 nHght ) inline HTMLTableCell *HTMLTableRow::GetCell( sal_uInt16 nCell ) const { - OSL_ENSURE( nCell < m_pCells->size(), + OSL_ENSURE( nCell < m_xCells->size(), "invalid cell index in HTML table row" ); - return (*m_pCells)[nCell].get(); + return (*m_xCells)[nCell].get(); } void HTMLTableRow::Expand( sal_uInt16 nCells, bool bOneCell ) @@ -795,34 +785,34 @@ void HTMLTableRow::Expand( sal_uInt16 nCells, bool bOneCell ) // This row will be filled with a single cell if bOneCell is set. // This will only work for rows that don't allow adding cells! - sal_uInt16 nColSpan = nCells - m_pCells->size(); - for (sal_uInt16 i = m_pCells->size(); i < nCells; ++i) + sal_uInt16 nColSpan = nCells - m_xCells->size(); + for (sal_uInt16 i = m_xCells->size(); i < nCells; ++i) { std::unique_ptr<HTMLTableCell> pCell(new HTMLTableCell); if( bOneCell ) pCell->SetColSpan( nColSpan ); - m_pCells->push_back(std::move(pCell)); + m_xCells->push_back(std::move(pCell)); nColSpan--; } - OSL_ENSURE(nCells == m_pCells->size(), + OSL_ENSURE(nCells == m_xCells->size(), "wrong Cell count in expanded HTML table row"); } void HTMLTableRow::Shrink( sal_uInt16 nCells ) { - OSL_ENSURE(nCells < m_pCells->size(), "number of cells too large"); + OSL_ENSURE(nCells < m_xCells->size(), "number of cells too large"); #if OSL_DEBUG_LEVEL > 0 - sal_uInt16 const nEnd = m_pCells->size(); + sal_uInt16 const nEnd = m_xCells->size(); #endif // The colspan of empty cells at the end has to be fixed to the new // number of cells. sal_uInt16 i=nCells; while( i ) { - HTMLTableCell *pCell = (*m_pCells)[--i].get(); + HTMLTableCell *pCell = (*m_xCells)[--i].get(); if( !pCell->GetContents() ) { #if OSL_DEBUG_LEVEL > 0 @@ -837,7 +827,7 @@ void HTMLTableRow::Shrink( sal_uInt16 nCells ) #if OSL_DEBUG_LEVEL > 0 for( i=nCells; i<nEnd; i++ ) { - HTMLTableCell *pCell = (*m_pCells)[i].get(); + HTMLTableCell *pCell = (*m_xCells)[i].get(); OSL_ENSURE( pCell->GetRowSpan() == 1, "RowSpan of to be deleted cell is wrong" ); OSL_ENSURE( pCell->GetColSpan() == nEnd - i, @@ -846,7 +836,7 @@ void HTMLTableRow::Shrink( sal_uInt16 nCells ) } #endif - m_pCells->erase( m_pCells->begin() + nCells, m_pCells->end() ); + m_xCells->erase(m_xCells->begin() + nCells, m_xCells->end()); } HTMLTableColumn::HTMLTableColumn(): @@ -916,7 +906,7 @@ void HTMLTable::InitCtor( const HTMLTableOptions *pOptions ) m_xBox1.reset(); m_pBoxFormat = nullptr; m_pLineFormat = nullptr; m_pLineFrameFormatNoHeight = nullptr; - m_pInheritedBackgroundBrush = nullptr; + m_xInheritedBackgroundBrush.reset(); m_pPrevStartNode = nullptr; m_pSwTable = nullptr; @@ -1007,9 +997,9 @@ void HTMLTable::InitCtor( const HTMLTableOptions *pOptions ) m_bColSpec = false; - m_pBackgroundBrush = m_pParser->CreateBrushItem( + m_xBackgroundBrush.reset(m_pParser->CreateBrushItem( pOptions->bBGColor ? &(pOptions->aBGColor) : nullptr, - pOptions->aBGImage, aEmptyOUStr, aEmptyOUStr, aEmptyOUStr ); + pOptions->aBGImage, aEmptyOUStr, aEmptyOUStr, aEmptyOUStr)); m_pContext = nullptr; m_xParentContents.reset(); @@ -1061,8 +1051,6 @@ HTMLTable::~HTMLTable() delete m_pRows; delete m_pColumns; - delete m_pBackgroundBrush; - delete m_pInheritedBackgroundBrush; delete m_pContext; @@ -1278,12 +1266,12 @@ void HTMLTable::FixFrameFormat( SwTableBox *pBox, // since the line is gonna be GC-ed (correctly). if( nRowSpan > 1 || (this != m_pTopTable && nRowSpan==m_nRows) ) { - pBGBrushItem = (*m_pRows)[nRow]->GetBGBrush(); + pBGBrushItem = (*m_pRows)[nRow]->GetBGBrush().get(); if( !pBGBrushItem && this != m_pTopTable ) { - pBGBrushItem = GetBGBrush(); + pBGBrushItem = GetBGBrush().get(); if( !pBGBrushItem ) - pBGBrushItem = GetInhBGBrush(); + pBGBrushItem = GetInhBGBrush().get(); } } } @@ -1551,15 +1539,15 @@ SwTableLine *HTMLTable::MakeTableLine( SwTableBox *pUpper, { // It doesn't make sense to set a color on a line, // if it's the outermost and simultaneously sole line of a table in a table - pBGBrushItem = pTopRow->GetBGBrush(); + pBGBrushItem = pTopRow->GetBGBrush().get(); if( !pBGBrushItem && this != m_pTopTable ) { // A background that's set on a table in a table is set on the rows. // It's the same for the background of the cell where that table is - pBGBrushItem = GetBGBrush(); + pBGBrushItem = GetBGBrush().get(); if( !pBGBrushItem ) - pBGBrushItem = GetInhBGBrush(); + pBGBrushItem = GetInhBGBrush().get(); } } if( nTopRow==nBottomRow-1 && (nRowHeight || pBGBrushItem) ) @@ -1799,14 +1787,14 @@ void HTMLTable::InheritBorders( const HTMLTable *pParent, { // the whole surrounding table is a table in a table and consists only of a single line // that's gonna be GC-ed (correctly). That's why the background of that line is copied. - pInhBG = (*pParent->m_pRows)[nRow]->GetBGBrush(); + pInhBG = (*pParent->m_pRows)[nRow]->GetBGBrush().get(); if( !pInhBG ) - pInhBG = pParent->GetBGBrush(); + pInhBG = pParent->GetBGBrush().get(); if( !pInhBG ) - pInhBG = pParent->GetInhBGBrush(); + pInhBG = pParent->GetInhBGBrush().get(); } if( pInhBG ) - m_pInheritedBackgroundBrush = new SvxBrushItem( *pInhBG ); + m_xInheritedBackgroundBrush.reset(new SvxBrushItem(*pInhBG)); } void HTMLTable::InheritVertBorders( const HTMLTable *pParent, @@ -2077,8 +2065,8 @@ inline void HTMLTable::CloseSection( bool bHead ) m_nHeadlineRepeat = m_nCurrentRow; } -void HTMLTable::OpenRow( SvxAdjust eAdjust, sal_Int16 eVertOrient, - SvxBrushItem *pBGBrushItem ) +void HTMLTable::OpenRow(SvxAdjust eAdjust, sal_Int16 eVertOrient, + std::unique_ptr<SvxBrushItem>& rBGBrushItem) { sal_uInt16 nRowsReq = m_nCurrentRow+1; @@ -2095,8 +2083,8 @@ void HTMLTable::OpenRow( SvxAdjust eAdjust, sal_Int16 eVertOrient, HTMLTableRow *const pCurRow = (*m_pRows)[m_nCurrentRow].get(); pCurRow->SetAdjust( eAdjust ); pCurRow->SetVertOri( eVertOrient ); - if( pBGBrushItem ) - (*m_pRows)[m_nCurrentRow]->SetBGBrush( pBGBrushItem ); + if (rBGBrushItem) + (*m_pRows)[m_nCurrentRow]->SetBGBrush(rBGBrushItem); // reset the column counter m_nCurrentColumn=0; @@ -4053,10 +4041,10 @@ void SwHTMLParser::BuildTableRow( HTMLTable *pCurTable, bool bReadOptions, if( !aId.isEmpty() ) InsertBookmark( aId ); - SvxBrushItem *pBrushItem = + std::unique_ptr<SvxBrushItem> xBrushItem( CreateBrushItem( bBGColor ? &aBGColor : nullptr, aBGImage, aStyle, - aId, aClass ); - pCurTable->OpenRow( eAdjust, eVertOri, pBrushItem ); + aId, aClass )); + pCurTable->OpenRow(eAdjust, eVertOri, xBrushItem); // If the first GetNextToken() doesn't succeed (pending input), must re-read from the beginning. SaveState( HtmlTokenId::NONE ); }
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits