diff options
-rw-r--r-- | src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java | 25 | ||||
-rw-r--r-- | status.xml | 3 | ||||
-rw-r--r-- | test/layoutengine/standard-testcases/markers_9.xml | 78 |
3 files changed, 100 insertions, 6 deletions
diff --git a/src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java b/src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java index 51ae7441d..62c821504 100644 --- a/src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java +++ b/src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java @@ -103,17 +103,30 @@ public abstract class AbstractRetrieveMarker extends FObjMixed { pList, newPropertyList); addChildTo(newChild, newParent); - if (newChild.getNameId() == FO_TABLE) { + switch ( newChild.getNameId() ) { + case FO_TABLE: Table t = (Table) child; cloneSubtree(t.getColumns().iterator(), - newChild, marker, newPropertyList); + newChild, marker, newPropertyList); cloneSingleNode(t.getTableHeader(), - newChild, marker, newPropertyList); + newChild, marker, newPropertyList); cloneSingleNode(t.getTableFooter(), - newChild, marker, newPropertyList); + newChild, marker, newPropertyList); + cloneSubtree(child.getChildNodes(), + newChild, marker, newPropertyList); + break; + case FO_LIST_ITEM: + ListItem li = (ListItem) child; + cloneSingleNode(li.getLabel(), + newChild, marker, newPropertyList); + cloneSingleNode(li.getBody(), + newChild, marker, newPropertyList); + break; + default: + cloneSubtree(child.getChildNodes(), + newChild, marker, newPropertyList); + break; } - cloneSubtree(child.getChildNodes(), newChild, - marker, newPropertyList); } else if (child instanceof FOText) { FOText ft = (FOText) newChild; ft.bind(parentPropertyList); diff --git a/status.xml b/status.xml index c6b3e22f9..9cb50efbd 100644 --- a/status.xml +++ b/status.xml @@ -62,6 +62,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="Code" dev="GA" type="fix" fixes-bug="52763"> + Support list-block in marker, thus preventing NPE. + </action> <action context="Code" dev="GA" type="fix"> Must use unqualified (local name) when reporting invalid child error. </action> diff --git a/test/layoutengine/standard-testcases/markers_9.xml b/test/layoutengine/standard-testcases/markers_9.xml new file mode 100644 index 000000000..65eb8bbf0 --- /dev/null +++ b/test/layoutengine/standard-testcases/markers_9.xml @@ -0,0 +1,78 @@ +<?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 markers containing list-block. Seel also bug 52763. + </p> + </info> + <fo> + <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> + <fo:layout-master-set> + <fo:simple-page-master master-name="main" page-width="8.5in" page-height="11in"> + <fo:region-body margin-top="2in" margin-bottom="2in"/> + <fo:region-before extent="2in"/> + <fo:region-after extent="2in"/> + </fo:simple-page-master> + </fo:layout-master-set> + <fo:page-sequence master-reference="main"> + <fo:static-content flow-name="xsl-region-before"> + <fo:block-container height="2in" width="8.5in" position="absolute"> + <fo:block> + <fo:retrieve-marker retrieve-class-name="message"/> + </fo:block> + </fo:block-container> + </fo:static-content> + <fo:flow flow-name="xsl-region-body"> + <fo:block> + <fo:marker marker-class-name="message"> + <fo:block> + <fo:list-block> + <fo:list-item> + <fo:list-item-label> + <fo:block>A</fo:block> + </fo:list-item-label> + <fo:list-item-body start-indent="1.0in"> + <fo:block>BODY A</fo:block> + </fo:list-item-body> + </fo:list-item> + <fo:list-item> + <fo:list-item-label> + <fo:block>B</fo:block> + </fo:list-item-label> + <fo:list-item-body start-indent="1.0in"> + <fo:block>BODY B</fo:block> + </fo:list-item-body> + </fo:list-item> + </fo:list-block> + </fo:block> + </fo:marker> + </fo:block> + </fo:flow> + </fo:page-sequence> + </fo:root> + </fo> + <checks> + <eval expected="4" xpath="count(//regionBefore/descendant::lineArea)"/> + <eval expected="A" xpath="//regionBefore/descendant::lineArea[1]"/> + <eval expected="BODY A" xpath="//regionBefore/descendant::lineArea[2]"/> + <eval expected="B" xpath="//regionBefore/descendant::lineArea[3]"/> + <eval expected="BODY B" xpath="//regionBefore/descendant::lineArea[4]"/> + </checks> +</testcase> |