We could avoid most of the hassle of HTML tables with a relatively simple
template system. The user of a template would just have to enter key/value
pairs and the software would do the rest.
Let's take the country tables as an example. This is a table that
essentially looks the same on every country page, with different contents.
So we could have
[[Template:Country table]]
which would contain the table with a special syntax for variable
dentifiers and conditional expressions:
<table border="0" width="200">
<<Flag && Coat of arms??
<tr><td>
::Flag::
</td><td>
::Coat of arms::
</td>
</tr>
>>
<<Flag && !Coat of arms??
<tr><td colspan=2>
::Flag::
</td>
</tr>
>>
<tr><td>
Official language
</td>
<td>
::Language::
</td>
</tr>
<<President?
<tr><td>
President
</td>
<td>
::President::
</td>
</tr>
>>
...........
</table>
The above contains two important elements:
* variables (enclosed in ::name::)
These contain text that is defined by the template user and inserted into
the template when it is used.
* condition blocks (enclosed in <<..?? .. >>)
These determine under which conditions the respective text from the
template is to be inserted; that is, which variables have to be set or
unset.
Now any country page could use the template defined above like this:
<Template:Country table>
Flag:: [[Image:Flag_germany.jpg]]
Coat of arms:: [[Image:Coat_of_arms_Germany.jpg]]
Language:: German
President:: Johannes Rau
...
</template>
Similarly for taxonomy tables
<Template:Taxonomy table>
Name:: Amaryllis
Kingdom:: Plantae
Division:: Magnoliophyta
Class:: Lilliopsida
...
</template>
For navigation tables:
<Template:British Monarch navigation>
Preceded by:: George VI
Heir apparent:: Charles, Prince of Wales
</template>
This is easy to use and easy to edit, but generates nice looking,
correctly aligned tables. It could also be used for general image
formatting:
<Template:Image right>
Image:: Foo.jpg
Width:: 420
Caption:: My image
</template>
using the following template, for example:
<table border=0 width="::Width::" align="right">
<tr><td>
[[Image:::Image::]]
<br>
''::Caption::''
</td></tr>
</table>
Most of the code required for this feature is simple search/replace stuff,
only the conditional expression parsing is somewhat more complex, but also
offers a lot of power to handle subtle variations in tables. The template
syntax could also provide functionality for iterations, or these could be
implicitly generated by simply repeating a variable during the template
use:
[[Template:List table]]
<table border=0>
<<Item??
<tr><td>::Item::</td></tr>
>>
</table>
->
<Template:List table>
Item::Foo
Item::Bar
Item::Baz
</template>
->
<table border="0">
<tr><td>Foo</td></tr>
<tr><td>Bar</td></tr>
<tr><td>Baz</td></tr>
</table>
That is, the conditional expression Item?? would automatically run an
iteration of the enclosing block if there is more than one item (whereas
without the conditional expression, only one item would be used).
Syntax likes and dislikes aside, I'd be interested in what you think about
such a system.
Regards,
Erik