t3h c0d35
authorhttps://www.google.com/accounts/o8/id?id=AItOawnxp2XU8gIribhhGhGuYtU6eMMwHv5gUGI <Amitai@web>
Wed, 8 Jun 2011 19:41:47 +0000 (19:41 +0000)
committeradmin <admin@branchable.com>
Wed, 8 Jun 2011 19:41:47 +0000 (19:41 +0000)
doc/plugins/contrib/mandoc.mdwn

index e541c194ef251d3f6d20b1f509d3e946b0ea8e46..e4ff96d08d525ec51efd67b98a571bd151fbb418 100644 (file)
@@ -6,3 +6,55 @@ This plugin lets ikiwiki convert Unix man pages to HTML. It uses
 xrefs into hyperlinks.
 
 Sample output: <http://wiki.netbsd.org/users/schmonz/tunefs.8/>
+
+-----
+
+
+    #!/usr/bin/perl
+    package IkiWiki::Plugin::mandoc;
+    
+    use warnings;
+    use strict;
+    use IkiWiki 3.00;
+    use Encode;
+    use IPC::Open2;
+    
+    sub import {
+       hook(type => "getsetup", id => "mandoc", call => \&getsetup);
+       hook(type => "htmlize", id => $_, call => \&htmlize, keepextension => 1)
+               foreach ('man', 1..9);
+    }
+    
+    sub getsetup () {
+       return
+               plugin => {
+                       safe => 1,
+                       rebuild => 1, # format plugin
+                       section => "format",
+               },
+    }
+    
+    sub htmlize (@) {
+       my %params=@_;
+       my $content = decode_utf8(encode_utf8($params{content}));
+    
+       return $content if $@;
+    
+       my $pid = open2(*MANDOCOUT, *MANDOCIN, 'mandoc', '-Thtml');
+       binmode($_, ':utf8') foreach (*MANDOCOUT, *MANDOCIN);
+    
+       print MANDOCIN $content;
+       close MANDOCIN;
+       my @html_output = <MANDOCOUT>;
+       close MANDOCOUT;
+       waitpid $pid, 0;
+    
+       my $html = join('', @html_output);
+       my $link_prefix = $config{usedirs} ? '../' : '';
+       my $link_suffix = $config{usedirs} ? '/' : '';
+       $html =~ s|<a class="link-man">(.+?)\((.)\)</a>|<a class="link-man" href="$link_prefix$1.$2$link_suffix">$1($2)</a>|g;
+    
+       return $html;
+    }
+    
+    1