sw/qa/extras/ooxmlexport/data/tdf140182_extraPagebreak.docx |binary
 sw/qa/extras/ooxmlexport/ooxmlexport13.cxx                  |   11 +++++++++++
 writerfilter/source/dmapper/DomainMapper.cxx                |    5 +++--
 writerfilter/source/dmapper/DomainMapper_Impl.cxx           |    7 +++++++
 writerfilter/source/dmapper/DomainMapper_Impl.hxx           |    3 +++
 5 files changed, 24 insertions(+), 2 deletions(-)

New commits:
commit b83fc213bc90d00ca7304e7de964b4437fce5867
Author:     Attila Szűcs <szucs.atti...@nisz.hu>
AuthorDate: Fri Feb 26 11:19:01 2021 +0100
Commit:     Gabor Kelemen <kelemen.gab...@nisz.hu>
CommitDate: Thu Apr 29 14:08:02 2021 +0200

    tdf#140182 DOCX table import: fix extra page break
    
    Hack with m_bDummyParaAddedForTableInSection didn't
    handle the case, when a page break (empty w:p with a w:br)
    after the table followed by a paragraph with a section
    break, resulting 2 page breaks after the table instead of
    a single one.
    
    Co-authored-by: Tibor Nagy (NISZ)
    
    Change-Id: Ibd8ab5444becdfd09d0d05eb246e6853914e1f05
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111600
    Tested-by: László Németh <nem...@numbertext.org>
    Reviewed-by: László Németh <nem...@numbertext.org>
    (cherry picked from commit 9dfaf0fa1977f70341e4b9add2ecd2afb35bf1f2)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114859
    Tested-by: Gabor Kelemen <kelemen.gab...@nisz.hu>
    Reviewed-by: Gabor Kelemen <kelemen.gab...@nisz.hu>

diff --git a/sw/qa/extras/ooxmlexport/data/tdf140182_extraPagebreak.docx 
b/sw/qa/extras/ooxmlexport/data/tdf140182_extraPagebreak.docx
new file mode 100644
index 000000000000..be47d79c5b0a
Binary files /dev/null and 
b/sw/qa/extras/ooxmlexport/data/tdf140182_extraPagebreak.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx 
b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
index cbdc5e2df8d8..3d0c044d2a2c 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
@@ -90,6 +90,17 @@ DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testTdf121666_lostPage, 
"tdf121666_lostPage.
     assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:pPr/w:sectPr/w:type", 
"val", "nextPage");
 }
 
+DECLARE_OOXMLEXPORT_TEST(testTdf140182_extraPagebreak, 
"tdf140182_extraPagebreak.docx")
+{
+    // Table, page break, section break should be only 2 pages
+    // 2 breaks would normally results in 3 pages, but page break + section 
break is a special case
+    // that is handled so to break only 1 page that result only 2 pages.
+    // Because of the table, a hack (m_bDummyParaAddedForTableInSection) is 
set for the entire section,
+    // that canceled the page break + section break special case handling, 
resulting 3 pages.
+    // The accompanying fix eliminates this cancelation.
+    CPPUNIT_ASSERT_EQUAL(2, getPages());
+}
+
 DECLARE_OOXMLEXPORT_TEST(testTdf95848, "tdf95848.docx")
 {
     OUString listId;
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx 
b/writerfilter/source/dmapper/DomainMapper.cxx
index 1bada3877e29..e31c9e7d9246 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -3197,7 +3197,8 @@ void DomainMapper::lcl_text(const sal_uInt8 * data_, 
size_t len)
                         m_pImpl->SetFieldLocked();
                     return;
                 case 0x0c: //page break
-                    m_pImpl->deferBreak(PAGE_BREAK);
+                        m_pImpl->deferBreak(PAGE_BREAK);
+                        
m_pImpl->SetIsDummyParaAddedForTableInSectionPage(false);
                     return;
                 case 0x0e: //column break
                     m_pImpl->deferBreak(COLUMN_BREAK);
@@ -3509,7 +3510,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, 
size_t len)
             bool bRemove = (!m_pImpl->GetParaChanged() && 
m_pImpl->GetRemoveThisPara()) ||
                            (!m_pImpl->GetParaChanged() && 
m_pImpl->GetParaSectpr()
                             && !bSingleParagraphAfterRedline
-                            && !m_pImpl->GetIsDummyParaAddedForTableInSection()
+                            && 
(!m_pImpl->GetIsDummyParaAddedForTableInSectionPage())
                             && !( pSectionContext && 
pSectionContext->GetBreakType() != -1 && pContext && 
pContext->isSet(PROP_BREAK_TYPE) )
                             && !m_pImpl->GetIsPreviousParagraphFramed()
                             && !m_pImpl->IsParaWithInlineObject());
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx 
b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 16b3743ee2fc..7ed43f9a062f 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -284,6 +284,7 @@ DomainMapper_Impl::DomainMapper_Impl(
         m_bIsFirstParaInSection( true ),
         m_bIsFirstParaInSectionAfterRedline( true ),
         m_bDummyParaAddedForTableInSection( false ),
+        m_bDummyParaAddedForTableInSectionPage( false ),
         m_bTextFrameInserted(false),
         m_bIsPreviousParagraphFramed( false ),
         m_bIsLastParaInSection( false ),
@@ -586,6 +587,12 @@ void DomainMapper_Impl::SetIsFirstParagraphInShape(bool 
bIsFirst)
 void DomainMapper_Impl::SetIsDummyParaAddedForTableInSection( bool bIsAdded )
 {
     m_bDummyParaAddedForTableInSection = bIsAdded;
+    m_bDummyParaAddedForTableInSectionPage = bIsAdded;
+}
+
+void DomainMapper_Impl::SetIsDummyParaAddedForTableInSectionPage( bool 
bIsAdded )
+{
+    m_bDummyParaAddedForTableInSectionPage = bIsAdded;
 }
 
 
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx 
b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index d4a78a2b0237..40a5c5fceb06 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -548,6 +548,7 @@ private:
     bool                            m_bIsFirstParaInSectionAfterRedline;
     bool                            m_bIsFirstParaInShape = false;
     bool                            m_bDummyParaAddedForTableInSection;
+    bool                            m_bDummyParaAddedForTableInSectionPage;
     bool                            m_bTextFrameInserted;
     bool                            m_bIsPreviousParagraphFramed;
     bool                            m_bIsLastParaInSection;
@@ -646,6 +647,8 @@ public:
     bool GetIsFirstParagraphInShape() const { return m_bIsFirstParaInShape; }
     void SetIsDummyParaAddedForTableInSection( bool bIsAdded );
     bool GetIsDummyParaAddedForTableInSection() const { return 
m_bDummyParaAddedForTableInSection;}
+    void SetIsDummyParaAddedForTableInSectionPage(bool bIsAdded);
+    bool GetIsDummyParaAddedForTableInSectionPage() const { return 
m_bDummyParaAddedForTableInSectionPage; }
 
     /// Track if a textframe has been inserted into this section
     void SetIsTextFrameInserted( bool bIsInserted );
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to