in the example above) is called, and is passed named parameters. A "page"
parameter gives the name of the page that embedded the preprocessor
directive, while a "destpage" parameter gives the name of the page the
-content is going to (different for inlined pages). All 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.
+content is going to (different for inlined pages), and a "preview"
+parameter is set to a true value if the page is being previewed. All
+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.
Note that if the [[htmlscrubber]] is enabled, html in
[[PreProcessorDirective]] output is sanitised, which may limit what your
Logs a debugging message. These are supressed unless verbose mode is turned
on.
-#### `error($)`
+#### `error($;$)`
-Aborts with an error message.
+Aborts with an error message. If the second parameter is passed, it is a
+function that is called after the error message is printed, to do any final
+cleanup.
Note that while any plugin can use this for a fatal error, plugins should
try to avoid dying on bad input, as that will halt the entire wiki build
#### `pagespec_match($$;$)`
-Passed a page name, a [[PageSpec]], and the location the glob 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
+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.)
#### `bestlink($$)`
goes down the directory tree to the base looking for matching
pages, as described in [[SubPage/LinkingRules]].
-#### `htmllink($$$;$$$)`
+#### `htmllink($$$;@)`
Many plugins need to generate html links and add them to a page. This is
done by using the `htmllink` function. The usual way to call
some of the hook functions above; the ones that are not passed it are not used
during inlining and don't need to worry about this issue.
-The remaining three optional parameters to `htmllink` are:
+After the three required parameters, named parameters can be used to
+control some options. These are:
-1. noimageinline - set to true to avoid turning links into inline html images
-1. forcesubpage - set to force a link to a subpage
-1. linktext - set to force the link text to something
+* noimageinline - set to true to avoid turning links into inline html images
+* forcesubpage - set to force a link to a subpage
+* linktext - set to force the link text to something
+* anchor - set to make the link include an anchor
#### `readfile($;$)`
A failure to read the file will result in it dying with an error.
-#### `writefile($$$;$)`
+#### `writefile($$$;$$)`
Given a filename, a directory to put it in, and the file's content,
writes a file.
-The optional second parameter, if set to a true value, makes the file be
+The optional fourth parameter, if set to a true value, makes the file be
written in binary mode.
+The optional fifth parameter can be used to pass a function reference that
+will be called to handle writing to the file. The function will be called
+and passed a file descriptor it should write to, and an error recovery
+function it should call if the writing fails. (You will not normally need to
+use this interface.)
+
A failure to write the file will result in it dying with an error.
If the destination directory doesn't exist, it will first be created.
rcs\_getctime does nothing except for throwing an error.
See [[about_RCS_backends]] for some more info.
+
+## PageSpec plugins
+
+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 two
+parameters: The name of the page being matched, and the thing to match
+against. It should return true if the page matches.