# Argument Elements

An argument's element is the first string of an argument. There are two types of argument: Element and Preset. Elements create an element directly, while presets reference an element command defined in presets.json (in addition to the default presets). Instructions for defining presets are later in this document.

Element arguments are prefixed with a : colon, and presets with !.

Valid element arguments are:
- :tr - Table Row <tr>
- :th - Table Header <th>
- :td - Table Cell <td>
- :ca - Caption <caption>
- :co - Column <col>
- :ta - Table <table>
- :head - Table Head <thead>
- :foot - Table Foot <tfoot>
- :body - Table Body <tbody>
- :^ - Append
- :tabdiv - Tabgroup List & Content
- :tab - Tab Content

The infobox will "autofill" elements into the preceding available row. That is, if enough columns in the previous row are open, new elements will be appended to them. If the previous row does not have sufficient room, a new row will be created implicitly. Explicitly calling a row is only necessary to pass {} attributes to it, if you wish to leave a row fully or partially empty for whatever reason, or if implicit elements are disabled.

By default, tables have 2 columns. Pass $maxCol=X to the table to change this. Table headers :th default to a colspan of 2, and cells :td to 1. Colspan may be set with {-X}. Additionally, setting colspan to -1 will set it to the table's max span. Passing {$f} will skip column checking for an element, inserting it regardless of available space, without alerting the parser (meaning, the autofill behavior will not adapt to the table width). This behavior is intended for use with tab associated elements.

If autobalance ($autoBal) is not disabled, the table will attempt to automatically adjust elements that do not have defined spans to tables with an even number of columns. That is: if a row in the table has a span of 4, any elements without explicitly set spans will then double their width to fill the extra room, instead of becoming squished. This means that if you only want one row to have four columns, you can specify only that row and leave the others unset. This behavior accounts for the configured maxCol. To disable this behavior, pass $!autoBal to the table.

The :ca element may be called multiple times, but as a table may only have one caption element, subsequent :ca arguments will have their contents appended to the caption (HTML behavior). The caption's position is irrelevant to its rendered location, which is defined with CSS.

When a :co column is created, a column group is created automatically. If you would like to create it manually to pass attributes to it (for whatever reason), use :cg (if one already exists, another will not be created).

Content that follows an element arguments = is rendered inside of the corresponding element as markdown. This includes media embeds (image and audio), wikilinks (not sure if they are catalogued), mathjax, inline HTML, and even transclusions. PDF embeds not yet available.

The :^ Append argument will apply its {} properties to the previously created element, if one exists. Any content = will be appended to the previous element. This is mostly intended for use with templates and conditionals.

The table implicitly creates a body element. Table, body, head, and foot elements act as containers for their nested arguments - this behaviour is described in the Nesting section.

Tab and tabdiv elements have special tabbing behaviour, described in the Tabs section.