tdf#135949 writerfilter: don't bRemove if anchoredObjects
Surprised it took so long to find an example of an
anchored object on the empty paragraph.
I considered making a more useful function,
but I didn't want to return a pointer,
and my skills and understanding aren't good enough
to intelligently return an empty vector reference,
so I just left it as I first created it.
It seems a bit silly to make a bool function
just for this, but nothing returns anything
that I wanted to use. So I just made a
perfect-fit function for my unique need here.
I would have preferred to create a potentially
re-useable and flexible function...
Change-Id: I8c2527403cd8059223d4bc610b10243656b1db3c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102060
Tested-by: Jenkins
Reviewed-by: Justin Luth <justin_luth@sil.org>
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
diff --git a/sw/qa/extras/ooxmlexport/data/tdf135949_anchoredBeforeBreak.docx b/sw/qa/extras/ooxmlexport/data/tdf135949_anchoredBeforeBreak.docx
new file mode 100644
index 0000000..6b61be3
--- /dev/null
+++ b/sw/qa/extras/ooxmlexport/data/tdf135949_anchoredBeforeBreak.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx
index 9577043..2b49b47 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx
@@ -389,6 +389,13 @@ DECLARE_OOXMLEXPORT_TEST(testTdf132149_pgBreak, "tdf132149_pgBreak.odt")
//CPPUNIT_ASSERT(getXPathContent(pDump, "//page[5]/body/txt").startsWith("Lorem ipsum"));
}
DECLARE_OOXMLEXPORT_TEST(testTdf135949_anchoredBeforeBreak, "tdf135949_anchoredBeforeBreak.docx")
{
xmlDocUniquePtr pDump = parseLayoutDump();
//The picture was shown on page 2, because the empty paragraph before the page break was removed
assertXPath(pDump, "//page[1]/body/txt/anchored/fly", 1);
}
DECLARE_OOXMLEXPORT_TEST(testTdf129452_excessBorder, "tdf129452_excessBorder.docx")
{
uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 38f8a49..b3faa56 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -3511,6 +3511,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
&& !m_pImpl->GetIsDummyParaAddedForTableInSection()
&& !( pSectionContext && pSectionContext->GetBreakType() != -1 && pContext && pContext->isSet(PROP_BREAK_TYPE) )
&& !m_pImpl->GetIsPreviousParagraphFramed()
&& !m_pImpl->HasTopAnchoredObjects()
&& !m_pImpl->IsParaWithInlineObject());
const bool bNoNumbering = bRemove || (!m_pImpl->GetParaChanged() && m_pImpl->GetParaSectpr() && bSingleParagraph);
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 77d7ce2..e7b571d 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -734,6 +734,11 @@ FieldContextPtr const & DomainMapper_Impl::GetTopFieldContext()
return m_aFieldStack.back();
}
bool DomainMapper_Impl::HasTopAnchoredObjects() const
{
return !m_aTextAppendStack.empty() && !m_aTextAppendStack.top().m_aAnchoredObjects.empty();
}
void DomainMapper_Impl::InitTabStopFromStyle( const uno::Sequence< style::TabStop >& rInitTabStops )
{
OSL_ENSURE(m_aCurrentTabStops.empty(), "tab stops already initialized");
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 54a0f6c..33ec662 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -710,6 +710,8 @@ public:
css::uno::Reference<css::text::XTextAppend> const & GetTopTextAppend();
FieldContextPtr const & GetTopFieldContext();
bool HasTopAnchoredObjects() const;
FontTablePtr const & GetFontTable()
{
if(!m_pFontTable)