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:
static OOXMLDocument *
createDocument(OOXMLStream::Pointer_t pStream,
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
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);
......
......@@ -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);
}
}}
......
......@@ -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
......
......@@ -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;
......
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