You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by je...@apache.org on 2006/08/02 11:20:10 UTC

svn commit: r427938 - in /xmlgraphics/fop/branches/Temp_Floats: src/java/org/apache/fop/fo/properties/IndentPropertyMaker.java status.xml test/layoutengine/standard-testcases/block-container_start-indent.xml

Author: jeremias
Date: Wed Aug  2 02:20:10 2006
New Revision: 427938

URL: http://svn.apache.org/viewvc?rev=427938&view=rev
Log:
Fixed a bug with indent handling when margins are used on a surrounding block and not start/end-indent.

Modified:
    xmlgraphics/fop/branches/Temp_Floats/src/java/org/apache/fop/fo/properties/IndentPropertyMaker.java
    xmlgraphics/fop/branches/Temp_Floats/status.xml
    xmlgraphics/fop/branches/Temp_Floats/test/layoutengine/standard-testcases/block-container_start-indent.xml

Modified: xmlgraphics/fop/branches/Temp_Floats/src/java/org/apache/fop/fo/properties/IndentPropertyMaker.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Floats/src/java/org/apache/fop/fo/properties/IndentPropertyMaker.java?rev=427938&r1=427937&r2=427938&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Floats/src/java/org/apache/fop/fo/properties/IndentPropertyMaker.java (original)
+++ xmlgraphics/fop/branches/Temp_Floats/src/java/org/apache/fop/fo/properties/IndentPropertyMaker.java Wed Aug  2 02:20:10 2006
@@ -94,33 +94,32 @@
         Numeric border = getCorresponding(borderWidthCorresponding, propertyList).getNumeric();
         
         int marginProp = pList.getWritingMode(lr_tb, rl_tb, tb_rl);
-        Numeric margin;
         // Calculate the absolute margin.
         if (propertyList.getExplicitOrShorthand(marginProp) == null) {
             Property indent = propertyList.getExplicit(baseMaker.propId);
             if (indent == null) {
-                //Neither start-indent nor margin is specified, use inherited
+                //Neither indent nor margin is specified, use inherited
                 return null;
+            } else {
+                //Use explicit indent directly
+                return indent;
             }
-            margin = propertyList.getExplicit(baseMaker.propId).getNumeric();
-            margin = NumericOp.subtraction(margin, 
-                    propertyList.getInherited(baseMaker.propId).getNumeric());
-            margin = NumericOp.subtraction(margin, padding);
-            margin = NumericOp.subtraction(margin, border);
         } else {
-            margin = propertyList.get(marginProp).getNumeric();
+            //Margin is used
+            Numeric margin = propertyList.get(marginProp).getNumeric();
+            
+            Numeric v = new FixedLength(0);
+            if (!propertyList.getFObj().generatesReferenceAreas()) {
+                // The inherited_value_of([start|end]-indent)
+                v = NumericOp.addition(v, propertyList.getInherited(baseMaker.propId).getNumeric());
+            }
+            // The corresponding absolute margin-[right|left}.
+            v = NumericOp.addition(v, margin);
+            v = NumericOp.addition(v, padding);
+            v = NumericOp.addition(v, border);
+            return (Property) v;
         }
         
-        Numeric v = new FixedLength(0);
-        if (!propertyList.getFObj().generatesReferenceAreas()) {
-            // The inherited_value_of([start|end]-indent)
-            v = NumericOp.addition(v, propertyList.getInherited(baseMaker.propId).getNumeric());
-        }
-        // The corresponding absolute margin-[right|left}.
-        v = NumericOp.addition(v, margin);
-        v = NumericOp.addition(v, padding);
-        v = NumericOp.addition(v, border);
-        return (Property) v;
     }
     
     private boolean isInherited(PropertyList pList) {
@@ -166,7 +165,6 @@
             pl = pl.getParentPropertyList();
         }
         
