diff options
author | Jeremias Maerki <jeremias@apache.org> | 2006-08-02 09:28:51 +0000 |
---|---|---|
committer | Jeremias Maerki <jeremias@apache.org> | 2006-08-02 09:28:51 +0000 |
commit | c0be6dbf9aa9f300b7d7a76da49a9677e8a4a375 (patch) | |
tree | 098b62d79ef7ad9a62706f96e35b03544fbdedfb | |
parent | f5abed20f9df95c08d962596c8683256b60ab502 (diff) | |
download | xmlgraphics-fop-c0be6dbf9aa9f300b7d7a76da49a9677e8a4a375.tar.gz xmlgraphics-fop-c0be6dbf9aa9f300b7d7a76da49a9677e8a4a375.zip |
Merge from Temp_Floats branch:
Fixed a bug with indent handling when margins are used on a surrounding block and not start/end-indent.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@427939 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | src/java/org/apache/fop/fo/properties/IndentPropertyMaker.java | 61 | ||||
-rw-r--r-- | status.xml | 4 | ||||
-rw-r--r-- | test/layoutengine/standard-testcases/block-container_start-indent.xml | 108 |
3 files changed, 124 insertions, 49 deletions
diff --git a/src/java/org/apache/fop/fo/properties/IndentPropertyMaker.java b/src/java/org/apache/fop/fo/properties/IndentPropertyMaker.java index 0eb857c31..ebc1b80f0 100644 --- a/src/java/org/apache/fop/fo/properties/IndentPropertyMaker.java +++ b/src/java/org/apache/fop/fo/properties/IndentPropertyMaker.java @@ -94,33 +94,32 @@ public class IndentPropertyMaker extends CorrespondingPropertyMaker { 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 @@ public class IndentPropertyMaker extends CorrespondingPropertyMaker { pl = pl.getParentPropertyList(); } - Numeric margin; // Calculate the absolute margin. if (propertyList.getExplicitOrShorthand(marginProp) == null) { Property indent = propertyList.getExplicit(baseMaker.propId); @@ -181,19 +179,20 @@ public class IndentPropertyMaker extends CorrespondingPropertyMaker { 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) diff --git a/status.xml b/status.xml index 1948a8c14..034634288 100644 --- a/status.xml +++ b/status.xml @@ -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="fix" fixes-bug="40106" due-to="Jeroen Meijer"> Compatibility fix for GCJ (GNU Classpath): Using "UTF-16BE" instead of "UnicodeBigUnmarked" encoding. diff --git a/test/layoutengine/standard-testcases/block-container_start-indent.xml b/test/layoutengine/standard-testcases/block-container_start-indent.xml index 2a99e62fd..b21d332a3 100644 --- a/test/layoutengine/standard-testcases/block-container_start-indent.xml +++ b/test/layoutengine/standard-testcases/block-container_start-indent.xml @@ -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> |