]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Bugzilla #38054:
authorJeremias Maerki <jeremias@apache.org>
Mon, 9 Jan 2006 10:16:45 +0000 (10:16 +0000)
committerJeremias Maerki <jeremias@apache.org>
Mon, 9 Jan 2006 10:16:45 +0000 (10:16 +0000)
Bugfix: Spans that end up with a negative height don't get swallowed anymore.

MainReference.getWidth() removed as it's not used anywhere.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@367262 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/area/MainReference.java
src/java/org/apache/fop/area/Span.java
status.xml
test/layoutengine/standard-testcases/region-body_column-count_bug38054.xml [new file with mode: 0644]

index bdba40f1edd7bc0abc7ec614fdd6fb65352fa7fe..f3d1ac7d2324b00968218b5a4e7303d5222bdf42 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 1999-2005 The Apache Software Foundation.
+ * Copyright 1999-2006 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-/* $Id: MainReference.java,v 1.2 2004/02/27 17:41:26 jeremias Exp $ */
+/* $Id$ */
 
 package org.apache.fop.area;
 
@@ -31,7 +31,6 @@ public class MainReference extends Area {
 
     private BodyRegion parent;
     private List spanAreas = new java.util.ArrayList();
-    private int width;
     private boolean isEmpty = true;
 
     /**
@@ -51,7 +50,7 @@ public class MainReference extends Area {
      * @return the created span area.
      */
     public Span createSpan(boolean spanAll) {
-        if (spanAreas.size() > 0 && getCurrentSpan().getBPD() == 0) {
+        if (spanAreas.size() > 0 && getCurrentSpan().isEmpty()) {
             //Remove the current one if it is empty
             spanAreas.remove(spanAreas.size() - 1);
         }
@@ -90,22 +89,15 @@ public class MainReference extends Area {
      */
     public boolean isEmpty() {
         if (isEmpty) {
-            int areaCount = 0;
+            boolean nonEmptyFound = false;
             if (spanAreas != null) {
                 for (Iterator spaniter = spanAreas.iterator(); spaniter.hasNext();) {
                     Span spanArea = (Span) spaniter.next();
-                    for (int i = 0; i < spanArea.getColumnCount(); i++) {
-                        NormalFlow flow = spanArea.getNormalFlow(i);
-                        if (flow != null) {
-                            if (flow.getChildAreas() != null) {
-                                areaCount += flow.getChildAreas().size();
-                            }
-                        }
-                    }
+                    nonEmptyFound |= !spanArea.isEmpty();
                 }
             }
 
-            isEmpty = (areaCount == 0);
+            isEmpty = !nonEmptyFound;
         }
         return isEmpty;
     }
@@ -120,14 +112,5 @@ public class MainReference extends Area {
         return parent.getColumnGap();
     }
 
-    /**
-     * Get the width of this reference area.
-     *
-     * @return the width
-     */
-    public int getWidth() {
-        return width;
-    }
-
 }
 
index bbe9b6db5fac69da339de00601b4b6eae6bb9f3d..d1ba95190fa6219174c83b29cf9893c8fb2ccd63 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 1999-2005 The Apache Software Foundation.
+ * Copyright 1999-2006 The Apache Software Foundation.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -153,13 +153,32 @@ public class Span extends Area {
      * its own BPD extent.
      */
     public void notifyFlowsFinished() {
-        int maxFlowBPD = 0;
+        int maxFlowBPD = Integer.MIN_VALUE;
         for (int i = 0; i < colCount; i++) {
             maxFlowBPD = Math.max(maxFlowBPD, getNormalFlow(i).getAllocBPD());
         }
         bpd = maxFlowBPD;
     }
     
+    /**
+     * Indicates whether any child areas have been added to this span area.
+     *
+     * This is achieved by looping through each flow.
+     * @return true if no child areas have been added yet.
+     */
+    public boolean isEmpty() {
+        int areaCount = 0;
+        for (int i = 0; i < getColumnCount(); i++) {
+            NormalFlow flow = getNormalFlow(i);
+            if (flow != null) {
+                if (flow.getChildAreas() != null) {
+                    areaCount += flow.getChildAreas().size();
+                }
+            }
+        }
+        return (areaCount == 0);
+    }
+    
     /** @see java.lang.Object#toString() */
     public String toString() {
         StringBuffer sb = new StringBuffer(super.toString());
index 79a098f3f1054f593745a1770b04fe1a39c3a49c..0befa8487627592e42699d774eefeefbb657ccfd 100644 (file)
@@ -27,6 +27,9 @@
 
   <changes>
     <release version="FOP Trunk">
+      <action context="Code" dev="JM" type="fix" fixes-bug="38054">
+        Bugfix: Spans that end up with a negative height don't get swallowed anymore.
+      </action>
       <action context="Code" dev="MM" type="add" fixes-bug="36729">
         Relative URLs for the font configuration attributes metrics-url and embed-url
         are now supported. A new configuration property font-base has been added. It
diff --git a/test/layoutengine/standard-testcases/region-body_column-count_bug38054.xml b/test/layoutengine/standard-testcases/region-body_column-count_bug38054.xml
new file mode 100644 (file)
index 0000000..46cc23f
--- /dev/null
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright 2005 The Apache Software Foundation
+
+  Licensed 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 multi-column documents. Checks a problem described in Bugzilla #38054.
+      Some content is swallowed. Cause: The second span has a negative overall height and was
+      removed due to a bug in the area tree.
+    </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="5in" page-height="5in">
+          <fo:region-body column-count="2"/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block>
+            <fo:block>line 1</fo:block>
+            <fo:block>line 2</fo:block>
+            <fo:block>line 3</fo:block>
+            <fo:block>line 4</fo:block>
+          </fo:block>
+          <fo:block span="all" font-weight="bold" space-before="-20pt" space-after="2.5pt" space-after.conditionality="retain" space-before.conditionality="retain" border="solid 0.1pt black">spanned</fo:block>
+          <fo:block>blah blah blah</fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <eval expected="3" xpath="count(//span)"/>
+  </checks>
+</testcase>