Kaydet (Commit) b88da9b4 authored tarafından Justin Luth's avatar Justin Luth Kaydeden (comit) László Németh

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: 's avatarLászló Németh <nemeth@numbertext.org>
üst a922f56c
......@@ -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")
......
......@@ -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
......
......@@ -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;
......
......@@ -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 );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment