diff options
author | Michael Stahl <mstahl@redhat.com> | 2015-12-15 16:18:24 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2015-12-15 17:44:37 +0100 |
commit | 8338e2783f223aec176a3f06f78abd7a60ea2e0a (patch) | |
tree | 8401731fbc370e0f2cf4250320307c036713b7ec /writerfilter | |
parent | 75a200f371d12ddaf5b82af10c8d4675babcdb5e (diff) |
writerfilter: set a BaseURL on embedded math objects
Change-Id: I9a500e079c892e281bdfee9627641f118261e0f8
Diffstat (limited to 'writerfilter')
-rw-r--r-- | writerfilter/inc/ooxml/OOXMLDocument.hxx | 2 | ||||
-rw-r--r-- | writerfilter/source/filter/WriterFilter.cxx | 3 | ||||
-rw-r--r-- | writerfilter/source/ooxml/OOXMLDocumentImpl.cxx | 13 | ||||
-rw-r--r-- | writerfilter/source/ooxml/OOXMLDocumentImpl.hxx | 5 | ||||
-rw-r--r-- | writerfilter/source/ooxml/OOXMLFastContextHandler.cxx | 6 |
5 files changed, 20 insertions, 9 deletions
diff --git a/writerfilter/inc/ooxml/OOXMLDocument.hxx b/writerfilter/inc/ooxml/OOXMLDocument.hxx index 7bf884ff1272..5ef9247011fa 100644 --- a/writerfilter/inc/ooxml/OOXMLDocument.hxx +++ b/writerfilter/inc/ooxml/OOXMLDocument.hxx @@ -254,7 +254,7 @@ public: static OOXMLDocument * createDocument(OOXMLStream::Pointer_t pStream, const css::uno::Reference<css::task::XStatusIndicator>& xStatusIndicator, - bool bSkipImage); + bool bSkipImage, OUString const& rBaseURL); }; diff --git a/writerfilter/source/filter/WriterFilter.cxx b/writerfilter/source/filter/WriterFilter.cxx index 2a96884e516e..de6199f702a9 100644 --- a/writerfilter/source/filter/WriterFilter.cxx +++ b/writerfilter/source/filter/WriterFilter.cxx @@ -154,6 +154,7 @@ sal_Bool WriterFilter::filter(const uno::Sequence< beans::PropertyValue >& aDesc utl::MediaDescriptor aMediaDesc(aDescriptor); bool bRepairStorage = aMediaDesc.getUnpackedValueOrDefault("RepairPackage", false); bool bSkipImages = aMediaDesc.getUnpackedValueOrDefault("FilterOptions", OUString("")) == "SkipImages"; + OUString const baseURI = aMediaDesc.getUnpackedValueOrDefault("DocumentBaseURL", OUString("")); uno::Reference< io::XInputStream > xInputStream; try @@ -174,7 +175,7 @@ sal_Bool WriterFilter::filter(const uno::Sequence< beans::PropertyValue >& aDesc //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>()); - writerfilter::ooxml::OOXMLDocument::Pointer_t pDocument(writerfilter::ooxml::OOXMLDocumentFactory::createDocument(pDocStream, xStatusIndicator, bSkipImages)); + writerfilter::ooxml::OOXMLDocument::Pointer_t pDocument(writerfilter::ooxml::OOXMLDocumentFactory::createDocument(pDocStream, xStatusIndicator, bSkipImages, baseURI)); uno::Reference<frame::XModel> xModel(m_xDstDoc, uno::UNO_QUERY_THROW); pDocument->setModel(xModel); diff --git a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx index 5844c7599071..210384a89681 100644 --- a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx +++ b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx @@ -49,7 +49,7 @@ namespace writerfilter { namespace ooxml { -OOXMLDocumentImpl::OOXMLDocumentImpl(OOXMLStream::Pointer_t pStream, const uno::Reference<task::XStatusIndicator>& xStatusIndicator, bool bSkipImages) +OOXMLDocumentImpl::OOXMLDocumentImpl(OOXMLStream::Pointer_t pStream, const uno::Reference<task::XStatusIndicator>& xStatusIndicator, bool bSkipImages, OUString const& rBaseURL) : mpStream(pStream) , mxStatusIndicator(xStatusIndicator) , mnXNoteId(0) @@ -61,6 +61,7 @@ OOXMLDocumentImpl::OOXMLDocumentImpl(OOXMLStream::Pointer_t pStream, const uno:: , mnProgressLastPos(0) , mnProgressCurrentPos(0) , mnProgressEndPos(0) + , m_rBaseURL(rBaseURL) { } @@ -265,7 +266,7 @@ OOXMLDocumentImpl::getSubStream(const OUString & rId) OOXMLDocumentImpl * pTemp; // Do not pass status indicator to sub-streams: they are typically marginal in size, so we just track the main document for now. - writerfilter::Reference<Stream>::Pointer_t pRet( pTemp = new OOXMLDocumentImpl(pStream, uno::Reference<task::XStatusIndicator>(), mbSkipImages )); + writerfilter::Reference<Stream>::Pointer_t pRet( pTemp = new OOXMLDocumentImpl(pStream, uno::Reference<task::XStatusIndicator>(), mbSkipImages, m_rBaseURL)); pTemp->setModel(mxModel); pTemp->setDrawPage(mxDrawPage); pTemp->setIsSubstream( true ); @@ -279,7 +280,7 @@ OOXMLDocumentImpl::getXNoteStream(OOXMLStream::StreamType_t nType, const Id & rT OOXMLStream::Pointer_t pStream = (OOXMLDocumentFactory::createStream(mpStream, nType)); // See above, no status indicator for the note stream, either. - OOXMLDocumentImpl * pDocument = new OOXMLDocumentImpl(pStream, uno::Reference<task::XStatusIndicator>(), mbSkipImages); + OOXMLDocumentImpl * pDocument = new OOXMLDocumentImpl(pStream, uno::Reference<task::XStatusIndicator>(), mbSkipImages, m_rBaseURL); pDocument->setXNoteId(nId); pDocument->setXNoteType(rType); pDocument->setModel(getModel()); @@ -927,9 +928,11 @@ uno::Sequence<beans::PropertyValue > OOXMLDocumentImpl::getEmbeddingsList( ) OOXMLDocument * OOXMLDocumentFactory::createDocument -(OOXMLStream::Pointer_t pStream, const uno::Reference<task::XStatusIndicator>& xStatusIndicator, bool mbSkipImages) +(OOXMLStream::Pointer_t pStream, + const uno::Reference<task::XStatusIndicator>& xStatusIndicator, + bool mbSkipImages, OUString const& rBaseURL) { - return new OOXMLDocumentImpl(pStream, xStatusIndicator, mbSkipImages); + return new OOXMLDocumentImpl(pStream, xStatusIndicator, mbSkipImages, rBaseURL); } }} diff --git a/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx b/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx index c0c8d335edb4..82a57deff7d4 100644 --- a/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx +++ b/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx @@ -63,6 +63,8 @@ class OOXMLDocumentImpl : public OOXMLDocument sal_Int32 mnProgressCurrentPos; /// End position, i.e. the estimated number of paragraphs. sal_Int32 mnProgressEndPos; + /// DocumentBaseURL + OUString const m_rBaseURL; protected: void resolveFastSubStream(Stream & rStream, @@ -90,7 +92,7 @@ protected: void resolveGlossaryStream(Stream & rStream); void resolveEmbeddingsStream(OOXMLStream::Pointer_t pStream); public: - OOXMLDocumentImpl(OOXMLStream::Pointer_t pStream, const css::uno::Reference<css::task::XStatusIndicator>& xStatusIndicator, bool bSkipImages); + OOXMLDocumentImpl(OOXMLStream::Pointer_t pStream, const css::uno::Reference<css::task::XStatusIndicator>& xStatusIndicator, bool bSkipImages, OUString const& rBaseURL); virtual ~OOXMLDocumentImpl(); virtual void resolve(Stream & rStream) override; @@ -138,6 +140,7 @@ public: void incrementProgress(); bool IsSkipImages() { return mbSkipImages; }; + OUString const& GetDocumentBaseURL() { return m_rBaseURL; }; }; }} #endif // OOXML_DOCUMENT_IMPL_HXX diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx index 3f5e40422289..1f09843c1a8b 100644 --- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx +++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx @@ -2009,7 +2009,11 @@ void OOXMLFastContextHandlerMath::process() SvGlobalName name( SO3_SM_CLASSID ); comphelper::EmbeddedObjectContainer container; OUString aName; - uno::Reference< embed::XEmbeddedObject > ref = container.CreateEmbeddedObject( name.GetByteSequence(), aName ); + uno::Sequence<beans::PropertyValue> objArgs(1); + objArgs[0].Name = "DefaultParentBaseURL"; + objArgs[0].Value <<= getDocument()->GetDocumentBaseURL(); + uno::Reference<embed::XEmbeddedObject> ref = + container.CreateEmbeddedObject(name.GetByteSequence(), objArgs, aName); assert(ref.is()); if (!ref.is()) return; |