You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by sp...@apache.org on 2007/09/25 09:58:47 UTC
svn commit: r579113 - in
/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking: ./
src/java/org/apache/fop/fo/flow/ src/java/org/apache/fop/layoutmgr/
src/java/org/apache/fop/layoutmgr/table/
Author: spepping
Date: Tue Sep 25 00:58:45 2007
New Revision: 579113
URL: http://svn.apache.org/viewvc?rev=579113&view=rev
Log:
Merged revisions 519672-520000 via svnmerge from
https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk
........
r519975 | vhennebert | 2007-03-19 16:40:31 +0100 (Mon, 19 Mar 2007) | 2 lines
Documentation, cleanup, log statements in the table layout code.
........
Modified:
xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/ (props changed)
xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/fo/flow/Table.java
xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/LayoutContext.java
xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/Position.java
xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/GridUnit.java
xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/PrimaryGridUnit.java
xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/RowPainter.java
xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java
xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/TableLayoutManager.java
xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/TableRowIterator.java
xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/TableStepper.java
Propchange: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Tue Sep 25 00:58:45 2007
@@ -1 +1 @@
-/xmlgraphics/fop/trunk:1-519671
+/xmlgraphics/fop/trunk:1-520000
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/fo/flow/Table.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/fo/flow/Table.java?rev=579113&r1=579112&r2=579113&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/fo/flow/Table.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/fo/flow/Table.java Tue Sep 25 00:58:45 2007
@@ -349,7 +349,11 @@
return (tableLayout == EN_AUTO);
}
- /** @return the list of table-column elements. */
+ /**
+ * Returns the list of table-column elements.
+ *
+ * @return a list of {@link TableColumn} elements, may contain null elements
+ */
public List getColumns() {
return columns;
}
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/LayoutContext.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/LayoutContext.java?rev=579113&r1=579112&r2=579113&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/LayoutContext.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/LayoutContext.java Tue Sep 25 00:58:45 2007
@@ -298,10 +298,18 @@
return stackLimit;
}
+ /**
+ * Sets the inline-progression-dimension of the nearest ancestor reference area.
+ */
public void setRefIPD(int ipd) {
refIPD = ipd;
}
+ /**
+ * Returns the inline-progression-dimension of the nearest ancestor reference area.
+ *
+ * @return the inline-progression-dimension of the nearest ancestor reference area
+ */
public int getRefIPD() {
return refIPD;
}
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/Position.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/Position.java?rev=579113&r1=579112&r2=579113&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/Position.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/Position.java Tue Sep 25 00:58:45 2007
@@ -43,11 +43,21 @@
public boolean generatesAreas() {
return false;
}
-
+
+ /**
+ * Sets the index of this position in the sequence of Position elements.
+ *
+ * @param value this position's index
+ */
public void setIndex(int value) {
this.index = value;
}
-
+
+ /**
+ * Returns the index of this position in the sequence of Position elements.
+ *
+ * @return the index of this position in the sequence of Position elements
+ */
public int getIndex() {
return this.index;
}
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/GridUnit.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/GridUnit.java?rev=579113&r1=579112&r2=579113&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/GridUnit.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/GridUnit.java Tue Sep 25 00:58:45 2007
@@ -19,6 +19,8 @@
package org.apache.fop.layoutmgr.table;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.fop.fo.FONode;
import org.apache.fop.fo.flow.Table;
import org.apache.fop.fo.flow.TableBody;
@@ -33,6 +35,8 @@
*/
public class GridUnit {
+ private static Log log = LogFactory.getLog(GridUnit.class);
+
/** Indicates that the grid unit is in the first column. */
public static final int IN_FIRST_COLUMN = 0;
/** Indicates that the grid unit is in the last column. */
@@ -86,7 +90,7 @@
/**
* Creates a new grid unit.
*
- * @param primary ??
+ * @param primary the before-start grid unit of the cell containing this grid unit
* @param column table column this grid unit belongs to
* @param startCol index of the column this grid unit belongs to
* @param colSpanIndex index of this grid unit in the span, in column direction
@@ -98,7 +102,7 @@
/**
* Creates a new grid unit.
*
- * @param primary ??
+ * @param primary the before-start grid unit of the cell containing this grid unit
* @param cell table cell which occupies this grid unit
* @param column table column this grid unit belongs to
* @param startCol index of the column this grid unit belongs to
@@ -158,16 +162,28 @@
}
/**
- * @return the primary grid unit if this is a spanned grid unit
+ * Returns the before-start grid unit of the cell containing this grid unit.
+ *
+ * @return the before-start grid unit of the cell containing this grid unit.
*/
public PrimaryGridUnit getPrimary() {
return (isPrimary() ? (PrimaryGridUnit)this : primary);
}
+ /**
+ * Is this grid unit the before-start grid unit of the cell?
+ *
+ * @return true if this grid unit is the before-start grid unit of the cell
+ */
public boolean isPrimary() {
return false;
}
+ /**
+ * Does this grid unit belong to an empty cell?
+ *
+ * @return true if this grid unit belongs to an empty cell
+ */
public boolean isEmpty() {
return cell == null;
}
@@ -272,6 +288,13 @@
side, resFlags), side);
if (cell != null) {
effectiveBorders.setPadding(cell.getCommonBorderPaddingBackground());
+ }
+ if (log.isDebugEnabled()) {
+ log.debug(this + " resolved borders: "
+ + "before=" + effectiveBorders.getBorderBeforeWidth(false) + ", "
+ + "after=" + effectiveBorders.getBorderAfterWidth(false) + ", "
+ + "start=" + effectiveBorders.getBorderStartWidth(false) + ", "
+ + "end=" + effectiveBorders.getBorderEndWidth(false));
}
}
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/PrimaryGridUnit.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/PrimaryGridUnit.java?rev=579113&r1=579112&r2=579113&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/PrimaryGridUnit.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/PrimaryGridUnit.java Tue Sep 25 00:58:45 2007
@@ -22,14 +22,19 @@
import java.util.LinkedList;
import java.util.List;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.fop.fo.flow.TableCell;
import org.apache.fop.fo.flow.TableColumn;
/**
- * This class represents a primary grid unit of a spanned cell.
+ * This class represents a primary grid unit of a spanned cell. This is the "before-start"
+ * (top-left, usually) grid unit of the span.
*/
public class PrimaryGridUnit extends GridUnit {
+ private static Log log = LogFactory.getLog(PrimaryGridUnit.class);
+
/** Cell layout manager. */
private TableCellLayoutManager cellLM;
/** List of Knuth elements representing the contents of the cell. */
@@ -52,6 +57,7 @@
public PrimaryGridUnit(TableCell cell, TableColumn column, int startCol, int startRow) {
super(cell, column, startCol, 0);
this.startRow = startRow;
+ log.trace("PrimaryGridUnit created, row " + startRow + " col " + startCol);
if (cell != null) {
cellLM = new TableCellLayoutManager(cell, this);
}
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/RowPainter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/RowPainter.java?rev=579113&r1=579112&r2=579113&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/RowPainter.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/RowPainter.java Tue Sep 25 00:58:45 2007
@@ -34,21 +34,40 @@
class RowPainter {
private static Log log = LogFactory.getLog(RowPainter.class);
+ /** The fo:table-row containing the currently handled grid rows. */
private TableRow rowFO = null;
private int colCount;
private int yoffset = 0;
private int accumulatedBPD = 0;
+ /** Currently handled row (= last encountered row). */
private EffRow lastRow = null;
private LayoutContext layoutContext;
private int lastRowHeight = 0;
+ /**
+ * For each part of the table (header, footer, body), index of the first row of that
+ * part present on the current page.
+ */
private int[] firstRow = new int[3];
private Map[] rowOffsets = new Map[] {new java.util.HashMap(),
new java.util.HashMap(), new java.util.HashMap()};
//These three variables are our buffer to recombine the individual steps into cells
- private PrimaryGridUnit[] gridUnits;
+ /** Primary grid units corresponding to the currently handled grid units, per row. */
+ private PrimaryGridUnit[] primaryGridUnits;
+ /**
+ * Index, in the corresponding table cell's list of Knuth elements, of the first
+ * element present on the current page, per column.
+ */
private int[] start;
+ /**
+ * Index, in the corresponding table cell's list of Knuth elements, of the last
+ * element present on the current page, per column.
+ */
private int[] end;
+ /**
+ * Length, for each column, of the elements from the current cell put on the
+ * current page.
+ */
private int[] partLength;
private TableContentLayoutManager tclm;
@@ -56,7 +75,7 @@
this.tclm = tclm;
this.layoutContext = layoutContext;
this.colCount = tclm.getColumns().getColumnCount();
- this.gridUnits = new PrimaryGridUnit[colCount];
+ this.primaryGridUnits = new PrimaryGridUnit[colCount];
this.start = new int[colCount];
this.end = new int[colCount];
this.partLength = new int[colCount];
@@ -76,6 +95,12 @@
this.lastRowHeight += length;
}
+ /**
+ * Records the fragment of row represented by the given position. If it belongs to
+ * another (grid) row than the current one, that latter is painted and flushed first.
+ *
+ * @param tcpos a position representing the row fragment
+ */
public void handleTableContentPosition(TableContentPosition tcpos) {
if (lastRow != tcpos.row && lastRow != null) {
addAreasAndFlushRow(false);
@@ -95,12 +120,12 @@
log.debug(">" + gup);
}
int colIndex = gup.pgu.getStartCol();
- if (gridUnits[colIndex] != gup.pgu) {
- if (gridUnits[colIndex] != null) {
+ if (primaryGridUnits[colIndex] != gup.pgu) {
+ if (primaryGridUnits[colIndex] != null) {
log.warn("Replacing GU in slot " + colIndex
+ ". Some content may not be painted.");
}
- gridUnits[colIndex] = gup.pgu;
+ primaryGridUnits[colIndex] = gup.pgu;
start[colIndex] = gup.start;
end[colIndex] = gup.end;
} else {
@@ -112,6 +137,16 @@
}
}
+ /**
+ * Create the areas corresponding to the last row. This method is called either
+ * because the row is finished (all of the elements present on this row have been
+ * added), or because this is the last row on the current page, and the part of it
+ * lying on the current page must be drawn.
+ *
+ * @param forcedFlush true if the elements must be drawn even if the row isn't
+ * finished yet (last row on the page)
+ * @return the height of the (grid) row
+ */
public int addAreasAndFlushRow(boolean forcedFlush) {
int actualRowHeight = 0;
int readyCount = 0;
@@ -122,30 +157,29 @@
}
rowOffsets[bt].put(new Integer(lastRow.getIndex()), new Integer(yoffset));
- for (int i = 0; i < gridUnits.length; i++) {
- if ((gridUnits[i] != null)
- && (forcedFlush || (end[i] == gridUnits[i].getElements().size() - 1))) {
+ for (int i = 0; i < primaryGridUnits.length; i++) {
+ if ((primaryGridUnits[i] != null)
+ && (forcedFlush || (end[i] == primaryGridUnits[i].getElements().size() - 1))) {
if (log.isTraceEnabled()) {
log.trace("getting len for " + i + " "
+ start[i] + "-" + end[i]);
}
readyCount++;
int len = ElementListUtils.calcContentLength(
- gridUnits[i].getElements(), start[i], end[i]);
+ primaryGridUnits[i].getElements(), start[i], end[i]);
partLength[i] = len;
if (log.isTraceEnabled()) {
log.trace("len of part: " + len);
}
if (start[i] == 0) {
- LengthRangeProperty bpd = gridUnits[i].getCell()
+ LengthRangeProperty bpd = primaryGridUnits[i].getCell()
.getBlockProgressionDimension();
if (!bpd.getMinimum(tclm.getTableLM()).isAuto()) {
int min = bpd.getMinimum(tclm.getTableLM())
.getLength().getValue(tclm.getTableLM());
if (min > 0) {
- len = Math.max(len, bpd.getMinimum(tclm.getTableLM())
- .getLength().getValue(tclm.getTableLM()));
+ len = Math.max(len, min);
}
}
if (!bpd.getOptimum(tclm.getTableLM()).isAuto()) {
@@ -155,8 +189,8 @@
len = Math.max(len, opt);
}
}
- if (gridUnits[i].getRow() != null) {
- bpd = gridUnits[i].getRow().getBlockProgressionDimension();
+ if (primaryGridUnits[i].getRow() != null) {
+ bpd = primaryGridUnits[i].getRow().getBlockProgressionDimension();
if (!bpd.getMinimum(tclm.getTableLM()).isAuto()) {
int min = bpd.getMinimum(tclm.getTableLM()).getLength()
.getValue(tclm.getTableLM());
@@ -168,17 +202,20 @@
}
// Add the padding if any
- len += gridUnits[i].getBorders()
- .getPaddingBefore(false, gridUnits[i].getCellLM());
- len += gridUnits[i].getBorders()
- .getPaddingAfter(false, gridUnits[i].getCellLM());
+ len += primaryGridUnits[i].getBorders()
+ .getPaddingBefore(false, primaryGridUnits[i].getCellLM());
+ len += primaryGridUnits[i].getBorders()
+ .getPaddingAfter(false, primaryGridUnits[i].getCellLM());
//Now add the borders to the contentLength
if (tclm.isSeparateBorderModel()) {
- len += gridUnits[i].getBorders().getBorderBeforeWidth(false);
- len += gridUnits[i].getBorders().getBorderAfterWidth(false);
+ len += primaryGridUnits[i].getBorders().getBorderBeforeWidth(false);
+ len += primaryGridUnits[i].getBorders().getBorderAfterWidth(false);
+ } else {
+ len += primaryGridUnits[i].getHalfMaxBeforeBorderWidth();
+ len += primaryGridUnits[i].getHalfMaxAfterBorderWidth();
}
- int startRow = Math.max(gridUnits[i].getStartRow(), firstRow[bt]);
+ int startRow = Math.max(primaryGridUnits[i].getStartRow(), firstRow[bt]);
Integer storedOffset = (Integer)rowOffsets[bt].get(new Integer(startRow));
int effYOffset;
if (storedOffset != null) {
@@ -198,12 +235,12 @@
//Add areas for row
tclm.addRowBackgroundArea(rowFO, actualRowHeight, layoutContext.getRefIPD(), yoffset);
- for (int i = 0; i < gridUnits.length; i++) {
+ for (int i = 0; i < primaryGridUnits.length; i++) {
GridUnit currentGU = lastRow.safelyGetGridUnit(i);
- if ((gridUnits[i] != null)
- && (forcedFlush || ((end[i] == gridUnits[i].getElements().size() - 1))
+ if ((primaryGridUnits[i] != null)
+ && (forcedFlush || (end[i] == primaryGridUnits[i].getElements().size() - 1)
&& (currentGU == null || currentGU.isLastGridUnitRowSpan()))
- || (gridUnits[i] == null && currentGU != null)) {
+ || (primaryGridUnits[i] == null && currentGU != null)) {
//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
@@ -212,7 +249,7 @@
log.debug((forcedFlush ? "FORCED " : "") + "flushing..." + i + " "
+ start[i] + "-" + end[i]);
}
- PrimaryGridUnit gu = gridUnits[i];
+ PrimaryGridUnit gu = primaryGridUnits[i];
if (gu == null
&& !currentGU.isEmpty()
&& currentGU.getColSpanIndex() == 0
@@ -224,7 +261,7 @@
addAreasForCell(gu, start[i], end[i],
lastRow,
partLength[i], actualRowHeight);
- gridUnits[i] = null;
+ primaryGridUnits[i] = null;
start[i] = 0;
end[i] = -1;
partLength[i] = 0;
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java?rev=579113&r1=579112&r2=579113&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java Tue Sep 25 00:58:45 2007
@@ -278,7 +278,7 @@
}
if (returnList.size() > 0) {
- //Remove last penalty
+ //Remove the last penalty produced by the combining algorithm (see TableStepper), for the last step
ListElement last = (ListElement)returnList.getLast();
if (last.isPenalty() || last instanceof BreakElement) {
if (!last.isForcedBreak()) {
@@ -326,7 +326,7 @@
//whole body iterator to be prefetched!
prevRow = this.bodyIter.getLastRow();
}
- log.debug(prevRow + " - " + row + " - " + nextRow);
+ log.debug("prevRow-row-nextRow: " + prevRow + " - " + row + " - " + nextRow);
//Determine the grid units necessary for getting all the borders right
int guCount = row.getGridUnits().size();
@@ -400,7 +400,6 @@
CommonBorderPaddingBackground.AFTER, flags);
}
}
-
}
}
}
@@ -429,7 +428,9 @@
pgus.clear();
TableRow tableRow = null;
- int minContentHeight = 0; // Minimum content height for the row
+ // The row's minimum content height; 0 if the row's height is auto, otherwise
+ // the .minimum component of the explicitely specified value
+ int minContentHeight = 0;
int maxCellHeight = 0;
int effRowContentHeight = 0;
for (int j = 0; j < row.getGridUnits().size(); j++) {
@@ -698,7 +699,13 @@
false, getTableLM().isFirst(firstPos), getTableLM().isLast(lastCheckPos));
}
}
-
+
+ /**
+ * Iterates over a part of the table and paints the related elements.
+ *
+ * @param iterator iterator over the table's header, body or footer elements
+ * @param painter
+ */
private void iterateAndPaintPositions(Iterator iterator, RowPainter painter) {
List lst = new java.util.ArrayList();
boolean firstPos = false;
@@ -713,13 +720,14 @@
if (body == null) {
body = part.pgu.getBody();
}
- if (tcpos.getFlag(TableContentPosition.FIRST_IN_ROWGROUP)
+ if (tcpos.getFlag(TableContentPosition.FIRST_IN_ROWGROUP)
&& tcpos.row.getFlag(EffRow.FIRST_IN_PART)) {
firstPos = true;
}
if (tcpos.getFlag(TableContentPosition.LAST_IN_ROWGROUP)
&& tcpos.row.getFlag(EffRow.LAST_IN_PART)) {
+ log.trace("LAST_IN_ROWGROUP + LAST_IN_PART");
lastPos = true;
getTableLM().getCurrentPV().addMarkers(body.getMarkers(),
true, firstPos, lastPos);
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/TableLayoutManager.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/TableLayoutManager.java?rev=579113&r1=579112&r2=579113&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/TableLayoutManager.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/TableLayoutManager.java Tue Sep 25 00:58:45 2007
@@ -134,12 +134,18 @@
this.effSpaceAfter = null;
}
- /** @return half the value of border-separation.block-progression-dimension. */
+ /**
+ * @return half the value of border-separation.block-progression-dimension, or 0 if
+ * border-collapse="collapse".
+ */
public int getHalfBorderSeparationBPD() {
return halfBorderSeparationBPD;
}
- /** @return half the value of border-separation.inline-progression-dimension. */
+ /**
+ * @return half the value of border-separation.inline-progression-dimension, or 0 if
+ * border-collapse="collapse".
+ */
public int getHalfBorderSeparationIPD() {
return halfBorderSeparationIPD;
}
@@ -157,12 +163,9 @@
LinkedList returnList = new LinkedList();
if (!breakBeforeServed) {
- try {
- if (addKnuthElementsForBreakBefore(returnList, context)) {
- return returnList;
- }
- } finally {
- breakBeforeServed = true;
+ breakBeforeServed = true;
+ if (addKnuthElementsForBreakBefore(returnList, context)) {
+ return returnList;
}
}
@@ -344,6 +347,7 @@
// add column, body then row areas
+ // BPD of the table, i.e., height of its content; table's borders and paddings not counted
int tableHeight = 0;
//Body childLM;
LayoutContext lc = new LayoutContext(0);
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/TableRowIterator.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/TableRowIterator.java?rev=579113&r1=579112&r2=579113&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/TableRowIterator.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/TableRowIterator.java Tue Sep 25 00:58:45 2007
@@ -35,7 +35,7 @@
/**
- * Iterator that lets the table layout manager step over all of the rows of a part of the
+ * Iterator that lets the table layout manager step over all the rows of a part of the
* table (table-header, table-footer or table-body).
* <p>Note: This class is not thread-safe.</p>
*/
@@ -72,7 +72,9 @@
/** Index of the row currently being fetched. */
private int fetchIndex = -1;
- /** Spans found on the current row which will also span over the next row. */
+ /**
+ * Number of spans found on the current row which will also span over the next row.
+ */
private int pendingRowSpans;
//TODO rows should later be a Jakarta Commons LinkedList so concurrent modifications while
@@ -126,16 +128,6 @@
}
/**
- * Preloads the whole table.
- * <p>Note:This is inefficient for large tables.</p>
- */
- public void prefetchAll() {
- while (prefetchNext()) {
- log.trace("found row...");
- }
- }
-
- /**
* Returns the next row group if any. A row group in this context is the minimum number of
* consecutive rows which contains all spanned grid units of its cells.
* @return the next row group, or null
@@ -259,7 +251,7 @@
* @return the requested effective row or null if (index < 0 || index >= the
* number of already fetched rows)
*/
- public EffRow getCachedRow(int index) {
+ private EffRow getCachedRow(int index) {
if (index < 0 || index >= fetchedRows.size()) {
return null;
} else {
@@ -387,7 +379,7 @@
/**
* Builds the list of grid units corresponding to the given table row.
*
- * @param cells list of cells belonging to the row
+ * @param cells list of cells starting at the current row
* @param rowFO the fo:table-row object containing the row, possibly null
* @return the list of grid units
*/
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/TableStepper.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/TableStepper.java?rev=579113&r1=579112&r2=579113&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/TableStepper.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/table/TableStepper.java Tue Sep 25 00:58:45 2007
@@ -59,18 +59,22 @@
private int[] startRow;
/**
* For each column, index, in the cell's list of Knuth elements, of the element
- * starting the current row.
+ * starting the current step.
*/
private int[] start;
/**
* For each column, index, in the cell's list of Knuth elements, of the element
- * ending the current row.
+ * ending the current step.
*/
private int[] end;
/**
- * For each column, widths of the Knuth elements which will be on the current row.
+ * For each column, widths of the Knuth elements already included in the steps, up to
+ * the current one.
*/
private int[] widths;
+ /**
+ * ?? Width from the start of the row-group up to the current row.
+ */
private int[] baseWidth;
private int[] borderBefore;
private int[] paddingBefore;
@@ -240,6 +244,9 @@
//Copy elements (LinkedList) to array lists to improve
//element access performance
elementLists[column] = new java.util.ArrayList(pgu.getElements());
+ if (log.isTraceEnabled()) {
+ log.trace("column " + (column+1) + ": recording " + elementLists[column].size() + " element(s)");
+ }
}
if (isSeparateBorderModel()) {
borderBefore[column] = pgu.getBorders().getBorderBeforeWidth(false);
@@ -267,6 +274,7 @@
* the current row group.
*/
private void initializeElementLists() {
+ log.trace("Entering initializeElementLists()");
for (int i = 0; i < start.length; i++) {
setupElementList(i);
}
@@ -443,8 +451,15 @@
}
return returnList;
}
-
+
+ /**
+ * Finds the smallest increment leading to the next legal break inside the row-group.
+ *
+ * @param lastStep used for log only
+ * @return the size of the increment, -1 if no next step is available (end of row-group reached)
+ */
private int getNextStep(int lastStep) {
+ log.trace("Entering getNextStep");
this.lastMaxPenaltyLength = 0;
//Check for forced break conditions
/*
@@ -460,6 +475,7 @@
// boolean will be reset (see below)
boolean currentGridRowFinished = true;
for (int i = 0; i < start.length; i++) {
+ // null element lists probably correspond to empty cells
if (elementLists[i] == null) {
continue;
}
@@ -474,8 +490,9 @@
currentGridRowFinished = false;
}
} else {
- start[i] = -1; //end of list reached
- end[i] = -1;
+ throw new IllegalStateException("end[i] overflows elementList[i].size()");
+// start[i] = -1; //end of list reached
+// end[i] = -1;
}
}
@@ -539,6 +556,10 @@
}
}
if (end[i] < start[i]) {
+ if (log.isTraceEnabled()) {
+ log.trace("column " + (i + 1) + ": (end=" + end[i] + ") < (start=" + start[i]
+ + ") => resetting width to backupWidth");
+ }
widths[i] = backupWidths[i];
} else {
seqCount++;
@@ -563,8 +584,8 @@
}
}
if (log.isTraceEnabled()) {
- log.trace("column " + i + ": borders before=" + borderBefore[i] + " after=" + borderAfter[i]);
- log.trace("column " + i + ": padding before=" + paddingBefore[i] + " after=" + paddingAfter[i]);
+ log.trace("column " + (i+1) + ": borders before=" + borderBefore[i] + " after=" + borderAfter[i]);
+ log.trace("column " + (i+1) + ": padding before=" + paddingBefore[i] + " after=" + paddingAfter[i]);
}
}
if (seqCount == 0) {
@@ -608,7 +629,13 @@
widths[i] = backupWidths[i];
end[i] = start[i] - 1;
if (baseWidth[i] + widths[i] > minStep) {
- log.debug("minStep vs. border/padding increase conflict:");
+ if (log.isDebugEnabled()) {
+ log.debug("column "
+ + (i + 1)
+ + ": minStep vs. border/padding increase conflict: basewidth + width = "
+ + baseWidth[i] + " + " + widths[i] + " = "
+ + (baseWidth[i] + widths[i]));
+ }
if (activeRowIndex == 0) {
log.debug(" First row. Skip this step.");
skippedStep = true;
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org