summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2014-09-22 10:42:41 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2014-09-22 11:07:21 +0200
commitce5dd8647083c944fb298c491fb526dad17a8a1a (patch)
tree55771d1ddadc5e9f86c4f97c274d64b42ba82c0d
parentb9f187055394713fbc58d149c6ea98fe13dbadd5 (diff)
DOCX import: ignore SDT as well in to-be-discarded header/footer
Change-Id: I53388e8b8ca71a3ad5d0b3e22dd60c642cb1f4b7
-rw-r--r--sw/qa/extras/ooxmlexport/data/sdt-ignored-footer.docxbin0 -> 18299 bytes
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport.cxx9
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx6
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx5
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.hxx2
5 files changed, 22 insertions, 0 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/sdt-ignored-footer.docx b/sw/qa/extras/ooxmlexport/data/sdt-ignored-footer.docx
new file mode 100644
index 000000000000..8330291af869
--- /dev/null
+++ b/sw/qa/extras/ooxmlexport/data/sdt-ignored-footer.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index 953a036249ea..0bb68e87d66c 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -242,6 +242,15 @@ DECLARE_OOXMLEXPORT_TEST(testTableAlignment, "table-alignment.docx")
CPPUNIT_ASSERT_EQUAL(text::HoriOrientation::RIGHT, getProperty<sal_Int16>(xTable, "HoriOrient"));
}
+DECLARE_OOXMLEXPORT_TEST(testSdtIgnoredFooter, "sdt-ignored-footer.docx")
+{
+ if (xmlDocPtr pXmlDoc = parseExport("word/document.xml"))
+ {
+ // This was 1, make sure no w:sdt sneaks into the main document from the footer.
+ assertXPath(pXmlDoc, "//w:sdt", 0);
+ }
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 5fd818c6eccc..6d07ca6bfd12 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -2976,6 +2976,12 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
{
// there are unsupported SDT properties in the document
// save them in the paragraph interop grab bag
+ if (m_pImpl->IsDiscardHeaderFooter())
+ {
+ // Unless we're supposed to ignore this header/footer.
+ m_pImpl->m_pSdtHelper->getInteropGrabBagAndClear();
+ return;
+ }
if((m_pImpl->m_pSdtHelper->containedInInteropGrabBag("ooxml:CT_SdtPr_checkbox") ||
m_pImpl->m_pSdtHelper->containedInInteropGrabBag("ooxml:CT_SdtPr_text") ||
m_pImpl->m_pSdtHelper->containedInInteropGrabBag("ooxml:CT_SdtPr_dataBinding") ||
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 657c279078e6..7e68473c4eaa 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -2034,6 +2034,11 @@ bool DomainMapper_Impl::IsSdtEndBefore()
return bIsSdtEndBefore;
}
+bool DomainMapper_Impl::IsDiscardHeaderFooter()
+{
+ return m_bDiscardHeaderFooter;
+}
+
sal_Int16 lcl_ParseNumberingType( const OUString& rCommand )
{
sal_Int16 nRet = style::NumberingType::PAGE_DESCRIPTOR;
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 2376f3c5b2dd..2360a4644736 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -827,6 +827,8 @@ public:
/// Check if "SdtEndBefore" property is set
bool IsSdtEndBefore();
+ bool IsDiscardHeaderFooter();
+
private:
void PushPageHeaderFooter(bool bHeader, SectionPropertyMap::PageType eType);
std::vector<css::uno::Reference< css::drawing::XShape > > m_vTextFramesForChaining ;