3 package IkiWiki::Plugin::otl;
8 use open qw{:utf8 :std};
11 hook(type => "getsetup", id => "otl", call => \&getsetup);
12 hook(type => "filter", id => "otl", call => \&filter);
13 hook(type => "htmlize", id => "otl", call => \&htmlize);
17 sub getsetup () { #{{{
21 rebuild => 1, # format plugin
28 # Munge up check boxes to look a little bit better. This is a hack.
29 my $checked=htmllink($params{page}, $params{page},
30 "smileys/star_on.png", linktext => "[X]");
31 my $unchecked=htmllink($params{page}, $params{page},
32 "smileys/star_off.png", linktext => "[_]");
33 $params{content}=~s/^(\s*)\[X\]\s/${1}$checked /mg;
34 $params{content}=~s/^(\s*)\[_\]\s/${1}$unchecked /mg;
36 return $params{content};
39 sub htmlize (@) { #{{{
42 # Can't use open2 since otl2html doesn't play nice with buffering.
43 # Instead, fork off a child process that will run otl2html and feed
44 # it the content. Then read otl2html's response.
49 $pid = open(KID_TO_READ, "-|");
50 unless (defined $pid) {
53 debug("failed to fork: $@");
54 return $params{content};
64 $pid = open(KID_TO_WRITE, "|-");
65 unless (defined $pid) {
68 debug("failed to fork: $@");
69 print $params{content};
76 if (! exec 'otl2html', '-S', '/dev/null', '-T', '/dev/stdin') {
77 debug("failed to run otl2html: $@");
78 print $params{content};
83 print KID_TO_WRITE $params{content};
90 my $ret=<KID_TO_READ>;
96 $ret=~s/<div class="Footer">.*//s;