void startCell(boolean header, Attributes attributes) throws SAXException {
        if (needSuppressStart()) {
            return;
        }
        switch (state) {
            case IN_ROW_IN_ROW_GROUP:
                state = State.IN_CELL_IN_ROW_GROUP;
                break;
            case IN_ROW_IN_IMPLICIT_ROW_GROUP:
                state = State.IN_CELL_IN_IMPLICIT_ROW_GROUP;
                break;
            default:
                suppressedStarts = 1;
                return;
        }
        if (header) {
            int len = attributes.getLength();
            for (int i = 0; i < len; i++) {
                if ("ID".equals(attributes.getType(i))) {
                    String val = attributes.getValue(i);
                    if (!"".equals(val)) {
                        headerIds.add(val);
                    }
                }
            }
        }
        String[] headers = AttributeUtil.split(attributes.getValue("",
                "headers"));
        Cell cell = new Cell(
                Math.abs(AttributeUtil.parsePositiveInteger(attributes.getValue(
                        "", "colspan"))),
                Math.abs(AttributeUtil.parseNonNegativeInteger(attributes.getValue(
                        "", "rowspan"))), headers, header,
                owner.getDocumentLocator(), owner.getErrorHandler());
        if (headers.length > 0) {
            cellsReferringToHeaders.add(cell);
        }
        current.cell(cell);
    }
Constructor.
@param owner reference back to the checker
src/nu/validator/checker/table/Table.java