+preprocessor time. Text output by a preprocessor directive will be passed
+through markdown (or whatever engine is used to htmlize the page) along
+with the rest of the page.
+
+# Other types of hooks
+
+Beyond PreProcessorDirectives, Other types of hooks that can be used by
+plugins include:
+
+## getopt
+
+ IkiWiki::hook(type => "getopt", id => "foo", call => \&getopt);
+
+This allows for plugins to perform their own processing of command-line
+options and so add options to the ikiwiki command line. It's called during
+command line processing, with @ARGV full of any options that ikiwiki was
+not able to process on its own. The function should process any options it
+can, removing them from @ARGV, and probably recording the configuration
+settings in %IkiWiki::config. It should take care not to abort if it sees
+an option it cannot process, and should just skip over those options and
+leave them in @ARGV.
+
+## checkconfig
+
+ IkiWiki::hook(type => "checkconfig", id => "foo", call => \&checkconfig);
+
+This is useful if the plugin needs to check for or modify ikiwiki's
+configuration. It's called early in the startup process. The
+function is passed no values. It's ok for the function to call
+IkiWiki::error if something isn't configured right.
+
+## filter
+
+ IkiWiki::hook(type => "filter", id => "foo", call => \&filter);
+
+Runs on the raw source of a page, before anything else touches it, and can
+make arbitrary changes. The function is passed named parameters `page` and
+`content` and should return the filtered content.
+
+## htmlize
+
+ IkiWiki::hook(type => "htmlize", id => "ext", call => \&filter);
+
+Runs on the raw source of a page and turns it into html. The id parameter
+specifies the filename extension that a file must have to be htmlized using
+this plugin. This is how you can add support for new and exciting markup
+languages to ikiwiki.
+
+## pagetemplate
+
+ IkiWiki::hook(type => "pagetemplate", id => "foo", call => \&pagetemplate);
+
+Each time a page (or part of a blog page, or an rss feed) is rendered, a
+[[template|templates]] is filled out. This hook allows modifying that
+template. The function is passed named parameters. The "page" and
+"destpage" parameters are the same as for a preprocess hook. The "template"
+parameter is a `HTML::Template` object that is the template that will be
+used to generate the page. The function can manipulate that template
+object.
+
+The most common thing to do is probably to call $template->param() to add
+a new custom parameter to the template. Note that in order to be robust,
+it's a good idea to check whether the template has a variable before trying
+to set it, as setting a variable that's not present is an error.