return returnList;
} else {
- if (prevLM != null) {
- // there is a block handled by prevLM
- // before the one handled by curLM
- addInBetweenBreak(contentList, context, childLC);
- }
if (returnedList == null || returnedList.isEmpty()) {
//Avoid NoSuchElementException below (happens with empty blocks)
continue;
}
+ if (prevLM != null
+ && !ElementListUtils.startsWithForcedBreak(returnedList)) {
+ // there is a block handled by prevLM before the one
+ // handled by curLM, and the one handled
+ // by the current LM does not begin with a break
+ addInBetweenBreak(contentList, context, childLC);
+ }
contentList.addAll(returnedList);
- if (((ListElement) ListUtil.getLast(returnedList))
- .isForcedBreak()) {
+ if (ElementListUtils.endsWithForcedBreak(returnedList)) {
// a descendant of this block has break-after
if (curLM.isFinished() && !hasNextChildLM()) {
forcedBreakAfterLast = (BreakElement) ListUtil
return last.isForcedBreak();
}
+ /**
+ * Indicates whether the given element list starts with a forced break.
+ * @param elems the element list
+ * @return true if the list starts with a forced break
+ */
+ public static boolean startsWithForcedBreak(List elems) {
+ return !elems.isEmpty()
+ && ((ListElement) elems.get(0)).isForcedBreak();
+ }
+
/**
* Indicates whether the given element list ends with a penalty with a non-infinite penalty
* value.
return prevBreak;
}
-}
+}
\ No newline at end of file
int span = EN_NONE;
int disableColumnBalancing = EN_FALSE;
if (curLM instanceof BlockLayoutManager) {
- span = ((BlockLayoutManager)curLM).getBlockFO().getSpan();
- disableColumnBalancing = ((BlockLayoutManager) curLM).getBlockFO()
- .getDisableColumnBalancing();
+ span = ((BlockLayoutManager)curLM).getSpan();
+ disableColumnBalancing = ((BlockLayoutManager) curLM).getDisableColumnBalancing();
} else if (curLM instanceof BlockContainerLayoutManager) {
- span = ((BlockContainerLayoutManager)curLM).getBlockContainerFO().getSpan();
- disableColumnBalancing = ((BlockContainerLayoutManager) curLM)
- .getBlockContainerFO().getDisableColumnBalancing();
+ span = ((BlockContainerLayoutManager)curLM).getSpan();
+ disableColumnBalancing = ((BlockContainerLayoutManager) curLM).getDisableColumnBalancing();
}
int currentSpan = context.getCurrentSpan();
returnList.addAll(returnedList);
SpaceResolver.resolveElementList(returnList);
return returnList;
- } else {
- if (returnList.size() > 0) {
+ } else if (returnedList.size() > 0) {
+ if (returnList.size() > 0
+ && !ElementListUtils.startsWithForcedBreak(returnedList)) {
addInBetweenBreak(returnList, context, childLC);
}
- if (returnedList.size() > 0) {
- returnList.addAll(returnedList);
- if (ElementListUtils.endsWithForcedBreak(returnList)) {
- if (curLM.isFinished() && !hasNextChildLM()) {
- //If the layout manager is finished at this point, the pending
- //marks become irrelevant.
- childLC.clearPendingMarks();
- //setFinished(true);
- break;
- }
- // a descendant of this flow has break-after
- SpaceResolver.resolveElementList(returnList);
- return returnList;
+ returnList.addAll(returnedList);
+ if (ElementListUtils.endsWithForcedBreak(returnList)) {
+ if (curLM.isFinished() && !hasNextChildLM()) {
+ //If the layout manager is finished at this point, the pending
+ //marks become irrelevant.
+ childLC.clearPendingMarks();
+ //setFinished(true);
+ break;
}
+ // a descendant of this flow has break-after
+ SpaceResolver.resolveElementList(returnList);
+ return returnList;
}
}