sw/qa/extras/ooxmlexport/ooxmlexport19.cxx | 6 ++++++ writerfilter/source/dmapper/DomainMapperTableHandler.cxx | 12 ++---------- writerfilter/source/dmapper/DomainMapperTableHandler.hxx | 5 ----- writerfilter/source/dmapper/DomainMapper_Impl.cxx | 1 - 4 files changed, 8 insertions(+), 16 deletions(-)
New commits: commit 178421a6c719dac9c16f220b76292fec16a53f60 Author: Miklos Vajna <vmik...@collabora.com> AuthorDate: Thu Aug 24 08:34:38 2023 +0200 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Thu Aug 24 10:19:07 2023 +0200 tdf#77760 sw floattable: add support for footnotes, DOCX import This was originally added in commit 2fe248f2b36d541c0d243a620c217058a50a9d5d (tdf#87460 DOCX import: fix missing endnote in floattable, 2015-06-23), because Writer core only allows footnotes in floating tables since commit 56da1d30afe48cc4acd79567052a575e81f8c7a0 (tdf#77760 sw floattable: add support for footnotes, doc model, 2023-08-22). The DOCX export works already. The ODT filter also works: there is a mechanism to try to not insert footnotes in text frames, but the way XMLTextImportHelper::IsInFrame() is implemented means that it only rejects footnotes directly in text frames, not in tables-in-textframes, which is the interesting case for us. Change-Id: I90a5f0228385b2e3db8d994c6c76064fe595f439 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156024 Reviewed-by: Miklos Vajna <vmik...@collabora.com> Tested-by: Jenkins diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport19.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport19.cxx index 69a3fc137acb..961bbdfb6def 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport19.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport19.cxx @@ -286,6 +286,12 @@ DECLARE_OOXMLEXPORT_TEST(testTdf87460, "tdf87460.docx") uno::Reference<container::XIndexAccess> xEndnotes = xEndnotesSupplier->getEndnotes(); // This was 0: endnote was lost on import. CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), xEndnotes->getCount()); + + // Also make sure that <w:tblpPr> is mapped to a text frame (hosting the table): + uno::Reference<text::XTextFramesSupplier> xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XNameAccess> xTextFrames = xTextFramesSupplier->getTextFrames(); + // Without the fix in place, this test would have failed, the table was inline. + CPPUNIT_ASSERT(xTextFrames->hasByName("Frame1")); } DECLARE_OOXMLEXPORT_TEST(testTdf90611, "tdf90611.docx") diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx index 5b0971eee20f..a942e303cae9 100644 --- a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx +++ b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx @@ -88,8 +88,7 @@ DomainMapperTableHandler::DomainMapperTableHandler( css::uno::Reference<css::text::XTextAppendAndConvert> xText, DomainMapper_Impl& rDMapper_Impl) : m_xText(std::move(xText)), - m_rDMapper_Impl( rDMapper_Impl ), - m_bHadFootOrEndnote(false) + m_rDMapper_Impl( rDMapper_Impl ) { } @@ -1546,8 +1545,7 @@ void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel, bool bTab } // If we have a table with a start and an end position, we should make it a floating one. - // Unless the table had a foot or endnote, as Writer doesn't support those in TextFrames. - if (xTable.is() && xStart.is() && xEnd.is() && !m_bHadFootOrEndnote) + if (xTable.is() && xStart.is() && xEnd.is()) { uno::Reference<beans::XPropertySet> xTableProperties(xTable, uno::UNO_QUERY); bool bIsRelative = false; @@ -1675,7 +1673,6 @@ void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel, bool bTab m_aTableProperties.clear(); m_aCellProperties.clear(); m_aRowProperties.clear(); - m_bHadFootOrEndnote = false; #ifdef DBG_UTIL TagLogger::getInstance().endElement(); @@ -1752,11 +1749,6 @@ void DomainMapperTableHandler::endCell(const css::uno::Reference< css::text::XTe m_aRowRanges.push_back(comphelper::containerToSequence(m_aCellRange)); } -void DomainMapperTableHandler::setHadFootOrEndnote(bool bHadFootOrEndnote) -{ - m_bHadFootOrEndnote = bHadFootOrEndnote; -} - DomainMapper_Impl& DomainMapperTableHandler::getDomainMapperImpl() { return m_rDMapper_Impl; diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.hxx b/writerfilter/source/dmapper/DomainMapperTableHandler.hxx index f05fc1e474f1..d67c4d26bb7c 100644 --- a/writerfilter/source/dmapper/DomainMapperTableHandler.hxx +++ b/writerfilter/source/dmapper/DomainMapperTableHandler.hxx @@ -67,9 +67,6 @@ class DomainMapperTableHandler final : public virtual SvRefBase PropertyMapVector1 m_aRowProperties; TablePropertyMapPtr m_aTableProperties; - /// Did we have a foot or endnote in this table? - bool m_bHadFootOrEndnote; - TableStyleSheetEntry * endTableGetTableStyle(TableInfo & rInfo, std::vector<css::beans::PropertyValue>& rFrameProperties, bool bConvertToFloating); @@ -116,8 +113,6 @@ public: */ void endCell(const css::uno::Reference< css::text::XTextRange > & end); - void setHadFootOrEndnote(bool bHadFootOrEndnote); - DomainMapper_Impl& getDomainMapperImpl(); }; diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index d9faf0c206a4..4b7e91978128 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -9355,7 +9355,6 @@ void DomainMapper_Impl::substream(Id rName, { case NS_ooxml::LN_footnote: case NS_ooxml::LN_endnote: - m_pTableHandler->setHadFootOrEndnote(true); m_bHasFtn = true; break; }