X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/65dca9f89d82cc512f1c10ac8cf70696243e650a..17c276dea5f623e97affad9f778134c40606de5f:/doc/plugins/write/external.mdwn diff --git a/doc/plugins/write/external.mdwn b/doc/plugins/write/external.mdwn index 0abc9b0a0..bda34b771 100644 --- a/doc/plugins/write/external.mdwn +++ b/doc/plugins/write/external.mdwn @@ -9,8 +9,7 @@ external plugin in your favorite programming language. Wow us at how much easier you can do the same thing in your favorite language. ;-) There's now a second external plugin, the [[rst]] plugin, written in -python. (Could someone convert it into a python library that can be used by -other plugins?) +python. It uses a `proxy.py`, a helper library for ikiwiki python plugins. [[toc ]] @@ -49,6 +48,14 @@ to access any such global hash. To get the "url" configuration value, call `getvar("config", "url")`. To set it, call `setvar("config", "url", "http://example.com/)`. +The `%pagestate` is a special hash with a more complex format. To access +it, external plugins can use the `getstate` and `setstate` RPCs. To access +stored state, call `getstate("page", "id", "key")`, and to store state, +call `setstate("page", "id", "key", "value")`. + +To access ikiwiki's ARGV array, call `getargv()`. To change its ARGV, call +`setargv(array)`. + ## Notes on function parameters The [[plugin_interface_documentation|write]] talks about functions that take @@ -72,6 +79,19 @@ Other languages might not find it so easy. If not, it might be a good idea to convert these named parameters into something more natural for the language as part of their XML RPC interface. +## undef + +XML RPC has a limitation that it does not have a way to pass +undef/NULL/None. There is an extension to the protocol that supports this, +but it is not yet available in the [[cpan XML::RPC]] library used by +ikiwiki. + +Until the extension is available, ikiwiki allows undef to be communicated +over XML RPC by passing a sentinal value, a hash with a single key "null" +with a value of an empty string. External plugins that need to communicate +null values to or from ikiwiki will have to translate between undef and +the sentinal. + ## Function injection Some parts of ikiwiki are extensible by adding functions. For example, the @@ -95,9 +115,6 @@ with functions that take or return such references. That means you can't FormBuilder perl objects), or use it to call `template()` (which returns a perl HTML::Template object). -Also. the `getopt` hook doesn't work, as ARGV is not available to the external -plugin. - ## Performance issues Since each external plugin is a separate process, when ikiwiki is