void end() throws SAXException {
        switch (state) {
            case IN_IMPLICIT_ROW_GROUP:
                current.end();
                current = null;
                break;
            case IN_TABLE_AT_START:
            case IN_TABLE_AT_POTENTIAL_ROW_GROUP_START:
            case IN_TABLE_COLS_SEEN:
                break;
            default:
                throw new IllegalStateException("Bug!");
        }

        // Check referential integrity
        for (Cell cell : cellsReferringToHeaders) {
            for (String heading : cell.getHeadings()) {
                if (!headerIds.contains(heading)) {
                    cell.err("The \u201Cheaders\u201D attribute on the element \u201C"
                            + cell.elementName()
                            + "\u201D refers to the ID \u201C"
                            + heading
                            + "\u201D, but there is no \u201Cth\u201D element with that ID in the same table.");
                }
            }
        }

        // Check that each column has non-extended cells
        ColumnRange colRange = first;
        while (colRange != null) {
            if (colRange.isSingleCol()) {
                owner.getErrorHandler().error(
                        new SAXParseException("Table column " + colRange
                                + " established by element \u201C"
                                + colRange.getElement()
                                + "\u201D has no cells beginning in it.",
                                colRange.getLocator()));
            } else {
                owner.getErrorHandler().error(
                        new SAXParseException("Table columns in range "
                                + colRange + " established by element \u201C"
                                + colRange.getElement()
                                + "\u201D have no cells beginning in them.",
                                colRange.getLocator()));
            }
            colRange = colRange.getNext();
        }
    }
Appends a column range to the linked list of column ranges.

@param colRange the range to append
src/nu/validator/checker/table/Table.java