summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2014-06-11 12:39:33 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2014-06-11 13:35:10 +0200
commit4d120b6ab181f530d3fedc963b1c6ec777f2608a (patch)
treed21775874a65b6ee70af85cfc5624c94ae7980cc
parent3a72f4ba07458ee9c4c726486304f31900d89044 (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.docxbin0 -> 15779 bytes
-rw-r--r--sw/qa/extras/ooxmlimport/ooxmlimport.cxx10
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx4
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx3
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.hxx2
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
new file mode 100644
index 000000000000..f5c94bd27004
--- /dev/null
+++ b/sw/qa/extras/ooxmlimport/data/footnote.docx
Binary files differ
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();