summaryrefslogtreecommitdiffstats
path: root/doc/podtbl
diff options
context:
space:
mode:
Diffstat (limited to 'doc/podtbl')
-rwxr-xr-xdoc/podtbl99
1 files changed, 99 insertions, 0 deletions
diff --git a/doc/podtbl b/doc/podtbl
new file mode 100755
index 0000000..8d910e4
--- /dev/null
+++ b/doc/podtbl
@@ -0,0 +1,99 @@
+#!/usr/bin/perl
+
+use Pod::Parser;
+use List::Util qw(max);
+
+@ISA = Pod::Parser::;
+
+sub stripfcodes {
+ # strip formatting codes, dumb version
+ map {
+ s/[IBCLFSXZ]<< (.*?) >>/$1/gs;
+ s/[IBCLFSXZ]<(.*?)>/$1/gs;
+ $_
+ } @$_;
+}
+
+sub htmlfcodes {
+ my %tag = (
+ I => "i",
+ B => "b",
+ C => "tt",
+ L => "i", # broken
+ F => "tt",
+ S => "nobr", # non-std
+ X => "span", # broken
+ Z => "span", # broken
+ );
+ # strip formatting codes, dumb version
+ map {
+ s/([IBCLFSXZ])<< (.*?) >>/<$tag{$1}>$2<\/$tag{$1}>/gs;
+ s/([IBCLFSXZ])<(.*?)>/<$tag{$1}>$2<\/$tag{$1}>/gs;
+ $_
+ } @$_;
+}
+
+sub command {
+ my ($self, $command, $paragraph) = @_;
+
+ if ($command eq "begin" && $paragraph =~ /^\s*table\s*$/s) {
+ $table++;
+ } elsif ($command eq "end" && $paragraph =~ /^\s*table\s*$/s) {
+ $table--;
+ } else {
+ shift;
+ return $self->SUPER::command (@_);
+ }
+}
+
+sub verbatim {
+ my ($self, $para) = @_;
+ shift;
+
+ return $self->SUPER::verbatim (@_) unless $table;
+
+ my $table = [ map [$_ =~ /\t([^\t]*)/g], split /\n/, $para ];
+ my $cols = max map scalar @$_, @$table;
+
+ my $fh = $self->output_handle;
+
+ # format the table
+ # text
+ print $fh "=begin text\n\n";
+
+ for (@$table) {
+ print $fh " ", (map +(sprintf "%-15s ", $_), stripfcodes @$_), "\n";
+ }
+
+ print $fh "\n=end text\n\n";
+
+
+ # tbl
+ print $fh "=begin roff\n\n";
+
+ print $fh ".TS\n" . ("l " x $cols) . ".\n";
+ print $fh map +(join "\t", stripfcodes @$_) . "\n", @$table;
+ print $fh ".TE\n";
+
+ print $fh "\n=end roff\n\n";
+
+ # html
+ # pod::xhtml fails on begin/end blocks
+# print $fh "=begin xhtml\n\n";
+
+ print $fh "=for xhtml <table>";
+ print $fh map "<tr><td>" . +(join "</td><td>", htmlfcodes @$_) . "</td></tr>", @$table;
+ print $fh "</table>\n\n";
+
+ print $fh "=for html <table>";
+ print $fh map "<tr><td>" . +(join "</td><td>", htmlfcodes @$_) . "</td></tr>", @$table;
+ print $fh "</table>\n\n";
+
+# print $fh "\n=end xhtml\n\n";
+
+}
+
+__PACKAGE__->new->parse_from_filehandle;
+
+
+