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. */
} 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)");
// }
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();
}
}