* Added plugin system, currently only supporting for PreProcessorDirectives.
[ikiwiki] / doc / todo / plugin.mdwn
1 A plugin system should ideally support things like:
2
3 * [[todo/lists]] of pages, of mising pages / broken links, of registered users, etc
4 * a [[todo/link_map]]
5 * [[todo/sigs]]
6 * [[pageindexes]]
7 * Wiki stats, such as the total number of pages, total number of links, most linked to pages, etc, etc.
8 * wiki info page, giving the ikiwiki version etc
9 * would it be useful to reimplement the hyperestradier search integration as a plugin?
10 * Support [[RecentChanges]] as a regular page containing a plugin that updates each time there is a change, and statically builds the recent changes list. (Would this be too expensive/inflexible? There might be other ways to do it as a plugin, like making all links to RecentChanges link to the cgi and have the cgi render it on demand.)
11 * etc
12 * For another type of plugin, see [[todo/PluggableRenderers]]. 
13
14 Another, separate plugin system that already (mostly) exists in ikiwiki is
15 the RCS backend, which allows writing modules to drive other RCS systems
16 than subversion.
17
18 ## preprocessor plugins
19
20 done
21
22 ## case study: Moin Moin plugins
23
24 See <http://moinmoin.wikiwikiweb.de/MoinDev/PluginConcept>
25
26 6 different types of plugins:
27
28 * *actions* are possibly out of scope for ikiwiki, this is probably what it uses for cgi script type stuff. Unless ikiwiki wants to allow pluggable CGI script stuff, it doesn't need these.
29 * *parsers* and *formatters* are basically what I've been calling [[PluggableRenderers]]. MoinMoin separates these, so that a page is parsed to (presumbly) some intermediate form before being output as html or some other form. That's a nice separation, but what to do about things like markdown that are both a parser and a formatter?
30 * *macros* and *processors* are analagous to preprocessor directives. A processor can operate on a large block of text though.
31 * *themes* should be irrellevant (ikiwiki has [[templates]]).