]> scripts.mit.edu Git - www/ikiwiki.git/blobdiff - IkiWiki/Plugin/otl.pm
* Add otl format plugin, which handles files as created by vimoutliner.
[www/ikiwiki.git] / IkiWiki / Plugin / otl.pm
diff --git a/IkiWiki/Plugin/otl.pm b/IkiWiki/Plugin/otl.pm
new file mode 100644 (file)
index 0000000..6406483
--- /dev/null
@@ -0,0 +1,41 @@
+#!/usr/bin/perl
+# outline markup
+package IkiWiki::Plugin::otl;
+
+use warnings;
+use strict;
+use IkiWiki;
+use IPC::Open2;
+
+sub import { #{{{
+       IkiWiki::hook(type => "htmlize", id => "otl", call => \&htmlize);
+} # }}}
+
+sub htmlize ($) { #{{{
+       my $tries=10;
+       while (1) {
+               eval {
+                       open2(*IN, *OUT, 'otl2html -S /dev/null -T /dev/stdin');
+               };
+               last unless $@;
+               $tries--;
+               if ($tries < 1) {
+                       IkiWiki::debug("failed to run otl2html: $@");
+                       return shift;
+               }
+       }
+       # open2 doesn't respect "use open ':utf8'"
+       binmode (IN, ':utf8'); 
+       binmode (OUT, ':utf8'); 
+       
+       print OUT shift;
+       close OUT;
+
+       local $/ = undef;
+       my $ret=<IN>;
+       $ret=~s/.*<body>//s;
+       $ret=~s/<body>.*//s;
+       return $ret;
+} # }}}
+
+1