Browse Source

Use an iterator instead of get(index) to iterate over the list of Knuth elements


git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@557541 13f79535-47bb-0310-9956-ffa450edef68
tags/fop-0_95beta
Vincent Hennebert 17 years ago
parent
commit
9bab0f8449
1 changed files with 18 additions and 12 deletions
  1. 18
    12
      src/java/org/apache/fop/layoutmgr/table/ActiveCell.java

+ 18
- 12
src/java/org/apache/fop/layoutmgr/table/ActiveCell.java View File

package org.apache.fop.layoutmgr.table; package org.apache.fop.layoutmgr.table;


import java.util.List; import java.util.List;
import java.util.ListIterator;


import org.apache.fop.layoutmgr.ElementListUtils; import org.apache.fop.layoutmgr.ElementListUtils;
import org.apache.fop.layoutmgr.KnuthBox; import org.apache.fop.layoutmgr.KnuthBox;
private PrimaryGridUnit pgu; private PrimaryGridUnit pgu;
/** Knuth elements for this active cell. */ /** Knuth elements for this active cell. */
private List elementList; private List elementList;
/** Iterator over the Knuth element list. */
private ListIterator knuthIter;
private boolean prevIsBox = false; private boolean prevIsBox = false;
/** Number of the row where the row-span ends, zero-based. */ /** Number of the row where the row-span ends, zero-based. */
private int endRow; private int endRow;
// log.trace("column " + (column+1) + ": recording " + elementLists.size() + " element(s)"); // log.trace("column " + (column+1) + ": recording " + elementLists.size() + " element(s)");
// } // }
} }
knuthIter = elementList.listIterator();
includedLength = -1; // Avoid troubles with cells having content of zero length includedLength = -1; // Avoid troubles with cells having content of zero length
this.previousRowsLength = previousRowsLength; this.previousRowsLength = previousRowsLength;
width = previousRowsLength; width = previousRowsLength;
private void goToNextLegalBreak() { private void goToNextLegalBreak() {
lastPenaltyLength = 0; lastPenaltyLength = 0;
boolean breakFound = false; 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()) { if (el.isPenalty()) {
prevIsBox = false; prevIsBox = false;
if (el.getP() < KnuthElement.INFINITE) { if (el.getP() < KnuthElement.INFINITE) {
width += el.getW(); width += el.getW();
} }
} }
end = knuthIter.nextIndex() - 1;
} }


int getNextStep() { int getNextStep() {
return width + lastPenaltyLength + borderBefore + borderAfter + paddingBefore + paddingAfter; return width + lastPenaltyLength + borderBefore + borderAfter + paddingBefore + paddingAfter;
} else { } else {
start = end + 1; start = end + 1;
if (end < elementList.size() - 1) {

if (knuthIter.hasNext()) {
goToNextLegalBreak(); goToNextLegalBreak();
return width + lastPenaltyLength + borderBefore + borderAfter + paddingBefore + paddingAfter; return width + lastPenaltyLength + borderBefore + borderAfter + paddingBefore + paddingAfter;
} else { } else {


private void computeRemainingLength() { private void computeRemainingLength() {
remainingLength = totalLength - width; 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(); remainingLength -= el.getW();
} }
index++;
}
// Reset the iterator to the current location
while (knuthIter.nextIndex() > oldIndex) {
knuthIter.previous();
} }
} }



Loading…
Cancel
Save