Kaydet (Commit) 8338e278 authored tarafından Michael Stahl's avatar Michael Stahl

writerfilter: set a BaseURL on embedded math objects

Change-Id: I9a500e079c892e281bdfee9627641f118261e0f8
üst 75a200f3
...@@ -254,7 +254,7 @@ public: ...@@ -254,7 +254,7 @@ public:
static OOXMLDocument * static OOXMLDocument *
createDocument(OOXMLStream::Pointer_t pStream, createDocument(OOXMLStream::Pointer_t pStream,
const css::uno::Reference<css::task::XStatusIndicator>& xStatusIndicator, const css::uno::Reference<css::task::XStatusIndicator>& xStatusIndicator,
bool bSkipImage); bool bSkipImage, OUString const& rBaseURL);
}; };
......
...@@ -154,6 +154,7 @@ sal_Bool WriterFilter::filter(const uno::Sequence< beans::PropertyValue >& aDesc ...@@ -154,6 +154,7 @@ sal_Bool WriterFilter::filter(const uno::Sequence< beans::PropertyValue >& aDesc
utl::MediaDescriptor aMediaDesc(aDescriptor); utl::MediaDescriptor aMediaDesc(aDescriptor);
bool bRepairStorage = aMediaDesc.getUnpackedValueOrDefault("RepairPackage", false); bool bRepairStorage = aMediaDesc.getUnpackedValueOrDefault("RepairPackage", false);
bool bSkipImages = aMediaDesc.getUnpackedValueOrDefault("FilterOptions", OUString("")) == "SkipImages"; bool bSkipImages = aMediaDesc.getUnpackedValueOrDefault("FilterOptions", OUString("")) == "SkipImages";
OUString const baseURI = aMediaDesc.getUnpackedValueOrDefault("DocumentBaseURL", OUString(""));
uno::Reference< io::XInputStream > xInputStream; uno::Reference< io::XInputStream > xInputStream;
try try
...@@ -174,7 +175,7 @@ sal_Bool WriterFilter::filter(const uno::Sequence< beans::PropertyValue >& aDesc ...@@ -174,7 +175,7 @@ sal_Bool WriterFilter::filter(const uno::Sequence< beans::PropertyValue >& aDesc
//create the tokenizer and domain mapper //create the tokenizer and domain mapper
writerfilter::ooxml::OOXMLStream::Pointer_t pDocStream = writerfilter::ooxml::OOXMLDocumentFactory::createStream(m_xContext, xInputStream, bRepairStorage); 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>()); 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); uno::Reference<frame::XModel> xModel(m_xDstDoc, uno::UNO_QUERY_THROW);
pDocument->setModel(xModel); pDocument->setModel(xModel);
......
...@@ -49,7 +49,7 @@ namespace writerfilter { ...@@ -49,7 +49,7 @@ namespace writerfilter {
namespace ooxml 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) : mpStream(pStream)
, mxStatusIndicator(xStatusIndicator) , mxStatusIndicator(xStatusIndicator)
, mnXNoteId(0) , mnXNoteId(0)
...@@ -61,6 +61,7 @@ OOXMLDocumentImpl::OOXMLDocumentImpl(OOXMLStream::Pointer_t pStream, const uno:: ...@@ -61,6 +61,7 @@ OOXMLDocumentImpl::OOXMLDocumentImpl(OOXMLStream::Pointer_t pStream, const uno::
, mnProgressLastPos(0) , mnProgressLastPos(0)
, mnProgressCurrentPos(0) , mnProgressCurrentPos(0)
, mnProgressEndPos(0) , mnProgressEndPos(0)
, m_rBaseURL(rBaseURL)
{ {
} }
...@@ -265,7 +266,7 @@ OOXMLDocumentImpl::getSubStream(const OUString & rId) ...@@ -265,7 +266,7 @@ OOXMLDocumentImpl::getSubStream(const OUString & rId)
OOXMLDocumentImpl * pTemp; 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. // 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->setModel(mxModel);
pTemp->setDrawPage(mxDrawPage); pTemp->setDrawPage(mxDrawPage);
pTemp->setIsSubstream( true ); pTemp->setIsSubstream( true );
...@@ -279,7 +280,7 @@ OOXMLDocumentImpl::getXNoteStream(OOXMLStream::StreamType_t nType, const Id & rT ...@@ -279,7 +280,7 @@ OOXMLDocumentImpl::getXNoteStream(OOXMLStream::StreamType_t nType, const Id & rT
OOXMLStream::Pointer_t pStream = OOXMLStream::Pointer_t pStream =
(OOXMLDocumentFactory::createStream(mpStream, nType)); (OOXMLDocumentFactory::createStream(mpStream, nType));
// See above, no status indicator for the note stream, either. // 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->setXNoteId(nId);
pDocument->setXNoteType(rType); pDocument->setXNoteType(rType);
pDocument->setModel(getModel()); pDocument->setModel(getModel());
...@@ -927,9 +928,11 @@ uno::Sequence<beans::PropertyValue > OOXMLDocumentImpl::getEmbeddingsList( ) ...@@ -927,9 +928,11 @@ uno::Sequence<beans::PropertyValue > OOXMLDocumentImpl::getEmbeddingsList( )
OOXMLDocument * OOXMLDocument *
OOXMLDocumentFactory::createDocument 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);
} }
}} }}
......
...@@ -63,6 +63,8 @@ class OOXMLDocumentImpl : public OOXMLDocument ...@@ -63,6 +63,8 @@ class OOXMLDocumentImpl : public OOXMLDocument
sal_Int32 mnProgressCurrentPos; sal_Int32 mnProgressCurrentPos;
/// End position, i.e. the estimated number of paragraphs. /// End position, i.e. the estimated number of paragraphs.
sal_Int32 mnProgressEndPos; sal_Int32 mnProgressEndPos;
/// DocumentBaseURL
OUString const m_rBaseURL;
protected: protected:
void resolveFastSubStream(Stream & rStream, void resolveFastSubStream(Stream & rStream,
...@@ -90,7 +92,7 @@ protected: ...@@ -90,7 +92,7 @@ protected:
void resolveGlossaryStream(Stream & rStream); void resolveGlossaryStream(Stream & rStream);
void resolveEmbeddingsStream(OOXMLStream::Pointer_t pStream); void resolveEmbeddingsStream(OOXMLStream::Pointer_t pStream);
public: 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 ~OOXMLDocumentImpl();
virtual void resolve(Stream & rStream) override; virtual void resolve(Stream & rStream) override;
...@@ -138,6 +140,7 @@ public: ...@@ -138,6 +140,7 @@ public:
void incrementProgress(); void incrementProgress();
bool IsSkipImages() { return mbSkipImages; }; bool IsSkipImages() { return mbSkipImages; };
OUString const& GetDocumentBaseURL() { return m_rBaseURL; };
}; };
}} }}
#endif // OOXML_DOCUMENT_IMPL_HXX #endif // OOXML_DOCUMENT_IMPL_HXX
......
...@@ -2009,7 +2009,11 @@ void OOXMLFastContextHandlerMath::process() ...@@ -2009,7 +2009,11 @@ void OOXMLFastContextHandlerMath::process()
SvGlobalName name( SO3_SM_CLASSID ); SvGlobalName name( SO3_SM_CLASSID );
comphelper::EmbeddedObjectContainer container; comphelper::EmbeddedObjectContainer container;
OUString aName; 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()); assert(ref.is());
if (!ref.is()) if (!ref.is())
return; return;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment