From 6803be47127d99fc7ab425ecc0ce4ac9a8ddf830 Mon Sep 17 00:00:00 2001 From: Chris Bowditch Date: Mon, 10 Apr 2017 10:03:35 +0000 Subject: [PATCH] FOP-616: "visibility" property is not implemented git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1790795 13f79535-47bb-0310-9956-ffa450edef68 --- fop-core/src/main/codegen/fo/foproperties.xml | 10 ++- .../org/apache/fop/area/AreaTreeParser.java | 5 ++ .../main/java/org/apache/fop/area/Trait.java | 8 ++- .../java/org/apache/fop/fo/flow/Block.java | 6 +- .../fop/layoutmgr/BlockLayoutManager.java | 1 + .../org/apache/fop/layoutmgr/TraitSetter.java | 16 +++++ .../apache/fop/render/AbstractRenderer.java | 4 +- .../org/apache/fop/traits/Visibility.java | 70 +++++++++++++++++++ .../standard-testcases/block_hidden.xml | 51 ++++++++++++++ 9 files changed, 165 insertions(+), 6 deletions(-) create mode 100644 fop-core/src/main/java/org/apache/fop/traits/Visibility.java create mode 100644 fop/test/layoutengine/standard-testcases/block_hidden.xml 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 @@ visibility - false - ToBeImplemented + true visible + Enum + + visible + hidden + collapse + inherit + z-index 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 @@ + + + + + +

+ This test checks the visibility trait. +

+
+ + + + + + + + + + test1 + hidden + + + + + + + + + + + + + + + +
-- 2.39.5