Skip to content

Commit

Permalink
FOP-3192: Redo layout for multipage columns for change in column count
Browse files Browse the repository at this point in the history
  • Loading branch information
simonsteiner1984 committed Jul 19, 2024
1 parent eb335e3 commit f9404c6
Show file tree
Hide file tree
Showing 3 changed files with 149 additions and 4 deletions.
14 changes: 10 additions & 4 deletions fop-core/src/main/java/org/apache/fop/layoutmgr/PageBreaker.java
Original file line number Diff line number Diff line change
Expand Up @@ -621,6 +621,7 @@ private void handleBreakTrait(int breakVal, boolean emptyContent) {
&& pv.getCurrentSpan().getColumnCount() == 1);

if (forceNewPageWithSpan) {
checkPagePositionOnly();
log.trace("Forcing new page with span");
curPage = pslm.makeNewPage(false);
curPage.getPageViewport().createSpan(true);
Expand All @@ -632,10 +633,7 @@ private void handleBreakTrait(int breakVal, boolean emptyContent) {
log.trace("Moving to next flow");
pv.getCurrentSpan().moveToNextFlow();
} else {
if (pslm.getCurrentPage().isPagePositionOnly
&& !pslm.fobj.getUserAgent().isLegacySkipPagePositionOnly()) {
throw new PagePositionOnlyException();
}
checkPagePositionOnly();
log.trace("Making new page");
pslm.makeNewPage(false, emptyContent);
}
Expand All @@ -647,14 +645,22 @@ private void handleBreakTrait(int breakVal, boolean emptyContent) {
}
}

private void checkPagePositionOnly() {
if (pslm.getCurrentPage().isPagePositionOnly && !pslm.fobj.getUserAgent().isLegacySkipPagePositionOnly()) {
throw new PagePositionOnlyException();
}
}

private void handleBreakBeforeFollowingPage(int breakVal) {
log.debug("handling break-before after page " + pslm.getCurrentPageNum() + " breakVal="
+ getBreakClassName(breakVal));
if (needBlankPageBeforeNew(breakVal)) {
checkPagePositionOnly();
log.trace("Inserting blank page");
/* curPage = */pslm.makeNewPage(true);
}
if (needNewPage(breakVal)) {
checkPagePositionOnly();
log.trace("Making new page");
/* curPage = */pslm.makeNewPage(false);
}
Expand Down
68 changes: 68 additions & 0 deletions fop/test/layoutengine/standard-testcases/page-position_only_8.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
<?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 the page-position only is not used as there is more than 1 page
</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="PageFrontSingle" page-width="8.5in" page-height="11in" margin-bottom="0.32in" margin-right="1in" margin-top="0.2in" margin-left="0.9in">
<fo:region-body margin-bottom="1.35in" margin-top="0.5in" column-count="2" column-gap=".5in" region-name="letterPageBody"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="PageFront" page-width="8.5in" page-height="11in" margin-bottom="0.32in" margin-right="1in" margin-top="0.2in" margin-left="0.9in">
<fo:region-body margin-bottom="0.7in" margin-top="0.5in" column-gap=".5in" column-count="2" region-name="letterPageBody"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="PageRest" page-width="8.5in" page-height="11in" margin-bottom="0.32in" margin-right="1in" margin-top="0.7in" margin-left="0.9in">
<fo:region-body margin-bottom="0.7in" column-gap=".5in" column-count="2" region-name="letterPageBody"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="PageLast" page-width="8.5in" page-height="11in" margin-bottom="0.32in" margin-right="1in" margin-top="0.7in" margin-left="0.9in">
<fo:region-body margin-bottom="1.35in" 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="only" master-reference="PageFrontSingle"/>
<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="PageLast"/>
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
</fo:layout-master-set>
<fo:page-sequence format="1" id="th_default_sequence1" initial-page-number="auto" force-page-count="auto" master-reference="LetterPages">
<fo:flow flow-name="letterPageBody">
<fo:block span="all">
<fo:block>test</fo:block>
<fo:block break-after="column">
<fo:leader/>
</fo:block>
<fo:block>test</fo:block>
</fo:block>
<fo:block>test</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</fo>
<checks>
<eval expected="3" xpath="count(//word)"/>
<eval expected="2" xpath="count(//page)"/>
<eval expected="PageFront" xpath="//pageViewport/@simple-page-master-name"/>
</checks>
</testcase>
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
<?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 the page-position only is not used as there is more than 1 page
</p>
</info>
<cfg>
<legacy-skip-page-position-only>true</legacy-skip-page-position-only>
</cfg>
<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="PageFrontSingle" page-width="8.5in" page-height="11in" margin-bottom="0.32in" margin-right="1in" margin-top="0.2in" margin-left="0.9in">
<fo:region-body margin-bottom="1.35in" margin-top="0.5in" column-count="2" column-gap=".5in" region-name="letterPageBody"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="PageFront" page-width="8.5in" page-height="11in" margin-bottom="0.32in" margin-right="1in" margin-top="0.2in" margin-left="0.9in">
<fo:region-body margin-bottom="0.7in" margin-top="0.5in" column-gap=".5in" column-count="2" region-name="letterPageBody"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="PageRest" page-width="8.5in" page-height="11in" margin-bottom="0.32in" margin-right="1in" margin-top="0.7in" margin-left="0.9in">
<fo:region-body margin-bottom="0.7in" column-gap=".5in" column-count="2" region-name="letterPageBody"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="PageLast" page-width="8.5in" page-height="11in" margin-bottom="0.32in" margin-right="1in" margin-top="0.7in" margin-left="0.9in">
<fo:region-body margin-bottom="1.35in" 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="only" master-reference="PageFrontSingle"/>
<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="PageLast"/>
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
</fo:layout-master-set>
<fo:page-sequence format="1" id="th_default_sequence1" initial-page-number="auto" force-page-count="auto" master-reference="LetterPages">
<fo:flow flow-name="letterPageBody">
<fo:block span="all">
<fo:block>test</fo:block>
<fo:block break-after="column">
<fo:leader/>
</fo:block>
<fo:block>test</fo:block>
</fo:block>
<fo:block>test</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</fo>
<checks>
<eval expected="3" xpath="count(//word)"/>
<eval expected="2" xpath="count(//page)"/>
<eval expected="PageFront" xpath="//pageViewport/@simple-page-master-name"/>
</checks>
</testcase>

0 comments on commit f9404c6

Please sign in to comment.