diff options
author | joey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071> | 2007-08-12 18:23:00 +0000 |
---|---|---|
committer | joey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071> | 2007-08-12 18:23:00 +0000 |
commit | b2101850e2098684a864e6143725247606da96bb (patch) | |
tree | 69f1068a48aa782f1e3073c8900f6df3bcddd1d1 | |
parent | dc342e20703804d2ff2f36458e54e298226d5db0 (diff) |
further thoughts
-rw-r--r-- | doc/todo/support_for_plugins_written_in_other_languages.mdwn | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/doc/todo/support_for_plugins_written_in_other_languages.mdwn b/doc/todo/support_for_plugins_written_in_other_languages.mdwn index 65fd84f90..33378a4fe 100644 --- a/doc/todo/support_for_plugins_written_in_other_languages.mdwn +++ b/doc/todo/support_for_plugins_written_in_other_languages.mdwn @@ -8,19 +8,22 @@ that, never again.) Instead, I'm considering using XML RPC to let ikiwiki communicate with a child process that it can spawn. The child could then be any program, -written in any language. It could talk XML RPC via stdio. +written in any language. It could talk XML RPC via stdio. (This assumes +that most languages allow easily serialising XML::RPC calls and responses +to a file descriptor. Some XML RPC implementations may be hardcoded to use +http..) Here's how it would basically look, not showing the actual XML RPC used to pass values. - -> init + -> import <- 1 <- hook type => preprocess, id => foo -> 1 <- done 1 -> 1 - -> callback type => preprocess id => foo, page => bar + -> callback type => preprocess, id => foo, page => bar <- 1 <- getconfig url -> "http://example.com", ... @@ -41,7 +44,18 @@ From the plugin's POV: * It's probably sitting in an XML::RPC loop. * Get a command from ikiwiki. -* Call the appropriate callback. -* The callback can use XML::RPC to communicate with ikiwiki to get things +* Disaptch the command to the appropriate function. The main commands seem + to be "import" and "callback"; callback can call any function that the + plugin has registered a hook for. Others commands might include + "rcs_*" for RCS plugins.. +* The function can use XML::RPC to communicate with ikiwiki to get things like config values; and to call ikiwiki functions. * When the callback returns, use XML::RPC to send a "done" command to ikiwiki. + +Simple enough, really. ikiwiki would need to add accessor functions for +all important variables, such as "getconfig" and "setconfig". It would +probably be easiest for ikiwiki to dispatch a command by just evaling +IkiWiki::$command. + +Plugin programs could be dropped into /usr/share/ikiwiki/plugins/, and +load_plugin() would just open2 the plugin program and call import. |