Photos
Blog
Projects
vanrenterghem.biz
projects
/
git.ikiwiki.info.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sign comment
[git.ikiwiki.info.git]
/
plugins
/
externaldemo
diff --git
a/plugins/externaldemo
b/plugins/externaldemo
index 6bbced30ee70cc697e7745a8c478df40ccf81733..24861dcc91d4c9dfe44e4277e80ce357f1e56577 100755
(executable)
--- a/
plugins/externaldemo
+++ b/
plugins/externaldemo
@@
-8,7
+8,6
@@
use strict;
print STDERR "externaldemo plugin running as pid $$\n";
use RPC::XML;
print STDERR "externaldemo plugin running as pid $$\n";
use RPC::XML;
-use RPC::XML::Parser;
use IO::Handle;
# autoflush stdout
use IO::Handle;
# autoflush stdout
@@
-23,14
+22,27
@@
sub rpc_read {
while (<>) {
$accum.=$_;
while (<>) {
$accum.=$_;
- # Kinda hackish approch to parse a single XML RPC out of the
- # accumulated input. Relies on calls always ending with a
- # newline, which ikiwiki's protocol requires be true.
+ # Kinda hackish approach to parse a single XML RPC out of the
+ # accumulated input. Perl's RPC::XML library doesn't
+ # provide a better way to do it. Relies on calls always ending
+ # with a newline, which ikiwiki's protocol requires be true.
if ($accum =~ /^\s*(<\?xml\s.*?<\/(?:methodCall|methodResponse)>)\n(.*)/s) {
$accum=$2; # the rest
# Now parse the XML RPC.
if ($accum =~ /^\s*(<\?xml\s.*?<\/(?:methodCall|methodResponse)>)\n(.*)/s) {
$accum=$2; # the rest
# Now parse the XML RPC.
- my $r = RPC::XML::Parser->new->parse($1);
+ my $parser;
+ eval q{
+ use RPC::XML::ParserFactory;
+ $parser = RPC::XML::ParserFactory->new;
+ };
+ if ($@) {
+ # old interface
+ eval q{
+ use RPC::XML::Parser;
+ $parser = RPC::XML::Parser->new;
+ };
+ }
+ my $r=$parser->parse($1);
if (! ref $r) {
die "error: XML RPC parse failure $r";
}
if (! ref $r) {
die "error: XML RPC parse failure $r";
}
@@
-100,15
+112,15
@@
sub import {
# stage of ikiwiki.
rpc_call("hook", type => "preprocess", id => "externaldemo", call => "preprocess");
# stage of ikiwiki.
rpc_call("hook", type => "preprocess", id => "externaldemo", call => "preprocess");
- # Here's an example of how to inject an arbitrary function into
- # ikiwiki. Ikiwiki will be able to call bob() just like any other
- # function.
- rpc_call("inject", name => "IkiWiki::bob", call => "bob");
-
# Here's an exmaple of how to access values in %IkiWiki::config.
print STDERR "url is set to: ".
rpc_call("getvar", "config", "url")."\n";
# Here's an exmaple of how to access values in %IkiWiki::config.
print STDERR "url is set to: ".
rpc_call("getvar", "config", "url")."\n";
+ # Here's an example of how to inject an arbitrary function into
+ # ikiwiki. Note use of automatic memoization.
+ rpc_call("inject", name => "IkiWiki::bob",
+ call => "formattime", memoize => 1);
+
print STDERR "externaldemo plugin successfully imported\n";
}
print STDERR "externaldemo plugin successfully imported\n";
}