Colspan is properly handled when there is a table header or one is inferred. But if there is not a table header and there is a colspan in the first row of the table, the empty header (and "---" separator row) ignore the colspan attribute.
This is handled properly:
<table>
<tr><th>Col1</th><th>Col2</th></tr>
<tr><td colspan=2>Data</td></tr>
<tr>...</tr>
</table>
This is not:
<table>
<tr><td colspan=2>Data</td></tr>
<tr>...</tr>
</table>
To fix, the convert_tr() function should be updated. The lines in the elif at the end of the function that say "len(cells)" should instead say "full_colspan" like they do in the if statement.