diff options
-rw-r--r-- | src/java/org/apache/fop/layoutmgr/inline/InlineLayoutManager.java | 32 | ||||
-rw-r--r-- | status.xml | 3 | ||||
-rw-r--r-- | test/layoutengine/standard-testcases/table-headings_inline_padding-start.xml | 77 |
3 files changed, 100 insertions, 12 deletions
diff --git a/src/java/org/apache/fop/layoutmgr/inline/InlineLayoutManager.java b/src/java/org/apache/fop/layoutmgr/inline/InlineLayoutManager.java index 985094edd..085174fae 100644 --- a/src/java/org/apache/fop/layoutmgr/inline/InlineLayoutManager.java +++ b/src/java/org/apache/fop/layoutmgr/inline/InlineLayoutManager.java @@ -422,18 +422,6 @@ public class InlineLayoutManager extends InlineStackingLayoutManager { setChildContext(new LayoutContext(context)); // Store current value - // If this LM has fence, make a new leading space specifier. - if (hasLeadingFence(areaCreated)) { - getContext().setLeadingSpace(new SpaceSpecifier(false)); - getContext().setFlags(LayoutContext.RESOLVE_LEADING_SPACE, true); - } else { - getContext().setFlags(LayoutContext.RESOLVE_LEADING_SPACE, false); - } - - if (getSpaceStart() != null) { - context.getLeadingSpace().addSpace(new SpaceVal(getSpaceStart(), this)); - } - // "Unwrap" the NonLeafPositions stored in parentIter and put // them in a new list. Set lastLM to be the LayoutManager // which created the last Position: if the LAST_AREA flag is @@ -447,12 +435,32 @@ public class InlineLayoutManager extends InlineStackingLayoutManager { while (parentIter.hasNext()) { pos = parentIter.next(); if (pos != null && pos.getPosition() != null) { + if (isFirst(pos)) { + /* + * If this element is a descendant of a table-header/footer, + * its content may be repeated over pages, so the generation + * of its areas may be restarted. + */ + areaCreated = false; + } positionList.add(pos.getPosition()); lastLM = pos.getPosition().getLM(); lastPos = pos; } } + // If this LM has fence, make a new leading space specifier. + if (hasLeadingFence(areaCreated)) { + getContext().setLeadingSpace(new SpaceSpecifier(false)); + getContext().setFlags(LayoutContext.RESOLVE_LEADING_SPACE, true); + } else { + getContext().setFlags(LayoutContext.RESOLVE_LEADING_SPACE, false); + } + + if (getSpaceStart() != null) { + context.getLeadingSpace().addSpace(new SpaceVal(getSpaceStart(), this)); + } + addMarkersToPage( true, !areaCreated, diff --git a/status.xml b/status.xml index de78006f1..73e6f6c0d 100644 --- a/status.xml +++ b/status.xml @@ -59,6 +59,9 @@ documents. Example: the fix of marks layering will be such a case when it's done. --> <release version="FOP Trunk" date="TBD"> + <action context="Layout" dev="VH" type="fix" fixes-bug="50196" due-to="Matthias Reischenbacher"> + Bugzilla #50196: padding-start ignored when table-header/footer is repeated. + </action> <action context="Renderers" dev="JM" type="fix"> Increased maximum possible PDF size from 2GB to around 9GB (hard maximum imposed by the PDF specification). </action> diff --git a/test/layoutengine/standard-testcases/table-headings_inline_padding-start.xml b/test/layoutengine/standard-testcases/table-headings_inline_padding-start.xml new file mode 100644 index 000000000..9615dbdb8 --- /dev/null +++ b/test/layoutengine/standard-testcases/table-headings_inline_padding-start.xml @@ -0,0 +1,77 @@ +<?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> + Bugzilla #50196: padding-start ignored when a table-header/footer is repeated. + </p> + </info> + <fo> + <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> + <fo:layout-master-set> + <fo:simple-page-master master-name="normal" page-width="220pt" page-height="120pt" + margin="10pt"> + <fo:region-body/> + </fo:simple-page-master> + </fo:layout-master-set> + <fo:page-sequence master-reference="normal"> + <fo:flow flow-name="xsl-region-body"> + <fo:table table-layout="fixed" width="100%"> + <fo:table-header> + <fo:table-row> + <fo:table-cell border="1pt solid black"> + <fo:block> + <fo:inline id="header" padding-start="10pt">Table header</fo:inline> + </fo:block> + </fo:table-cell> + </fo:table-row> + </fo:table-header> + <fo:table-footer> + <fo:table-row> + <fo:table-cell border="1pt solid black"> + <fo:block> + <fo:inline id="footer" padding-start="10pt">Table footer</fo:inline> + </fo:block> + </fo:table-cell> + </fo:table-row> + </fo:table-footer> + <fo:table-body> + <fo:table-row> + <fo:table-cell border="1pt solid black"> + <fo:block>Before page break</fo:block> + </fo:table-cell> + </fo:table-row> + <fo:table-row break-before="page"> + <fo:table-cell border="1pt solid black"> + <fo:block>After page break</fo:block> + </fo:table-cell> + </fo:table-row> + </fo:table-body> + </fo:table> + </fo:flow> + </fo:page-sequence> + </fo:root> + </fo> + <checks> + <eval expected="10000" xpath="//pageViewport[1]//inlineparent[@prod-id='header']/@padding-start"/> + <eval expected="10000" xpath="//pageViewport[1]//inlineparent[@prod-id='footer']/@padding-start"/> + <eval expected="10000" xpath="//pageViewport[2]//inlineparent[@prod-id='header']/@padding-start"/> + <eval expected="10000" xpath="//pageViewport[2]//inlineparent[@prod-id='footer']/@padding-start"/> + </checks> +</testcase> |