[Libreoffice-commits] core.git: Branch 'libreoffice-7-1-2' - sw/qa sw/source

Justin Luth (via logerrit) logerrit at kemper.freedesktop.org
Wed Mar 24 13:31:43 UTC 2021


 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 b2c08ff1e0bc525ed7225c0fa4749c0240d9a5ad
Author:     Justin Luth <justin_luth at sil.org>
AuthorDate: Tue Mar 23 07:51:19 2021 +0200
Commit:     Christian Lohmaier <lohmaier+LibreOffice at googlemail.com>
CommitDate: Wed Mar 24 14:31: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 <xiscofauli at libreoffice.org>
    (cherry picked from commit b850105570d0e99644ff1ad5d6d0f09734db7952)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112958
    Reviewed-by: Justin Luth <justin_luth at sil.org>
    Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice at googlemail.com>
    Tested-by: Christian Lohmaier <lohmaier+LibreOffice at googlemail.com>

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;
 


More information about the Libreoffice-commits mailing list