>> I wrote a quick patch for dia (CVS tree as of Nov 23) that adds support
>> for opening and manipulating GNOME VFS URIs. I did this using
>> libgnomevfs, libgsf and the gsf_xml_parser_context function. The new
>> code is enabled as long as the GNOME preprocessor variable is #define'd
>> (--enable-gnome).
>> So now "dia file:///path/to/diagram.dia" should work, with the following
>> caveats:
>> 1. For some reason compression is not working (it only works with
>> uncompressed files). If anyone has experience with gsf_input_gzip_new,
>> I could use your help!
>> 2. I have not yet looked at the import and export filters, but I suspect
>> they may need modification too.
> Two so far: Shouldn't Gnome fall back on normal file opening if VFS fails?
I'm of the opinion that it should not. GNOME's VFS is a pretty
fundamental module within the desktop. If file:///foo.dia can't be opened
then I think it should be assumed that it doesn't exist. Falling back
to stdio seems like it would just add complexity.
> And the bit about creating a tmp file is the way it is for Win32
> compatibility.
The new code will have to be used when GNOME is #define'd until I find
a gsf/gnomevfs-happy mkstemp. I'll put the Win32 code back in as the
default, though.
> The import and export filters ought to be redone to call just one file
> opening function, then. We don't want to have this complexity in 15
> different places.
Right. I did a quick analysis of dia's plugins and this is what I discovered:
Type File Import/Export Interface
==== ==== ============= =========
png export_png.c export libpng
(need to use png_set_read_fn)
ps diapsrenderer.c export fprintf
cgm plugins/cgm export putc
dxf plugins/dxf both fprintf/fgets
hpgl plugins/hpgl export fprintf
metapost plugins/metapost export fprintf
pixbuf plugins/pixbuf both gdk_pixbuf_save/
gdk_pixbuf_new_from_file
pstricks plugins/pstricks export fprintf
shape plugins/svg export libxml2?
svg plugins/svg both libxml2?
wpg plugins/wpg export fwrite
xfig plugins/xfig both fprintf/fscanf
xslt plugins/xslt both libxml2?
Since most plugins use stdio, I think I should write a #ifdef'ed
mini-library that provides GNOME VFS if available but falls back on
direct stdio. All of these modules could then cleanly use that code.
And the exceptions (like export_png.c/libpng and pixbuf/gdk_pixbuf_save)
could be provided a couple of lines of wrapper to glue them in.
The result should be little or no #ifdef's in plugin code.
--
Mike
:wq