("-" open; "~" in progress; "+" closed)

STAGE initial:

+ Port userfilter (v0.8) to current GIMP 2.x plugin template and
  Gtk+/Glib 2.x.


STAGE cleanup:

+ Bugfix: inefficient byte-code for some statements

+ Bugfix: incorrect behaviour of map() function

+ Bugfix: incorrect behaviour of rnd() function

+ Bugfix: the FF library loader is not fault-tolerant (generates
  "empty" filters when end-of-file is reached in .ffl; uf_gui.c: v0.8)

+ Bugfix: the fileio routines can bug on malicious input files.

+ Bugfix: filters loaded from .8bf and then saved will overwrite the
  Windows binary with text file

+ The library load routines should be moved to the file-i/o module.

+ Add "Help / About" dialog (stubbed in 0.8)

+ Port renderer to Gimp-2.x

+ Port dialog to Gtk-2.x / Gimp-2.x

+ Compile byte-code on load / new, not on render.  Alter "syntax
  check" button function to recompile code for formula, not just
  check syntax (i.e. recompile, if success, free old code and use
  new one)

+ Add localization tags.

~ Work on PDB names.  The plugin PDB name must not be confused with
  filters running in stand-alone mode or filters that have been
  converted to native Gimp plugins.  The latter should still be
  identifyable in the PDB list.  Also, no other filter should con-
  flict with the pdb names used for filters and derived plug-ins.

    * User Filter:
        plug-in-userfilter

    * Filter runing in stand-alone mode:
        user-filter-<filter title>

        This would identify the plug-in as a stand-alone filter.

    * Filters converted to native Gimp plug-ins:
        plug-in-userfilter-<filter title>

        This would identify the plug-in as a native code plug-in
        compiled from a filter.

~ Write help file / filter function manual.  Also have some (more or
  less useful) filters as examples.

  
STAGE completion:

+ Use a computed checksum as a random number seed instead of
  a constant.

+ The filter needs a search path editor to set directories for
  userfilters.

+ Rewrite GtkCList related stuff to using GtkTreeView

+ Selected filters should be loaded when they are (double-) clicked
  upon, not (only) when the "load" button is pressed.

+ Change the preview window so that the effect is shown on a
  thumbnailed image instead of a portion of the original image

+ Make the filter control tab display map labels.

+ The filter needs an rc-file to store the directory settings.

+ The filter control tab need a "reset values" button to reset
  sliders and random to their default for this filter / image
  (maybe one "reset" button per value).

+ Add enable/disable for map/controller (mutual exclusive).

+ Sort function of filter manager panel should be more sophisticated
  (sorting by category, e.g. should sort category, title; sorting
  by author should sort author, category, title; etc.)

+ Catch errors in the guf file routines.

+ Change the way the filter data is stored internally from static
  to dynamic (GKeyFile).  Required to keep internal data consistant
  with the new file format.

+ Implement a filter registry to make filter available in the GIMP
  menu instead of only through the plug-in filter manager.

+ Port checksum.c to GLib 2.16 (but keep compile-time fallback to
  ssl when not available)

+ Don't display the rnd() seed reset control for filters that do
  not utilize the rnd() function.

~ Create a shared library for all common functions of the compiled
  plugins created with uf2c (libtool: render.c, userfilter.c, etc.)

~ Translate localization items.

~ Add license information to created plug-in code (in uf2c.c).
  Generated code should by LGPL.

~ License of code used in shared library library to LGPL.

~ License of header files used for shared library should be LGPL.

- Extend the editor panel to allow for editing tooltip data for
  a filter.

- Extend the editor panel in a way that allows for locale data of
  the filter to be created / changed.

- Extend editor panel to allow for multi-line descriptions.

- Extend editor panel to allow for multi-line functions (increase
  readability of code).


STAGE extension:

+ Optimize byte-code.

+ Build a "quick filter" dialog for filters that are registered
  with the Gimp (requires an extension to run() in main.c, no
  editor is available for that filter when run that way; also
  requires a means of caching registered filter procedures).
  The same filter dialog can be used with filters transpiled to
  native Gimp plugins.

+ Define and add a native filter file format (GKeyFile) that can
  easily be expanded to include future features such as support of
  wider color channels or an extended function set for filter
  formulas.
  Additionally required tags for the native format include:
    + feature version information (for checking the compatibility
      of the filter source with the plugin)
    + a tooltip text for each slider
    + a tooltip text for the menu entry of the filter (if compiled
      to a standalone plugin or if registered with Gimp via the
      generic filter plugin); also possibly shown in the about panel.
    + Localizable entries of map label, slider label, tooltips and
      description.

+ Complete the filter transpiler (uf2c).  The transpiler should use
  a skeleton file rather than inline code as a plug-in template.

+ Create utility programs to export non-native filters to native .guf.

- Create a frontend (uftool) that can be used to automate the usage of
  uf2c and gimptool (taking a limited set of gimptool parameters).


STAGE final:

+ Move development to SourceForge.net
+ Re-enter userfilter at registry.gimp.org
~ Complete localization.
- Bump version to 1.0.0.


STAGE future:

- Prepare for 16-bit wide color channels.
- Port the renderer to GEGL where necessary.
- Function extension: alternate image source (layer of same image)
- Function extension: alternate image source (pattern bitmap)
- Function extension: query foreground and background color values.
- Function extension: query gradient map color values.
- Make the render function multi-threaded for an additional speed
  gain on multi-core CPU and multi-CPU platforms.