History for StructuredTextTables
??changed:
-
The current rule for tabs
A paragraph that has blocks of text enclosed in '||' is treated as a
table. The text blocks correspond to table cells and table rows are
denoted by newlines. By default the cells are center aligned. A cell
can span more than one column by preceding a block of text with an
equivalent number of cell separators '||'. Newlines and '|' cannot
be a part of the cell text. For example::
|||| **Ingredients** ||
|| *Name* || *Amount* ||
||Spam || 10 ||
||Eggs || 3 ||
This is interpreted as::
<TABLE BORDER=1 CELLPADDING=2>
<TR>
<TD ALIGN=CENTER COLSPAN=2> <strong>Ingredients</strong> </TD>
</TR>
<TR>
<TD ALIGN=CENTER COLSPAN=1> <em>Name</em> </TD>
<TD ALIGN=CENTER COLSPAN=1> <em>Amount</em> </TD>
</TR>
<TR>
<TD ALIGN=CENTER COLSPAN=1>Spam</TD>
<TD ALIGN=CENTER COLSPAN=1>10</TD>
</TR>
<TR>
<TD ALIGN=CENTER COLSPAN=1>Eggs</TD>
<TD ALIGN=CENTER COLSPAN=1>3</TD>
</TR>
</TABLE>
Suggestions for changes?
John Odom says
maybe all paragraphs between two || should be considered tables
rows. To divide paragraphs into columns, a single | could be
used. For example::
||
this is row 1
this is row2 column1 | this is row2 column2
this is row 3
||
should be outputed as::
<table>
<tr>
<td><p>This is row 1</p></td>
</tr>
<tr>
<td><p>This is row2 column 1</p></td>
<td><p>This is row2 column 2</p></td>
</tr>
<tr>
<td><p>This is row 3</p></td>
</tr>
</table>
I would also like to see a way of indicating column span. Perhaps
at the end of a paragraph have a number in parathesis. Or if there
is only whitespace after a | have that column 'swallowed' by the
preceding column.
Jim --
I want a table format that looks like a table that I would include in an email.
Like this::
Name Favorite Color
-------------------------
Jim Red
John Blue
-------------------------
That might take too much guessing, so something like the following
might be better::
|--------------------------|
| Name | Favorite |
| | Color |
|==========================|
| Jim | Red |
|--------------------------|
| John | Blue |
|--------------------------|
Hm::
|-------------------------------------------------|
| Function | Documentation |
|=================================================|
| '__str__' | This method converts the |
| | the object to a string. |
| | |
| | - Blah |
| | |
| | - Blaf |
| | |
| | |--------------------------| |
| | | Name | Favorite | |
| | | | Color | |
| | |==========================| |
| | | Jim | Red | |
| | |--------------------------| |
| | | John | Blue | |
| | |--------------------------| |
|-------------------------------------------------|
These *look* like tables, dang it. Remember, the goal of ST is to
avoid markup that looks like markup!
Another Suggestion
I agree with the last remark, that we should avoid markup that looks like markup. But I think that the amount of ASCII linedrawing required for the last example would become cumbersome. I propose that we implement (possibly in addition to the previous) a way for the StructuredTextNG renderer to make colspan decisions based upon the character column number of the double pipes. I also would like to eliminate extraneous double pipes. Table cells would be broken up based upon which sets of pipes "line up" vertically. For example::
|| **Project Status** ||
|| *My Projects* || *Team Projects* ||
|| Project One || 15% || Project A || 100% ||
|| Project Two || 50% || Project B || 10% ||
...Should render as:
|||||||| **Project Status** ||
|||| *My Projects* |||| *Team Projects* ||
|| Project One || 15% || Project A || 100% ||
|| Project Two || 50% || Project B || 10% ||
Or, as a variation on the previous poster's first idea that might eliminate some of the guesswork: For simple, clean tables, table columns might be determined, again, by examining the character column number of a token character on the dividing line. (In this example, a single space character.) My previous table might now be described like this::
================================================
**Project Status**
----------------------- ------------------------
*My Projects* *Team Projects*
----------------- ----- ----------------- ------
Project One 15% Project A 100%
Project Two 50% Project B 10%
------------------------------------------------
And the previous poster's "simple table" might look like this::
========= ================
Name Favorite Color
--------- ----------------
Jim Red
John Blue
--------------------------
...Which would render as:
|| **Name** || **Favorite Color** ||
|| Jim || Red ||
|| John || Blue ||
I would imagine that this should not be too hard to implement... I can forsee defining a paragraph as a table if it begins with a line consisting only of '=' and the token character. Heck, I could probably write this functionality myself even being a python newbie. --datagrok (Mike Lamb)
Yet Another Suggestion
Most tables (I would guess 90%) are simple tables. I think that the
simpler these tables can be represented, the better. Especially when the
tables need to be changed, this should be simple. The use of '||' would make
the editing difficult. Therefore I very much like the last 2 examples
without the '||'.
I would want to suggest an even simpler (only for clean simple tables)
solution:
Use tabs as column separators. A line that begins with 1 or more non-tabs
followed by a tab automatically becomes the first row of a table.
The last example would look like::
Name Favorite Color
Jim Red
John Blue
The space in between would have to be tabs. Because I can't see another
use for tabs in between text, this could work just for tables. Multiple
tabs wouldn't be a problem either. (Martin)
<hr solid id=comments_below>
gvanrossum (Mar 29, 2001 6:05 pm; Comment #1) --
Can somebody explain why the line '||Eggs||3||' appears in a larger, bold font? it is entered exactly the same as the ||Spam||10|| line before...
simon (Jul 11, 2001 5:59 pm; Comment #2) --
Yes - the following line ("is interpreted as") was indented, causing the
eggs line to be treated as a heading.
datagrok (Jul 17, 2001 1:58 am; Comment #3) --
Martin,
[142 more lines...]