summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Luth <justin_luth@sil.org>2018-08-27 11:19:22 +0300
committerLászló Németh <nemeth@numbertext.org>2018-08-28 11:47:53 +0200
commitb88da9b4302fa324f061a4a26ab4b2d647fdc765 (patch)
tree87a972952f2beee302e34777ed2fc75fa84a6127
parenta922f56cbf25f78534cd2d36bf13a86a4f15d970 (diff)
writerfilter: not FirstParaInSection if IsInShape
Since anchored objects can contain paragraphs, considering all of them to be "firstParagraphs" would generally be considered an incorrect result. Browsing through the existing uses of IsFirstPara.*InSection I didn't see any that looked like it should be considered true if IsInShape. Since this is the kind of gotcha that that the programmer should be aware of, add it directly into the function instead of requiring each use to have an additional qualification. The following ooxml unit tests match these conditions, but only one was fixed - the rest were unaffected since they just avoided adding/removing dummy paragraphs. fdo79540.docx - 5 tblppr-shape.docx - 5 ooo47778-3.odt- 5 ooo47778-4.odt- 5 textbox-rounded-corners.docx - 7 n780563.docx - 8 missing-path.docx - 10 floating-tables-anchor.docx - 10 tdf117805.odt - 11 (fixed - prevented extra section paragraphs) Change-Id: I841475e214c194a673321c1229d9254dd07205f8 Reviewed-on: https://gerrit.libreoffice.org/59659 Tested-by: Jenkins Reviewed-by: László Németh <nemeth@numbertext.org>
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport11.cxx3
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx2
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx7
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.hxx2
4 files changed, 12 insertions, 2 deletions
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx
index 263959520851..e02d829b734f 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx
@@ -271,6 +271,9 @@ DECLARE_OOXMLEXPORT_TEST(testTdf117805, "tdf117805.odt")
// This failed, the header was lost. It's still referenced at an incorrect
// location in document.xml, though.
CPPUNIT_ASSERT(xNameAccess->hasByName("word/header1.xml"));
+
+ uno::Reference<text::XText> textbox(getShape(1), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(8, getParagraphs(textbox));
}
DECLARE_OOXMLEXPORT_TEST(testTdf113183, "tdf113183.docx")
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index cfd44ab53dd9..4b07d253eb21 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -656,7 +656,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val)
else
{
// tdf#104354 first paragraphs of table cells and shapes get zero top margin
- if ((m_pImpl->GetIsFirstParagraphInSection() && !m_pImpl->IsInShape() && m_pImpl->m_nTableDepth > 0) ||
+ if ((m_pImpl->GetIsFirstParagraphInSection() && m_pImpl->m_nTableDepth > 0) ||
m_pImpl->GetIsFirstParagraphInShape())
default_spacing = 0;
else
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 0091f40aff28..508e74e017ae 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -478,6 +478,13 @@ void DomainMapper_Impl::SetIsFirstParagraphInSection( bool bIsFirst )
m_bIsFirstParaInSection = bIsFirst;
}
+bool DomainMapper_Impl::GetIsFirstParagraphInSection()
+{
+ // Anchored objects may include multiple paragraphs,
+ // and none of them should be considered the first para in section.
+ return m_bIsFirstParaInSection && !IsInShape();
+}
+
void DomainMapper_Impl::SetIsFirstParagraphInShape(bool bIsFirst)
{
m_bIsFirstParaInShape = bIsFirst;
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 72a9b56da66e..342fa4d0f006 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -594,7 +594,7 @@ public:
void SetIsLastSectionGroup( bool bIsLast );
bool GetIsLastSectionGroup() { return m_bIsLastSectionGroup;}
void SetIsFirstParagraphInSection( bool bIsFirst );
- bool GetIsFirstParagraphInSection() { return m_bIsFirstParaInSection;}
+ bool GetIsFirstParagraphInSection();
void SetIsFirstParagraphInShape(bool bIsFirst);
bool GetIsFirstParagraphInShape() { return m_bIsFirstParaInShape; }
void SetIsDummyParaAddedForTableInSection( bool bIsAdded );