]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
FOP-616: "visibility" property is not implemented
authorChris Bowditch <cbowditch@apache.org>
Mon, 10 Apr 2017 10:03:35 +0000 (10:03 +0000)
committerChris Bowditch <cbowditch@apache.org>
Mon, 10 Apr 2017 10:03:35 +0000 (10:03 +0000)
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
fop-core/src/main/java/org/apache/fop/area/AreaTreeParser.java
fop-core/src/main/java/org/apache/fop/area/Trait.java
fop-core/src/main/java/org/apache/fop/fo/flow/Block.java
fop-core/src/main/java/org/apache/fop/layoutmgr/BlockLayoutManager.java
fop-core/src/main/java/org/apache/fop/layoutmgr/TraitSetter.java
fop-core/src/main/java/org/apache/fop/render/AbstractRenderer.java
fop-core/src/main/java/org/apache/fop/traits/Visibility.java [new file with mode: 0644]
fop/test/layoutengine/standard-testcases/block_hidden.xml [new file with mode: 0644]

index f4a19eb276e027affc68e205b2ef7262452a029b..4bd424af833189d41b506ed79ca19689b1057e40 100644 (file)
   </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>
index 7e32b8d8c2e183980f2c552c4c7c9a6c3e93d0b0..41563a85e5b41ce7450c5b3906d375b1f42c824e 100644 (file)
@@ -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);
index cfde0c83bf67c5c49056581ce2480cf7ce1b1d41..445beedd389935e8a88e542d7a09e78a9108aa51 100644 (file)
@@ -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));
     }
 
     /**
index aa55b24a350d6a453ea2c544810ded1eb67be4b1..c59fb9064c80e0e909862482ec29dfdd7334e0fd 100644 (file)
@@ -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;
+     }
 }
index d3bdc7b85b63a9ca871c14cfe44770bbf80c554c..722a011ae958dfdeecf68cfdd8c16cb4c53fd176 100644 (file)
@@ -331,6 +331,7 @@ public class BlockLayoutManager extends SpacedBorderedPaddedBlockLayoutManager
 
         TraitSetter.addSpaceBeforeAfter(curBlockArea, layoutContext.getSpaceAdjust(),
                 effSpaceBefore, effSpaceAfter);
+        TraitSetter.setVisibility(curBlockArea, getBlockFO().getVisibility());
         flush();
 
         curBlockArea = null;
index 16187eac6af2300f1240f35612751201252c5014..5addad5ab2dae405ccb91b3879c19506aac760e2 100644 (file)
@@ -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.
      *
index 5b5ed0f3f01dac391ebde5f0c1a7684fbd3b0560..d57d3ce06fc7aa8bba6c5a02650d7c22ef6eb31d 100644 (file)
@@ -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 (file)
index 0000000..10adc7b
--- /dev/null
@@ -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 (file)
index 0000000..434e74d
--- /dev/null
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+  Licensed to the Apache Software Foundation (ASF) under one or more\r
+  contributor license agreements.  See the NOTICE file distributed with\r
+  this work for additional information regarding copyright ownership.\r
+  The ASF licenses this file to You under the Apache License, Version 2.0\r
+  (the "License"); you may not use this file except in compliance with\r
+  the License.  You may obtain a copy of the License at\r
+\r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
+  limitations under the License.\r
+-->\r
+<!-- $Id: block_basic_1.xml 627324 2008-02-13 09:35:01Z maxberger $ -->\r
+<testcase>\r
+  <info>\r
+    <p>\r
+      This test checks the visibility trait.\r
+    </p>\r
+  </info>\r
+  <fo>\r
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">\r
+      <fo:layout-master-set>\r
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in">\r
+          <fo:region-body/>\r
+        </fo:simple-page-master>\r
+      </fo:layout-master-set>\r
+      <fo:page-sequence master-reference="normal" white-space-collapse="true">\r
+        <fo:flow flow-name="xsl-region-body">\r
+          <fo:block>test1</fo:block>\r
+          <fo:block visibility="hidden">hidden</fo:block>\r
+        </fo:flow>\r
+      </fo:page-sequence>\r
+    </fo:root>\r
+  </fo>\r
+  <checks>\r
+    <!-- Check for first paragraph -->\r
+    <eval expected="360000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@ipd"/>\r
+    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@bpd"/>\r
+       <eval expected="visible" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@visibility"/>\r
+    <!-- Check for second paragraph -->\r
+    <eval expected="360000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@ipd"/>\r
+    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@bpd"/>\r
+       <eval expected="hidden" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@visibility"/>\r
+       <eval expected="0" xpath="count(/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/*)"/>\r
+  </checks>\r
+</testcase>\r