visitTable method

  1. @override
String visitTable(
  1. TableNode node
)
override

Implementation

@override
String visitTable(TableNode node) {
  if (node.rows.isEmpty) return '<table></table>';

  final buffer = StringBuffer('<table>\n');
  final alignments = node.alignments;

  final headerRow = node.rows.first;
  buffer.write('<thead>\n<tr>\n');
  for (var i = 0; i < headerRow.cells.length; i++) {
    final cell = headerRow.cells[i];
    final alignAttr = _alignAttribute(
      i < alignments.length ? alignments[i] : TableAlignment.none,
    );
    buffer.write('  <th$alignAttr>${cell.content.accept(this)}</th>\n');
  }
  buffer.write('</tr>\n</thead>\n');

  if (node.rows.length > 1) {
    buffer.write('<tbody>\n');
    for (var r = 1; r < node.rows.length; r++) {
      final row = node.rows[r];
      buffer.write('<tr>\n');
      for (var c = 0; c < row.cells.length; c++) {
        final cell = row.cells[c];
        final alignAttr = _alignAttribute(
          c < alignments.length ? alignments[c] : TableAlignment.none,
        );
        buffer.write('  <td$alignAttr>${cell.content.accept(this)}</td>\n');
      }
      buffer.write('</tr>\n');
    }
    buffer.write('</tbody>\n');
  }

  buffer.write('</table>');
  return buffer.toString();
}