diff options
9 files changed, 165 insertions, 6 deletions
diff --git a/fop-core/src/main/codegen/fo/foproperties.xml b/fop-core/src/main/codegen/fo/foproperties.xml index f4a19eb27..4bd424af8 100644 --- a/fop-core/src/main/codegen/fo/foproperties.xml +++ b/fop-core/src/main/codegen/fo/foproperties.xml @@ -2055,9 +2055,15 @@ </property> <property> <name>visibility</name> - <inherited>false</inherited> - <datatype>ToBeImplemented</datatype> + <inherited>true</inherited> <default>visible</default> + <datatype>Enum</datatype> + <enumeration> + <value const="VISIBLE">visible</value> + <value const="HIDDEN">hidden</value> + <value const="COLLAPSE">collapse</value> + <value const="INHERIT">inherit</value> + </enumeration> </property> <property> <name>z-index</name> diff --git a/fop-core/src/main/java/org/apache/fop/area/AreaTreeParser.java b/fop-core/src/main/java/org/apache/fop/area/AreaTreeParser.java index 7e32b8d8c..41563a85e 100644 --- a/fop-core/src/main/java/org/apache/fop/area/AreaTreeParser.java +++ b/fop-core/src/main/java/org/apache/fop/area/AreaTreeParser.java @@ -80,6 +80,7 @@ import org.apache.fop.fo.extensions.ExtensionAttachment; import org.apache.fop.fonts.Font; import org.apache.fop.fonts.FontInfo; import org.apache.fop.traits.BorderProps; +import org.apache.fop.traits.Visibility; import org.apache.fop.util.ColorUtil; import org.apache.fop.util.ContentHandlerFactory; import org.apache.fop.util.ContentHandlerFactoryRegistry; @@ -663,6 +664,10 @@ public class AreaTreeParser { if (attributes.getValue("top-offset") != null) { block.setYOffset(XMLUtil.getAttributeAsInt(attributes, "top-offset", 0)); } + if (attributes.getValue("visibility") != null) { + block.addTrait(Trait.VISIBILITY, Visibility.valueOf(attributes.getValue("visibility"))); + } + transferForeignObjects(attributes, block); setAreaAttributes(attributes, block); setTraits(attributes, block, SUBSET_COMMON); diff --git a/fop-core/src/main/java/org/apache/fop/area/Trait.java b/fop-core/src/main/java/org/apache/fop/area/Trait.java index cfde0c83b..445beedd3 100644 --- a/fop-core/src/main/java/org/apache/fop/area/Trait.java +++ b/fop-core/src/main/java/org/apache/fop/area/Trait.java @@ -27,6 +27,7 @@ import org.apache.xmlgraphics.image.loader.ImageInfo; import org.apache.fop.fonts.FontTriplet; import org.apache.fop.traits.BorderProps; import org.apache.fop.traits.Direction; +import org.apache.fop.traits.Visibility; import org.apache.fop.traits.WritingMode; import org.apache.fop.util.ColorUtil; @@ -172,8 +173,11 @@ public final class Trait implements Serializable { /** For optional content groups. */ public static final Integer LAYER = 43; + /** Used to disable the rendering of a Block http://www.w3.org/TR/xsl/#rend-vis */ + public static final Integer VISIBILITY = 44; + /** Maximum value used by trait keys */ - public static final int MAX_TRAIT_KEY = 43; + public static final int MAX_TRAIT_KEY = 44; private static final TraitInfo[] TRAIT_INFO = new TraitInfo[MAX_TRAIT_KEY + 1]; @@ -246,7 +250,7 @@ public final class Trait implements Serializable { put(SHIFT_DIRECTION, new TraitInfo("shift-direction", Direction.class)); put(LAYER, new TraitInfo("layer", String.class)); - + put(VISIBILITY, new TraitInfo("visibility", Visibility.class)); } /** diff --git a/fop-core/src/main/java/org/apache/fop/fo/flow/Block.java b/fop-core/src/main/java/org/apache/fop/fo/flow/Block.java index aa55b24a3..c59fb9064 100644 --- a/fop-core/src/main/java/org/apache/fop/fo/flow/Block.java +++ b/fop-core/src/main/java/org/apache/fop/fo/flow/Block.java @@ -85,12 +85,12 @@ public class Block extends FObjMixed implements BreakPropertySet, private Numeric widows; private int wrapOption; private int disableColumnBalancing; + private int visibility; // Unused but valid items, commented out for performance: // private CommonAccessibility commonAccessibility; // private CommonAural commonAural; // private Length textDepth; // private Length textAltitude; - // private int visibility; // End of FO trait values /** @@ -137,6 +137,7 @@ public class Block extends FObjMixed implements BreakPropertySet, widows = pList.get(PR_WIDOWS).getNumeric(); wrapOption = pList.get(PR_WRAP_OPTION).getEnum(); disableColumnBalancing = pList.get(PR_X_DISABLE_COLUMN_BALANCING).getEnum(); + visibility = pList.get(PR_VISIBILITY).getEnum(); } /** {@inheritDoc} */ @@ -358,4 +359,7 @@ public class Block extends FObjMixed implements BreakPropertySet, return FO_BLOCK; } + public int getVisibility() { + return visibility; + } } diff --git a/fop-core/src/main/java/org/apache/fop/layoutmgr/BlockLayoutManager.java b/fop-core/src/main/java/org/apache/fop/layoutmgr/BlockLayoutManager.java index d3bdc7b85..722a011ae 100644 --- a/fop-core/src/main/java/org/apache/fop/layoutmgr/BlockLayoutManager.java +++ b/fop-core/src/main/java/org/apache/fop/layoutmgr/BlockLayoutManager.java @@ -331,6 +331,7 @@ public class BlockLayoutManager extends SpacedBorderedPaddedBlockLayoutManager TraitSetter.addSpaceBeforeAfter(curBlockArea, layoutContext.getSpaceAdjust(), effSpaceBefore, effSpaceAfter); + TraitSetter.setVisibility(curBlockArea, getBlockFO().getVisibility()); flush(); curBlockArea = null; diff --git a/fop-core/src/main/java/org/apache/fop/layoutmgr/TraitSetter.java b/fop-core/src/main/java/org/apache/fop/layoutmgr/TraitSetter.java index 16187eac6..5addad5ab 100644 --- a/fop-core/src/main/java/org/apache/fop/layoutmgr/TraitSetter.java +++ b/fop-core/src/main/java/org/apache/fop/layoutmgr/TraitSetter.java @@ -36,6 +36,7 @@ import org.apache.fop.fo.properties.CommonTextDecoration; import org.apache.fop.fonts.Font; import org.apache.fop.traits.BorderProps; import org.apache.fop.traits.MinOptMax; +import org.apache.fop.traits.Visibility; /** * This is a helper class used for setting common traits on areas. @@ -599,6 +600,21 @@ public final class TraitSetter { } } + public static void setVisibility(Area area, int visibility) { + Visibility v; + switch (visibility) { + case Constants.EN_COLLAPSE: + v = Visibility.COLLAPSE; + break; + case Constants.EN_HIDDEN: + v = Visibility.HIDDEN; + break; + default: + v = Visibility.VISIBLE; + } + area.addTrait(Trait.VISIBILITY, v); + } + /** * Sets the structure tree element associated to the given area. * diff --git a/fop-core/src/main/java/org/apache/fop/render/AbstractRenderer.java b/fop-core/src/main/java/org/apache/fop/render/AbstractRenderer.java index 5b5ed0f3f..d57d3ce06 100644 --- a/fop-core/src/main/java/org/apache/fop/render/AbstractRenderer.java +++ b/fop-core/src/main/java/org/apache/fop/render/AbstractRenderer.java @@ -71,6 +71,7 @@ import org.apache.fop.area.inline.TextArea; import org.apache.fop.area.inline.WordArea; import org.apache.fop.fo.Constants; import org.apache.fop.fonts.FontInfo; +import org.apache.fop.traits.Visibility; /** * Abstract base class for all renderers. The Abstract renderer does all the @@ -609,7 +610,8 @@ public abstract class AbstractRenderer handleBlockTraits(block); - if (children != null) { + if (children != null && block.getTrait(Trait.VISIBILITY) != Visibility.HIDDEN) + { renderBlocks(block, children); } diff --git a/fop-core/src/main/java/org/apache/fop/traits/Visibility.java b/fop-core/src/main/java/org/apache/fop/traits/Visibility.java new file mode 100644 index 000000000..10adc7ba4 --- /dev/null +++ b/fop-core/src/main/java/org/apache/fop/traits/Visibility.java @@ -0,0 +1,70 @@ +/* + * 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. + */ + +package org.apache.fop.traits; + +import java.io.ObjectStreamException; + +import org.apache.fop.fo.Constants; + + +public final class Visibility extends TraitEnum { + private static final long serialVersionUID = 1L; + + private static final String[] VISIBILITY_NAMES = new String[] + {"visible", "hidden", "collapse"}; + + private static final int[] VISIBILITY_VALUES = new int[] + {Constants.EN_VISIBLE, Constants.EN_HIDDEN, Constants.EN_COLLAPSE}; + + /** border-style: none */ + public static final Visibility VISIBLE = new Visibility(0); + /** border-style: hidden */ + public static final Visibility HIDDEN = new Visibility(1); + /** border-style: dotted */ + public static final Visibility COLLAPSE = new Visibility(2); + + private static final Visibility[] VISIBILITIES = new Visibility[] { + VISIBLE, HIDDEN, COLLAPSE}; + + + private Visibility(int index) { + super(VISIBILITY_NAMES[index], VISIBILITY_VALUES[index]); + } + + /** + * Returns the enumeration/singleton object based on its name. + * @param name the name of the enumeration value + * @return the enumeration object + */ + public static Visibility valueOf(String name) { + for (Visibility v : VISIBILITIES) { + if (v.getName().equalsIgnoreCase(name)) { + return v; + } + } + throw new IllegalArgumentException("Illegal visibility value: " + name); + } + + private Object readResolve() throws ObjectStreamException { + return valueOf(getName()); + } + + public String toString() { + return getName(); + } +} diff --git a/fop/test/layoutengine/standard-testcases/block_hidden.xml b/fop/test/layoutengine/standard-testcases/block_hidden.xml new file mode 100644 index 000000000..434e74d56 --- /dev/null +++ b/fop/test/layoutengine/standard-testcases/block_hidden.xml @@ -0,0 +1,51 @@ +<?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: block_basic_1.xml 627324 2008-02-13 09:35:01Z maxberger $ -->
+<testcase>
+ <info>
+ <p>
+ This test checks the visibility trait.
+ </p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in">
+ <fo:region-body/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="normal" white-space-collapse="true">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block>test1</fo:block>
+ <fo:block visibility="hidden">hidden</fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <!-- Check for first paragraph -->
+ <eval expected="360000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@ipd"/>
+ <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@bpd"/>
+ <eval expected="visible" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@visibility"/>
+ <!-- Check for second paragraph -->
+ <eval expected="360000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@ipd"/>
+ <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@bpd"/>
+ <eval expected="hidden" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@visibility"/>
+ <eval expected="0" xpath="count(/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/*)"/>
+ </checks>
+</testcase>
|