aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremias Maerki <jeremias@apache.org>2006-08-02 09:28:51 +0000
committerJeremias Maerki <jeremias@apache.org>2006-08-02 09:28:51 +0000
commitc0be6dbf9aa9f300b7d7a76da49a9677e8a4a375 (patch)
tree098b62d79ef7ad9a62706f96e35b03544fbdedfb
parentf5abed20f9df95c08d962596c8683256b60ab502 (diff)
downloadxmlgraphics-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.java61
-rw-r--r--status.xml4
-rw-r--r--test/layoutengine/standard-testcases/block-container_start-indent.xml108
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>