[Libreoffice-commits] .: 2 commits - oox/source sw/qa writerfilter/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Tue Sep 25 00:57:04 PDT 2012


 oox/source/token/tokens.txt                           |    1 
 sw/qa/extras/ooxmlimport/data/n780853.docx            |binary
 sw/qa/extras/ooxmlimport/ooxmlimport.cxx              |   15 ++++++++++
 writerfilter/source/dmapper/DomainMapper.cxx          |    8 +++++
 writerfilter/source/dmapper/DomainMapper_Impl.cxx     |   13 ++++++++-
 writerfilter/source/dmapper/DomainMapper_Impl.hxx     |    6 ++++
 writerfilter/source/ooxml/OOXMLFastContextHandler.cxx |   26 ++++++++++++++++++
 writerfilter/source/ooxml/OOXMLFastContextHandler.hxx |    2 +
 writerfilter/source/ooxml/model.xml                   |    3 ++
 9 files changed, 73 insertions(+), 1 deletion(-)

New commits:
commit 7ea71eb8a28c4b41949299ff7d4b391486c90eea
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Tue Sep 25 08:58:18 2012 +0100

    n#780853 testcase
    
    Change-Id: I5b5d5c16722d66cd3a583f9cc5d6d6bdc6da5047

diff --git a/sw/qa/extras/ooxmlimport/data/n780853.docx b/sw/qa/extras/ooxmlimport/data/n780853.docx
new file mode 100644
index 0000000..fed8276
Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/n780853.docx differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index 34581e5..f7c75c5 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -93,6 +93,7 @@ public:
     void testN779627();
     void testFdo55187();
     void testN780563();
+    void testN780853();
 
     CPPUNIT_TEST_SUITE(Test);
 #if !defined(MACOSX) && !defined(WNT)
@@ -132,6 +133,7 @@ public:
     CPPUNIT_TEST(testN779627);
     CPPUNIT_TEST(testFdo55187);
     CPPUNIT_TEST(testN780563);
+    CPPUNIT_TEST(testN780853);
 #endif
     CPPUNIT_TEST_SUITE_END();
 
@@ -907,6 +909,19 @@ void Test::testN780563()
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount( ));
 }
 
+void Test::testN780853()
+{
+    /*
+     * The problem was that the table was not imported.
+     *
+     * xray ThisComponent.TextTables.Count 'was 0
+     */
+    load("n780853.docx");
+    uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+    uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY);
+    CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(Test);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
commit 73bd937420b9a99e1e35950e3f9dcbcfd874876d
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Tue Sep 25 08:57:48 2012 +0100

    n#780853 fix DOCX import of w:sdtContent in table cell
    
    The problem was that the framePr token made the table import fail. Given
    that frames inside w:sdtContent are invisible anway, just ignore them.
    
    Change-Id: I88ab9d5dd6cf362c629de74bc079c3108725f0a1

diff --git a/oox/source/token/tokens.txt b/oox/source/token/tokens.txt
index 64979d5..94644b4 100644
--- a/oox/source/token/tokens.txt
+++ b/oox/source/token/tokens.txt
@@ -4392,6 +4392,7 @@ sd
 sdt
 sdtContent
 sdtContentLocked
+sdtEndContent
 sdtEndPr
 sdtLocked
 sdtPr
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index cd4a17c..9bcccf3 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -1419,6 +1419,12 @@ void DomainMapper::lcl_attribute(Id nName, Value & val)
             }
         }
         break;
+        case NS_ooxml::LN_CT_SdtBlock_sdtContent:
+            m_pImpl->SetSdt(true);
+        break;
+        case NS_ooxml::LN_CT_SdtBlock_sdtEndContent:
+            m_pImpl->SetSdt(false);
+        break;
         default:
             {
 #if OSL_DEBUG_LEVEL > 0
@@ -2878,6 +2884,8 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext, SprmType
     }
     break;
     case NS_ooxml::LN_CT_PPrBase_framePr:
