The extensions system in Inkscape is a way for additional functionality to Inkscape, without effecting the core of the program itself. The proposal put forth here involves seperating this into two objects: what the extension does, and how it does it. This seperation allows for Inkscape extensions to be easy to use internally (by using the what it does functionality) but also easy to add different methods of doing it easily.
The first part of being extension is defining what the extension does. There are currently implemented several types, and there is bound to be more in the future.
Currently, there are Input, Output, Effect and Print extensions. The Input ones handle getting data into Inkscape. The Output ones act as Output filters for file formats. The Effect Extensions take the current document and apply some sort of effect to change the elements on the page. Print Extensions handle different types of print output, for different drivers or modes. Possible future extensions could be: Tool, File Dialog or Color Picker. This architecture does not limit the use of these.
There is a base class called 'Extension' and this is where all the functionality based classes derive from. In this class there are stored values include the name of the extension, the unique key that is used to describe it, and a few other global variables. Functionally, it implements the load and unload functionality for all extensions. This allows all extensions to be able to allocate and lower memory usage depending on if they are being used. Extensions that are implemented with loadable libraries can unload the libraries when they are not in use. Also, a timer will be implemented to unload the extension after a set amount of time of inactivity - allowing rarely used extensions to not continously take up valuable memory.
Another key feature of the Extension class is in the constructors and destructors for the class. When the extension constructor is called it creates the entity, and then registers it in the extension database. The extension database contains all of the extensions in the system and can be queried to get various lists of them. It is important for every extension to be in the database so that it will come up in those querys.
An input module provides a way to get data into Inkscape. This extension creates a document given a filename. This is done by using the 'open' method within the class. Also, there is a 'prefs' function which will generate a GtkDialog. This dialog is then used to get any settings that the incomming file and extension my use. This function is executed, and the dialog returns, before the open method is called.
To be continued ----