diff options
author | Jeremias Maerki <jeremias@apache.org> | 2011-06-21 09:44:42 +0000 |
---|---|---|
committer | Jeremias Maerki <jeremias@apache.org> | 2011-06-21 09:44:42 +0000 |
commit | 1df8c0b1dbd25c96a90757fac3db1daf238991af (patch) | |
tree | f0416777023b9b2649c9fc78c173527cadf65bb7 | |
parent | 79b6690593ef89e6549a9803eea478ab8134802b (diff) | |
download | xmlgraphics-fop-1df8c0b1dbd25c96a90757fac3db1daf238991af.tar.gz xmlgraphics-fop-1df8c0b1dbd25c96a90757fac3db1daf238991af.zip |
Fixed regression introduced by SVN rev 1088079:
Endless loop with empty fo:inline.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1137921 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java | 8 | ||||
-rw-r--r-- | test/layoutengine/standard-testcases/inline_empty.xml | 46 |
2 files changed, 50 insertions, 4 deletions
diff --git a/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java b/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java index 5e696801d..db7d1edc8 100644 --- a/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java +++ b/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java @@ -649,8 +649,8 @@ public class LineLayoutManager extends InlineStackingLayoutManager Paragraph lastPar = null; - InlineLevelLayoutManager curLM = (InlineLevelLayoutManager) getChildLM(); - while (curLM != null) { + InlineLevelLayoutManager curLM; + while ((curLM = (InlineLevelLayoutManager) getChildLM()) != null) { List inlineElements = curLM.getNextKnuthElements(inlineLC, effectiveAlignment); if (inlineElements == null || inlineElements.size() == 0) { /* curLM.getNextKnuthElements() returned null or an empty list; @@ -747,7 +747,6 @@ public class LineLayoutManager extends InlineStackingLayoutManager } } } // end of loop over returnedList - curLM = (InlineLevelLayoutManager) getChildLM(); } if (lastPar != null) { @@ -1149,6 +1148,7 @@ public class LineLayoutManager extends InlineStackingLayoutManager } /** {@inheritDoc} */ + @Override public List getChangedKnuthElements(List oldList, int alignment) { List<KnuthElement> returnList = new LinkedList<KnuthElement>(); for (int p = 0; p < knuthParagraphs.size(); p++) { @@ -1419,7 +1419,7 @@ public class LineLayoutManager extends InlineStackingLayoutManager private void addInlineArea(LayoutContext context, LineBreakPosition lbp, boolean isLastPosition) { - KnuthSequence seq = (KnuthSequence) knuthParagraphs.get(lbp.parIndex); + KnuthSequence seq = knuthParagraphs.get(lbp.parIndex); int startElementIndex = lbp.startIndex; int endElementIndex = lbp.getLeafPos(); diff --git a/test/layoutengine/standard-testcases/inline_empty.xml b/test/layoutengine/standard-testcases/inline_empty.xml new file mode 100644 index 000000000..1ff8d93b5 --- /dev/null +++ b/test/layoutengine/standard-testcases/inline_empty.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<!-- $Id$ --> +<testcase> + <info> + <p> + This test checks an empty fo:inline. This used to create an endless loop + so we're checking that here so it doesn't happen again. + </p> + </info> + <fo> + <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg"> + <fo:layout-master-set> + <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in"> + <fo:region-body/> + </fo:simple-page-master> + </fo:layout-master-set> + <fo:page-sequence master-reference="normal" white-space-collapse="true"> + <fo:flow flow-name="xsl-region-body"> + <fo:block>No endless loop, please: <fo:inline/></fo:block> + </fo:flow> + </fo:page-sequence> + </fo:root> + </fo> + <checks> + <element-list category="breaker"> + <box w="14400"/> + <skip>3</skip> + </element-list> + </checks> +</testcase> |