aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/java/org/apache/fop/layoutmgr/ElementListUtils.java19
-rw-r--r--src/java/org/apache/fop/layoutmgr/SpaceResolver.java8
-rw-r--r--src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java29
-rw-r--r--src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java4
4 files changed, 34 insertions, 26 deletions
diff --git a/src/java/org/apache/fop/layoutmgr/ElementListUtils.java b/src/java/org/apache/fop/layoutmgr/ElementListUtils.java
index c4fd42a35..e68698e57 100644
--- a/src/java/org/apache/fop/layoutmgr/ElementListUtils.java
+++ b/src/java/org/apache/fop/layoutmgr/ElementListUtils.java
@@ -146,4 +146,23 @@ public class ElementListUtils {
return last.isForcedBreak();
}
+ /**
+ * Determines the position of the previous break before the start index on an
+ * element list.
+ * @param elems the element list
+ * @param startIndex the start index
+ * @return the position of the previous break, or -1 if there was no previous break
+ */
+ public static int determinePreviousBreak(List elems, int startIndex) {
+ int prevBreak = startIndex - 1;
+ while (prevBreak >= 0) {
+ KnuthElement el = (KnuthElement)elems.get(prevBreak);
+ if (el.isPenalty() && el.getP() < KnuthElement.INFINITE) {
+ break;
+ }
+ prevBreak--;
+ }
+ return prevBreak;
+ }
+
}
diff --git a/src/java/org/apache/fop/layoutmgr/SpaceResolver.java b/src/java/org/apache/fop/layoutmgr/SpaceResolver.java
index 45e9990ea..583f8ffaa 100644
--- a/src/java/org/apache/fop/layoutmgr/SpaceResolver.java
+++ b/src/java/org/apache/fop/layoutmgr/SpaceResolver.java
@@ -692,14 +692,14 @@ public class SpaceResolver {
* @param effectiveList the effective element list
* @param startElementIndex index of the first element in the part to be processed
* @param endElementIndex index of the last element in the part to be processed
- * @param lastBreak index of the the break possibility just before this part (used to
+ * @param prevBreak index of the the break possibility just before this part (used to
* identify a break condition, lastBreak <= 0 represents a no-break condition)
*/
public static void performConditionalsNotification(List effectiveList,
- int startElementIndex, int endElementIndex, int lastBreak) {
+ int startElementIndex, int endElementIndex, int prevBreak) {
KnuthElement el = null;
- if (lastBreak > 0) {
- el = (KnuthElement)effectiveList.get(lastBreak);
+ if (prevBreak > 0) {
+ el = (KnuthElement)effectiveList.get(prevBreak);
}
SpaceResolver.SpaceHandlingBreakPosition beforeBreak = null;
SpaceResolver.SpaceHandlingBreakPosition afterBreak = null;
diff --git a/src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java b/src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java
index 5a98deac6..0ed202c6f 100644
--- a/src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java
@@ -461,30 +461,15 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager
int bodyFirstIndex = ((ListItemPosition) positionList.getFirst()).getBodyFirstIndex();
int bodyLastIndex = ((ListItemPosition) positionList.getLast()).getBodyLastIndex();
- int lastBreak;
- //Determine last break if any
- lastBreak = labelFirstIndex - 1;
- while (lastBreak >= 0) {
- KnuthElement el = (KnuthElement)labelList.get(lastBreak);
- if (el.isPenalty() && el.getP() < KnuthElement.INFINITE) {
- break;
- }
- lastBreak--;
- }
+ //Determine previous break if any
+ int previousBreak = ElementListUtils.determinePreviousBreak(labelList, labelFirstIndex);
SpaceResolver.performConditionalsNotification(labelList,
- labelFirstIndex, labelLastIndex, lastBreak);
-
- //Determine last break if any
- lastBreak = bodyFirstIndex - 1;
- while (lastBreak >= 0) {
- KnuthElement el = (KnuthElement)bodyList.get(lastBreak);
- if (el.isPenalty() && el.getP() < KnuthElement.INFINITE) {
- break;
- }
- lastBreak--;
- }
+ labelFirstIndex, labelLastIndex, previousBreak);
+
+ //Determine previous break if any
+ previousBreak = ElementListUtils.determinePreviousBreak(labelList, labelFirstIndex);
SpaceResolver.performConditionalsNotification(bodyList,
- bodyFirstIndex, bodyLastIndex, lastBreak);
+ bodyFirstIndex, bodyLastIndex, previousBreak);
// add label areas
if (labelFirstIndex <= labelLastIndex) {
diff --git a/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java b/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java
index 99028d915..9fabeccc5 100644
--- a/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java
@@ -49,6 +49,7 @@ import org.apache.fop.layoutmgr.ListElement;
import org.apache.fop.layoutmgr.MinOptMaxUtil;
import org.apache.fop.layoutmgr.Position;
import org.apache.fop.layoutmgr.PositionIterator;
+import org.apache.fop.layoutmgr.SpaceResolver;
import org.apache.fop.layoutmgr.TraitSetter;
import org.apache.fop.layoutmgr.SpaceResolver.SpaceHandlingBreakPosition;
import org.apache.fop.traits.MinOptMax;
@@ -948,6 +949,9 @@ public class TableContentLayoutManager implements PercentBaseContext {
cellLM.setContentHeight(contentHeight);
cellLM.setRowHeight(effCellHeight);
//cellLM.setRowHeight(row.getHeight().opt);
+ int prevBreak = ElementListUtils.determinePreviousBreak(pgu.getElements(), startPos);
+ SpaceResolver.performConditionalsNotification(pgu.getElements(),
+ startPos, endPos, prevBreak);
cellLM.addAreas(new KnuthPossPosIter(pgu.getElements(),
startPos, endPos + 1), layoutContext);
}