You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by ss...@apache.org on 2017/06/20 07:45:25 UTC
svn commit: r1799312 - in /xmlgraphics/fop/trunk/fop-core/src:
main/java/org/apache/fop/fo/pagination/ main/java/org/apache/fop/layoutmgr/
test/java/org/apache/fop/layoutmgr/
Author: ssteiner
Date: Tue Jun 20 07:45:25 2017
New Revision: 1799312
URL: http://svn.apache.org/viewvc?rev=1799312&view=rev
Log:
FOP-2714: Infinite loop when region name not found
Modified:
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fo/pagination/RegionBody.java
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/layoutmgr/PageSequenceLayoutManagerTestCase.java
Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fo/pagination/RegionBody.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fo/pagination/RegionBody.java?rev=1799312&r1=1799311&r2=1799312&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fo/pagination/RegionBody.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fo/pagination/RegionBody.java Tue Jun 20 07:45:25 2017
@@ -141,7 +141,7 @@ public class RegionBody extends Region {
}
/** {@inheritDoc} */
- protected String getDefaultRegionName() {
+ public String getDefaultRegionName() {
return "xsl-region-body";
}
Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java?rev=1799312&r1=1799311&r2=1799312&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java Tue Jun 20 07:45:25 2017
@@ -34,6 +34,8 @@ import org.apache.fop.complexscripts.bid
import org.apache.fop.fo.Constants;
import org.apache.fop.fo.pagination.PageSequence;
import org.apache.fop.fo.pagination.PageSequenceMaster;
+import org.apache.fop.fo.pagination.Region;
+import org.apache.fop.fo.pagination.RegionBody;
import org.apache.fop.fo.pagination.SideRegion;
import org.apache.fop.fo.pagination.StaticContent;
import org.apache.fop.layoutmgr.inline.ContentLayoutManager;
@@ -189,16 +191,27 @@ public class PageSequenceLayoutManager e
// cannot layout areas from the main flow. Blank pages can be created from empty pages.
if (!isBlank) {
- while (!getPageSequence().getMainFlow().getFlowName()
- .equals(newPage.getSimplePageMaster()
- .getRegion(FO_REGION_BODY).getRegionName())) {
+ int i = 0;
+ while (!flowNameEquals(newPage, i > 0)) {
newPage = super.makeNewPage(isBlank);
+ i++;
}
}
return newPage;
}
+ private boolean flowNameEquals(Page newPage, boolean strict) {
+ String psName = getPageSequence().getMainFlow().getFlowName();
+ Region body = newPage.getSimplePageMaster().getRegion(FO_REGION_BODY);
+ String name = body.getRegionName();
+ if (strict && !name.equals(psName) && !name.equals(((RegionBody)body).getDefaultRegionName())) {
+ throw new RuntimeException(
+ "The flow-name \"" + name + "\" could not be mapped to a region-name in the layout-master-set");
+ }
+ return psName.equals(name);
+ }
+
private void layoutSideRegion(int regionID) {
SideRegion reg = (SideRegion)curPage.getSimplePageMaster().getRegion(regionID);
if (reg == null) {
Modified: xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/layoutmgr/PageSequenceLayoutManagerTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/layoutmgr/PageSequenceLayoutManagerTestCase.java?rev=1799312&r1=1799311&r2=1799312&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/layoutmgr/PageSequenceLayoutManagerTestCase.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/layoutmgr/PageSequenceLayoutManagerTestCase.java Tue Jun 20 07:45:25 2017
@@ -31,6 +31,7 @@ import org.apache.fop.area.PageViewport;
import org.apache.fop.fo.pagination.Flow;
import org.apache.fop.fo.pagination.PageSequence;
import org.apache.fop.fo.pagination.Region;
+import org.apache.fop.fo.pagination.RegionBody;
import org.apache.fop.fo.pagination.Root;
import org.apache.fop.fo.pagination.SimplePageMaster;
@@ -106,7 +107,7 @@ public class PageSequenceLayoutManagerTe
final Page page = mock(Page.class);
final SimplePageMaster spm = mock(SimplePageMaster.class);
final PageViewport pageViewport = mock(PageViewport.class);
- final Region region = mock(Region.class);
+ final Region region = mock(RegionBody.class);
when(page.getSimplePageMaster()).thenReturn(spm);
when(page.getPageViewport()).thenReturn(pageViewport);
@@ -116,4 +117,35 @@ public class PageSequenceLayoutManagerTe
return page;
}
+
+ @Test
+ public void testRegionNameNotFound() {
+ final PageSequence pseq = mock(PageSequence.class);
+ final AreaTreeHandler ath = mock(AreaTreeHandler.class);
+ final Flow flow = mock(Flow.class);
+ final Root root = mock(Root.class);
+
+ when(flow.getFlowName()).thenReturn(MAIN_FLOW_NAME);
+ when(pseq.getRoot()).thenReturn(root);
+ when(pseq.getMainFlow()).thenReturn(flow);
+
+ PageSequenceLayoutManager pageSequenceLayoutManager = new PageSequenceLayoutManager(ath, pseq) {
+ public void activateLayout() {
+ makeNewPage(false);
+ }
+ protected Page createPage(int pageNumber, boolean isBlank) {
+ return createPageForRegionName("test");
+ }
+ protected void finishPage() {
+ }
+ };
+ RuntimeException re = null;
+ try {
+ pageSequenceLayoutManager.activateLayout();
+ } catch (RuntimeException e) {
+ re = e;
+ }
+ assertEquals(re.getMessage(),
+ "The flow-name \"test\" could not be mapped to a region-name in the layout-master-set");
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org