[Libreoffice] How to call from one component to another (sw->starmath)
caolanm at redhat.com
Tue Aug 16 02:05:09 PDT 2011
On Mon, 2011-08-15 at 17:16 +0200, Lubos Lunak wrote:
> I'm implementing .docx OOXML support for writing math formulas. As this is
> something that could be used not only by Writer but also by other components,
> I want to implement the writing of the formula in Starmath. And even if I
> didn't want, Sm* classes (which implement and store the formulas) are in
> starmath/ , and sw-starmath do not link against each other.
> So, the question is, how do I call from sw to starmath without linking them
> together? I checked how the binary .doc filter does it, and it goes via ~10
> calls deep  that call some UNO interfaces and
> store the result in some private stream or whatever.
SvxMSExportOLEObjects::ExportOLEObject seems to have blown out of
control but the first and last branches are the typical ones. If it's a
generic object then copy it's storage under the destination storage
unchanged. If it's one of the special things that have an analogue in
the destination format save it to a temporary storage in another format
and copy that into the destination format instead.
//export to temporary stream "pStream"
::uno::Reference < io::XOutputStream > xOut =
new ::utl::OOutputStreamWrapper( *pStream );
aSeq.Value <<= xOut;
xStor->storeToURL( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "private:stream" )), aSeq );
//copy result to destination ole2 storage
SotStorageRef xOLEStor = new SotStorage( pStream, sal_True );
xOLEStor->CopyTo( &rDestStg );
> I already have a pointer to SmModel and SmDocShell (I can get it the same way
> the .doc code does) and just need to call their method, passing the XML
> serializer object as an argument, that's it.
Probably matters what the destination format is like ? Is it a
standalone thing and/or exists in a substorage/folder of the parent
format where it doesn't care about what it is inside ? i.e. I'd sort of
expect to basically just add another export filter to starmath for
whatever that format is, add it to SmDocShell::ConvertTo and call that
directly/indirectly. And have a save as... entry for the format if it
makes sense to have it standalone ?
That's not going to work if the destination format needs hooks back into
its surrounding container. Is that the problem ?
More information about the LibreOffice