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.

(cherry picked from commit 4d120b6ab181f530d3fedc963b1c6ec777f2608a)
Signed-off-by: Luboš Luňák <l.lunak@collabora.com>

Conflicts:
	sw/qa/extras/ooxmlimport/ooxmlimport.cxx

Change-Id: I6e1954c9bd5520ac284d66244ce1c9004e970305
diff --git a/sw/qa/extras/ooxmlimport/data/footnote.docx b/sw/qa/extras/ooxmlimport/data/footnote.docx
new file mode 100644
index 0000000..f5c94bd
--- /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 90d2680..f8f951f 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -2163,6 +2163,16 @@ DECLARE_OOXMLIMPORT_TEST(testBnc875718, "bnc875718.docx")
    CPPUNIT_ASSERT_EQUAL( OUString( "Text\n" ), text->getString());
}

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 0a958d4..98286c32 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -2498,7 +2498,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 5078760..bdad3b1 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -173,6 +173,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 ),
@@ -1547,6 +1548,7 @@ void DomainMapper_Impl::PopPageHeaderFooter()

void DomainMapper_Impl::PushFootOrEndnote( bool bIsFootnote )
{
    m_bInFootOrEndnote = true;
    try
    {
        // Redlines outside the footnote should not affect footnote content
@@ -1717,6 +1719,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 74ff784..049304d 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();