]> sipb.mit.edu Git - ikiwiki.git/blobdiff - doc/plugins/write/external.mdwn
web commit by http://sabr.myopenid.com/
[ikiwiki.git] / doc / plugins / write / external.mdwn
index 0abc9b0a0d791eb3448dd11664d7b065101b88b6..bda34b77188301c67cdf30c7dc85ac5ab492c008 100644 (file)
@@ -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