This directory contains code related to input and output. Note that input and output to particular file formats may be implemented elsewhere: 1. Internal extensions. See src/extensions/internal Input: CDR, EMF, WMF VSD WPG Output: SVG, PNG (via Cairo), PS, EPS, PDF, POV, ODF, EMF, WMF, XAML, LaTex. 2. External extensions (Python). See share/extensions Input: PS, EPS, PDF, SK, XAML, DXF, DIA, AI, ? Output: SVG (Layers/Optimized), SK1, XCF, HTML5, SIF, PTL, HPGL, DXF, FXG, XAML(?), CANVAS, ? 3. SVG (XML) low level code: src/xml/repr-io.h To do: 1. Move all file related code here (other than extensions). 2. Move extension input/output code into subdirectories within src/extensions/internal and share/extensions. 3. Separate out creating a document and creating a document window. The former belongs here, the later in src/ui. 4. Use std::string for all file names and use glibmm file utilities. 5. Use Glib::ustring for URI's and use Inkscape's URI utilities (if not available in glibmm). 6. Rewrite file export code to share a common base and to allow easy export of objects. Should be Gio::Action based. Things like cropping, selecting an object, hiding other objects, etc. should be done before the document is passed to the file type specific export code. This way, we can use the same export options for all file types (where they make sense). Only type specific options (e.g. PS Level) should be handled by the type specific code. Files to move here: src/util/ziptool.h (used by ODF, note SVG uses Inkscape::IO::GzipInputStream, can that be used instead?). src/helper/png-write.h