[Libreoffice-commits] core.git: sw/qa writerfilter/source

Miklos Vajna vmiklos at collabora.co.uk
Mon Sep 22 02:12:44 PDT 2014


 sw/qa/extras/ooxmlexport/data/sdt-ignored-footer.docx |binary
 sw/qa/extras/ooxmlexport/ooxmlexport.cxx              |    9 +++++++++
 writerfilter/source/dmapper/DomainMapper.cxx          |    6 ++++++
 writerfilter/source/dmapper/DomainMapper_Impl.cxx     |    5 +++++
 writerfilter/source/dmapper/DomainMapper_Impl.hxx     |    2 ++
 5 files changed, 22 insertions(+)

New commits:
commit ce5dd8647083c944fb298c491fb526dad17a8a1a
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Mon Sep 22 10:42:41 2014 +0200

    DOCX import: ignore SDT as well in to-be-discarded header/footer
    
    Change-Id: I53388e8b8ca71a3ad5d0b3e22dd60c642cb1f4b7

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 0000000..8330291
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/sdt-ignored-footer.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index 953a036..0bb68e8 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 5fd818c..6d07ca6 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 657c279..7e68473 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 2376f3c..2360a46 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 ;


More information about the Libreoffice-commits mailing list