]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - doc/plugins/write.mdwn
more links
[git.ikiwiki.info.git] / doc / plugins / write.mdwn
index 245f7c9ee8dad10063c050bb90d416d1927bcc3c..93c6d1d5cbb216975384bf904f54d80cb14e8c6f 100644 (file)
@@ -35,10 +35,13 @@ This is probably the most common use of a plugin.
 Replace "foo" with the command name that will be used inside brackers for
 the preprocessor directive.
 
 Replace "foo" with the command name that will be used inside brackers for
 the preprocessor directive.
 
-Each time the directive is processed, the referenced function (`preprocess` 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. 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.
+Each time the directive is processed, the referenced function (`preprocess`
+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 gices 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.
 
 ## Error handing
 
 
 ## Error handing
 
@@ -53,19 +56,33 @@ 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
 preprocessor time. Text output by a preprocessor directive will be passed
 [[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
 preprocessor time. Text output by a preprocessor directive will be passed
-through markdown along with the rest of the page.
+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:
 
 
 # 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);
 
 ## 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
+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.
 
 function is passed no values. It's ok for the function to call
 IkiWiki::error if something isn't configured right.
 
@@ -77,25 +94,44 @@ 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.
 
 make arbitrary changes. The function is passed named parameters `page` and
 `content` and should return the filtered content.
 
-## sanitize
+## htmlize
 
 
-       IkiWiki::hook(type => "filter", id => "foo", call => \&sanitize);
+       IkiWiki::hook(type => "htmlize", id => "ext", call => \&filter);
 
 
-Use this to implement html sanitization or anything else that needs to
-modify the content of a page after it has been fully converted to html.
-The function is passed the page content and should return the sanitized
-content.
+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);
 
 
 ## 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.
+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.
+
+       if ($template->query(name => 'foo')) {
+               $template->param("foo" => "bar");
+       }
+
+## sanitize
+
+       IkiWiki::hook(type => "sanitize", id => "foo", call => \&sanitize);
+
+Use this to implement html sanitization or anything else that needs to
+modify the content of a page after it has been fully converted to html.
+The function is passed the page content and should return the sanitized
+content.
 
 ## delete
 
 
 ## delete
 
@@ -147,6 +183,23 @@ use the following hashes, using a page name as the key:
   it is by using the IkiWiki::add_depends function, which takes as its
   parameters the page name and a [[GlobList]] of dependencies to add.
 
   it is by using the IkiWiki::add_depends function, which takes as its
   parameters the page name and a [[GlobList]] of dependencies to add.
 
+# A note on generating html links
+
+Many plugins need to generate html links and add them to a page. This is
+done by using the `IkiWiki::htmllink` function. The usual way to call
+htmlllink is:
+
+       htmllink($page, $page, $link)
+
+Why is $page repeated? Because if a page is inlined inside another, and a
+link is placed on it, the right way to make that link is actually:
+
+       htmllink($page, $destpage, $link)
+
+Here $destpage is the inlining page. A destpage parameter is passed to 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.
+
 # RCS plugins
 
 ikiwiki's support for revision control systems also uses pluggable perl
 # RCS plugins
 
 ikiwiki's support for revision control systems also uses pluggable perl