[Libreoffice-commits] core.git: Branch 'distro/nisz/libreoffice-6-4' - sw/qa writerfilter/source

Bakos Attila (via logerrit) logerrit at kemper.freedesktop.org
Tue Sep 15 11:28:19 UTC 2020


 sw/qa/extras/ooxmlexport/data/tdf118701.docx      |binary
 sw/qa/extras/ooxmlexport/ooxmlexport14.cxx        |    5 +++++
 writerfilter/source/dmapper/DomainMapper.cxx      |    2 +-
 writerfilter/source/dmapper/DomainMapper_Impl.cxx |   16 ++++++++++++++++
 writerfilter/source/dmapper/DomainMapper_Impl.hxx |    1 +
 5 files changed, 23 insertions(+), 1 deletion(-)

New commits:
commit d8b5dbc8be757ef64b4d09dd1a72cb52c11d6d10
Author:     Bakos Attila <bakos.attilakaroly at nisz.hu>
AuthorDate: Tue Jun 30 15:03:31 2020 +0200
Commit:     Gabor Kelemen <kelemen.gabor2 at nisz.hu>
CommitDate: Tue Sep 15 13:27:44 2020 +0200

    tdf#118701 DOCX import: fix image position on page break
    
    If an image anchored to an empty paragraph only with
    section properties, don't remove that paragraph to keep
    the image on the page before the page break.
    
    IsLastParaEmpty() tries to move a text cursor over the
    empty paragraph marked for deletion. If it contains an
    image anchored as a character, the cursor won't reach
    the end of the previous paragraph by goLeft(2).
    
    Co-authored-by: Attila Bánhegyi (NISZ)
    
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/97518
    Tested-by: László Németh <nemeth at numbertext.org>
    Reviewed-by: László Németh <nemeth at numbertext.org>
    (cherry picked from commit b216fc5b583050cfb1cdf9bd82ec3c1bd2e09d70)
    
    Change-Id: Ic22c7553948eb06739232d7e35fc49ad14f96518
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102563
    Tested-by: Gabor Kelemen <kelemen.gabor2 at nisz.hu>
    Reviewed-by: Gabor Kelemen <kelemen.gabor2 at nisz.hu>

diff --git a/sw/qa/extras/ooxmlexport/data/tdf118701.docx b/sw/qa/extras/ooxmlexport/data/tdf118701.docx
new file mode 100644
index 000000000000..654a22709919
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf118701.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
index 92d2d7869662..8ec18a49eb4a 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
@@ -466,6 +466,11 @@ DECLARE_OOXMLIMPORT_TEST(TestTdf132483, "tdf132483.docx")
         text::RelOrientation::PAGE_FRAME , nHRelPos);
 }
 
+DECLARE_OOXMLIMPORT_TEST(testTdf118701, "tdf118701.docx")
+{
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("At least one paragraph is missing from the file!", 3, getParagraphs());
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index ec3809cd291a..3339bb27e220 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -3475,7 +3475,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
             }
             m_pImpl->SetParaSectpr(false);
             finishParagraph(bRemove);
-            if (bRemove)
+            if (bRemove && m_pImpl->IsLastParaEmpty())
                 m_pImpl->RemoveLastParagraph();
         }
         else
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 6e6a074dad43..b77428a35f53 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -477,6 +477,22 @@ void DomainMapper_Impl::AddDummyParaForTableInSection()
     }
 }
 
+bool DomainMapper_Impl::IsLastParaEmpty()
+{
+    bool bRet = true;
+    if (!m_aTextAppendStack.empty() && m_aTextAppendStack.top().xTextAppend)
+    {
+        //creating cursor for finding text content
+        uno::Reference<text::XTextCursor> xCursor = m_aTextAppendStack.top().xTextAppend->createTextCursor();
+        xCursor->gotoEnd(false);
+        //selecting the last 2 characters in the document
+        xCursor->goLeft(2, true);
+        //the last paragraph is empty, if they are newlines
+        bRet = xCursor->getString().match(OUString(SAL_NEWLINE_STRING).concat(SAL_NEWLINE_STRING));
+    }
+    return bRet;
+}
+
 void DomainMapper_Impl::RemoveLastParagraph( )
 {
     if (m_bDiscardHeaderFooter)
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 7291973be2a1..9eef8dbee58d 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -619,6 +619,7 @@ public:
 
     void RemoveDummyParaForTableInSection();
     void AddDummyParaForTableInSection();
+    bool IsLastParaEmpty();
     void RemoveLastParagraph( );
     void SetIsLastParagraphInSection( bool bIsLast );
     bool GetIsLastParagraphInSection() const { return m_bIsLastParaInSection;}


More information about the Libreoffice-commits mailing list