sw/qa/extras/ooxmlimport/data/hello.docx |binary sw/qa/extras/ooxmlimport/data/tdf94374.docx |binary sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 30 ++++++++++++++++++++ writerfilter/inc/dmapper/DomainMapperFactory.hxx | 2 - writerfilter/source/dmapper/DomainMapper.cxx | 4 +- writerfilter/source/dmapper/DomainMapper.hxx | 1 writerfilter/source/dmapper/domainmapperfactory.cxx | 3 -- writerfilter/source/filter/RtfFilter.cxx | 4 -- writerfilter/source/filter/WriterFilter.cxx | 3 -- 9 files changed, 35 insertions(+), 12 deletions(-)
New commits: commit 8396bffef734a543ee81a742d6d4ac8ed03d046a Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Mon Oct 19 09:23:42 2015 +0200 writerfilter: dmapper ctor can read TextInsertModeRange directly Change-Id: If17ae09266134b4bc410eab1a1b2f5139ba93a12 diff --git a/writerfilter/inc/dmapper/DomainMapperFactory.hxx b/writerfilter/inc/dmapper/DomainMapperFactory.hxx index 306870a..afd798a 100644 --- a/writerfilter/inc/dmapper/DomainMapperFactory.hxx +++ b/writerfilter/inc/dmapper/DomainMapperFactory.hxx @@ -12,7 +12,6 @@ #include <dmapper/resourcemodel.hxx> #include <com/sun/star/io/XInputStream.hpp> #include <com/sun/star/lang/XComponent.hpp> -#include <com/sun/star/text/XTextRange.hpp> #include <com/sun/star/uno/XComponentContext.hpp> namespace utl @@ -41,7 +40,6 @@ public: css::uno::Reference<css::lang::XComponent> const& xModel, bool bRepairStorage, SourceDocumentType eDocumentType, - css::uno::Reference<css::text::XTextRange> const& xInsertTextRange, utl::MediaDescriptor& rMediaDesc); }; } // namespace dmapper diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 4132d82..d75e3e4 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -95,12 +95,12 @@ DomainMapper::DomainMapper( const uno::Reference< uno::XComponentContext >& xCon uno::Reference<lang::XComponent> const& xModel, bool bRepairStorage, SourceDocumentType eDocumentType, - uno::Reference<text::XTextRange> const& xInsertTextRange, utl::MediaDescriptor& rMediaDesc) : LoggedProperties("DomainMapper"), LoggedTable("DomainMapper"), LoggedStream("DomainMapper"), - m_pImpl( new DomainMapper_Impl( *this, xContext, xModel, eDocumentType, xInsertTextRange, !rMediaDesc.getUnpackedValueOrDefault("InsertMode", false))), + m_pImpl( new DomainMapper_Impl( *this, xContext, xModel, eDocumentType, rMediaDesc.getUnpackedValueOrDefault("TextInsertModeRange", uno::Reference<text::XTextRange>()), + !rMediaDesc.getUnpackedValueOrDefault("InsertMode", false))), mbIsSplitPara(false) { // #i24363# tab stops relative to indent diff --git a/writerfilter/source/dmapper/DomainMapper.hxx b/writerfilter/source/dmapper/DomainMapper.hxx index e058369..c5a2299 100644 --- a/writerfilter/source/dmapper/DomainMapper.hxx +++ b/writerfilter/source/dmapper/DomainMapper.hxx @@ -80,7 +80,6 @@ public: css::uno::Reference<css::lang::XComponent> const& xModel, bool bRepairStorage, SourceDocumentType eDocumentType, - css::uno::Reference<css::text::XTextRange> const& xInsertTextRange, utl::MediaDescriptor& rMediaDesc); virtual ~DomainMapper(); diff --git a/writerfilter/source/dmapper/domainmapperfactory.cxx b/writerfilter/source/dmapper/domainmapperfactory.cxx index 193ae20..52e568c 100644 --- a/writerfilter/source/dmapper/domainmapperfactory.cxx +++ b/writerfilter/source/dmapper/domainmapperfactory.cxx @@ -20,7 +20,6 @@ Stream::Pointer_t DomainMapperFactory::createMapper(css::uno::Reference<css::uno css::uno::Reference<css::lang::XComponent> const& xModel, bool bRepairStorage, SourceDocumentType eDocumentType, - css::uno::Reference<css::text::XTextRange> const& xInsertTextRange, utl::MediaDescriptor& rMediaDesc) { #ifdef DEBUG_WRITERFILTER @@ -32,7 +31,7 @@ Stream::Pointer_t DomainMapperFactory::createMapper(css::uno::Reference<css::uno TagLogger::getInstance().startDocument(); #endif - return Stream::Pointer_t(new DomainMapper(xContext, xInputStream, xModel, bRepairStorage, eDocumentType, xInsertTextRange, rMediaDesc)); + return Stream::Pointer_t(new DomainMapper(xContext, xInputStream, xModel, bRepairStorage, eDocumentType, rMediaDesc)); } } // namespace dmapper diff --git a/writerfilter/source/filter/RtfFilter.cxx b/writerfilter/source/filter/RtfFilter.cxx index 509c9b1..1f5cc85 100644 --- a/writerfilter/source/filter/RtfFilter.cxx +++ b/writerfilter/source/filter/RtfFilter.cxx @@ -110,7 +110,6 @@ sal_Bool RtfFilter::filter(const uno::Sequence< beans::PropertyValue >& aDescrip utl::MediaDescriptor aMediaDesc(aDescriptor); bool bRepairStorage = aMediaDesc.getUnpackedValueOrDefault("RepairPackage", false); bool bIsNewDoc = !aMediaDesc.getUnpackedValueOrDefault("InsertMode", false); - uno::Reference<text::XTextRange> xInsertTextRange = aMediaDesc.getUnpackedValueOrDefault("TextInsertModeRange", uno::Reference<text::XTextRange>()); uno::Reference< io::XInputStream > xInputStream; aMediaDesc.addInputStream(); @@ -145,8 +144,7 @@ sal_Bool RtfFilter::filter(const uno::Sequence< beans::PropertyValue >& aDescrip uno::Reference<task::XStatusIndicator>()); writerfilter::dmapper::SourceDocumentType eType = writerfilter::dmapper::SourceDocumentType::RTF; - writerfilter::Stream::Pointer_t pStream( - writerfilter::dmapper::DomainMapperFactory::createMapper(m_xContext, xInputStream, m_xDstDoc, bRepairStorage, eType, xInsertTextRange, aMediaDesc)); + writerfilter::Stream::Pointer_t pStream(writerfilter::dmapper::DomainMapperFactory::createMapper(m_xContext, xInputStream, m_xDstDoc, bRepairStorage, eType, aMediaDesc)); writerfilter::rtftok::RTFDocument::Pointer_t pDocument( writerfilter::rtftok::RTFDocumentFactory::createDocument(m_xContext, xInputStream, m_xDstDoc, xFrame, xStatusIndicator, bIsNewDoc)); pDocument->resolve(*pStream); diff --git a/writerfilter/source/filter/WriterFilter.cxx b/writerfilter/source/filter/WriterFilter.cxx index 354585b..2a96884 100644 --- a/writerfilter/source/filter/WriterFilter.cxx +++ b/writerfilter/source/filter/WriterFilter.cxx @@ -170,9 +170,7 @@ sal_Bool WriterFilter::filter(const uno::Sequence< beans::PropertyValue >& aDesc return sal_False; writerfilter::dmapper::SourceDocumentType eType = writerfilter::dmapper::SourceDocumentType::OOXML; - uno::Reference<text::XTextRange> xInsertTextRange = aMediaDesc.getUnpackedValueOrDefault("TextInsertModeRange", uno::Reference<text::XTextRange>()); - writerfilter::Stream::Pointer_t pStream( - writerfilter::dmapper::DomainMapperFactory::createMapper(m_xContext, xInputStream, m_xDstDoc, bRepairStorage, eType, xInsertTextRange, aMediaDesc)); + writerfilter::Stream::Pointer_t pStream(writerfilter::dmapper::DomainMapperFactory::createMapper(m_xContext, xInputStream, m_xDstDoc, bRepairStorage, eType, aMediaDesc)); //create the tokenizer and domain mapper writerfilter::ooxml::OOXMLStream::Pointer_t pDocStream = writerfilter::ooxml::OOXMLDocumentFactory::createStream(m_xContext, xInputStream, bRepairStorage); uno::Reference<task::XStatusIndicator> xStatusIndicator = aMediaDesc.getUnpackedValueOrDefault(utl::MediaDescriptor::PROP_STATUSINDICATOR(), uno::Reference<task::XStatusIndicator>()); commit 30cc03733bdac1a0057c521834de9226773e2ac9 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Mon Oct 19 09:22:10 2015 +0200 Use comphelper::InitPropertySequence() Change-Id: I10d7fa6180b09f2304227e9fab81bba88f46294f diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx index 7648a95..bf24caa 100644 --- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx +++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx @@ -77,6 +77,7 @@ #include <tools/datetimeutils.hxx> #include <oox/drawingml/drawingmltypes.hxx> #include <unotools/streamwrap.hxx> +#include <comphelper/propertysequence.hxx> #include <bordertest.hxx> @@ -105,15 +106,14 @@ protected: uno::Reference<document::XFilter> xFilter(m_xSFactory->createInstance("com.sun.star.comp.Writer.WriterFilter"), uno::UNO_QUERY_THROW); uno::Reference<document::XImporter> xImporter(xFilter, uno::UNO_QUERY_THROW); xImporter->setTargetDocument(mxComponent); - uno::Sequence<beans::PropertyValue> aDescriptor(3); - aDescriptor[0].Name = "InputStream"; SvStream* pStream = utl::UcbStreamHelper::CreateStream(getURLFromSrc("/sw/qa/extras/ooxmlimport/data/") + rFilename, StreamMode::READ); uno::Reference<io::XStream> xStream(new utl::OStreamWrapper(*pStream)); - aDescriptor[0].Value <<= xStream; - aDescriptor[1].Name = "InsertMode"; - aDescriptor[1].Value <<= sal_True; - aDescriptor[2].Name = "TextInsertModeRange"; - aDescriptor[2].Value <<= xTextRange; + uno::Sequence<beans::PropertyValue> aDescriptor(comphelper::InitPropertySequence( + { + {"InputStream", uno::makeAny(xStream)}, + {"InputMode", uno::makeAny(sal_True)}, + {"TextInsertModeRange", uno::makeAny(xTextRange)}, + })); return xFilter->filter(aDescriptor); } }; commit 50d48709af3406eb270e5357f5d2cc6a218337a9 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Mon Oct 19 09:21:02 2015 +0200 tdf#94374 DOCX import: allow insert -> object -> document Change-Id: I977930d59ef1ae9ae8bd2dfa9a7f3816c46d982c diff --git a/sw/qa/extras/ooxmlimport/data/hello.docx b/sw/qa/extras/ooxmlimport/data/hello.docx new file mode 100644 index 0000000..d5d8d43 Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/hello.docx differ diff --git a/sw/qa/extras/ooxmlimport/data/tdf94374.docx b/sw/qa/extras/ooxmlimport/data/tdf94374.docx new file mode 100644 index 0000000..d5d8d43 Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/tdf94374.docx differ diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx index 1e48d02..7648a95 100644 --- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx +++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx @@ -65,6 +65,8 @@ #include <com/sun/star/style/CaseMap.hpp> #include <com/sun/star/style/PageStyleLayout.hpp> #include <com/sun/star/util/DateTime.hpp> +#include <com/sun/star/document/XFilter.hpp> +#include <com/sun/star/document/XImporter.hpp> #include <vcl/bmpacc.hxx> #include <vcl/svapp.hxx> #include <unotest/assertion_traits.hxx> @@ -74,6 +76,7 @@ #include <swtypes.hxx> #include <tools/datetimeutils.hxx> #include <oox/drawingml/drawingmltypes.hxx> +#include <unotools/streamwrap.hxx> #include <bordertest.hxx> @@ -95,6 +98,24 @@ public: if (OString(filename) == "smartart.docx" || OString(filename) == "strict-smartart.docx" || OString(filename) == "fdo87488.docx") SvtFilterOptions::Get().SetSmartArt2Shape(false); } +protected: + /// Copy&paste helper. + bool paste(const OUString& rFilename, const uno::Reference<text::XTextRange>& xTextRange) + { + uno::Reference<document::XFilter> xFilter(m_xSFactory->createInstance("com.sun.star.comp.Writer.WriterFilter"), uno::UNO_QUERY_THROW); + uno::Reference<document::XImporter> xImporter(xFilter, uno::UNO_QUERY_THROW); + xImporter->setTargetDocument(mxComponent); + uno::Sequence<beans::PropertyValue> aDescriptor(3); + aDescriptor[0].Name = "InputStream"; + SvStream* pStream = utl::UcbStreamHelper::CreateStream(getURLFromSrc("/sw/qa/extras/ooxmlimport/data/") + rFilename, StreamMode::READ); + uno::Reference<io::XStream> xStream(new utl::OStreamWrapper(*pStream)); + aDescriptor[0].Value <<= xStream; + aDescriptor[1].Name = "InsertMode"; + aDescriptor[1].Value <<= sal_True; + aDescriptor[2].Name = "TextInsertModeRange"; + aDescriptor[2].Value <<= xTextRange; + return xFilter->filter(aDescriptor); + } }; class FailTest : public Test @@ -2879,6 +2900,15 @@ DECLARE_OOXMLIMPORT_TEST(testTdf89165, "tdf89165.docx") // This must not hang in layout } +DECLARE_OOXMLIMPORT_TEST(testTdf94374, "hello.docx") +{ + uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference<text::XTextRange> xText(xTextDocument->getText(), uno::UNO_QUERY); + uno::Reference<text::XTextRange> xEnd = xText->getEnd(); + // This failed: it wasn't possible to insert a DOCX document into an existing Writer one. + CPPUNIT_ASSERT(paste("tdf94374.docx", xEnd)); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/filter/WriterFilter.cxx b/writerfilter/source/filter/WriterFilter.cxx index cae3d13..354585b 100644 --- a/writerfilter/source/filter/WriterFilter.cxx +++ b/writerfilter/source/filter/WriterFilter.cxx @@ -170,8 +170,9 @@ sal_Bool WriterFilter::filter(const uno::Sequence< beans::PropertyValue >& aDesc return sal_False; writerfilter::dmapper::SourceDocumentType eType = writerfilter::dmapper::SourceDocumentType::OOXML; + uno::Reference<text::XTextRange> xInsertTextRange = aMediaDesc.getUnpackedValueOrDefault("TextInsertModeRange", uno::Reference<text::XTextRange>()); writerfilter::Stream::Pointer_t pStream( - writerfilter::dmapper::DomainMapperFactory::createMapper(m_xContext, xInputStream, m_xDstDoc, bRepairStorage, eType, uno::Reference<text::XTextRange>(), aMediaDesc)); + writerfilter::dmapper::DomainMapperFactory::createMapper(m_xContext, xInputStream, m_xDstDoc, bRepairStorage, eType, xInsertTextRange, aMediaDesc)); //create the tokenizer and domain mapper writerfilter::ooxml::OOXMLStream::Pointer_t pDocStream = writerfilter::ooxml::OOXMLDocumentFactory::createStream(m_xContext, xInputStream, bRepairStorage); uno::Reference<task::XStatusIndicator> xStatusIndicator = aMediaDesc.getUnpackedValueOrDefault(utl::MediaDescriptor::PROP_STATUSINDICATOR(), uno::Reference<task::XStatusIndicator>()); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits