dev/null |binary sw/qa/extras/ooxmlexport/ooxmlexport15.cxx | 7 ------- sw/source/filter/ww8/docxattributeoutput.cxx | 27 ++++++--------------------- sw/source/filter/ww8/docxattributeoutput.hxx | 2 +- 4 files changed, 7 insertions(+), 29 deletions(-)
New commits: commit b850105570d0e99644ff1ad5d6d0f09734db7952 Author: Justin Luth <justin_l...@sil.org> AuthorDate: Tue Mar 23 07:51:19 2021 +0200 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Tue Mar 23 16:07:04 2021 +0100 Revert "tdf#136929 docx export: keep frame with paragraph" This reverts 7.1 backport 7d90b50285f294a3c9cce0b22399fefe3ab46ee5. because tdf#141173 gives a disasterous example that fails. Change-Id: Ib3700c582c67973f7b0fac0edda6ae4033acc218 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112986 Tested-by: Jenkins Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/sw/qa/extras/ooxmlexport/data/tdf136929_framesOfParagraph.odt b/sw/qa/extras/ooxmlexport/data/tdf136929_framesOfParagraph.odt deleted file mode 100644 index 918b24f670db..000000000000 Binary files a/sw/qa/extras/ooxmlexport/data/tdf136929_framesOfParagraph.odt and /dev/null differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx index 4c8f05e945d4..3d61784547cc 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx @@ -465,13 +465,6 @@ DECLARE_OOXMLEXPORT_TEST(testTdf135216_evenOddFooter, "tdf135216_evenOddFooter.o getParagraph(2, "2"); } -DECLARE_OOXMLEXPORT_TEST(testTdf136929_framesOfParagraph, "tdf136929_framesOfParagraph.odt") -{ - // Before this fix, the image was placed in the footer instead of in the text body - messing everything up. - CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Pages", 5, getPages() ); - CPPUNIT_ASSERT_EQUAL_MESSAGE("Header2 text", OUString("* | *"), parseDump("/root/page[4]/footer/txt")); -} - DECLARE_OOXMLEXPORT_TEST(testTdf136589_paraHadField, "tdf136589_paraHadField.docx") { // The section break should not add an additional CR - which equals an empty page two. diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index ffdc0c04f147..ebca5798144e 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -383,12 +383,6 @@ static void checkAndWriteFloatingTables(DocxAttributeOutput& rDocxAttributeOutpu void DocxAttributeOutput::StartParagraph( ww8::WW8TableNodeInfo::Pointer_t pTextNodeInfo ) { - // Paragraphs (in headers/footers/comments/frames etc) can start before another finishes. - // So a stack is needed to keep track of each paragraph's status separately. - // Complication: Word can't handle nested text boxes, so those need to be collected together. - if ( !m_aFramesOfParagraph.size() || !m_nTextFrameLevel ) - m_aFramesOfParagraph.push(std::vector<ww8::Frame>()); - // look ahead for floating tables that were put into a frame during import // floating tables in shapes are not supported: exclude this case if (!pTextNodeInfo && !m_rExport.SdrExporter().IsDMLAndVMLDrawingOpen()) @@ -653,13 +647,10 @@ void DocxAttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pT assert(!m_pPostponedCustomShape); m_pPostponedCustomShape.reset(new std::vector<PostponedDrawing>); - - // The for loop can change the size of m_aFramesOfParagraph, so the max size cannot be set in stone before the loop. - size_t nFrames = m_aFramesOfParagraph.size() ? m_aFramesOfParagraph.top().size() : 0; - for (size_t nIndex = 0; nIndex < nFrames; ++nIndex) + for (size_t nIndex = 0; nIndex < m_aFramesOfParagraph.size(); ++nIndex) { m_bParagraphFrameOpen = true; - ww8::Frame aFrame = m_aFramesOfParagraph.top()[nIndex]; + ww8::Frame aFrame = m_aFramesOfParagraph[nIndex]; const SwFrameFormat& rFrameFormat = aFrame.GetFrameFormat(); if (!TextBoxIsFramePr(rFrameFormat) || m_bWritingHeaderFooter) @@ -723,8 +714,6 @@ void DocxAttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pT std::shared_ptr<ww8::Frame> pFramePr = std::make_shared<ww8::Frame>(aFrame); aFramePrTextbox.push_back(pFramePr); } - - nFrames = m_aFramesOfParagraph.size() ? m_aFramesOfParagraph.top().size() : 0; } if (!m_pPostponedCustomShape->empty()) { @@ -734,8 +723,7 @@ void DocxAttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pT } m_pPostponedCustomShape.reset(); - if ( m_aFramesOfParagraph.size() ) - m_aFramesOfParagraph.top().clear(); + m_aFramesOfParagraph.clear(); if (!pTextNodeInfoInner) { @@ -745,8 +733,6 @@ void DocxAttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pT } --m_nTextFrameLevel; - if ( m_aFramesOfParagraph.size() && !m_nTextFrameLevel ) - m_aFramesOfParagraph.pop(); /* If m_nHyperLinkCount > 0 that means hyperlink tag is not yet closed. * This is due to nested hyperlink tags. So close it before end of paragraph. @@ -6066,10 +6052,10 @@ void DocxAttributeOutput::OutputFlyFrame_Impl( const ww8::Frame &rFrame, const P // The frame output is postponed to the end of the anchor paragraph bool bDuplicate = false; const OUString& rName = rFrame.GetFrameFormat().GetName(); - unsigned nSize = m_aFramesOfParagraph.size() ? m_aFramesOfParagraph.top().size() : 0; + unsigned nSize = m_aFramesOfParagraph.size(); for( unsigned nIndex = 0; nIndex < nSize; ++nIndex ) { - const OUString& rNameExisting = m_aFramesOfParagraph.top()[nIndex].GetFrameFormat().GetName(); + const OUString& rNameExisting = m_aFramesOfParagraph[nIndex].GetFrameFormat().GetName(); if (!rName.isEmpty() && !rNameExisting.isEmpty()) { @@ -6081,8 +6067,7 @@ void DocxAttributeOutput::OutputFlyFrame_Impl( const ww8::Frame &rFrame, const P if( !bDuplicate ) { m_bPostponedProcessingFly = true ; - if ( m_aFramesOfParagraph.size() ) - m_aFramesOfParagraph.top().emplace_back(rFrame); + m_aFramesOfParagraph.emplace_back(rFrame); } } break; diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx index 7dcee3406f96..de32f003a5df 100644 --- a/sw/source/filter/ww8/docxattributeoutput.hxx +++ b/sw/source/filter/ww8/docxattributeoutput.hxx @@ -855,7 +855,7 @@ private: // This paragraph must end with page break bool m_bPageBreakAfter = false; - std::stack< std::vector<ww8::Frame> > m_aFramesOfParagraph; + std::vector<ww8::Frame> m_aFramesOfParagraph; o3tl::sorted_vector<const SwFrameFormat*> m_aFloatingTablesOfParagraph; sal_Int32 m_nTextFrameLevel; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits