diff options
-rw-r--r-- | sw/qa/extras/ooxmlimport/data/tdf90611.docx | bin | 0 -> 14706 bytes | |||
-rw-r--r-- | sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 10 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper.cxx | 2 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 13 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.hxx | 4 |
5 files changed, 28 insertions, 1 deletions
diff --git a/sw/qa/extras/ooxmlimport/data/tdf90611.docx b/sw/qa/extras/ooxmlimport/data/tdf90611.docx Binary files differnew file mode 100644 index 000000000000..ac54feedd05f --- /dev/null +++ b/sw/qa/extras/ooxmlimport/data/tdf90611.docx diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx index d8cd372ef675..2bac72a10ed9 100644 --- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx +++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx @@ -2725,6 +2725,16 @@ DECLARE_OOXMLIMPORT_TEST(testTdf87460, "tdf87460.docx") CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), xEndnotes->getCount()); } +DECLARE_OOXMLIMPORT_TEST(testTdf90611, "tdf90611.docx") +{ + uno::Reference<text::XFootnotesSupplier> xFootnotesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> xFootnotes(xFootnotesSupplier->getFootnotes(), uno::UNO_QUERY); + uno::Reference<text::XText> xFootnoteText; + xFootnotes->getByIndex(0) >>= xFootnoteText; + // This was 11. + CPPUNIT_ASSERT_EQUAL(10.f, getProperty<float>(getParagraphOfText(1, xFootnoteText), "CharHeight")); +} + #endif CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 5542cca364e3..d78aca7a699c 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -991,7 +991,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) case NS_ooxml::LN_CT_FtnEdn_type: // This is the "separator" footnote, ignore its linebreak. if (static_cast<sal_uInt32>(nIntValue) == NS_ooxml::LN_Value_doc_ST_FtnEdn_separator) - m_pImpl->m_bIgnoreNextPara = true; + m_pImpl->SeenFootOrEndnoteSeparator(); break; case NS_ooxml::LN_CT_DataBinding_prefixMappings: m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ooxml:CT_DataBinding_prefixMappings", sStringValue); diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 944fdf32e109..5ff66e97ac26 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -208,6 +208,7 @@ DomainMapper_Impl::DomainMapper_Impl( m_bInHeaderFooterImport( false ), m_bDiscardHeaderFooter( false ), m_bInFootOrEndnote(false), + m_bSeenFootOrEndnoteSeparator(false), m_bLineNumberingSet( false ), m_bIsInFootnoteProperties( false ), m_bIsCustomFtnMark( false ), @@ -1747,6 +1748,9 @@ void DomainMapper_Impl::PushAnnotation() void DomainMapper_Impl::PopFootOrEndnote() { + if (!IsRTFImport()) + RemoveLastParagraph(); + // In case the foot or endnote did not contain a tab. m_bIgnoreNextTab = false; @@ -1759,9 +1763,18 @@ void DomainMapper_Impl::PopFootOrEndnote() return; } m_aRedlines.pop(); + m_bSeenFootOrEndnoteSeparator = false; m_bInFootOrEndnote = false; } +void DomainMapper_Impl::SeenFootOrEndnoteSeparator() +{ + if (!m_bSeenFootOrEndnoteSeparator) + { + m_bSeenFootOrEndnoteSeparator = true; + m_bIgnoreNextPara = true; + } +} void DomainMapper_Impl::PopAnnotation() { diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index 7d1aaf7447ed..b2b24b408daf 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -393,6 +393,8 @@ private: bool m_bInHeaderFooterImport; bool m_bDiscardHeaderFooter; bool m_bInFootOrEndnote; + /// Did we get a <w:separator/> for this footnote already? + bool m_bSeenFootOrEndnoteSeparator; bool m_bLineNumberingSet; bool m_bIsInFootnoteProperties; @@ -607,6 +609,8 @@ public: void PushFootOrEndnote( bool bIsFootnote ); void PopFootOrEndnote(); bool IsInFootOrEndnote() const { return m_bInFootOrEndnote; } + /// Got a <w:separator/>. + void SeenFootOrEndnoteSeparator(); void PushAnnotation(); void PopAnnotation(); |