syntax seems weird, thoughts on an alternative
[ikiwiki.git] / doc / todo / support_multi-row_table_headers.mdwn
1 [[!template id=gitbranch branch=jon/table_headerblock author="[[Jon]]"]]
2 It would be great if it were possible to support multi-row table headers in the [[plugins/table]] plugin, so you could do e.g.
3
4         \[[!table header="""
5         Name | Platform ||
6         | Windows | Mac | Linux
7         """ data="""
8         ikiwiki | ‧ | ✓ | ✓
9         """]]
10
11 -- [[Jon]]
12
13 [[!tag wishlist patch]]
14
15 > This seems like weird overloading of the header parameter - it's
16 > table data, except when it isn't. Perhaps
17 > something like this would be easier to use in practice?
18 > (and also more featureful :-) )
19 >
20 >     \[[!table header="2 rows 1 column" data="""
21 >     Name | Platform ||
22 >     | Windows | Mac | Linux
23 >     ikiwiki | no | yes | yes
24 >     Starcraft | yes | yes | via Wine
25 >     """]]
26 >
27 > intended to be rendered like
28 >
29 > <table>
30 > <tr><th>Name</th><th colspan=2>Platform</th>
31 > <tr><th></th><th>Windows</th><th>Mac</th><th>Linux</th></tr>
32 > <tr><th>ikiwiki</th><td>no</td><td>yes</td><td>yes</td></tr>
33 > <tr><th>Starcraft</th><td>yes</td><td>yes</td><td>via Wine</td></tr>
34 > </table>
35 >
36 > (Deliberately switching to plain-text to make it more obvious
37 > what's a `<th>` and what's `<td>`.)
38 >
39 > Vague pseudocode for parsing `headers`
40 > (possibly even valid Perl, I'm not sure):
41 >
42 >     my ($header_rows, $header_cols);
43 >     while ($header =~ s/(\d*)\W*(\w+)//) {
44 >         my $n = ($1 or 0);
45 >         my $what = $2;
46 >         if ($what =~ m/rows?/) {
47 >             $header_rows = $n;
48 >         }
49 >         elif ($what =~ m/col(?:umn)?s?/) {
50 >             $header_cols = $n;
51 >         }
52 >     }
53 >
54 > and it would even be fairly easy to extend to support
55 > `(first|last|)\W*(\d*)\W*(\w+)` later, e.g.
56 > `header="1 row, first 2 cols, last column"`.
57 >
58 > --[[smcv]]