]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - doc/plugins/write.mdwn
move template documentation into the basewiki, in the templates page
[git.ikiwiki.info.git] / doc / plugins / write.mdwn
index c4266019404717ed1deee9104994bd39d1705db3..6593ab018573db50e7f275263e12ba3a824312f9 100644 (file)
@@ -20,6 +20,8 @@ being edited.
 ## Registering plugins
 
 All plugins should `use IkiWiki` to import the ikiwiki plugin interface.
+It's a good idea to include the version number of the plugin interface that
+your plugin expects: `use IkiWiki 2.00`
 
 Plugins should, when imported, call `hook()` to hook into ikiwiki's
 processing. The function uses named parameters, and use varies depending on
@@ -30,12 +32,6 @@ hook, a "id" paramter, which should be a unique string for this plugin, and
 a "call" parameter, which is a reference to a function to call for the
 hook.
 
-An optional "scan" parameter, if set to a true value, makes the hook be
-called during the preliminary scan that ikiwiki makes of updated pages,
-before begining to render pages. This parameter should be set to true if
-the hook modifies data in `%links`. Note that doing so will make the hook
-be run twice per page build, so avoid doing it for expensive hooks.
-
 An optional "last" parameter, if set to a true value, makes the hook run
 after all other hooks of its type. Useful if the hook depends on some other
 hook being run first.
@@ -66,21 +62,22 @@ configuration. It's called early in the startup process. The
 function is passed no values. It's ok for the function to call
 `error()` if something isn't configured right.
 
-### filter
+### needsbuild
 
-       hook(type => "filter", id => "foo", call => \&filter);
+       hook(type => "needsbuild", id => "foo", call => \&needsbuild);
 
-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.
+This allows a plugin the manipulate the list of files that need to be
+built when the wiki is refreshed. The function is passed a reference to an
+array of pages that will be rebuilt, and can modify the array, either
+adding or removing files from it.
 
-### scan
+### filter
 
-       hook(type => "scan", id => "foo", call => \&scan);
+       hook(type => "filter", id => "foo", call => \&filter);
 
-This is identical to a preprocess hook (see below), except that it is
-called in the initial pass that scans pages for data that will be used in
-later passes. Scan hooks are the only hook that should modify `%links`.
+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",
+"destpage", and "content". It should return the filtered content.
 
 ### preprocess
 
@@ -102,6 +99,12 @@ parameters included in the directive are included as named parameters as
 well. Whatever the function returns goes onto the page in place of the
 directive.
 
+An optional "scan" parameter, if set to a true value, makes the hook be
+called during the preliminary scan that ikiwiki makes of updated pages,
+before begining to render pages. This parameter should be set to true if
+the hook modifies data in `%links`. Note that doing so will make the hook
+be run twice per page build, so avoid doing it for expensive hooks.
+
 Note that if the [[htmlscrubber]] is enabled, html in
 [[PreProcessorDirective]] output is sanitised, which may limit what your
 plugin can do. Also, the rest of the page content is not in html format at
@@ -266,9 +269,9 @@ use the following hashes, using a page name as the key:
 
 * `links` lists the names of each page that a page links to, in an array
   reference.
-* `%renderedfiles` lists names of the files rendered by a page, in an array
-  reference.
-* `%pagesources` contains the name of the source file for a page.
+* `%destsources` contains the name of the source file used to create each
+  destination file.
+* `%pagesources` contains the name of the source file for each page.
 
 Also, the %IkiWiki::version variable contains the version number for the
 ikiwiki program.
@@ -316,12 +319,15 @@ page created from it. (Ie, it appends ".html".)
 
 Makes the specified page depend on the specified [[PageSpec]].
 
-#### `pagespec_match($$;$)`
+#### `pagespec_match($$;@)`
+
+Passed a page name, and [[PageSpec]], returns true if the [[PageSpec]]
+matches the page.
 
-Passed a page name, a [[PageSpec]], and the location the [[PageSpec]] should
-be matched against, returns true if the [[PageSpec]] matches the page. (If
-the third parameter is not passed, relative PageSpecs will match relative to
-the top of the wiki.)
+Additional named parameters can be passed, to further limit the match.
+The most often used is "location", which specifies the location the
+PageSpec should match against. If not passed, relative PageSpecs will match
+relative to the top of the wiki.
 
 #### `bestlink($$)`
 
@@ -441,6 +447,7 @@ It's also possible to write plugins that add new functions to
 [[PageSpecs|PageSpec]]. Such a plugin should add a function to the
 IkiWiki::PageSpec package, that is named `match_foo`, where "foo()" is
 how it will be accessed in a [[PageSpec]]. The function will be passed
-three parameters: The name of the page being matched, the thing to match
-against, and the page that the matching is occuring on. It should return
-true if the page matches.
+two parameters: The name of the page being matched, and the thing to match
+against. It may also be passed additional, named parameters. It should return
+a IkiWiki::SuccessReason object if the match succeeds, or an
+IkiWiki::FailReason object if the match fails.