3 package IkiWiki::Plugin::otl;
8 use open qw{:utf8 :std};
11 hook(type => "filter", id => "otl", call => \&filter);
12 hook(type => "htmlize", id => "otl", call => \&htmlize);
19 # Munge up check boxes to look a little bit better. This is a hack.
20 my $checked=htmllink($params{page}, $params{page},
21 "smileys/star_on.png", linktext => "[X]");
22 my $unchecked=htmllink($params{page}, $params{page},
23 "smileys/star_off.png", linktext => "[_]");
24 $params{content}=~s/^(\s*)\[X\]\s/${1}$checked /mg;
25 $params{content}=~s/^(\s*)\[_\]\s/${1}$unchecked /mg;
27 return $params{content};
30 sub htmlize (@) { #{{{
33 # Can't use open2 since otl2html doesn't play nice with buffering.
34 # Instead, fork off a child process that will run otl2html and feed
35 # it the content. Then read otl2html's response.
40 $pid = open(KID_TO_READ, "-|");
41 unless (defined $pid) {
44 debug("failed to fork: $@");
45 return $params{content};
55 $pid = open(KID_TO_WRITE, "|-");
56 unless (defined $pid) {
59 debug("failed to fork: $@");
60 print $params{content};
67 if (! exec 'otl2html', '-S', '/dev/null', '-T', '/dev/stdin') {
68 debug("failed to run otl2html: $@");
69 print $params{content};
74 print KID_TO_WRITE $params{content};
81 my $ret=<KID_TO_READ>;
87 $ret=~s/<div class="Footer">.*//s;