summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2015-06-23 09:03:10 +0200
committerAndras Timar <andras.timar@collabora.com>2015-08-06 12:51:39 +0200
commit532b2ee69c742a268a5959f9dcfd5bc28c009f12 (patch)
tree35b2aebe1410ebc410571c85c50ef0edb09e1395 /writerfilter
parent6ee7188431ff433affd01d65cf397696990fe637 (diff)
tdf#87460 DOCX import: fix missing endnote in floattable
Writer doesn't support foot or endnotes in TextFrames, so they are not supported in OOXML floattables, either. In the past, floattables were imported as normal tables, that's how this worked. Restore the old situation till the core limitation is there, so we at least don't regress. Change-Id: I4eb62617e3131176f7371e9ca69f11bc9e948a0b (cherry picked from commit 2fe248f2b36d541c0d243a620c217058a50a9d5d)
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableHandler.cxx12
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableHandler.hxx4
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx8
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.hxx3
4 files changed, 24 insertions, 3 deletions
diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
index b08e52a3c90f..5dcae2b81843 100644
--- a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
+++ b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
@@ -56,7 +56,8 @@ DomainMapperTableHandler::DomainMapperTableHandler(TextReference_t const& xText,
: m_xText(xText),
m_rDMapper_Impl( rDMapper_Impl ),
m_nCellIndex(0),
- m_nRowIndex(0)
+ m_nRowIndex(0),
+ m_bHadFootOrEndnote(false)
{
}
@@ -1080,7 +1081,8 @@ void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel)
}
// If we have a table with a start and an end position, we should make it a floating one.
- if (xTable.is() && xStart.is() && xEnd.is())
+ // 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)
{
uno::Reference<beans::XPropertySet> xTableProperties(xTable, uno::UNO_QUERY);
bool bIsRelative = false;
@@ -1132,6 +1134,7 @@ void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel)
m_aTableProperties.reset();
m_aCellProperties.clear();
m_aRowProperties.clear();
+ m_bHadFootOrEndnote = false;
#ifdef DEBUG_WRITERFILTER
TagLogger::getInstance().endElement();
@@ -1212,6 +1215,11 @@ void DomainMapperTableHandler::endCell(const Handle_t & end)
++m_nCellIndex;
}
+void DomainMapperTableHandler::setHadFootOrEndnote(bool bHadFootOrEndnote)
+{
+ m_bHadFootOrEndnote = bHadFootOrEndnote;
+}
+
}}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.hxx b/writerfilter/source/dmapper/DomainMapperTableHandler.hxx
index 818f20fa1547..d91b140b770d 100644
--- a/writerfilter/source/dmapper/DomainMapperTableHandler.hxx
+++ b/writerfilter/source/dmapper/DomainMapperTableHandler.hxx
@@ -83,6 +83,9 @@ class DomainMapperTableHandler : public TableDataHandler
sal_Int32 m_nCellIndex;
sal_Int32 m_nRowIndex;
+ /// Did we have a foot or endnote in this table?
+ bool m_bHadFootOrEndnote;
+
TableStyleSheetEntry * endTableGetTableStyle(TableInfo & rInfo, std::vector<css::beans::PropertyValue>& rFrameProperties);
CellPropertyValuesSeq_t endTableGetCellProperties(TableInfo & rInfo, std::vector<HorizontallyMergedCell>& rMerges);
RowPropertyValuesSeq_t endTableGetRowProperties();
@@ -103,6 +106,7 @@ public:
virtual void endCell(const Handle_t & end) SAL_OVERRIDE;
Handle_t& getTable() { return m_xTableRange; };
+ void setHadFootOrEndnote(bool bHadFootOrEndnote);
};
}}
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index d106b4a883c8..41a4f23861b9 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -5205,6 +5205,14 @@ void DomainMapper_Impl::substream(Id rName,
getTableManager().endLevel();
popTableManager();
+ switch(rName)
+ {
+ case NS_ooxml::LN_footnote:
+ case NS_ooxml::LN_endnote:
+ m_pTableHandler->setHadFootOrEndnote(true);
+ break;
+ }
+
// check that stacks are the same as before substream
assert(m_aContextStack.size() == contextSize);
for (int i = 0; i < NUMBER_OF_CONTEXTS; ++i) {
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 78844729cc98..7d1aaf7447ed 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -38,6 +38,7 @@
#include <DomainMapper.hxx>
#include "DomainMapperTableManager.hxx"
+#include "DomainMapperTableHandler.hxx"
#include "PropertyMap.hxx"
#include "FontTable.hxx"
#include "NumberingManager.hxx"
@@ -366,7 +367,7 @@ private:
// TableManagers are stacked: one for each stream to avoid any confusion
std::stack< std::shared_ptr< DomainMapperTableManager > > m_aTableManagers;
- TableDataHandler::Pointer_t m_pTableHandler;
+ std::shared_ptr<DomainMapperTableHandler> m_pTableHandler;
//each context needs a stack of currently used attributes
PropertyStack m_aPropertyStacks[NUMBER_OF_CONTEXTS];