add colspan support

master
joey 2007-03-07 19:50:34 +00:00
parent 59b07af4cf
commit 6304f6a595
2 changed files with 43 additions and 17 deletions

View File

@ -57,23 +57,12 @@ sub preprocess (@) { #{{{
push @lines, defined $params{class}
? "<table class=\"".$params{class}.'">'
: '<table>';
push @lines, "\t<thead>","\t\t<tr>",
(map {
"\t\t\t<th>".
htmlize($params{page}, $params{destpage}, $_).
"</th>"
} @$header),
"\t\t</tr>", "\t</thead>" if defined $header;
push @lines, "\t<thead>",
genrow($params{page}, $params{destpage}, "th", @$header),
"\t</thead>" if defined $header;
push @lines, "\t<tbody>";
foreach my $record (@data) {
push @lines, "\t\t<tr>",
(map {
"\t\t\t<td>".
htmlize($params{page}, $params{destpage}, $_).
"</td>"
} @$record),
"\t\t</tr>";
}
push @lines, genrow($params{page}, $params{destpage}, "td", @$_)
foreach @data;
push @lines, "\t</tbody>" if defined $header;
push @lines, '</table>';
my $html = join("\n", @lines);
@ -129,12 +118,39 @@ sub split_dsv ($$) { #{{{
my @data;
foreach my $line (@text_lines) {
push @data, [ split(/\Q$delimiter\E/, $line) ];
push @data, [ split(/\Q$delimiter\E/, $line, -1) ];
}
return @data;
} #}}}
sub genrow ($$$@) { #{{{
my $page = shift;
my $destpage = shift;
my $elt = shift;
my @data = @_;
my @ret;
push @ret, "\t\t<tr>";
for (my $x=0; $x < @data; $x++) {
my $cell=htmlize($page, $destpage, $data[$x]);
my $colspan=1;
while ($x+1 < @data && $data[$x+1] eq '') {
$x++;
$colspan++;
}
if ($colspan > 1) {
push @ret, "\t\t\t<$elt colspan=\"$colspan\">$cell</$elt>"
}
else {
push @ret, "\t\t\t<$elt>$cell</$elt>"
}
}
push @ret, "\t\t</tr>";
return @ret;
} #}}}
sub htmlize ($$$) { #{{{
my $page = shift;
my $destpage = shift;

View File

@ -12,6 +12,7 @@ It needs the perl module [[cpan Text::CSV]] for the CSV data.
Customer|Amount
Fulanito|134,34
Menganito|234,56
Menganito|234,56
"""]]
\[[table class="book_record" format=csv file="data/books/record1"]]
@ -22,6 +23,15 @@ In this second example the `record1` page should be similar to:
"Author","Damian Conway"
"Publisher","OReilly"
To make a cell span multiple columns, follow it with one or more empty
cells. For example:
\[[table data="""
left||right|
a|b|c|d
this cell spans 4 columns|||
"""]]
## usage
* `data` - Values for the table.