+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:
+
+## 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 ikiwiki 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 is rendered, a [[template|templates]] is filled out.
+This hook allows modifying that template. The function is passed the name
+of the page, and a `HTML::Template` object that is the template that will
+be used to generate the page. It can manipulate that template, the most
+common thing to do is probably to call $template->param() to add a new
+custom parameter to the template.