#!/usr/bin/perl
#
# tbl2html - convert troff tbl text to HTML
#
# Copyright 1997-2002 Daniel Quinlan
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
require "newgetopt.pl";
&NGetOpt("break", "tr", "help");
$usage = 'usage: tbl2html [options]
--break break table rows with
--tr break table rows with
(default, but often ugly)
--help print this help message
';
$opt_tr = 1;
if ($opt_help) {
print $usage;
exit 0;
}
sub tbl2html {
$center = 0;
$expand = 0;
$box = 0;
$allbox = 0;
$doublebox = 0;
$tab = "\t";
$eqn_start = '~';
$eqn_end = '~';
$linesize = 0; # unset
$line = 0;
$data_format = 0; # data format specification
$_ = <>;
if (/;$/) {
# parse optional global table format
/center/ &&
do { $center = 1; };
/expand/ &&
do { $expand = 1; };
/box/ &&
do { $box = 1; };
/allbox/ &&
do { $allbox = 1; };
/doublebox/ &&
do { $doublebox = 1; };
/tab\((.)\)/ &&
do { $tab = $1; };
/delim\((.)(.)\)/ &&
do {
$eqn_start = $1;
$eqn_end = $2;
};
/linesize\([0-9]+\)/ &&
do {
$linesize = $1;
};
# read next line (data format specification)
$_ = <>;
}
$data = "";
for (;;) {
$data .= $_;
last if /\.$/;
$_ = <>;
}
chomp($data);
# print table header
print "\n";
# read table data
if ($opt_break) {
while (<>) {
chomp;
if ($_ eq "_") {
&printcells;
undef(@out);
next;
}
@cells = split(/$tab/);
$col = 0;
for $cell (@cells) {
$out[$col] .= $cell . "
\n";
$col++;
}
}
}
else {
while (<>) {
chomp;
if ($_ eq "_") {
print "\n";
next;
}
print "
\n";
@cells = split(/$tab/);
for $cell (@cells) {
print "| ", $cell, "\n";
}
}
}
&printcells;
print " |
\n";
}
sub printcells {
print "
\n";
for $cell (@out) {
print "| \n", $cell;
}
}
&tbl2html;
|