Browse Source

Use a prevIsBox boolean instead of duplicating the list of Knuth elements for active cells into an ArrayList


git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@554709 13f79535-47bb-0310-9956-ffa450edef68
tags/fop-0_94
Vincent Hennebert 17 years ago
parent
commit
9318fb5d17
1 changed files with 13 additions and 10 deletions
  1. 13
    10
      src/java/org/apache/fop/layoutmgr/table/TableStepper.java

+ 13
- 10
src/java/org/apache/fop/layoutmgr/table/TableStepper.java View File

@@ -44,6 +44,7 @@ public class TableStepper {
private PrimaryGridUnit pgu;
/** Knuth elements for this active cell. */
private List elementList;
private boolean prevIsBox = false;
/** Number of the row where the row-span begins, zero-based. */
private int startRow;
/** Index, in the list of Knuth elements, of the element starting the current step. */
@@ -89,7 +90,7 @@ public class TableStepper {
} else {
//Copy elements (LinkedList) to array lists to improve
//element access performance
elementList = new java.util.ArrayList(pgu.getElements());
elementList = pgu.getElements();
// if (log.isTraceEnabled()) {
// log.trace("column " + (column+1) + ": recording " + elementLists.size() + " element(s)");
// }
@@ -140,25 +141,27 @@ public class TableStepper {

private void goToNextLegalBreak() {
lastPenaltyLength = 0;
while (end + 1 < elementList.size()) {
boolean breakFound = false;
while (!breakFound && end + 1 < elementList.size()) {
end++;
KnuthElement el = (KnuthElement)elementList.get(end);
if (el.isPenalty()) {
prevIsBox = false;
if (el.getP() < KnuthElement.INFINITE) {
//First legal break point
lastPenaltyLength = el.getW();
break;
breakFound = true;
}
} else if (el.isGlue()) {
if (end > 0) {
KnuthElement prev = (KnuthElement)elementList.get(end - 1);
if (prev.isBox()) {
//Second legal break point
break;
}
if (prevIsBox) {
//Second legal break point
breakFound = true;
} else {
width += el.getW();
}
width += el.getW();
prevIsBox = false;
} else {
prevIsBox = true;
width += el.getW();
}
}

Loading…
Cancel
Save