Hi Peter,
On Mon, 2011-03-21 at 22:57 +0000, Peter Jentsch wrote:
after hibernating for a while I've started to finish where I left off in
removing the Java dependency from xsltfilter (was EasyHack De-Java-Ise
flat xml export).
Wonderful news :-)
I've ported the Java code from XSLTFilterOLEExtracter
(sic) to C++ and found there's a generic C++ interface to zlib hidden in
component/package (components/package/source/zipapi). It features
Inflater/Deflater classes that work pretty much like the ones in the Java
runtime. I figured how to compile against that by delivering the header
files to solver, but fail to link against the libpackage2.so library that
seems to contain the classes.
Ah - ok; so first off in the 'beautiful' theory of UNO components
mind-set that is a "bad idea" (TM) - on the other hand, I happen to not
believe in a beautiful world of UNO components - and tons of libraries
export both components and symbols that can be usefully re-used without
tons of inefficient time-wasting pain :-)
So - lets go for it.
The Zip implementation also seems to be
exposed as a UNO service, but that assumes I'm working on complete zip
files, while the OLE embedding stuff xslt filter uses assumes it only
works on single deflated entries.
Well - if you are using a zip file underneath - I would suggest using
the existing package/ UNO interface - it is not particularly pleasant,
but you can see how the images.zip stuff works for the theme in some
fairly simple code in vcl/ sniff around vcl/source/gdi/impimagetree.cxx
(eg.).
Should I try to rewrite the stuff to work on top of that service? Is there
a way to make Inflater/Deflater directly accessible to other code? I'm
stuck here and need some advice.
Of course; if you just have an individual compressed stream that you
want to work on I don't see why we can't export those symbols.
The problem is the component.map file that is linked against; cf.
package/util/makefile.mk:
SHL1VERSIONMAP=$(SOLARENV)$/src$/component.map
This hides all symbols except a few C entry points for good performance
reasons. Checkout objdump -T <libpackage*> to see for yourself.
If we want to selectively export symbols we need to do this
differently. See:
sw/inc/swdllapi.h
You need a header like that file inside package/ Then you need to add a
PACKAGE_DLL_PUBLIC to the symbols you want to export, and of course to
add a CFLAGS+=-DPACKAGE_DLLIMPLEMENTATION type thing in the
makefile.mk's where you're compiling that stuff.
Then drop the map file in util/makefile.mk; and -hopefully- you have a
library that can be linked to & re-used easily.
Hope that helps !
Looking forward to seeing the fruit of your labour,
ATB,
Michael.
--
michael.meeks@novell.com <><, Pseudo Engineer, itinerant idiot
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.