[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