From 57ccdb8751394586dd27a057feba7ff4039aba38 Mon Sep 17 00:00:00 2001 From: Vincent Hennebert Date: Mon, 28 Apr 2014 19:25:12 +0000 Subject: Made WhitespaceManagement.getKnuthElements more robust by iterating over childLM.getNextKnuthElements git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_WhitespaceManagement@1590760 13f79535-47bb-0310-9956-ffa450edef68 --- .../fop/layoutmgr/MultiSwitchLayoutManager.java | 30 +++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'src/java/org/apache/fop/layoutmgr') diff --git a/src/java/org/apache/fop/layoutmgr/MultiSwitchLayoutManager.java b/src/java/org/apache/fop/layoutmgr/MultiSwitchLayoutManager.java index 1310fb888..2bef1a815 100644 --- a/src/java/org/apache/fop/layoutmgr/MultiSwitchLayoutManager.java +++ b/src/java/org/apache/fop/layoutmgr/MultiSwitchLayoutManager.java @@ -59,12 +59,12 @@ public class MultiSwitchLayoutManager extends BlockStackingLayoutManager { } private interface KnuthElementsGenerator { - List getKnuthElement(LayoutContext context, int alignment); + List getKnuthElements(LayoutContext context, int alignment); } private class DefaultKnuthListGenerator implements KnuthElementsGenerator { - public List getKnuthElement(LayoutContext context, int alignment) { + public List getKnuthElements(LayoutContext context, int alignment) { List knuthList = new LinkedList(); LayoutManager childLM = getChildLM(); while (!childLM.isFinished()) { @@ -83,7 +83,8 @@ public class MultiSwitchLayoutManager extends BlockStackingLayoutManager { private class WhitespaceManagement implements KnuthElementsGenerator { - public List getKnuthElement(LayoutContext context, int alignment) { + @SuppressWarnings("unchecked") + public List getKnuthElements(LayoutContext context, int alignment) { MultiSwitchLayoutManager mslm = MultiSwitchLayoutManager.this; List knuthList = new LinkedList(); @@ -91,18 +92,17 @@ public class MultiSwitchLayoutManager extends BlockStackingLayoutManager { new WhitespaceManagementPosition(mslm)); LayoutManager childLM; while ((childLM = getChildLM()) != null) { - if (!childLM.isFinished()) { - LayoutContext childLC = makeChildLayoutContext(context); - List childElements = childLM.getNextKnuthElements(childLC, alignment); - if (childElements != null) { - List newList = new LinkedList(); - wrapPositionElements(childElements, newList); - // TODO Doing space resolution here is wrong. - SpaceResolver.resolveElementList(newList); - int contentLength = ElementListUtils.calcContentLength(newList); - penalty.addVariant(penalty.new Variant(newList, contentLength)); - } + LayoutContext childLC = makeChildLayoutContext(context); + List childElements = new LinkedList(); + while (!childLM.isFinished()) { + childElements.addAll(childLM.getNextKnuthElements(childLC, alignment)); } + List wrappedElements = new LinkedList(); + wrapPositionElements(childElements, wrappedElements); + // TODO Doing space resolution here is wrong. + SpaceResolver.resolveElementList(wrappedElements); + int contentLength = ElementListUtils.calcContentLength(wrappedElements); + penalty.addVariant(penalty.new Variant(wrappedElements, contentLength)); } // Prevent the penalty from being ignored if it is at the beginning of the content knuthList.add(new KnuthBox(0, new Position(mslm), false)); @@ -129,7 +129,7 @@ public class MultiSwitchLayoutManager extends BlockStackingLayoutManager { @Override public List getNextKnuthElements(LayoutContext context, int alignment) { referenceIPD = context.getRefIPD(); - List knuthList = knuthGen.getKnuthElement(context, alignment); + List knuthList = knuthGen.getKnuthElements(context, alignment); setFinished(true); return knuthList; } -- cgit v1.2.3