package org.apache.fop.layoutmgr.table;
import java.util.List;
+import java.util.ListIterator;
import org.apache.fop.layoutmgr.ElementListUtils;
import org.apache.fop.layoutmgr.KnuthBox;
private PrimaryGridUnit pgu;
/** Knuth elements for this active cell. */
private List elementList;
+ /** Iterator over the Knuth element list. */
+ private ListIterator knuthIter;
private boolean prevIsBox = false;
/** Number of the row where the row-span ends, zero-based. */
private int endRow;
// log.trace("column " + (column+1) + ": recording " + elementLists.size() + " element(s)");
// }
}
+ knuthIter = elementList.listIterator();
includedLength = -1; // Avoid troubles with cells having content of zero length
this.previousRowsLength = previousRowsLength;
width = previousRowsLength;
private void goToNextLegalBreak() {
lastPenaltyLength = 0;
boolean breakFound = false;
- while (!breakFound && end + 1 < elementList.size()) {
- end++;
- KnuthElement el = (KnuthElement)elementList.get(end);
+ while (!breakFound && knuthIter.hasNext()) {
+ KnuthElement el = (KnuthElement) knuthIter.next();
if (el.isPenalty()) {
prevIsBox = false;
if (el.getP() < KnuthElement.INFINITE) {
width += el.getW();
}
}
+ end = knuthIter.nextIndex() - 1;
}
int getNextStep() {
return width + lastPenaltyLength + borderBefore + borderAfter + paddingBefore + paddingAfter;
} else {
start = end + 1;
- if (end < elementList.size() - 1) {
-
+ if (knuthIter.hasNext()) {
goToNextLegalBreak();
return width + lastPenaltyLength + borderBefore + borderAfter + paddingBefore + paddingAfter;
} else {
private void computeRemainingLength() {
remainingLength = totalLength - width;
- int index = end + 1;
- while (index < elementList.size()) {
- KnuthElement el = (KnuthElement)elementList.get(index);
- if (el.isBox()) {
- break;
- } else if (el.isGlue()) {
+ // Save the current location in the element list
+ int oldIndex = knuthIter.nextIndex();
+ KnuthElement el;
+ while (knuthIter.hasNext()
+ && !(el = (KnuthElement) knuthIter.next()).isBox()) {
+ if (el.isGlue()) {
remainingLength -= el.getW();
}
- index++;
+ }
+ // Reset the iterator to the current location
+ while (knuthIter.nextIndex() > oldIndex) {
+ knuthIter.previous();
}
}