]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - doc/plugins/write/external.mdwn
rename plugin
[git.ikiwiki.info.git] / doc / plugins / write / external.mdwn
index 2ee841e612d149dbddf3036f2474c5ff1803609c..cbcd9bf19d1e5222dfdb57852928dc9475dbb331 100644 (file)
@@ -1,8 +1,10 @@
 External plugins are standalone, executable programs, that can be written
 in any language. When ikiwiki starts up, it runs the program, and
 External plugins are standalone, executable programs, that can be written
 in any language. When ikiwiki starts up, it runs the program, and
-communicates with it using XML RPC. If you want to [[write]] an external
+communicates with it using [XML RPC][xmlrpc]. If you want to [[write]] an external
 plugin, read on..
 
 plugin, read on..
 
+[xmlrpc]: http://www.xmlrpc.com/
+
 ikiwiki contains one sample external plugin, named `externaldemo`. This is
 written in perl, but is intended to be an example of how to write an
 external plugin in your favorite programming language. Wow us at how much
 ikiwiki contains one sample external plugin, named `externaldemo`. This is
 written in perl, but is intended to be an example of how to write an
 external plugin in your favorite programming language. Wow us at how much
@@ -11,7 +13,7 @@ easier you can do the same thing in your favorite language. ;-)
 There's now a second external plugin, the [[rst]] plugin, written in
 python. It uses a `proxy.py`, a helper library for ikiwiki python plugins.
 
 There's now a second external plugin, the [[rst]] plugin, written in
 python. It uses a `proxy.py`, a helper library for ikiwiki python plugins.
 
-[[toc ]]
+[[!toc ]]
 
 ## How external plugins use XML RPC
 
 
 ## How external plugins use XML RPC
 
@@ -53,8 +55,8 @@ 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")`.
 
 stored state, call `getstate("page", "id", "key")`, and to store state,
 call `setstate("page", "id", "key", "value")`.
 
-To access ikiwiki's ARGV, call `getargv()`. To change its ARGV, call
-`setargv(value)`.
+To access ikiwiki's ARGV array, call `getargv()`. To change its ARGV, call
+`setargv(array)`.
 
 ## Notes on function parameters
 
 
 ## Notes on function parameters
 
@@ -79,6 +81,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.
 
 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
 ## Function injection
 
 Some parts of ikiwiki are extensible by adding functions. For example, the