summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2015-12-15 16:18:24 +0100
committerMichael Stahl <mstahl@redhat.com>2015-12-15 19:55:56 +0100
commit751b6f2ccb4993e1a9007f47bad6b98e53b7ed77 (patch)
treec4b154f53615131d53bd0e3ed0243183646deccc /writerfilter
parent06456a9951783b5696592ae587fb209cd0411144 (diff)
writerfilter: set a BaseURL on embedded math objects
Change-Id: I9a500e079c892e281bdfee9627641f118261e0f8 (cherry picked from commit 8338e2783f223aec176a3f06f78abd7a60ea2e0a)
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/inc/ooxml/OOXMLDocument.hxx2
-rw-r--r--writerfilter/source/filter/WriterFilter.cxx3
-rw-r--r--writerfilter/source/ooxml/OOXMLDocumentImpl.cxx13
-rw-r--r--writerfilter/source/ooxml/OOXMLDocumentImpl.hxx5
-rw-r--r--writerfilter/source/ooxml/OOXMLFastContextHandler.cxx6
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 76942d7f28db..7accf9568d78 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());
@@ -934,9 +935,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 06ac16622ef5..83a38a33b3c1 100644
--- a/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx
+++ b/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx
@@ -64,6 +64,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,
@@ -91,7 +93,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;
@@ -139,6 +141,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 f808bc55ee0e..ed8e7fc98468 100644
--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
@@ -2022,7 +2022,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;