-        Numeric margin;
         // Calculate the absolute margin.
         if (propertyList.getExplicitOrShorthand(marginProp) == null) {
             Property indent = propertyList.getExplicit(baseMaker.propId);
@@ -181,19 +179,20 @@
                 return indent;
             }
         } else {
-            margin = propertyList.get(marginProp).getNumeric();
-        }
-        
-        Numeric v = new FixedLength(0);
-        if (isInherited(propertyList)) {
-            // The inherited_value_of([start|end]-indent)
-            v = NumericOp.addition(v, propertyList.getInherited(baseMaker.propId).getNumeric());
+            //Margin is used
+            Numeric margin = propertyList.get(marginProp).getNumeric();
+            
+            Numeric v = new FixedLength(0);
+            if (isInherited(propertyList)) {
+                // The inherited_value_of([start|end]-indent)
+                v = NumericOp.addition(v, propertyList.getInherited(baseMaker.propId).getNumeric());
+            }
+            // The corresponding absolute margin-[right|left}.
+            v = NumericOp.addition(v, margin);
+            v = NumericOp.addition(v, padding);
+            v = NumericOp.addition(v, border);
+            return (Property) v;
         }
-        // The corresponding absolute margin-[right|left}.
-        v = NumericOp.addition(v, margin);
-        v = NumericOp.addition(v, padding);
-        v = NumericOp.addition(v, border);
-        return (Property) v;
     }
     
     private Property getCorresponding(int[] corresponding, PropertyList propertyList)

Modified: xmlgraphics/fop/branches/Temp_Floats/status.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Floats/status.xml?rev=427938&r1=427937&r2=427938&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Floats/status.xml (original)
+++ xmlgraphics/fop/branches/Temp_Floats/status.xml Wed Aug  2 02:20:10 2006
@@ -28,6 +28,10 @@
 
   <changes>
     <release version="FOP Trunk">
+      <action context="Code" dev="JM" type="fix">
+        Fixed a bug with indent handling when margins are used on a surrounding block and 
+        not start/end-indent.
+      </action>
       <action context="Code" dev="JM" type="add" fixes-bug="39777" due-to="Vincent Hennebert">
         Initial support for fo:float with float="before" and float="none".
       </action>

Modified: xmlgraphics/fop/branches/Temp_Floats/test/layoutengine/standard-testcases/block-container_start-indent.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Floats/test/layoutengine/standard-testcases/block-container_start-indent.xml?rev=427938&r1=427937&r2=427938&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Floats/test/layoutengine/standard-testcases/block-container_start-indent.xml (original)
+++ xmlgraphics/fop/branches/Temp_Floats/test/layoutengine/standard-testcases/block-container_start-indent.xml Wed Aug  2 02:20:10 2006
@@ -36,11 +36,27 @@
       </fo:layout-master-set>
       <fo:page-sequence master-reference="normal" white-space-collapse="true">
         <fo:flow flow-name="xsl-region-body">
+          <fo:block font-style="italic">Outer block with start-indent="10pt"</fo:block>
           <fo:block start-indent="10pt">
             <fo:block background-color="yellow">fo:block|fo:block</fo:block>
             <fo:block-container>
               <fo:block background-color="orange">fo:block|fo:block-container|fo:block</fo:block>
             </fo:block-container>
+            <fo:block-container start-indent="15pt" background-color="palegoldenrod" space-before="5pt">
+              <fo:block background-color="red">fo:block|fo:block-container|fo:block</fo:block>
+              <fo:block start-indent="0pt" background-color="red">fo:block|fo:block-container|fo:block start-indent="0pt"</fo:block>
+            </fo:block-container>
+          </fo:block>
+          <fo:block font-style="italic" space-before="10pt">Outer block with margin-left="10pt"</fo:block>
+          <fo:block margin-left="10pt">
+            <fo:block background-color="yellow">fo:block|fo:block</fo:block>
+            <fo:block-container>
+              <fo:block background-color="orange">fo:block|fo:block-container|fo:block</fo:block>
+            </fo:block-container>
+            <fo:block-container start-indent="15pt" background-color="palegoldenrod" space-before="5pt">
+              <fo:block background-color="red">fo:block|fo:block-container|fo:block</fo:block>
+              <fo:block start-indent="0pt" background-color="red">fo:block|fo:block-container|fo:block start-indent="0pt"</fo:block>
+            </fo:block-container>
           </fo:block>
         </fo:flow>
       </fo:page-sequence>
