diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-06-11 12:39:33 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-06-11 13:35:10 +0200 |
commit | 4d120b6ab181f530d3fedc963b1c6ec777f2608a (patch) | |
tree | d21775874a65b6ee70af85cfc5624c94ae7980cc | |
parent | 3a72f4ba07458ee9c4c726486304f31900d89044 (diff) |
DOCX import: fix additional empty paragraphs around footnote text
Regression from commit abe1e852a232e3bdab7b9177d099fe3929f5a4aa (handle
properly page breaks even if a page contains only a frame (fdo#55381),
2014-04-21), DomainMapper::lcl_endSectionGroup() inserted an empty
paragraph before and after the real footnote text. Disable addition of
the dummy paragraph for footnotes.
Change-Id: I6e1954c9bd5520ac284d66244ce1c9004e970305
-rw-r--r-- | sw/qa/extras/ooxmlimport/data/footnote.docx | bin | 0 -> 15779 bytes | |||
-rw-r--r-- | sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 10 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper.cxx | 4 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 3 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.hxx | 2 |
5 files changed, 18 insertions, 1 deletions
diff --git a/sw/qa/extras/ooxmlimport/data/footnote.docx b/sw/qa/extras/ooxmlimport/data/footnote.docx Binary files differnew file mode 100644 index 000000000000..f5c94bd27004 --- /dev/null +++ b/sw/qa/extras/ooxmlimport/data/footnote.docx diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx index 1102c29a71da..770c239b99c4 100644 --- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx +++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx @@ -2210,6 +2210,16 @@ DECLARE_OOXMLIMPORT_TEST(testFdo78939, "fdo78939.docx") CPPUNIT_ASSERT_EQUAL(OUString(), getProperty<OUString>(getParagraph(1), "NumberingStyleName")); } +DECLARE_OOXMLIMPORT_TEST(testFootnote, "footnote.docx") +{ + uno::Reference<text::XFootnotesSupplier> xFootnotesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> xFootnotes(xFootnotesSupplier->getFootnotes(), uno::UNO_QUERY); + uno::Reference<text::XTextRange> xFootnote(xFootnotes->getByIndex(0), uno::UNO_QUERY); + OUString aFootnote = xFootnote->getString(); + // Ensure there are no additional newlines after "bar". + CPPUNIT_ASSERT(aFootnote.endsWith("bar")); +} + #endif CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index fb4a5dc56513..265208362213 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -2502,7 +2502,9 @@ void DomainMapper::lcl_endSectionGroup() { m_pImpl->CheckUnregisteredFrameConversion(); m_pImpl->ExecuteFrameConversion(); - if(m_pImpl->GetIsFirstParagraphInSection()) + // First paragraph in a footnote doesn't count: that would create + // additional paragraphs before and after the real footnote content. + if(m_pImpl->GetIsFirstParagraphInSection() && !m_pImpl->IsInFootOrEndnote()) { // This section has no paragraph at all (e.g. they are all actually in a frame). // If this section has a page break, there would be nothing to apply to the page diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 0d518c001d2f..7748a332085a 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -172,6 +172,7 @@ DomainMapper_Impl::DomainMapper_Impl( m_bInAnyTableImport( false ), m_bInHeaderFooterImport( false ), m_bDiscardHeaderFooter( false ), + m_bInFootOrEndnote(false), m_bLineNumberingSet( false ), m_bIsInFootnoteProperties( false ), m_bIsCustomFtnMark( false ), @@ -1515,6 +1516,7 @@ void DomainMapper_Impl::PopPageHeaderFooter() void DomainMapper_Impl::PushFootOrEndnote( bool bIsFootnote ) { + m_bInFootOrEndnote = true; try { // Redlines outside the footnote should not affect footnote content @@ -1685,6 +1687,7 @@ void DomainMapper_Impl::PopFootOrEndnote() return; } m_aRedlines.pop(); + m_bInFootOrEndnote = false; } diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index f73b72ba2de9..99eabb54deb9 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -359,6 +359,7 @@ private: bool m_bInAnyTableImport; //in import of fonts, styles, lists or lfos bool m_bInHeaderFooterImport; bool m_bDiscardHeaderFooter; + bool m_bInFootOrEndnote; bool m_bLineNumberingSet; bool m_bIsInFootnoteProperties; @@ -571,6 +572,7 @@ public: void PushFootOrEndnote( bool bIsFootnote ); void PopFootOrEndnote(); + bool IsInFootOrEndnote() const { return m_bInFootOrEndnote; } void PushAnnotation(); void PopAnnotation(); |