protected void finishTableColumnGroupBox(final TableColumnGroupNode box) {
    if (currentTable == null) {
      return;
    }

    if (currentTable.table.isPredefinedColumnsValidated()) {
      return;
    }

    while (currentColumnGroup.getColumnCount() < box.getColSpan()) {
      currentColumnGroup.addColumn(
          new TableColumn(currentColumnGroup.getBorder(), RenderLength.AUTO, false));
    }

    currentTable.columnModel.addColumnGroup(currentColumnGroup);
    currentColumnGroup = null;
  }
  protected void processTableColumn(final TableColumnNode node) {
    if (currentTable == null) {
      return;
    }

    if (currentTable.table.isPredefinedColumnsValidated()) {
      return;
    }

    final Border border = node.getBoxDefinition().getBorder();
    final RenderLength length = node.getBoxDefinition().getMinimumWidth();

    if (currentColumnGroup != null) {
      currentColumnGroup.addColumn(new TableColumn(border, length, false));
    } else {
      final TableColumnGroup currentColumnGroup =
          new TableColumnGroup(BoxDefinition.EMPTY.getBorder());
      currentColumnGroup.addColumn(new TableColumn(border, length, false));
      currentTable.columnModel.addColumnGroup(currentColumnGroup);
    }
  }
  protected boolean startTableColumnGroupBox(final TableColumnGroupNode box) {
    if (currentTable == null) {
      return false;
    }

    if (currentTable.table.isPredefinedColumnsValidated()) {
      return false;
    }

    currentColumnGroup = new TableColumnGroup(box.getBoxDefinition().getBorder());
    currentColumnGroup.setColSpan(box.getColSpan());
    return true;
  }