@@ -48,27 +64,83 @@
   </fo>
   <checks>
     <!-- Outer block with the start-indent property -->
-    <eval expected="10000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@start-indent"/>
-    <eval expected="10000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-start"/>
-    <eval expected="350000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@ipd"/>
-    <eval expected="350000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@ipda"/>
+    <eval expected="10000" xpath="//flow/block[2]/@start-indent"/>
+    <eval expected="10000" xpath="//flow/block[2]/@space-start"/>
+    <eval expected="350000" xpath="//flow/block[2]/@ipd"/>
+    <eval expected="350000" xpath="//flow/block[2]/@ipda"/>
     <!-- yellow block -->
-    <eval expected="10000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@start-indent"/>
-    <eval expected="10000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@space-start"/>
-    <eval expected="350000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@ipd"/>
-    <eval expected="350000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@ipda"/>
+    <eval expected="10000" xpath="//flow/block[2]/block[1]/@start-indent"/>
+    <eval expected="10000" xpath="//flow/block[2]/block[1]/@space-start"/>
+    <eval expected="350000" xpath="//flow/block[2]/block[1]/@ipd"/>
+    <eval expected="350000" xpath="//flow/block[2]/block[1]/@ipda"/>
     <!-- block-container -->
-    <eval expected="10000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/@start-indent"/>
-    <eval expected="10000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/@space-start"/>
-    <eval expected="350000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/@ipd"/>
-    <eval expected="350000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/@ipda"/>
+    <eval expected="10000" xpath="//flow/block[2]/block[2]/@start-indent"/>
+    <eval expected="10000" xpath="//flow/block[2]/block[2]/@space-start"/>
+    <eval expected="350000" xpath="//flow/block[2]/block[2]/@ipd"/>
+    <eval expected="350000" xpath="//flow/block[2]/block[2]/@ipda"/>
     <!-- block-container's reference area -->
-    <eval expected="350000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/block[1]/@ipd"/>
-    <eval expected="350000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/block[1]/@ipda"/>
+    <eval expected="350000" xpath="//flow/block[2]/block[2]/block[1]/@ipd"/>
+    <eval expected="350000" xpath="//flow/block[2]/block[2]/block[1]/@ipda"/>
     <!-- orange block inside the block-container -->
