Author: ssteiner
Date: Wed Nov  2 09:01:56 2022
New Revision: 1904996

URL: http://svn.apache.org/viewvc?rev=1904996&view=rev
Log:
FOP-3105: Infinite loop when using page break with changing ipd

Added:
    
xmlgraphics/fop/trunk/fop/test/layoutengine/standard-testcases/flow_changing-ipd_7.xml
   (with props)
Modified:
    
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/BlockLayoutManager.java
    
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/RestartAtLM.java
    
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java

Modified: 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/BlockLayoutManager.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/BlockLayoutManager.java?rev=1904996&r1=1904995&r2=1904996&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/BlockLayoutManager.java
 (original)
+++ 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/BlockLayoutManager.java
 Wed Nov  2 09:01:56 2022
@@ -141,7 +141,9 @@ public class BlockLayoutManager extends
             return childLM.getNextKnuthElements(childLC, alignment);
         } else {
             if (childLM instanceof LineLayoutManager) {
-                assert (restartPosition instanceof LeafPosition);
+                if (!(restartPosition instanceof LeafPosition)) {
+                    restartPosition = null;
+                }
                 return ((LineLayoutManager) 
childLM).getNextKnuthElements(childLC, alignment,
                         (LeafPosition) restartPosition);
             } else {

Modified: 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/RestartAtLM.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/RestartAtLM.java?rev=1904996&r1=1904995&r2=1904996&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/RestartAtLM.java
 (original)
+++ 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/RestartAtLM.java
 Wed Nov  2 09:01:56 2022
@@ -92,8 +92,10 @@ class RestartAtLM {
                     position = position.getPosition();
                 }
                 if (position.getPosition() == null) {
-                    position.getLM().getFObj().setForceKeepTogether(true);
-                    invalidPosition = true;
+                    if (!position.getLM().getFObj().isForceKeepTogether()) {
+                        position.getLM().getFObj().setForceKeepTogether(true);
+                        invalidPosition = true;
+                    }
                     return null;
                 }
                 restartAtLM = position.getPosition().getLM();

Modified: 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java?rev=1904996&r1=1904995&r2=1904996&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java
 (original)
+++ 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java
 Wed Nov  2 09:01:56 2022
@@ -651,8 +651,13 @@ public class LineLayoutManager extends I
      */
     public List getNextKnuthElements(LayoutContext context, int alignment,
             LeafPosition restartPosition) {
-        log.trace("Restarting line breaking from index " + 
restartPosition.getIndex());
-        int parIndex = restartPosition.getLeafPos();
+        int parIndex = 0;
+        int restartPositionIdx = 0;
+        if (restartPosition != null) {
+            log.trace("Restarting line breaking from index " + 
restartPosition.getIndex());
+            parIndex = restartPosition.getLeafPos();
+            restartPositionIdx = restartPosition.getIndex();
+        }
 
         for (int i = 0; i < parIndex; i++) {
             knuthParagraphs.remove(0);
@@ -664,7 +669,7 @@ public class LineLayoutManager extends I
             ((Paragraph) paragraph).ignoreAtStart = 0;
             isFirstInBlock = false;
         }
-        paragraph.subList(0, restartPosition.getIndex() + 1).clear();
+        paragraph.subList(0, restartPositionIdx + 1).clear();
         Iterator<KnuthElement> iter = paragraph.iterator();
         while (iter.hasNext() && !iter.next().isBox()) {
             iter.remove();

Added: 
xmlgraphics/fop/trunk/fop/test/layoutengine/standard-testcases/flow_changing-ipd_7.xml
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop/test/layoutengine/standard-testcases/flow_changing-ipd_7.xml?rev=1904996&view=auto
==============================================================================
--- 
xmlgraphics/fop/trunk/fop/test/layoutengine/standard-testcases/flow_changing-ipd_7.xml
 (added)
+++ 
xmlgraphics/fop/trunk/fop/test/layoutengine/standard-testcases/flow_changing-ipd_7.xml
 Wed Nov  2 09:01:56 2022
@@ -0,0 +1,62 @@
+<?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 that a list can be relaid out when a change in ipd 
happens across pages.
+    </p>
+  </info>
+  <fo>
+<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"; 
xmlns:fox="http://xmlgraphics.apache.org/fop/extensions";>
+  <fo:layout-master-set>
+    <fo:simple-page-master master-name="PageFront" page-width="8.5in" 
page-height="11in" margin-bottom="0in" margin-right="0in" margin-top="0in" 
margin-left="0in">
+      <fo:region-body margin-bottom="1in" margin-right="3.1in" 
margin-top="4.5in" margin-left="1in" region-name="letterPageBody"/>     
+    </fo:simple-page-master>
+    <fo:simple-page-master master-name="PageRest" page-width="8.5in" 
page-height="11in" margin-bottom="0in" margin-right="0in" margin-top="0in" 
margin-left="0in">
+      <fo:region-body margin-bottom="1in" margin-right="1in" margin-top="1in" 
margin-left="1in" region-name="letterPageBody"/>
+    </fo:simple-page-master>
+    <fo:page-sequence-master master-name="LetterPages">
+      <fo:repeatable-page-master-alternatives>
+        <fo:conditional-page-master-reference page-position="first" 
master-reference="PageFront"/>
+        <fo:conditional-page-master-reference page-position="rest" 
master-reference="PageRest"/>
+        <fo:conditional-page-master-reference page-position="last" 
master-reference="PageRest"/>
+      </fo:repeatable-page-master-alternatives>
+    </fo:page-sequence-master>
+  </fo:layout-master-set>
+  <fo:page-sequence format="1" id="th_default_sequence6" 
initial-page-number="auto" master-reference="LetterPages">
+    <fo:flow flow-name="letterPageBody">
+      <fo:block>        
+        <fo:block>
+          <fo:inline>
+            <fo:leader/>
+            <fo:block break-before="page"/>Call if you need us</fo:inline>
+        </fo:block>
+        <fo:block>
+          <fo:block break-before="page"/>
+        </fo:block>
+      </fo:block>
+    </fo:flow>
+  </fo:page-sequence>
+</fo:root>
+  </fo>
+  <checks>
+    <eval expected="4" xpath="count(//pageViewport)" />
+    <eval expected="Call" xpath="//pageViewport[3]//word[1]" />
+  </checks>
+</testcase>

Propchange: 
xmlgraphics/fop/trunk/fop/test/layoutengine/standard-testcases/flow_changing-ipd_7.xml
------------------------------------------------------------------------------
    svn:eol-style = native



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscr...@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-h...@xmlgraphics.apache.org

Reply via email to