summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLászló Németh <nemeth@numbertext.org>2021-01-22 10:10:39 +0100
committerXisco Fauli <xiscofauli@libreoffice.org>2021-01-25 10:09:33 +0100
commit6de15a8d094b7eca68eab5341d5a55744154114e (patch)
tree3c59ddf4b5e620d8658896774e25461794911881
parent96673ea050ac3299a543692b7a0d782794e3d2cd (diff)
tdf#138899 DOCX import: fix removing last para of section
Fix regression from commit 39090afac268f9ae985832c2f08863b41e6c06f2 (tdf#120336 DOCX import: fix page break after tracked deletion), limiting the condition only for *empty* section starting paragraphs with tracked deletion. Change-Id: I020c8b0edf5d4a37a9150cccec8c25fce50327d3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109779 Tested-by: Jenkins Reviewed-by: László Németh <nemeth@numbertext.org> (cherry picked from commit b7ca9576c26ed258537134c0cf2944cfcfc65f2e) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109799 Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
-rw-r--r--sw/qa/extras/ooxmlexport/data/tdf138899.docxbin0 -> 22715 bytes
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport12.cxx7
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx3
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx8
4 files changed, 13 insertions, 5 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/tdf138899.docx b/sw/qa/extras/ooxmlexport/data/tdf138899.docx
new file mode 100644
index 000000000000..3e346ac0e4d9
--- /dev/null
+++ b/sw/qa/extras/ooxmlexport/data/tdf138899.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx
index f1934775b1c1..6d257d761ac9 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx
@@ -938,6 +938,13 @@ DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testTdf99631, "tdf99631.docx")
assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[2]/w:object[1]", "dyaOrig", "768");
}
+DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testTdf138899, "tdf138899.docx")
+{
+ xmlDocUniquePtr pXmlDocument = parseExport("word/document.xml");
+ // This was 6, not removed empty temporary paragraph at the end of the section
+ assertXPath(pXmlDocument, "/w:document/w:body/w:p", 5);
+}
+
DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testTdf122563, "tdf122563.docx")
{
xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml");
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index ec93ba4acdb3..ea64b4aa5f52 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -3512,7 +3512,8 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
if (bNewLine)
{
const bool bSingleParagraph = m_pImpl->GetIsFirstParagraphInSection() && m_pImpl->GetIsLastParagraphInSection();
- const bool bSingleParagraphAfterRedline = m_pImpl->GetIsFirstParagraphInSection(true) && m_pImpl->GetIsLastParagraphInSection();
+ const bool bSingleParagraphAfterRedline = m_pImpl->GetIsFirstParagraphInSection(/*bAfterRedline=*/true) &&
+ m_pImpl->GetIsLastParagraphInSection();
PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH);
if (!m_pImpl->GetFootnoteContext())
{
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 5325190d5ef2..580de1b9730c 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -2076,20 +2076,20 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con
else
SetIsPreviousParagraphFramed(false);
- m_bParaChanged = false;
m_bRemoveThisParagraph = false;
if( !IsInHeaderFooter() && !IsInShape() && (!pParaContext || !pParaContext->IsFrameMode()) )
{ // If the paragraph is in a frame, shape or header/footer, it's not a paragraph of the section itself.
SetIsFirstParagraphInSection(false);
- // count first not deleted paragraph as first paragraph in section to avoid of
- // its deletion later, resulting loss of the associated page break
- if (!m_previousRedline)
+ // don't count an empty deleted paragraph as first paragraph in section to avoid of
+ // the deletion of the next empty paragraph later, resulting loss of the associated page break
+ if (!m_previousRedline || m_bParaChanged)
{
SetIsFirstParagraphInSectionAfterRedline(false);
SetIsLastParagraphInSection(false);
}
}
m_previousRedline.clear();
+ m_bParaChanged = false;
if (m_bIsFirstParaInShape)
m_bIsFirstParaInShape = false;