add colspan support
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Wed, 7 Mar 2007 19:50:34 +0000 (19:50 +0000)
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Wed, 7 Mar 2007 19:50:34 +0000 (19:50 +0000)
IkiWiki/Plugin/table.pm
doc/plugins/table.mdwn

index 0501020ab938213c61820990581f88e78b2ae9c0..2ed60ab4604b3193b15914c6732568012c3a328d 100644 (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;
index e84f6f947c780d8d4157e83db523648e0e99aff8..c245c1af2d529d0d743683b573360e5b0b185abd 100644 (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","O’Reilly"
 
+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.