]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
More careful approach to handling missing grid units during addAreas stage.
authorJeremias Maerki <jeremias@apache.org>
Fri, 13 May 2005 07:07:53 +0000 (07:07 +0000)
committerJeremias Maerki <jeremias@apache.org>
Fri, 13 May 2005 07:07:53 +0000 (07:07 +0000)
Plus some comments in code.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_KnuthStylePageBreaking@198622 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/layoutmgr/table/EffRow.java
src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java

index 5438352a6085f23845f4ce8403a9769fcedbe182..9cde5881086b1b259fe5ee91bc46e9fd06c8e8b2 100644 (file)
@@ -60,9 +60,25 @@ public class EffRow {
         return gridUnits;
     }
     
-    public GridUnit getGridUnit(int index) {
-        if (index >= 0 && index < gridUnits.size()) {
-            return (GridUnit)gridUnits.get(index);
+    /**
+     * Returns the grid unit at a given position.
+     * @param column index of the grid unit in the row (zero based)
+     * @return the requested grid unit.
+     */
+    public GridUnit getGridUnit(int column) {
+        return (GridUnit)gridUnits.get(column);
+    }
+    
+    /**
+     * Returns the grid unit at a given position. In contrast to getGridUnit() this 
+     * method returns null if there's no grid unit at the given position. The number of
+     * grid units for row x can be smaller than the number of grid units for row x-1.
+     * @param column index of the grid unit in the row (zero based)
+     * @return the requested grid unit or null if there's no grid unit at this position.
+     */
+    public GridUnit safelyGetGridUnit(int column) {
+        if (column < gridUnits.size()) {
+            return (GridUnit)gridUnits.get(column);
         } else {
             return null;
         }
index 3881cfd6493670f628c8e6b18695e5da5ffd68da..85e4932951f8df636158a29c7b1c34cdfcfb94c5 100644 (file)
@@ -706,10 +706,14 @@ public class TableContentLayoutManager {
             //Add areas for row
             //addRowBackgroundArea(rowFO, lastRowHeight, layoutContext.getRefIPD(), yoffset);
             for (int i = 0; i < gridUnits.length; i++) {
-                GridUnit currentGU = lastRow.getGridUnit(i);
+                GridUnit currentGU = lastRow.safelyGetGridUnit(i);
                 if ((gridUnits[i] != null) 
                         && (forcedFlush || (end[i] == gridUnits[i].getElements().size() - 1))
                         && (currentGU == null || currentGU.isLastGridUnitRowSpan())) {
+                    //the last line in the "if" above is to avoid a premature end of an 
+                    //row-spanned cell because no GridUnitParts are generated after a cell is
+                    //finished with its content. currentGU can be null if there's no grid unit
+                    //at this place in the current row (empty cell and no borders to process)
                     if (log.isDebugEnabled()) {
                         log.debug((forcedFlush ? "FORCED " : "") + "flushing..." + i + " " 
                                 + start[i] + "-" + end[i]);