Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (c) 2006 Henri Sivonen
   *
   * Permission is hereby granted, free of charge, to any person obtaining a 
   * copy of this software and associated documentation files (the "Software"), 
   * to deal in the Software without restriction, including without limitation 
   * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
   * and/or sell copies of the Software, and to permit persons to whom the 
   * Software is furnished to do so, subject to the following conditions:
  *
  * The above copyright notice and this permission notice shall be included in 
  * all copies or substantial portions of the Software.
  *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 
  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
  * DEALINGS IN THE SOFTWARE.
  */
 
 package nu.validator.checker.table;
 
 
Represents a row group (explicit or implicit) for table integrity checking.

Author(s):
hsivonen
Version:
$Id$
 
 final class RowGroup {

    
Runtime type constant.
 
     private final Cell[] EMPTY_CELL_ARRAY = {};

    
Keeps track of the current slot row of the insertion point.
 
     private int currentRow = -1;

    
The column slot of the insertion point.
 
     private int insertionPoint = 0;

    
The index of the next uninspected item in cellsOnCurrentRow.
 
     private int nextOldCell = 0;

    
The owning table.
 
     private final Table owner;

    
The set of cells from previous rows that are still in effect extending downwards.
 
     private final SortedSet<CellcellsIfEffect = new TreeSet<Cell>(
             .);

    
A temporary copy of cellsIfEffect sorted differently.
 
     private Cell[] cellsOnCurrentRow;

    
Whether the current row has had cells.
 
     private boolean rowHadCells;

    
The local name of the element that established this row group or null if this is an implicit row group.
 
     private final String type;
 
     RowGroup(Table ownerString type) {
         super();
         this. = owner;
         this. = type;
     }
 
     public void cell(Cell cellthrows SAXException {
          = true;
         findInsertionPoint();
         cell.setPosition();
         .cell(cell);
         if (cell.getBottom() >  + 1) {
            .add(cell);
        }
         = cell.getRight();
        for (int i = i < .i++) {
            [i].errOnHorizontalOverlap(cell);
        }
    }

    
    private void findInsertionPoint() {
        for (;;) {
            if ( == .) {
                break;
            }
            Cell other = [];
            int newInsertionPoint = other.freeSlot();
            if (newInsertionPoint == ) {
                break;
            }
            ++;
             = newInsertionPoint;
        }
    }
    public void end() throws SAXException {
        for (Cell cell : ) {
            cell.errIfNotRowspanZero();
        }
    }
    public void endRow() throws SAXException {
        if (!) {
            .err("Row "
                    + ( + 1)
                    + " of "
                    + ( == null ? "an implicit row group"
                            : "a row group established by a \u201C" + 
                                    + "\u201D element")
                    + " has no cells beginning on it.");
        }
        findInsertionPoint();
         = null;
        int columnCount = .getColumnCount();
        if (.isHardWidth()) {
            if ( > columnCount) {
                .err("A table row was "
                        + 
                        + " columns wide and exceeded the column count established using column markup ("
                        + columnCount + ").");
            } else if ( < columnCount) {
                .err("A table row was "
                        + 
                        + " columns wide, which is less than the column count established using column markup ("
                        + columnCount + ").");
            }
        } else if (columnCount == -1) {
            // just saw the first row
            .setColumnCount();
        } else {
            if ( > columnCount) {
                .warn("A table row was "
                        + 
                        + " columns wide and exceeded the column count established by the first row ("
                        + columnCount + ").");
            } else if ( < columnCount) {
                .warn("A table row was "
                        + 
                        + " columns wide, which is less than the column count established by the first row ("
                        + columnCount + ").");
            }
        }
        // Get rid of cells that don't span to the next row
        for (Iterator<Celliter = .iterator(); iter.hasNext();) {
            Cell cell = iter.next();
            if (cell.shouldBeCulled( + 1)) {
                iter.remove();
            }
        }
    }
    public void startRow() {
        ++;
         = 0;
         = 0;
         = false;
        // the array should already be in the right order most of the time
    }
New to GrepCode? Check out our FAQ X