-    <eval expected="10000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/block[1]/block[1]/@start-indent"/>
-    <eval expected="10000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/block[1]/block[1]/@space-start"/>
-    <eval expected="340000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/block[1]/block[1]/@ipd"/>
-    <eval expected="340000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/block[1]/block[1]/@ipda"/>
+    <eval expected="10000" xpath="//flow/block[2]/block[2]/block[1]/block[1]/@start-indent"/>
+    <eval expected="10000" xpath="//flow/block[2]/block[2]/block[1]/block[1]/@space-start"/>
+    <eval expected="340000" xpath="//flow/block[2]/block[2]/block[1]/block[1]/@ipd"/>
+    <eval expected="340000" xpath="//flow/block[2]/block[2]/block[1]/block[1]/@ipda"/>
+    
+    <!-- block-container with start-indent -->
+    <eval expected="15000" xpath="//flow/block[2]/block[3]/@start-indent"/>
+    <eval expected="15000" xpath="//flow/block[2]/block[3]/@space-start"/>
+    <eval expected="345000" xpath="//flow/block[2]/block[3]/@ipd"/>
+    <!-- block-container's reference area -->
+    <eval expected="345000" xpath="//flow/block[2]/block[3]/block[1]/@ipd"/>
+    <!-- first red block inside the block-container -->
+    <eval expected="15000" xpath="//flow/block[2]/block[3]/block[1]/block[1]/@start-indent"/>
+    <eval expected="15000" xpath="//flow/block[2]/block[3]/block[1]/block[1]/@space-start"/>
+    <eval expected="330000" xpath="//flow/block[2]/block[3]/block[1]/block[1]/@ipd"/>
+    <!-- second red block inside the block-container -->
+    <true xpath="not(boolean(//flow/block[2]/block[3]/block[1]/block[2]/@start-indent))"/>
+    <true xpath="not(boolean(//flow/block[2]/block[3]/block[1]/block[2]/@space-indent))"/>
+    <eval expected="345000" xpath="//flow/block[2]/block[3]/block[1]/block[2]/@ipd"/>
+
+    <!-- === Same game with margin-left instead of start-indent on outer block === -->    
+    <!-- === This triggered an earlier bug.                                    === -->
+    <!-- Outer block with the start-indent property -->
+    <eval expected="10000" xpath="//flow/block[4]/@start-indent"/>
+    <eval expected="10000" xpath="//flow/block[4]/@space-start"/>
+    <eval expected="350000" xpath="//flow/block[4]/@ipd"/>
+    <eval expected="350000" xpath="//flow/block[4]/@ipda"/>
+    <!-- yellow block -->
+    <eval expected="10000" xpath="//flow/block[4]/block[1]/@start-indent"/>
+    <eval expected="10000" xpath="//flow/block[4]/block[1]/@space-start"/>
+    <eval expected="350000" xpath="//flow/block[4]/block[1]/@ipd"/>
+    <eval expected="350000" xpath="//flow/block[4]/block[1]/@ipda"/>
+    <!-- block-container -->
+    <eval expected="10000" xpath="//flow/block[4]/block[2]/@start-indent"/>
+    <eval expected="10000" xpath="//flow/block[4]/block[2]/@space-start"/>
+    <eval expected="350000" xpath="//flow/block[4]/block[2]/@ipd"/>
+    <eval expected="350000" xpath="//flow/block[4]/block[2]/@ipda"/>
+    <!-- block-container's reference area -->
+    <eval expected="350000" xpath="//flow/block[4]/block[2]/block[1]/@ipd"/>
+    <eval expected="350000" xpath="//flow/block[4]/block[2]/block[1]/@ipda"/>
+    <!-- orange block inside the block-container -->
+    <eval expected="10000" xpath="//flow/block[4]/block[2]/block[1]/block[1]/@start-indent"/>
+    <eval expected="10000" xpath="//flow/block[4]/block[2]/block[1]/block[1]/@space-start"/>
+    <eval expected="340000" xpath="//flow/block[4]/block[2]/block[1]/block[1]/@ipd"/>
+    <eval expected="340000" xpath="//flow/block[4]/block[2]/block[1]/block[1]/@ipda"/>
+    
+    <!-- block-container with start-indent -->
+    <eval expected="15000" xpath="//flow/block[4]/block[3]/@start-indent"/>
+    <eval expected="15000" xpath="//flow/block[4]/block[3]/@space-start"/>
+    <eval expected="345000" xpath="//flow/block[4]/block[3]/@ipd"/>
+    <!-- block-container's reference area -->
+    <eval expected="345000" xpath="//flow/block[4]/block[3]/block[1]/@ipd"/>
+    <!-- first red block inside the block-container -->
+    <eval expected="15000" xpath="//flow/block[4]/block[3]/block[1]/block[1]/@start-indent"/>
+    <eval expected="15000" xpath="//flow/block[4]/block[3]/block[1]/block[1]/@space-start"/>
+    <eval expected="330000" xpath="//flow/block[4]/block[3]/block[1]/block[1]/@ipd"/>
+    <!-- second red block inside the block-container -->
+    <true xpath="not(boolean(//flow/block[4]/block[3]/block[1]/block[2]/@start-indent))"/>
+    <true xpath="not(boolean(//flow/block[4]/block[3]/block[1]/block[2]/@space-indent))"/>
+    <eval expected="345000" xpath="//flow/block[4]/block[3]/block[1]/block[2]/@ipd"/>
   </checks>
 </testcase>



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org