+    // Avoid frames if we're inside a structured document tag, would just cause outher tables fail to create.
+    if (!m_pImpl->GetSdt())
     {
         PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH);
         if( pContext.get() )
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 112b837..d9dee50 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -201,7 +201,8 @@ DomainMapper_Impl::DomainMapper_Impl(
         m_bIsFirstParaInSection( true ),
         m_bIsLastParaInSection( false ),
         m_bParaSectpr( false ),
-        m_bUsingEnhancedFields( false )
+        m_bUsingEnhancedFields( false ),
+        m_bSdt(false)
 {
     appendTableManager( );
     GetBodyText();
@@ -325,6 +326,16 @@ bool DomainMapper_Impl::GetParaSectpr()
     return m_bParaSectpr;
 }
 
+void DomainMapper_Impl::SetSdt(bool bSdt)
+{
+    m_bSdt = bSdt;
+}
+
+bool DomainMapper_Impl::GetSdt()
+{
+    return m_bSdt;
+}
+
 bool DomainMapper_Impl::GetParaChanged()
 {
     return m_bParaChanged;
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 845d04d..5f722f8 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -355,6 +355,8 @@ private:
     /// If the current paragraph contains section property definitions.
     bool                            m_bParaSectpr;
     bool                            m_bUsingEnhancedFields;
+    /// If the current paragraph is inside a structured document element.
+    bool                            m_bSdt;
 
     //annotation import
     uno::Reference< beans::XPropertySet >                                      m_xAnnotationField;
@@ -417,6 +419,10 @@ public:
     bool GetIsFirstParagraphInSection();
     void SetParaSectpr(bool bParaSectpr);
     bool GetParaSectpr();
+    /// Setter method for m_bSdt.
+    void SetSdt(bool bSdt);
+    /// Getter method for m_bSdt.
+    bool GetSdt();
     bool GetParaChanged();
 
     void deferBreak( BreakType deferredBreakType );
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
index a8112d6..09dee93 100644
--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
@@ -617,6 +617,32 @@ void OOXMLFastContextHandler::endParagraphGroup()
     }
 }
 
+void OOXMLFastContextHandler::startSdt()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.startSdt");
+#endif
+
+    OOXMLPropertySet * pProps = new OOXMLPropertySetImpl();
+    OOXMLValue::Pointer_t pVal(new OOXMLIntegerValue(1));
+    OOXMLProperty::Pointer_t pProp(new OOXMLPropertyImpl(NS_ooxml::LN_CT_SdtBlock_sdtContent, pVal, OOXMLPropertyImpl::ATTRIBUTE));
+    pProps->add(pProp);
+    mpStream->props(writerfilter::Reference<Properties>::Pointer_t(pProps));
+}
+
+void OOXMLFastContextHandler::endSdt()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+    debug_logger->element("contexthandler.endSdt");
+#endif
+
+    OOXMLPropertySet * pProps = new OOXMLPropertySetImpl();
+    OOXMLValue::Pointer_t pVal(new OOXMLIntegerValue(1));
+    OOXMLProperty::Pointer_t pProp(new OOXMLPropertyImpl(NS_ooxml::LN_CT_SdtBlock_sdtEndContent, pVal, OOXMLPropertyImpl::ATTRIBUTE));
+    pProps->add(pProp);
+    mpStream->props(writerfilter::Reference<Properties>::Pointer_t(pProps));
+}
+
 void OOXMLFastContextHandler::startSectionGroup()
 {
 #ifdef DEBUG_CONTEXT_HANDLER
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
index 688a476..b47f611 100644
--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
@@ -184,6 +184,8 @@ public:
     void endParagraphGroup();
     void startCharacterGroup();
     void endCharacterGroup();
+    void startSdt();
+    void endSdt();
 
     void startField();
     void fieldSeparator();
diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml
index 54f4b20..bf25aa3 100644
--- a/writerfilter/source/ooxml/model.xml
+++ b/writerfilter/source/ooxml/model.xml
@@ -22748,6 +22748,9 @@
       <element name="sdtPr" tokenid="ooxml:CT_SdtBlock_sdtPr"/>
       <element name="sdtEndPr" tokenid="ooxml:CT_SdtBlock_sdtEndPr"/>
       <element name="sdtContent" tokenid="ooxml:CT_SdtBlock_sdtContent"/>
+      <element name="sdtEndContent" tokenid="ooxml:CT_SdtBlock_sdtEndContent"/>
+      <action name="start" action="startSdt"/>
+      <action name="end" action="endSdt"/>
     </resource>
     <resource name="CT_SdtRun" resource="Stream" tag="field">
       <element name="sdtPr" tokenid="ooxml:CT_SdtRun_sdtPr"/>


More information about the Libreoffice-commits mailing list