Proposed table syntax

Joshua Cook ijoshua at gmail.com
Fri Oct 22 11:03:14 EDT 2004


I've been following this thread intently, and I've seen some good
ideas, but nothing so far has seemed completely acceptable.  So I
thought about it and came up with my own ideas.

Considering the way tables are marked up in HTML, a few rules come to mind:

1.  There must be delimiters for the table cells, rows and the table itself.
2.  There must be a way to differentiate headers and normal cells.
3.  There *will* be a need for block-level formatting with table
cells.  This includes nested tables.

So here are my ideas:

1.  Table rows are delimited by a vertical pipe (``|'') at the
beginning and a line break at the end.
2.  Any number (greater than zero) of consecutive table rows make up a table.
3.  Vertical pipes within a row delimit cells.  Whitespace is not
acceptable as a cell delimiter, because it will be used for visual
formatting.
4.  Leading and trailing whitespace within a cell is ignored.  Cells
containing only whitespace are considered empty.
5.  Cells may span multiple lines, and therefore contain block-level
formatting syntax, by enclosing the cell contents in curly braces
(``{'' and ``}'').
6.  Header cells are identified by an ``='' after the vertical pipe.

An example:


    |=     Company         |=     Description            |=     URI
    | Apple Computer, Inc. |{
    The maker of:
    
    * Macintosh
    * iPod
    * QuickTime
    * FireWire
                                                        }| http://www.apple.com/
    | Microsoft            | No need for a description.  |
http://www.microsoft.com/


Row- and column-spanning are a different problem.  One idea I had is
to use a special syntax for defining the attributes of HTML elements. 
This could work for rowspan and colspan for table cells as well as
class and id for other elements.  Here is a contrived example:


    |@[rowspan="2"]    |@[colspan="2"]=                Gender             |
    |=                                    Male             |= Female  
   |= Average
    |=                      Avg. Height | 1.9              |  1.7         |  1.8
    |=                      Avg. Weight | 0.003            |  0.002   
   |  0.0025


Which would be formatted like:


    <table>
    <tr><td rowspan="2"></td><th colspan="2">Gender</th><td></td></tr>
    <tr><th>Male</th><th>Female</th><th>Average</th></tr>
    <tr><th>Avg. Height</th><td>1.9</td><td>1.7</td><td>1.8</td></tr>
    <tr><th>Avg. Weight</th><td>0.003</td><td>0.002</td><td>0.0025</td></tr>
    </table>


Extending this example to other elements:


    #@[id="title"] A Book Title
    
    ## Table of Contents
    
    @[class="toc"]
    1.  [Chapter 1](#ch1)
    2.  [Chapter 2](#ch2)
    3.  [Chapter 3](#ch3)
        1.  [Section 1](#ch3-1)
        2.  [Section 2](#ch3-2)
    4.  [Chapter 4](#ch4)
    
    #@[id="ch1"] Chapter 1
    
    #@[id="ch2"] Chapter 2
    
    #@[id="ch3"] Chapter 3
    
    ##@[id="ch3-1"] Section 1
    
    ##@[id="ch3-2"] Section 2
    
    #@[id="ch4"] Chapter 4
    
    
would give:


    <h1 id="title">A Book Title</h1>
    
    <h2>Table of Contents</h2>
    
    <ol class="toc">
    <li><a href="#ch1">Chapter 1</a></li>
    <li><a href="#ch2">Chapter 2</a></li>
    <li><a href="#ch3">Chapter 3</a>
    <ol>
    <li><a href="#ch3-1">Section 1</a></li>
    <li><a href="#ch3-2">Section 2</a></li>
    </ol>
    </li>
    <li><a href="#ch4">Chapter 4</a></li>
    </ol>
    
    <h1 id="ch1">Chapter 1</h1>
    
    <h1 id="ch2">Chapter 2</h1>
    
    <h1 id="ch3">Chapter 3</h1>
    
    <h2 id="ch3-1">Section 1</h2>
    
    <h2 id="ch3-2">Section 2</h2>
    
    <h1 id="ch4">Chapter 4</h1>
    

** By the way: ** the Markdown dingus still formats this nested list
incorrectly.


More information about the Markdown-discuss mailing list